from __future__ import annotations from pathlib import Path from .config import GeneratorConfig from .contract_fixture import build_contract_fixture from .models import DatasetBundle, business_digest def build_synthetic_dataset( config: GeneratorConfig, *, validate: bool = True, ) -> DatasetBundle: """Build the complete canonical synthetic shipyard dataset in dependency order.""" from .alternatives import generate_alternatives from .engineering import generate_engineering from .execution_quality import generate_execution_quality from .master_data import generate_master from .materials import generate_materials from .mrp import generate_mrp from .orders import generate_orders from .projects import generate_projects from .rag_skills import generate_rag_and_skills from .scenarios import generate_scenarios from .scheduler import generate_schedule from .sourcing import generate_sourcing bundle = build_contract_fixture(config) for generator in ( generate_master, generate_projects, generate_engineering, generate_materials, generate_mrp, generate_orders, generate_sourcing, generate_schedule, generate_execution_quality, generate_alternatives, generate_scenarios, generate_rag_and_skills, ): bundle = generator(bundle, config) bundle.metadata["businessDigest"] = business_digest(bundle) if validate: from .validation import validate_bundle report = validate_bundle(bundle, config) bundle.artifacts["validation-report"] = report if not report.get("valid"): raise ValueError( "synthetic shipyard dataset validation failed: " + ", ".join(report.get("blockingIssues") or ["unknown error"]) ) return bundle def generate_to_directory( config: GeneratorConfig, output: Path, *, validate: bool = True, ) -> dict: from .exporter import export_bundle bundle = build_synthetic_dataset(config, validate=validate) return export_bundle(bundle, config, output, incremental=config.incremental)