Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions design/war-room/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# War Room TUI design

Visual spec for `conduit watch` as a terminal UI (issue #89, PRD `prd/drafts/war-room.md`).
Exported from the Claude Design "War Room TUI" page on 2026-09-28, after four rounds on the
web layout and one round constraining it to a character grid.

This is a design reference, not production code. The real TUI renders from the journal
projection with `@opentui/react`.

## Files

| Path | What it is |
|---|---|
| `frames/01-live-mid-mission.png` | Live run at T+47:00, WI-204 selected, 160x45 cell grid overlaid |
| `frames/02-card-journal-tool-selected.png` | Card drawer on WI-204, tool call #06 (Bash, exit 1) selected |
| `frames/03-approaching-the-wall.png` | T+1:52:20, budget line in view, 5h quota loud at 86%, WI-209 OVERDUE selected |
| `frames/04-color-tokens.png` | Every color token as a swatch |
| `golden/*.txt` | The same three frames as plain text, 160 columns by 45 rows |
| `golden/*.ans` | The same frames with 24-bit ANSI color and bold, one escape run per span |
| `tokens.json` | Color tokens as hex: stations (live, past, done), states, text and chrome, tool ticks |
| `tui-reference.js` | The cell-grid renderer the design page used, plus its mock scenario |

`golden/` was generated by running `build()` from `tui-reference.js` under Bun at animation
phase 0. `cat golden/03-approaching-the-wall.ans` in a truecolor terminal shows the frame.

## Rendering rules

- A fixed grid, 160 columns by 45 rows minimum. Every element occupies whole cells.
- One font size. Emphasis is bold, normal, or dim.
- Borders and dividers are box-drawing characters (`─ │ ┌ ┐ └ ┘ ├ ┤ ┬ ┴`).
- Waterfall bars are full blocks with eighth blocks (`▏▎▍▌▋▊▉`) for partial ends. When two
segments meet inside one cell, the left color is the foreground of an eighth block and the
right color is its background (see `bar()`).
- Working segments animate by swapping `█` for `▓` every fourth cell. The overdue part of a
held bar is `▒` in the overdue color. The rework marker is `«`. The OVERDUE state label
blinks between an overdue fill and overdue text.
- Header meters are 8 cells of `█`, eighth blocks, and `░`. At 80% or more the whole meter
gets the loud fill.
- There is no hover. The selected row's details go in the status bar on row 42. The footer
carries key hints: `j/k` select, `enter` open drawer, `t` tool ticks, `r` replay, `esc` close.
- The drawer is 60 columns wide and its body scrolls, with an indicator in the last column.

## Using the golden frames

`tui-reference.js` draws from a hard-coded scenario (`CARDS`, `CALLS`, `FRAMES`). A journal
fixture that reproduces that scenario lets the real TUI's `captureCharFrame()` output be
compared against `golden/*.txt`. Expect small differences where the real projection has
data the mock did not; treat a difference as a question about the design or the projection,
and update the golden file only on purpose.

The mock scenario shows some fields the journal may not record yet (for example, a
finding's severity). Where the journal lacks a field, the TUI renders "not recorded" and
logs the gap (PRD FR-13) instead of copying the mock.
Binary file added design/war-room/frames/01-live-mid-mission.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added design/war-room/frames/04-color-tokens.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
45 changes: 45 additions & 0 deletions design/war-room/golden/01-live-mid-mission.ans

Large diffs are not rendered by default.

45 changes: 45 additions & 0 deletions design/war-room/golden/01-live-mid-mission.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ CONDUIT │ WALL ██▋░░░░░ 33% │ TOKENS █████░░░ 62% │ QUOTA 5h ███▎░░░░ 41% │ WATCHDOG █▊░░░░░░ 02:41 │ 4 working 2 waiting 1 held 3 done 1 scrap │ T+47:00 │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ decompose test implement review probe deliver │
│ card 0 5m 10m 15m 20m 25m 30m 35m 40m T+47:00 state │
│ ┌─ PRD-014 range-queries █████████████▊·fan-out ×11··················································································│ awaiting │
│ ├─ WI-201 range-schema ▊█████████████████████████▏███████████▉█████▌ │ ✓ 25:36 │
│ ├─ WI-202 cli-flags ▉██████████▎██████████████████████████▍█████████████▋ │ ✓ 29:04 │
│ ├─ WI-203 date-parse ··▏██████████▋██████████████████████▌████████▊███████████▎██████▏ │ ✓ 34:09 │
│>├─ WI-204 parse-range ··▏████████▎█████████████████▋██████▌«██████████████▋██████▌«█▓███▓███▓███▓███▓███▓███▓███▓███▌ 15:00 rw2/3 │
│ ├─ WI-205 index-scan ·············▋███████████▏███████████████████████████████▎████████▍███▓███▓███▓███▓███▓███▓███▌ 12:00 │
│ ├─ WI-206 query-planner ··················▏██████████▋███████████████████████████████████████████▍▓███▓███▓███▓███▓███▌ 09:00 │
│ ├─ WI-207 legacy-shim ····▍████████▋████████████████████████████████████████▉█ SCRAP · no_progress │ SCRAP │
│ ├─ WI-208 docs-ranges ······▋████████▉█████████████████████████████▊████████▉█████████████▊··················▏██▓███▌ 03:00 │
│ ├─ WI-209 migration-0042 ······▋███████████▏██████████████████████▏██████████▋human decision · approve migration 0042██│ HELD 06:00 │
│ ├─ WI-210 perf-bench ······················▊███████████▎···························································│ │
│ ├─ WI-211 e2e-suite ······························································································│ │
│ └─ fan-in · quorum 10 ────────────────────────────────────────────▌────────▌───────────▌─────────────────────────────│ 3/11 │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ WI-204 parse-range │ implement attempt #6 · 15:00 · rework 2/3 │ $6.20 · 639.8k tok │ last call Bash npx tsc --noEmit running │
│ LIVE 46:12 WI-205 attempt #5 probe · Bash npm run probe:fuzz -- index j/k select enter open drawer t tool ticks r replay esc close │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Loading
Loading