Repository navigation
docs(qa): revise cli.doctor-health-report to revision 2 — the monorepo-anchored expected-fail is now a pass - #11422
Merged
Conversation
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.
os-steve
marked this pull request as ready for review
August 23, 2026 16:58
This was referenced Aug 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #10798
Revises
cli.doctor-health-reportindocs/qa/platform-checklist/areas/cli.jsonto revision 2. One item, one revision, onehistoryentry — 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/findDeprecatedUsageswalked only<cwd>/packages/spec/srcand printed✓ Test coverage/✓ Deprecationsabout 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 blankscaffold, and again from a monorepo checkout for the counterpart. Scaffold, verbatim:and under
-v, beneath each:Neither old
✓appears, neither→ Checking…step line appears, and the@objectstack/spec Not builtrow 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 packageswas never unconditional —installedPackageLedgerChecksreturns[]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_ENVandTenancy postureare 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
✓s an expected-fail; rewritten to the skip behaviour.verifyre-anchored.printInfo-not-printWarninginvariant stated (withholding a false✓must not manufacture a false⚠).✓lines" step, rewritten to capture the skip rows and assert three absences.@objectstack/spec Not builtentry 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).requiresnote now says both cwds must be run; theknownGapsconfigExists()anchor re-derived.doctor-unexamined-spec-tree.test.tsadded to the unit pins.doctor.tsgrew ~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
0e833d5pnpm 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 cleanpnpm check:nul-bytescheck-nul-bytes: OK (scanned 6400 text file(s) … no raw ASCII control bytes).pnpm lint(repo-wideeslint . --no-inline-config, not narrowed)pnpm check:platform-checklist1 problem(s)— pre-existing, see belowGate families derived from the tree with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstackagainst the actual change set, not from a recalled list.check:platform-checklistreports exactly one problem,coverage.json · manifest: UNCLASSIFIED, and it is not from this change: revertingcli.jsontobb006446and 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 namescli.json, so the revision bookkeeping this gate does enforce is well-formed.Scope
packages/cli/**— the code fix already landed.skip-changesetapplied, matching the precedent for checklist-maintenance PRs (docs(qa): state the positive secret contract and de-flake the chart measurement in platform-core (#7573, #7569) #7636, docs(qa): correct five approvals checklist items against the #7517 run #7638, docs(qa-checklist): attachments-storage maintenance — totalSize step fix, ADR-0104 D3 receipt clause, and the scratch authz fixture landed permanently #7716, docs(qa): dedupe the private D11 defect and correct four stale sharing/security checklist texts #7717).cli.doctor-deprecation-scanis stale on the same two counts — a hint that os doctor --scan-deprecations prescribes a codemod command that does not exist #10680 already rewrote, and a full anchor set moved by os doctor prints ✓ Test coverage / ✓ Deprecations about a tree it never examined (in any user app) #10679) and check:platform-checklist is red on main (coverage.json · manifest UNCLASSIFIED) and the gate is not CI-wired, so the red has no reporting channel #11421.Generated by Claude Code