--- name: cad-router description: Route natural-language or image-guided CAD generation and modification, plus uploaded STEP/STP reconstruction and modification, across text-to-cad and SimpleCADAPI. Use unified executable DesignIR 3.0 in semantic-feature mode for authored models and SurfaceIR mode for uploaded STEP reconstruction, without teacher geometry dependencies, with independent validation and CAD Viewer review. --- # CAD Router Choose a backend before modeling, keep its source as the editable authority, and normalize every result into one handoff contract. `text-to-cad` is the backend-neutral orchestrator and DesignIR owner, not a backend that must win by default. `build123d` and SimpleCADAPI 2.0.2 are equal-priority authoring backends selected from evidence. Uploaded STEP reconstruction is executed by SurfaceIR and independently checked by both the existing geometry validator and SimpleCADAPI B-Rep comparison. ## Required workflow 1. Convert the natural-language or image-guided request into a brief: part type, dimensions, units, assembly relationships, editability, and validation targets. Every model uses DesignIR 3.0 plus STEP geometry. New text/image models use `fully_semantic_parametric`; uploaded STEP reconstruction uses `surface_parametric`. A generated semantic model may include a compiled SurfaceIR snapshot and then uses `hybrid_semantic_surface_parametric`, while its semantic layer remains authoritative. Never treat a teacher STEP or a single-case DesignIR as experience. Batch case JSON belongs to the separate CAD Experience plugin. Generation may consume only its promoted schema `2.0` generalized library. Never read `cad-experience-plugin/parser/input`, `parser/output`, or private case JSON during creation, modification, or reconstruction. 2. Run the deterministic router from this skill directory. For a new model it matches only the requested primary part against the SimpleCADAPI standard part catalog in `scripts/capabilities.json`. A catalog match selects SimpleCADAPI; every unmatched request selects text-to-cad/build123d. It does not read capability documents or let an LLM choose the backend: ```bash python3 scripts/route.py "" --explain ``` Add explicit signals when known: `--edit-source path/to/source`, `--existing-model`, or `--assembly`. The router auto-discovers the workspace `cad-experience-library/library.json`, infers an experience family and feature roles from the request, and emits a backend-neutral `design_plan`. When promoted `reconstruction_grammar` records match, instantiate their symbolic parameter roles, datum roles, canonical stages, and validation roles in the new part's DesignIR; fill values from explicit user dimensions first and dimensionless distributions second. Use `--experience-library`, `--experience-family`, or repeated `--experience-feature` only to override those defaults. For one uploaded STEP, execute the route rather than stopping after the routing decision: ```bash ../../.venv/bin/python scripts/route.py \ "重建上传的 STEP,并返回可修改参数" \ --edit-source /absolute/path/to/upload.step \ --task-dir /absolute/path/to/task \ --execute ``` This command must finish extraction, source-independent reconstruction, geometry acceptance, parameter perturbation acceptance, and artifact publication. A route decision alone is not a completed reconstruction. 3. Follow the selected route unless a hard environmental constraint makes it unavailable. If overriding it, record the reason in the task manifest. 4. Use the selected backend directly: - `build123d`: use `$cad` for custom brackets, housings, shafts, flanges, fixtures, source-level assemblies, and every new part outside the catalog. - `simplecadapi`: use the installed SimpleCADAPI 2.0.2 runtime only for catalogued standard primary parts: gears, ring gears, racks, cycloidal discs, ball bearings, roller-chain sprockets, bolts, and nuts. 5. When the route reports `requirement_refinement` or `visual_repair`, refine the brief, generate, execute, inspect multiple views, and repair no more than three visual mismatch rounds before asking the user. 6. Generate into a task-owned directory and start CAD Viewer with that task directory as `--dir`; do not expose the repository-wide fixture library for a task review. Write one DesignIR 3.0 `*.designir.json` per part and treat it as the editable geometry contract; keep `cad-task.json` as the execution record. Read `references/designir-3.0.md` for both semantic authoring and uploaded STEP reconstruction. `references/designir-2.0.md` is migration-only. Never change backend during an edit unless conversion is explicitly requested; modify the recorded authoritative layer. For a supplied STEP/STP, use `scripts/route.py --execute`; do not manually approximate the model when the executable adapter is available. The deterministic ingestion service extracts private teacher evidence into DesignIR 3.0. The independent rebuild subprocess receives the DesignIR and output path, never the STEP path. The acceptance stage alone receives both teacher and reconstruction. The DesignIR and generator must not import STEP, embed B-Rep or meshes, retain face references, or use the source model as a base feature. The acceptance agent alone compares the teacher and reconstructed STEP. Dense SurfaceIR may be stored losslessly in the DesignIR 3.0 `gzip+base64+json` envelope. CAD runtimes verify and decode it; LLM prompts receive only the semantic layer, edit interface, and validated parameter catalog, never the encoded geometry payload. Only expose parameters listed by `parameters.json`; every listed parameter has passed an isolated perturbation test. Other inferred names remain evidence, not a promised edit interface. The acceptance zone also runs the installed SimpleCADAPI 2.0.2 strict B-Rep comparator. `brep_exact` requires both the bidirectional geometric-set check and the geometry-labelled incidence graph check. A geometry-equal but topology-different result is returned as `review_required`, not silently described as an exact reconstruction. Failure or absence of the supplemental comparator must be recorded separately and must not be confused with a pass. 7. Validate against the brief. Run STEP geometry inspection and snapshot review. For experience-informed generation, record which generalized methods were applied, including the reconstruction grammar ID and instantiated symbolic roles. Validate against the user's brief and held-out targets, never against parameters exposed from the same source case. 8. Write a `cad-task.json` manifest using the contract in `references/backend-contract.md`. Hand the STEP artifact to `$cad-viewer` and return its live link. 9. Export URDF or MJCF only on explicit request. Run the deterministic DesignIR robot-description exporter lazily and return its portable ZIP with XML, STL visual/collision geometry, and export manifest. When authoritative assembly/joint/material evidence is absent, export one fixed `base_link`; never invent joints, limits, actuators, mass, or inertia. ## Routing rules - Prefer an explicit user backend when it can produce the editable STEP contract. - Preserve the backend of an explicitly supplied DesignIR or Python generator unless conversion is requested. - Do not assign a permanent default backend. Score native-source continuity, factory coverage, semantic/replay needs, geometry vocabulary, assembly needs, and validation needs. - For a new model, do not use semantic, graph, tolerance, assembly, or generic mechanical keywords to choose a backend. Use the standard-part catalog only. - Select SimpleCADAPI only when the primary requested part matches an entry in `scripts/capabilities.json`. Standard-part words used only as features, such as bolt holes or bearing seats, are excluded from that match. - Select build123d for every unmatched new request, including custom machined parts, source-driven assemblies, and freeform or surface-heavy work. - For uploaded STEP, report SurfaceIR as the effective reconstruction engine. The selected authoring backend describes future semantic repair/edit work; it is not allowed to read the teacher STEP during reconstruction. - Prefer source quality and future modification over the shortest first generation. ## V1 boundaries - Do not promise lossless conversion of feature history between backends. - Do not claim engineering certification, tolerance analysis, FEA, CAM toolpaths, or manufacturability without separate checks. ## References - Read `references/capabilities.md` when comparing or invoking backends. - Read `references/backend-contract.md` before writing a task manifest or adding another backend. - Read `references/designir-3.0.md` for semantic authoring, uploaded STEP reconstruction, and edits. - Read `references/designir-2.0.md` only when migrating legacy artifacts. - `scripts/capabilities.json` is the machine-readable V1 registry used by `scripts/route.py`.