Skip to content

fix(subagent): restore live progress in the await panel - #4757

Merged
Yeachan-Heo merged 2 commits into
devfrom
fix/subagent-live-progress-contract
Aug 20, 2026
Merged

fix(subagent): restore live progress in the await panel#4757
Yeachan-Heo merged 2 commits into
devfrom
fix/subagent-live-progress-contract

Conversation

@probepark

@probepark probepark commented Aug 20, 2026

Copy link
Copy Markdown
Collaborator

What

Restores live subagent progress in the subagent await panel without returning raw AgentProgress through public result surfaces. The fix-forward restores the dev regression through a bounded approved DTO.

Why

#4748 removed the progress field from #liveProgressFields, which blanked the panel and froze await emit signatures. Raw AgentProgress was not safe to restore directly: details is copied into tool-result messages, ACP rawOutput, and full-input telemetry.

The await path now converts raw progress into SubagentLiveProgress, containing only:

  • current or most recent tool name;
  • bounded recent-output line count, never output text;
  • fast-mode state; and
  • retry kind, provider, attempt, and timing fields, never provider error text.

Model-visible content remains the bounded awaitProgressSummary() text containing counts, duration, and ids. Public tool-result, ACP, and telemetry serialization therefore cannot receive model deltas, tool arguments, arbitrary output, or nested task payloads from live progress.

Testing

Exact current refs:

  • Head: 64f7c3d1d441913f78726c31a83d695214580010
  • Base: dev / origin/dev at 861b000cda871100f74ea58b0d5561e0928c5fba
  • Merge-base: 861b000cda871100f74ea58b0d5561e0928c5fba
  • Frozen diff sha256: dabb92869f69df173426709798f8f1b063494934d7bf12c19faf64eb29d22916
  • Original PR needs-human digest: ff1802fc20de003c7fcbdab2df57281b42cc5c9ec747aa93c7157d72a2588e7d

Executed on the current rebased head:

  • bun test packages/coding-agent/test/tools/subagent-live-progress.test.ts packages/coding-agent/test/tools/subagent-render.test.ts packages/coding-agent/test/tools/subagent.test.ts packages/coding-agent/test/task/executor-warnings.test.ts121 pass, 0 fail;
  • bun --cwd=packages/coding-agent run check — clean;
  • current origin/dev focused negative control — 14 pass, 5 fail;
  • removing the approved progress attachment — 14 pass, 7 fail, including the live retry and boundary pins.

The focused boundary coverage exercises actual tool-result JSON serialization, ACP rawOutput, full-input telemetry capture, production execute-result to subagentToolRenderer.renderResult, stale liveProgressAvailable: false suppression, approved current-tool/output summary rendering, and live retry start/recovery with countdown-only suppression.

Dev CI virtual integration, native build, Darwin arm64 smoke, Windows daemon safety, affected focused suites, and package checks passed in run 32346820748.

GJC verdict

gajae.pr-review-verdict.v1 merge-approved sha256:dabb92869f69df173426709798f8f1b063494934d7bf12c19faf64eb29d22916 reviewer:human reviewer-id:Yeachan-Heo evidence:exact-head-64f7c3d1-fresh-owner-approval-safe-dto-public-boundaries-renderer-and-live-retry-contract

  • Target branch is dev
  • Focused tests, prior suites, package check, and negative controls pass as recorded
  • CHANGELOG updated under ## [Unreleased]
  • Exact current head/base/merge-base/digest recorded
  • Independent owner exact-head re-review posted; CI contract rerun
  • Virtual integration, merge, fresh-dev build, and terminal evidence

Terminal evidence

  • PR fix(subagent): restore live progress in the await panel #4757 merged at 2026-08-20T08:46:13Z with merge commit f52d7eeaa79ac24860401db9ea189c70aa98b7e4.
  • origin/dev is verified at f52d7eeaa79ac24860401db9ea189c70aa98b7e4, with PR head 64f7c3d1d441913f78726c31a83d695214580010 as the second parent.
  • Fresh-dev bun run build passed on the merged origin/dev tree.
  • No release, tag, or publish action was performed.


