# Proof audit pass 2

Audited immutable base 6a3a460b09 and head 9b36ce059c, without checkout or repository edits. Parent's later merge was excluded from code review. No source correctness finding.

Opened all 45 delivered PNG/JPG assets (including both review contact sheets), all 12 Diff0/T16 files, and all ten recordings through independently extracted one-second frames. Inspected the exact final frame of after-R-transition.mp4 additionally. All manifest hashes match local delivered files. All twelve diff images reproduce exactly from their declared before/after pair.

## Row assessment

- Q: sufficient. Native two-running/one-waiting scenario is an appropriate real-provider substitute for the synthetic matrix. Base third member is running with synthetic timing; head is pending/null startedAt. Wide lineage says Queued, child has generic Working without a timer. Aggregate 3 working and blue member dot are unchanged consumer behavior, not evidence of a failed mapping.
- R: backend/state proof sufficient, prescribed wide transition recording incomplete. Same member identity changes pending/null -> running/2026-10-26T04:47:24.196Z in head projections and persisted events (640 -> 688); base also updates its previously synthetic start timestamp. R stills and R recordings show the running child. However after-R-transition.mp4 ends at 5.914 seconds with phase2-agent-3 STILL Queued, phase2 0/3, and 3 working/3 done. Its caption claiming phase 2 release/acquisition is inaccurate. before-R-transition does show acquisition. after-N.mp4 independently shows the head phase 1 queued-to-running transition at narrow width, so the behavior itself is verified. To satisfy the original matrix literally, deliver a wide head Q-to-R recording that includes acquisition; alternatively explicitly revise the accepted proof requirement to cite the narrow transition plus wide held-state evidence. No code change is indicated.
- P: no blocker. Native progress without startedAt was not captured; the P files are timestamped running snapshots, not the specified controlled R-to-P transition. Base already mapped progress to running by fallback; head makes it explicit. Independent immutable-parser assertions verified fresh progress without timestamp and queued-to-progress on both revisions. This unchanged input needs backend verification, not an invented additional native visual requirement.
- N: sufficient responsive-web evidence at 390x844 dark. Full member names and child/back navigation are usable; prompts, workflow title, breadcrumb, and model label are truncated at this width. No explicit Queued label exists in the narrow workflow list. Do not call this native mobile verification.
- D: sufficient. Both runs have seven completed projected subagents (coordinator plus six members), six native agents done, and six done gate markers each. Recordings include ordinary intermediate completion states, then completed workflow; no persistent stuck member was seen.

No persistent ghost, overlap, or clipped member navigation was found in inspected frames/stills. One-second sampling cannot rule out subsecond transient artifacts. Wide saved stills are 1280x800 (tool-scaled), while recordings are 2880x1800 for the reported 1440x900 CSS/DPR2 viewport. Narrow assets are 780x1688 for 390x844 CSS/DPR2. Theme and dimensions match captions. Clock/duration/title/sidebar/phase-scroll/prompt namespace/branch-panel differences are visible and disclosed; runs are not pixel-identical. SHA attribution rests on the supplied capture record, not a SHA watermark in every image.

## Code and backend proof

Actual immutable diff contains exactly three files: claudeWorkflowProgress.ts, claudeWorkflowProgress.test.ts, ClaudeAdapterV2.test.ts. Runtime change is start without valid startedAt -> queued, with explicit unchanged progress -> running mapping. Adapter fixtures representing running starts now carry startedAt, including zero. No frontend, contracts, mobile, or fixture scripts are committed in this diff. External scripts comply with current hygiene requirements.

The committed parser regression exercises absent start -> timestamped start -> timestamped progress. Existing adapter test covers explicit queued -> timestamped start with identity/timing assertions; it does not directly add start/no-timestamp adapter coverage. Real app Q/R projections and events supply that integration evidence. No durable new tests for invalid/zero/retry cases were added by this audit.

Ran independent assertions against exact parser and unknownField sources extracted from both immutable commits into /tmp/issue25307-pass2. Both passed their expected absent/null/string/negative/fractional/NaN/infinite/unsafe/out-of-Date-range mappings; valid zero/epoch/max timestamps; fresh progress without timestamp; queued-to-progress; stale same-attempt start; and higher-attempt timing/result reset. These are supplementary runtime assertions, not a claim that repository suites or check:changed were rerun.

## Reconstruction

Used test-t3-app workflow and my own default-profile preview tab on parent's existing localhost:7521 server. Initial auth/environment discovery returned 502/503 during parent's update, then recovered. Reconstructed D at 1440x900 light/DPR2: opened completed workflow, inspected all six done members, navigated phase2-agent-3 (OK, Completed in 14s), then returned to workflow. No fresh queued workflow was launched. This verifies current existing server/data navigation, not historical immutable-head execution. Screenshots:
- /home/ubuntu/.t3/userdata/browser-artifacts/browser-screenshot-localhost-mvos8mix-e82e963b.png
- /home/ubuntu/.t3/userdata/browser-artifacts/browser-screenshot-localhost-mvos8s4w-8031673e.png

Desktop runtime, native mobile, and remote/relay/tunnel remain untested, as disclosed; no new cross-surface demand is justified by this parser-only diff.

FRICTION browser | Initial 502/503 auth/environment responses during parent's update; later recovered without server intervention | Reuse the existing server and retry after update settles.
FRICTION evidence | after-R-transition caption claims slot acquisition but recording ends Queued | Stop capture only after the visible/persisted running milestone; correct the index attribution.
FRICTION audit | Projection row ID is nested in payload_json, not top-level | Compare payload_json.id for identity; corrected comparison passed.

No publish, merge, watch, push, comment, checkout, server start/stop, or repository write performed.

VERDICT: INSUFFICIENT R
