TURNCRAFT/docs/LANE_D_update.md
jing 74482e5693 Glow-up review fix: concentric groove caps on record tiers
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>
2026-07-16 22:48:32 +10:00

4.3 KiB
Raw Blame History

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 (13); 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 incomplete for 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

  1. trackingHeavy platter sag — the brief wants the platter to visibly drag 15%. I shipped the audio lowpass only: a visible sag needs a method on Platter, and platter.ts isn't in this brief's sanctioned edit list. Say the word and it's a 5-line additive method.
  2. 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.ts contention.
  • 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 Quest to support un-repair + a signal:break event — 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).