Skip to content

fix(app): unread sessions show a bold title when stopped, not an overloaded status dot - #1374

Open
chphch wants to merge 1 commit into
slopus:mainfrom
chphch:fix/session-list-unread-dot-collision
Open

fix(app): unread sessions show a bold title when stopped, not an overloaded status dot#1374
chphch wants to merge 1 commit into
slopus:mainfrom
chphch:fix/session-list-unread-dot-collision

Conversation

@chphch

@chphch chphch commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

The session-list status dot is overloaded: a session with unread results is forced to a solid blue dot — the same color as the "thinking" (running) state, differing only by a pulse — so a finished, idle session looks like it is still running until you open it (which clears the unread flag).

This decouples the two signals. The status dot always reflects true liveness (disconnected / thinking / waiting / permission), and unread is shown instead as a bold title — but only once the agent has stopped, never while it is still running, so a re-activated session never reads as unread mid-turn. Blue goes back to meaning exactly one thing: running. Applies to both the session list rows and the compact active-sessions group.

Gated behind an experimental expUnreadBoldTitle setting, off by default. With it off the upstream presentation is preserved exactly (blue status dot + "unread" text, default title weight). Users opt in from Settings → Features.

The bold is applied via the SemiBold font family (read titles are Regular) rather than a numeric fontWeight, because the web build sets font-synthesis: none and bundles no Bold(700) IBM Plex Sans face — a fontWeight: 700 override would render identically to the regular title on web.

Proof

Captured locally on web — standalone happy-server (PGlite) + Expo web, driven headlessly with Playwright. The row's computed font-family flips Regular → SemiBold at the exact moment the turn stops and the session becomes unread; it stays Regular the whole time the agent is running.

agent running → title not bold turn stopped + unread → title bold, no marker dot

Note the leading status dot stays a true-liveness indicator across the transition (blue "thinking" while running → neutral once idle), and the old trailing blue accent dot is gone — unread is conveyed entirely by the title weight.

Verification

pnpm typecheck clean; app suite green.

@chphch chphch changed the title fix(app): decouple unread indicator from the running status dot fix(app): unread sessions show a bold title when stopped, not an overloaded status dot Jun 10, 2026
@chphch
chphch force-pushed the fix/session-list-unread-dot-collision branch 2 times, most recently from 4cc6b86 to 04c1021 Compare July 26, 2026 11:30
@chphch chphch closed this Aug 5, 2026
@chphch chphch reopened this Aug 5, 2026
@chphch
chphch force-pushed the fix/session-list-unread-dot-collision branch 2 times, most recently from d6ae159 to cc8e93f Compare August 23, 2026 03:41
@chphch

chphch commented Aug 23, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (3cf9ce70f) — no conflicts; the home rework (c63c80ff3 / 6dc878dc3) rebuilt which container renders which sessions but never entered CompactSessionRow's status logic or SessionItem's title weight, so the problem and the fix are both unchanged.

One import fix was needed for tsc to pass: upstream has since added useSettingMutable to the storage import at SessionsList.tsx:5, which duplicated the one this PR added. Merged useSetting into upstream's line and dropped the added one.

pnpm typecheck clean; app suite 919/919.

@chphch
chphch force-pushed the fix/session-list-unread-dot-collision branch 2 times, most recently from 9692453 to c6c9770 Compare August 25, 2026 07:55
…loaded status dot

The status dot doubles as an unread marker: an unread session repaints it
the same blue the running/thinking state uses, so a finished session reads
as if it were still working. Show unread as a bold session title instead —
and only once the agent has stopped, so a re-activated session does not flip
to unread mid-turn.

Behind the `expUnreadBoldTitle` setting, off by default: with it off the
existing blue-dot behavior is untouched. A session waiting on the user
(permission_required / input_required) keeps its orange pulsing dot either
way — that state outranks unread.

Rebased onto current main; the three original commits are squashed so the
gate and the behavior it gates land together.
@chphch
chphch force-pushed the fix/session-list-unread-dot-collision branch from c6c9770 to 0958fd3 Compare August 25, 2026 13:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant