Skip to content

fix(scripts): a diff of sdui.manifest.json alone now derives pnpm check:sdui-reference - #27528

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-27367-sdui-reference-declares-manifest-read
Oct 29, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-27367-sdui-reference-declares-manifest-read

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by 田騏 · project thread
Fixes #27367

Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么:scripts/gen-sdui-reference.mjs 新增一行 ROOT_FILE_WATCH_HINTS = ['sdui.manifest.json/**'] 声明它读取仓根清单,并在其自测里校验该声明与 MANIFEST_PATH 一致;dispatch-gates 自测加两条用例钉住这一推导。
  • 为什么改:只改 sdui.manifest.json 的 PR 之前推导不出 pnpm check:sdui-reference,开发者照工具清单跑完仍会在 CI 变红;现在能推导出来。
  • 风险与回滚:只动仓根 scripts/,不发布任何包,不改匹配器;回滚即 revert 本 PR。
  • 先看:scripts/gen-sdui-reference.mjs(声明与自测里的声明校验)、scripts/pm/dispatch-gates.self-test.mjs(两条新用例)。
  • 两分钟验证:node scripts/pm/dispatch-gates.mjs --commands sdui.manifest.json,预期输出里出现 pnpm check:sdui-reference(main 上没有)。
  • 需要你做的:无,席位落地。

What changes

  • scripts/gen-sdui-reference.mjs: declares the repo-root manifest it reads as ROOT_FILE_WATCH_HINTS = ['sdui.manifest.json/**'], the same hint scripts/check-sdui-manifest.mjs declares for that file. The bare MANIFEST_PATH literal has no separator, and hintCovers refuses that shape as too generic, so only OUT_DIR was visible to the derivation. Per the triage ruling, the matcher is not widened. The fix is this declaration.
  • The same file's --self-test now checks the declaration, the way check-sdui-manifest.mjs checks its own (outside the cases table, so the battery roster and floor do not change). It fails when the declared paths are not exactly [MANIFEST_PATH], and when a repo-root entry is missing the /** suffix.
  • scripts/pm/dispatch-gates.self-test.mjs: two cases beside the existing repo-root-file declarations. They run against the live fleet (discoverFamilies() + placeFamily). (1) A diff of sdui.manifest.json alone places check:sdui-reference as matched. (2) examples/sdui.manifest.json does not, so the declaration covers only the one file it names.
  • ⛔ No change to scripts/pm/dispatch-gates.mjs or dispatch-gates.data.mjs. No changeset: root scripts/ belongs to no published package (the root manifest @objectstack/spec-monorepo is private: true), so this PR carries skip-changeset.
  • Hint name: ROOT_FILE_WATCH_HINTS, not ROOT_WATCH_HINTS. check-watch-hint-literal.mjs defines the name as the kind of root: repo-root files are ROOT_FILE_, mixed roots are ROOT_. This population is one repo-root file. The hint value is byte-identical to the one check-sdui-manifest.mjs declares, and check:watch-hint-literal admits it (14 ROOT_FILE_WATCH_HINTS declarations, previously 13).

Tests

Tree: objectstack-ai/objectstack at 3e920461 (base ded67bfb).

  • pnpm check:sdui-reference: exit 0. ✓ gen-sdui-reference self-test: 20 cases pass. and ✓ gen-sdui-reference --check: content/docs/ui/components/ matches sdui.manifest.json (106 components on 7 pages).
  • pnpm check:pm-dispatch-gates: exit 0. ✓ dispatch-gates self-test (fast tier): 1937 cases pass; 7 slow section(s) deferred. The two new cases ran in the fast tier:
    • ✓ a diff of sdui.manifest.json alone derives pnpm check:sdui-reference
    • ✓ and that declaration claims no same-named file inside a directory
  • node scripts/check-sdui-manifest.mjs --self-test: exit 0 (21 cases).
  • The new placement case fails on the base tree, measured with the same calls in a probe script. On ded67bfb the family's hints were ["content/docs/ui/components"] and placeFamily(..., ['sdui.manifest.json']).verdict was silent. On 3e920461 the hints are ["content/docs/ui/components","sdui.manifest.json/**"] and the verdict is matched. ui/apps/console/sdui.manifest.json stays silent.

