# Evidence workflow

Environment for every capture: Linux x86_64, Chromium 157, web development app, 1280 × 800 CSS pixels, device scale factor 2, light theme. Each commit ran from its own worktree with its own fresh database using `T3CODE_DEV_SEED=0 vp run dev`. No database was copied from an installed app.

1. Run `seed.py PROJECT_DIRECTORY` for each isolated project. The generated instruction files have identical SHA-256 `445fcda9762e92f14ed88236abc65ee44082a8e2167b84964bfc66b10d362c90`.
2. Add each project through `node apps/server/src/bin.ts project add --base-dir .t3 --title 'Context window evidence' PROJECT_DIRECTORY` in the respective checkout.
3. Supply a Claude selection with the catalog's 1M context option to `drive.py CHECKOUT SERVER_PORT PROJECT_ID SELECTION_JSON TITLE`. Runtime selection identifiers are intentionally omitted from public evidence. The project settings disable the 1M context window.
4. Complete the short READY turn. The final matched scenario used approximately 152K tokens and reported a one-hour prompt-cache TTL. The base's context meter showed 1M capacity; head showed 200K.
5. Use `capture-driver.js` through T3's preview browser to enable the Context row, hide other detail rows and collapse the sidebar. Provider-selection labels are hidden solely to redact private runtime identifiers. The data, context meter, compaction controls and outcomes are unmodified.
6. Keep the default instance on “When you return.” Create the additional instance through `enableScheduledInstance()`, then launch the same selection and READY turn against that instance.
7. Wait in real time. Record the scheduled sessions around the two-minute pre-expiry window.
8. After the scheduled capture, run `update-instructions.py PROJECT_DIRECTORY` on both projects. Record the original idle sessions: type `Reply with RETURNED only. Do not use tools.`, inspect the compaction chip and submit with Enter.
9. Read only the isolated runtime databases with `observe.py CHECKOUT THREAD_ID LABEL` to retain timings, usage, compaction counts and error codes without private runtime metadata.
10. Save stills only after two screenshots at least 500 ms apart compare identically. Inspect stills and recording frames before upload.

No tests are used as evidence. The first oversized calibration fixture exceeded the window on both sides and is excluded from the matched evidence scenario.

AI-assisted; verified with the tests and tools listed above.

Observed result: base resumed without a compaction chip and failed with `blocking_limit`. Head offered Compact, completed compaction from 152K to 5.41K, then returned RETURNED; its resulting context was about 154K after instructions were reattached. Scheduled head compacted from 152K to 5.50K at the real two-minute lead point; scheduled base did not compact.

Recording limitation: the preview recorder drops unchanged trailing time. Although both scheduled recordings were active for about 232 seconds, the base scheduled file is only 0.92 seconds and head's file is about 104 seconds. The raw captures are retained without inventing missing video; the runtime transcript supplies the actual recording and run timestamps. Resume recordings include the typed message, submission and observed outcome. Gray video rectangles redact only the runtime-selection change badge; the app's compaction messages and errors remain visible.
