Skip to content

os doctor prints ✓ Test coverage / ✓ Deprecations about a tree it never examined (in any user app) #10679

Description

@baozhoutao

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)

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions