fix(capture-kit): make a completed durable record terminal

Merged
TH
7m ago
+1658-170

Summary

Keep completed durable capture records terminal, fence destructive cleanup, and replay only validated kind-owned outcomes.

Terminal finish now consumes typed forceCleanup() results. Capture intent retains pending cleanup and preserves replay; disposal intent reports a typed teardown failure. One shared helper beside isConfirmedCleanup, exposed through capture-kit, owns cleanup retries for all four handles. App-log retries skip successful release steps.

34 files against merge-base: production +439/-159; tests/fixtures +1219/-11. This round: ten production files +81/-134; four test files +72/-22. No record routing change.

Validation

Base 2d27d0755e; tested head 8c436df63fce0a77dc3ee96773387e8fcdea1da5. The same three-file regression command: 4 failed / 26 passed on base plus tests; 30 passed at head. Eager-import plus regression suite: 912 passed. An initial eager-import failure was fixed by co-location.

AGENT_DEVICE_VITEST_MAX_WORKERS=1 pnpm check:affected --run --head 8c436df63fce0a77dc3ee96773387e8fcdea1da5 passed. Receipt .tmp/validation/run-XkPtW7/receipt.json: exactCommit=true, checkoutChanged=false. 1,212 related / 16,784 unit passed; one skipped.

No new live run was required because record routing is unchanged. Historical iOS serial smoke remains attributed to 2d27d0755e, with artifact retention enabled; it did not exercise disposal failure.

Cold self-review completed; no independent review was started this round. Coverage, Integration Tests and native CI lanes remain GitHub-authoritative. Review dispositions, route audit and validation evidence.