Skip to content

S1: status chips on the session list — live tri-state over the shared rows #1787

Closed

Description

@aarontrowbridge

Important

Problem — The session list shows no live status: from a fresh window, a running session and a session idle for an hour read identically. The hub's shared busy/registration rows (P2) already carry the truth — the list just doesn't render it.
Approach — Render-only status chips on the session list rows, fed by the shared busy and registration rows: running (with a hint of what kind), waiting on question, idle 40m. This is S1 of #1785 and the visual half of "open the panel, see every hub session with live status."
Scope — in: session list rows' status chips, fed from existing shared rows and the event flow. · out: any engine change, any new state, the in-session rail (already has status), the peer-fleet service routes (the hub serves none of them — do not call them).

Acceptance Criteria

  • A running hub session's list row shows a busy chip; a session with a pending question shows waiting on question; an idle session shows idle with age.
  • A session whose owner is unreachable keeps its current status (omitted ≠ idle — absence never resets a chip to idle); the row self-corrects when the owner returns or the row TTLs out.
  • Chips update live off the event flow (no polling loop beyond the existing reconnect/visibility-gated re-seed seams).
  • Render-only: zero writes to session state, zero engine changes, zero new routes (a discovered state gap stops the slice and gets named, per the parent).
  • The chips' status semantics rhyme with the peer-fleet session-status design (fix(fleet): remote session keeps its working rail + tab state after reopen (fleet-aware status re-seed) (#1766) #1768): tri-state busy/idle/omitted, recency-guarded reconcile, visibility-gated self-heal, honest-absence fallback — so the reconciliation lane converges the two lineages later with no translation layer.

Testing Decisions

Extend the session list/store suites and the reconcile-semantics tests; reuse the #1768-style tri-state test shapes (explicit busy settles stale idle; omitted key never changes the store) adapted to the shared-row source. Headless probe for the live chip.

Key Decisions

Constraints & Invariants

  • An unreachable owner never blanks a live chip (the rail invariant, one level up).
  • No polling: ride existing re-seed triggers (connected edge, sync-gap frame, visibility-gated self-heal).

Prior Art

Source

Part of #1785. Composes after S2 (the question inbox); shares no surfaces with it.

Notes

The live hub answers 404 for every peer-fleet service route today; S1 must not regress that state and must not add a dependency on those routes landing.

Activity

  1. aarontrowbridge commented on Oct 13, 2026

    @aarontrowbridge
    MemberAuthor

    Merged into amico/issue-1785-seamless-attach (ff to 7fdf986). Director-verified: scoped 10/0, full app suite 1680 pass / 24 fail with the named baseline set byte-identical, drift PASS (968). The #1768 rhyme honored: tri-state with honest-absence omission, recency-guarded reconcile on the shared-row source, zero new polling.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    hitlNeeds human review before merge

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions