pa-tui: agents-view summary rows drop the model mix; the inactive line bills the descendant aggregate (operator directive) - #2894
Conversation
…e bills the descendant aggregate (operator directive) The operator's 2026-09-26 review of the agents view + sub-agents view (the follow-up to #2843): Fix 1 — the model mix leaves the summary rows. The running line and the inactive line appended the descendant tree's model mix ("2 inactive subagents - claude-opus-4-6, glm-5.3-fast") to their titles; the operator wants the models hidden there ("You added this thing where we list the models inside. You didn't remove that."). Both titles are count-only now ("3, 0 running", "2 inactive subagents"); the counts stay (the operator confirmed the counts are fine), the per-child rows keep their own Model column, and the descendant_models multiset plumbing goes with its only consumer. Fix 2 — the aggregate is visible in the state the operator inspects. #2843 billed the running line only: the aggregate rode a row that vanishes the moment every descendant finishes, and the inactive line — the only summary row in an all-done tree — rendered a full-width unbilled title (its mix filled the row where the Cost column should be). The inactive line now bills the same status-independent descendant total and renders through the same zone-truncated, right-aligned Cost cell path (is_summary_row_identity), so the aggregate prints in both mid-run and all-done frames. TS parity is deliberately overridden here (TS createSubagentSummaryRow pins recursiveCost: 0) — operator directive, like #2813/#2843. Tests: the count-only titles (the tally walk still folds every depth), the mid-run aggregate on both lines, the all-done aggregate behind the inactive line, and the aggregate surviving the #2865 click surface and the #2866 incident-notice render paths.
Prime Agent performance — partialPR Benchmark execution did not complete successfully. Missing measurements are not performance wins. Failure diagnostics:
See the saved per-trial logs and terminal transcripts for details. Overall: 0 regressed · 0 improved · 0 no clear change · 42 unavailable.
Python runtime
Session transport
UI interactions
Sandbox cost: ~$0.0507 — no inference calls. Methodology and samplesMain resolved at 2026-09-26T22:10:29.238102+00:00. Harness
Failures:
|
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 9168514. Configure here.

pa-tui: agents-view summary rows drop the model mix; the inactive line bills the descendant aggregate (operator directive)
The operator's 2026-09-26 review of the agents view + sub-agents view (follow-up to #2843). Two fixes, both operator-directive overrides of TS parity (like #2813/#2843): the counts and the per-row Model column the operator confirmed as fine stay untouched.
Fix 1 — the model mix leaves the summary rows (agents_view_forest.rs). Both summary lines appended the descendant tree's model mix to their titles ("2 inactive subagents · claude-opus-4-6, glm-5.3-fast"); the operator asked to hide the models there. Both titles are count-only now ("3, 0 running" / "2 inactive subagents"), the counts stay, the per-child rows keep their own Model column, and the descendant_models multiset goes with its only consumer (model_mix()).
Fix 2 — the aggregate cost shows in the state the operator inspects. Root cause, per the diagnosis the operator requested: the mid-run render was NOT broken — #2843's aggregate printed at the right-aligned Cost cell even with a long mix (reproduced at 120/80/60 cols; the zone truncation always preserved the cell), and #2865/#2866/#2859 did not touch the cost path (git diff f3ae85c..tip on render_row = click-row recording only). The defect was PLACEMENT: the aggregate rode the RUNNING line, a row that only renders while descendants run. In the all-done state the operator actually sees, the only summary row is the INACTIVE line — unbilled (0.0), full-width title, its model mix filling the row exactly where the Cost column should be, which reads as "the aggregate is missing". The inactive line now bills the same status-independent descendant total (parent.descendant_cost) and renders through the same zone-truncated, right-aligned Cost cell path (is_summary_row_identity), so the aggregate prints in both mid-run and all-done frames:
before, all-done: " ▸ 2 inactive subagents · claude-opus-4-6, glm-5.3-fast" (no cost anywhere)
after, all-done: " ▸ 2 inactive subagents $2.00" (aggregate visible)
before, mid-run: " ▸ 3, 0 running · glm-5.3-fast×2, claude- $5.75" / " ▸ 2 inactive subagents" (inactive line unbilled)
after, mid-run: " ▸ 3, 0 running $5.75" / " ▸ 2 inactive subagents $5.75"
TS createSubagentSummaryRow pins recursiveCost: 0; billing both lines is a deliberate Rust divergence (operator directive).
Tests (all green at the PR head): summary_rows_stay_count_only (count-only titles; the tally walk still folds four-level chains; child rows keep their Model cells), running_line_bills_every_descendant_status (both lines bill), running_line_renders_the_aggregate_in_the_cost_column (the inactive line shares the agent rows' Cost column, Age blank), inactive_line_renders_the_aggregate_in_the_all_done_state (the operator's frame: no running line, aggregate on the inactive line), aggregate_survives_the_incident_notice_render_path (#2866), aggregate_survives_the_click_surface_render_path (#2865: the summary row is clickable in the same frame that bills it, and a click expands the list with the aggregate staying put). cargo fmt --all --check and cargo clippy --workspace --all-targets --locked -- -D warnings pass.
Pre-existing base failures (verified on the pristine tip via git stash, untouched by this diff): pa-tui browser::tests::the_opener_resolves_an_absolute_path_and_targets_the_url (no platform opener in the container) and pa-cli agents_view_flash_e2e::the_first_agents_view_render_is_clean_behind_hundreds_of_dead_subagents (roster snapshot serves 1 of 301, daemon-side). All other agents-view e2e suites pass with this diff.
Note
Low Risk
TUI-only agents-view presentation and deliberate TS parity divergence on summary cost; no auth, data, or API surface changes.
Overview
Agents view summary rows no longer append the descendant model mix to running/inactive titles; titles are count-only (
"{direct}, {nested} running"/"{n} inactive subagent(s)"), and thedescendant_modelsrollup plusmodel_mix()are removed. Per-child Model column entries are unchanged.Cost placement is fixed for the all-done state: the inactive summary row now carries the same descendant-tree aggregate (
descendant_cost) as the running line, andrender_rowbills both summary identities viais_summary_row_identity(right-aligned Cost column, Age blank)—so the aggregate stays visible when no running line renders.Tests cover count-only titles, dual-line billing, all-done/inactive rendering, and aggregate stability under incident notices and mouse click/expand.
Reviewed by Cursor Bugbot for commit 9168514. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Show descendant aggregate cost on inactive summary rows and drop the model mix
Summary rows in the agents view now render both running and inactive lines through the shared identity predicate in
AgentsViewMode.render_row, so the inactive line bills the full descendant cost in the Cost column instead of showing nothing.model_mixformatter helper; running and inactive summary titles are now count-only.inactive_summary_rownow passes the parent's descendant-tree cost to the commonsummary_rowconstructor.running_summary_row,summary_rows_stay_count_only), and the inactive line's cost value changes from unbilled to the descendant aggregate (inactive_summary_row).Macroscope summarized 9168514.