From 03cb3a596114f733f9adcb1ea5207f06279ee911 Mon Sep 17 00:00:00 2001 From: Codeman maintainer Date: Sun, 18 Oct 2026 10:23:27 +0200 Subject: [PATCH] fix(story-mode): balloons over the speaker, honest boards, and drawers that keep up MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From review round 1, checked against screenshots of the reviewers' real transcripts at desktop and phone width: - Claude's balloon is placed in the band above the head the scene drew, its tail pointing down at it, and clamped to stay inside the panel and off the head. Per-kind CSS offsets had covered the POW burst, the agent's head on a half-width fix panel and the first line of a terminal; a long prompt ran out of the mission panel. Save image clamps the same way. - A board only shows real counts; a check that reported none shows one verdict instead of 21 invented dots, and the loop shows its last run. - The mission panel opens the whole prompt, and on a task turn what the background job reported. - A background helper says "in the background" and "still working" until it reports back, its drawer keeps polling while it works, and the final panel counts helpers still out. - A fix made from the terminal opens what ran instead of an empty diff. - The wire files Claude's words under the panel that draws them, and its last words under the final panel. - A drawer follows its panel by the first event it showed when a refresh regroups panels (a check folding into a loop), not by kind. - Click regions reused for a new page get the new label; a new turn draws all its panels fresh. - Output links skip globs and paths a tool elided; prose links rooted paths only; paths inside the session folder read short (clicks keep the full path), and files Claude printed with cat open relative to that folder. - File cards keep a name's separators (rename_by_ / date.sh), code drops ligatures (`!==` stays three characters), counts drop "−0", and the turn picker's text stops before its chevron. Co-Authored-By: Claude Opus 5.5 (1M context) --- src/web/CLAUDE.md | 2 +- src/web/public/story-mode.css | 35 ++-- src/web/public/story-mode.js | 308 ++++++++++++++++++++++++++++------ test/story-mode-ui.test.ts | 106 ++++++++++++ 4 files changed, 391 insertions(+), 60 deletions(-) diff --git a/src/web/CLAUDE.md b/src/web/CLAUDE.md index 92d3d52f..e73190ca 100644 --- a/src/web/CLAUDE.md +++ b/src/web/CLAUDE.md @@ -54,7 +54,7 @@ Frontend JS modules have `@fileoverview` with `@dependency`/`@loadorder` tags. L **Settings surface** (`#appSettingsModal` + `#sessionOptionsModal` + `#createCaseModal`): one `set-*` language shared through a single `:is(...)` id scope in styles.css. App Settings' rail is a table of contents over ONE scrolling document (`switchSettingsTab` scrolls); Session Options and Add Case really switch (`switchOptionsTab` / `switchCaseModalTab`), and their larger per-modal size blocks are the design, not drift. ⚠️ **The load/save contract is `getElementById` by id**: renaming or dropping a control id silently stops it loading or saving. ⚠️ The Session Options "Session" entry still keys off `context` (label-only rename). ⚠️ Add Case keeps its legacy `.form-row` markup via an adapter; every `
` there needs `.set-adv-chev` plus both marker suppressions. ⚠️ Model cards and the effort segment are views over hidden `