Remove the non-authoritative plan.md phase checkbox

Make `plan.md` phase status honest by deleting the hand-maintained `- [ ]`/`- [x]` checkbox entirely. Phase completion is currently tracked twice: once mechanically (build/verify artifacts + seals — the only source `ana work status` and `countPhases` actually read) and once as an agent-hand-edited markdown checkbox that **no code reads**. The redundant copy has a cross-tree commit path that mis-fires, producing split-brain state and a dirty working tree that can block `ana work complete --merge`.

verdict PASSscore 18 / 19findings 4 (0 risk · 1 debt · 3 obs)duration 2h 10mrejection cycles 0shipped Jun 9, 2026

Pipeline timeline

Intent to proven code in 2h 10m across Think, Plan, Build, and Verify.

Think
11m
Plan
14m
Build
19m
Verify
9m

Assertion ledger

19 claims, each independently verified. Showing 8 — show all →

IDSaysMatcher
A001A plan written in the old checkbox style is still acceptedverifiedok
A002A plan written in the new plain-list style is acceptedverifiedok
A003A multi-phase plan with a spec for every phase is acceptedverifiedok
A004A plan with a phase that has no spec reference is rejectedverifiedok
A005A plan with no phases section is still rejectedverifiedok
A019A plan whose phases section is empty is rejectedverifiedok
A006Phase counting reads the old checkbox format correctlyverifiedok
A007Phase counting reads the new plain-list format correctlyverifiedok

Findings 4 total

debtpackages/cli/tests/commands/artifact.test.tsscope
A010's tagged test runs on the artifact branch, where the removed verify-report→plan.md staging block was a guarded no-op (!artifactPaths.includes). The test passes identically with or without the fix — it does not discriminate the change it claims to cover.
obsclosed
Contract A010's literal target (isFileCommitted plan.md === false after save-all) only holds on a feature branch, where plan.md is filtered from primaries. On the artifact branch save-all legitimately commits plan.md as a primary artifact, so the assertion as written contradicts normal save-all behavior. The assertion should pin a branch context or assert 'no verify-report-coupled staging.'
obspackages/cli/src/commands/artifact-validators.tsmonitor
validatePlanFormat phase detection recognizes only '- ' bullets (line.startsWith('- ')). A '* ' bullet or tab-prefixed dash would be silently uncounted. This faithfully mirrors countPhases (intentional, commented), so behavior is consistent — but it records a frozen-format fragility shared by both copies for the next engineer.
obspackages/cli/src/commands/work.tsacknowledge
work.ts pull defense gates on porcelain status with !trimStart().startsWith('??'). A staged-deleted ('D ') or renamed ('R ') plan.md is also treated as 'modified' and restored from HEAD. Behavior is benign (restoring a non-authoritative file is desirable), but the comment frames the guard narrowly as 'tracked-modified'.

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
sessionturnstoolsinoutcachecost
ana51276.2k22.3k1.1M$1.53
plan53216.2k31.1k1.4M$1.96
build190878.3k69.9k9.1M$7.21
verify83366.8k34.3k2.4M$2.63
TOTAL 4 sessions$13.33 (table 2026-06-14)
churn 19 files · +347/−101
completeness ✓ complete (plan 1/1 · build 1/1 · verify 1/1)

Integrity seal

scopesha256:d7710a414f717...
contractsha256:f899bf46c2c64...
plansha256:7c9afda542689...
specsha256:86498484d2d8e...
build-reportsha256:ff84348a56636...
build-datasha256:fbb9de99fe216...
verify-reportsha256:7ae9ce1e986eb...
verify-datasha256:ed59a46dcf824...
audit cmd$ ana proof audit remove-plan-phase-checkbox   → all hashes match