Skip to content

docs(qa): revise cli.doctor-health-report to revision 2 — the monorepo-anchored expected-fail is now a pass - #11422

Merged
os-steve merged 1 commit into
mainfrom
claude/issue-10798-doctor-checklist-revision
Aug 23, 2026
Merged

os-steve merged 1 commit into
mainfrom
claude/issue-10798-doctor-checklist-revision

Conversation

@claude

@claude claude Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Fixes #10798

Revises cli.doctor-health-report in docs/qa/platform-checklist/areas/cli.json to revision 2. One item, one revision, one history entry — no other item in that file is touched (it is the hot shared file of the #10663 QA-run lane).

Why now

The item's last acceptance clause was an EXPECTED-FAIL recording a live product defect: findMissingTests / findDeprecatedUsages walked only <cwd>/packages/spec/src and printed ✓ Test coverage / ✓ Deprecations about a tree they never opened. #10679 landed the fix, so the clause had to invert or the item would instruct a runner to record a failure that no longer happens.

Written against a real run, not against the source

The clause a runner executes is an instruction, so the text was written from observed output. The shipped CLI was built from this base and driven in a real create-objectstack -t blank scaffold, and again from a monorepo checkout for the counterpart. Scaffold, verbatim:

  ℹ Test coverage         Skipped — no packages/spec/src in this directory (monorepo-only check)
  ℹ Deprecations          Skipped — no packages/spec/src in this directory (monorepo-only check)

and under -v, beneath each:

      → Looked for <cwd>/packages/spec/src and found nothing to walk. This check reads the
        monorepo's own spec sources, so outside that checkout it has no subject — and a ✓ here
        would be a claim about files doctor never opened.

Neither old ✓ appears, neither → Checking… step line appears, and the @objectstack/spec Not built row is absent — its probe is now gated on <cwd>/packages/spec/package.json. From the monorepo the scanned arm still runs: ✓ @objectstack/spec Built, the step lines, and the real ⚠ findings all print.

The measurement corrected more than the card predicted

The card expected one row in the first acceptance clause's enumeration to have become conditional (@objectstack/spec). The real report shows the enumeration was wrong about a second row too, and had been since revision 1: Installed packages was never unconditional — installedPackageLedgerChecks returns [] on a clean ledger, so the row appears only on a ledger failure or a skipped entry. That also contradicted the item's own clause 4, which describes it as a failure row. NODE_ENV and Tenancy posture are finding-only for the same reason.

So the clause now splits unconditional rows (Node.js, pnpm, TypeScript, Dependencies, Git, Environment files) from finding-only rows, each with the condition that produces it, rather than naming a single exception.

What changed in the item

  • title — the tail declared the two ✓s an expected-fail; rewritten to the skip behaviour.
  • acceptance[0] — row enumeration split unconditional vs finding-only; verify re-anchored.
  • acceptance[7] — EXPECTED-FAIL inverted into an ordinary pass clause, with the printInfo-not-printWarning invariant stated (withholding a false ✓ must not manufacture a false ⚠).
  • steps[0] and steps[6] — the enumeration, and the old "capture the two ✓ lines" step, rewritten to capture the skip rows and assert three absences.
  • negative — the @objectstack/spec Not built entry flipped from an accepted note into a regression; two negatives added for the skip row's own wrong shapes (a ⚠ instead of a ℹ, and the row vanishing instead of printing).
  • fixtures — the requires note now says both cwds must be run; the knownGaps configExists() anchor re-derived.
  • source — doctor-unexamined-spec-tree.test.ts added to the unit pins.
  • every line anchor in the item re-derived at this base. doctor.ts grew ~90 lines, so every number quoted at revision 1 had moved — including the ones in clauses this card did not otherwise touch.

Verification — union run at 0e833d5

gate verdict line
pnpm check:doc-authoring ✓ doc authoring guard: 389 files clean — no bare metadata literals.
pnpm --filter @objectstack/lint run check:doc-formula-expressions ✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 420 files / 1447 TS blocks judged clean
pnpm check:nul-bytes check-nul-bytes: OK (scanned 6400 text file(s) … no raw ASCII control bytes).
pnpm lint (repo-wide eslint . --no-inline-config, not narrowed) exit 0
pnpm check:platform-checklist 1 problem(s) — pre-existing, see below

Gate families derived from the tree with node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack against the actual change set, not from a recalled list.

check:platform-checklist reports exactly one problem, coverage.json · manifest: UNCLASSIFIED, and it is not from this change: reverting cli.json to bb006446 and re-running produced the identical single problem and the identical exit 1, and the problem names a file this PR does not touch. Filed separately as #11421. Nothing in the run names cli.json, so the revision bookkeeping this gate does enforce is well-formed.

Scope


Generated by Claude Code

The item's EXPECTED-FAIL clause described a live product defect: the two
monorepo-anchored scans printed a `✓` about a `packages/spec/src` tree they
never opened. #10679 fixed that, so the clause inverts into an ordinary pass
clause: outside a monorepo each check now prints a named informational skip,
and `-v` adds the directory doctor resolved.

Rewritten against a real run of the shipped CLI in a `create-objectstack -t
blank` scaffold and again from a monorepo checkout, not from source reading.
That measurement also corrected the acceptance clause's row enumeration beyond
what the card predicted: `Installed packages` was already findings-only, and
`NODE_ENV` / `Tenancy posture` are finding-only too, so the clause now splits
unconditional rows from finding-only ones instead of naming one exception.

Every line anchor in the item was re-derived at this base — doctor.ts grew
~90 lines, so every number quoted at revision 1 had moved.
@claude claude Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 23, 2026
@os-steve
os-steve marked this pull request as ready for review August 23, 2026 16:58
@os-steve
os-steve added this pull request to the merge queue Aug 23, 2026
Merged via the queue into main with commit 6dd8d27 Aug 23, 2026
27 checks passed
@os-steve
os-steve deleted the claude/issue-10798-doctor-checklist-revision branch August 23, 2026 17:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant