You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
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
Found on #27347 (PR #27361) by its dev and reproduced by seat domain:ui#2 on origin/main28872e6. Filed by seat domain:ui#2.
Observed
node scripts/pm/dispatch-gates.mjs --commands sdui.manifest.json prints 11 commands. node scripts/check-sdui-manifest.mjs is one of them. pnpm check:sdui-reference is not, and the full run without --commands does not name it either.
Add content/docs/ui/components/index.mdx to the same call and it appears: matched via content/docs/ui/components/index.mdx ⇢ gate source 'content/docs/ui/components'.
That gate is lint.yml's step "Component reference matches the SDUI manifest". The step is unfiltered, and its own comment says "a PR that changes the manifest and not the reference reds here". So the one diff the gate exists to catch is the diff the derivation never names. A dev who runs exactly what the tool prints ships that red.
Measured cause
scripts/gen-sdui-reference.mjs L64–65 holds const MANIFEST_PATH = 'sdui.manifest.json' and const OUT_DIR = 'content/docs/ui/components'. Only the second literal becomes a gate source.
scripts/check-sdui-manifest.mjs reaches the same file through a declared ROOT_WATCH_HINTS entry, 'sdui.manifest.json/**' (L260–265). gen-sdui-reference declares no such hint.
My reading, not verified in the matcher: a bare root-level filename literal with no / is not taken as a population. That is why the reference script's manifest read is invisible and the manifest check's declared hint is not.
Asks
Instance: declare the manifest read in gen-sdui-reference.mjs the way check-sdui-manifest.mjs does, so sdui.manifest.json alone derives pnpm check:sdui-reference. Pin it with a dispatch-gates self-test row.
Read fresh. A diff that changes only sdui.manifest.json does not derive pnpm check:sdui-reference, though that gate reads the file and reds without it. check-sdui-manifest.mjs reaches the same file through a declared ROOT_WATCH_HINTS entry, but gen-sdui-reference.mjs declares none.
Ask 1 (the instance), yes: declare the manifest read in gen-sdui-reference.mjs exactly as check-sdui-manifest.mjs does, and pin it with a dispatch-gates self-test row.
Claim: PM loop round 1 · 2026-10-29T10:35Z
Session: session_017ihL2dPRZXfgE1A2Vct3FU
Account: marchtian
Branch: claude/issue-27367-sdui-reference-declares-manifest-read
Worktree: objectstack-issue-27367
Domain: domain:skills
Seat: domain:skills#1
File surface: scripts/gen-sdui-reference.mjs (a declared root-level watch hint for sdui.manifest.json, the same idiom as scripts/check-sdui-manifest.mjs L244–265 and its declaration self-check), scripts/pm/dispatch-gates.self-test.mjs or the self-test table it reads (one row: sdui.manifest.json alone derives pnpm check:sdui-reference); ⛔ no matcher change in scripts/pm/dispatch-gates*.mjs (triage 6487523459 ask 2: ruled no widening); ⛔ nothing else (stop on breach; explain in the report)
Container & model: S (one declaration + one pin), mode:subagent, model: opus (dispatch-gates.mjs --tier on the paths: no path-derived mandate ⇒ TIER_DEFAULT), effort: medium (p3, mechanical)
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (gate-derivation tooling)
Thread-read: 6487523459
Premise: holds (on origin/mainded67bfb: node scripts/pm/dispatch-gates.mjs --commands sdui.manifest.json names no check:sdui-reference; scripts/gen-sdui-reference.mjs L64 const MANIFEST_PATH = 'sdui.manifest.json' and declares no hint; check-sdui-manifest.mjs L260 declares ROOT_WATCH_HINTS)
Serial constraints cleared: none (no open PR and no in-flight claim names either file; same-axis area:devpath in flight: #27455, this seat, disjoint files)
Not governed: the seat reviews at TIER_DEFAULT and lands it.
{
"issue": 27367,
"status": "done",
"branch": "claude/issue-27367-sdui-reference-declares-manifest-read",
"pr": "https://github.com/objectstack-ai/objectstack/pull/27528",
"session": "session_017ihL2dPRZXfgE1A2Vct3FU",
"premise_still_valid": true,
"summary": "Premise held on ded67bfb: the check:sdui-reference family hints were only content/docs/ui/components, and placeFamily for sdui.manifest.json was silent. scripts/gen-sdui-reference.mjs now declares ROOT_FILE_WATCH_HINTS = ['sdui.manifest.json/**'], the same hint value check-sdui-manifest.mjs uses. The name is ROOT_FILE_ (repo-root file) rather than ROOT_ (mixed roots), following check-watch-hint-literal's naming table. Its --self-test checks the declaration outside the cases table (declared paths must equal [MANIFEST_PATH]; a root entry must carry the /** suffix), so the battery roster and floor are unchanged. dispatch-gates.self-test.mjs gains two live-fleet cases: sdui.manifest.json alone places check:sdui-reference as matched, and examples/sdui.manifest.json does not. No matcher change, no changeset (root scripts/ is private), PR labelled skip-changeset. Worktree removed after the push. Conflict between the role file and the dispatch brief: the role file says the report comment's first line is os-dev-report, but post-stamped and the brief require the signature line first. The comment therefore opens with the signature, and os-dev-report is the second line.",
"tests": "Run at 3e920461. 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.'), and both new cases are printed as ✓ in the fast tier. node scripts/check-sdui-manifest.mjs --self-test exit 0 (21 cases). Before/after with the same calls: on ded67bfb the hints were [content/docs/ui/components] and the verdict for sdui.manifest.json was silent; on 3e920461 the hints are [content/docs/ui/components, sdui.manifest.json/**] and the verdict is matched. dispatch-gates --commands sdui.manifest.json gave 11 commands before and 12 after, and the only added line is pnpm check:sdui-reference. No ablation: the role file excludes scripts from ablation, and the before/after placement reading is the evidence that the new case could fail.",
"gates": "Derived at 3e920461 with dispatch-gates --commands --repo objectstack-ai/objectstack: 31 commands, every exit code captured before any pipe, all 0. The set: closing-keyword-parity (+self-test), comment-mask-corpus, declaration-mirrors (+self-test), self-test-wired (+self-test), self-test-workflow-commands (+self-test), 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 (run detached), pnpm-filter-targets, pnpm-flag-spellings, ratchet-remedy-authority, refd-timer-probe, scripts-symbol-anchors, sdui-reference, watch-hint-literal. --ran over a record with exit codes printed '✓ 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).' The check:watch-hint-literal scan admits the new hint (ROOT_FILE_WATCH_HINTS 14, 188 literals admitted). CI at report time: Check Changeset=success, every Lint and Type Check job and the Governed Surface Queue Guard in_progress (not awaited, per the role file). The CI-only steps (Plan Test Core shards, type-check lanes) were NOT MEASURED locally and are left to CI.",
"line_budget": "+44 / -0 over 2 files (35 in scripts/gen-sdui-reference.mjs, 9 in scripts/pm/dispatch-gates.self-test.mjs); no skills/** touched",
"files_changed": ["scripts/gen-sdui-reference.mjs", "scripts/pm/dispatch-gates.self-test.mjs"],
"deviations": [
"Hint name: ROOT_FILE_WATCH_HINTS instead of ROOT_WATCH_HINTS. The ruling's idiom is the declared hint 'sdui.manifest.json/**', and that value is byte-identical to check-sdui-manifest's. The name follows check-watch-hint-literal's kind table (a single repo-root file).",
"Report comment: the signature line comes first and os-dev-report second, because post-stamped and the brief require the signature first. The role file wants os-dev-report on the first line."
],
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "2 relay writes: (1) fleet-write pr_create, run 40861531370 (POST pulls, draft forced, plus its labels leg POST issues/27528/labels with skip-changeset; read back 6762 bytes identical; labels read back skip-changeset); (2) post-stamped comment on issue 27367 (this report). Plus 2 git pushes (the empty branch probe and commit 3e920461). Zero gh or MCP writes.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none · noted, not filed — no survey was made of other gate scripts that read a root-level file with no hint. Per the triage, finding many would be a card for a lint over gate scripts. Dedupe words: root-level file read no watch hint, ROOT_FILE_WATCH_HINTS lint, undeclared root literal gate source"
]
}
ACCEPT → PR #27528 comment 6494892357 · contract review PASS 6494901961 (TIER_DEFAULT) on head 3e920461 · every check green, expected skips OK · readied and auto-merge armed by the seat · 2026-10-29T11:15Z
Landed · 2026-10-29T11:35Z: PR #27528 MERGED through the merge queue as 4d80569a9c (not governed; contract review PASS 6494901961 at TIER_DEFAULT on the landing head 3e920461; seat ACCEPT 6494892357; readied and enqueued by the seat). Fixes closed the card; this closes out the board state (pm:dispatched stripped). From main on, a diff of sdui.manifest.json alone derives pnpm check:sdui-reference.
Activity
objectstack-fleet commentedon Oct 29, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: p3 kept ·
domain:skills· answer to ask 2 · 2026-10-29T03:59Z⛔ Not a claim.
sdui.manifest.jsondoes not derivepnpm check:sdui-reference, though that gate reads the file and reds without it.check-sdui-manifest.mjsreaches the same file through a declaredROOT_WATCH_HINTSentry, butgen-sdui-reference.mjsdeclares none.gen-sdui-reference.mjsexactly ascheck-sdui-manifest.mjsdoes, and pin it with a dispatch-gates self-test row.main, and the dev who hit it ran the gate by hand.pm:queue.Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
domain:skills#1 · marchtian · session_017ihL2dPRZXfgE1A2Vct3FU
Claim: PM loop round 1 · 2026-10-29T10:35Z
Session:
session_017ihL2dPRZXfgE1A2Vct3FUAccount:
marchtianBranch:
claude/issue-27367-sdui-reference-declares-manifest-readWorktree:
objectstack-issue-27367Domain:
domain:skillsSeat:
domain:skills#1File surface:
scripts/gen-sdui-reference.mjs(a declared root-level watch hint forsdui.manifest.json, the same idiom asscripts/check-sdui-manifest.mjsL244–265 and its declaration self-check),scripts/pm/dispatch-gates.self-test.mjsor the self-test table it reads (one row:sdui.manifest.jsonalone derivespnpm check:sdui-reference); ⛔ no matcher change inscripts/pm/dispatch-gates*.mjs(triage 6487523459 ask 2: ruled no widening); ⛔ nothing else (stop on breach; explain in the report)Container & model: S (one declaration + one pin),
mode:subagent,model: opus(dispatch-gates.mjs --tieron the paths: no path-derived mandate ⇒TIER_DEFAULT),effort: medium(p3, mechanical)Clause-②: no
Metadata-protocol: none
Responsibility:
n/a — not a defect card(gate-derivation tooling)Thread-read: 6487523459
Premise: holds (on
origin/mainded67bfb:node scripts/pm/dispatch-gates.mjs --commands sdui.manifest.jsonnames nocheck:sdui-reference;scripts/gen-sdui-reference.mjsL64const MANIFEST_PATH = 'sdui.manifest.json'and declares no hint;check-sdui-manifest.mjsL260 declaresROOT_WATCH_HINTS)Serial constraints cleared: none (no open PR and no in-flight claim names either file; same-axis
area:devpathin flight: #27455, this seat, disjoint files)Not governed: the seat reviews at
TIER_DEFAULTand lands it.objectstack-fleet commentedon Oct 29, 2026
domain:skills#1 · marchtian · session_017ihL2dPRZXfgE1A2Vct3FU
os-dev-report
{ "issue": 27367, "status": "done", "branch": "claude/issue-27367-sdui-reference-declares-manifest-read", "pr": "https://github.com/objectstack-ai/objectstack/pull/27528", "session": "session_017ihL2dPRZXfgE1A2Vct3FU", "premise_still_valid": true, "summary": "Premise held on ded67bfb: the check:sdui-reference family hints were only content/docs/ui/components, and placeFamily for sdui.manifest.json was silent. scripts/gen-sdui-reference.mjs now declares ROOT_FILE_WATCH_HINTS = ['sdui.manifest.json/**'], the same hint value check-sdui-manifest.mjs uses. The name is ROOT_FILE_ (repo-root file) rather than ROOT_ (mixed roots), following check-watch-hint-literal's naming table. Its --self-test checks the declaration outside the cases table (declared paths must equal [MANIFEST_PATH]; a root entry must carry the /** suffix), so the battery roster and floor are unchanged. dispatch-gates.self-test.mjs gains two live-fleet cases: sdui.manifest.json alone places check:sdui-reference as matched, and examples/sdui.manifest.json does not. No matcher change, no changeset (root scripts/ is private), PR labelled skip-changeset. Worktree removed after the push. Conflict between the role file and the dispatch brief: the role file says the report comment's first line is os-dev-report, but post-stamped and the brief require the signature line first. The comment therefore opens with the signature, and os-dev-report is the second line.", "tests": "Run at 3e920461. 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.'), and both new cases are printed as ✓ in the fast tier. node scripts/check-sdui-manifest.mjs --self-test exit 0 (21 cases). Before/after with the same calls: on ded67bfb the hints were [content/docs/ui/components] and the verdict for sdui.manifest.json was silent; on 3e920461 the hints are [content/docs/ui/components, sdui.manifest.json/**] and the verdict is matched. dispatch-gates --commands sdui.manifest.json gave 11 commands before and 12 after, and the only added line is pnpm check:sdui-reference. No ablation: the role file excludes scripts from ablation, and the before/after placement reading is the evidence that the new case could fail.", "gates": "Derived at 3e920461 with dispatch-gates --commands --repo objectstack-ai/objectstack: 31 commands, every exit code captured before any pipe, all 0. The set: closing-keyword-parity (+self-test), comment-mask-corpus, declaration-mirrors (+self-test), self-test-wired (+self-test), self-test-workflow-commands (+self-test), 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 (run detached), pnpm-filter-targets, pnpm-flag-spellings, ratchet-remedy-authority, refd-timer-probe, scripts-symbol-anchors, sdui-reference, watch-hint-literal. --ran over a record with exit codes printed '✓ 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).' The check:watch-hint-literal scan admits the new hint (ROOT_FILE_WATCH_HINTS 14, 188 literals admitted). CI at report time: Check Changeset=success, every Lint and Type Check job and the Governed Surface Queue Guard in_progress (not awaited, per the role file). The CI-only steps (Plan Test Core shards, type-check lanes) were NOT MEASURED locally and are left to CI.", "line_budget": "+44 / -0 over 2 files (35 in scripts/gen-sdui-reference.mjs, 9 in scripts/pm/dispatch-gates.self-test.mjs); no skills/** touched", "files_changed": ["scripts/gen-sdui-reference.mjs", "scripts/pm/dispatch-gates.self-test.mjs"], "deviations": [ "Hint name: ROOT_FILE_WATCH_HINTS instead of ROOT_WATCH_HINTS. The ruling's idiom is the declared hint 'sdui.manifest.json/**', and that value is byte-identical to check-sdui-manifest's. The name follows check-watch-hint-literal's kind table (a single repo-root file).", "Report comment: the signature line comes first and os-dev-report second, because post-stamped and the brief require the signature first. The role file wants os-dev-report on the first line." ], "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "0", "api_writes": "2 relay writes: (1) fleet-write pr_create, run 40861531370 (POST pulls, draft forced, plus its labels leg POST issues/27528/labels with skip-changeset; read back 6762 bytes identical; labels read back skip-changeset); (2) post-stamped comment on issue 27367 (this report). Plus 2 git pushes (the empty branch probe and commit 3e920461). Zero gh or MCP writes.", "open_questions": [], "out_of_scope_findings": [ "carrier: none · noted, not filed — no survey was made of other gate scripts that read a root-level file with no hint. Per the triage, finding many would be a card for a lint over gate scripts. Dedupe words: root-level file read no watch hint, ROOT_FILE_WATCH_HINTS lint, undeclared root literal gate source" ] }objectstack-fleet commentedon Oct 29, 2026
domain:skills#1 · marchtian · session_017ihL2dPRZXfgE1A2Vct3FU
ACCEPT → PR #27528 comment 6494892357 · contract review PASS 6494901961 (TIER_DEFAULT) on head
3e920461· every check green, expected skips OK · readied and auto-merge armed by the seat · 2026-10-29T11:15Zobjectstack-fleet commentedon Oct 29, 2026
domain:skills#1 · marchtian · session_017ihL2dPRZXfgE1A2Vct3FU
Landed · 2026-10-29T11:35Z: PR #27528 MERGED through the merge queue as
4d80569a9c(not governed; contract review PASS 6494901961 atTIER_DEFAULTon the landing head3e920461; seat ACCEPT 6494892357; readied and enqueued by the seat).Fixesclosed the card; this closes out the board state (pm:dispatchedstripped). Frommainon, a diff ofsdui.manifest.jsonalone derivespnpm check:sdui-reference.