Skip to content

P0a: gate leaked debug UI out of survey framings (+ eng-review re-scope) - #38

Merged
rroojrooj merged 4 commits into
mainfrom
claude/phase0-debug-purge
Jul 7, 2026
Merged

rroojrooj merged 4 commits into
mainfrom
claude/phase0-debug-purge

Conversation

@rroojrooj

Copy link
Copy Markdown
Owner

First build phase of the Reality Master Plan. Ran the full pipeline: sub-plan → /plan-eng-review (+ outside voice) → build.

What the review changed

The eng review (4 findings) + an independent outside-voice challenge (10 findings, 3 verified against code) re-scoped Phase 0. Two of the six original fixes (classmap dot-screen, HD macro seam) touch the exact turf.js surfaces P2 rewrites — so they'd be throwaway. They were deferred to P2. The outside voice also caught a real missed artifact: the ball auto-scales to 26× at survey distance (scene.js:1322), a bigger "debug viewer" tell than the aim line. What remained (P0a) is the genuinely-blocking work.

What shipped

  • public/render/framing.js — pure isPlayFraming / ballReadScale / pinReadScale, the single source of truth for "is this a play framing."
  • scene.js — the dashed aim line + the distance-inflated ball/pin now render only in a play framing (camMode==='idle' && !anim); survey/overview/beauty shots get true-scale objects and no aim line. Play-mode behaviour unchanged.
  • test/scene-ui-gating.test.mjs — locks the predicate + scale gating (no existing test covered it). 294/294 green.
  • docs/fixtures/chambers-sweep.json — pinned capture sweep so before/after are pixel-comparable and re-runnable.

Verified

Live on the render harness: BEFORE free-cam frame showed the dashed aim line + a 6.2×-inflated ball at 113 m; AFTER is clean (aim line hidden, ball/pin 1×); the idle play frame keeps its aim line + readability scale (no gameplay regression).

Live Task-0 diagnosis (drove the deferrals)

  • "Yellow T" is NOT a sprite — the scene has 0 sprites (462 meshes). The master-plan "tee marker sprite" claim was wrong → it's a surface/classmap artifact, folded into P2.
  • Pond "checker" is NOT a cheap Reflector-gate — hiding all 3 Reflectors was pixel-identical (reflOn == reflOff) → deferred (not a P0a-sized fix).

Both plan docs (master + P0a sub-plan) carry the full GSTACK review report + the re-scope rationale.

🤖 Generated with Claude Code

rroojrooj and others added 4 commits July 7, 2026 10:58
Grounded in live+static diagnosis: aim line = real gameplay UI (LineDashed,
scene.js:1152) leaking into survey cameras; water.js is a real shader (pond
"checker" = distance moiré/reflector, TBD live); pin flag is red not the
"yellow T"; distance markers are DOM (not in captures). Structure: Task 0 =
live diagnostic gate (raycast/toggle to ID each of 6 artifacts + classify
bug-vs-UI-leak) then per-artifact fixes. Ready for /plan-eng-review.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…bility gate

Eng review (4 findings folded) + outside-voice challenge (10 findings, 3
verified against code) re-scoped P0. The two surface-material fixes (classmap
dot-screen, HD macro tonal seam) touch the exact turf.js surfaces P2 rewrites,
so they were deferred to P2 (do them once). P0a keeps the genuinely-blocking
work: gate leaked gameplay/debug UI out of survey framings — the dashed aim
line (verified ungated) AND the 26x ball / 6x pin auto-scale (scene.js:1322,
a missed artifact the outside voice caught). Corrected the master-plan
"T = tee sprite" claim (no sprite exists; likely classmap #ffff00 bleed).
Honest exit bar replaces "zero artifacts". Committed capture fixture + a
camMode-gating unit test added. GSTACK REVIEW REPORT appended.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The dashed aim line and the distance-inflated ball (up to 26x) / pin (6x)
are address-view aids that leaked into free-cam/overview captures, reading
as a GIS-viewer debug layer. Extract a pure play-framing predicate
(framing.js: isPlayFraming/ballReadScale/pinReadScale) shared by scene.js
and a new unit test; ball/pin return to true scale and the aim line hides
outside a play framing (camMode==='idle' && !anim). Play-mode behaviour
unchanged. 294/294 tests green (test/scene-ui-gating.test.mjs added).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Commit docs/fixtures/chambers-sweep.json (eng-review #1 pinned sweep). Record
the P0a outcome across the sub-plan, TODO, and HANDOFF: UI gate shipped +
verified before/after; live Task-0 diagnosis found the "yellow T" is NOT a
sprite (0 sprites in a 462-mesh scene -> master-plan claim was wrong) and the
pond "checker" is NOT a cheap Reflector-gate (reflOn == reflOff) -> both
deferred to P2/later. HANDOFF now points to the master plan as the live arc.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@rroojrooj
rroojrooj merged commit a448fb6 into main Jul 7, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant