Skip to content

fix(planning): drop the Live grace on a fresh interview page and name the waiting event in the header #8170

Closed

Description

@kyle-sexton

Refs: #7967
Depends on: #8169

Refs: #6053

Agent Brief

Type: Bug
Summary: A fresh interview page with no watcher never reads Live, and an event waiting with nobody listening shows in the header, not only as a list chip.

Current behavior:
On a fresh load with no watcher, the header reads Live for the first DEAF_AFTER (30 s), because the not-listening check waits that long before it fires. When an event is waiting and no session is listening, the clearest sign is a per-question chip (No session is listening; type next in the terminal); the header shows only the short Not listening pill, and only after the grace.

Desired behavior:

  • No waiter and no lease on a fresh load: the header shows the not-listening state at once (the first-wake text when no watcher has ever polled, else Not listening: type next, or Idle when nothing waits on Claude), with no window in which it reads Live.
  • An event waiting with nobody listening (no waiter, no lease, or a delivery unhandled past the stall window) is named in the header, including which question or event waits.
  • Live and the lease-held working state behave as the sibling item set them.
  • Finished, closed and offline states keep their current text.
  • Per-question chips and the receipt line keep today's behavior, including their 30 s grace.

Key interfaces:

  • The page's header state function: its not-listening branch applies on load without the DEAF_AFTER grace, and its text names the waiting event.
  • DEAF_AFTER: keeps governing the chips and receipt line; the header no longer waits on it.
  • /api/state listener fields (waiters, lease, idleFor): read only, unchanged.

Acceptance criteria:

  • In the diff, the header's not-listening branch does not depend on DEAF_AFTER elapsing.
  • A UI test in the surface's playwright suites covers: no watcher on first load reads not Live within 5 s of load; an event waiting with no watcher shows its id in the header. Add the assertions to an existing suite phase where its server state fits, rather than a new server.
  • Existing chip and receipt-line assertions in the surface suites pass unchanged, and any existing header (#pill) assertion the change breaks is updated to the new text in the diff.
  • scripts/run-test-file.sh plugins/planning/surface/surface.test.sh passes (browser suites may print SKIP where playwright-cli is absent; CI's surface job runs them).
  • A planning changelog fragment is added and scripts/check-changelog-fragments.sh passes.

Out of scope:

  • The Live and lease-held working states (sibling item; land it first, as both change the same header function).
  • The session bridge (lib/session-bridge/ and its generated copies under plugins/planning/surface/): no transport change; registered in scripts/shared-copies.txt.
  • Per-question chip and receipt-line texts and timing.
  • Wake batching, auto-handling of accepts, layout and accessibility papercuts Q6-Q9, Q11 (sibling items).
  • skills/interview/SKILL.md text.

This was generated by AI during backlog shaping. Split from #7967, whose lane run timed out at 25 minutes on the combined scope.


This was generated by AI during backlog shaping. Split from #7967, whose run used the whole 25-minute budget on the work itself.

Activity

  1. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    on Oct 18, 2026
  2. added theissue type on Oct 18, 2026
  3. removed
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 25, 2026
  4. kyle-sexton commented on Oct 25, 2026

    @kyle-sexton
    MemberAuthor

    Released for re-triage under the owner's 2026-10-24 rule: an issue stops for a person only for an intent or vision question, a security call, a host or attended run, or spend outside prepaid credit. The hold label came off and intake triage runs again now; it re-applies a hold, with a numbered question, when one of those applies.

    To hold this issue again, add needs-human (or status: needs-decision) and say why in a comment.

  5. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 25, 2026
  6. github-actions commented on Oct 25, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: scoped
    Basis: automated intake triage; the lanes App applied this class.

    Size: Small
    Complexity: Medium
    Uncertainty: Known
    Flags: none
    Blocked by: #8169

    Understood: the interview page header should show the not-listening state straight away on a fresh load with no watcher. It should also name the waiting event when nothing is listening. Chips and the receipt line keep their 30 s grace. The brief is specific and has testable acceptance criteria, so I see nothing missing.

    The body says to land #8169 first because both change the same header function. I couldn't confirm from the open-issue list whether #8169 is still open. I found no likely duplicates.

    Automated triage, applied by the lanes App.

  7. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    and removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 25, 2026
  8. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    admission-deferredReady for the issue lane; work-unblock admits it when queued work is under the queued cap
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    admission-deferredReady for the issue lane; work-unblock admits it when queued work is under the queued cap
    on Oct 25, 2026
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

    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Type

    Fields

    No fields configured for Bug.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions