Remove processCaptureStrict — provenance records-and-annotates, never blocks
`processCaptureStrict` is a config flag that, at `ana work complete`, blocks completion (`process.exit(1)`) when recorded process provenance is incomplete. It should not exist. Process provenance is **metadata** — who/where each pipeline stage ran. Metadata blocking a terminal pipeline action is overreach, and this particular guard has a defect:
verdict PASSscore 14 / 14findings 4 (0 risk · 1 debt · 3 obs)duration 2h 47mrejection cycles 0shipped Jun 9, 2026surface cli
Pipeline timeline
Intent to proven code in 2h 47m across Think, Plan, Build, and Verify.
Think132m
Plan9m
Build13m
Verify6m
Assertion ledger
14 claims, each independently verified. Showing 8 — show all →
| ID | Says | Matcher | |
|---|---|---|---|
| A001 | Completing work with incomplete provenance still records a proof entry instead of blocking | verified | ok |
| A002 | An incomplete provenance gap is recorded as not-complete, never hidden | verified | ok |
| A003 | The recorded gap names the missing pipeline stage | verified | ok |
| A004 | Completing work with no recorded sessions still writes a proof entry | verified | ok |
| A005 | Zero recorded sessions are marked incomplete, not complete | verified | ok |
| A006 | With full provenance the proof entry is still written | verified | ok |
| A007 | With full provenance the proof marks provenance complete | verified | ok |
| A008 | Merging with incomplete provenance still records the proof entry — code never lands without an audit trail | verified | ok |
Findings 4 total
obspackages/cli/src/commands/work.ts→ closed
Strict guard's inlined duplicate provenance reader is deleted — cross-machine-provenance-C7 resolved
obspackages/cli/tests/commands/doctor.test.ts→ monitor
A014 verified via results.overall === 'pass' proxy, not the literal exit code the contract names (doctorExitCode equals 0)
debtpackages/cli/vitest.config.ts→ scope
Coverage gate — the spec's designated 'real gate' (vitest.config thresholds 80/75/80/80) — is not mechanically runnable; @vitest/coverage-v8 is not a declared dependency, so the threshold check silently no-ops wherever the provider is absent
obspackages/cli/tests/commands/work-merge.test.ts→ acknowledge
Keystone merge test re-declares seedProvenance/readChainEntry helpers that duplicate seedActiveProvenance/readChainEntry in work.test.ts; cross-file duplication is justified by the child_process mock isolation but worth noting
Provenance
Who ran what, and what it cost. Recomputable estimates from the shared price table — subordinate to the verdict, never gating.
model claude-opus-4-8
| session | turns | tools | in | out | cache | cost |
|---|---|---|---|---|---|---|
| ana | 164 | 56 | 8.0k | 119.7k | 9.7M | $9.02 |
| plan | 63 | 29 | 6.3k | 29.5k | 1.2M | $1.77 |
| build | 180 | 87 | 8.3k | 47.2k | 6.1M | $5.13 |
| verify | 74 | 32 | 6.4k | 21.2k | 1.7M | $1.80 |
| TOTAL 4 sessions | $17.73 (table 2026-06-14) | |||||
churn 12 files · +142/−230
completeness ✓ complete (plan 1/1 · build 1/1 · verify 1/1)
Integrity seal
scopesha256:a002719659c29...
contractsha256:a1b40f590177e...
plansha256:e319c96a114f4...
specsha256:776fcb70326c7...
build-reportsha256:3e7f99da97d6c...
build-datasha256:17ed6712ed486...
verify-reportsha256:d0f2af46a594e...
verify-datasha256:0de4f182ebbb7...
audit cmd$ ana proof audit remove-processcapturestrict → all hashes match