GearScope functional verification log: earthtojake/text-to-cad (cad skill) Host: macOS 26.5.2, aarch64, Python 3.12.13 Date: 2026-08-09 === Import check === $ python3 check_imports.py cadpy modules OK: generation, step_artifact, assembly build123d version: 0.11.1 (first import ~8s due to OpenCASCADE kernel cold load) === STEP CLI === $ python skills/cad/scripts/step --help OK - usage: scripts/step [-h] [--kind {part,assembly}] [-o PATH] [--stl OUTPUT] ... flags: --3mf, --glb, --skip-step-write, --force, --mesh-tolerance, --verbose === Functional: generate a real STEP from build123d source === Generator: gen_block.py (100x60x20 mm block, four 8mm through-holes on 80x40 bolt rect) $ python skills/cad/scripts/step gen_block.py -o out/calibration_block.step --verbose [scripts/step] Generating... gen_block.py [scripts/step] load generator gen_block.py completed in 2.07s [scripts/step] run gen_step gen_block.py completed in 13ms [scripts/step] wrote STEP: out/calibration_block.step [scripts/step] mesh STEP out/calibration_block completed in 3ms [scripts/step] write GLB/topology completed in 19ms [scripts/step] generated part STEP: out/calibration_block.step [scripts/step] total completed in 2.15s Output: out/calibration_block.step = 30,985 bytes, 817 lines, ISO-10303-21 (valid STEP) .calibration_block.step.glb = 193,948 bytes (hidden topology artifact for cad-viewer) STEP header: FILE_SCHEMA AUTOMOTIVE_DESIGN, "Open CASCADE STEP processor 7.9" Direct build123d assertion (gen_block.py __main__): shape is_valid: True volume_mm3: 115978.761 (expected: 120000 - 4*pi*16*20 = 115978.76, EXACT match) bbox: -50<=x<=50, -30<=y<=30, -10<=z<=10 === Functional: geometry inspection (skill's inspect tool) === $ python skills/cad/scripts/inspect refs out/calibration_block.step --facts { "ok": true, "tokens": [{ "stepHash": "24644942d320dbae3e2fe377631b894ce2aec7544c08e5db6bf2ab77af06bba8", "summary": { "kind": "part", "occurrenceCount": 1, "leafOccurrenceCount": 1, "shapeCount": 1, "faceCount": 10, (6 block faces + 4 inner cylindrical hole faces) "edgeCount": 24, "vertexCount": 0, "bounds": {"min": [-50,-30,-10], "max": [50,30,10]} }, "entryFacts": { "size": [100.0, 60.0, 20.0], "extentAxis": "x", "center": [...] } }] } PASS - size [100,60,20] matches spec; bounds centered; faceCount consistent with 4 through-holes === Functional: DXF generation (second skill) === Generator: gen_gasket.py (120x80 mm plate, central 20mm bore, four 6mm mounting holes) $ python skills/dxf/scripts/dxf gen_gasket.py -o out/gasket.dxf --verbose [scripts/dxf] wrote DXF: out/gasket.dxf [scripts/dxf] total completed in 182ms Output: out/gasket.dxf = 36 KB, DXF AC1024 (R2010) Verify: ezdxf.readfile -> entity count 6, types ['CIRCLE', 'LWPOLYLINE'] PASS - 1 LWPOLYLINE (outline) + 5 CIRCLE (1 bore + 4 mount holes), correct === Python test suite (repo's own) === $ python3 -m pytest tests/python/global/ -q 20 passed, 5 skipped in 4.93s (global structural: skill self-containment, plugin manifests, release version paths, models directory policy) $ python3 -m pytest tests/python/skills/cad/cadpy/ tests/python/skills/cad/inspect/ tests/python/skills/cad/step/ -q --import-mode=importlib 179 passed, 2 skipped in 3.76s (NOTE: needs --import-mode=importlib; test dirs lack __init__.py so identical test_cli.py basenames collide under default prepend mode) $ python3 -m pytest tests/python/skills/urdf/ tests/python/skills/srdf/ tests/python/skills/sdf/ tests/python/skills/dxf/ tests/python/skills/gcode/ tests/python/skills/bambu-labs/ tests/python/packages/ -q --import-mode=importlib 198 passed, 26 subtests passed in 3.75s Python total: 397 passed, 7 skipped. === JS test suite (cadjs) === $ cd packages/cadjs && node --test $(find src -name '*.test.js') tests 404, pass 404, fail 0, duration 753ms (NOTE: repo runner scripts/run-tests.mjs uses --experimental-default-type=module, a flag DROPPED in Node 24; repo targets Node 22 per CI. Workaround: invoke `node --test` directly, which works on 24.) Combined functional pass rate: STEP gen OK + DXF gen OK + inspect OK + 801 tests pass (397 py + 404 js). Not exercised: snapshot PNG/GIF rendering (needs Playwright Chromium browser); gcode slicing (needs a real slicer CLI: prusa-slicer / orca-slicer / bambu-studio); bambu-labs print (needs a physical Bambu Lab printer on LAN); step-parts live lookup (needs step.parts service reachability).