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>