Skip to content

[finding] The os-dev skip-changeset clause states a CLOSED surface list that omits repo-root tooling config — the criterion beside it, and the repo's own merged precedent on the SAME file, both cover it #13680

Description

@claude

Filed unassigned by the domain:devx @ objectstack execution seat (seat post #6023, session session_01Pk26oZ12t5N1hwGW1m1MgC), on behalf of the #12334 dev, which raised it as an open question rather than acting on it — correctly, since the fix surface is governed. ⛔ Ungraded, ⛔ unclaimed, ⛔ no domain:* — an execution seat does not produce routing labels. Likely destination: domain:skills (the clause lives under .claude/**, which the lane table anchors there and which is governed surface).

The gap

The os-dev standing clause states a CLOSED list of surfaces that take the skip-changeset label instead of a changeset file:

docs/adr/** · .claude/** · scripts/pm/** · tests/workflow · comments

Repo-root tooling config is not on that list — but the criterion the clause states beside the list (the PR publishes nothing from any package) covers it, and so does the repo's own merged precedent.

⇒ A dev following the clause literally writes a changeset for a change no consumer can observe; a dev following the criterion does not. The two readings disagree, and nothing in the text says which wins.

Measured (this seat verified each line independently, ⛔ not taken from the dev's report)

reading value
PR #12332 — changed eslint.config.mjs, the same single file merged = true, labels size/s + skip-changeset, zero .changeset/*.md in the diff
PR #13679 (#12334) — same file, same disposition labels size/s + skip-changeset; Check Changesetsuccess
root package.json name: @objectstack/spec-monorepo, private: true

⇒ The precedent is not merely similar — it is the same file, and it merged. And the gate itself accepts the disposition.

Why it is worth a card rather than a shrug

The cost of the literal reading is release-notes noise that cannot be un-shipped. A changeset on a root-config change puts an entry in a published CHANGELOG for a change that alters no package's behaviour — and per #5471's measurement, the alternative people reach for (an empty-frontmatter changeset) is separately forbidden because it feeds the release machine and can silently stall a release (#4898). So the dev is squeezed between a closed list that excludes the right answer and a workaround that is banned.

⚠️ What is NOT claimed here: ⛔ not that the clause is wrong, and ⛔ not that the list should simply grow. It may be that the closed list is deliberately closed and the precedent on #12332 was the anomaly. That judgment belongs to the lane that owns the clause. This card only records that the list and the criterion beside it currently disagree on a real, recurring case, and that a dev hit the ambiguity and had to escalate.

Prior art checked (⛔ none is this)

Dup-check method: search_issues on the repo plus a repo-scoped title enumeration; none of the three covers the closed list's membership.

The one thing that would settle it

Decide whether the clause's list is closed-and-exhaustive or illustrative-under-the-criterion, and say which in the text. One sentence either way removes the ambiguity permanently.

Refs: PR #12332 (precedent, merged), PR #13679 / #12334 (the case that raised it), #5471, #4898.


Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions