GENERATED VIEW · PRIVATE ARCHIVE · DO NOT SERVE
RobCo Industries · Archive Museum

chat-overhaul-notes.md



RELEASE

planning/2.8.0/mockups/chat-overhaul-notes.md

sha256 05b492ba3aaaa449 · 7291 bytes · original held in the private archive

# Director Uplink — Transcript Overhaul Notes (Style A vs Style B) Mockup: `planning/mockups/chat-overhaul.html` (self-contained; open directly — all three panels render the SAME sample conversation through different renderers, so the comparison is exact). ## The shared cleanup (in BOTH styles) Today's transcript bounces the eye across three anchors: user lines are teal and **right-aligned** (`.msg-user` `text-align:right` + `margin-left:40px`), AI lines sit left but *italic* with tight leading and a right-side border + padding, and system lines are **centered italic** amber (`.msg-sys`). The mockup's TODAY panel reproduces this verbatim for reference. Both proposed styles replace it with one discipline: - **Everything left-anchored, full width** — no right-aligned user lines, no centered system lines, no side borders or margins eating 40–55px of a 412px screen. - **Hanging indent (14px)** — wrapped rows tuck under the first row's text start, so multi-line messages read as one tidy log entry. - **Voice is carried by color, weight, and size** (amber+glow = Overseer, phosphor green = user/terminal, dim small = system/machine log), not by alignment. - **AI italic dropped, leading opened up** — italic mono at 12.5px with `line-height:1.15` is the hardest-to-read text in the app today; upright at normal leading fixes it. - Tighter vertical rhythm (8px between lines) — noticeably more conversation per screen. Measured on the same 8-message sample at 412px: TODAY = 526px tall, Style A = 500px, Style B = 426px. ## Style A — CURRENT label treatment (source tag above the line) The shipped `.msg-tag--overseer` "OVERSEER" label on its own row above each AI line, transplanted into the clean layout — and, for symmetry, the user side gets a matching phosphor "TERMINAL" tag above its lines (user lines also keep the current `> ` chevron). Quick-logs keep the `[TERM]` text prefix; native tool lines keep `▸`. **Pros** - The tag row acts as a paragraph break — long AI narrative blocks get a clear visual "message start" without costing first-line width. - Message text starts flush at the line start (no prefix eating column width). - Familiar chat-app convention; least change from what shipped (the AI-side tag is already live). **Cons** - **Costs one extra row per labeled message** — for the same sample A is ~17% taller than B (500px vs 426px), and it gets worse the chattier the log gets. Pure vertical overhead on mobile. - User lines end up **double-marked** (TERMINAL tag *and* the `>` chevron). - The floating tag can orphan from its message when skimming fast — label and content are two rows competing with the 8px message gap. ## Style B — PROPOSED label treatment (inline callsign prefix) `OVERSEER: <message>` / `TERMINAL: <message>` on the same line, bold callsign, message text continues inline; wraps tuck under the hanging indent. Quick-log (`[TERM]`) and native-tool (`▸`) lines render **identically to Style A**, so the only variable between the two panels is label placement on the two voices. **Pros** - **Denser** — no label-only rows; every row carries content. ~15% shorter than A for the same conversation; best space usage at 412px. - **Diegetic** — reads as intercepted radio traffic / a monitored wire transcript, which is exactly the Director Uplink fiction (and matches the NV-machine mockup's voice). - Sender identity is read in the same saccade as the first words — no eye hop between a tag row and the message row. - Redundant with color (never color-alone, Protocol 17) and survives copy/paste of the log as plain text (`OVERSEER: …` still means something in an exported holotape). **Cons** - The callsign spends ~9–10 characters of every first line (~25% of a 412px row) — on long AI paragraphs the repeated `OVERSEER:` is slightly noisy. Mitigated by the hanging indent: only the FIRST row pays; wraps get full width. - Marginally less separation between consecutive messages than A's tag-row break provides. ## Recommendation: **Style B (inline callsign)** B wins on the owner's stated complaints — consistency, space usage, and tidiness — and lands the radio-log fiction better. The one real cost (the repeated bold `OVERSEER:`) is small at 12.5px and the first tuning knob is cheap: render the callsign at reduced opacity/weight so the eye skips it after the first read, without giving up the density. Style A's genuine advantage (a paragraph break for long AI messages) is largely recovered in B by the message gap + the color change between voices; if more is wanted, a slightly larger gap before each OVERSEER line (12px vs 8px) gives the break back for one CSS rule. ## Build contract (reskin only — Protocol 22) - Both styles are reskins of the existing **`appendToChat()`** pipeline — the label (tag or callsign) is **derived from the message's `sender`** at render time (`'user'` → TERMINAL, `'ai'` → OVERSEER, `'sys'` → system/log), display-only, never written into `text` or `chatHistory` — the same rule the shipped OVERSEER tag already follows, so history replays can never double a prefix. - B's callsign is a sibling span exactly like A's tag element — the typewriter's `.msg-content` scoping (which protects the label from being wiped) carries over unchanged. - The layout cleanup itself is CSS-only: `.msg-user` loses `text-align:right` + `margin-left:40px`, `.msg-sys` loses `text-align:center` + italic, `.msg-ai` loses italic/`line-height:1.15` and the right border. - Label strings should source from `GAME_DEFS[ctx].identity` via `getIdentity()` (Protocol 38) — OVERSEER/TERMINAL are the NV wording; colors ride the existing `--bezel-wire` / phosphor tokens (`[data-game]`-driven), so other games inherit their own wire color and persona wording with zero JS branches. ## Screenshots - `planning/mockups/chat-style-a-tag-412.png` — Style A at phone width (412px viewport) - `planning/mockups/chat-style-b-inline-412.png` — Style B at phone width (412px viewport) - `planning/mockups/chat-today-reference-412.png` — TODAY's shipped rendering, same conversation, for before/after context - `planning/mockups/chat-overhaul-desktop.png` — full page at 1280px: A and B side by side, TODAY reference below Rendered via Playwright; no horizontal overflow at 412px or 1280px. ## Questions for the owner 1. **Quick-log / tool lines:** the mockup keeps them as dim `[TERM]` / `▸` machine lines in both styles (they're hardware output, not a voice). If B wins, should they ALSO unify under the callsign grammar (`TERMINAL:` in the dim log style)? It's more consistent, but it blurs the line between what the *player said* and what the *machine logged* — the mockup deliberately keeps them distinct. 2. **The `>` chevron on user lines:** Style B replaces it with `TERMINAL:`; keep it as well (`TERMINAL: > copy…`), or drop it as shown? 3. **AI italic:** the cleanup drops the italic on Director lines for legibility — confirm (it's a look change independent of A-vs-B). 4. **Per-game callsigns:** confirm FO3's wording should come from its own `identity.overseer` block (e.g. a Vault-Tec persona) rather than reusing NV's OVERSEER/TERMINAL pair.
STAMP · generated for RELEASE v2.8.5 commit 06e5180 (06e51801b38a) · archive input-tree hash c07fbfbdd2e1ddeb · 754 files · no wall-clock timestamp (regenerates identically when nothing changed).