Skip to content

feat(scaffold): post-mount stem for plinth-hosted readouts (#286) - #287

Closed
bradleypmartin wants to merge 1 commit into
mainfrom
286-readout-post-mount
Closed

feat(scaffold): post-mount stem for plinth-hosted readouts (#286)#287
bradleypmartin wants to merge 1 commit into
mainfrom
286-readout-post-mount

Conversation

@bradleypmartin

Copy link
Copy Markdown
Contributor

Closes #286 once headset smoke confirms the post reads as plinth hardware.

Summary

  • Surfaced from PR feat(scaffold): extrude readout back-plate to a depth slab (#270) #285 smoke (third round on feat(scaffold): display-mock visual-language pass on plinth-mounted readouts (post-#252) #270's depth-slab): readout slab still reads as a "floating monitor that happens to be near the plinth," not as something physically mounted on it.
  • Adds a thin cylindrical ReadoutPost primitive (src/scaffold/ui/ReadoutPost.ts) registered in its own 'surface'-oriented plinth slot at the same XY as each readout. Post is statically anchored to the working surface (no faceCamera overwrite); the readout slot's localXYZ[2] lifts the readout group by READOUT_POST_LENGTH along the surface normal so the readout group origin sits at the post tip.
  • PanelReadout.faceCamera is unchanged — today's world-Y yaw billboard is preserved across all four cluster scenes. No changes to back-plate, text layout, dimensions, or rotation math.
  • Plan doc: _private/plans/286-readout-post-mount.md v3 (post-roundtable + second-Sonnet sanity pass).

Architecture context

v1 of the plan proposed yawing the panel around the post axis. Three-vendor /roundtable-plan-review returned overall HOLD — four convergent HIGH findings on broken rotation math. v2 abandoned that design in favor of two slots per readout (post + panel as separate plinth-registered primitives, panel preserves today's billboard). v2 → second-Sonnet PROCEED with two LOW tightening nits, folded into v3 (explicit orientation: 'surface' at the post slot sites, plus a wiring test asserting the post quaternion equals R_x(-PLINTH_TILT_DEFAULT) after createPlinth placement).

The post is purely visual signaling that the readout is mounted on the plinth — not a kinematic element. Panel center orbits the lifted slot point on an 8 mm radius circle as yaw varies (panel-back is 8 mm behind group origin in local Z); at panel scale (half-widths 0.20–0.38 m) this is visually invisible.

Test plan

  • npx vitest run — 46 files, 610 tests passing (6 new tests in test/scaffold/ui/ReadoutPost.test.ts).
  • npx tsc --noEmit — clean.
  • pre-commit — gitleaks + eslint + standard fixers clean.
  • Headset smoke on Cloudflare PR preview: readout reads as mounted on a stem extruded from the plinth surface (kills the "floating monitor" read from feat(scaffold): extrude readout back-plate to a depth slab (#270) #285). Panel yaw behavior unchanged. Post stays anchored to the surface from any viewing angle. Quest 3S 72Hz hold preserved.
  • Pancake smoke on Cloudflare PR preview: default OrbitControls pose still frames plinth + math object + readout acceptably in all four scenes (blocking acceptance criterion per plan §5; if broken, retune PLINTH_*_READOUT_Y per-scene in this PR before merge).
  • SceneRack scene-switch cycle: no flicker, post re-mounts cleanly across hops.

Refs: #286 (this), #285 (smoke source), #270 (closed; chrome family), #225 (parent sub-epic), #221 (v1.0 staging epic), #271 (composition partner).

Adds a ReadoutPost cylinder primitive in a sibling 'surface'-oriented
plinth slot per readout, killing the "floating monitor" read from
#285 smoke. Two-slot architecture: post anchored statically to the
working surface; readout slot lifted by READOUT_POST_LENGTH along
the surface normal. PanelReadout.faceCamera unchanged — today's
world-Y yaw preserved across all four cluster scenes.
@github-actions

github-actions Bot commented Jun 1, 2026

Copy link
Copy Markdown

Preview deploy ready — commit 0bf09e819fbde574460a487854234e8fa6ce6223

https://geometer-pr-287.1bradley-martin1.workers.dev

Open this URL in the Quest browser to smoke-test in headset.

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.

feat(scaffold): post-mount readouts + yaw on the post's axis (not world-vertical)

1 participant