# Proof audit pass 1 — issue 16355

Scope: `/home/ubuntu/wt/issue-16355`, branch `fix/issue-16355`, head `92f1042d8c` against `8d3b061121`. Read-only source/proof audit; no edits to repository, servers, browser, delegation, or forge writes. The explicitly requested public matrix upload is the sole publication.

## Decision

The server-only workflow applies. Changed-render fixture matrix: **empty (0 rows)**. The entire diff is `ClaudeAdapterV2.ts` task-notification buffering plus one adapter regression test. There are no changed render paths, client callers, routes, settings, UI conditionals, or client interactions. Existing lineage UI renders affected projection state; that does not constitute changed rendering code. Do not invent web/desktop/mobile render fixtures for it.

This accepts the proof strategy, not completion of the evidence package. Independent Sol and Opus MERGE opinions were supplied in the brief, not independently inspected here. No new correctness blocker found in the inspected change. Candidate recording and test execution results were not supplied to this pass, so final evidence acceptance remains conditional.

## Diff-derived semantic fixture matrix

These are runtime/test-proof rows, **not render rows**. Guard controls scale to the single changed notification handler; they do not demand separate browser scenarios.

| Named fixture | Changed path / conditional | Seed and execution | Required observation / evidence | Recording |
| --- | --- | --- | --- | --- |
| F1 idle-nested-completes-during-user-turn | Unregistered notification; same-thread wake buffer exists; matching task_started exists; message absent → append terminal notification behind start | Existing added `makeWakeHarness` regression: start outer+sibling, finish root; inject nested Agent tool-use/start/progress while idle; start second user turn; complete nested then outer; finish user turn; sibling completion requests continuation; start provider-created continuation and drain | Final nested `subagent.updated` status is completed; `hasPendingBackgroundWork` false. Same test must fail against base adapter and pass against candidate adapter, with captured command and output | No: deterministic harness events/terminal milestones prove ordering |
| F2 authenticated-real-runtime-equivalent | Same changed buffering path under actual Claude SDK traffic, then existing replay drain | Lead alone: isolated seeded real web environment, authenticated Claude session; P background launches foreground C while root idle; user turn overlaps C completion; S finishes idle and wakes continuation. Use same route/provider/settings as baseline; record actual IDs/timestamps/version/settings without credentials | SDK terminal notification precedes sibling wake; after wake persisted C status remains completed with terminal timestamp and root settles. Capture before and candidate runtime transcripts tied to their commits. Existing lineage display may corroborate but cannot replace persisted-state evidence | **Yes, temporal interaction**: lead's in-progress recording should span overlap through sibling wake and final lineage state; no separate render matrix row |
| C1 no-buffer-or-unrelated-start | Unregistered notification, but missing thread buffer OR no buffered start with same task ID → no buffer mutation | Harness control using no wake entry / another task's start; inspect existing targeted coverage or exercise adapter events if further proof is needed | No invented replay entry or unrelated-task mutation; ordinary outcome handling remains available | No; semantic guard control |
| C2 duplicate-notification-identity | Unregistered notification already present in same buffer → no append | Harness replay of the same SDKMessage object, matching the identity-based existing buffer/replay mechanism | No duplicate append. This is object-identity protection, not a new guarantee of UUID-based deduplication across distinct frame objects | No; semantic guard control |
| C3 registered-and-applied-outcome | Registered task bypasses new append branch; existing `!appliedSubagentOutcomes.has(message)` guard continues to control stale-start removal | Existing registered-task wake/terminal harness coverage; inspect or run relevant focused tests | Existing registered completion behavior remains; already-applied outcome is not reapplied. F1 exercises the formerly-unregistered task becoming registered on replay | No; semantic guard control |

The one added test directly covers F1, including the successful append branch and replay. It does not independently assert each no-op guard or all failed/stopped terminal mappings. Those mappings are unchanged and do not warrant multiplying real-app recordings. Controls C1–C3 are audit boundaries, not claims that new dedicated tests exist or mandatory scope expansion.

## Evidence inspected and minimum handoff

Inspected [baseline runtime transcript](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ff43a946ed8fc2d5/before-runtime.txt): baseline reports nested task completed at 10:30:03, later persisted nested state running after the 10:31:19 continuation. This directly supports the reported stale-replay failure. It describes Linux x64, Claude Opus 5.5, CLI 2.1.303 and the timed reproduction. The transcript is a supplied observation, not a runtime independently executed by this reviewer.

[Supplied baseline screenshot](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/06c31e6d9ad0d6d7/browser-screenshot-localhost-mvjeivdo-e99de10a.png) is linked as supporting context; this reviewer did not visually inspect it and does not rely on it for acceptance.

Minimum remaining evidence: (1) captured regression test failure against base adapter and pass against candidate, using identical fixture; (2) candidate real-runtime transcript with task correlation, overlap, sibling wake and terminal persisted nested status; (3) finish lead's already-running temporal recording. No additional browser launch, render fixtures, route matrix, or alternate clients/providers are needed for this Claude-adapter-only diff. A still alone cannot establish event order. Do not claim the candidate recording/test output has been verified until inspected.

FRICTION scope-classification | existing UI displays affected projection state, inviting an artificial render matrix | derive rows from changed rendering code; retain semantic runtime rows separately.

FRICTION temporal-proof | a completed SDK task can be shown running only after later sibling replay | correlate IDs and timestamps through the wake; use red/green harness plus runtime transcript and existing recording.

FRICTION evidence-availability | candidate runtime and red/green outputs were not supplied to this audit | lead attaches and inspects those artifacts before final proof acceptance; no duplicate runtime or browser work.
