Worktrees V2 — Phase Timing + Danger Map + Prune
V1 proved worktree isolation works — the trust model is enforced physically. But Build enters the worktree blind: no knowledge of which files have caused trouble before, and the proof chain is just a record nobody reads at build time. Meanwhile, phase timing lies — it measures gaps between artifact saves (which include developer idle time, sometimes days) instead of actual phase durations. And health display is missing the plan phase entirely.
verdict PASSscore 21 / 23findings 7 (0 risk · 1 debt · 6 obs)duration 1h 25mrejection cycles 0shipped May 6, 2026surface cli
Pipeline timeline
Intent to proven code in 1h 25m across Think, Plan, Build, and Verify.
Think2m
Plan9m
Build65m
Verify10m
Assertion ledger
23 claims, each independently verified. Showing 8 — show all →
| ID | Says | Matcher | |
|---|---|---|---|
| A001 | Build gets a ranked list of risky files before starting work | verified | ok |
| A002 | Files with more severe findings appear first in the risk profile | verified | ok |
| A003 | Risk scores use severity weights: risk=3, debt=2, observation=1 | verified | ok |
| A004 | No empty risk section appears when files have no known issues | verified | ok |
| A005 | Bad contract YAML doesn't crash the build setup | verified | ok |
| A006 | Risk profile shows findings but not build concerns | verified | ok |
| A007 | Build duration measures actual build time, not idle time between saves | verified | ok |
| A008 | Verify duration measures actual verify time, not idle time between saves | verified | ok |
Findings 7 total
debtpackages/cli/src/utils/worktree.ts→ closed
Double H2 heading in risk profile — worktree.ts pushes '## Proof Findings' then proofFindings content starts with '## Risk Profile'
obspackages/cli/tests/utils/proofSummary.test.ts→ closed
A013/A014 are type-level sentinels — construct PipelineStats manually, don't test computePipelineStats computes median_plan
obspackages/cli/tests/commands/work.test.ts→ closed
A017 (build_agent) and A020 (verify_agent) lack direct tagged tests — covered by source inspection only
obs→ closed
Contract A007 value stale — says timing.build equals 60 but test fixture correctly produces 45
obs→ closed
Contract A011 value stale — says timing.build equals 60 but gap-timing fallback produces 1500 in test fixture
+2more findings
Integrity seal
scopesha256:4b9455adf11ba...
contractsha256:b215f463e78e8...
plansha256:6ea35534eff9f...
specsha256:e3660c81ecfd7...
build-reportsha256:b391a4f4f5fe9...
build-datasha256:24145779fcaee...
verify-reportsha256:8051bca2e58f9...
verify-datasha256:2d21da193c060...
audit cmd$ ana proof audit worktrees-v2-timing-danger-prune → all hashes match