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>
- 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>
The banner keyed on `out || ratio > 1`, so any time draw exceeded generation
the panel screamed BROWNOUT — even while the buffer tanks were quietly
covering it, the sim's flag was false and THE SCREEN was calm. That state is
the factory working as designed, not failing. Only the HUD was panicking.
BROWNOUT is now the sim's flag and nothing else. A covered deficit gets its
own amber, steady, non-flashing state: "ON RESERVE · 34s", where the seconds
are stored/(draw-gen) — real arithmetic, because v3 ruled stored is
bandwidth-SECONDS and gen/draw are per-second. Same maths SCREEN uses.
Four states (ok / tight / reserve / brownout) now live in a pure power.ts and
are pinned by tests, including the exact case that lied: gen 100, draw 134,
stored 1000, brownout false -> reserve, not brownout.
Also uses v4 bandwidth.capacity to turn the buffer readout into a fuel gauge
(0/900) rather than a bare number.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The five M1 surfaces, replacing the stub:
- buildbar.ts: one button per machine, hotkeys 1-9, R rotates, Esc or
right-click clears. LANE-DATA shipped 21 machines, so the bar wraps
rather than running off both edges of the viewport; slots 10-21 are
click-only for now (paging proposed in NOTES).
- topstrip.ts: bandwidth meter going amber at 85% and red + flashing
BROWNOUT over 100%, buffer, shipped ticker + per-item chips, tick or
HALTED. The brownout is legible from this panel alone, which is the
one failure the player has to read across the room.
- inspector.ts: name, codex flavor, intake/output chips with live
buffers, process bar, heat, jam reason. Holds an entity id and
re-looks-up each frame, so a removed unit closes itself.
- fax.ts: the commission card with wants-as-chips and a FAX SENT stamp
on commissionDone.
- toasts.ts: max 4, 6s TTL, colored per event kind.
Click-to-inspect is not wired: the UI cannot reach renderer.pickTile
(UIBus exposes only dispatch/selectedBuild, and ui.init never sees the
Renderer). TAB cycles the unit manifest as a stopgap so the inspector is
reachable without a console. Contract request filed in NOTES.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>