Contracts v9: CorrectionState (debt/band/units, rungs 2-4 — the mite stays in
wildlife by ruling), EntityState.sealed, pry command, CommissionDef.compliance,
notice/sealed/mirrored/stasis/debtBand events, and Renderer.onEvents?() — RENDER's
round-6 request, granted now that three cues derive events from snapshot deltas.
main.ts fans the same event array to the renderer.
Rulings baked into the orders (from the adversarial design pass): fax-first and
auto-release are CONTRACTUAL on the auditor; warden faxes carry no grid reference;
gunships target deviation, not throughput; no debt for canning a unit (an immune
system does not hold a grudge); THE INVERSION - The Correction is the only thing
in the world that never drops a frame; the compliance tone is one grid-locked
triad voice, discovered-gated, sparse by construction.
Also: archaeology-lab.glb re-baked through the corrected farm pipeline
(bg_remove_local before meshing) - backdrop-slab flatness 0.614 -> 0.480.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ASSETS: 10 GLBs generated end-to-end on the local farm (flux_local concept ->
sf3d image-to-GLB on the m3ultra, ~2min/asset, zero cloud spend) and installed
into public/assets/models/: mosh-reactor, quantizer, seam-extractor, muxer,
archaeology-lab, software-decoder, decode-asic, mosquito-trap, chroma-keyer,
artifact-bottler. Hot-swap verified in showroom + demo world. Known gap, ordered:
GLBs carry no emissive accent so they read dark at game zoom - RENDER round 6.
Contracts v8: WildlifeState/'wildlife' event gain 'parity-mite'; new 'repaired'
SimEvent (a mite corrected your work); speaker adapter gains listStations()
passthrough (MHz) for dial tick marks. ui/voice.ts widened for the new kind
(placeholder copy; UI owns the real lines).
Round 6 orders in all lane docs - THE CORRECTION walks: parity mites (SIM),
GLB legibility pass (RENDER), mite surfacing + dial ticks + credits (UI),
repair stamps + sterile creep on the sky (SCREEN), firewall machine + numbers
decoy drift fix + accents for the GLB'd ten (DATA).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Two verified production bugs from the voice-cloning review:
1. Tuner dead-dial: the dock resolved its RadioControl once, inside ui.init(),
before any gesture built the audio graph - latching the silent echo stand-in
for the whole session. main.ts now publishes a lazy-binding Radio->RadioControl
adapter BEFORE ui.init (real subscribe() at probe time), attaching to the
engine on first gesture and translating shape + units (UI MHz <-> engine kHz,
volume()/mute() <-> setVolume()/setMuted(), locked id -> station name).
Verified live: dock setFrequency(0.64 MHz) -> engine 640 kHz, station readout
'THE STANDARD', '0.6 THE STANDARD AM - SIGNAL LOCKED' on the dock.
2. Chyron clipping: one un-wrapped fillText showed ~51 chars; 29 of THE
STANDARD's 30 lines (mean 69, max 92) clipped mid-sentence. Now word-wraps to
two lines with 20->16->13px step-down. Verified live: 71-char propaganda line
renders complete across two lines.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Review: 5/5 lanes pass, 446/446, verified live end-to-end: fax ladder opens the
game, floor + seam glints render (RENDER's colorspace find), fossil excavates at
the seeded position, tuner dock slides in, radio locks 88.1 FKTRY FM and AM 640
THE STANDARD. The pipe is real.
Integration fixes (the cross-lane seams no lane owned):
- audio: radio handle exposed outside the DEV gate — the dock was silent in PROD
(UI probed __fktrySpeaker, SCREEN's getRadio read a DEV-only object; both halves
correct, handshake unowned). main.ts now publishes __fktrySpeaker on first gesture.
- contracts v7: GameData.seams (SeamDef/SeamMap lifted from SIM) + main.ts imports
seams.json — seams were inert in the real game (SIM's request).
- index.html RULING: #screen stays interactive (UI's click-to-enlarge landed after
RENDER's dead-zone probe — overtaken by events); cursor:pointer added.
- main.ts: ghost refreshes every frame (stale demolition tint on Esc — UI finding);
__fktryDemo uses the grantResearch command (testkit retired).
- relic.test.ts Seamed type vs the new contract field (my breakage, my fix).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>