Skip to content

docs(sdui): name the regenerator that writes the tracked manifest, per artefact - #18184

Merged
claude[bot] merged 1 commit into
mainfrom
claude/issue-17736-sdui-manifest-regenerator
Sep 14, 2026
Merged

docs(sdui): name the regenerator that writes the tracked manifest, per artefact#18184
claude[bot] merged 1 commit into
mainfrom
claude/issue-17736-sdui-manifest-regenerator

Conversation

@claude

@claude claude Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

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:manifest as the pin bump's mandatory second half. Measured on this branch's base:

command what it writes gated?
node scripts/gen-sdui-manifest-node.mjs sdui.manifest.json (repo root) + scripts/sdui-manifest.record.json tracked; scripts/check-sdui-manifest.mjs in the required lint job (lint.yml:806), and ADR-0082 D4's declaration-parity ratchet --strict against the same file on every PR (lint.yml:6291)
pnpm sdui:manifest = bash scripts/gen-sdui-manifest.sh packages/console/dist/sdui.manifest.json only (TARGET="${FRAMEWORK_ROOT}/packages/console/dist", scripts/gen-sdui-manifest.sh:508, written at :654) gitignored (packages/console/.gitignore:1: dist/); ratchets against that untracked copy

So an operator who followed the page ran the browser dump, left the record's objectuiSha trailing .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.sh returns 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, and pnpm sdui:manifest kept 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.sh prints it as a pointer.
  • scripts/bump-objectui.sh — header block and the print_sdui_next_step reminder an operator actually sees. The reminder is now a paste-ready node scripts/gen-sdui-manifest-node.mjs --objectui-version {the @object-ui version the new pin ships} and says in one line that pnpm sdui:manifest writes 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.yml runs 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.md half 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.mjs and scripts/check-sdui-manifest.mjs are not edited at all, and the two edited shell scripts change only comments and echo text (bash -n clean on both; nothing in the tree asserts on those strings — a git grep -l for print_sdui_next_step and one for decoupled from the console build each name only the script itself, and scripts/bump-objectui.selftest.sh greps for neither).

Verification

  • node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack derived 32 families from the real changeset (3 paths, three-dot vs merge base fffe3e5e7). All 32 run, exit codes captured to disk before any pipe: 32 exit 0. --ran reconciliation: 32 derived famil(ies) accounted for — 32 run, 0 NOT-MEASURED, 0 UNRUN (a derived zero; every line carries :: exit N). The first sweep had pnpm --filter @objectstack/lint run check:doc-formula-expressions at exit 3 (PREREQUISITE NOT MET — unbuilt @objectstack/formula / @objectstack/lint); the prerequisite was built and the whole sweep re-run.
  • pnpm lint (the repo-wide eslint . --no-inline-config): exit 0, whole repository, no narrowing claimed. For the record the targeted read agrees: eslint --format json over 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 .md or .sh entry; there is no type-aware linting in eslint.config.mjs (no parserOptions.project), so this diff cannot move any verdict on an untouched file.
  • Directly relevant gates outside the derived set, run anyway: node scripts/check-sdui-manifest.mjs --self-test && node scripts/check-sdui-manifest.mjs exit 0; node scripts/check-published-list-mirrors.mjs and its --self-test exit 0; pnpm check:dts-closure, pnpm check:engine-double-contract, pnpm check:i18n-stale-fill, pnpm check:pm-governed-prose exit 0.
  • pnpm check:published-readme-exports: exit 3 — NOT MEASURED, it needs a whole-repo pnpm 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.
  • Control-character scan beyond 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 \x01 file (exit 0, match printed).
  • Rendered print_sdui_next_step was 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's files[]: 70 publishable packages declare one, none contains an entry escaping its own package directory (firing control: the same predicate over a synthetic files: ["../../scripts/"] yields 1 hit), and the repo-root manifest is private: true with no files[] at all. npm pack --dry-run --json in packages/console ships no repo-root scripts/ or docs/ path (positive control: package.json is in the listing). So root docs/releases-maintenance.md, scripts/bump-objectui.sh and scripts/build-console.sh land 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.mjs and docs/adr/0082-*.md also mention pnpm 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

…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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

0 participants