feat(frontend): phase progress dots (B) + compact sidebar redesign (C)

B — WorkflowBar renders F1..F8 as colored ring-dots (no phase-name text):
green=done, amber=running (subtle pulse), red=error, gray=pending; green
connectors lead the active dot, each dot carries data-state. Lightweight
error signal: sessionStore gains `phaseError`, set when an info event has
level=error during the active phase, cleared on the next ui_request.

C — denser single-line session rows (inline status dot + name, py-1), a
3-level type hierarchy (L1 SESSIONS / L2 section+group headers / L3 names),
and the "No group" label removed (ungrouped render after the last group,
guarded so the empty-state still teaches when there are zero groups).

Live-verified with Playwright (all four dot states, sidebar hierarchy, and
E's deferred activity-panel check). Frontend 93/93, tsc -b clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-30 17:53:29 +02:00
co-authored by Claude Opus 4.8
parent 2e09c88f78
commit b056ff334f
8 changed files with 160 additions and 68 deletions
+18 -9
View File
@@ -81,7 +81,8 @@ Opens frontend at http://localhost:5173 → backend :8787.
## UI/UX redesign + Resume — IN PROGRESS (2026-06-30, evening)
Approved multi-workstream plan: **`~/.claude/plans/foamy-forging-dahl.md`** (read it to resume).
Memory: `thothii-ui-redesign-inprogress.md`. **D + E are merged to `main` @ `0eeb3f7` and pushed.**
Memory: `thothii-ui-redesign-inprogress.md`. **D + E merged @ `0eeb3f7` (pushed); B + C
implemented + live-verified (not yet committed as of this update).**
- **D — DONE** (`c12bdcd`): session display `name` = 3-5 Italian keywords via **YAKE** (no LLM),
derived in `tht session new` (CLI layer); `create_session` core unchanged (`name=None` default).
@@ -89,20 +90,28 @@ Memory: `thothii-ui-redesign-inprogress.md`. **D + E are merged to `main` @ `0ee
- **E — DONE** (`0eeb3f7`): rotating activity icon replaces the red dot in `CentralStatus`
(inline, clickable → opens the panel); `ModelActivityPanel` is a **5-line expandable
model-stream tail**; `WorkingSpinner` extracted to its own module; the separate spinner button
+ orphaned `Transcript.tsx` removed. Frontend 87/87, tsc clean. **Live visual check PENDING**
(needs a *working* session — do it in the B/C pass).
- **B (pending):** `WorkflowBar` → colored **dots** F1..F8, no text (amber-translucent=running,
green=done, red=error, gray=pending); error is lightweight (store `phaseError` set on an `info`
`level=error` during the phase, cleared on the next `ui_request`).
- **C (pending):** right sidebar — tighter rows, 3-level type hierarchy via **`/impeccable`**,
remove the "No group" label (ungrouped after the last group accordion); add **Resume** to `SessionMenu`.
+ orphaned `Transcript.tsx` removed. Frontend 87/87, tsc clean. **Live visual check DONE
(2026-06-30):** inline spinner opens the panel; 5-line collapsed tail; expand → full transcript.
- **B — DONE** (uncommitted): `WorkflowBar` is now colored **dots** F1..F8, no phase-name text
(amber-translucent=running, green=done, red=error, gray=pending; green connectors lead the active
dot). Each dot carries `data-state`. Error is lightweight: store `phaseError` set when an `info`
`level=error` arrives during the phase, cleared on the next `ui_request` (`sessionStore.ts`).
**All four states live-verified** via Playwright.
- **C — DONE** (uncommitted): right sidebar — single-line denser rows (inline status dot + name,
`py-1`), a 3-level type hierarchy via **`/impeccable`** (L1 `SESSIONS` red/bold/wide-tracking ·
L2 section + group headers muted uppercase · L3 names normal-case), and the **"No group" label
removed** (ungrouped sessions render after the last group; guarded so the empty-state still
teaches when there are no groups). **Live-verified.** (Resume in `SessionMenu` stays with A1.)
- **Tests:** frontend **93/93** (was 87; +3 store `phaseError`, +2 `WorkflowBar` dot-state, +1
AppShell no-"No group"), `tsc -b` clean.
- **F (pending):** single-select answers **auto-confirm** — `reviewer_select` persists the
decision directly on a concrete choice (no redundant `reviewer_decide` gate); contract change
(update its tool desc + `SKILL.md` + the `CLAUDE.md` note). back/exit/Other stay non-persisting.
- **A (pending, riskiest):** Resume command + **FIX the resume cold-start stall** (open item #1).
- **G (later):** cross-model behavior matrix (Qwen3.6 / GLM 5.2 / Deepseek V4 / others).
**Next chunk:** the **B/C visual pass** (`/impeccable` + a live verification, incl. E's deferred check).
**Next chunk:** **F** (single-select auto-confirm — harness gate/SKILL contract change), then **A**
(Resume in the kebab + the resume cold-start stall fix, diagnosis-first). **G** (cross-model) later.
## Live verification + reviewer_select fix (2026-06-30, afternoon)