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

Activity

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions