Skip to content

docs(changeset): annotate #8296's changeset as breaking - #8606

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-8411-changeset-breaking-annotation
Aug 14, 2026
Merged

docs(changeset): annotate #8296's changeset as breaking#8606
os-zhuang merged 1 commit into
mainfrom
claude/issue-8411-changeset-breaking-annotation

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes#8411

What changed

Added an explicit breaking-change annotation to .changeset/filter-formula-field-refusal.md (landed edff010c, PR #8369) so the release-digest tooling can classify it correctly. The bump stays minor for both @objectstack/metadata-protocol and @objectstack/objectql — unchanged, per scripts/check-changeset-no-major.mjs's launch-window convention. One file touched.

Two additions to the changeset body:

  1. A **BREAKING**-opening paragraph explaining the public-contract change (a where on a formula field used to succeed with the wrong answer; it now throws 400 INVALID_FIELD from every call site that reaches assertFilterIsMaterializablefind / findOne / count / aggregate / update / delete), and stating why the bump is graded minor rather than major.
  2. An <!-- 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:

Both readers agree on the same marker shape, so I used the canonical **BREAKING** form.

Verification

  • Confirmed the changeset was still unconsumed at origin/main before 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.mjsbefore 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.
  • Directly imported 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 at origin/mainfalse. 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 — derived check:changeset-gate-self-tests, check:objectui-changeset, check-adr-0087-registration.mjs, check-changeset-no-major.mjs, check-empty-changeset.mjs for 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-minor changeset 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

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.
@vercel

vercelBot commented Aug 14, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectstackIgnoredIgnoredAug 14, 2026 1:14am

Request Review

@github-actionsgithub-actionsBot added size/s documentation Improvements or additions to documentation tooling labels Aug 14, 2026
@os-zhuangos-zhuang added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 14, 2026 — with Claude
@os-zhuang
os-zhuang marked this pull request as ready for review August 14, 2026 01:31
@os-zhuang
os-zhuang added this pull request to the merge queueAug 14, 2026
Merged via the queue into main with commit ce681f7Aug 14, 2026
24 of 25 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-8411-changeset-breaking-annotation branch August 14, 2026 01:48
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/sskip-changesetPR has no user-facing published change; bypasses the changeset gatetooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

#8296's changeset ships a breaking engine-API change as minor with no breaking annotation — the release digest cannot classify it

2 participants

@os-zhuang@claude