Uh oh!
There was an error while loading. Please reload this page.
docs(changeset): annotate #8296's changeset as breaking - #8606
Merged
Conversation
Fixes#8411 Add the breaking-change annotation (**BREAKING**) that the release-digest tooling's hasBreakingAnnotation/breakingDeclaration readers recognise, plus the resulting required ADR-0087 disposition marker. Bump stays minor per scripts/check-changeset-no-major.mjs's launch-window convention.
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
os-zhuang
marked this pull request as ready for review
August 14, 2026 01:31
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#8411
What changed
Added an explicit breaking-change annotation to
.changeset/filter-formula-field-refusal.md(landededff010c, PR #8369) so the release-digest tooling can classify it correctly. The bump staysminorfor both@objectstack/metadata-protocoland@objectstack/objectql— unchanged, perscripts/check-changeset-no-major.mjs's launch-window convention. One file touched.Two additions to the changeset body:
**BREAKING**-opening paragraph explaining the public-contract change (awhereon aformulafield used to succeed with the wrong answer; it now throws400 INVALID_FIELDfrom every call site that reachesassertFilterIsMaterializable—find/findOne/count/aggregate/update/delete), and stating why the bump is gradedminorrather thanmajor.<!-- adr-0087: not-required (no-migration-prescription) ... -->disposition marker — a mechanical consequence of (1): once a changeset is recognised as declaring a breaking change,scripts/check-adr-0087-registration.mjs(per AGENTS.md's Post-Task Checklist §3) requires exactly one ADR-0087 disposition marker. This is a runtime query-validation change, not a spec/metadata key rename, so there is nothing to register in the migration ledger.Where the marker form came from
Derived from the code, not invented, per the card's instruction:
major声明级别,而 objectui 在 v17 窗口内把破坏性声明为minor+ 正文标注 #6099 as precedent. That PR taughtscripts/objectui-changeset-digest.mjsto recognise a breaking change declared asminor+ body annotation (its header, "WHY 'BREAKING' IS BROADER THAN THE DECLARED LEVEL (objectui pin bump 生成的 console changeset 对破坏性变更零标注 —— digest 只认major声明级别,而 objectui 在 v17 窗口内把破坏性声明为minor+ 正文标注 #6099)", documents this at length). ItshasBreakingAnnotation()looks for a block or emphasis run that opens with the word "breaking" (BREAKING_EMPHASIS_LABEL/BREAKING_BLOCK_OPENER), and its exportedBREAKING_MARKERconstant is the literal string**BREAKING**— which is exactly whatmarkBreaking()prefixes onto a breaking entry's text.scripts/check-adr-0087-registration.mjs(breakingDeclaration()) reads the same signal for changesets in this repo (not objectui's):/\*\*BREAKING/i.test(body)is one of its three union'd signals (alongside amajorbump and a conventional-commit!).objectuisibling checkout (.changeset/mapdensity-dead-rowheight-spellings-4352.md) showing the convention in practice:**Breaking semantics, deliberately graded \minor`** (this repo never publishes `major`...)`.Both readers agree on the same marker shape, so I used the canonical
**BREAKING**form.Verification
origin/mainbefore editing (git show origin/main:.changeset/filter-formula-field-refusal.md— present).node scripts/check-changeset-no-major.mjs—✓ This diff introduces no \major` bump.` (unchanged by this PR, as required)node scripts/check-empty-changeset.mjs—✓ No empty-frontmatter changeset introduced by this diff (1 declaring changeset(s) added).node scripts/check-adr-0087-registration.mjs— before my edit: "this PR adds no declared-breaking changeset". After:✓ 1 declared-breaking changeset(s), each carrying an ADR-0087 disposition—.changeset/filter-formula-field-refusal.md [BREAKING] not-required (no-migration-prescription). This is a live, mechanical demonstration that a real gate in this repo now classifies the changeset as breaking.pnpm check:changeset-gate-self-tests(bundles the three changesets gates' self-tests) — all green (118 + 153 + 117 assertions).pnpm check:objectui-changeset(self-test) — all green, unaffected by this edit (it exercises fixture data, not this repo's real.changeset/stock).node scripts/check-nul-bytes.mjs— OK, no raw control bytes.scripts/objectui-changeset-digest.mjs's pure functions and ran them against the real (edited) changeset body:hasBreakingAnnotation(body)→true; against the original unannotated body atorigin/main→false. Confirms the direction of the fix on the exact function objectui pin bump 生成的 console changeset 对破坏性变更零标注 —— digest 只认major声明级别,而 objectui 在 v17 窗口内把破坏性声明为minor+ 正文标注 #6099 introduced, even though that script's own CLI processes objectui's changesets rather than this repo's.node scripts/pm/dispatch-gates.mjs .changeset/filter-formula-field-refusal.md— derivedcheck:changeset-gate-self-tests,check:objectui-changeset,check-adr-0087-registration.mjs,check-changeset-no-major.mjs,check-empty-changeset.mjsfor this path (worth noting: contrary to [finding] dispatch-gates.mjs does not derive pr-automation.yml's Check Changeset for.changeset/paths — a breaking changeset shipped locally-green and went red only in CI #8410's finding that the derivation may not name.changeset/-path gates, this run did surface them — I ran the explicitly-named gates regardless, per the card's instruction).Scope note
This PR is exactly what #8411 asks for: the annotation on #8296's changeset, nothing else. It does not address whether the framework side has a general gate requiring every breaking-
minorchangeset to carry this annotation (that's the separate, broader question #8411 explicitly excludes, adjacent to #8410). I did not find such a gate to exist beyond the ADR-0087 disposition gate (which only fires once a changeset is already recognised as breaking) — I have not filed a new issue for this, since #8410 already covers adjacent territory and the card says to file only if I found the gap and wanted to flag it; happy to file separately if you'd like it tracked distinctly from #8410.Generated by Claude Code