Files
makelore/.project-docs/30-worklog/tasks/20260902-conversation-badge-a7c49e.md
T

4.4 KiB

Task: Limit conversation unread badge triggers

Identity

  • Task ID: 20260902-conversation-badge-a7c49e
  • Mode: Feature
  • Branch: codex/20260902-conversation-badge-a7c49e-conversation-badge-a7c49e
  • Worktree: /Users/inmanx/Documents/makelore-conversation-badge-a7c49e
  • Base commit: 301c1496b0
  • Owner: codex
  • Status: Ready for integration

Scope

  • Limit the Makelore Code Conversation-list red unread marker to hidden Conversations that newly require user interaction or whose current task has reached a terminal result.
  • Keep assistant streaming content, thinking, tool progress, and individual tool failures visible in the timeline without treating them as new-message badge triggers.
  • Add focused Renderer-store coverage and an Electron production-seam regression, and synchronize the current behavior in README.md.

Intent And Constraints

  • Preserve Conversation-local Snapshot/Patch reduction, generation/sequence recovery, selected-Conversation read clearing, and lightweight hidden summaries.
  • Do not change Electron Main, public contracts, runtime error semantics, Conversation metadata storage, or the sidebar presentation itself.
  • A new pending select/confirm/input/editor interaction must set the marker for a hidden Conversation. A new completed, failed, or aborted run terminal must also set it.
  • Repeated updates to an already-pending interaction or an already-terminal run must not recreate a marker the user has already cleared.
  • Work in the isolated worktree because local main is owned by the completed unsigned-macOS-package task; that task has no semantic or file overlap.

Outcome

  • Replaced the prior assistant message.upsert unread trigger with a transition predicate over the target Conversation's previous and reduced Snapshots.
  • The predicate recognizes only a newly pending interaction or a newly terminal run. Terminal identity is compared by run id and terminal reason so unrelated late patches do not recreate a cleared marker.
  • Assistant stream start/update, thinking, tool lifecycle, and tool.upsert error patches no longer mark a hidden Conversation unread. If the whole run later settles, its completed/failed/aborted transition still marks it.
  • Extended the controllable Electron EventSource fixture and added a real sidebar assertion covering process failure, pending confirmation, read clearing, and final task settlement.
  • Updated README.md with the user-visible badge rule. No Main/runtime/API/storage behavior changed.

Verification

  • Red phase: the focused store suite failed four assertions against the prior assistant-message trigger, covering the unwanted process marker and the missing interaction/failed/aborted terminal markers.
  • pnpm exec vitest run tests/unit/coding-conversations-store.test.tsx --maxWorkers=1: passed, 1 file / 28 tests.
  • pnpm exec vitest run tests/unit/coding-chat-panel.test.tsx --maxWorkers=1: passed, 1 file / 17 tests.
  • pnpm run typecheck: passed.
  • pnpm run lint:check: passed with 0 errors and 5 pre-existing warnings outside the changed files; scoped ESLint on all changed TypeScript files passed cleanly.
  • pnpm test: passed; functional stage 212 files / 1,735 passed / 3 skipped, isolated pressure stage 1 file / 1 passed.
  • pnpm run build:vite: passed for Renderer, Electron Main, Preload, and utility; only existing Browserslist, dynamic-import, and chunk-size warnings remained.
  • pnpm exec playwright test tests/e2e/pi-coding-first-chat.spec.ts: passed, 3/3.
  • All project commands used the pinned pnpm 10.33.4. git diff --check passed.

Follow-ups

  • None.

Promotion Candidates

  • Target: .project-docs/30-worklog/current-state.md Proposal: record that a hidden Code Conversation's red unread marker now signals only newly pending user interaction or a newly terminal completed/failed/aborted task, while assistant/tool process updates and individual tool failures remain non-notifying. Evidence: src/stores/coding-conversations.ts, focused 28-test store suite, and the 3/3 Electron pi-coding-first-chat production-seam run. Future impact: future patch types and sidebar changes should preserve the distinction between process visibility and user-attention notification. Semantic conflicts: none; ADR-006's Snapshot/Patch and per-Conversation isolation boundaries are unchanged. Human confirmation required: no.