Repository navigation
feat(scripts): the JSON-fence gate reads the published READMEs (objectui#12131, phase 2) - #12139
Merged
objectstack-fleet[bot] merged 2 commits intoOct 11, 2026
Merged
Conversation
…tui#12131, phase 2) `check-doc-json-fences.mjs` judged `content/docs` only, so the README examples phase 1 repaired were outside every strict-face check. Its scan surface is now one declared list, `SCAN_SURFACE`: the content tree, every `packages/NAME/README.md` and the root `README.md`. The two README legs are imported from `check-doc-component-types.mjs`, the doc-gate family's spelling of them. Each leg carries an anchor page that must contribute a judged node document, so a README leg that reads nothing exits 2. The summary prints the surface leg by leg. `docs/audits/**`, `skills/**`, CHANGELOGs, changesets and READMEs below a package root stay off. Claude-Session: https://claude.ai/code/session_01DwLS3LzXyNmyTunMGbpc8W Co-authored-by: Claude <noreply@anthropic.com>
…objectui#12131) The leg-anchor pin derived its expected list from SURFACE_ANCHORS alone, so a surface that lost both README legs expected nothing and stayed green. It now first asserts the root README and a package README are among the anchors. Claude-Session: https://claude.ai/code/session_01DwLS3LzXyNmyTunMGbpc8W Co-authored-by: Claude <noreply@anthropic.com>
objectstack-fleet
Bot
deleted the
claude/issue-12131-readme-scan-surface
branch
October 11, 2026 12:46
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 #12131
Clause-②: no
Phase 2 of objectui#12131, the card's last part. Phase 1 landed as PR objectui#12134. This PR widens the scan surface of
scripts/check-doc-json-fences.mjsfromcontent/docsto the published READMEs, so the README examples phase 1 repaired stay covered by the strict authoring face. Triage6106881179called this a blind-spot repair inside the ruled programme (objectui#5250), not a new gate.What changed
SCAN_SURFACEin the gate lists three legs in walk order: every.mdx/.mdpage undercontent/docs, everypackages/NAME/README.md, and the rootREADME.md.listDocumentsand the newsurfaceLegsboth read it, and the summary prints it leg by leg with each leg's page count.PACKAGE_READMES/packageReadmePagesandROOT_PAGESare imported fromscripts/check-doc-component-types.mjs, the same legs the snippet, fence-language and component-type gates walk. This gate does not spell them a second time.content/docs/blocks/forms.mdx(unchanged),packages/plugin-dashboard/README.mdandREADME.md. A README leg that collects nothing cannot hand in its anchor, so the run exits 2 (could not run) instead of printing a green over zero READMEs.analyzetakesanchors(default: every leg's anchor) where it tookanchor.SCAN_SURFACE. Its NOT-read line names what stays off. Incontent/docs/guide/ci-cd-pipeline.md, the gate's table row and its section now say what it reads. The old sentence that pages outsidecontent/docsare not read is replaced by a paragraph that names what is read and what is off.docs/audits/**(triage: point-in-time records), CHANGELOGs and.changeset/(history),skills/**(objectui#12135 owns that fence), and READMEs below a package root.scripts/markdown-test-inputs.mjs: the gate test'sADJUDICATEDentry now readsREADME.md,content/docs/**andpackages/**. The agreement test walks the widened surface. ThenotRead: README.mdline is gone, because the root README is now really read.H1: which reading of "the published READMEs" (measured at
9b755099)Each reading was judged with the gate's own scanner, predicate and the built strict face:
README.mdplus the root README of every package not markedprivateREADME.mdplus everypackages/NAME/README.md(the family leg)README*.mdin the treeobject-kanbanonCardMovedocument inpackages/components/src/renderers/complex/README-KANBAN.mdprivate: truemeans "not on npm", not "not published".packages/vscode-extensionis npm-private, butvsce publishputs its README on the VS Code Marketplace, and that README teaches an authored.objectui.jsonnode document (adivexample, accepted). The npm-only spelling would drop that page. The one unpublished page (a) adds,packages/test-support/README.md, holds no json fence. (a) is also the leg the three sibling doc gates already walk.form, its Dashboardgridofstatistictiles, and theobject-data-tableinpackages/plugin-dashboard/README.md.npm pack --dry-run --json --ignore-scriptsin every package directory lists no README below a package root.@object-ui/componentspublishesdist,README.md,CHANGELOG.mdandLICENSE. SoREADME-KANBAN.mdstays off the surface and needs no fragment marker. The gate's header records this as a dated reading that the gate does not re-derive.Classification: empty. The chosen reading newly refuses no README document, so no README is repaired or declared, and no README file is touched.
Gate run, before and after
9b755099: 184 pages, 227 fences, 185 judged (179 accepted, 6 declared, 0 refused).e297f3ad: 224 pages (content/docs 184, package READMEs 39, root README 1), 251 fences, 204 judged (198 accepted, 6 declared, 0 refused). All three anchors read.node scripts/check-doc-json-fences.mjsexit 0.Reverse verification (one-time ablation, not kept as a test)
From committed head
e297f3ad,node ../objectstack/scripts/ablation-replace.mjsdeleted both README legs fromSCAN_SURFACE. Anchor hits went from 1 to 0, and the blob changed from62fef312061eto6b5e3d8793fa. Readings with the mutation on disk:scripts/__tests__/check-doc-json-fences.test.ts: 5 failed | 27 passed (32). The five that failed are the README tests: the refusal in a package README and the root README; the leg order and page counts; the README fragment declaration; the README anchor control; and the equality with the family's legs.62fef312061e) andgit diff HEADis empty. After restore: 34 passed (34).Tests and gates (all at
e297f3ad)Exit codes were captured by redirect-then-read, never through a pipe. Heavy runs went through
os-verify-lock, and each result below is itsVERDICT command-exit 0line.pnpm exec vitest run scripts/__tests__/check-doc-json-fences.test.ts scripts/__tests__/markdown-test-inputs.test.ts scripts/__tests__/ci-cd-pipeline-doc.test.ts: 3 files, 147 tests passed.pnpm exec vitest run --maxWorkers=2 scripts/__tests__/plus the twopackages/componentstests that read the markdown ledger: 182 passed, 2 skipped (184 files); 5562 tests passed, 2 skipped.pnpm type-check:scripts: exit 0.--listFilesshows the gate, its test andmarkdown-test-inputs.mjsin the program.pnpm check:doc-types0 ·pnpm docs:check-links0 ·pnpm check:new-line-citations0 (0 new) ·pnpm check:control-bytes0 ·pnpm check:doc-fences0 and--self-test0 ·pnpm check:test-path-roots0 ·node scripts/markdown-test-inputs.mjs --audit0 ·node scripts/check-lint-coverage.mjs0 ·node scripts/check-vi-mock-override-shape.mjs0.pnpm lint:root: exit 0 (0 errors; 34 warnings, all in files this PR does not touch).eslint --format jsonon the 3 changed script files: 3 files, 0 errors, 0 warnings.node scripts/check-changeset-presence.mjs: exit 0, "no changeset is owed". No package source and no README changed.node scripts/check-governed-queue-guard.mjs --test(4 paths): NOT GOVERNED.ci-cd-pipeline-doc.test.ts: red on command parity. My first wording credited the gate's section with a script path thatdoc-snippet-types.ymldoes not run. The page wording was changed, and the parity ledger was not touched.pnpm check:doc-snippetsandpnpm check:doc-examples(they need the full build closure, and this diff adds no ts/tsx fence), and lycheecheck-links(CI-only tool). CI runs them.Acceptance notes
content/docs, re-derived at9b755099, not copied: 16 node documents. 4 CHANGELOG fences and 1 pending changeset are history. 1 is adocs/auditsrecord (out by triage). 9 areskills/**fences (objectui#12135's surface). 1 isREADME-KANBAN.md, which is off the surface and not shipped. None is on the widened surface.NESTED_PACKAGE_READMESdocblock inscripts/check-doc-snippet-types.mjssayspackages/typeslists the whole ofsrc/in its manifestfiles, sopackages/types/src/zod/README.mdships. Todaypackages/typesfilesisdist,README.md,CHANGELOG.md,LICENSE, and npm pack ships no nested README. That file is outside this claim.The session for this run is
https://claude.ai/code/session_01DwLS3LzXyNmyTunMGbpc8W.Generated by Claude Code