Filed unassigned by the domain:spec seat (session_01Rxnd8cyFnoU8V5y21PaTsy) — recording a rule collision measured today, not proposing its resolution. Skills-lane subject (governed-fence semantics); triage/skills seat grades.
The collision, measured on PR #11685 (2026-08-24)
Why this needs a ruling rather than a seat convention
The governed-merge fence (docs/adr/** + .claude/** + skills/** + AGENTS.md + CLAUDE.md, maintainer rulings 2026-08-08 / 08-11 / 08-18) exists so agent-authored instruction/skill CONTENT reaches main only through a human merge. A generator-owned index regenerated mechanically from packages/spec is inside the fence's path glob but arguably outside its intent — and the gate FORCES it into any spec PR whose diff moves an indexed headline, so under a strict reading every such spec PR loses merge-queue eligibility.
Options for whoever grades this (not recommended-ranked here — the fence is a maintainer ruling and narrowing it is not a seat's call):
- A — carve out generator-owned files (the
gen:skill-refs output set, machine-enumerable from the generator) from the governed fork; the generator + its gate are the review. - B — keep the strict reading: any spec PR carrying a regenerated
_index.md takes the human-merge path. Consistent, heavy: it converts a mechanical regen into a queue-ineligibility bit on ordinary spec PRs. - C — move the generated index out of
skills/** (generator emits to a non-governed path; skill packaging assembles it at publish time). Build-system change; ends the collision structurally.
Evidence trail: PR #11685 · job 97435569091 log (verbatim gate text) · #11027 comments 5394936412 / 5395784586 · precedent findings on the fence itself: #9319, #9404 (both closed).
Filed unassigned by the
domain:specseat (session_01Rxnd8cyFnoU8V5y21PaTsy) — recording a rule collision measured today, not proposing its resolution. Skills-lane subject (governed-fence semantics); triage/skills seat grades.The collision, measured on PR #11685 (2026-08-24)
skills/objectstack-ui/references/_index.mdis generated:pnpm --filter @objectstack/spec gen:skill-refs(packages/spec/scripts/build-skill-references.ts), enforced bycheck:skill-refsinside theType Check · source gatesCI job. The gate's own words: "These files are GENERATED — do not hand-edit them. Regenerate and commit."page.components[].responsive(ADR-0049 D2) and repair the four redirect texts (#11027) #11685 changedresponsive.zod.ts, so the generator's output for that file's headline changed; the regenerated line rode the PR (correctly — 产物随源走).skills/**edit and ordered it split out under the governed-merge fork ("one governed path hit ⇒ the whole PR is human-merge-only"). Result, measured: head7125cdc6ewent red oncheck:skill-refs(job 97435569091) — the split is not merely wrong, it is unworkable: landing the spec change without the regenerated file turns MAIN red on the same gate until a follow-up lands. Corrected same hour (regenerate + recommit; PM correction recorded on ADR-0049 enforce-or-remove:page.components[].responsiveis wired into no renderer — and four shipped author-facing texts redirect authors to it as the live alternative (cloud leg unmeasured) #11027, comment 5395784586).Why this needs a ruling rather than a seat convention
The governed-merge fence (
docs/adr/**+.claude/**+skills/**+AGENTS.md+CLAUDE.md, maintainer rulings 2026-08-08 / 08-11 / 08-18) exists so agent-authored instruction/skill CONTENT reaches main only through a human merge. A generator-owned index regenerated mechanically frompackages/specis inside the fence's path glob but arguably outside its intent — and the gate FORCES it into any spec PR whose diff moves an indexed headline, so under a strict reading every such spec PR loses merge-queue eligibility.Options for whoever grades this (not recommended-ranked here — the fence is a maintainer ruling and narrowing it is not a seat's call):
gen:skill-refsoutput set, machine-enumerable from the generator) from the governed fork; the generator + its gate are the review._index.mdtakes the human-merge path. Consistent, heavy: it converts a mechanical regen into a queue-ineligibility bit on ordinary spec PRs.skills/**(generator emits to a non-governed path; skill packaging assembles it at publish time). Build-system change; ends the collision structurally.Evidence trail: PR #11685 · job 97435569091 log (verbatim gate text) · #11027 comments 5394936412 / 5395784586 · precedent findings on the fence itself: #9319, #9404 (both closed).