PROCITY/tools
m3ultra 3432fccd1f Lane D round 10: fix interior giant rigs + no-giants QA gate
R9 blocker: interior rig figures were ~2x too tall (keeper crown 3.83m in a 3.4m room,
clipping the ceiling). Root cause in rigs.js buildFigure: it normalised scale by height/headY,
where headY is the head bone's world Y in BIND POSE — but the Mixamo skeleton origin is the hips
(~mid-body), so headY is head-above-hips (~half the standing height), not feet->crown. Every rig
came out ~1.83-2.0x too tall. (The head does NOT move when posed — bind crown 3.209m vs idle
3.205m — so it's a hips-relative measure, not an animation issue.)

Fix: normalise by the feet->crown span (headY - minY, both already computed). buildFigure(rig, h)
now lands the crown at exactly h above planted feet. Fixes keepers, browser rigs, near-tier street
rigs AND the impostor bake (all ride buildFigure). Verified: all 19 fleet rigs crown==1.75m; live
keeper 3.83m -> 1.82m; determinism + dispose-leak soak unchanged.

Regression guard (required): new tools/qa/interior_scale_check.py (Playwright) enters a sample of
shops, injects browser rigs at browse points, asserts every interior fig crown in [1.4,2.0]m AND
< room dims.H AND feet planted. Wired into tools/qa.sh --strict (run_gate => a giant fails qa).
Proven bidirectional: PASS on the fix (24 figs/6 shops), FAIL on a reintroduced giant. Full
qa.sh --strict: 6 passed, 0 failed.

Re-shot laneD/r10_browsers_fixed.jpg. Figures human-sized relative to doors/fittings: yes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 13:01:54 +10:00
..
qa Lane D round 10: fix interior giant rigs + no-giants QA gate 2026-07-15 13:01:54 +10:00
flags_check.py Lane F R9 F1+F2: interior presence + tram + buy-anywhere wiring; harness graduated + new smokes 2026-07-15 11:42:44 +10:00
qa.sh Lane D round 10: fix interior giant rigs + no-giants QA gate 2026-07-15 13:01:54 +10:00
shots.py Lane F R4 finalize: gate table all-6-green + v1 tour shots + interior-shot fix 2026-07-14 20:22:23 +10:00
soak.py Lane F R9 F3+F4: v2.0 tour (11 shots) + full-default & all-on soaks + docs freeze 2026-07-15 11:57:11 +10:00
v2_tour.py Lane F R9 F3+F4: v2.0 tour (11 shots) + full-default & all-on soaks + docs freeze 2026-07-15 11:57:11 +10:00