Acceptance notes

  • No other gate was surveyed for the same miss (a root-level file read with no hint). Per the triage, finding many such gates would be a card for a lint over gate scripts, not a matcher change. Nothing here measured how many there are.

Verification

Before / after: dispatch-gates --commands sdui.manifest.json

Before, on ded67bfb (11 commands, no check:sdui-reference):

node scripts/check-closing-keyword-parity.mjs
node scripts/check-closing-keyword-parity.mjs --self-test
node scripts/check-comment-mask-corpus.mjs
node scripts/check-sdui-manifest.mjs
node scripts/check-sdui-manifest.mjs --self-test
node scripts/ci/plan-test-core-shards.mjs --self-test
pnpm check:driver-memory-census
pnpm check:gitlink-declared
pnpm check:nul-bytes
pnpm check:refd-timer-probe
pnpm check:watch-hint-literal

After, on 3e920461 (12 commands): the same 11 rows plus pnpm check:sdui-reference. diff before after prints exactly > pnpm check:sdui-reference. Footer moves from 11 command(s) — 5 pnpm, 6 direct node (3 matched by path …) to 12 command(s) — 6 pnpm, 6 direct node (4 matched by path …).

Local gates derived for this diff (31), with exit codes

node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack at 3e920461 derived 31 commands. Each one ran with exit 0:

check-closing-keyword-parity (+ --self-test), check-comment-mask-corpus, check-declaration-mirrors (+ --self-test), check-self-test-wired (+ --self-test), check-self-test-workflow-commands (+ --self-test), check-whole-set-label-write (+ --self-test), ci/plan-test-core-shards --self-test, pm/bare-root-worklist --self-test, and pnpm check: agent-test-spelling, bash32-floor, ci-filter-parity, cli-command-ids, cross-package-test-inputs, driver-memory-census, entry-guard, gitlink-declared, nul-bytes, parse-guard, pm-dispatch-gates, pnpm-filter-targets, pnpm-flag-spellings, ratchet-remedy-authority, refd-timer-probe, scripts-symbol-anchors, sdui-reference, watch-hint-literal.

Reconciliation, --ran over a record carrying an exit code on every row: ✓ dispatch-gates --ran: 31 derived famil(ies) accounted for — 31 run, 0 NOT-MEASURED (a DERIVED zero — all 31 recorded an exit code and none of them is 3).

CI-only steps that --commands does not print (Plan Test Core shards and the type-check lanes) are left to this PR's check-runs.

🤖 Generated with Claude Code

https://claude.ai/code/session_017ihL2dPRZXfgE1A2Vct3FU

…patch-gates

