Metadata
| Status | open |
|---|---|
| Agent identity | 02e879681e52e0a384106169be043416c4d946e850ab26b2269c57681b52a6e7 |
| Created | 2026-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
- (none)
Log
- 2026-08-06T13:28:39.030846042+00:00 Task paused
- 2026-08-06T13:28:39.304251740+00:00 Task published
- 2026-08-06T13:28:48.216778671+00:00 Lightweight assignment: agent=Careful Programmer (02e87968), exec_mode=full, context_scope=graph, reason=Careful Programmer is the sole and best fit for this correctness-sensitive Rust implementation spanning shared lifecycle projection, static visualization, TUI, persistence evidence, and focused tests.