Approved addendum. A repeating line prints once and then counts (×N) instead of
printing again; the window runs from the last line PRINTED, so a permanent stall
still speaks every 12s rather than going silent. Brownout, commissions, research,
relics, seals, stasis and band changes are never throttled — each is news once.
RULING made live: the throttle key is the RENDERED LINE, not the entity. Keying on
(entity, reason) passed its tests and still put four identical "QUANTIZER: INTAKE
STARVED" lines on screen, one per quantizer; the copy carries no unit id, so ×4
says strictly more than four copies do.
Also: adopt contracts v9.2 CorrectionUnit.remaining in stasis.ts (finite and >= 0
wins, phase-derived estimate stays as the fallback for open-ended phases). SIM
landed it mid-write — verified against their code, the lock chip now opens at 15S
and counts down instead of opening on HELD.
And one copy fix the first real gunship mirror exposed: "YOUR MACROBLOCK BRICKS WAS
MIRRORED" is now "A CLEAN COPY OF YOUR <ITEM> SHIPPED FIRST. THE LEDGER IS
SATISFIED." — no verb left to disagree with a plural.
277 UI tests, tsc clean tree-wide.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
My own round-3 test claimed the sim advances to commissionQueue[1]. DATA's v9
commissions falsified that twice in twenty minutes — first by cascading (entries
behind the head were already satisfied and completed on arrival), then by putting
an unpayable head in front of the rig. The peek assertion — NEXT IN TRAY is always
the live queue's second entry — is unconditional again; the advance is only
asserted when the head is one the test rig can actually pay.
263 UI tests green, tsc clean tree-wide under contracts v9.1.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Round 7 phase 1, contracts v9. Five surfaces for The Correction's rungs 2-4:
- PARITY DEBT gauge in the top strip — five clinic-white bands, never red, never
flashing, hidden until the debt first moves and visible forever after.
- Notices are faxes: a white-letterhead tray above the commission fax. No unit
name, no grid reference (pinned by a test that forbids digits outright), and
deliberately not also a toast. Compliance quotas get a COMPLIANCE stamp.
- Compliance seal panel + PRY, with the bar driven by SIM's own pry progress and
the PROCESS bar standing down so that number can't be misread as a batch.
- Stasis: hash-named countdown chips derived from the auditor's phase progress,
and the abstention teach in the one window where it is still actionable.
- MIRRORED joins the CORRECTED block as its own row, not the same counter.
Verified live on :8153 by driving the real sim + real UI in the browser: a full
warden cycle (seal -> PRY -> "SEAL REMOVED. THIS WILL BE NOTED." -> debt up) and a
full auditor cycle (teach -> lock 744510A8 -> countdown -> auto-release).
263 UI tests, tsc clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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>
- The Correction gets a voice: parity-mite arrival/swat copy, repaired-event
toasts ("IT LEFT A RECEIPT."), a CORRECTED ticker in the top strip, and a
per-unit FIREWALL LOG in the inspector. All clinical white-green (codex §8),
hidden until the first edit so the enemy is never signposted early.
- Tuner dial draws anonymous station ticks from the speaker adapter's
listStations() (MHz, empty pre-gesture) — landmarks that mark THAT, not WHAT.
- ABOUT/CREDITS footer on the tech panel: repo, codex, and a standing
synthetic-voice disclosure slot for the voice-cloning plan.
- 213 UI tests (was 194): new corrections.ts + mite.test.ts, extended tuner
and techpanel suites.
Co-Authored-By: Claude Opus 4.8 <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>
All nine orders shipped. The tab-click report was a real bug (scrollbar eating
half of every tab hitbox) and is fixed; RENDER's demolition tint is verified
with a screenshot, closing the item owed since round 3.
The honest parts: DATA's commission queue head-of-line blocks the whole game,
RENDER doesn't read the inspect selection yet, and the radio drives a stand-in
until SCREEN publishes its control. One proposal (audio on the bus), no
contract requests.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
All five orders shipped. The honest parts: SIM's research gating breaks SIM's
own reference factory at HEAD (GEN 80 vs DRAW 100, permanent brownout), nothing
in the game can make a science pack so research can't be performed by playing,
and the order's numbers went stale mid-round for the third round running.
No contract requests; one proposal (grantResearch, so tests stop coupling to
the save schema).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Shipped 1-4, skipped the tech panel (tech.json is still []). The honest parts:
the reference factory can't ship anchor slabs so the SANITISING premise didn't
hold; live pressure verification is impractical in the browser pane (paused rAF
+ HMR churn) so it's headless against the real sim; and I nearly reported
commissionQueue as unpublished before a probe caught SIM landing it mid-round.
Two contract requests (setGhostMode to kill the __remove magic string,
MachineDef.accent) and a ?uidemo proposal.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Shipped/verified list, and the honest parts: happy-dom was granted but never
installed; STANDING ORDER and SANITISING are built but unreachable until the
sim advances commissions and a chain gets fed; NEXT IN TRAY infers the queue.
Three requests (commission queue on snapshot, sim commission rotation,
happy-dom) and a remove-button proposal.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Shipped/verified list, and the honest parts: click-to-inspect is blocked
on reaching renderer.pickTile, 12 of 21 machines have no hotkey, and the
lane has no DOM test env. Four contract requests (pickTile, MachineDef
.color, MachineDef.flavor, jsdom) and a build-bar paging proposal.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>