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>
4.3 KiB
LANE D — Update for Fable
This phase: The Headshell Workshop ✅
Of the two briefs, WORKSHOP_CARTRIDGE is Lane D's (stylus node, tonearm,
interaction, quest). GLOWUP_ART is Lane A/C (atlas, bloom, decals, mixer density,
PCB pagodas) — untouched by me, and I deliberately kept out of
worldgen/buildBooth.ts so that lane keeps the file conflict-free.
Status: complete, implemented exactly as briefed, verified live (incl. two-tab
sync and a relay fuzz). npm run typecheck clean, zero console errors.
Full wiring + contract additions: INTEGRATION_NOTES.md § "Headshell Workshop".
What landed
New src/machines/workshop/** — one Workshop machine (on machines.workshop)
owning the visible/collidable assembly arm. The real Tonearm sits in service
mode until stylus is repaired, then takes back over (cue/track/return).
| Stage | Mechanic |
|---|---|
| 1 Seat | Parts-bin chrome pickup = the cartridge. Seats rotated wrong (1–3); E cycles it square — the needle tip glints when correct. |
| 2 Wires | Pick a tag-wire off the loom → it trails as a catenary from your hand; hold E 1.2 s to crimp onto a stubborn pin. Any wire fits any pin; a 4-LED continuity lamp tells the truth. Carrying halves your jump; Q or walking >30 voxels returns it. |
| 3 Screws | Hold E to torque (2.5 s, radial HUD meter), Shift+hold E backs off. Uneven → the cart visibly tilts → azimuth error. |
| 4 Balance | Cue lever lifts the arm into a live seesaw you stand on; shove the counterweight (fader-style walk-push, 11 notches). Bubble level centres at 7; 8 = 2 g. |
| 5 Drop | Cue again → test signal. Every mistake you left in is heard and drawn as a glyph on the scope block. All clean → quest.repair('stylus') and the arm becomes the normal tonearm. |
Nothing hard-fails: a bad test drops you back to clip with every stage
revisitable. All state syncs, so two players can split the job.
Verified live (not just typecheck)
- Happy path through the real press/hold/cue API → repairs
stylus, tonearm restored, quest 1/5. - All fault modes classify + announce: skate, swapLR, phaseCancel,
azimuthTilt, trackingLight, trackingHeavy, plus
incompletefor a wire left off. Combined faults surface together. A failed test never repairs. - Seesaw (the risky one): standing on the beam while sweeping the notch — player motion ≤ 0.075 voxels/tick, zero drift, finite, at 33 and stopped. No slingshot. (Lane B's min-penetration resolution handles it.)
- Two tabs: A crimped wires while B torqued screws → converged both ways; a third late joiner got the completed pose.
- Relay fuzz: 17 malformed shapes dropped, state uncorrupted, no crash; valid messages still accepted.
Two things worth your call
trackingHeavyplatter sag — the brief wants the platter to visibly drag −15%. I shipped the audio lowpass only: a visible sag needs a method onPlatter, andplatter.tsisn't in this brief's sanctioned edit list. Say the word and it's a 5-line additive method.- Relay last-write-wins has no re-sync. A dropped message (e.g. the 40 msg/s cap during a burst) leaves clients diverged until the next change. Real pacing is ~8/s so it doesn't bite, and it's inherent to the existing edit/platter design too — but a periodic state heartbeat would close it if you want it airtight.
Notes on the other briefs / backlog
- The Glow-Up brief is not mine, but it and this one are disjoint by design —
I render all workshop meshes myself, so no
buildBooth.tscontention. - Of your backlog, emotes and the booth-reset ritual are Lane D-shaped
(machines/interaction/quest). The reset ritual is a nice inverse of this work:
mining the fuse back out would need
Questto support un-repair + asignal:breakevent — happy to brief/build it.
Repo state
The workshop code is already committed on main (9c668d3). My only uncommitted
changes are docs: this file and the INTEGRATION_NOTES verification section — I
haven't pushed to ssh://git@100.71.119.27:222/monster/TURNCRAFT.git, since the
booth is shared and live and anything I push syncs to everyone. Say go and I'll
push.
Local test artifacts cleaned up (relay + dev server stopped,
server/booth-state.json removed).