The generator reads the repo-root sdui.manifest.json through a bare
single-segment literal, which the derivation refuses as too generic, so a
diff that changed only the manifest never derived pnpm check:sdui-reference.
Declare it with the repo-root-file hint idiom (sdui.manifest.json/**), hold
the declaration equal to MANIFEST_PATH in the generator's self-test, and pin
the placement against the live fleet in the dispatch-gates self-test.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ihL2dPRZXfgE1A2Vct3FU
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 29, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#1 · marchtian · session_017ihL2dPRZXfgE1A2Vct3FU

席位核对 — ACCEPT · #27367 · head 3e920461ae022b83364fdbb78ac47e47eeb5d88f · 2026-10-29T11:01Z

  • 速读六行:照 diff 核过,无需改正;「需要你做的:无,席位落地」成立(非受管面,Tier 无)。
  • 席位意见:the instance fix the triage ruling asked for (6487523459 ask 1), with no matcher change (ask 2 honoured: scripts/pm/dispatch-gates.mjs and dispatch-gates.data.mjs untouched).

席位核对

  1. 形态 — 2 files, +44/−0: scripts/gen-sdui-reference.mjs (declaration + its self-check), scripts/pm/dispatch-gates.self-test.mjs (two cases). Inside the claimed surface (6494372124). Off the governed register; reviewFace on the two paths answers the declaration face only (record-recognisers.mjs --template --paths), so the record below is at TIER_DEFAULT.
  2. 前提实测 — the seat's own reads in a detached worktree at this head: node scripts/pm/dispatch-gates.mjs --commands sdui.manifest.json now prints pnpm check:sdui-reference (absent on ded67bfb, seat reading in the claim); node scripts/gen-sdui-reference.mjs --self-test → 20 cases pass; ablation: the hint changed to sdui.manifest.jsonx/** makes that self-test print 2 ✗ lines (the declaration check bites), restored after.
  3. 门禁 check-runs — at the time of this record: 11 success, 20 skipped, 12 in progress; the landing waits for every check green or expected-skip.
  4. 接受的偏差 — the constant is named ROOT_FILE_WATCH_HINTS, not ROOT_WATCH_HINTS as check-sdui-manifest.mjs spells it: check-watch-hint-literal.mjs names hints by root kind (a single repo-root file ⇒ ROOT_FILE_) and admits it; the hint VALUE is byte-identical to check-sdui-manifest.mjs's. Accepted. The dev's report comment opens with the seat signature and puts os-dev-report on line 2 (the post-stamped signature rule); recorded, no action.
  5. 范围外去向 — one note, ⛔ not filed: no survey of other gate scripts reading a root-level file without a hint (triage 6487523459: a survey with many hits would be a lint card; with none measured, nothing to file). Skills-docs: n/a (Metadata-protocol: none).
  6. 落地条款 — not governed, no changeset (root scripts/ is private; skip-changeset); the seat lands it through the relay (pr_ready + automerge_enable) once every check is green, then closes dispatch-gates: a diff that changes only sdui.manifest.json does not derive pnpm check:sdui-reference, though the gate reads that file and CI reds without it #27367 if Fixes does not fire on the queue merge.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#1 · marchtian · session_017ihL2dPRZXfgE1A2Vct3FU

Contract review

Served-tier: TIER_DEFAULT
Head-sha: 3e920461ae022b83364fdbb78ac47e47eeb5d88f
Local-runs: probe — one detached worktree at this head: dispatch-gates --commands sdui.manifest.json, the generator's --self-test, and a one-line ablation of the new hint (restored)
Scope: scripts/gen-sdui-reference.mjs, scripts/pm/dispatch-gates.self-test.mjs + scripts/check-sdui-manifest.mjs, scripts/check-watch-hint-literal.mjs

① Derived judgments

No published accept set or public surface moves: both files are repo-root tooling of a private: true workspace root. The derivation change is the one ruled: sdui.manifest.json alone now places check:sdui-reference as matched (read at this head), and examples/sdui.manifest.json does not (pinned), so the declaration claims exactly one file. No matcher widening.

② Semver level

No package is released by this diff; no changeset owed (skip-changeset), consistent with Clause-②: no and Metadata-protocol: none on the PR body.

③ Boundary flags

The dev raised no open_questions. Two deviations, both answered in the ACCEPT above (the ROOT_FILE_ name per check-watch-hint-literal.mjs's kind table; the report's signature-first line). PR author is objectstack-fleet[bot] (relay).

Implemented-by: claude/issue-27367-sdui-reference-declares-manifest-read
Reviewed-by: session_017ihL2dPRZXfgE1A2Vct3FU

VERDICT: PASS

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 29, 2026 11:12
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 29, 2026 11:12
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 29, 2026
Merged via the queue into main with commit 4d80569 Oct 29, 2026
47 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-27367-sdui-reference-declares-manifest-read branch October 29, 2026 11:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

1 participant