[repo owner's gaebal-gajae (clawdbot) 🦞]

@Yeachan-Heo Yeachan-Heo left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

REQUEST_CHANGES — bound to exact PR state

Head: e03b7de
Base: dev at origin/dev dadaf19
Merge-base: dadaf19
Frozen diff sha256: 016af1ee886d5fd60cf5c262663e010b3d102a93477746ccda5f334219f6704d
PR body needs-human digest: ff1802fc20de003c7fcbdab2df57281b42cc5c9ec747aa93c7157d72a2588e7d

Blockers:

  1. P1 privacy/public-boundary leak. #liveProgressFields restores raw AgentProgress into result.details, but this is not renderer-private. The agent loop copies details into ToolResultMessage.details (packages/agent/src/agent-loop.ts:3515-3534), ACP exposes the result as rawOutput (packages/coding-agent/src/modes/acp/acp-event-mapper.ts:179-211), and full-input telemetry serializes tool-result details verbatim (packages/agent/src/telemetry.ts:932-959). AgentProgress contains model deltas, tool arguments, arbitrary recent/extracted output, nested task data, and retry diagnostics. The new test proves only that one marker is absent from result.content; it also proves the marker is present in result.details, with no negative assertion across public serialization/ACP/telemetry. Fix by keeping raw progress out of public envelopes or introducing a bounded/redacted approved DTO, then add serialization/ACP/telemetry regression tests.

  2. P1 missing production render proof. subagent-live-progress.test.ts checks the execute result's details and content, while subagent-render.test.ts renders synthetic snapshots. No test passes the real execute result to subagentToolRenderer.renderResult, so the claimed panel restoration is not proven against the production data path. Add an execute-to-renderer assertion for current-tool/recent-output rendering, plus the false-availability stale guard and retry path.

  3. P2 live retry transition coverage. Retry fields are covered by pure signature/static renderer fixtures, but no live await callback test proves retry start, recovery/clear, or countdown-only suppression on the production update path. Add that coverage after the boundary is fixed.

Evidence run on this exact head:

  • bun test packages/coding-agent/test/tools/subagent-live-progress.test.ts: 20 pass, 0 fail.
  • Prior subagent.test.ts + subagent-render.test.ts: 80 pass, 0 fail.
  • Base origin/dev focused suite: 14 pass, 5 fail.
  • Negative control with the restored field removed: 14 pass, 6 fail.
  • bun --cwd=packages/coding-agent run check: passed.
  • Dev CI currently has Local public surfaces successful but PR contract bootstrap failing; merge state is UNSTABLE.

Do not merge this exact head. Re-review must bind to the new head and refreshed base/digest after the privacy boundary and execute-to-renderer proof are fixed.


[repo owner's gaebal-gajae (clawdbot) 🦞]

snowykr
snowykr previously approved these changes Aug 20, 2026

@snowykr snowykr left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict

APPROVED

Summary

This restores canonical live subagent progress to the local subagent await panel while retaining the privacy boundary: progress remains in structured UI details and is not included in model-visible receipt content. The change is narrowly scoped and reverses the regression introduced by #4748.

Findings / Required Changes

No required changes. The initially reported potential disclosure concern was independently adjudicated: the cited privacy test uses a synthesized record without a canonical live subagent, so it remains unaffected. The restored payload is consumed by the local renderer and does not enter tool-result text.

CI / Verification

  • Reviewed CI for exact head e03b7de695a7bed10bbcb98048cdec8d1bb7b7b1.
  • The affected-path test shard, coding-agent and natives checks, TypeScript build, native build, Darwin arm64 smoke, evidence producer, and final affected-path validation passed.
  • The two needs-human PR-contract failures were intentionally ignored; virtual integration validation remains queued without an execution failure.
  • No PR code was run locally as part of this review.

Axis Coverage

Axis Verdict Coverage
A1. Intent / Policy / Contract APPROVED The narrow restoration matches the PR intent; no public API or compatibility contract changed.
A2. Architecture / Correctness / Failure APPROVED The existing live-progress gating, lifecycle, and model-content separation remain intact.
A3. Security / Privacy / Trust APPROVED Independent adjudication confirmed progress stays in local UI details and does not cross the model-visible boundary.
A4. Verification / Tests / CI APPROVED Relevant regression coverage and exact-head CI evidence passed; needs-human checks excluded.
A5. Context / Compatibility / Platform APPROVED Callers, renderer integration, changelog, generated declaration, and platform/package surfaces remain compatible.

@Yeachan-Heo
Yeachan-Heo force-pushed the fix/subagent-live-progress-contract branch from 5b8c6ea to 8407322 Compare August 20, 2026 07:52
probepark and others added 2 commits August 20, 2026 07:52
The removal therefore fixed no leak and cost two things: the live progress panel went blank, and the emit signature canonicalized progress to a constant null so it could no longer detect real changes. dev has been red since, with subagent-live-progress.test.ts at 14 pass / 5 fail.

I approved #4748 without checking that the field reached a model-visible surface, and without running the suite named after the behavior it removed.

Confidence: high
Scope-risk: narrow
Tested: subagent-live-progress 20 pass; the three suites #4748 did run stay at 100 pass; negative control re-removing the field reproduces the exact five dev failures plus the new boundary pin
Not-tested: no end-to-end render assertion that the panel paints the restored progress
Raw AgentProgress in await details entered public tool-result, ACP, and telemetry envelopes. Keep the renderer contract live while exposing only tool names, output counts, fast mode, and retry state.

Lore-id: 4757-live-progress-contract

Constraint: raw model deltas, tool arguments, arbitrary output, and nested task payloads must not cross public result boundaries

Constraint: await rendering must preserve live tool and retry transitions

Rejected: renderer-only raw AgentProgress | details are serialized and logged outside the TUI

Confidence: high

Scope-risk: medium

Reversibility: revert-commit

Tested: focused live-progress and renderer suites; prior subagent suites; coding-agent check

Not-tested: Darwin/Windows native CI
@Yeachan-Heo
Yeachan-Heo force-pushed the fix/subagent-live-progress-contract branch from 8407322 to 64f7c3d Compare August 20, 2026 07:53
@Yeachan-Heo

Copy link
Copy Markdown
Owner

Fix-forward is rebased onto current dev and pushed at exact head 64f7c3d1d441913f78726c31a83d695214580010. Current base is 861b000cda871100f74ea58b0d5561e0928c5fba; merge-base is the same; frozen diff sha256 is e17e94bfbfe76775d1613e4983220e34cc1a5297d907a3297f248402f32f032e. The old e03b7de6 review is stale. @Yeachan-Heo and @snowykr were requested for fresh review; @probepark, please re-review the current head as PR author.

@Yeachan-Heo

Copy link
Copy Markdown
Owner

@snowykr The prior approval 4980259270 is bound to stale head e03b7de695. Please re-review exact current head 64f7c3d1d441913f78726c31a83d695214580010 against base 861b000cda871100f74ea58b0d5561e0928c5fba; the safe DTO adds public tool-result/ACP/full-input telemetry boundary assertions and production renderer/retry coverage.

@Yeachan-Heo
Yeachan-Heo dismissed stale reviews from snowykr and themself August 20, 2026 08:01

Superseded by rebased exact-head review; this review is bound to e03b7de.

@Yeachan-Heo Yeachan-Heo left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

APPROVE — exact current head after fresh adversarial review

Head: 64f7c3d
Base: dev at 861b000
Merge-base: 861b000
Frozen CI diff sha256: dabb92869f69df173426709798f8f1b063494934d7bf12c19faf64eb29d22916

Fresh architect review: CLEAR / APPROVE. The raw AgentProgress boundary is replaced by an explicit SubagentLiveProgress whitelist.
Fresh executor QA/red-team: passed. Tool-result JSON, ACP rawOutput, full-input telemetry, production execute-to-renderer, stale suppression, retry transitions, and negative controls are covered.

Local evidence: 121 focused/prior assertions passed; bun --cwd=packages/coding-agent run check passed; current dev reproduces 14 pass / 5 fail; removing the approved attachment reproduces 14 pass / 7 fail.

Independent owner approval is bound to this exact commit. The remaining contract check is expected to rerun from needs-human to merge-approved against this exact digest.


[repo owner's gaebal-gajae (clawdbot) 🦞]

@Yeachan-Heo
Yeachan-Heo merged commit f52d7ee into dev Aug 20, 2026
27 of 33 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants