Commit Graph

4 Commits

Author SHA1 Message Date
type-two
5500949d83 [ui] the enemy has paperwork: PARITY DEBT gauge, notices, seals + PRY, stasis
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>
2026-07-29 12:40:06 +10:00
type-two
eafd31f263 [ui] round 6: mite surfacing, dial tick marks, and a credits footer
- 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>
2026-07-20 18:30:31 +10:00
type-two
3cec62368a [ui] fix: BROWNOUT was lying about a covered deficit
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>
2026-07-17 20:13:23 +10:00
type-two
c18309f464 [ui] build bar, top strip, inspector, commission fax, toasts
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>
2026-07-17 16:15:50 +10:00