Deterministic, locally-buildable ideas mined from each repo in
resources/cadbible/ and implemented as tested stdlib-only modules.
Repos that are paper reference-impls already covered by the 186-paper campaign
(see docs/corpus/paper-ideas.md) yield only genuinely-new implementation-level
ideas. Learned/proprietary/kernel-dependent work is logged research-heavy/external.
| Build idea | Status | Repository comparison |
|---|---|---|
| Model-free parametric voxel-object generators (table/chair/tower/... + categories) | implemented | procedural/alphacad_brick_templates.py |
| Fast geometry-only structural heuristics (floating/overhang/mass/entropy/symmetry) | implemented | quality/alphacad_structure_scoring.py |
| Cross-variant consensus + per-voxel ensemble confidence | implemented | exploration/alphacad_variant_consensus.py |
| Voxel-scene composition + clamped dimensional mutation | implemented | procedural/alphacad_voxel_compose.py |
| Text-intent -> brick-category router + prompt linter | implemented | spec/alphacad_intent_categories.py |
| BrickGPT core (brick/stability/buildability) | already in repo | papers 94/95 brick_/lego_ |
| LLM gen + CLIP + Three.js UI | research-heavy/external | trained models / UI |
| Build idea | Status | Repository comparison |
|---|---|---|
| Dimension measurement + placement geometry (generation) | implemented | drawings/autocad_dimension_geometry.py |
| Linetype dash-pattern application | implemented | drawings/autocad_linetype_dash.py |
| Bbox align + distribute | implemented | editing/autocad_layout_ops.py |
| Array/repetition patterns (linear/fit/grid/polar) | implemented | procedural/autocad_array.py |
| AutoCAD Color Index (ACI) table + nearest matcher | implemented | standards/autocad_aci_color.py |
| COM entity CRUD / layers / blocks / file IO | out-of-scope | proprietary COM host |
| Build idea | Status | Repository comparison |
|---|---|---|
| OBJ parse + size-invariant 8-corner camera rig | implemented | geometry/blenderllm_camera_rig.py |
| bpy-script static analyzer (syntax gate + AST op-sequence) | implemented | programs/blenderllm_bpy_script.py |
| CADBench task-complexity metrics (unit count/param density/entropy) | implemented | bench/blenderllm_complexity.py |
| CADBench criteria scoring | already in repo | bench/criteria.py |
| LLM inference + Blender render | research-heavy/external | trained model / runtime |
| Build idea | Status | Repository comparison |
|---|---|---|
| Correspondence-free inertia/principal-axis shape alignment (SolidAlign) | implemented | geometry/cadcoder_solidalign.py |
| Inertia-normalized symmetry-enumerated IoU / mesh sampling / eigensolver / CadQuery DSL | already in repo | solid_iou / mesh_sampling / e3dbench_umeyama / t2cq_* |
| Fine-tuned VLM + LLaVA training | research-heavy/external | trained model |
| Build idea | Status | Repository comparison |
|---|---|---|
| Fine-grained partial-token locate mask (component-level) | implemented | editing/cadeditor_partial_mask.py |
| Edit-type classification (add/delete/modify) + prefix-bucketed pairing | implemented | dataengine/cadeditor_edit_typing.py |
| Whole-token LCS masking / edit-pair filtering / SkexGen serialization | already in repo | locate_infill / edit_filters / paper campaign |
| LLM finetune + CLIP + OCC render | research-heavy/external | trained models |
Mined repos 1-5. Strong dedup: AlphaCAD (papers 94/95), CAD-Coder (VLM), CAD-Editor (ICML paper) all partly covered; extracted only genuinely-new implementation-level pieces. AutoCAD (COM wrapper) yielded the most net-new (drafting algorithms/dash/ACI). Per the no-README-during-campaign policy the suite count is tracked in audit/cadbible_progress.json.
| Build idea | Status | Repository comparison |
|---|---|---|
| Involute spur-gear geometry (radii, involute curve, rack cutter) | implemented | geometry/cadgpt_involute_gear.py |
| Gear-pair meshing + assembly placement (ratio, centre distance, mesh phase, twist) | implemented | geometry/cadgpt_gear_train.py |
| Standard ISO-54 gear-module series snapping | implemented | geometry/cadgpt_module_series.py |
| GPT agent + OpenSCAD render | research-heavy/external | trained model / host |
| Build idea | Status | Repository comparison |
|---|---|---|
| 2D drawing-command geometry (rectangle/ellipse/arc/polyline + lineweight snap) | implemented | drawings/cadmcp_drawing_commands.py |
| Coordinate/parameter regex extractor + command classification | implemented | programs/cadmcp_command_parser.py |
| MCP plumbing / COM driver / ACI / NL semantics | already in repo / out-of-scope | surfaces/mcp / autocad_aci_color / nlcad |
| Build idea | Status | Repository comparison |
|---|---|---|
| Shape-program representation / pose normalization / metrics / view lifting | already in repo (paper 84) | cad2program_* modules |
| ViT/InternVL VLM + website | out-of-scope | trained model / static site (nothing built) |
| Build idea | Status | Repository comparison |
|---|---|---|
| NACA 4-digit airfoil coordinate generator | implemented | geometry/cadam_naca_airfoil.py |
| OpenSCAD Customizer parameter parser | implemented | programs/cadam_scad_customizer.py |
| Cycle-safe conversation/branch message tree | implemented | agents/cadam_message_tree.py |
| Gear math | already in repo | cadgpt_involute_gear |
| React/Three.js UI + WASM engine | research-heavy/external | UI / kernel |
| Build idea | Status | Repository comparison |
|---|---|---|
| Tolerance-stack analyzer (worst-case/RSS/Monte-Carlo + Cpk) | implemented | verifiers/cadclaw_tolerance_stack.py |
| Static-frame beam screening (section props, torsion, deflection, motor torque) | implemented | quality/cadclaw_beam_screening.py |
| Clearance-shift suggester (interference -> fix vector) | implemented | verifiers/cadclaw_clearance_shift.py |
| Exploded-view geometry (radial burst + removal order) | implemented | geometry/cadclaw_explode.py |
| Claim/honesty text linter | implemented | quality/cadclaw_claim_audit.py |
| Interference boolean / STEP / FEA solver | research-heavy/external | kernel / FEA |
Mined repos 6-10. CAD-GPT surfaced involute-gear geometry (the harness only had a toothless blank); CADAM added the first aerodynamic geometry (NACA airfoil) + OpenSCAD-customizer parser; CADCLAW added tolerance stacking, beam screening, and exploded views. CAD2Program is a static site (paper 84 already covers it -> no build). Per the no-README policy the suite count is tracked in audit/cadbible_progress.json.
| Build idea | Status | Repository comparison |
|---|---|---|
| String-based CADTEST execution harness (run test as code string, AST model recovery, check() preamble, replay script) | implemented | bench/cadtb_exec.py |
| CADTEST predicate / suite / metrics / mutation analysis | already in repo (paper 169) | bench/cadtests_* |
| Build idea | Status | Repository comparison |
|---|---|---|
| Vectorized floorplan primitive graph (endpoint-KNN adjacency, 6-D node feature, perimeter formulas) | implemented | drawings/cadtransformer_primitive_graph.py |
| Length-weighted primitive-instance panoptic metrics (mask-free SQ/RQ/PQ + F1) | implemented | bench/cadtransformer_panoptic.py |
| Instance centroid-offset targets + vote-to-centroid clustering | implemented | reconstruction/cadtransformer_instance_offsets.py |
| Transformer/HRNet backbones | research-heavy/external | trained models |
| Build idea | Status | Repository comparison |
|---|---|---|
| Qt-free code-edit text ops (comment toggle, indent, EOL, gutter) | implemented | editing/cqeditor_code_edit.py |
| show_object result model (binding-name inference, seeded rand_color) | implemented | programs/cqeditor_show_object.py |
| Module-registry snapshot/restore sandbox | implemented | programs/cqeditor_module_sandbox.py |
| Qt/OCC viewer / debugger / inspector UI | out-of-scope | GUI |
| Build idea | Status | Repository comparison |
|---|---|---|
| CadQuery API reference/retrieval index | implemented | generation/cqask_api_reference.py |
| Code-gen scaffold/sanitizer | pending | agent hit session limit mid-write; follow-up |
| LLM | research-heavy/external | trained model |
| Build idea | Status | Repository comparison |
|---|---|---|
| CAD entity-selection heuristic (kernel-free edge selection) | implemented | geometry/cascade_entity_selector.py |
| Sketch-path sampler | pending | agent hit session limit mid-write; follow-up |
| OCC.js kernel / Three.js/Monaco UI | out-of-scope | kernel / UI |
Mined repos 11-15. CADTestBench (paper 169) + CADTransformer (CVPR) yielded implementation-level pieces; CQ-editor gave Qt-free text/module helpers. A session-limit interruption left CQAsk and CascadeStudio at module 1 each (module 2 pending as a follow-up); untested partials were removed. Per the no-README policy the suite count is tracked in audit/cadbible_progress.json.
| Build idea | Status | Repository comparison |
|---|---|---|
| Unit-aware length/angle expression evaluator (parser + dimensional type-checking) | implemented | numeric/codetocad_length_expression.py |
| Cardinal-direction landmark system (compositional anchors, bbox, nearest) | implemented | geometry/codetocad_cardinal_landmark.py |
| Relative/proportional dimension resolver | implemented | geometry/codetocad_axis_expression.py |
| General 4x4 transform stack (upstream is NotImplementedError stubs) | implemented | geometry/codetocad_transform_stack.py |
| Code-CAD operation schema + program type-checker | implemented | programs/codetocad_operation_schema.py |
| Blender/build123d backends | research-heavy/external | runtime |
| Build idea | Status | Repository comparison |
|---|---|---|
| 3D surface primitive fitting (plane/sphere/cylinder/cone LSQ + quadric distances) | implemented | geometry/complexgen_surface_fit.py |
| B-rep chain complex (EV/FE incidence + d1*d2=0 law + watertightness) | implemented | reconstruction/complexgen_chain_complex.py |
| Probabilistic-complex NMS + constraint repair | implemented | reconstruction/complexgen_complex_nms.py |
| .complex file format IO | implemented | reconstruction/complexgen_complex_io.py |
| Complex-structure + topology F1 metrics | implemented | bench/complexgen_complex_metrics.py |
| Transformer + Gurobi ILP | research-heavy/external | trained model / solver |
| Build idea | Status | Repository comparison |
|---|---|---|
| Exact numericalize/denumericalize affine families + NORM_FACTOR | implemented | reconstruction/deepcad2_numericalize.py |
| Arc macro decode (centre/radius recovery, bulge-aware bbox) | implemented | reconstruction/deepcad2_arc_macro.py |
| 17-column h5 vector layout with the RELEASED command index order | implemented | reconstruction/deepcad2_vector_layout.py |
| Official mask-gated ACC_cmd/ACC_param | implemented | bench/deepcad2_ae_accuracy.py |
| Command spec / sketch plane / profile assembly / Chamfer | already in repo | deepcad_* modules |
| Build idea | Status | Repository comparison |
|---|---|---|
| Arc vector<->geometry closed form + bulge-aware bbox + sampling | implemented | geometry/gencad2_arc_vector.py |
| Exact loop canonicalization (orientation repair + CCW enforcement) | implemented | reconstruction/gencad2_loop_reorder.py |
| Exact quantization affine constants | implemented | reconstruction/gencad2_sketch_quantize.py |
| CMD_ARGS_MASK loss masking + CCIP cross-modal InfoNCE | implemented | bench/gencad2_loss_masks.py |
| FID / retrieval / latent alignment / seq-len norm / synth-bal | already in repo | papers 90/91 |
| Build idea | Status | Repository comparison |
|---|---|---|
| FORMAT-v4 decomposition-graph parser + validator + build-wave scheduler | implemented | reconstruction/graphcad_knowledge_graph.py |
| Align/offset/polar placement solver | implemented | geometry/graphcad_align.py |
| Grid/polar pattern expansion | implemented | geometry/graphcad_pattern.py |
| Orientation/rotation directives -> matrices | implemented | geometry/graphcad_orientation.py |
| Graph -> typed CAD action-plan compiler + plan validator | implemented | reconstruction/graphcad_action_plan.py |
| CADBench corpus scoring protocol | implemented | bench/graphcad_cadbench_report.py |
| LLM stages + Blender + VLM judge | research-heavy/external | trained models |
Mined repos 16-20, the richest batch yet. ComplexGen filled a major gap: 3D surface primitive fitting (plane/sphere/cylinder/cone), which the harness lacked entirely (only 2D line/circle/arc). CodeToCAD gave units/landmarks/ transforms/operation-schema. DeepCAD + GenCAD (already-covered papers) still yielded implementation-level gaps from their REFERENCE CODE: DeepCAD's released command index order differs from the paper order our spec uses, a silent permutation for real .h5 data. Per the no-README policy the suite count is tracked in audit/cadbible_progress.json.
| Build idea | Status | Repository comparison |
|---|---|---|
| Joint-axis derivation from B-rep entity parameters + colinearity test | implemented | geometry/joinable_joint_axis.py |
| Joint transform algebra (axis alignment, rotation param, Householder flip) | implemented | geometry/joinable_joint_transform.py |
| Joint-type motion model (pose params, DOF projection, motion sampling) | implemented | geometry/joinable_joint_motion.py |
| Joint-prediction metrics (hit@top-k over entity pairs, precision curve, MRR, axis error) | implemented | bench/joinable_joint_metrics.py |
| B-rep joint entity features (type/area/convexity/dihedral + common-scale norm) | implemented | reconstruction/joinable_entity_features.py |
| Trained GNN + mesh search | research-heavy/external | trained model |
| Build idea | Status | Repository comparison |
|---|---|---|
| C++ header declaration parser | implemented | formats/ocp_cpp_header_parser.py |
| OCCT API catalog (class/method inventory, arity check, near-miss suggestions) | implemented | backends/ocp_occt_api_catalog.py |
| Generated bindings / CMake / pywrap / LIEF symbol dump | out-of-scope | build tooling |
| Build idea | Status | Repository comparison |
|---|---|---|
| Face identity across rebuilds (TOPOLOGICAL NAMING: fingerprint + provenance) | implemented | geometry/opencad_face_fingerprint.py |
| Numeric constraint diagnostics (Jacobian, rank, DOF, Gauss-Newton) | implemented | numeric/opencad_constraint_jacobian.py |
| Feature-tree rebuild engine (stale propagation, suppression, cascade guard) | implemented | state/opencad_feature_rebuild.py |
| Parametric expression evaluator + parameter table | implemented | numeric/opencad_param_expression.py |
| Synthetic analytic topology with semantic tags | implemented | geometry/opencad_synthetic_topology.py |
| Shape-level kernel preflight + error taxonomy | implemented | verifiers/opencad_kernel_preflight.py |
| Selector engine / op-log replay / typed registry | already in repo | cascade_entity_selector / opdag / cisp |
| OCCT backend + LLM agent + React viewport | research-heavy/external | kernel / model / UI |
| Build idea | Status | Repository comparison |
|---|---|---|
| OpenSCAD lexer + parser + typed AST + unparser | implemented | programs/scadlm_ast.py |
| Deterministic SCAD -> CSG evaluator (kernel-free geometry oracle) | implemented | geometry/scadlm_csg_eval.py |
| Static OpenSCAD validity gate (binary-free) | implemented | programs/scadlm_check.py |
| Binary-free SCAD geometry metrics (voxel IoU + failure reasons) | implemented | bench/scadlm_geometry_match.py |
| LLM + openscad binary + vision judge | research-heavy/external | model / binary |
| Build idea | Status | Repository comparison |
|---|---|---|
| 17-channel training-block codec (stdlib reimpl of a C++ TF op) | implemented | drawings/s2cadsig_block_codec.py |
| Sketch-op vocabulary + branch router | implemented | reconstruction/s2cadsig_op_router.py |
| Map -> CAD-parameter decoding (heat-map -> plane, camera-ray stroke lifting) | implemented | reconstruction/s2cadsig_param_decode.py |
| Sketching-in-context incremental state machine | implemented | editing/s2cadsig_session.py |
| Per-op evaluation metrics | implemented | reconstruction/s2cadsig_metrics.py |
| Trained CNN | research-heavy/external | trained model |
Mined repos 21-25 (~620 new tests). Highlights: OpenCAD gave the TOPOLOGICAL NAMING problem (face identity across rebuilds) + the numeric half of constraint solving; ScadLM yielded a full OpenSCAD parser + kernel-free CSG evaluator the source repo itself lacks (it shells to the openscad binary); JoinABLe filled the joint axis/transform/motion gap (harness had only DOF counts); OCP (a pure binding repo) still gave a C++ header parser + OCCT API catalog that guards kernel-call hallucination. Per the no-README policy the suite count is tracked in audit/cadbible_progress.json.
| Build idea | Status | Repository comparison |
|---|---|---|
| Concept template (parameterised sub-sketch, slots, interface, canonical signature) | implemented | reconstruction/sketchconcept_template.py |
| Concept library (dedup, hierarchical flattening, usage) | implemented | library/sketchconcept_library.py |
| Sketch -> concept decomposition + losslessness certificate | implemented | reconstruction/sketchconcept_decompose.py |
| DETERMINISTIC concept induction (MDL compression-gain mining) | implemented | library/sketchconcept_induction.py |
| Library compactness/coverage/compression metrics | implemented | bench/sketchconcept_metrics.py |
| Trained transformer | research-heavy/external | GPU model |
| Build idea | Status | Repository comparison |
|---|---|---|
| Type-pair DOF table + autoconstrain validity mask (CORRECTNESS FIX: nominal scalar was wrong) | implemented | reconstruction/sgraphs2_dof_mask.py |
| Onshape FeatureScript entity JSON schema + parser | implemented | formats/sgraphs2_onshape_json.py |
| Entity geometry evaluation + polyline sampling (wrap-aware arc midpoint) | implemented | drawings/sgraphs2_entity_render.py |
| Autoconstrain precision/recall metrics | implemented | bench/sgraphs2_autoconstrain_metrics.py |
| Flat offset-indexed corpus container (pickle-free) | implemented | formats/sgraphs2_flat_array.py |
| Taxonomy / graph / sequence | already in repo (paper 165) | sketchgraphs_* |
| Build idea | Status | Repository comparison |
|---|---|---|
| SkexGen token format (6-bit truncating quantization; differs from BOTH DeepCAD and GenCAD) | implemented | reconstruction/skexgen_token_format.py |
| 19-token extrude block (rotation MATRIX not Euler) | implemented | reconstruction/skexgen_extrude_tokens.py |
| CADparser decode + validity oracle | implemented | reconstruction/skexgen_sequence_decode.py |
| Canonical ordering by bbox + connectivity | implemented | reconstruction/skexgen_canonical_order.py |
| Branch-wise dataset dedup by token hash | implemented | bench/skexgen_dedup_hash.py |
| Disentangled code layout (topology/geometry/extrude books) | implemented | reconstruction/skexgen_code_layout.py |
| COV/MMD/JSD | already in repo | generative_brep_metrics |
| Build idea | Status | Repository comparison |
|---|---|---|
| Python object model + SCAD emitter (CLOSES THE OPENSCAD LOOP with scadlm parse/eval) | implemented | programs/solidpy_scad_emit.py |
| Sweep/loft a 2D section along a 3D path | implemented | geometry/solidpy_extrude_along_path.py |
| 2D polygon offset + tangent-arc filleting | implemented | geometry/solidpy_path_offset.py |
| Interpolating Catmull-Rom splines (all prior splines were approximating) | implemented | geometry/solidpy_catmull_rom.py |
| Helical screw threads | implemented | geometry/solidpy_screw_thread.py |
| Bbox algebra + planar body splitting with dowel pins | implemented | geometry/solidpy_bounding_box.py |
| Bill of materials from the object tree | implemented | programs/solidpy_bom.py |
| py_scadparser (PLY) | already in repo | scadlm_ast (dependency-free) |
| Build idea | Status | Repository comparison |
|---|---|---|
| Primitive-as-point 4-anchor representation | implemented | drawings/sympoint_primitive_points.py |
| 6-D point feature + normalization | implemented | drawings/sympoint_point_features.py |
| Score-gated GT-driven panoptic eval + thing/stuff split | implemented | bench/sympoint_panoptic_thing_stuff.py |
| Point-wise semantic eval with ignore label + fwIoU | implemented | bench/sympoint_pointwise_eval.py |
| Instance-queue CutMix augmentation | implemented | drawings/sympoint_instance_cutmix.py |
| Winner-takes-all query decoding | implemented | drawings/sympoint_query_grouping.py |
| Endpoint-KNN graph / FPS | already in repo | cadtransformer / cadrille |
Mined repos 26-30 (~660 new tests, the biggest batch). SolidPython CLOSED THE OPENSCAD LOOP (emit -> parse -> evaluate offline) and added sweep/loft, 2D offset+fillet, interpolating splines, and screw threads, all previously absent. SketchGraphs' reference impl exposed a CORRECTNESS FIX: constraint DOF depends on the entity type-pair, not a nominal scalar. SkexGen's quantization differs from both DeepCAD and GenCAD (three incompatible schemes now modeled). SketchConcept yielded a deterministic concept-induction miner the source repo lacks (it learns end-to-end). Per the no-README policy the suite count is tracked in audit/cadbible_progress.json.
A 137-line Streamlit app (prompt -> GPT-4 -> OpenSCAD -> STL -> GLB) with no geometry code of its own. Its value is the pipeline hops it delegates, three of which the harness had no stdlib coverage for.
| Build idea | Status | Repository comparison |
|---|---|---|
| Stdlib STL codec: binary+ASCII parse/write, format detection, normal recompute, volume/area/bounds | implemented formats/t2cdean_stl_codec.py |
repo calls trimesh.load(); harness had only OCCT-backed STL import (ingest/import_brep.py) |
Binary glTF (.glb) writer: GLB 2.0 chunk container, 4-byte alignment, vertex welding, area-weighted normals, POSITION min/max, parse_glb inverse, base64 data-URI |
implemented formats/t2cdean_glb_writer.py |
repo delegates to trimesh; harness had ZERO glTF/GLB code |
OpenSCAD CLI export planner: format/extension table, 2D-vs-3D check, -D literal quoting, content-addressed artefact naming, cache key, stderr classifier catching exit-0 empty geometry |
implemented fabrication/t2cdean_openscad_export.py |
repo's convert_openscad_code_to_stl uses uuid4 (cache-miss bug) + check=True (misses empty-geometry failure); harness had SCAD language tooling but no CLI/export layer |
| LLM-reply -> compilable SCAD: fenced-block extraction (tolerating truncation), language-tag ranking, prose stripping, strict refusal guard | implemented programs/t2cdean_scad_extract.py |
repo relies on prompt wording alone; harness had only a private _strip_code_fences |
| Streamlit UI, PyVista render, model-viewer embed, OpenAI client | out-of-scope/external | UI + trained model |
Reference impl of paper 171 (already covered by programs/t2cq_*). Yielded
three implementation-level pieces the paper review missed.
| Build idea | Status | Repository comparison |
|---|---|---|
Raw-generation -> runnable script cleaning (EOS truncation, ### Response: de-prefix, fence strip, export canonicalisation) |
implemented programs/t2cq2_output_cleaning.py |
inference/step2_clean_run_CadQuery; nothing in the harness did this |
| Exact eval protocol: centroid + max-bbox-extent normalisation, CD = mean(d^2)+mean(d^2) x1000, F1 @ 0.02, volumetric IoU @ pitch 0.02, judge Match-Yes gate, mean+median | implemented bench/t2cq2_eval_protocol.py |
differs from bench/cad_geometry_protocol.py, which uses unit-sphere normalisation and has no F1/IoU/judge gate; different numbers on the same meshes, so both now coexist |
| Dataset layer: JSONL input/output schema, Instruction/Response template, 2-attempt execution-feedback retry (last-5-stderr-lines), DeepCAD UID bucketing | implemented dataengine/t2cq2_dataset.py |
data_annotation/gemini_pipeline.py; no prior T2CQ record schema |
| DeepCAD-JSON -> CadQuery translation; CadQuery API subset; Invalid-Rate | already in repo (paper 171) | reconstruction/t2cq_translate.py, programs/t2cq_ast.py, programs/t2cq_validity.py |
| Finetuning six LLMs, Gemini annotator/judge, Blender render | research-heavy/external | trained model / GPU / renderer |
Reference impl of papers 172/173 (already covered by dataengine/text2cad_*,
reconstruction/text2cad2_*, bench/text2cad_sequence_f1.py). Four new pieces.
| Build idea | Status | Repository comparison |
|---|---|---|
Exact CADSequence.to_vec/from_vec codec: chained closed loops (line = 1 token, arc = 2, circle = centre+pt1), 11-token extrusion block, START wrapper, pad to 272, flag_vec/index_vec |
implemented reconstruction/t2c3_cad_vec_codec.py |
reconstruction/text2cad2_sequence_tokens.py has the ids but serialises every curve point (2N tokens); the real codec is chained (N tokens) |
Exact eval protocol (generate_report): geometric bbox-L2 loop matching, curve re-matching, Null 4th class, per-primitive P/R/F1 from a 4x4 confusion matrix, macro/micro, extrusion count F1 + L1 parameter report rescaled by 1/0.75 |
implemented bench/t2c3_eval_protocol.py |
bench/text2cad_sequence_f1.py matches loops by primitive-multiset cost, has no Null class and no extrusion parameter report |
| Minimal-JSON schema (LLM-facing doc: part_N/face_N/loop_N, Euler angles in degrees, negative-zero-normalised 4-decimal rounding) + inverse parser | implemented dataengine/t2c3_minimal_json_schema.py |
dataengine/text2cad_minimal_metadata.py models the transformation, never the document schema/round-trip |
Training token accuracy (AccuracyCalculator: min-length truncation, target>6 mask, per-slot abs(pred-gt) < 3) |
implemented bench/t2c3_token_accuracy.py |
bench/deepcad2_ae_accuracy.py scores 17-column rows via CMD_ARGS_MASK; different stream, different masking rule |
| L0-L3 prompt taxonomy, prompt generator, minimal metadata, token id table, Invalidity Ratio, 8-bit quantisation | already in repo (papers 172/173) | Text2CAD reuses DeepCAD quantisation maps verbatim (unlike SkexGen/GenCAD) |
| Trained Transformer, BERT encoder, OCC BRep/STEP/STL export, Chamfer | research-heavy/external | GPU / OCC |
Finding: the Text2CAD sequence layout differs materially from the paper Table 3: loops are closed and chained, so curve token cost is N, not 2N, and a circle is identified structurally by being the only curve in its loop.
Reference impl of the UV-Net paper, but its core representation was genuinely absent: the harness could describe a B-rep topology but had no way to attach sampled geometry to it.
| Build idea | Status | Repository comparison |
|---|---|---|
| Face UV-grid: per-face regular sampling of the parametric domain -> 7-channel (x,y,z,nx,ny,nz,mask) tensor over plane/cylinder/cone/sphere/torus/NURBS | implemented geometry/uvnet_uv_grid.py |
process/solid_to_graph.py calls occwl uvgrid; rebuilt closed-form and OCC-free, NURBS delegated to geometry/nurbgen_surface.py |
| Trimming mask / OCC TopAbs_State in the parameter plane: even-odd point-in-loop with hole support -> IN/OUT/ON | implemented geometry/uvnet_uv_grid.py |
mirrors visibility_status; no OCC |
Bridge from fitted primitives to sampleable surfaces (surface_from_fit) |
implemented geometry/uvnet_uv_grid.py |
not in the repo; composes geometry/complexgen_surface_fit.py (fit -> sample -> refit round-trips in tests) |
| Edge U-grid: per-edge sampling -> 6-channel (x,y,z,tx,ty,tz) for line/circle/ellipse/polyline/NURBS, degenerate-edge filter, reversed-coedge grid, arc-length + tangent-turning | implemented geometry/uvnet_u_grid.py |
occwl ugrid + the cone-apex has_curve filter |
| Face-adjacency graph with UV-grid node features and U-grid edge features, seam self-loops, bidirectionalisation | implemented reconstruction/uvnet_face_adjacency.py |
occwl face_adjacency + DGL; rebuilt without OCC/DGL. Existing reconstruction/cadparser_brep_graph.py uses categorical features, not sampled geometry |
| Mask-aware normalisation: bbox over only in-face grid points, one isotropic solid-level 2/max(diag) transform across faces and edges, invertible | implemented geometry/uvnet_normalize.py |
datasets/util.py normalises per-grid; solid-level keeps the graph geometrically consistent |
| Deterministic axis-aligned quarter-turn frames: the 12 (axis, k*90deg) rotations enumerated instead of drawn at random | implemented geometry/uvnet_normalize.py |
replaces get_random_rotation (scipy + random.choice) with a reproducible enumeration; integer-entry orthonormal matrices |
| CNN/GNN encoders, DGL I/O, STEP loading, SolidLetters font pipeline | research-heavy/external | torch / dgl / occwl / OCC |
Not topological naming (despite the name): the code+data release for What's In
A Name? Evaluating Assembly-Part Semantic Knowledge in Language Models through
User-Provided Names in CAD Files (JCISE 2023). Zero overlap with
geometry/opencad_face_fingerprint.py, which solves persistent entity
identity; this is the natural-language semantics of user-authored names.
| Build idea | Status | Repository comparison |
|---|---|---|
| Default-CAD-name detector + name normaliser (camelCase/snake/instance-suffix tokenizer, corpus dedup, 5 stratification flags) | implemented library/wian_name_normalizer.py |
repo ships only the filtered result; the filter itself is absent. Rebuilt as a default-name grammar over Onshape/SolidWorks/Fusion/FreeCAD stems |
| Two-Parts benchmark generator + metrics (token-disjoint positives, global co-occurrence table, non-co-occurring resampled negatives, class balancing; accuracy, threshold sweep, tie-aware ROC-AUC) | implemented bench/wian_partname_pairs.py |
reimplements generate_pairs.py minus numpy/nltk/pandas; sklearn/torch metrics rewritten in stdlib |
| Corpus templating + Missing-Part / Document-Name task builders + pure-Python stratified 3-way split (largest-remainder per stratum) + acc@k/MRR | implemented bench/wian_partname_tasks.py |
replaces generate_corpus.py + create_train_val_test_split.py (sklearn StratifiedShuffleSplit) deterministically |
| Training-free PPMI/SPPMI part-name vector space (token co-occurrence across assembly parts, mean-pooled embeddings, cosine pair scorer, candidate ranker, TF-IDF control) | implemented library/wian_partname_ppmi.py |
genuinely new: every encoder in the paper (BOW, FastText, TechNet, DistilBERT) needs training or downloaded weights. This is the closed-form count-based baseline the paper lacks, and it makes all three tasks runnable locally with no model |
| DistilBERT MLM finetuning, SetTransformer, FastText/word2vec, TechNet embeddings | research-heavy/external | trained models / GPU / downloaded weights |
Five repos, 416 new tests. Two reference-impl repos (32, 33) correctly yielded
only implementation-level gaps, but those gaps included two protocol
contradictions worth keeping: the Text-to-CadQuery eval normalisation differs
from the existing bench/cad_geometry_protocol.py, and the real Text2CAD
sequence layout is chained (N tokens/loop), not the 2N its own paper implies.
UV-Net contributed the largest genuinely-new capability (sampled-geometry B-rep
graphs); Text-to-CAD-dean, despite being a hobby app, closed three format gaps
(stdlib STL, GLB, OpenSCAD CLI export). Per the no-README policy the suite count
is tracked in audit/cadbible_progress.json.
AngelCAD (C++/AngelScript CSG language). Its real contribution is that the CSG
language is statically typed: solid and shape2d are distinct types, so the
2D/3D mixing bug that OpenSCAD (and every LLM writing OpenSCAD) commits silently
is a compile error there.
| Build idea | Status | Repository comparison |
|---|---|---|
| Typed CSG AST + 2D/3D dimension checker (typed opAdd/opSub/opAnd/opMul, extrudes the only 2D->3D ops, projection2d the only 3D->2D one) with structured diagnostics (dim-mismatch, arity, param missing/type/range, index-range, face-degenerate, unknown-op) | implemented programs/angelcad_typed_csg.py |
from as_csg.cpp register_types + shape/solid/shape2d headers. Genuinely different from the harness's untyped OpenSCAD front end (programs/scadlm_ast.py, geometry/scadlm_csg_eval.py), which cannot catch circle(3) + cube(2) |
tmatrix value type: composable 4x4 transforms, translate/rotate/scale/mirror, hmatrix frame orthonormalisation, xdir/ydir/zdir/origin, exclusive deg/rad angles |
implemented programs/angelcad_typed_csg.py |
complements geometry/codetocad_transform_stack.py (different convention; here the matrix is a first-class DSL node) |
XCSG XML CSG-tree interchange (read+write), transform composition collapsed at serialisation, byte-stable output, exact dumps(loads(x)) == x |
implemented formats/angelcad_xcsg_xml.py |
harness had mesh formats (STL/GLB) and OpenSCAD text but no typed CSG tree format |
| AMF (ISO/ASTM 52915) codec: unit-bearing indexed XML mesh, multi-object/multi-volume lumps, metadata, plain-XML and reproducible-ZIP flavours, lump fusion, per-lump vertex compaction | implemented formats/angelcad_amf_codec.py |
new format (harness had STL + GLB only) |
Polyhedron construction/validation + mass properties: Newell normals, verify (index range, degenerate/repeated/zero-area/non-planar faces, boundary edge, non-manifold edge, inconsistent orientation, unused vertex, inward winding), signed volume, area, centroid, inertia tensor (tet decomposition + parallel axis), flip/orient |
implemented geometry/angelcad_polyhedron.py |
nothing in the harness checked manifoldness or orientation, or computed inertia |
Kernel-free bounding-box propagation over the CSG tree (per-operator rules: union/hull enclose, difference bounded by first operand, intersection = overlap, minkowski = box sum, extrudes lift 2D->3D, transform re-encloses 8 corners) + fits_within build-volume check + is_provably_empty |
implemented geometry/angelcad_csg_boundingbox.py |
distinct from geometry/solidpy_bounding_box.py (point-list boxes + print-bed splitting, no per-operator CSG rules). Gives a free pre-kernel gate |
OpenSCAD .csg emission, csgfix/dxfread/polyfix, AngelView GUI, OCCT boolean engine |
already in repo / external | programs/solidpy_scad_emit.py, formats/dxf_contract.py; kernel/UI/fonts |
arcs (Michael-F-Bryan): a 2D CAD framework in Rust on an ECS architecture. The
ECS/rendering layer is app plumbing; the geometry core filled five real gaps.
| Build idea | Status | Repository comparison |
|---|---|---|
| Ramer-Douglas-Peucker polyline decimation (cross-product perpendicular distance, degenerate-base fallback, first-max split for determinism, endpoint preservation) | implemented geometry/arcs_polyline_simplify.py |
harness only mentioned Douglas-Peucker in a vision/rastercad_vectorize.py docstring; no implementation existed |
| Closest-point queries with multiplicity (ONE/MANY/INFINITE): clamped segment projection, arc radial projection, exact endpoint-tie detection, polyline variant | implemented geometry/arcs_closest_point.py |
harness had only geometry/joinable_joint_axis.closest_point_on_line (unclamped, 3D infinite line, single result). Also supplies a branch-cut-safe contains_angle (the Rust version compares raw angles and breaks across +/-pi) |
Sagitta/chord-tolerance arc tessellation: theta = 2*acos(1 - tol/R), N = ceil(sweep/theta), inverse chord_error(N), degenerate guards |
implemented geometry/arcs_chord_tolerance.py |
harness had only fixed-count sampling (geometry/gencad2_arc_vector.sample_arc_points(n=32)); no tolerance-driven segment count |
Viewport model: drawing-space <-> canvas-space affine (y-flip, pixels-per-unit, centred window), invert/compose, pixel-vs-drawing Dimension, zoom/pan, visible bounds, zoom-to-fit |
implemented drawings/arcs_viewport_transform.py |
no world<->screen viewport existed (vision/cvcad_pixel_calibration is a camera scale estimator; drawings/cad2program_canvas_layout lays out sheets) |
| AABB quadtree spatial index: insert/modify/remove, query_point(p, radius), query_region, straddling items held at the parent, world auto-grow | implemented geometry/arcs_quadtree_space.py |
harness had no spatial index, only ingest/spatial_order.morton2 (z-order key, no queries) |
| Arc-from-three-points / circumcentre / orientation predicate; exact arc bbox; affine transforms | already in repo | bench/mrcad_metrics, geometry/euclid_validity.orient, geometry/gencad2_arc_vector.arc_bbox |
| ECS storage, flagged-storage change events, piet canvas rendering | out-of-scope | specs/piet plumbing |
Upstream bug not inherited: BoundingBox::intersects_with in the Rust source
is an acknowledged stub (// FIXME) that delegates to fully_contains, so
overlapping-but-not-contained boxes are silently missed. The port implements the
real separating-axis test and pins it with a regression test.
A CAD-generation benchmark. Seven modules, each built because its metric definition differs from an existing harness metric rather than duplicating it.
| Build idea | Status | Repository comparison |
|---|---|---|
Mesh-derived solid Betti numbers (union-find components + even-odd ray-cast parity + b1 = b0 + b2 - chi/2) and topology score exp(-alpha*abs(log((c+1)/(g+1)))), alpha=2, aggregated as a product |
implemented bench/cgb_mesh_betti.py |
bench/topodiff_topology_consistency.py computes Betti from voxels and scores exact-match indicators; bench/evocad_topology_metrics.py only compares Euler chi. Differs: graded log-ratio (2 vs 4 holes -> 0.36, not 0.60) and product aggregation, so one wrong invariant collapses the axis |
| Interface match: keep-out/keep-in sub-volume contract, bounded pose search (deterministic Halton grid, saturation early-exit), IoU pass/fail ramp (>=0.95 -> 1.0, <=0.80 -> 0.0, linear), group = min of features, sample = mean over groups | implemented bench/cgb_interface_match.py |
nothing modelled keep-in/keep-out regions or min-then-mean aggregation; bench/solid_iou.py is a raw best-IoU over axis alignments |
CAD Score composition: validity as a hard gate, 0.4/0.4/0.2 generation vs 0.6/0.3/0.1 editing weights, missing axes renormalize the weights, editing shape renormalized against the no-op baseline max(0,(s-b)/(1-b)) |
implemented bench/cgb_cad_score.py |
bench/criteria.py, muse_scorecard.py, t2cadbench_scorecard.py do weighted aggregation but none gates on validity, renormalizes over absent axes, or anchors an edit metric to the no-op |
| Run aggregation + leaderboard: valid/invalid/missing trichotomy, zeros included in the aggregate (the anti-gaming rule), validity_rate, open per-task-type buckets, deterministic ranking | implemented bench/cgb_run_summary.py |
bench/runner.py, graphcad_cadbench_report.py aggregate but none models "missing candidate" as distinct from "invalid" nor forces non-scorable samples to zero |
| Validity gate + advisory tier: BREP/watertight/manifold gate; advisory-only flags (min face area, face aspect, BREP tolerance) that flag fragile geometry but never move the score | implemented verifiers/cgb_validity_gate.py |
verifiers/geometry.py:BRepValidityCheck reports validity as a diagnostic (no gate, no advisory tier) |
Submission contract: fixed candidate names, empty file != candidate, folders with no candidate preserved as missing, meta.json required keys, agree_to_publish defaults false and blocks acceptance |
implemented dataengine/cgb_submission_package.py |
no submission/packaging contract existed |
| Canonical-pose contract: bbox centre at origin, extents ordered Lx>=Ly>=Lz, reference face on z=-Lz/2, canonicalization via a proper rotation (det +1, never a mirror), symmetry-ambiguity flag | implemented quality/cgb_canonical_pose.py |
bench/cadrille_orientation_align.py brute-forces 24 rotations against a target by Chamfer; no target-free canonical frame or ambiguity flag |
| Open3D ICP alignment, manifold3d IoU, renders, LLM baseline agent | research-heavy/external | kernel / ICP / renderer / LLM. The deterministic scaffolding around them is built above |
CadHub (RedwoodJS code-CAD sharing platform). The web app is out of scope; the mineable core is its multi-language code-CAD abstraction layer.
| Build idea | Status | Repository comparison |
|---|---|---|
| Code-CAD language capability matrix / adapter registry (extension, entry file, execution model, artifact kinds, mesh export, parameter flavour, diagnostic dialect; queries + gap explanation) | implemented adapters/cadhub_language_registry.py |
CadHub encodes this implicitly across cadPackages/index.ts + 4 controllers + 4 Dockerfiles; harness had adapters/base.py (live-CAD-app protocol) but no per-language code-CAD matrix |
Multi-language structured diagnostic parser (OpenSCAD / CadQuery traceback / JSCAD JS stack / curv) -> Diagnostic(severity, file, line, column, message) + sandbox-path scrubbing + caret source annotation |
implemented programs/cadhub_diagnostics.py |
CadHub only regex-strips the tmp path; the message stays opaque. Harness had OpenSCAD-only line-bucket classification (fabrication/t2cdean_openscad_export.classify_result); no line/column extraction, no other dialects |
| Unified cross-language customizer parameter schema (OpenSCAD manifest / JSCAD getParameterDefinitions / CadQuery --getparams -> one neutral model) + value validation (clamp/truncate/enum-reset with issue reports) + params.json writer | implemented programs/cadhub_param_schema.py |
harness had programs/cadam_scad_customizer.py (OpenSCAD source annotations only); no manifest ingestion, no neutral model, no value validation |
| Render-request canonicalisation + cache key: camera quantisation to 1 dp so orbit jitter hits the same cache entry, DPR viewport sizing, per-language settings whitelist, sha256 key | implemented backends/cadhub_render_request.py |
harness had only a CLI-export plan key (source+format+defines), no preview/camera/viewport request model |
| Single-blob artifact+metadata envelope codec (gzipped, sentinel-delimited) with lenient decode | implemented backends/cadhub_concat_payload.py |
ports runScad.ts. Two hardenings: split on the LAST sentinel (binary STL can contain it by chance) and mtime=0 gzip so blobs are content-addressable |
| Docker/lambda runners, Prisma schema, React IDE, auth | out-of-scope | web-app/deployment surface |
A corpus of 21 real community CadQuery programs. Valuable not as a library but as evidence of how the API is actually used.
| Build idea | Status | Repository comparison |
|---|---|---|
| Deterministic CadQuery API-usage profiler (ast-based: method counts, positional-arity histograms, kwargs, chain shapes, selector literals) + diff against a declared method table -> unknown-method and arity-violation reports | implemented programs/cqcontrib_api_profile.py |
harness had no API-surface profiler; programs/t2cq_ast.py only hard-codes CHAIN_METHODS |
CadQuery string-selector DSL: tokenizer + recursive-descent parser + evaluator over face/edge sets (>Z, <Y, >Z[1], |Z, #Z, +Z, %CIRCLE, not/and/or/exc, parens) |
implemented geometry/cqcontrib_selector_dsl.py |
selectors appear 100+ times across the examples; no selector parser existed anywhere in the harness |
| Hole feature geometry: hole/cboreHole/cskHole axial profiles, countersink-depth closed form, exact solid-of-revolution volumes, wall break-through predicate | implemented geometry/cqcontrib_hole_features.py |
library/parts.py mentions a bearing counterbore pocket as a recipe; no general cbore/csk profile geometry existed |
| Parametric enclosure/lid recipe as pure geometry: fillet-ordering rule (larger radius first), validity predicates, inner shell dims, screw-post centres, lid split z + lip footprint, exact rounded-box volumes | implemented geometry/cqcontrib_enclosure.py |
distils Parametric_Enclosure.py + Remote_Enclosure.py; no enclosure/lid derivation module existed |
| Loft/sweep between profiles; 2D offset+fillet; polar/rect arrays | already in repo | geometry/solidpy_extrude_along_path.py, geometry/solidpy_path_offset.py, procedural/autocad_array.py |
| Assembly constraint solving, DXF export, makeRuledSurface, parametricCurve threads | external | needs the real CadQuery/OCCT runtime |
Correctness finding against programs/t2cq_ast.py (profiling all 21 programs,
112 distinct methods):
- Arity bug, fixed:
moveTowas declared(2, 2), but CadQuery's signature ismoveTo(x=0, y=0)and the corpus calls it with one argument, sovalidate()was rejecting valid programs. Widened to(0, 2)with regression tests. - Unknown methods (corpus counts):
val(31),constrain(23),add(20),transformed(14),parametricCurve(9),tag(9),rarray(8),end(8),section(6),eachpoint(5),shell(5),toPending(5),vals(5),cboreHole(4),polarArray(4),split(4),makeRuledSurface(4),located(4),makePlane(4),exportDXF(5).shell,loft,cboreHole,cskHole,polarArray,rarray,splitare core fluent modelling methods the harness AST does not know. NOT silently widened:t2cq_astis scoped to the paper's CadQuery subset by design, and expanding its notion of "valid" would change what the paper-comparison numbers mean. Left as an open scope decision.
Five repos, 515 new tests. The batch's best idea is angelcad's typed CSG: a
dimension checker that catches circle(3) + cube(2) with zero geometry, which,
combined with kernel-free bbox propagation, gives a cheap pre-kernel verifier
tier (provably-empty intersections, does-not-fit-the-printer) the harness lacked.
Three repos that looked out-of-scope (a Rust ECS app, a Redwood web app, a folder
of examples) each hid a real gap: no spatial index / no RDP / no viewport; no
multi-dialect diagnostics; no selector DSL and no API-usage evidence.
Separately, a latent suite bug surfaced during this batch's recount: seven
early-campaign test files were written as bare pytest functions, which
python -m unittest never collects, so 26 assertions had never executed. All 26
pass on first real execution (no module bug was hiding); 93 tests now run where 0
did, and tests/test_suite_collectable.py fails loudly if a non-collectable test
file is added again. Suite: 12,782 tests, zero failures.
This batch was interrupted once by a session limit and resumed after reset; the partial-then-clean recovery is documented in the batch-8 close note. Two of the corpus's heaviest repos land here (CadQuery itself and Curv).
The CadQuery library. Geometry delegates to OCCT (external); the pure-Python selector/plane/state/assembly/export layers were mined. Profiling the real selector grammar against the harness's own DSL surfaced seven divergences.
| Build idea | Status | Repository comparison |
|---|---|---|
Programmatic Selector object algebra (composable &/+/- operators; NearestToPoint, BoxSelector with XOR containment + bbox mode, Direction/Parallel/Perpendicular, TypeSelector, Nth-with-tolerance-clustering: Radius/Length/Area/CenterNth, DirectionMinMax, DirectionNth) |
implemented geometry/cq_selector_algebra.py |
harness had geometry/cqcontrib_selector_dsl.py (string parser only); the object algebra it lacked, with identity-based order-preserving set combiners |
| Grammar-faithful selector-string compiler targeting the object algebra | implemented geometry/cq_selector_grammar.py |
fixes 7 documented divergences of cqcontrib_selector_dsl from the real grammar (see finding) |
CadQuery Plane named-preset frame algebra (12 presets, toWorld/toLocalCoords, rotated via Rodrigues, setOrigin2d, tolerant equality) |
implemented geometry/cq_plane_frame.py |
geometry/codetocad_transform_stack.py is a generic 4x4 lib; new is the CAD-specific named-plane preset table + world/local convention |
| Workplane pending-model state-transition validator (edges->wires->solids; catches extrude-with-no-wire, unfused-edges, close-empty-path, loft<2, boolean-no-base, cross-plane combine) + ast chain extractor | implemented programs/cq_workplane_state.py |
programs/t2cq_ast.py does arity/varref only; new is the semantic pending-wire/edge state layer, a validation advance beyond arity |
| Assembly 6-DOF constraint algebra + Grubler mobility well-posedness (unary/binary kinds, DOF-removed table, under/well/over classification, redundant-constraint + no-anchor detection) | implemented numeric/cq_assembly_dof.py |
reconstruction/sgraphs2_dof_mask.py / opencad_constraint_jacobian are 2D sketch DOF; new is 3D rigid-body assembly DOF |
| Orthographic-projection SVG exporter (camera-basis projection, M/L path emission, exact getSVG bbox-fit unitScale/translate, visible/hidden styling) | implemented formats/cq_svg_projector.py |
harness had AMF/DXF/STL/GLB but no SVG exporter; the OCCT HLR pass is external, the projection+fit+emission algebra is reproduced |
| OCCT booleans/fillets/lofts, scipy constraint numerics | external | kernel / solver |
Correctness finding (7 divergences of cqcontrib_selector_dsl from CadQuery's
real _makeGrammar), encoded in GRAMMAR_FINDINGS:
notprecedence inverted (real bug): CadQuery listsnotlast in itsinfix_notation, making it the loosest operator, sonot >X and #XYmeansnot(>X and #XY). The DSL parsesnotat tightest binding, giving(not >X) and #XY. The result sets differ. The new compiler reproduces the correct loosest-notprecedence.- Center-Nth
>>/<<missing (the DSL tokenizes only single>/<). - Named views
front/back/left/right/top/bottommissing. - Bare direction (
X,(1,0,0)) rejected though valid upstream. - Compound axes
XY/XZ/YZrejected. exceptspelling unsupported (CadQuery accepts bothexcandexcept).- Phantom binary
+/-/*advertised in the DSL docstring but absent from the real grammar and unimplemented in the DSL itself.
Community plugins. Two modules committed in the first (interrupted) pass (teardrop profile, heat-set bore schedule); two more after resume.
| Build idea | Status | Repository comparison |
|---|---|---|
| Overhang-safe teardrop hole profile (self-supporting, avoids >45deg unsupported arcs) | implemented geometry/cqplug_teardrop_profile.py |
printability-aware variant of a plain hole; no equivalent existed |
| Heat-set insert bore schedule keyed to screw designation | implemented standards/cqplug_heatsert_schedule.py |
library/parts.py had only a bearing-pocket recipe |
Volumetric region selectors (infinite/finite cylinder, hollow cylinder, sphere, hollow sphere): keep shapes whose centre lies inside a solid via axis-projection (h, rho) test |
implemented geometry/cqplug_region_selectors.py |
cqcontrib_selector_dsl / cascade_entity_selector do direction/size intent; neither has a point-in-solid test. This is the more_selectors addition; re-mined correctly after the prior partial failed 5 tests |
| Bevel-gear cone geometry + spherical involute + meshing-pair pitch cones (delta_b, face/root cones, delta_p1 from shaft angle, R from module) | implemented geometry/cqplug_bevel_gear.py |
geometry/cadgpt_involute_gear.py is planar spur only; cadgpt_gear_train.bevel_scale is a linear-extrude taper approximation. The plugin's planar Gear class duplicates cadgpt_involute_gear -> skipped |
| localselectors (named-view remap, centre-nth) | skipped (low-value) | thin remap over the existing DSL; centre-nth duplicates DirMinMax index grouping |
| apply_to_each_face, fragment, freecad_import, cq_cache | external | OCCT-runtime iteration/boolean/import or a file cache |
CoMeT (Cognitive Memory Tree): a lossless structured-memory substrate for LLM agents, deployed behind an autonomous-CAD stack, in-domain for the harness's own memory layer. Two modules committed pre-interruption, three after resume.
| Build idea | Status | Repository comparison |
|---|---|---|
| Dedup/merge/tag-normalise/prune consolidation sweep | implemented dataengine/comet_memory_consolidation.py |
new memory maintenance pass |
| Dual-channel WHAT/WHEN fusion + graph 2-hop expansion | implemented library/comet_dual_channel_fusion.py |
new retrieval fusion |
| Token-budgeted progressive-tier reading (summary->detail->raw, pinned-first admission, risk-escalated deepening) | implemented context/comet_progressive_tiers.py |
context/manager.py has count-based token budgeting but no per-node tier selection. Re-mined with tests after the prior no-test partial |
| MemoryBank reinforced-decay salience (retention R = exp(-dt/(S*tau)), recall reinforcement, curve inversion, threshold sweep), clockless (day numbers as inputs) | implemented memory/comet_reinforced_decay.py |
CoMeT's MemoryNode doc-strings state the formula but ship no arithmetic ("folded in by the dream pass"); memory/store.py has no forgetting curve |
Terse meta-tag rendering: one-tag-per-axis (O: A: F: I:) + consecutive same-origin bundling |
implemented context/comet_meta_tag_render.py |
pure-function extraction of orchestrator render helpers |
| SLM sensor, QueryAnalyzer, compacter LLM, LanceDB index, MCP server | external | trained model / GPU / vector kernel |
A curated awesome-list of code-CAD systems + a birdhouse reference-part set. Documentation, not code: correctly yields a knowledge base, not algorithms.
| Build idea | Status | Repository comparison |
|---|---|---|
| Catalogue of code-CAD systems (name/language/paradigm/kernel/formats/online-editor/maturity/niche) + representation taxonomy + B-rep recommendation + birdhouse set; queries; unstated attributes left UNKNOWN not fabricated | implemented adapters/ccc_codecad_ecosystem.py |
complements adapters/cadhub_language_registry.py (which executes one language: extension/entry/diagnostics); this catalogues/selects a system |
| Deterministic backend selection (explainable rubric) + harness coverage/gap report over the catalogue | implemented adapters/ccc_backend_selector.py |
selection over the catalogue; no equivalent |
| System-to-system interoperability matrix: format-handoff edges + list-stated transpile/embed bridges, fidelity-ranked interchange format, BFS handoff paths, reachability closure, interop-hub ranking, dense matrix | implemented adapters/ccc_interop_matrix.py |
turns prose the list only states in English ("FreeCAD best at interoperability", transpilers emit .scad, AngelCAD runs OpenSCAD) into a queryable graph; reuses the ecosystem data, no catalogue duplication |
| Birdhouse per-tool reference sources | not buildable | source code only; captured as a data list |
Curv (Doug Moen): a functional language representing shapes as signed distance fields. The harness had SDF consumers (marching tets, TSDF, FD gradients) but no way to author an SDF, this batch's biggest single capability.
| Build idea | Status | Repository comparison |
|---|---|---|
| Exact SDF primitives (sphere, box exact+mitred, rounded box, cylinder, cone, capped cone, capsule, torus, ellipsoid bound, plane; 2D circle/rect/regular-polygon/half-plane + extrude/revolve lifts) | implemented geometry/curv_sdf_primitives.py |
no SDF primitive algebra existed (only FD derivatives / TSDF / marching-tets). Formulas from lib/curv/std.curv |
| SDF combinators + smooth blends (hard min/max/diff/complement N-ary; polynomial/exponential/power smooth-min; smooth union/intersection/difference; chamfer) | implemented geometry/curv_sdf_combinators.py |
no combinators/smooth-min existed; tests verify smin->min as k->0 and smooth_union <= hard union |
Distance-field & domain transforms (offset, shell, round, morph; translate/rotate/scale with *s compensation/stretch/mirror; infinite & finite repetition with cell clamp) |
implemented geometry/curv_sdf_transforms.py |
no offset/shell/domain-repetition; scale compensation preserves the Eikonal property |
| TPMS (gyroid, Schwarz-P, Schwarz-D, Neovius), raw implicit + Lipschitz-normalised | implemented geometry/curv_sdf_tpms.py |
no gyroid/TPMS anywhere. Correctness finding: Curv's docs recommend dividing the gyroid field by 4/3 to make it 1-Lipschitz, but the true sup|grad F| is sqrt(3) ~ 1.732 (and 7 for Neovius); 4/3 does not bound the gradient, so sphere-tracing can overstep. The module divides by the measured bound and documents it |
| Sphere-tracing / raymarching (Lipschitz-safe stepping, hit/miss) + central-difference normals | implemented numeric/curv_sphere_trace.py |
no sphere tracer; Hart-1996 stepping with Curv lipschitz k compensation |
| C++/GLSL GPU compiler, OpenGL viewer, GLSL codegen | external | non-transferable host/GPU tooling |
| FD gradient/Hessian | already in repo | numeric/flatcad_sdf_derivatives.py (composed, not rebuilt) |
Five repos, ~488 new tests. This batch turned the harness from an SDF consumer
into an SDF author (Curv's full primitive/combinator/transform/TPMS/tracer
algebra), added the programmatic CadQuery selector algebra and a semantic
Workplane state validator (beyond the prior arity-only checks), a 3D assembly DOF
analyser, an SVG exporter, and folded CoMeT's memory-substrate ideas into the
harness's own memory/context layer. Two more reference-material corrections
surfaced: seven grammar divergences in the harness's own selector DSL (including
an inverted-not-precedence bug), and Curv's under-stated gyroid Lipschitz bound.
The batch was interrupted mid-flight by a session limit and cleanly resumed;
per the no-README policy the suite count is tracked in
audit/cadbible_progress.json.
Two FreeCAD integrations, both halves of the Gaudi product, and a covered-paper reference impl. The frontend correctly yielded nothing; the rest paid out.
An AI-assistant workbench for FreeCAD (LLM agent loop + Qt panels + MCP glue, all external). The deterministic core is the ~53-operation tool catalogue, the FreeCAD expression language, and a relative-edit mini-language.
| Build idea | Status | Repository comparison |
|---|---|---|
FreeCAD workbench operation catalogue: 53 operations (16 PartDesign, 5 Part, 3 Assembly, 3 Spreadsheet, 2 Sketcher, 1 Draft, + inspection/document/composite), each with workbench + category + typed param schema; check_call validates op name / required params / enum domains with difflib near-miss repair; JSON-schema emit |
implemented adapters/fcai_freecad_tool_catalog.py |
distinct from backends/ocp_occt_api_catalog.py (OCCT kernel C++ classes) and generation/query2cad_macro.py (Part primitives+booleans only); no existing module covers the PartDesign parametric feature-tree taxonomy |
FreeCAD parametric expression engine: recursive-descent parser + evaluator for dotted property refs (Variables.height, Box.Placement.Base.x), [index] subscripts, arithmetic (right-assoc power), unit literals (mm/cm/m/in/ft/deg/rad -> base units), functions; reports the dependency reference set for recompute ordering; no eval |
implemented programs/fcai_expression_engine.py |
programs/scadlm_ast.py and t2cq_ast.py model OpenSCAD/CadQuery; neither covers FreeCAD's spreadsheet/property expression grammar. Genuinely new |
Relative property-edit resolver: modify_property's mini-language (+10%, -20%, *1.5, +5, absolute) as a pure function returning structured Resolution (kind/previous/resolved/delta) with optional clamp |
implemented library/fcai_relative_value.py |
new small deterministic utility |
| Tool registry mechanics, OpenAI/Anthropic/MCP schema emitters | already in repo | agent/, surfaces/mcp/, agent/toolcad_tool_schema.py; only the FreeCAD-specific content was extracted |
| LLM agent loop (20 providers), Qt GUI, live FreeCAD calls | external | trained model / UI / host |
A thin MCP server (~350 LOC) exposing FreeCAD via two exec escape-hatch tools.
Generic MCP plumbing the harness already owns; one FreeCAD-specific artifact.
| Build idea | Status | Repository comparison |
|---|---|---|
FreeCAD document-object-model wire codec: DocumentContext/FreeCADObject/Placement/Rotation/ShapeInfo/DocumentInfo/ViewState dataclasses + encode/decode reproducing the exact get_document_context() JSON (TypeId, Name-vs-Label, ViewObject.Visibility, Placement as position + axis-angle, Coin3D camera quaternion), round-trip stable; parse_type_id; validate_context |
implemented formats/fcmcp_document_model.py |
new. surfaces/mcp/ encodes CISP ops + a generic cad://model/tree, not a FreeCAD object tree; ocp_occt_api_catalog catalogues API symbols, not a document instance |
| Placement axis-angle maths (axis_angle<->quaternion in FreeCAD/Coin3D (x,y,z,w) order) | implemented formats/fcmcp_document_model.py |
new; FreeCAD stores rotations as axis+angle, cameras as quaternions |
| Live FreeCAD socket RPC, FastMCP transport, the two exec tools | external / covered | harness has a full MCP server; arbitrary exec is not a deterministic op catalogue |
A text-to-architecture backend: a building is an ordered stack of extruded 2D plates (vertex / parametric / mixed profiles). Web/LLM/Blender layers external.
| Build idea | Status | Repository comparison |
|---|---|---|
Plate-stack building DSL schema + one-pass validator (per-category required/optional keys, thickness>0, formula x&y, range/steps, rotation, position; building-wide name uniqueness; normalize_plate fills defaults) |
implemented spec/gaudi_plate_spec.py |
new. Gaudi feeds raw dicts straight into bpy with no validation; harness has sketch-extrude/command IRs but no stacked-extruded-profile architectural plate IR |
Safe parametric-curve profile sampler without eval: ast-whitelist evaluator with free var t, math funcs, constants; half-open sample_curve; profile hygiene (signed area, ensure_ccw, dedupe, is_degenerate) |
implemented geometry/gaudi_parametric_profile.py |
replaces the upstream unsafe eval. numeric/opencad_param_expression.py is a named-parameter-table evaluator (no free variable, no curve sampling) |
Deterministic building assembly: per-category outline resolution (incl. closed Catmull-Rom for mixed), AABB xy-centering, rotate_z, z auto-stacking by cumulative thickness, Building/PlacedPlate rings |
implemented generation/gaudi_building_assembly.py |
new orchestration. geometry/solidpy_extrude_along_path.py covers generic prism meshing, so no extruder was rebuilt, only the plate-stack placement logic |
| Generic polygon->prism extrusion; LLM prompt/repair loops; Flask/JWT/Docker/bpy | already in repo / external | geometry/solidpy_extrude_along_path.py, generation/* + reliability/*repair*; web/render external |
| Build idea | Status | Repository comparison |
|---|---|---|
| (none) | out-of-scope, nothing built | A Create-React-App chat UI (React 18 + three.js GLB viewer + GLSL blob) for the Gaudi product; all CAD logic is server-side behind API_BASE_URL. No client-side CAD schema, constraint system, deterministic geometry algorithm, or DSL; the only math is stock three.js camera/OrbitControls/Box3 auto-fit already covered by drawings/arcs_viewport_transform.py. Building anything here would be gold-plating |
Reference impl of HNC-CAD (ICML 2023, paper 105). Its data pipeline IS SkexGen's, so canonical ordering / S-P-L tree / 6-bit quant / VQ assignment were already mined. Two implementation-level findings remained.
| Build idea | Status | Repository comparison |
|---|---|---|
| 25-frame discrete extrude-orientation codebook: clip the plane's three axis vectors to {-1,0,1}, concatenate to length-9, require exact match against 25 canonical patterns -> categorical index in [0,25); doubles as an in-distribution validator | implemented reconstruction/hnc_rotation_codebook.py |
representation difference: the DeepCAD family (deepcad_sketch_plane, deepcad_command_spec) stores continuous ZYZ angles; SkexGen stores 9 independently-rounded matrix components. HNC collapses orientation to one of 25 categories. The 25 frames are NOT the 24 proper rotations and are not orthonormal (frame 0's x-axis is (-1,-1,0)); an empirical clipped set |
| Flat CAD command/param codec: 6-int vocab with end-tokens promoted to command types (SKETCH_END/FACE_END/LOOP_END/LINE/ARC/CIRCLE), implicit-endpoint start-only curves (arc = start+mid, no end; circle = 4 cardinal points), 8-slot params, 11-slot extrude packing, two normalizations (loop-level half-diagonal vs sequence half-extent) | implemented reconstruction/hnc_cad_vec_codec.py |
distinct vocab/width/normalisation vs deepcad_command_spec (16-slot, SOL/EOS pair) and hnc_spl_tree (hierarchical). Code/comment mismatch found: the quantize docstring says n_bits**2 - 1 but the code uses 2**n_bits - 1; reproduced the code (authoritative) |
| S-P-L tree, canonical ordering, 6-bit quant, sha256 dedup, VQ nearest-code | already in repo | reconstruction/hnc_spl_tree.py, skexgen_canonical_order.py, hnc_code_assignment.py, deepcad2_arc_macro.py |
| VQ-VAE + cascaded autoregressive transformers | research-heavy/external | trained models |
Five repos, ~193 new tests (46: 79, 47: 19, 48: 72, 49: 0, 50: 22). Two FreeCAD
integrations added a FreeCAD-specific layer the harness lacked: a PartDesign
feature-operation catalogue, an eval-free parametric expression engine (dotted
refs, unit literals, dependency tracking), and a document-object wire codec.
Gaudi contributed a text-to-architecture plate-stack DSL and replaced
an upstream unsafe eval in its parametric-curve sampler with an AST-whitelisted
one. The frontend was correctly out-of-scope. hnc-cad produced the campaign's
fifth reference-representation finding (a 25-frame orientation codebook unlike the
whole DeepCAD family) plus another code/comment mismatch resolved in favour of the
code. Two gaudi-backend test files were placed in package-local tests/ dirs by the
agent and relocated to the top-level tests/ so the canonical runner collects them.
Per the no-README policy the suite count is tracked in audit/cadbible_progress.json.
Two geometry kernels (libfive f-rep, manifold mesh-boolean) plus two covered benchmarks and the OpenCASCADE mirror. The strongest batch for foundational geometry: the harness gained interval arithmetic, exact predicates, autodiff, dual contouring, a half-edge mesh, a 3D BVH, and numerical quadrature.
Matt Keeter's f-rep kernel. Complements Curv: Curv gave fixed Python SDF functions; libfive gives the reified opcode GRAPH underneath, plus the three ways to evaluate it (point, interval, dual).
| Build idea | Status | Repository comparison |
|---|---|---|
| f-rep opcode/Tree IR: hash-consed DAG with CSE, constant folding, commutative canonicalisation, evaluator, infix + S-expr printers, small shape stdlib | implemented geometry/libfive_frep_ir.py |
ports libfive tree/ + opcode.cpp. Distinct from curv_sdf_* (fixed callables); this is a reified, introspectable, optimisable graph |
| Interval arithmetic + interval evaluator over the IR for octree pruning (EMPTY/FILLED/AMBIGUOUS) | implemented numeric/libfive_interval.py |
ports eval/interval.hpp; div-straddling-zero conservatism, sqrt/log NaN domains, trig extrema enclosure. No interval arithmetic existed in the harness, the basis of efficient implicit meshing |
| Forward-mode automatic differentiation (dual numbers) over the IR for exact gradients/normals | implemented numeric/libfive_forward_ad.py |
exact vs numeric/flatcad_sdf_derivatives.py (finite differences); composes with dual-contouring Hermite data |
| Dual contouring (quadtree) with interval pruning, Hermite data, QEF sharp-feature vertex placement + N-D QEF solver (Jacobi eigendecomposition + rank-aware truncated pseudoinverse, mass-point bias) | implemented geometry/libfive_dual_contour.py |
sharper-feature alternative to geometry/meshdiff_marching_tets.py; QEF/dual-contouring absent from the harness. Tests verify a square keeps its corners and a circle reconstructs as a clean loop |
| C++/OpenGL/Guile-Scheme runtime, GPU | external | reimplemented in pure stdlib |
Emmett Lalish's guaranteed-manifold mesh-boolean kernel. The harness had SDF booleans but no mesh-boolean substrate; this fills it (short of the full retriangulating boolean, which needs the GPU runtime).
| Build idea | Status | Repository comparison |
|---|---|---|
| Adaptive exact-sign predicates orient2d/orient3d/incircle/insphere (float fast path + exact Fraction fallback) | implemented numeric/manifold_predicates.py |
Shewchuk-style; harness had only inexact 2D orient in geometry/euclid_validity.py. Foundational for robust geometry |
| Half-edge triangle mesh + manifoldness invariants (Manifold's 3t+i indexing, next/prev, pair involution, face/vertex circulation, is_manifold/is_2manifold, Euler/genus, boundary loops) | implemented geometry/manifold_halfedge.py |
geometry/angelcad_polyhedron.py had only an undirected edge-use table on polygon faces; no half-edge, no circulation |
| 3D BVH broad-phase (Morton SpreadBits3 + median split + stack-DFS overlap query, self_collisions, query_point) | implemented geometry/manifold_bvh.py |
harness had only 2D quadtree, fixed-grid octree, 2D morton2; no 3D BVH over boxes. Verified vs brute force |
| Predicate-driven triangle-triangle intersection (Moller coplanar-robust test, intersection segment, segment-plane / segment-segment-2D) | implemented geometry/manifold_tritri.py |
harness had SDF booleans only, no tri-tri |
| Winding-number point-in-mesh inside test (Van Oosterom-Strackee solid angle, generalised winding) + Kahan mass properties (signed volume, surface area) | implemented geometry/manifold_winding.py |
degeneracy-robust vs bench/cgb_mesh_betti.py ray-cast parity |
| Full retriangulating boolean, CUDA/thrust runtime | external / too large | the exact-predicate substrate is built; the full boolean assembly is out of stdlib scope |
Reference impl of Multimodal Refinement of CADs (2025). The refinement schema, transition function, and metrics were already built from the paper; three deterministic-geometry gaps remained.
| Build idea | Status | Repository comparison |
|---|---|---|
Exact curve geometric-relation suite (parallel, perpendicular, overlap-gated parallel_distance, meeting_ends, concentric) + analytic point-to-curve distance (segment / circle / arc-sector via bearing-ordering) keyed to editing.mrcad_schema.Curve |
implemented geometry/mrcad2_curve_relations.py |
mrCAD attaches these as methods on Line/Arc/Circle in design.py; the harness Curve (kind+points) carried none. geometry/arcs_closest_point.py uses a different (centre/radius/sweep) parametrization |
The paper's exact Design.design_distance (point-to-CURVE, mean-normalised to [0,1], empty->1.0) |
implemented bench/mrcad2_design_distance.py |
diverges from bench/mrcad_metrics.chamfer_asymmetric: point-to-curve (analytic) vs point-to-sampled-point; mean-normalised [0,1] vs summed; empty->1.0 vs 0.0. The exact form is always <= the sampled form (tested) |
| Degenerate-curve resolution for edits (line-collapse drop, arc->circle when endpoints coincide, arc drop when adjacent points coincide, circle drop) | implemented editing/mrcad2_edit_degeneracy.py |
reimplements editing_actions.py::MovePoint canonicalization, which the harness Curve.replace_point/apply_action omit |
| Curve/Design schema, edit vocabulary, transition, rollout, chamfer/PI metrics | already in repo | editing/mrcad_schema.py, editing/mrcad_refinement.py, bench/mrcad_metrics.py |
| VLM eval, DeepSpeed training, cv2 rendering | external | trained model / GPU |
MUSE text-to-CAD benchmark (three-stage funnel: exec -> geometry -> VLM judge). The funnel + three pillars were already built; four implementation-level pieces remained, and the source exposed a scoring-semantics issue in the harness.
| Build idea | Status | Repository comparison |
|---|---|---|
| Deterministic deduction-rule rubric engine (start 1.0, subtract per triggered rule_code, clamp, weighted + category aggregation) + plan component-count parser + weight dedup/normalisation | implemented bench/muse2_rubric_deductions.py |
from src/judge_system/rubric.py; no deduction_ratio/rule_code logic in the harness |
| 4-view engineering-drawing SVG metrics (path/text counts, view-label detection, component estimate via single-linkage grouping of overlapping bboxes, mm dimension parse) | implemented drawings/muse2_svg_view_metrics.py |
from src/judge_system/svg_metrics.py; no estimated_component/view_label in the harness drawings/ |
| Geometry-issue -> Stage-2 flag classifier with tri-state no_error semantics, combined-watertight definition, error counts | implemented bench/muse2_geometry_issue_flags.py |
from src/judge_system/geometry_metrics.py; isolates OCCT-payload logic without the kernel |
| Judge-vs-human agreement protocol (Item/Cell/System levels, Pearson/Spearman/Kendall-tau-b, signed bias, seeded bootstrap 95% CI) | implemented bench/muse2_judge_agreement.py |
harness had only a spearman and ranking-only kendall_tau; no Pearson, tau-b, bias, bootstrap, or multi-level judge protocol |
| Three-stage funnel, pillar averaging, assembly-graph isomorphism, joint/DoF Table 7 | already in repo | bench/muse_scorecard.py, muse_functionality/manufacturability/assemblability.py |
| Interpenetration volume-ratio, OCCT validator, VLM judge | external / already in repo | OCCT/LLM-in-loop |
Finding (open, not actioned): bench/muse_scorecard.py ANDs watertight,
manifold, self_intersection_free, overlap_free as four independent checks.
In the real MUSE repo, watertight is defined to already require no non-manifold
edges, so it implies manifold; feeding both independently double-counts
manifoldness. Whether this is a bug depends on how the caller derives the input
flags, so it changes what the benchmark score MEANS. muse2_geometry_issue_flags
provides to_funnel_geometry() + a watertight_strict flag so callers can feed
the funnel consistently, rather than silently editing the scorecard. Left as a
user scope decision, like the t2cq_ast subset question.
Despite the name, a full 36k-file mirror of the OpenCASCADE (OCCT) C++ kernel, not a patch set. Almost entirely external and already covered (NURBS, STEP, OCCT API catalogue). One genuine, self-contained gap.
| Build idea | Status | Repository comparison |
|---|---|---|
Gauss-Legendre quadrature nodes/weights + 1D/2D definite-integral integrators (Newton-on-Legendre generator reproducing OCCT's math.cxx table to 14 dp, gauss_points_max) |
implemented numeric/oce_gauss_legendre.py |
OCCT hard-codes the abscissae/weights for N=1..61; the harness had zero numerical quadrature (all 71 "gauss" hits were Gaussian noise/diffusion) |
| B-rep/NURBS kernel, STEP I/O, OCCT API, Bernstein/Bezier | already in repo | numeric/nurbs_basis.py, geometry/nurbgen_*, formats/stepllm_parser.py, backends/ocp_occt_api_catalog.py, geometry/dreamcad_rational_bezier.py |
| "Patches"/known-issues catalogue | N/A | repo is a full OCCT source mirror, not a patch set |
| Rest of OCCT (BOP, meshing, viewer, solvers) | external | non-stdlib-portable C++ kernel |
Five repos, ~211 new tests. The batch's centre of gravity is foundational geometry the harness had been missing entirely: interval arithmetic and forward-mode autodiff over a reified f-rep graph, dual contouring with QEF, adaptive exact-sign 3D predicates, a half-edge mesh with circulation, a 3D BVH, triangle-triangle intersection, a winding-number inside test, and Gauss-Legendre quadrature. Together libfive + manifold give the harness both an implicit (f-rep) and an explicit (mesh-boolean) robust-geometry substrate for the first time. The two covered benchmarks (mrCAD, muse) yielded only implementation-level gaps, including a sixth metric divergence (mrCAD point-to-curve vs point-to-point design distance) and a scoring-semantics finding in the harness's own MUSE scorecard (watertight/manifold double-count), left as a user decision. Per the no-README policy the suite count is tracked in audit/cadbible_progress.json.
An OCCT binding, two covered concepts, and the STEP/OpenSCAD tooling. The headline is ruststep's EXPRESS schema-language parser: the harness could read STEP data but not the schema language that defines it.
SWIG bindings to the compiled OCCT kernel. Overwhelmingly external; one genuine kernel-independent algorithm in the pure-Python Extend/ layer.
| Build idea | Status | Repository comparison |
|---|---|---|
Orientation-aware sub-shape dedup + MapShapesAndAncestors inverse-ancestor map, kernel-free (Shape as (TShape, orientation) identity; 24 oriented cube edges -> 12 unique; "which faces bound this edge?") |
implemented geometry/pyocc_topology_explorer.py |
lifted from OCC/Extend/TopologyUtils.py::TopologyExplorer. Distinct from reconstruction/cadparser_brep_graph.py (coedge half-edge graph), geometry/manifold_halfedge.py (triangle-mesh half-edge), geometry/opencad_synthetic_topology.py; none model the TopAbs containment hierarchy or ancestor-map inversion |
| ShapeFactory/DataExchange/LayerManager wrappers, is_* predicates, SWIG bindings | external / already in repo | thin kernel calls; API surface covered by backends/ocp_occt_api_catalog.py |
Reference impl of QueryCAD (ICRA 2025, paper 148). QA schema, grounding, and eval already built from the paper; two deterministic B-rep routines remained.
| Build idea | Status | Repository comparison |
|---|---|---|
Edge-convexity classification (convex/concave/smooth via sign of dot(cross(n_a,n_b), tangent)) + Attributed Adjacency Graph (faces as nodes, convexity-labelled arcs, filtered-neighbour queries, convexity histogram) + dihedral angle |
implemented geometry/querycad_edge_convexity.py |
from HierarchicalCADNet edge_dihedral. New: harness had mfgfeat_rule_detector that consumes a per-face concave/convex flag but nothing that computes edge convexity from geometry |
| Face-adjacency segmentation: connected-component prune within a feature whitelist (DFS), partition a tagged face-set into part instances, one-ring/N-ring dilation, boundary-face isolation | implemented geometry/querycad_face_adjacency.py |
from CADFaceUtils.prune_non_adj_faces. New: cascade_entity_selector/cq_selector_algebra select by geometric predicate; none model topological connectivity |
| Typed QA schema, segmentation grounding, grounded answer engine, QA eval | already in repo | bench/querycad_query_schema.py, rag/querycad_segmentation_grounding.py, reconstruction/querycad_answer_engine.py, bench/querycad_eval.py |
| Image ray-casting grounding, GNN feature segmentation, GroundedSAM | external | OCCT kernel + trained GNN |
ruststep: ISO 10303 in Rust + its espr EXPRESS compiler. The harness had a Part 21 data parser but nothing for the EXPRESS schema language. Five new modules.
| Build idea | Status | Repository comparison |
|---|---|---|
EXPRESS (ISO 10303-11) schema-language parser + model: tokenizer (-- and (* *) comments), SCHEMA/ENTITY/TYPE, shared + OPTIONAL attributes, SUBTYPE OF, ABSTRACT, SUPERTYPE OF (ONEOF/ANDOR/AND), DERIVE/INVERSE/UNIQUE/WHERE, ENUMERATION/SELECT, aggregates LIST/SET/ARRAY/BAG with bounds, redeclared attributes |
implemented spec/express_schema_parser.py |
reimplements espr's parser/ + ast/ (nom -> recursive descent). Not in the harness; formats/stepllm_schema.py is a fixed 24-entity dict. Parses 662/664 real ISO .exp schemas incl. AP214 (890 entities) |
| Inheritance graph + attribute flattening: transitive supertype/subtype edges, roots/leaves, cycle detection, diamond-safe flattened attribute list (inherited before local), nested SELECT expansion | implemented spec/express_inheritance.py |
reimplements espr's ir/ legalize stage. Not in the harness |
Part 21 string X-encoding codec (decode/encode \X\HH, \X2\..\X0\, \X4\..\X0\, \S\c, \\) |
implemented formats/step_p21_xstring.py |
fills a gap in stepllm_parser; it returns X-directives verbatim (\X2\00E9\X0\ instead of cafe), with no way to recover the Unicode. Round-trips as literal text so not data-loss, but a semantic gap |
| Structured HEADER model (typed FILE_DESCRIPTION/FILE_NAME/FILE_SCHEMA accessors + schema_name) | implemented formats/step_header_model.py |
stepllm_parser keeps the header as an unstructured Typed list |
Schema-to-Part21 validator: each DATA instance checked against a parsed EXPRESS schema (entity declared, inheritance-aware arity via flattened attrs, structural type-kind match, $ vs OPTIONAL, complex-instance parts) |
implemented spec/express_p21_validator.py |
only possible now both parsers exist. stepllm_graph.validate checks arity against an entity's OWN attributes only, wrong for any subtype, since real records list inherited attributes first |
| Rust struct codegen | external | mechanism; the schema model it consumes was ported |
Findings vs formats/stepllm_parser.py (all gaps, not overstated as bugs):
X-encoded strings returned verbatim (fixed by the codec); header unstructured
(fixed by the header model); validation ignores inheritance (fixed by the
validator, which flattens the supertype chain); and a minor ed.3 DATA(...)
parametrized-section limitation, noted not fixed (out of scope).
A Clojure -> OpenSCAD generator. Its data-first CSG form and the OpenSCAD facet formula were both absent from the harness.
| Build idea | Status | Repository comparison |
|---|---|---|
Data-first keyword-tagged S-expression CSG IR + write_scad emitter (nested tuples, radian-rotation-to-degrees on emit, $fn/$fa/$fs dynamic-binding resolution via context managers, include/use/import/call/define_module, excise, postwalk transform) |
implemented programs/scadclj_data_ir.py |
programs/solidpy_scad_emit.py is a mutable object tree with no ambient special-variable resolution and passes rotation angles through untouched; libfive_frep_ir is an SDF opcode DAG. Data-first inert-tuple CSG + radian-rotate + dynamic $fn is distinct. Output round-trips through scadlm_ast.parse + scadlm_check |
OpenSCAD facet-count resolution get_fragments_from_r ($fn/$fa/$fs -> fragment count: ceil(max(min(360/fa, 2*pi*r/fs), 5))) + exact CCW circle polygon, sphere rings, chord-error inverse |
implemented geometry/scadclj_facets.py |
absent from the harness (grepped get_fragments/fragments_from/fn_fa_fs: no hits). scadlm_check lists $fn/$fa/$fs as valid params but never resolves them. This governs how every curved OpenSCAD primitive tessellates |
Solid line/lines capsule geometry: direction-to-rotation math (acos(dz/len), axis [-dy,dx,0]) carrying +Z onto a segment, degenerate cases handled |
implemented geometry/scadclj_line.py |
no existing helper builds a solid strut between two 3D points. Fixes the source's bug (end caps left at origin, not the true endpoints) |
| Clojure/JVM runtime, core.matrix, glyph-outline text | external | needs font data |
A Haskell typed OpenSCAD EDSL. Overlaps heavily with existing typed-CSG/emitter/ gear modules, as anticipated; two Haskell-distinct algebraic pieces remained.
| Build idea | Status | Repository comparison |
|---|---|---|
SetLike normalising CSG combinator laws (associative union/intersection flattening + difference subtrahend-absorption: a-b-c-d -> difference(a, union(b,c,d))) |
implemented geometry/scadhs_csg_algebra.py |
genuinely new. angelcad/solidpy/scadlm treat union/intersection/difference as opaque n-ary nodes; none apply the algebraic smart-constructor laws. Ported from Class.hs SetLike instance |
Content-addressed module extraction / CSE (smodule/#/## with children() placeholder + mdl_N memo naming) + an added auto_modularize CSE pass detecting repeated subtrees |
implemented programs/scadhs_module_cse.py |
genuinely new: nothing in the harness hoists shared subtrees into named OpenSCAD modules. Faithful port of scad-hs's memo table |
| Typed 2D/3D phantom dimension; SCAD emission/modifiers; involute/planetary gears | already in repo | programs/angelcad_typed_csg.py, programs/solidpy_scad_emit.py, geometry/cadgpt_involute_gear.py + cadgpt_gear_train.py + cqplug_bevel_gear.py |
Five repos, ~231 new tests. ruststep contributed the campaign's most complete STEP work: an EXPRESS schema-language parser validated against 662/664 real ISO schemas, an inheritance flattener, an X-string codec, a structured header, and a schema-driven validator, plus three characterised gaps in the harness's existing Part 21 parser. scad-clj filled a real OpenSCAD gap (the facet-count formula that governs all curved-primitive tessellation). pythonocc and scad-hs were correctly disciplined (one/two genuine deltas from otherwise-covered repos), and querycad yielded its two paper-omitted B-rep routines. Per the no-README policy the suite count is tracked in audit/cadbible_progress.json.
Two SDF libraries (both cleared the high dedup bar the Curv/libfive stack set), a web CAD app, a CADQuery RL reward system, and a UI frontend. Three repos whose names misled about their contents.
A TypeScript SDF/CSG library (IQ primitives, isosurface mesher). Primitives, combinators, transforms, TPMS, and sphere tracing were all already covered; the genuine gaps were mesh extractors and six missing primitives.
| Build idea | Status | Repository comparison |
|---|---|---|
| Canonical Marching Cubes (Lorensen-Cline 256-case edge + triangle tables, welded vertices, SDF-convention winding) | implemented geometry/sdfcsg_marching_cubes.py |
absent from the harness; it had marching tets and dual contouring but not the standard MC. Bug found+fixed: Bourke's tables assume "inside = above isolevel" but SDF uses "inside = negative", so normals pointed inward until winding was reversed; a 256-case table-consistency test confirms correct transcription |
| Naive Surface Nets isosurface extractor (one vertex per sign-changing cell = averaged edge crossings) + tiled grid sampling + ASCII STL | implemented geometry/sdfcsg_surface_nets.py |
the repo's actual mesher; distinct from QEF dual contouring (2D-only) and marching tets. Bug found+fixed: watertightness required correct per-axis quad winding |
| Six IQ primitives absent from curv: box_frame, capped_torus, link, hexagonal_prism, triangular_prism, solid_angle | implemented geometry/sdfcsg_primitives.py |
extend geometry/curv_sdf_primitives.py |
| User-data attribute interpolation across the surface (inverse-distance blend) | implemented geometry/sdfcsg_surface_nets.py |
the repo's getUserData mechanism; no harness equivalent |
| Primitives, CSG, smooth-min, transforms, sphere trace | already in repo | curv_sdf_*, curv_sphere_trace |
deadsy/sdfx, a Go SDF CAD library. Distinctive from pure-SDF-art libraries in its manufacturing 2D-CAD layer: exact concave-polygon distance and fastener geometry.
| Build idea | Status | Repository comparison |
|---|---|---|
| Exact arbitrary-polygon 2D SDF (winding-number sign + min edge distance) + area/centroid/point-in-polygon | implemented geometry/sdfx_polygon_sdf.py |
curv_sdf_primitives.regular_polygon is a mitred regular n-gon field only; manifold_winding is a 3D solid-angle mesh test. No exact concave arbitrary-polygon 2D SDF existed |
| Fluent 2D sketch builder: relative/polar vertices, corner fillet (smooth), chamfer, segment->arc replacement, regular n-gon ring | implemented geometry/sdfx_polygon_builder.py |
no polygon geometry builder in the harness; curv/libfive expose only fields |
| Standard thread cross-section profiles: ISO/UTS 60 deg V (7/8 H ext, 1/4 H int truncation, rounded root/crest), 29 deg Acme, ANSI 45/7 buttress (period-wrap-continuous) | implemented geometry/sdfx_thread_profile.py |
geometry/solidpy_screw_thread.py is a helical mesh sweep with a generic tooth section; no standard ISO/Acme/buttress profile math |
| Fastener standard dimension database: ISO metric coarse/fine (M1-M64), UNC/UNF, NPT (tapered), normalised to mm, + hex head radius/height | implemented standards/sdfx_thread_database.py |
standards/cqplug_heatsert_schedule.py is heat-set inserts only; no thread/fastener table existed |
| Cam profiles as exact SDFs (flat-flank + three-arc) with design-parameter solvers | implemented geometry/sdfx_cam_profile.py |
no cam primitive in curv/libfive/sdf-csg |
| Archimedean spiral exact 2D SDF (polar inversion + whole-turn shifting, thickness offset) | implemented geometry/sdfx_spiral_sdf.py |
no spiral primitive anywhere in the SDF stack |
| Go runtime, OpenGL, STL/DXF/3MF I/O, 3D helical Screw3D sweep, quadtree render accel | external / already in repo | geometry/solidpy_screw_thread.py; STL present |
SolidType: a TypeScript/web parametric CAD app on OpenCascade.js. Its topological naming and constraint-graph DOF were already covered; one genuine delta.
| Build idea | Status | Repository comparison |
|---|---|---|
| Fixed-point integer geometry substrate with shared-grid vertex welding: mm<->nanometre quantisation, exact integer vector ops, division-free exact segment/line/plane intersection with compute-once-snap-once grid snapping, VertexRegistry interning coincident points to one canonical id | implemented geometry/solidtype_integer_geometry.py |
complementary to numeric/manifold_predicates.py (exact-sign predicates classify a determinant; this quantises inputs so near-coincident vertices weld, eliminating the epsilon non-manifold problem). New |
| Topological naming (fingerprint + evolution + split/merge/delete resolve) | already in repo | geometry/opencad_face_fingerprint.py |
| Constraint-graph connected-component DOF (under/over/fully-constrained) | already in repo | the existing constraints module (union-find rank DOF) |
| 2D curve intersection (tolerance-based) | already in repo | existing geometry |
Despite the name, not spatial reasoning: a multi-modal reward/verification system for RL-training LLMs to write CadQuery. Three deterministic reward modules.
| Build idea | Status | Repository comparison |
|---|---|---|
| Rule-based physical-plausibility gate + hard-constraint checker (fill-ratio/solidity, extreme aspect ratio, SA-to-volume, magnitude bounds -> issues/warnings; constraint-dict -> per-key pass/fail) | implemented verifiers/spatialhero_plausibility.py |
quality/anomaly.py turns the same bbox ratios into a feature vector for statistical outlier scoring; verifiers/cgb_validity_gate.py gates triangle face aspect. Neither is a fixed-threshold acceptance gate, and fill-ratio/solidity was absent |
| Bounding-box dimensional-accuracy metric (measure w/d/h/volume; bounded relative-error accuracy = max(0, 1-relerr), within-tolerance, average) | implemented bench/spatialhero_dim_accuracy.py |
reconstruction/pht_dimension_accuracy.py matches dimension annotations with hard type/value/element; this scores realised solid extents continuously. quality/cad_reward.py is chamfer-based |
| Gated weighted multi-component composite reward (validated weight-map summing to 1.0; hard gate keys collapse reward to 0) | implemented quality/spatialhero_composite_reward.py |
quality/cad_reward.py is a fixed 2-term reward; this is a generic N-named-component aggregator with configurable hard gates |
| AST static code-safety analysis; VLM eval, CadQuery executor, PPO trainer | already in repo / external | programs/, quality/cad_code_normalize.py; trained model / kernel |
| Build idea | Status | Repository comparison |
|---|---|---|
| (none) | out-of-scope, nothing built | The frontend twin of the Gaudi product (same gaudi_logo.png, same Railway backend): a Create-React-App SPA: react-router auth-gated screens, a three.js @react-three/fiber BuildingViewer loading server-generated STL/GLB, a chat Assistant that POSTs prompts and polls. A grep of src/ for beam/truss/moment-of-inertia/section-modulus/centroid/deflection/buckling/euler/yield/shear/bending/load-combination/young's-modulus/I-beam/steel-section returned zero hits. All structural analysis is server-side; nothing deterministic is transferable |
Five repos, ~150 new tests. The two SDF libraries validated the dedup discipline: against the now-deep Curv/libfive SDF stack, sdf-csg still yielded the two standard mesh extractors the harness lacked (marching cubes, surface nets) plus six primitives, and sdfx yielded the entire manufacturing 2D-CAD layer (exact concave-polygon distance, ISO/Acme/buttress thread profiles, a fastener database, cam and spiral profiles) that pure-SDF-art libraries omit. solidtype added integer-geometry vertex welding (complementary to the manifold predicates). spatialhero (a third name-misleads-content repo) gave a plausibility gate and reward aggregator. structural-frontend was correctly a second UI no-build. Two marching-cubes/surface-nets winding bugs were found and fixed during testing. Per the no-README policy the suite count is tracked in audit/cadbible_progress.json.
The campaign's last five. Two repo-identity assumptions in the launch prompts turned out wrong, and in both cases the agent verified by grep and mined what was actually there rather than forcing the hypothesis.
A Blender addon driving Zoo/KittyCAD's text-to-CAD API. The bpy/UI/live-API layers are external; two deterministic pieces were transferable.
| Build idea | Status | Repository comparison |
|---|---|---|
| Base64 data-URI codec (encode/decode, MIME handling) | implemented formats/t2cblender_base64data.py |
no data-URI codec existed |
| Zoo/KittyCAD text-to-CAD async API schema (job submission, status polling, result envelope) as a deterministic data model | implemented adapters/t2cblender_zoo_api_schema.py |
new; the harness had no text-to-CAD job/result schema |
| bpy operators/panels, live API calls, LLM | external | Blender host / network / trained model |
Not Zoo's CLI (the launch prompt's assumption was wrong; the agent grepped:
no kcl/kittycad anywhere). It is earthtojake/text-to-cad "CAD Skills": an
agent-skills library for CAD, robotics, and hardware handoff. It opened a domain
the harness had nothing in: robot description.
| Build idea | Status | Repository comparison |
|---|---|---|
| URDF forward kinematics: 4x4 rigid transforms, rpy/axis-angle, joint clamping, mimic-chain resolution with cycle guard, DFS world-transform solve, frame-relative queries | implemented geometry/t2cmain_urdf_kinematics.py |
the harness had no robot kinematics of any kind; numeric/cq_assembly_dof.py counts DOF, it does not pose |
Strict URDF XML parser: joint-type whitelist, mandatory <limit>, radian->degree conversion, single-rooted-tree/cycle/multi-parent/forest rejection, primitive + material validation |
implemented spec/t2cmain_urdf_parser.py |
new (spec/express_schema_parser.py parses EXPRESS, unrelated) |
| SRDF semantics with URDF cross-validation: chain joint-path walk, group closure over chains+subgroups (cycle-safe), end-effector adjacency/disjointness rules, group-state limit checks, disabled-collision dedup + reason classification, missing-adjacent-disable detector | implemented spec/t2cmain_srdf_semantics.py |
entirely new capability |
CAD-reference token grammar #o1.2.f3,f4: occurrence-tree positional selectors with left-to-right occurrence inheritance, canonicalisation, safe STEP-path normalisation |
implemented programs/t2cmain_cad_ref_selectors.py |
categorically different from geometry/cq_selector_grammar.py / cqcontrib_selector_dsl.py / cascade_entity_selector.py, which are predicate selectors (">Z", tags); this is an index into an assembly occurrence tree |
| Exploded-view layout solver: occurrence-prefix grouping, coplanar layer merge with model-scaled tolerance, non-intersecting stacking gaps, golden-angle spiral fallback for centroid-degenerate radial groups, grounded base, eased progress | implemented geometry/t2cmain_exploded_view.py |
new; no assembly-presentation solver existed |
| Zoo API schema / base64 codec | already mined (repo 66), and absent from this repo anyway | adapters/t2cblender_zoo_api_schema.py, formats/t2cblender_base64data.py |
| KCL lexer/parser/AST | not present in this repo | nothing to mine |
| STEP/STL/3MF/GLB export, three.js viewer, implicit GLSL SDF, MoveIt2 server, slicers, printer control | external / already in repo | formats/ covers the formats; curv_sdf_*/sdfcsg_* cover SDF |
Note on method: three test rounds failed, and each time the agent checked the source before changing anything, finding the source's rule was right and its own assumption wrong (mimic-cycle fallback resolves to the re-entered joint's own default; the SRDF end-effector adjacency rule; the common-occurrence-prefix grouping window). It corrected the tests to reality, not the modules to the tests.
| Build idea | Status | Repository comparison |
|---|---|---|
| (none) | out-of-scope, nothing built | Zoo's SvelteKit reference frontend for the Text-to-CAD API. Svelte components, a Threlte/three.js ModelViewer (only "math" is stock bounding-box camera-fit), @kittycad/lib API client, and trivial base64/time/kebab helpers. Specifically checked for a client-side KCL parser (which would have been genuinely new): KCL appears only as a download-format string and an API request flag; the language is generated server-side. Third correctly-out-of-scope UI repo |
Vitruvion (ICLR 2022), a generative model of parametric CAD sketches. The paper's concepts were covered indirectly by the SketchGraphs modules, but no Vitruvion implementation-level numerics existed. Six modules, and the campaign's sharpest quantiser finding.
| Build idea | Status | Repository comparison |
|---|---|---|
Exact analytic sketch bbox (quadrant-crossing arc rule) + centre/long-axis-1 rescale to [-0.5,0.5] + start/mid/end arc parameterisation with circumcentre re-fit |
implemented geometry/vitruvion_sketch_norm.py |
drawings/sgraphs2_entity_render.bounding_box is polyline-sampled and always under-reports an arc's extremum; normalize_scene maps to [0,1]^2. Vitruvion needs an exact bbox and a [-0.5,0.5] domain or the quantiser bins differ |
| Primitive token codec: 3 parallel streams (val/coord/pos), 7 control tokens, per-slot coord ids (Arc 2-7, Circle 8-10, Line 11-14, Point 15-16), isConstruction flags, gather pointer offsets | implemented reconstruction/vitruvion_primitive_tokens.py |
no 3-stream sketch tokenizer existed; deepcad2_*/gencad2_* are single-stream command tokenizers |
Constraint hypergraph as a pointer token stream (16-token vocab, ref token = 16 + gather_idx, arity limited to 2 by the coord vocab, external constraints dropped, refs sorted not argument-ordered) |
implemented reconstruction/vitruvion_constraint_tokens.py |
reconstruction/sketchgraphs_graph.py models the hypergraph as a data structure; nothing encoded it as pointers into a primitive stream |
| Seeded truncated-normal primitive noise (parameter-space, arc rejection loop with halving scale) | implemented datagen/vitruvion_primitive_noise.py |
no perturbation module existed |
| Hand-drawn stroke noise: Matern-GP displacement along arclength (stdlib Cholesky), radial for arcs, 359-degree circle gap | implemented drawings/vitruvion_hand_drawn_noise.py |
no Matern/Cholesky/GP code existed; datagen/sketch_image_conditions.py only names a simulate_hand callable; this supplies it |
| Dataset curation: 6..16-entity filter + degeneracy rejection, exact length-bucketed token dedup, remainder-balanced shard ranges | implemented dataengine/vitruvion_sequence_filter.py |
bench/skexgen_dedup_hash.py is a hash dedup (lossy); Vitruvion's is exact. No shard-range util existed |
| Autoregressive transformers, MobileNet image encoder, samplers | external | trained model / GPU |
Quantiser finding (the campaign's 8th representation discrepancy). Vitruvion:
bin = int((v + 0.5) * n) # TRUNCATION (floor), clamp n -> n-1
value = (bin + 0.5) / n - 0.5 # BIN CENTRE, not the level
domain [-0.5, 0.5], default n = 64 (6-bit). Compare:
- DeepCAD (
reconstruction/deepcad2_numericalize.py) and GenCAD: 256 levels over[-1,1], round-half-even, dequantise at the level. - SkexGen: 6-bit truncating, but also dequantises at the level.
Vitruvion is the only one with floor-quantise + bin-centre dequantise, so its
round-trip error is unbiased and bounded by 1/(2n), whereas floor/floor
(SkexGen) biases every coordinate downward by half a bin. Mixing Vitruvion bins
with a DeepCAD-style dequantiser shifts every primitive by half a bin of the
sketch's long axis: a silent systematic offset.
Two further reference quirks reproduced and documented in-module:
truncnorm.rvs(a=-max_diff, b=max_diff, scale=std): scipy's bounds are in standard-deviation units, so the paper'sstd = max_diff = 0.15actually bounds the jitter at0.0225, 6.6x tighter than the literal reading. Exposed asbounds_in_std_units.RenderNoise._get_rangesupdates the extent with+/-radiusabout the origin and the centre separately (notcentre +/- radius). Cosmetic (it only feeds the GP smoothness scale);bbox_extent=Trueopts into the corrected version.- The constraint coord vocab has only 2 reference slots, so a hyperedge of arity
= 3 would silently desync the three streams; this port raises instead.
The folder named zip was not a junk archive; it contains CodeToCAD, a
provider-agnostic CAD scripting API (Blender/FreeCAD/OnShape backends). Two
genuine kinematics deltas; landmarks and the interface taxonomy were already
covered.
| Build idea | Status | Repository comparison |
|---|---|---|
Per-axis 6-DOF joint limit box: each DOF free / locked / [min,max]; clamp a proposed pose into the box (angles wrapped to the nearest branch first); classify joint type from the limit pattern; intersect limit boxes; rigid/revolute/prismatic/cylindrical/planar/ball constructors |
implemented geometry/codetocad2_joint_limit_box.py |
new: geometry/joinable_joint_motion.py only zeroes disallowed DOF; no ranges, so a revolute joint had no stops; numeric/cq_assembly_dof.py only counts DOF |
Gear-ratio rotational driver coupling driven = -ratio * driver + train propagation (mesh sign external/internal/shaft, effective ratio, idler sign flip, compound shaft stages, speeds, ideal torques, cycle + multi-driver rejection) |
implemented geometry/codetocad2_gear_coupling.py |
new: geometry/cadgpt_gear_train.py does ratio + spatial placement, never propagates rotation |
| Landmark system (named bbox anchors, cardinal presets, offsets, nearest-entity search) | already in repo | geometry/codetocad_cardinal_landmark.py |
| Provider-agnostic interface taxonomy | already in repo | adapters/fcai_freecad_tool_catalog.py, cadhub_language_registry.py, ccc_codecad_ecosystem.py |
| Length/angle unit expressions; transform stack | already in repo | numeric/codetocad_length_expression.py, geometry/codetocad_transform_stack.py |
| Blender/FreeCAD/OnShape live backends | external | proprietary hosts |
Five repos, ~332 new tests. The final batch opened a domain the harness had never touched (robot description: URDF kinematics, URDF/SRDF parsing and cross- validation), closed the last kinematics gaps (joint limit boxes, gear rotational propagation), added the Vitruvion sketch stack, and produced the campaign's 8th and sharpest representation finding: Vitruvion is the only sketch quantiser in the corpus using floor-quantise + bin-centre dequantise, making it the only one whose round-trip error is unbiased. Two of the five launch prompts carried a wrong repo-identity assumption; in both cases the agent verified by grep, said so, and mined the repo that actually existed. Three UI repos across the campaign were correctly no-builds.