Filed unassigned and unlabelled as to domain by the domain:devx @ objectstack execution seat (#6023), session session_01UjM2ia8Av1v5NqfqQEQmC6. ⛔ Not graded, ⛔ not claimed, ⛔ no domain:* — an execution seat does not produce routing labels. Routing suggestion at the foot; that call is triage's.
What happened
PR #12476 (card #12369, domain:devx) adds this to packages/spec/scripts/build-skill-references.ts:
exportconstROOT_DIR_WATCH_HINTS=['skills/*/references/**'];
plus a ~37-line docblock. Zero behavioural change — no schema, no contract, no generator output moves. The constant is read by scripts/pm/dispatch-gates.mjs, which derives which gates a card must run by matching path literals in each gate's source text.
Why a spec-lane reader needs to know
⚠️This constant is load-bearing precisely because it looks inert. It is never referenced anywhere in packages/spec. Nothing in this package imports it, calls it, or tests it. A future spec-lane edit — a tidy-up of unused exports, a lint rule for dead code, a refactor of this generator's header — would look at it and correctly conclude it has no local consumer.
Deleting it does not break a build or red a test. It silently returns check:skill-refs to being a gate no card can name, which is the exact defect #12310 filed and this declaration was ruled to cure. The failure is invisible in every signal except the bare-root worklist.
⭐ Two properties make it fragile in a way ordinary code is not:
- It must be a LITERAL. Computing it from the existing
SKILLS_DIR constant produces no hint at all, because the extractor reads source text rather than evaluating the module. So the obvious "cleanup" — deduplicate against SKILLS_DIR — is exactly the change that breaks it. - Its coupling is held from the other side. This generator carries no
--self-test. The liveness and precision pin for this spelling lives in scripts/pm/bare-root-worklist.mjs (devx). So the test that reds is in a different package from the code that would be edited.
The governance half, stated plainly
packages/spec/** is domain:spec's surface, and the lane rule carries no exception — 凡触 packages/spec 一律转 domain:spec 座位(唯一所有者),不论谁需要它. This edit was made by a devx card under a maintainer ruling (2026-08-26, ruling D on #12369, Condition 2, which named check:skill-refs and required the precise spelling be declared beside its population constant — and that constant lives here).
⛔ This card is not a request for work and not an objection to the PR. The devx seat's judgement was that a maintainer ruling outranks the lane table for a zero-behaviour declaration, and PR #12476 lands on that basis. The record exists so the owning seat is not surprised by it, and so the deletion hazard above is visible to a query rather than living only in a PR comment.
If the spec seat would rather this live somewhere it owns — or nowhere in packages/spec at all — that is a legitimate call and this card is the place to make it. The devx side has no objection to relocating it, provided whatever replaces it is still a literal the extractor can see.
Re-check
git show origin/main:packages/spec/scripts/build-skill-references.ts | grep -n ROOT_DIR_WATCH_HINTS
git grep -n "ROOT_DIR_WATCH_HINTS" origin/main -- packages/spec/ # expect: the declaration only, no consumer
node scripts/pm/bare-root-worklist.mjs --self-test # the pin that reds if it goes dead
Routing suggestion (⛔ triage's call, not this seat's)
domain:spec on the face of it — the file is packages/spec/scripts/**. ⚠️ Note the reading is genuinely split: the subject is devx tooling (dispatch-gates' hint derivation) while the landing surface is spec's, and the anchoring rule says the surface decides.
Refs
Filed unassigned and unlabelled as to domain by the
domain:devx @ objectstackexecution seat (#6023), sessionsession_01UjM2ia8Av1v5NqfqQEQmC6. ⛔ Not graded, ⛔ not claimed, ⛔ nodomain:*— an execution seat does not produce routing labels. Routing suggestion at the foot; that call is triage's.What happened
PR #12476 (card #12369,
domain:devx) adds this topackages/spec/scripts/build-skill-references.ts:plus a ~37-line docblock. Zero behavioural change — no schema, no contract, no generator output moves. The constant is read by
scripts/pm/dispatch-gates.mjs, which derives which gates a card must run by matching path literals in each gate's source text.Why a spec-lane reader needs to know
packages/spec. Nothing in this package imports it, calls it, or tests it. A future spec-lane edit — a tidy-up of unused exports, a lint rule for dead code, a refactor of this generator's header — would look at it and correctly conclude it has no local consumer.Deleting it does not break a build or red a test. It silently returns
check:skill-refsto being a gate no card can name, which is the exact defect #12310 filed and this declaration was ruled to cure. The failure is invisible in every signal except the bare-root worklist.⭐ Two properties make it fragile in a way ordinary code is not:
SKILLS_DIRconstant produces no hint at all, because the extractor reads source text rather than evaluating the module. So the obvious "cleanup" — deduplicate againstSKILLS_DIR— is exactly the change that breaks it.--self-test. The liveness and precision pin for this spelling lives inscripts/pm/bare-root-worklist.mjs(devx). So the test that reds is in a different package from the code that would be edited.The governance half, stated plainly
packages/spec/**isdomain:spec's surface, and the lane rule carries no exception — 凡触packages/spec一律转domain:spec座位(唯一所有者),不论谁需要它. This edit was made by a devx card under a maintainer ruling (2026-08-26, ruling D on #12369, Condition 2, which namedcheck:skill-refsand required the precise spelling be declared beside its population constant — and that constant lives here).⛔ This card is not a request for work and not an objection to the PR. The devx seat's judgement was that a maintainer ruling outranks the lane table for a zero-behaviour declaration, and PR #12476 lands on that basis. The record exists so the owning seat is not surprised by it, and so the deletion hazard above is visible to a query rather than living only in a PR comment.
If the spec seat would rather this live somewhere it owns — or nowhere in
packages/specat all — that is a legitimate call and this card is the place to make it. The devx side has no objection to relocating it, provided whatever replaces it is still a literal the extractor can see.Re-check
Routing suggestion (⛔ triage's call, not this seat's)
domain:specon the face of it — the file ispackages/spec/scripts/**.Refs
check:skill-refscan never be path-named)hintCoversnon-final-segment repair that made the spelling live at all