Geometry QA
Read docs/guidebook/01-openvsp.md and execute its "Check your work" list.
Non-negotiables for this repo:
- OpenVSP setters fail silently: any new
SetParmValneeds read-back coverage inbuild_openvsp_model's verification block, and errors must be drained viavsp.ErrorMgrSingleton.getInstance()(module-level error functions do not exist). - Read-back proves values, never choices: a wrong rotation axis reads back
"correctly" while the exported mesh is garbage (audit F14). The stage
oktherefore requiresreadback.matches_spec,stl_bbox.ok, ANDmesh_checks.ok(per-component extents, fin verticality, attachment, computed whole-model height — all measured from the exported STL). - Always open
threeview.png: it is rendered from the exported mesh, not the spec. If you change the builder, look at it before trusting any number. - Set wing driver groups before planform parms; pin
Sweep_Locationto 0 for LE sweep;Update()before any read-back or export. - A
wing.sectionsreproduction needs one driver group per panel, exact per-section read-back, and a reopened-VSP3 check. OpenVSP 3.51 retains a stale aggregate area after XSec insertion unlessTotalSpanis nudged and restored; without that recomputation the saved wing rescales on reopen. Requiregeometry.json .wing.planform_mode == "sections",.openvsp.readback.wing_sections.matches, and the true section polygon in.planform.planform_xy. - MassProp
Total_Massis unitless volume-proxy unless densities were set — never quote it as kilograms. - Fin roots:
geometry.json .openvsp.fin_attach.modemust matchvtail.root_attachment. Inmeasuredmode the selected y/z must equal the spec exactly and read-back must verify both mirrored fins. If the visible root is outside the core body, require a source-measuredfuselage.fairingsloft plus derivedvtail*_rootextensions: actual-transformfairings_match,vtail_root_extensions_match, zero signed extension-tip junction gap, buried LE/mid/TE eccentricities ≤0.8,fin_*_attached, andfairing_*_contained(≥95% at least 2 mm inside the independent body/wing solids) must all pass after VSP3 reopen. The attachment verdict uses the authoritative body/fairing section at root x and a 10 mm or 0.2%-length proximity floor; never restore the old ±0.12 m bounding slab / 60 mm floor. Extensions are reproduction-only. Fairings and root extensions are loft-only and must be absent from VSPAERO lifting sets. - Packing: payload bay must clear the engine compartment front
(
L - 0.20 - engine_length - 0.05) and fuel volume must fit wing tanks + fuselage leftover (packing_report). - Reference model (guidebook chapter 13): when
designs/<concept>/reference/reference.jsonexists,geometry.jsoncarriesreference_fidelity(gating: body p95 surface deviation and top/side silhouette IoU; disclosed: whole-aircraft and wing/fin p95, station and planform deltas;reference_sha256) and the phase directory holdsreference_overlay.png. Forsketch.treatment: reproductionthe stageokand the Geometry-truth gate requirereference_fidelity.ok; otherwise it is disclosed evidence. Open the overlay. Any departure must trace to a documented unrepresentable feature in the brief, never to measurement error. For a sectioned wing, the disclosed exposed-wing p95 is model-to-reference outside the scan-derived body exclusion; pair it with silhouette reference-only area so omitted geometry cannot hide. Retain full component p95 as buried carry-through disclosure. The reference is measured design input — not validation truth.