ana doctor — unified project health diagnostic

There is no single command that answers "is my Anatomia installation healthy?" The health data exists — scan freshness, context maturity, skill enrichment, proof chain trajectory, CLI version, stale work items — but it's scattered across `setup check`, `work status`, `proof health`, and `update-check.ts`. Nobody runs all four. A customer who just finished init has no way to know what's healthy, what's next, and what needs attention.

verdict PASSscore 37 / 37findings 6 (0 risk · 2 debt · 4 obs)duration 11h 4mrejection cycles 0shipped May 19, 2026

Pipeline timeline

Intent to proven code in 11h 4m across Think, Plan, Build, and Verify.

Think
634m
Plan
7m
Build
8m
Verify
6m

Assertion ledger

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

IDSaysMatcher
A001Doctor prints a status line for each health dimensionverifiedok
A002Doctor shows scan freshness statusverifiedok
A003Doctor shows context quality statusverifiedok
A004Doctor shows skill enrichment statusverifiedok
A005Doctor shows proof chain statusverifiedok
A006JSON output includes the doctor command nameverifiedok
A007JSON output includes a timestampverifiedok
A008JSON output includes all five dimension objectsverifiedok

Findings 6 total

obspackages/cli/tests/commands/doctor.test.tsclosed
A001-A005 tests verify data model, not terminal output — contract targets output.lines
debtpackages/cli/tests/commands/doctor.test.tsclosed
A022 test line 410 contains dead logic — 'still scaffold'.split(' ')[0] ternary always evaluates to truthy branch, duplicating line 408
debtpackages/cli/src/commands/doctor.tsscope
ana.json read twice — assessScanFreshness and assessContext both parse .ana/ana.json independently
obspackages/cli/tests/commands/doctor.test.tsmonitor
No tests for guard clauses (A018/A019 no-ana guard, A025/A026 worktree guard) — these are in the command handler and require subprocess testing to reach
obspackages/cli/src/commands/doctor.tsmonitor
formatFooter redCount only counts cli_version and scan_freshness — if fail status were ever added to context/skills/proof_chain, the count would be wrong
+1more findings

Integrity seal

scopesha256:b86e0d5d58e17...
contractsha256:17d5f48bc65d6...
plansha256:eff8afdd9363d...
specsha256:e8fe7ca34d674...
build-reportsha256:b7f3871a4951e...
build-datasha256:5c590bbd2ea8f...
verify-reportsha256:fba16a81dcf0a...
verify-datasha256:772d763ef5b4f...
audit cmd$ ana proof audit add-doctor-command   → all hashes match