v0.2.6
- docs(spec): sidebar-trace-navigation
Design spec for trace interaction in the sidebar: l/h descend into and
return from an expanded card's traces, j/k walk the settled-call ring
(full ring while focused), o/Enter and mouse click-again open a detail
panel showing the retained args preview with width-aware scrolling.
Covers the pair-identity focus model (card + toolUseId), OpenTrace
outcome plumbing with the run loop as single resolver, sub-card span
export with newest-first dedup, honest cross-card reflow, settled-only
data reality, and the test plan.
Written via /lifeline:planner with per-section codex review (6 section
passes, 20 findings applied).
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
- docs(spec): apply codex feedback
Final whole-spec pass: l becomes an EnterTraces outcome resolved by the
run loop against the canonical ring (rendered geometry cannot pick a
hidden selectable row); the when-line freezes at open so the minute
tick never rewrites panel text; l is inert inside the trace zone (only
zone entry and j/k reattach); every cursor-changing card click clears
trace focus (pane-unique ids could leak across cards); rows without an
exact done/failed status are display-only, enforcing the settled-only
guarantee instead of assuming it.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
- docs(spec): mark spec codex-reviewed
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
- docs(plan): sidebar-trace-navigation
Ten-task TDD plan for the trace-navigation spec: duration formatter,
pure trace hit-test, view geometry export with focus rendering,
pair-safe reconcile, key/mouse outcome plumbing, the frozen TraceDetail
panel with shared-width scrolling, the snapshot builder, the run-loop
resolver with row-granularity follow, and the help surface — each task
red-green with exact code and its own commit.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
- docs(plan): apply codex feedback
Plan-review round 1: expanded_card keeps its signature via a
_with_traces sibling (30+ callers); the e2e ViewInput literal joins
Task 3; reconcile takes the pre-rehome cursor and corrections re-render
synchronously; route_mouse test migration named; Row gains Clone,
cursor_mut its arm; Row::Text implements the spec's verbatim wrapping
(Note collapses indentation) with a genuinely width-sensitive scroll
test; the snapshot narrows to (title, rows) with a recorded spec
amendment; newest_selectable_id deduplicates before selecting; named
resolvers with happy-path/refusal tests; routed accepts outcome
variants as observable.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
- docs(plan): apply codex feedback round 2
Task boundaries made self-contained: the second ViewInput constructor
and the e2e literal are listed and staged; the focused full ring drops
the +N older remainder with a test; Task 4's test blocks match the
five-argument reconcile; import edits scheduled (LineSpan/trace_at,
qualified AutoExpand, serde_json::Value); the rows_text exhaustive
match gains its Text arm; wrap_verbatim splits hard newlines first with
a line_count test; the spec's snapshot sentence is amended before this
plan (not during implementation); missing §6 cases added (header-click
onto another card, q-close, collapse-drop reconcile, content-compared
snapshot survival, frozen when-line across differing now).
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
- docs(spec): narrow the TraceDetail snapshot to rendered content
The panel model is a frozen (title, rows) pair; card id, agent label,
and tool_use_id were listed but never rendered or needed — the panel
opens from the selected card. Amended before plan finalization so the
plan implements the current spec, not an in-flight rewrite.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
- docs(plan): apply codex feedback round 3
view_input gains the trace-focus parameter with all four call sites
named; Panel/Row enter tui.rs scope via a module-level import; the
q/esc test drops its dead outer binding and the when-closure takes a
slice; the nonexistent offset accessor instruction is gone.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
- docs(plan): apply codex feedback round 4
Remove the last stale offset-accessor reference in Task 7.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
- docs(plan): mark plan codex-reviewed
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
- feat(sidebar): compact duration formatter
Co-Authored-By: codex executor noreply@openai.com
- feat(sidebar): pure trace-row hit-test
Co-Authored-By: codex executor noreply@openai.com
- feat(sidebar): export trace-row geometry and render trace focus
Co-Authored-By: codex executor noreply@openai.com
- feat(sidebar): trace-focus state with pair-safe reconcile
Co-Authored-By: codex executor noreply@openai.com
- feat(sidebar): trace-zone key transitions as outcomes
Co-Authored-By: codex executor noreply@openai.com
- feat(sidebar): trace-aware mouse outcomes
Co-Authored-By: codex executor noreply@openai.com
- feat(sidebar): frozen TraceDetail panel with verbatim width-aware scrolling
Co-Authored-By: codex executor noreply@openai.com
- feat(sidebar): frozen trace snapshot builder
Co-Authored-By: codex executor noreply@openai.com
- feat(sidebar): resolve trace outcomes and follow the selected row
Co-Authored-By: codex executor noreply@openai.com
- fix(sidebar): eager then_some in trace_at
Clippy unnecessary_lazy_evaluations, introduced by the plan's own Task 2
snippet; authorized as an out-of-task edit in the M5 fix cycle.
Co-Authored-By: codex executor noreply@openai.com
- feat(sidebar): trace keys on the help sheet and trailer
Co-Authored-By: codex executor noreply@openai.com
- feat(sidebar): zone-aware key footer
The pinned footer names what the keys do right now: 'l traces' appears
only while the cursor card is expanded with a selectable trace (the
exact state where l acts, and it outlives 'x menu' when narrowing);
inside the trace zone the hints flip to 'o/↵ open · h back'. The footer
thereby doubles as a zone indicator. Spec §4 amended accordingly.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
- chore: 0.2.6
Trace navigation for the sidebar: press l on an expanded card to enter
its traces (full 50-call ring), walk rows with j/k, open a frozen
detail panel with o/Enter showing status, timing, and the complete
retained args preview (pretty-printed JSON, scrollable at any width);
h returns to the cards. Mouse: click a trace row to deep-select, click
it again to open — extending 0.2.5's opt-in mouse support one level
deeper. The key footer is now zone-aware and doubles as an indicator,
advertising l only when it works and flipping to 'o open · h back'
inside the trace zone.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
- fix(sidebar): canonical descendability and nonempty trace identities
Two chatgpt-codex-connector findings on PR #2, both judged valid
against the code-reviewer principles and fixed:
F1: the zone-aware footer computed descendability from rendered
trace_spans, so with trace_lines = 1 and a display-only newest row the
'l traces' hint hid while l still entered the hidden selectable row.
The footer now derives from the canonical ring via the same predicate
the resolver uses.
F2: an empty-string toolUseId passed as_str().is_some() and became a
selectable identity, and multiple empty-id rows deduplicated into one.
call_id() now treats empty as missing: display-only, never deduped,
never exported.
Consolidation: call_id / selectable_call / newest_selectable_id now
live once in view.rs; tui.rs imports them, removing the drift class
that caused F1.
Codex-Verify: cycle-1 pass
Closes-Codex-Threads: PRRT_kwDOT46cgc6fgAh6 PRRT_kwDOT46cgc6fgAh7
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Co-authored-by: Claude Fable 5 noreply@anthropic.com
Co-authored-by: codex executor noreply@openai.com
What's Changed
- feat(sidebar): trace navigation with detail panel and zone-aware footer by @winoooops in #2
New Contributors
- @winoooops made their first contribution in #2
Full Changelog: v0.2.5...v0.2.6