Skip to content

feat(scaffold): static post + remove readout yaw (cluster-wide) #288

Description

@bradleypmartin

Follow-up to closed #286 / closed PR #287. The post-mount idea is good; the rotation-axis path we took in #286 was the wrong rabbit hole. This issue captures the locked direction.

Direction (locked, not TBD)

  • Add a STATIC cylindrical post connecting the plinth working surface to the back of each readout's back-plate. Both endpoints fixed; the post doesn't yaw, doesn't track the camera, doesn't articulate. Purely structural mounting hardware extruded from the plinth body.
  • Remove faceCamera from PanelReadout entirely. The readout mounts statically with its face along the surface normal direction. Since the plinth's working surface is nearly vertical and faces the user's standing pose, the surface-normal direction already points roughly toward the user — no billboard math needed for the face to be readable from the default viewing position.
  • All four cluster scenes (quadrics / tangent-planes / gradient-levels / saddle-extrema): cluster-wide consolidation, single PR.
  • Possibly include rackLabel (quadrics' canonical-forms heading) — the last surviving Label.faceCamera in-tree caller per #280 §3.7, originally deferred to feat(scaffold): display-mock visual-language pass on plinth-mounted readouts (post-#252) #270 which has since closed. Same vocabulary call applies: static-locked on the plinth surface is the cluster's surface-mounted-text posture now.

Why this is the right move

Third domino in the same surface-locked vocabulary thread:

  1. feat(scaffold): bake slider thumb labels into the sphere texture (follow-up to #276) #278 / PR feat(scaffold): bake slider thumb emblazon into sphere texture (#278) #279 — emblazoned slider thumb glyphs locked to static orientation (validated feedback_static_orientation_for_embossed_glyph).
  2. feat(staging): consolidate per-slider value labels onto static surface-locked vocabulary (stub) #280 / PR feat(staging): surface-lock per-slider value labels on the plinth (#280) #281 — per-slider value labels consolidated from yaw-billboard to surface-locked across tangent-planes / gradient-levels / saddle-extrema.
  3. This — readouts + rackLabel consolidated to static-mounted, completing the move.

After this, the only faceCamera caller on the plinth is WorldAxes (which legitimately needs orientation: 'world' for math-frame semantics — see #257). Everything else is static. Big coherence win for the plinth vocabulary going into v1.0.

Tradeoff (accepted)

User has to position themselves to read the readout, rather than the readout tracking them. Same tradeoff #280 accepted for per-slider labels; validated in headset smoke there.

Conceptual benefit: the readout reads as a physical instrument on the desk (like a real LCD bolted to a real stand), not as a billboard chasing the viewer. Matches the "museum exhibit" framing of the v1.0 staged-exhibit vocabulary.

Scope

Does:

  • New ReadoutPost primitive (or revival of the one from PR feat(scaffold): post-mount stem for plinth-hosted readouts (#286) #287's commit 0bf09e8 — it's structurally fine, just no longer participates in any rotation pipeline).
  • Per-scene slot manifest edits: add a static post slot per readout.
  • Delete PanelReadout.faceCamera and its per-scene callers (the four if (camera) readout.faceCamera(camera) blocks in each scene's update()).
  • Optionally extend to rackLabel.faceCamera in quadrics/index.ts:1561 if Brad wants the full plinth-text consolidation in one PR.

Doesn't:

Composition with adjacent work

  • Parent sub-epic: #225 (control plinth).
  • v1.0 staging epic: #221.
  • Composes naturally with #271 (plinth layout finalization) — removing readout yaw may surface a need to retune PLINTH_*_READOUT_Y per-scene so the static readout face sits at a comfortable reading angle for the typical viewer pose.

Refs

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions