Skip to content

[finding] The objectstack-formula reference index advertises data/date-macros.zod.ts, a surface the SKILL.md routes to objectstack-query — SKILL_MAP in build-skill-references.ts maps it to both #14562

Description

@os-litant

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 two SKILL_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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions