# Issue 25307: native Claude Workflow before/after evidence

Captured 2026-10-26 04:44–04:48 UTC through the real app at localhost:7521, with native Claude Opus 5.5 Workflow. No replay provider, projection injection, or normalized UI state was used. Existing primary-owned server remained running; branch changes used its automatic restart.

Base: [6a3a460b09](https://git.cafe/pingdotgg/t3code/commit/6a3a460b09). Tests: [57e408989b](https://git.cafe/pingdotgg/t3code/commit/57e408989b). Fix: [9b36ce059c](https://git.cafe/pingdotgg/t3code/commit/9b36ce059c).

Checkout was held until the fix existed and git status was clean. Ran detached base first, restored fix/issue-25307 for after, and left it clean. No PR, push, merge, watch, server start/stop, or repository edits.

## Coverage: 4/5 rows captured, P partial

| Row | Evidence | Observed result and limits |
|---|---|---|
| Q | before-Q.mp4 / after-Q.mp4; beforeQ.png / after-Q.png; corresponding child stills | Two running agents hold their FIFO gates, third waits for a slot. Base persisted third child running with synthetic timing; fix pending with null startedAt. Fixed wide lineage explicitly says Queued. Coordinator remains running. |
| R | before-R.mp4 / after-R.mp4 and R stills; before-R-transition.mp4 / after-R-transition.mp4 | Phase 1 held running-child inspection; phase 2 recordings cover release of agent 1 and third acquiring slot. Third child preserves identity and becomes running with actual start timestamp, proved by persisted events, running stills, and after-N.mp4. after-R-transition.mp4 ends while the phase-2 third member remains Queued; it does not capture slot acquisition. Native behavior has two running plus one queued, rather than synthetic all-queued gate. |
| P | before-P-projections.json / after-P-projections.json, native completed snapshots, persisted events | Normal timestamped running state retained and terminal behavior exercised. Progress without startedAt cannot be generated by real Claude and remains UNVERIFIED. No claim of a separate controlled R-to-P progress recording. |
| N | before-N.mp4 / after-N.mp4; NQ/NR and child stills | 390x844 CSS dark responsive web; member list, child navigation and back, then gate release. Full member names and navigation usable. This is not native mobile evidence. Queue label lives in wide lineage; narrow workflow list itself has no explicit Queued label. |
| D | before-D.mp4 / after-D.mp4; D and child stills; D projections | All six members and coordinator completed in both runs. No stuck pending/running state. |

## Exact runs and persisted milestones

Before UI parent thread c4515007-847c-4d6a-83d9-b1270aca443a, task wnpqk5lnh, native run wf_2dee1871-6ee. After parent afc19cc1-22df-478d-8d26-a3a05d3283a8, task wvy8p8ahi, native run wf_d1edf883-d24.

Before Q: third child running, started_at 2026-10-26T04:44:54.684Z. First two gate ready files present, third absent. After releasing agent 1, third started_at becomes 04:45:41.907Z.
After Q: third child pending, started_at null; first two running at 04:47:03.060Z. After releasing agent 1, same third child running at 04:47:24.196Z. D snapshots contain seven completed subagents each (coordinator plus six members).

Projection files are read-only snapshots of the isolated worktree database. Persisted-event exports come from orchestration_events, filtered to these workflow subagents; they are application events, not raw provider wire frames. Completed native snapshots come from Claude's own workflow records. queued-provider-frame.json is the primary's earlier actual raw reproduction frame, not a frame from these new gated runs.

## Capture conditions and differences

Wide: 1440x900 CSS, light, DPR 2, confirmed by preview status and browser innerWidth. Recordings are 2880x1800. Preview save compresses wide PNGs to 1280x800; these are the tool's actual saved files, not manually rescaled. Narrow: 390x844 CSS, dark, DPR 2; PNG/video 780x1688. Both runs use the same external script except before/after FIFO namespace. Scripts and hashes are retained in manifest.json.

The agents block on FIFO reads, not fixed sleep durations. Only ready gates were released with release.py. Every before-* and after-* gate has a done marker; no workflow remains active. Workflow spawning and model latency differ, so clocks, completed durations, recording lengths, parent-generated titles, sidebar history, phase scroll position, prompt before/after path, and branch/VCS panel differ visibly. None was hidden or normalized.

Diff0 files are raw RGB absolute differences; DiffT16 files set each difference channel to 255 when greater than 16, otherwise zero. No alignment, masking, timing normalization, cropping or state replacement. They include incidental differences and are not an isolated pixel proof of this parser change. make-diffs.py reproduces them. Stills and sampled recording frames were visually inspected; inspection contact sheets are derived review aids.

## FRICTION / limitations

- Initial default profile was unpaired; a documented worktree `pair` command recovered it. Pairing URL/token excluded from all uploaded evidence.
- Waited for clean committed fix before checkout; earlier uploaded preparation-only index is superseded by this one.
- Fixed pending child footer can show generic Working without a timer, or Starting during initial load. The actual Queued label is in wide lineage. Workflow card aggregate remains 3 working and its member dot stays blue. Do not claim every consumer visibly says Queued.
- P without startedAt is unverified. No malformed timestamp, retry, or zero timestamp UI simulation was attempted.
- Desktop runtime, native mobile, remote/relay/tunnel paths untested. Desktop reuses web; mobile has separate consumers as identified in the supplied audit.
- Only own browser tab was used. Existing lead tab untouched. No source tests rerun by evidence agent; implementer validation is separate.

All uploads are evidence attachments only. ghdrop uploads were authorized; no public issue/PR comments or other forge writes occurred.

## Artifact links

![after-D-child.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9b29c76a96d726fa/after-D-child.png)
[after-D-projections.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/33415b5799e2ac7a/after-D-projections.json)
![after-D-video-frame.jpg](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/45f0cc7678484757/after-D-video-frame.jpg)
[after-D.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b9c54006a4bf1c88/after-D.mp4)
![after-D.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/93da61cbf685e067/after-D.png)
![after-N-video-frame.jpg](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/07b4217b97dcefe0/after-N-video-frame.jpg)
[after-N.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/294098e81097a786/after-N.mp4)
![after-NQ-child.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1ed594f0ff57f414/after-NQ-child.png)
![after-NQ.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/21763c296ef4f79f/after-NQ.png)
![after-NR.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1efc4ec641eb15a0/after-NR.png)
[after-P-projections.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/997ece4932dcc0d2/after-P-projections.json)
![after-P.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/48f6d3483e570958/after-P.png)
![after-Q-child.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/193a5544865e8c46/after-Q-child.png)
[after-Q-projections.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/324b325888748cc3/after-Q-projections.json)
![after-Q-video-frame.jpg](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c08cd7b24ab60499/after-Q-video-frame.jpg)
[after-Q.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/486b310bed5175dc/after-Q.mp4)
![after-Q.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/392399b697c70ae7/after-Q.png)
![after-R-child.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/87573eb04b99c249/after-R-child.png)
[after-R-projections.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/60e82c87f0796442/after-R-projections.json)
![after-R-transition-video-frame.jpg](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5cefb81f0b4bbebd/after-R-transition-video-frame.jpg)
[after-R-transition.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7d886b9d0ff52f77/after-R-transition.mp4)
![after-R-video-frame.jpg](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b5b2798e38aefc37/after-R-video-frame.jpg)
[after-R.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0366adc7f71ce907/after-R.mp4)
![after-R.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e57c063582a6cf0b/after-R.png)
[after-native-workflow-completed.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e04cac28d131b251/after-native-workflow-completed.json)
[after-persisted-events.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a89cc9d12f5dc6c4/after-persisted-events.json)
![after-phase2-Q-child.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bac4164544211a5e/after-phase2-Q-child.png)
![before-D-Diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1fd760bcbae5db43/before-D-Diff0.png)
![before-D-DiffT16.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/852919c06ab5e2e2/before-D-DiffT16.png)
![before-D-child.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e4bbc29e29a1ebf6/before-D-child.png)
[before-D-projections.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/87e82e0705f61af1/before-D-projections.json)
![before-D-video-frame.jpg](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/500c51a76d059cf6/before-D-video-frame.jpg)
[before-D.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a2ec7ae87ce5d6da/before-D.mp4)
![before-D.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b8440e2db3bc826a/before-D.png)
![before-N-video-frame.jpg](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e05af8ba494131d4/before-N-video-frame.jpg)
[before-N.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/12d263900f2c0941/before-N.mp4)
![before-NQ-Diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e41546f0fb686411/before-NQ-Diff0.png)
![before-NQ-DiffT16.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/afa3dcff3c844a75/before-NQ-DiffT16.png)
![before-NQ-child.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6d154fcbab6a9abe/before-NQ-child.png)
![before-NQ.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/85aadabe99536399/before-NQ.png)
![before-NR-Diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/559d01a4ed530062/before-NR-Diff0.png)
![before-NR-DiffT16.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/20671ff86af328a1/before-NR-DiffT16.png)
![before-NR.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ee05a17af95934f2/before-NR.png)
[before-P-projections.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f618c129b789ca78/before-P-projections.json)
[before-Q-projections.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b8ca3d4bad35f54d/before-Q-projections.json)
![before-Q-video-frame.jpg](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6efd6d2a89459ca9/before-Q-video-frame.jpg)
[before-Q.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7b9b374402409e64/before-Q.mp4)
![before-R-Diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/deae807e049e6a86/before-R-Diff0.png)
![before-R-DiffT16.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/128193f67826d571/before-R-DiffT16.png)
![before-R-child.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5719b2ea799b70d3/before-R-child.png)
[before-R-projections.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/dafaef69b4390dc1/before-R-projections.json)
![before-R-transition-video-frame.jpg](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9caca584ea12c440/before-R-transition-video-frame.jpg)
[before-R-transition.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1406540ed8ef8306/before-R-transition.mp4)
![before-R-video-frame.jpg](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/007902f538fdbc30/before-R-video-frame.jpg)
[before-R.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/79f92549ecfef355/before-R.mp4)
![before-R.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ea1ae588c61834cb/before-R.png)
[before-native-workflow-completed.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3971e993168751a0/before-native-workflow-completed.json)
[before-persisted-events.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/293b360469e161d4/before-persisted-events.json)
![beforeQ-Diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d73df13966aca1fb/beforeQ-Diff0.png)
![beforeQ-DiffT16.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5fd954ea49947024/beforeQ-DiffT16.png)
![beforeQ.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7bb74160cac66856/beforeQ.png)
![beforeQChild-Diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0b07e08941f92d1d/beforeQChild-Diff0.png)
![beforeQChild-DiffT16.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e5bd308c5386186a/beforeQChild-DiffT16.png)
![beforeQChild.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ed0a023d082cbb84/beforeQChild.png)
[gate.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/62523a73e2443730/gate.py)
![inspection-contact-sheet.jpg](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4eef0b7873dc6f0a/inspection-contact-sheet.jpg)
[make-diffs.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5b8c9121611eac6a/make-diffs.py)
[manifest.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c7b47f2cbf01d1d2/manifest.json)
![prior-before-1280-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/93588989991048e0/prior-before-1280-light.png)
[projection.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b3a6c6649b14f7f6/projection.py)
[queued-provider-frame.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/053c0f39270b4615/queued-provider-frame.json)
[release.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5e459c4297d77a05/release.py)
![video-inspection.jpg](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f4afc615fc3f4840/video-inspection.jpg)
[workflow-after.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/da2253a143134b91/workflow-after.js)
[workflow-before.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3fe810907a171d0e/workflow-before.js)
[workflow-gated.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/95e966930ded466d/workflow-gated.js)
[workflow.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a519a2b0c403be94/workflow.js)
