tui-graph-wide-activity-feed

Make ⌂ Activity a graph-wide live event feed

Metadata

Statusdone
Assignedagent-925
Modelpi:openai-codex:gpt-5.6-sol
Created2026-07-28T09:08:11.567465476+00:00
Started2026-07-28T09:59:39.071076956+00:00
Completed2026-07-28T10:39:38.499301488+00:00
Tokens11150559 in / 27235 out

Description

Objective

Make the primary Workspace Activity view answer: “what is happening anywhere in this graph, and when did it happen?” It is currently effectively empty: Dashboard draws only an empty activity sparkline, while a narrow operations-only semantic feed is hidden behind the Service/Coordinator-log tab and loaded only when that tab is selected.

Product contract

  • ⌂ Activity is a live, graph-wide, chronological feed—not another task list, an empty sparkline, or a daemon-log alias.
  • On entry it immediately shows bounded recent history, tails new activity, and gives a human a truthful feel for forward progress.
  • Every row shows both compact relative age and local/system clock time (for example 12s · 09:41:03); ages advance while the TUI is idle. Preserve the full timestamp in selected/detail state. Narrow layouts degrade deterministically without making time disappear.
  • Default order is oldest→newest with newest at the bottom. Entering/tailing follows the bottom. Scrolling up freezes the viewport and shows an unseen-event count; End returns to live tail.

Feed coverage

Normalize and merge durable graph evidence in timestamp order, with stable dedupe IDs, from the existing authoritative sources rather than inventing status from silence:

  1. task creation/edit/publish/link/pause/resume/retry/abandon and messages-as-metadata;
  2. lifecycle reservation/running/waiting/terminal/failure and dispatcher/admission decisions;
  3. agent spawn/exit and bounded native activity labels/counts (thinking/output/tool/usage), never chain-of-thought or raw hidden reasoning;
  4. worktree changes explicitly labelled observed/unproven versus receipt/checkpoint/validation progress labelled proven;
  5. checkpoint/candidate creation, validation, evaluation/FLIP, finalization, mechanical/strong merge, cleanup and repair outcomes;
  6. watchdog suspicion/probe/continuation and important service/resource/backpressure events. High-frequency native/observer activity must be coalesced by task+kind over a short window with counts/deltas, so the feed conveys motion without becoming an unbounded firehose. Terminal/control events must never be coalesced away.

UI and navigation

  • Make one activation of land on Activity on wide and compact layouts. Repeated activation may open Workspace actions.
  • Keep Dashboard/Config/Service log available as secondary Workspace actions; rename/label them so Activity is not confused with the raw service log.
  • Rows include semantic icon/category, concise task/agent identity, safe bounded summary, authority (observed, proven, or control) where applicable, and time.
  • Selecting/activating a task-bound row opens that exact task without retargeting after refresh.
  • Empty state is only allowed for a truly eventless graph and must state which event projection/source is unavailable—not suggest starting an already-running service.
  • Use the auxiliary async storage lane and a bounded ring/history page. No filesystem reads, directory walks, or JSON parsing in render; no raw target/ churn; no persistent global status-bar telemetry.

Compatibility and safety

  • Historical operations/lifecycle records deserialize safely; malformed/truncated lines are skipped and surfaced as a bounded source-health note.
  • Restart, log rotation/truncation, compaction, and duplicate reads remain idempotent; ordering is deterministic for equal timestamps.
  • Message bodies, secrets, raw prompts, chain-of-thought, and unbounded output never enter the feed.
  • Preserve selected-task live progress hierarchy and existing Chat/Task/Workspace navigation semantics.

Validation

  • RED unit/integration tests demonstrate that Dashboard Activity is empty despite seeded operations today, then prove normalized multi-source ordering, stable dedupe, coalescing, authority labels, local+relative time, and age refresh.
  • Seed operations + lifecycle + Pi native progress + worktree observer + candidate/finalizer/merge evidence and assert each semantic class appears in one ordered feed without raw reasoning text.
  • Real candidate-binary tmux smoke opens , sees existing graph history immediately, appends live events and sees them tail, verifies relative age changes/system clock remains visible, scroll-up freezes with unseen count, and End resumes tail.
  • Compact/narrow and wide captures remain legible and always reaches Activity; Dashboard/Config/Service log remain reachable.
  • Rotation/restart/malformed-line tests prove no duplicates, panic, or false fresh activity.
  • Bounded-load/performance test proves large journals and ignored target/ churn cannot block render or grow memory unboundedly.
  • Existing symbolic context, four-sided/mobile, selected-task live progress, auxiliary snapshot latency, and service-log smokes pass.
  • cargo fmt --check, cargo clippy, relevant tests and owned smoke pass; commit/push and wg done complete normally.

Depends on

Required by

Log