Found by QA run #10663 driving cli.doctor-health-report at framework 79ebb37. Also recorded in PR #10147 FOLLOW-UPS §7c (D12); this card is its extraction with live confirmation.
Symptom
In any user-app cwd with no <cwd>/packages/spec/src (a stock create-objectstack -t blank scaffold), os doctor prints verbatim:
✓ Test coverage All *.zod.ts files have matching tests
✓ Deprecations No @deprecated tags found
about a tree it never walked (ls packages/spec/src → "No such file or directory" in the same cwd). Reproduced ×2.
Root cause
findMissingTests (doctor.ts:1141-1143) and findDeprecatedUsages (:1159-1161) both early-return [] when <cwd>/packages/spec/src does not exist; the else branches then print ✓ Test coverage (:1939) and ✓ Deprecations (:1951). This violates doctor's own withhold-the-✓ discipline (the ledgerReadingIsComplete gate at :2063-2065 used for the installed-packages ledger) — a ✓ over an unexamined tree should be withheld, scoped to the tree actually examined, or skipped with a named reason.
Adjacent (same card)
⚠ @objectstack/spec Not built (doctor.ts:1837) probes <cwd>/packages/spec/dist and is monorepo-anchored noise in a user app — same class.
Suggested fix
Gate both ✓ lines on the scanned tree actually existing; when it does not, skip the check (named reason) or scope it. Both checks are monorepo-internal — they should not run, or should announce themselves as skipped, in a user app.
Passing clauses
The seven real health checks pass: env-provenance attribution (#5387), posture-as-error (#5382), ledger independence across postures (#5429), withheld unique-scope on incomplete ledger, config-analysis both ways (orphan view / circular / unused + the three ✓), exit contract (1 iff error, warnings never flip).
QA-source: #10663 · cli.doctor-health-report · clause 7 (expected-fail probe)
Found by QA run #10663 driving
cli.doctor-health-reportat framework79ebb37. Also recorded in PR #10147 FOLLOW-UPS §7c (D12); this card is its extraction with live confirmation.Symptom
In any user-app cwd with no
<cwd>/packages/spec/src(a stockcreate-objectstack -t blankscaffold),os doctorprints verbatim:about a tree it never walked (
ls packages/spec/src→ "No such file or directory" in the same cwd). Reproduced ×2.Root cause
findMissingTests(doctor.ts:1141-1143) andfindDeprecatedUsages(:1159-1161) both early-return[]when<cwd>/packages/spec/srcdoes not exist; theelsebranches then print✓ Test coverage(:1939) and✓ Deprecations(:1951). This violates doctor's own withhold-the-✓ discipline (theledgerReadingIsCompletegate at:2063-2065used for the installed-packages ledger) — a ✓ over an unexamined tree should be withheld, scoped to the tree actually examined, or skipped with a named reason.Adjacent (same card)
⚠ @objectstack/spec Not built(doctor.ts:1837) probes<cwd>/packages/spec/distand is monorepo-anchored noise in a user app — same class.Suggested fix
Gate both ✓ lines on the scanned tree actually existing; when it does not, skip the check (named reason) or scope it. Both checks are monorepo-internal — they should not run, or should announce themselves as skipped, in a user app.
Passing clauses
The seven real health checks pass: env-provenance attribution (#5387), posture-as-error (#5382), ledger independence across postures (#5429), withheld unique-scope on incomplete ledger, config-analysis both ways (orphan view / circular / unused + the three ✓), exit contract (1 iff error, warnings never flip).
QA-source: #10663 · cli.doctor-health-report · clause 7 (expected-fail probe)