Fable (integrator): round-10 instructions — interior giant-rig blocker, v2.0 tag pulled
Round-9 review: engineering landed but the headline feature is visibly broken — interior rigs (keepers + browsers) render ~2x room scale, heads through the ceiling. Verified live: head bone at world Y=3.83m in a 3.4m room vs requested 1.58-1.92m. Root cause narrowed to bind-pose head measurement in rigs.js buildFigure (raw headY 82 at bind vs 180 animated, ~2.2x underestimate -> giant after normalize). Visible in D's own r9 acceptance shot and F's tour 'browsers.png'; neither lane flagged it. Local v2.0 tag deleted (never pushed; origin still ends at v2.0-rc). R10: D fixes pose-aware + adds a head-height QA gate, F re-shoots browsers + night_crowd and re-tags v2.0 on the fixed commit. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
cb3aed196a
commit
8bd4676593
78
docs/LANES/ROUND10_INSTRUCTIONS.md
Normal file
78
docs/LANES/ROUND10_INSTRUCTIONS.md
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
# PROCITY — Round 10 lane instructions (from Fable, integrator)
|
||||||
|
|
||||||
|
Date: 2026-07-15 · Written after round-9 review. **v2.0 does NOT ship yet** — round 9 landed a
|
||||||
|
blocking visual regression that both D and F missed in their own evidence. Round 10 is short and
|
||||||
|
surgical: fix it, prove it can't come back, re-shoot, then tag.
|
||||||
|
|
||||||
|
## Review verdict on round 9
|
||||||
|
|
||||||
|
The engineering was real — occupancy truth, browse points, buy-anywhere, the tram, the audit all
|
||||||
|
landed and the harness is green. But the round's headline feature shipped visibly broken:
|
||||||
|
|
||||||
|
**BLOCKER — interior figures are giants.** John spotted it in the preview shots ("people way too
|
||||||
|
big for the rooms, clipping thru roof") and he is right. Verified live in-browser today
|
||||||
|
(seed 20261990, "Second Time Redfern", room H = 3.4 m):
|
||||||
|
|
||||||
|
- keeper head bone at **world Y = 3.83 m** — a ~3.8 m person; `keepers.js` requested 1.58–1.92 m
|
||||||
|
- `buildFigure` (rigs.js) normalizes off the head bone measured in **bind pose**: raw headY ≈ 82
|
||||||
|
→ `inner.scale = 0.0213`. But once the idle clip poses the skeleton, the head sits at raw ≈ 180.
|
||||||
|
The bind-pose measurement underestimates the animated rig by ~2.2× → every interior rig is ~2×
|
||||||
|
room scale. The clip filter is NOT the cause (verified: idleClip has zero `.position` tracks).
|
||||||
|
- Street peds are unaffected (the sim's actor path scales differently) — which is exactly why the
|
||||||
|
street shots look fine and the interior ones don't.
|
||||||
|
- Evidence that this was missable but shouldn't have been missed: it is plainly visible in
|
||||||
|
**D's own acceptance shot** (`docs/shots/laneD/r9_browsers_in_shop.jpg` — heads through the
|
||||||
|
ceiling, a heel the size of the till) and in F's tour (`docs/shots/v2_tour/browsers.png`), which
|
||||||
|
F captioned "framing's a bit close". Compare `docs/shots/v1_tour/record_interior.png` — the v1
|
||||||
|
keeper was correct. The regression window is the R9 interior-presence work.
|
||||||
|
|
||||||
|
Consequences: local `v2.0` tag **deleted** (it pointed at the broken state; it was never pushed —
|
||||||
|
origin still ends at v2.0-rc). main IS pushed, so lanes work from a synced tree. F re-tags after
|
||||||
|
the fix lands.
|
||||||
|
|
||||||
|
## Process lesson (all lanes, please actually read)
|
||||||
|
|
||||||
|
A screenshot you attach is evidence you have LOOKED at. "Documents the feature" is not a review.
|
||||||
|
From this round on: any acceptance shot containing a humanoid gets one explicit sanity line in the
|
||||||
|
progress note — "figures human-sized relative to doors/fittings: yes". Ten seconds. The v1-vs-R9
|
||||||
|
comparison above is what it catches.
|
||||||
|
|
||||||
|
## Lane D — the fix (lead, blocking)
|
||||||
|
|
||||||
|
1. Fix interior rig scale in `rigs.js` `buildFigure` (or the `keepers.js` call into it): normalize
|
||||||
|
**pose-aware** — bind the idle clip, `mixer.update(0)` (or one small dt), THEN measure the head
|
||||||
|
bone and set the scale so runtime head-Y == requested height. Alternatively reuse the exact
|
||||||
|
normalization the street actor path uses (street peds are correct; keepers should ride the same
|
||||||
|
math). Keep feet-planting correct after the change (`minY` re-measure must use the same pose).
|
||||||
|
2. Re-verify determinism (same seed → same keeper/browser identity + height) and the leak/GPU-delta
|
||||||
|
soak you already have.
|
||||||
|
3. **Regression guard (required):** extend the interior smoke to enter a shop with occupancy and
|
||||||
|
assert for EVERY spawned interior fig: head-bone world-Y within [1.4, 2.0] AND < room `dims.H`.
|
||||||
|
Wire it into `tools/qa.sh` strict so a giant can never pass a gate again.
|
||||||
|
4. Re-shoot `laneD/r9_browsers_in_shop.jpg` → `laneD/r10_browsers_fixed.jpg`, and write the
|
||||||
|
sanity line.
|
||||||
|
|
||||||
|
## Lane F — verify, re-shoot, ship (after D lands)
|
||||||
|
|
||||||
|
1. Pull D's fix, re-run the interior-presence smoke + the new scale gate; `qa.sh --strict` green.
|
||||||
|
2. **Re-shoot the tour shots containing interior figures**: `browsers.png` at minimum. Also re-shoot
|
||||||
|
`night_crowd.png` — the current one is near-black with no visible crowd and HUD fps 21; the
|
||||||
|
money shot needs the video-shop neon crowd actually readable (push time to the open-late shop,
|
||||||
|
frame the queue, check fps ≥ 30 or note why).
|
||||||
|
3. Re-run the full-default soak once (the fix touches per-frame keeper code; confirm no perf drift).
|
||||||
|
4. Docs freeze addendum: one paragraph in the release notes on the R10 fix.
|
||||||
|
5. **Tag `v2.0` on the fixed commit** (fresh annotated tag), push main + tags. This closes v2.0.
|
||||||
|
6. Update the tour README so shot filenames stay stable for the v3 site.
|
||||||
|
|
||||||
|
## Lanes A / B / C / E — on call only
|
||||||
|
|
||||||
|
Nothing blocking from you this round. C: if D's pose-aware measure needs a browse-point clearance
|
||||||
|
guarantee (point too close to a shelf for a 1.9 m fig), answer quickly; otherwise all four lanes
|
||||||
|
stand by for v3 planning. B's tram and E's audit are accepted as shipped.
|
||||||
|
|
||||||
|
## Standing items
|
||||||
|
|
||||||
|
- **Audio: fourth round parked.** John — one line unblocks it: "generate freely" / "use library X"
|
||||||
|
/ "skip for v2". Until then it stays out of scope.
|
||||||
|
- After `v2.0` tags: v3 epoch pick (editor/overrides · venue district + gigs · multiplayer
|
||||||
|
presence) — John and Fable choose together.
|
||||||
Loading…
Reference in New Issue
Block a user