Built by the Opus session per docs/briefs/SOCIAL_RESET.md; integrated and
verified by Fable (typecheck clean, relay validation reviewed, 3D avatar
gear/face pixel-confirmed live — the one item the build session couldn't
capture in its frozen preview pane).
- Avatars: hue/gear/face enums in src/net/avatarLook.ts shared by the 3D
build and the Menu AVATAR tab's 2D mirror; live sync with client-side
coalescing (two-tab testing caught the relay rate limit permanently
desyncing rapid editors - trailing send fixes convergence).
- Emotes Z/X/C/V: wave, beat-synced nod, point, rate-limited airhorn
(detuned saws + confetti), server + client caps.
- Reset ritual: after a win the fuse takes a deliberate 5s hold (reuses
the workshop radial meter as the warning dial) -> server-authoritative
reset with 10-min cooldown; music brakes to silence, lights die over 3s,
workshop resets to wires-off with a SERVER-generated random weight notch
(both tabs land identical), player builds survive, quest replayable.
- Roster: hold Tab for who's-in-the-booth with hue swatches.
- interact/ addition (flagged friction): additive setBreakGuard hook so
interaction.ts never learns what a fuse is.
- launch.json: main dev config uses autoPort (5173 collisions with
parallel sessions).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Fresh-eyes review of the glow-up found the G5 side-ring texture applied to
whole tier cylinders - linear UVs on the caps rendered as diagonal stripes
across the disc. CylinderGeometry takes [side, top, bottom] materials: sides
keep Lane E's ring texture, caps get a new radial recordCapGrooveTexture()
(machines/util.ts) with ring count scaled per tier radius so groove pitch
stays constant. Also lands the three handoff-doc updates from the phase.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- src/main.ts: full wiring per docs/INTEGRATION.md (renderer/world/booth/
chunks/machines/player/interaction/audio/fx/hud + fixed-step loop),
QuestPositions adapter (Lane C nested -> Lane D flat), attachPlayer step,
pointer-lock-gated input, debug handle for smoke tests.
- core/constants: Y_RECORD_TOP 85 -> 81 (record was an unclimbable 5-voxel
cliff; now 1 proud of the plinth, auto-steppable) + PLATTER.wellDepth.
- machines/platter: body + collider now fill Lane C's well down to y=74.
- fx/layout: VU sprites aligned to Lane C's physical LED towers.
- interact: per-material break times (dust 0.12s) so the crossfader jam
isn't a 96-second mine.
- docs/INTEGRATION_NOTES.md: every glue decision + live verification results
(120 fps, ride/mine/quest/win all green, zero console errors).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>