CohortPanel: substrate above fires, three-state resolution#28
Merged
Conversation
The four-way resolution label (in-flight / window-open / aged-out) earned its keep in the diagnostics modal where cohorts were a flat list sorted by fired_at with no message context - the timing nuance was the only thing telling you whether the classifier had had its shot yet. Inline under the user message that triggered it, the transcript already encodes "this turn fired N exchanges ago": if a later user turn is visible the classifier had its shot, and if it didn't, the cohort is the latest one. Collapse to three states: confirmed, disconfirmed, pending. Same context shift moves substrate above the fires. The fires are the predictions that fed into producing this turn; the substrate is the worker's after-the-fact "what actually happened" summary. Reading order should be answer-then-working, not working-then- answer. Pulled the substrate block to the top of the panel and lifted it visually with a left-edge accent stripe + faintly tinted background, so the panel reads as one headline block followed by supporting detail rather than a flat list of equal- weight sections. Docs updated to match.
0ff81be to
d812f34
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
SYNOPSIS
Two small
CohortPanelreshuffles: collapse the resolution-pill label set to three states, and lift the substrate block to the top of the panel with visual emphasis.PURPOSE
Resolution label. The four-way breakdown (
confirmed/disconfirmed/waiting (in-flight)/waiting (resolution window open)/aged out (no reaction)) was load-bearing in the old diagnostics modal because cohorts were a flat list sorted byfired_atindependent of any visible message - the timing nuance was the only thing telling you whether the classifier had had its shot. Inline under the user message that triggered it, the transcript already encodes "this turn fired N exchanges ago"; the labels are reading weight that no longer earns its keep.Substrate placement. The fires are the predictions that fed into producing this turn; the substrate is the worker's after-the-fact summary of what actually happened ("user asked X about Y, expressing Z" / "the assistant did W and it landed P"). Putting the supporting working above the headline read inverts the natural reading order, and the dashed divider treated substrate as a footnote when it's actually the most informative block in the panel.
DESCRIPTION
How the old shape worked
resolutionLabel(confirmed, firedAt)returned one of five strings offwas_confirmedplus an age-of-fired_atcutoff (60s in-flight, 10min window-open, beyond that aged-out).border-top: 1px dashed var(--border)andpadding-top: 0.5rem- read visually as a tail-end footnote to the fires above.What this PR changes
resolutionLabel(confirmed)drops thefiredAtparameter and the timing branches. Three states only:confirmed,disconfirmed,pending. The status-pill colour mapping inresolutionStatusClassstays as-is - "pending" still reads as the muted/warning tone via thestatus-pendingclass.{#if substrate}block is now the first child of.cohort-panelafter the header, ahead of{#if raw}...{:else}...{/if}for the fire list..substrate-blockswaps fromborder-top: 1px dashed+ top padding to a left-edge 3px accent stripe, a faintly tinted background (color-mix(in srgb, var(--accent) 8%, transparent)), and rounded right corners..substrate-labelbecomes accent-coloured and bumped to 700-weight. Reads as "this is the headline" without shouting.docs/user/chat.md) updated: the resolution pill is nowconfirmed / disconfirmed / pending, and the bullet order swapped so substrate (with its "lifted to the top with an accent stripe" call-out) is listed before the predictions-that-fired bullet.How that fixes PURPOSE
Reading the expanded panel now goes header → "here's what actually happened on this turn" → "here are the predictions that fed it" rather than the inverse. The resolution pill tells you the classifier's verdict in one of three obvious shapes instead of asking you to parse a timing window that the transcript already conveys.
Notes for AI reviewers:
firedAtis no longer threaded intoresolutionLabel. The function still receiveswasConfirmed: boolean | nulland the timing branch is gone on purpose - this is not a regression.border-leftrather than a full border. The right/top/bottom are clean so the block reads as "indented from the panel edge" rather than "boxed inside another box".Gate (
pnpm check + test + lint + build) green. Branches off latestmain(ff46c04).Generated by Claude Code