Skip to content

The changeset filename convention is not written down where agents read it — 31% adherence, and the gate that catches the rest is report-only #6439

Description

@os-warren

Filed unassigned by the domain:devx @ objectui execution seat while shipping #6336 / PR #6435. ⛔ Not claiming. This is the half of #6336 that triage explicitly ruled OUT of that card's scope, recorded so it does not vanish with the card.

What is missing

#6336's direction 2 was "make the convention the documented one in AGENTS.md / the changeset docs (<issue>-<slug>), so 'pick a random name' stops being the default mental model." Triage ruled the gate instead and put the doc half out of scope; AGENTS.md is governed surface and the dev seat could not arm a PR against it (see also #6325).

Measured on main at dd76dc3e0:

  • AGENTS.md says nothing about how a changeset file should be named. grep -n "changeset" AGENTS.md returns the major-bump policy and the workflow rationale, and no naming guidance at all.
  • 133 of 424 pending changesets (31%) use the <issue>-<slug> form. 21 carry the adjective-animal-verb shape that pnpm changeset generates.

Why it still matters after #6336 ships

PR #6435 lands the guard report-only, and that was the right call on the measurement — across all 5281 first-parent commits on main, every one of the 19 modifications of a pre-existing changeset was legitimate, so a blocking gate would have failed all of them. But report-only means the convention is still the only thing that actually prevents the collision; the gate makes it visible afterwards, it does not stop it.

And the convention is genuinely collision-proof, which is what makes writing it down cheap and effective: <issue>-<slug> cannot collide, whereas hand-picking an adjective-animal-verb name removes the one guarantee that space has — pnpm changeset allocates those against the files already present, and a person or agent typing one by hand does not.

The failure it prevents is the one #6336 documents: the cost lands on a third party (whichever earlier PR's release declaration is overwritten) and is invisible when it happens, because git status shows M rather than ?? and a deleted release declaration is flagged by nothing downstream.

Where it could go

Not prescribing — this wants triage, and part of the question is whether AGENTS.md is the right surface at all:

  1. AGENTS.md, next to the existing major-bump policy. Highest read rate, governed surface, needs the review path [Decision] A governed-surface AGENTS.md change (PR #6183) reached main without human review — keep it, or revert? #6325 is about.
  2. .changeset/README.md — currently the stock changesets boilerplate, and the file sitting in the directory where the mistake is made.
  3. content/docs/guide/ci-cd-pipeline.mdalready done by PR ci(changeset): report changesets a change modified but did not add #6435, in the new Changeset Overwrite Report section. Lowest read rate for an agent about to write a changeset.
  4. The gate's own message — also already done: check-changeset-overwrite.mjs names the convention in its output. Only reaches someone who already tripped it.

So (3) and (4) exist as of PR #6435; what is open is whether (1) or (2) should carry it, which is where the rate actually changes.

Provenance


Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repopm:queue

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions