Uh oh!
There was an error while loading. Please reload this page.
docs(agents): a released-package bug fix takes a patch changeset, never none - #14789
Merged
Merged
Conversation
…er none AGENTS.md told authors "Pure bug fixes do not require a changeset", which contradicts every enforced text: Check Changeset (pr-automation.yml) reds a PR that adds zero changesets and carries no skip-changeset label, and that label is for a diff publishing nothing from any released package. A bug fix in a released package therefore had no green path if it followed the sentence. The sentence predates enforcement. It landed 2026-05-30 (43625fb) when the step only emitted ::warning:: and could not fail; the check became blocking on 2026-06-11 (a1251e4), and started counting changesets added BY THE PR on 2026-07-21 (8ff9210) -- the form that actually reds a zero-changeset bug fix. Paid same-file, AGENTS.md being at its line ceiling: the ADR-0087 rationale paragraph is re-derived from check-adr-0087-registration.mjs's own failure output, so it collapses to a one-line citation in the file's established idiom. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LraLgQVGq8egUwfYZpbYt1
This was referenced Sep 3, 2026
os-zhuang
approved these changes
Sep 3, 2026
os-zhuang
marked this pull request as ready for review
September 3, 2026 02:02
os-zhuang
enabled auto-merge
September 3, 2026 02:02
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#14647
AGENTS.md:1117told authors 「Pure bug fixes do not require a changeset.」 Every enforced text disagrees, so a bug fix in a released package that followed the sentence literally had no green path throughCheck Changeset.Ruled scope (triage comment 5514271473, adopted verbatim)
One sentence, saying two things:
patchchangeset;skip-changesetis never the answer for a released-package bug fix — that label is for a diff that publishes nothing from any released package.Nothing was widened or reinterpreted beyond that.
Before / after, verbatim
Before —
AGENTS.md:1116-1117:After —
AGENTS.md:1116-1119:The instruction that survived unchanged is the middle clause — run
pnpm changeset, or add a.changeset/*.mdentry, describing it before committing. Only the final sentence was replaced, and the item's lead was re-aimed from "feature work" to "anything that publishes", since that is now what the item says.The two dates that settle the "predates the gate" reading
The triage's reading is confirmed, and by a wider margin than the card assumed. Read from full history — the container's checkout is shallow, and both probes bottom out at the horizon commit until it is unshallowed, which is a trap worth naming:
git log -Son a shallow clone reports the horizon commit as the introduction of text that is in fact much older.43625fbd6c::warning::only and cannot fail — a zero-changeset bug fix is green by construction.a1251e4737::error::plusexit 1.8ff9210947.changesetdirectory. This is the form that actually reds a zero-changeset bug fix.The 2026-07-21 commit is explicit about why the earlier form could not bite, in its own inline comment: in pre-release mode
changeset versionretains every consumed.mdfile, so "the directory is permanently non-empty and the gate can never go red".So on the day the sentence was written it was true — nothing forced a changeset for anything. It did not become wrong by being mis-worded; it became wrong when enforcement arrived under it, twelve days later for blocking and seven weeks later for the counting form. That is a refinement of the triage's gloss, not a contradiction of it: the sentence is stale relative to a gate that post-dates it, and correcting it to "a
patchchangeset" is repair rather than a policy change. Reported to the dispatching seat as such.The payment
AGENTS.mdis at its line ceiling — ratchet row['AGENTS.md', 1162]atscripts/pm/check-skill-line-ratchet.mjs:529, headroom 0 — so the correction is paid by a same-file deletion. Nothing was re-wrapped; both edits are whole-line splices.Deleted: the eight-line ADR-0087 rationale paragraph at
AGENTS.md:1136-1143, replaced by a one-line citation in the file's own established idiom (compare:15,:916,:1012— "its header is the authority on detail").Why it is a restatement: the paragraph is a paraphrase of
scripts/check-adr-0087-registration.mjs's own failure output — thereport()block at:2976-2996, which prints to the author at exactly the moment they hit the gate. That is strictly better placed than prose in an instruction file the author may never re-read.check-adr-0087-registration.mjs:2980-2981:2982-2983:2983-2984:2984-2985objectstack migrate meta,spec-changes.json, the upgrade guide):2987-2990:2988-2990not-requiredis the ordinary answer and costs one line:2992-2994no-migration-prescriptionis refused when the body carries a FROM → TO prescription:227, and:2633, also emitted outputEight of eight. The four marker spellings themselves are untouched — the fenced block immediately above the deleted paragraph still lists all four, and the sentence naming
pnpm check:adr-0087-registrationand its CI step is untouched too, so the citation's antecedent is two lines up.Line arithmetic
AGENTS.mdbefore:1116-1117becomes:1116-1119:1136-1143becomes one lineEvery edited line is ≤ 120 bytes in UTF-8 — 115 / 110 / 112 / 37 for the correction and 110 for the citation, measured in bytes rather than characters because the em dash and ⛔ are three bytes each. The widest-table-row pin is untouched at 1,081 bytes, and
check:pm-skill-id-lint's population is respected: the new text carries no issue or PR numbers.Edit-landed-on-disk proof
wc -l AGENTS.mdgrep -c 'Pure bug fixes do'grep -c 'sole channel that reaches an upgrader'grep -c 'skip-changeset'grep -c 'released package takes a'grep -c 'that output is the authority'git diff --stat: 1 file changed, 5 insertions, 10 deletions.Gates — head
796501faa9The union was re-derived after the last edit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands. It reported the list derived from this repo at796501faa9, change set against merge basedee4dd4ba— one path,AGENTS.md. Every exit code was captured by redirect before any pipe.pnpm check:pm-skill-ratchet✓ check-skill-line-ratchet: AGENTS.md is 1157 lines (ceiling 1162; headroom 5).and✓ … AGENTS.md: widest table row is 1081 bytes (pin 1081; headroom 0).pnpm check:pm-skill-ratchet --self-test✓ check-skill-line-ratchet self-test: 111 cases pass.pnpm check:pm-skill-id-lint✓ check-skill-id-lint: 23 file(s) clean (pattern /#[0-9]{3,}/g).pnpm check:pm-governed-prose✓ check-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces … and claim no others.pnpm check:nul-bytescheck-nul-bytes: OK (scanned 8063 text file(s) … no raw ASCII control bytes).pnpm check:corpus-claim-driftcheck-corpus-claim-drift: OK, no new claim sites beside a pinned spelling.node scripts/check-required-contexts.mjs✓ check-required-contexts: 6 required context name(s) pinned across 2 workflow(s) …pnpm check:required-contexts✓ check-required-contexts --self-test: 150 assertions …pnpm check:agent-test-spelling✓ check-agent-test-spelling: 0 violations — 430 file(s) …pnpm check:docs-audit-scope✓ docs-accuracy-audit scope is in sync with content/docs/: 190 hand-written doc(s) …pnpm check:pm-governed-merges✓ check-governed-merges --self-test: 243 assertions …The baseline ratchet verdict before the edit, for comparison:
✓ check-skill-line-ratchet: AGENTS.md is 1162 lines (ceiling 1162; headroom 0).No gate answered a "PREREQUISITE NOT MET" or exit 3, so none is recorded NOT MEASURED. The derivation also noted nine further families that would apply once a changeset file exists — this PR deliberately has none, see below.eslint
Not a narrowing — a measurement that the intersection is empty.
eslint.config.mjsitself: everyfiles:glob is**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}or a narrowing of it. There is no.mdor.mdxglob and no markdown processor or plugin anywhere in the config.--format jsonreading forAGENTS.md:errorCount: 0,fatalErrorCount: 0, and the single message is"File ignored because no matching configuration was supplied."Changeset
skip-changesetapplied. This diff publishes nothing from any released package: it touches exactly one file,AGENTS.md, a repo-root instruction surface that no packagefileslist ships and thatchangeset versionnever bumps. Againstscripts/check-empty-changeset.mjs's own enumeration, the alternative — an empty-frontmatter changeset — is precisely what that gate exists to reject: it "buys nothing the label does not, and uniquely carries the risk", being a real input tochangesets/actionthat can stall a release while the run still goes green.Merge path
Draft, and it stays draft — governed
AGENTS.md, human merge is the review record. Auto-merge is not enabled and no reviewers were requested; requesting review is the dispatching seat's step.Generated by Claude Code