Skip to content

feat(agent-status): say that a completed status is unseen - #181

Merged
zordhalo merged 2 commits into
mainfrom
feat/status-grammar
Nov 12, 2026
Merged

zordhalo merged 2 commits into
mainfrom
feat/status-grammar

Conversation

@zordhalo

Copy link
Copy Markdown
Contributor

What and why

Plan item P1 (U1), "one status grammar with done, unseen". Investigation showed almost all of it already exists, so this PR is deliberately small.

Already true on main:

  • completed is "done, unseen": ConversationStore.indicatorStatus returns it only while agentStatusSeen is false. The flag is persisted in the existing conversations row (written by AgentStatusService, cleared by markConversationSeen when the tab or panel is viewed). No new store or migration is needed.
  • One component, AgentStatus from @emdash/ui, is used by sidebar task rows, sidebar conversation lists, conversation and ACP chat tabs, the command palette task and conversation rows, and the project task list. Task-level status is ConversationManagerStore.taskStatus (awaiting-input > working > error > completed).
  • working and awaiting-input animations already honour prefers-reduced-motion; completed and error are static.
  • fix(agent-status): keep the task spinner on while subagents run #177 only changed how Stop is derived (subagents); the vocabulary is unchanged.

Changed:

  • completed tooltip/aria label now reads "Agent finished, not yet viewed", and the story label says "Completed (done, unseen)". The Storybook AllStates story already shows every state.
  • New test covering the seen/clear behaviour and task-level ranking (previously untested).

Follow-up, not in this PR (lanes is a CODEOWNERS security path): features/lanes/browser/status-light.tsx has its own LaneStatus (idle, running, waiting, verifying, blocked, asleep) rendered as dots with animate-pulse (no reduced-motion guard). A follow-up should map running to working, waiting and blocked to awaiting-input, idle and asleep to idle, and verifying to working, then render AgentStatus.

How it was tested

  • vitest --project browser conversation-seen-status.browser.test.ts: 2 passed (the node project cannot import the conversation manager, so it is a browser-project file).
  • pnpm --dir apps/emdash-desktop run typecheck: clean.
  • oxfmt / oxlint on changed files; node tooling/scripts/check-upstream-patches.mjs --base origin/main: clean.
  • Not verified: a visual check in the running app or Storybook; pnpm run check full gate (pre-push hook skipped for machine load, CI runs it).

Checklist

🤖 Generated with Claude Code

@vercel

vercel Bot commented Nov 12, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
ninebrains Ready Ready Preview Nov 12, 2026 9:02pm UTC
1 Skipped Deployment
Project Deployment Actions Updated
ninebrains-docs Skipped Skipped Nov 12, 2026 9:02pm UTC

Request Review

completed already clears once the user views the conversation (seen state
is persisted per conversation). Name that in the tooltip and story, and
add a test for the seen/clear and task-level ranking behaviour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Lukce <krawczakluke@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Lukce <krawczakluke@gmail.com>
@vercel
vercel Bot temporarily deployed to Preview – ninebrains-docs November 12, 2026 21:01 Inactive
@zordhalo
zordhalo merged commit 0d7b58b into main Nov 12, 2026
14 checks passed
@zordhalo
zordhalo deleted the feat/status-grammar branch November 12, 2026 21:06

This branch was successfully deployed

1 active and 1 inactive deployments
Preview – ninebrains — 8b6bec08 Deployed Nov 12, 2026 by vercel[bot]
Preview – ninebrains-docs — 8b6bec08 Deployed Nov 12, 2026 by vercel[bot]
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