show-task-lifecycle-activity-times

Show explicit created, started, and agent-activity times in graph/TUI

Metadata

Statusopen
Agent identity02e879681e52e0a384106169be043416c4d946e850ab26b2269c57681b52a6e7
Created2026-08-06T13:28:39.118522604+00:00

Description

The graph/TUI currently shows one unlabeled age suffix whose semantic changes by status. In src/commands/viz/ascii.rs it means time since started_at for InProgress, time since completed_at for Done, and time since created_at otherwise. Example current rows show an in-progress task as 40m, a done task as 7h, and an open task as 5h with no label. The TUI status LIVE HH:MM:SS is only the last graph snapshot refresh, not task or agent activity. This is ambiguous and hides the information operators need.

Provide an explicit, shared lifecycle-time projection for static viz and interactive TUI. For every primary task expose: creation time, current-attempt start time, and latest normalized agent activity time. Use clear compact labels in the graph row (for example C:16h S:40m A:3s, with an adaptive narrow-terminal form) and full local absolute timestamps plus relative ages in task detail. Rename/relabel graph refresh time so it cannot be mistaken for agent activity.

Created comes from the typed task created_at. Started means the current attempt/task started_at and must be labeled accordingly across retries. Agent activity must come from the exact attempt’s normalized provider-event/live-progress cursor (e.g. the accepted native activity timestamp), not graph.jsonl mtime, operations mtime, registry heartbeat, task log notes, arbitrary prose, or a generic output-file mtime. Worktree-only observation may be displayed separately as observed evidence but must not silently impersonate normalized agent activity. If authoritative activity is unavailable, display an explicit em dash/unknown rather than substituting a misleading timestamp. Terminal and archived attempts should retain their last known normalized activity when persisted evidence exists.

Centralize the projection/formatting so list/tree viz, 2D graph boxes where space permits, selected-task status/detail, and TUI refresh do not invent different meanings. Do not add new graph wire enums or break N-1 graph readability; this should be a read-side presentation over existing typed task and attempt evidence unless a backward-readable optional scalar is strictly necessary.

Bootstrap constraint: work only in the assigned worktree and do not run the existing broad 177-target test suite. Use cargo fmt/check and focused cargo test --lib or exact-target tests only until the storage-amplification fix lands. Never share another agent’s mutable target.

Validation

  • A screen-dump test proves an open, in-progress, retried, done, and missing-evidence task display unambiguous C/S/A fields.
  • In-progress activity advances when a normalized Pi/tool/text event is accepted without changing Created or Started.
  • Heartbeat-only, graph mutation, log note, message, and file-mtime changes do not advance Agent activity.
  • Retry preserves Created, resets current-attempt Started, and selects activity from the exact current attempt; archived attempt detail shows its own values.
  • Unknown/malformed/future timestamps fail visibly and never become 0s activity.
  • Narrow layouts degrade labels deliberately without reverting to one ambiguous status-dependent age.
  • Static wg viz, interactive TUI, and task detail use the same projection and terminology.
  • Focused tests pass using the installed candidate/TUI dump path without building every integration target.

Depends on

Required by

Log