opencad
← Parts
PartPASS 11/11

3DBenchy

The standard tugboat calibration print, modelled from scratch.

Facts

Backend
Zoo KCL
Gates
11 pass, 0 fail, 1 n/a
Bounding box
60.0 × 31.0 × 48.0 mm
Volume
15.14 cm³
Process
FFF calibration print at 1:1, intended without supports. Digital tolerances are not physical print tolerances.
Release
reconstruction

Print files

FileKindSize
benchy.stepSTEP0.5 MB
benchy.stlSTL3.1 MB

Source

contract.yaml (design contract)

Design intent

Create a CAD model for a standard benchy the tugboat, used by 3D printers for calibration checking. Once complete, I will print it and physically measure the features against a control I already have.

Gates

TierGateResultEvidence
Acontract_provenance
Contract validates; stated/measured sources resolve to bundle files; no blocking open questions; interfaces pinned by checks
PASSdesigns/benchy/contract.yaml: 48 parameters {'stated': 23, 'inferred': 25}; sources unresolved {}; unanchored 0
Aenvelope
Bounding box of the exported STEP equals the contract envelope
PASSresults/zoo/benchy/inspect.json bbox.max_error = 0.0 (tol 0.05)
Amass_properties
Volume, surface area and centre of mass within contract tolerance (independent STEP measurement)
PASSresults/zoo/benchy/inspect.json volume = 15141.5594 vs 15550.0
Afeatures
Every required feature, section, named face, cylinder axis, plane, dimension, body, clearance, passage, wall, gear and symmetry check verified on the STEP
PASSresults/zoo/benchy/inspect.json features: 11/11 ok; failed required []; failed optional []; unverified []
Areference_fidelity
Deviation from the reference model within the contract band (when a reference exists)
n/aresults/zoo/benchy/inspect.json deviation.p95 = None hausdorff = None silhouette_iou_min = None
Bexport_agreement
Engine, STEP (OpenCascade) and STL (trimesh) volumes agree
PASSresults/zoo/benchy/inspect.json agreement engine=15137.439346866026 step=15141.559357293758 stl=15137.444112123005 (rel tol 0.002; independent=True)
Bedit_robustness
Declared parameter edits rebuild with the expected effect, undriven interfaces stay put, sweeps regenerate, infeasible values are refused; baseline re-export hash unchanged
PASSresults/zoo/benchy/edit.json 3/3 edit tests ok; restore.ok = True
Bsource_hygiene
Dialect, units, formatted, lint-clean, named parameters match the contract, asserts present
PASSresults/zoo/benchy/verify.json hygiene: dialect=True unit=True legacy=[] params_ok=True asserts=101
Cexport_integrity
Deterministic STEP (two exports identical), valid B-rep, expected solid count, watertight STL (solid shells == solids)
PASSresults/zoo/benchy/export.json step.deterministic = True sha256 eb459fc60a40; stl=present; glb=present
Ctraceability
Every stage JSON present with tool versions, git head, worker thread ids, engine-call ledger; no --allow-errors
PASSstages present: {'plan': True, 'model': True, 'verify': True, 'export': True, 'inspect': True, 'edit': True}
Cevidence_separation
Contract agreement, reference agreement and physical validation are reported as separate verdicts
PASSresults/zoo/benchy/inspect.json carries contract checks (volume/bbox/features) and a separate deviation block (reference = None)
Cindependence
The source is editable construction: no import of reference geometry, construction ops present, no traced geometry
PASSresults/zoo/benchy/verify.json hygiene.forbidden_imports = [] construction_ops = {'sketch_blocks': 7, 'feature_ops': 18} lines = 634