Uh oh!
There was an error while loading. Please reload this page.
docs(qa): R4 coverage sweep — retire both stale waivers, author 8 items for the post-2026-08-08 window - #9309
Merged
Conversation
…ms for the post-2026-08-08 window (#9299) Re-audit of the platform-checklist ledger against the window since the 2026-08-08 sweep. 182 -> 190 items; coverage 28 mapped / 2 waived -> 30 mapped / 0 waived. Both surviving coverage waivers were factually stale. `book` and `doc` both claimed the kinds are "display-only, no independent runtime behavior to gate beyond serving". The REST read layer in fact runs a three-member audience vocabulary with an ADR-0049 fail-closed branch, a two-layer gate (book audience, then per-entry doc-audience union), a deliberate orphan-group non-leak rule, and locale resolution -- an access-control surface. Retired both; `platform-core.docs-audience-gate` now covers them. Running total: 6 of 6 waivers ever written turned out stale. New items, each grounded in a real file path before assertion: - platform-core.docs-audience-gate book/doc audience gating - access-security.no-active-org-session-semantics ADR-0123 (P0) - api-backend.filter-comparand-conformance pinned, 6 members - api-backend.date-range-preset-matrix pinned, 13 members - api-backend.retired-def-refusal retired DEFS, not keys - integration-system.datasource-credential-refusal-matrix (P0) - cli.migrate-meta-codemod the prescription's honesty - cli.scaffold-console-first-paint documented first-run seam The dominant find matches the ledger's structural blind spot: new behavior inside an already-mapped kind is invisible to both ratchets (no new kind, no new enum member), so none of the above could have been caught by `check:platform-checklist` however often it ran. SWEEP.md fact correction: the runbook claimed the validator runs in "CI, every PR". It does not -- by maintainer decision it is manual and periodic (README "Operating cadence"; the recorded note at .github/workflows/lint.yml:426, which has no `run:` step). Corrected the fact and spelled out the consequence a sweep depends on: the ratchets catch drift at the NEXT manual run, so a green ledger is not evidence that drift is gated. CI posture itself left untouched. FOLLOW-UPS.md gains a 2026-08-17 section: one docs-drift finding (the blank template's `dev` script omits the `--ui` flag that serves the console quick-start sends newcomers to), one stale liveness note, and the checked-and-clean readings so the next sweep need not re-derive them. Fixes#9299 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ai9gUdihXjg7FumzsBNSSs
…it (#9299) The R4 sweep flagged the blank template's bare `"dev": "objectstack dev"` against quick-start's `npx os dev --ui` and inferred that `npm run dev` would strand a newcomer with no console. It was reported as unbooted, and the hedge was right: tracing the chain disproves it. serve.ts:221 ui: Flags.boolean({ ..., default: true, allowNo: true }) dev.ts:370 ...(flags.ui ? ['--ui'] : []) adds only, never --no-ui dev.ts:69 ui declared with NO default cli.mdx:139 "--ui | Force Console UI on (already on by default in dev)" An unflagged `dev` spawns `serve` with no ui flag, so serve's own default-on applies. `--ui` on `dev` is a no-op forwarder. The bare script is correct and there is no divergence. An expected-divergence probe that encodes correct behavior as a divergence teaches the next run to grade a working platform as broken — the records-forms.action-location-matrix failure mode. So: - FOLLOW-UPS.md: the E1 drift row is gone; the reading is rewritten as a checked-and-clean entry in 5b with the full trace, because the wrong inference is an easy one to make twice and deletion would invite it. The stale liveness-note row renumbers E2 -> E1. - cli.scaffold-console-first-paint: clause 3 now asserts the two invocations AGREE, with a difference between them as the failure; the negatives cover the real regressions (a future `ui` default of false on dev, or --no-ui being forwarded); source cites the whole chain; the history entry records the refutation so it is not re-derived. The item itself stands — the seam it covers is real: no other item drives the console against a freshly scaffolded blank project. Validator green, unchanged at 190 items / 30 kinds mapped / 0 waived. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ai9gUdihXjg7FumzsBNSSs
os-zhuang
marked this pull request as ready for review
August 17, 2026 12:56
os-zhuang
enabled auto-merge
August 17, 2026 12:56
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Aug 17, 2026
Closed
Closed
Closed
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 freeto 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#9299
Part of the #9296 QA wave (round 4, ran in parallel with R0). Docs-only diff:
docs/qa/platform-checklist/**and nothing else.Result
node scripts/check-platform-checklist.mjsgreen atd23a746c7:since:v17selectableBoth surviving waivers were stale
bookanddoceach claimed the kind is "display-only ... no independent runtimebehavior to gate beyond serving". Grounding disproved it. The REST read layer runs:
public/org/{ permissionSet }) with anADR-0049 fail-closed branch — unresolvable permission-set holdings deny;
again by each doc's effective audience (the union over claiming books), so an
anonymous reader never sees a nav entry that would refuse on click;
from claimed-docs resolution because including it "would leak every unclaimed doc of a
package through any
publicbook it ships";That is an access-control surface, and it now has an item. Running total: 6 of 6
waivers ever written turned out stale —
SWEEP.mdrecords that, since it is thestrongest argument in the file for auditing waivers against the runtime rather than
against their own prose.
Items authored
Each was grounded in a real file path before anything was asserted, and each names the
sibling item it deliberately does not duplicate.
platform-core.docs-audience-gateaccess-security.no-active-org-session-semantics(P0)api-backend.filter-comparand-conformanceapi-backend.date-range-preset-matrixapi-backend.retired-def-refusalintegration-system.datasource-credential-refusal-matrix(P0)datasourcealready mapped; the doors are not enum memberscli.migrate-meta-codemodcli.scaffold-console-first-paintTwo new
variantsmatrices are pinned withenumSource, verified against thevalidator's own extractor rather than by eye:
ACCEPTED_FILTER_COMPARAND_TYPES— 6 membersDATE_RANGE_PRESETS— 13 membersI also probed
SCALAR_FILTER_HEAD_TYPESand did not pin it: it is anew Set([...]),which the extractor reads as zero members, so a pin would have been a permanently
vacuous green.
The blind spot the card predicted, confirmed
The window added 156 non-test source files but zero new metadata kinds. Every
finding above is new behavior inside an already-mapped kind — invisible to the coverage
ratchet (no new kind) and to the
enumSourceratchet (no new enum member). So none of itcould have been caught by
check:platform-checklisthowever often it ran. That is nowstated explicitly in
SWEEP.md.One refinement to the card's framing, from evidence: the gap is not only recency. Two
of the eight items cover capabilities that predate the ledger's own baseline
(
since: v14.1andv14.7) and were simply never authored. Under-authoring of v17 isreal —
since:v17goes 14 → 20 here — but recency was not the whole story.SWEEP.md fact correction
The runbook claimed the validator runs in "CI, every PR" and that this half "needs no
human at all". It does not run in CI:
.github/workflows/lint.yml:426carries themaintainer decision as a comment with no
run:step, and the only two mentions ofthe script in all of
.github/workflows/are that comment. Corrected the fact, kept theposture, and spelled out the consequence a sweep actually depends on — the ratchets catch
drift at the next manual run, so a green ledger is not evidence that drift is gated.
On cost: my own measurements came out above the ones supplied with the card (validator
~0.12–0.18 s vs ~80 ms;
pnpm check:platform-checklist~2.9 s wall vs 0.165 s), which Iattribute to the parallel cold install running in the same container plus
pnpm's ownstartup. Rather than bake in a figure that will read as wrong on the next machine, the
corrected text records the direct-node cost (~0.25 s for self-test + validator) and warns
that timing through
pnpmmeasures the wrapper. Flagged for you inFOLLOW-UPS.md§5c.FOLLOW-UPS.md
New 2026-08-17 section, carrying one drift finding, the checked-and-clean readings, and
notes for you.
One hypothesis this sweep raised was refuted by source-checking, and is recorded as
refuted. I read the blank template's bare
"dev": "objectstack dev"againstquick-start's
npx os dev --uiand inferred thatnpm run devwould strand a newcomerwith no console. Tracing the chain disproves it:
packages/cli/src/commands/serve.ts:221—ui: Flags.boolean({ …, default: true, allowNo: true }); the console is default-ON atserve, and--no-uiis the off switch.packages/cli/src/commands/dev.ts:370—...(flags.ui ? ['--ui'] : [])only ever adds the flag, never forwards--no-ui; withdev.ts:69declaringuiwith no default, an unflaggeddevinherits serve's default.content/docs/deployment/cli.mdx:139states it outright: "--ui| Force Console UI on (already on by default in dev)".So
--uiondevis a no-op forwarder, the bare script is correct, and there is nodivergence. The reading now lives in §5b as a checked-and-clean entry with the full
trace rather than being deleted — the wrong inference is an easy one to make twice, and
a bare deletion invites the next sweep to re-derive it.
cli.scaffold-console-first-paintsurvives, because the seam it covers is real: no otheritem drives the console against a freshly scaffolded blank project (
cli.scaffold-first-runboots headless via
os start --artifact;cli.dev-boot-contractdrives the fully-populatedshowcase). Its clause 3 now asserts the two invocations agree, with a difference
between them as the failure, and its negatives cover the real regressions — a future
uidefault of
falseondev, or--no-uibeing forwarded.The remaining drift row is a stale note in
packages/spec/liveness/doc.jsondescribing atagsdefect that is fixed (DocSchemadeclarestagsnow) — reported, not edited,since it sits outside this card's file surface.
Checked and clean, recorded so the next sweep does not re-derive it: no published doc
prescribes a retired scaffolder template (zero hits across
content/docs/for all five),and
npm run validateis the same binary asnpx os validate.Verification
Docs-only; no path-derived gate families (
node scripts/pm/dispatch-gates.mjson thechanged paths places none). Run at
d23a746c7, after the final commit:node scripts/checklist-select.mjs --self-test— 17 cases passnode scripts/check-platform-checklist.mjs— OK, 190 items, 0 waivednode scripts/check-nul-bytes.mjs— OK, 6067 files, no raw control byteschecklist-select.mjs, including the two newsince:valuesNo changeset: docs-only, publishes nothing. Carrying this repo's real
skip-changesetlabel rather than an empty changeset.
⛔ Draft, per the card. Not merged, no auto-merge, not enqueued.
Generated by Claude Code