# Rebuild and recapture

Use isolated app state and the exact refs in provenance.json. The parent owns both dev servers; the capture task did not start or stop any server. Never point an instance at live userdata.

1. Run rebuild-fixture.sh with a disposable worktree parent path. It makes an empty fixture git repository and 17 detached worktrees, each containing the same project-only skill. It does not edit the T3 checkout. fixture-data.json contains the exact stopped-thread creation inputs.
2. Pair an OWN T3 collaborative Browser tab to each isolated origin. Run seedEvidenceFixture(environmentId) from seed-browser.js through preview_evaluate if rebuilding an empty environment. Existing fixture thread IDs are skipped. This script uses app commands; it sends no turns. The seed script was source-checked; actual captures reused the parent's already-seeded 17 threads. Keep the same host personal skills (20 captured, including pr-audit); the project fixture adds the 21st cwd skill. No credentials or personal skill source files are in this bundle.
3. Execute capture-browser.js in preview_evaluate, then installEvidenceObserver(environmentId). Execute installPickerDomObserver from capture-orchestrator.js in the page. Run runCapture(side,width,theme,tabId,environmentId) through functions.exec with the T3 tools object. Use the explicit owned tab ID on every call. Run widths 1440 and 390, light and dark, on both refs. Own tabs created with reuseExistingTab:false. No device emulation: freeform width by 900 CSS pixels. Do not navigate any other active client.
4. A is folder 02. Prime it, then visit folders 03 through 17 and 01, sequentially, typing $triage in each actual Message composer and awaiting a real settled provider snapshot. Assert A is absent and snapshot count is 16. Return A and type $triage. Record real provider-state and DOM changes; await project visibility, then the final commands. Type /, hold the real settled UI for 2 seconds, then type /compact and hold for 2 seconds. Never submit. The latter query currently shows /autocompact as the matching suggestion; this is the actual unchanged app behavior, not an asserted /compact option.
5. Wide captures apply Search threads = Picker folder after resizing. Narrow captures use the same router.navigate path on each side, with the responsive sidebar hidden. Dismiss notifications before recording. The capture script fails if A was not evicted. Other open clients can refresh their current folder; A02 avoids the observed A01 interference. No client state or provider snapshot is replaced or fabricated. No artificial provider delay is introduced. Final 2-second reading dwells occur after discovery has already settled.
6. Copy each tool-managed recording out of attachments into /tmp/issue-22429-evidence. build-evidence.py uses ffmpeg to add a caption band outside the complete viewport and four seconds of labelled final-frame hold. Original footage remains uncut and at its original speed. Captions narrate the script and real DOM milestone times, which are not frame-perfect video alignment. Run summarize-runtime.py to build the curated transcript and correlate real workspace-probe spans. Run verify-provenance.py after capture; requesting additional Vite source files can cause dev dependency optimization and reload a tab, so do this after recording.
7. Inspect full-surface frames from every clip and the transient return segment. Static inspection sheets are local review aids only. The formal render matrix is empty; no static still or pixel-diff claim is made. Do not upload any earlier raw triage recording.
8. Before public uploads, read the latest issue and all comments through cafe. Stop for a MEMBER/OWNER comment in the preceding 24 hours. Only curated evidence files are uploaded with ghdrop upload -m. Preserve its stdout verbatim in ghdrop-output.md. Never include pairing/session material or raw database/trace files. The evidence-section.md is a prepared handoff, not a forge write.

The server's trace has workspace-probe spans without cwd attributes, so correlation uses overlapping timestamps plus browser route/snapshot state. There is no independent capability subprocess span; do not claim exact CLI launch or completion times from these spans alone. Native/mobile/desktop shell and remote/relay timing remain unverified.
