docs(sdui): name the regenerator that writes the tracked manifest, per artefact - #18184
Merged
Merged
Conversation
…r artefact The pin bump's second half was documented as `pnpm sdui:manifest` in three places. That command (`scripts/gen-sdui-manifest.sh`) writes only `packages/console/dist/sdui.manifest.json`, which is gitignored. The tracked pair the required lint job asserts against — repo-root `sdui.manifest.json` and `scripts/sdui-manifest.record.json` — is written only by `node scripts/gen-sdui-manifest-node.mjs`, so following the documented procedure left `check-sdui-manifest.mjs` red on the bump PR. Each site now names both commands and which artefact each one writes, and the stale "the ratchet has no automatic trigger / no workflow produces the manifest" rationale is corrected: since #12924 `lint.yml` runs the ADR-0082 D4 ratchet `--strict` against the checked-in manifest on every PR. The 2026-08-07 ruling that keeps the browser dump out of per-PR CI is unchanged; only the ratchet's input changed. No script behaviour is touched — prose, comments and operator reminders only. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ef78bLdybu3AffehKkhfk
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 #17736
Clause-②: no
Prose, comments and operator reminders only — no schema, no export surface, no behaviour change in any script.
What was wrong
Three sites presented
pnpm sdui:manifestas the pin bump's mandatory second half. Measured on this branch's base:node scripts/gen-sdui-manifest-node.mjssdui.manifest.json(repo root) +scripts/sdui-manifest.record.jsonscripts/check-sdui-manifest.mjsin the required lint job (lint.yml:806), and ADR-0082 D4's declaration-parity ratchet--strictagainst the same file on every PR (lint.yml:6291)pnpm sdui:manifest=bash scripts/gen-sdui-manifest.shpackages/console/dist/sdui.manifest.jsononly (TARGET="${FRAMEWORK_ROOT}/packages/console/dist",scripts/gen-sdui-manifest.sh:508, written at:654)packages/console/.gitignore:1: dist/); ratchets against that untracked copySo an operator who followed the page ran the browser dump, left the record's
objectuiShatrailing.objectui-sha, and the bump PR stayed red — class (a): following the documented procedure leaves a required gate red.grep -n 'sdui-manifest.record\|gen-sdui-manifest-node' scripts/gen-sdui-manifest.shreturns nothing (exit 1), which is the whole of the defect.What changed
Every site now names both commands and which artefact each one writes, so swapping one name for the other cannot re-introduce the error:
docs/releases-maintenance.md— the "After the pin moves" section is now "regenerate the committed manifest", with the node regenerator in the code block, the two gates that read the tracked pair named, andpnpm sdui:manifestkept and described as the separate browser dump. Step 4 of the numbered pin procedure (which pointed back at that section) is corrected the same way. The anchor phrase "After the pin moves" is preserved —scripts/bump-objectui.shprints it as a pointer.scripts/bump-objectui.sh— header block and theprint_sdui_next_stepreminder an operator actually sees. The reminder is now a paste-readynode scripts/gen-sdui-manifest-node.mjs --objectui-version {the @object-ui version the new pin ships}and says in one line thatpnpm sdui:manifestwrites neither tracked file.scripts/build-console.sh— same, as a two-entry table in the comment plus the trailing echo.Three claims that had rotted alongside it are corrected in the same paragraphs, because leaving them would have re-taught the same error: "the ratchet has no AUTOMATIC trigger at all", "no workflow produces the manifest and none should", and "the only producer drives a Playwright chromium". Since #12924 the manifest is checked in and
lint.ymlruns the ratchet per PR off it. The 2026-08-07 maintainer ruling that keeps the browser dump out of per-PR CI is untouched and restated — only the ratchet's input changed.This matches the wording accepted for the
AGENTS.mdhalf of the same confusion in #17733 (which this PR does not touch).⛔ No script behaviour is changed:
scripts/gen-sdui-manifest.sh,scripts/gen-sdui-manifest-node.mjsandscripts/check-sdui-manifest.mjsare not edited at all, and the two edited shell scripts change only comments andechotext (bash -nclean on both; nothing in the tree asserts on those strings — agit grep -lforprint_sdui_next_stepand one fordecoupled from the console buildeach name only the script itself, andscripts/bump-objectui.selftest.shgreps for neither).Verification
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstackderived 32 families from the real changeset (3 paths, three-dot vs merge basefffe3e5e7). All 32 run, exit codes captured to disk before any pipe: 32 exit 0.--ranreconciliation:32 derived famil(ies) accounted for — 32 run, 0 NOT-MEASURED, 0 UNRUN(a derived zero; every line carries:: exit N). The first sweep hadpnpm --filter @objectstack/lint run check:doc-formula-expressionsat exit 3 (PREREQUISITE NOT MET — unbuilt@objectstack/formula/@objectstack/lint); the prerequisite was built and the whole sweep re-run.pnpm lint(the repo-wideeslint . --no-inline-config): exit 0, whole repository, no narrowing claimed. For the record the targeted read agrees:eslint --format jsonover the three changed paths reports 3 files, 0 errors, and one warning each —File ignored because no matching configuration was supplied— because eslint's configured universe is**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}and holds no.mdor.shentry; there is no type-aware linting ineslint.config.mjs(noparserOptions.project), so this diff cannot move any verdict on an untouched file.node scripts/check-sdui-manifest.mjs --self-test && node scripts/check-sdui-manifest.mjsexit 0;node scripts/check-published-list-mirrors.mjsand its--self-testexit 0;pnpm check:dts-closure,pnpm check:engine-double-contract,pnpm check:i18n-stale-fill,pnpm check:pm-governed-proseexit 0.pnpm check:published-readme-exports: exit 3 — NOT MEASURED, it needs a whole-repopnpm build. Declared to CI. It reads published READMEs against built.d.ts; this diff edits no package README and no source file, so it has no input here.check:nul-bytes:grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]'over the three files returns nothing (exit 1), with a firing control on a synthetic\x01file (exit 0, match printed).print_sdui_next_stepwas executed and read back, so the line continuation in the printed command is paste-ready rather than a literal backslash-newline artefact.Changeset
skip-changeset, measured rather than asserted. The publish surface is each package'sfiles[]: 70 publishable packages declare one, none contains an entry escaping its own package directory (firing control: the same predicate over a syntheticfiles: ["../../scripts/"]yields 1 hit), and the repo-root manifest isprivate: truewith nofiles[]at all.npm pack --dry-run --jsoninpackages/consoleships no repo-rootscripts/ordocs/path (positive control:package.jsonis in the listing). So rootdocs/releases-maintenance.md,scripts/bump-objectui.shandscripts/build-console.shland in no published tarball and move nothing that is released.Acceptance notes
Out of scope, noted and not filed:
docs/releases-maintenance.md(the cut-rc walkthrough, "Runs the ADR-0082 D4 declaration-parity ratchet …") still justifies the release-cut run with "its live failure mode is unrun: this is the last place before publish that can catch a bump PR that skipped it". Since [finding] nothing wires an sdui.manifest.json, so validateJsxPages runs parse-only and validateTree — including both ported lockstep diagnostics — is dead code in the production gate #12924 the per-PR lint ratchet catches a skipped regeneration on the bump PR itself; what the cut-rc browser run still adds is a read of objectui's real browser registry against the node-generated tracked manifest. That is a rationale sentence that has drifted, not a procedure that leaves a gate red, so it is not class (a)/(b)/(c) and is not filed. Successor: the next PR that touches this page's release-cut section.scripts/objectui-changeset-digest.mjsanddocs/adr/0082-*.mdalso mentionpnpm sdui:manifest; both are outside this card's declared file surface (and ADR is a governed surface). Neither was read closely enough to claim they carry the same defect — stated as unmeasured, not as clear.🤖 Generated with Claude Code
https://claude.ai/code/session_017ef78bLdybu3AffehKkhfk
Generated by Claude Code