Found while implementing #14316 (skills/objectstack-formula optimization flight, audit finding FRM-C-05). Filed unassigned and out of scope for that PR — the fix is a generator change in packages/spec, and #14316's ruling confines it to skills/objectstack-formula/SKILL.md.
What is measured
packages/spec/scripts/build-skill-references.ts has data/date-macros.zod.ts in twoSKILL_MAP entries:
- under
'objectstack-query' (alongside data/query.zod.ts, data/filter.zod.ts) - under
'objectstack-formula' (alongside shared/expression.zod.ts)
So the generated skills/objectstack-formula/references/_index.md carries the row:
- `node_modules/@objectstack/spec/src/data/date-macros.zod.ts` — Date Macro Tokens — the declarative placeholders the UI substitutes
while skills/objectstack-formula/SKILL.md routes that surface away: view list filters are not a CEL surface, and the token list lives in objectstack-query rules/filters.md. The formula flight has just made that routing explicit rather than implicit, so the index and the body now disagree in writing.
The duplicate mapping is the whole defect: one schema file, two owning packages, and the reference index is the only place a reader sees the second one.
Why it matters
references/_index.md is generator-owned and shipped. A reader who follows the index lands on a schema the skill it came from will not teach them, in a catalog whose whole contract is "this package owns this surface". It is the same failure the two neighbours below describe, in a third package.
Nearest neighbours (dedupe search run before filing; all still open)
These three plus this one are four instances of "SKILL_MAP is not reconciled against the bodies". Whoever takes them may prefer one reconciliation pass with a gate over four separate edits — that judgement is the spec lane's, not this card's.
Suggested shape (not a ruling)
Either drop data/date-macros.zod.ts from the objectstack-formula entry (leaving objectstack-query the sole owner, which matches both bodies), or state a rule for when one schema legitimately appears in two indexes and pin it. A gate reconciling SKILL_MAP entries against the owning SKILL.md would close the whole class.
Triage and priority deliberately left to the spec lane.
Refs: #14316 · #14292
Found while implementing #14316 (skills/objectstack-formula optimization flight, audit finding FRM-C-05). Filed unassigned and out of scope for that PR — the fix is a generator change in
packages/spec, and #14316's ruling confines it toskills/objectstack-formula/SKILL.md.What is measured
packages/spec/scripts/build-skill-references.tshasdata/date-macros.zod.tsin twoSKILL_MAPentries:'objectstack-query'(alongsidedata/query.zod.ts,data/filter.zod.ts)'objectstack-formula'(alongsideshared/expression.zod.ts)So the generated
skills/objectstack-formula/references/_index.mdcarries the row:while
skills/objectstack-formula/SKILL.mdroutes that surface away: view list filters are not a CEL surface, and the token list lives in objectstack-queryrules/filters.md. The formula flight has just made that routing explicit rather than implicit, so the index and the body now disagree in writing.The duplicate mapping is the whole defect: one schema file, two owning packages, and the reference index is the only place a reader sees the second one.
Why it matters
references/_index.mdis generator-owned and shipped. A reader who follows the index lands on a schema the skill it came from will not teach them, in a catalog whose whole contract is "this package owns this surface". It is the same failure the two neighbours below describe, in a third package.Nearest neighbours (dedupe search run before filing; all still open)
objectstack-aigenerated reference index advertises 6 schemas the SKILL.md never teaches and omits the one it names —SKILL_MAPinbuild-skill-references.tsis unreconciled with the body #14462 —objectstack-ai's index advertises 6 schemas the SKILL.md never teaches and omits the one it names;SKILL_MAPunreconciled with the body. Same defect class.objectstack-automationreference index routes to the ADR-0020-retiredstate-machine.zod.tsand omits both per-nodeconfigschemas —SKILL_MAPinbuild-skill-references.ts#14466 —objectstack-automation's index routes to the ADR-0020-retiredstate-machine.zod.tsand omits both per-nodeconfigschemas;SKILL_MAP. Same defect class.data/query.zod.ts— the whole QueryAST — "Sort Node", because its first JSDoc block isSortNode's #14441 — the index labelsdata/query.zod.ts"Sort Node" because its first JSDoc block isSortNode's. Adjacent (same generator, labelling rather than routing).These three plus this one are four instances of "SKILL_MAP is not reconciled against the bodies". Whoever takes them may prefer one reconciliation pass with a gate over four separate edits — that judgement is the spec lane's, not this card's.
Suggested shape (not a ruling)
Either drop
data/date-macros.zod.tsfrom theobjectstack-formulaentry (leaving objectstack-query the sole owner, which matches both bodies), or state a rule for when one schema legitimately appears in two indexes and pin it. A gate reconcilingSKILL_MAPentries against the owning SKILL.md would close the whole class.Triage and priority deliberately left to the spec lane.
Refs: #14316 · #14292