Uh oh!
There was an error while loading. Please reload this page.
docs(protocol): state the launch-window MINOR rule where readers meet it first - #14211
Merged
Merged
Conversation
… it first The Backward Compatibility page and the releases Versioning policy both told customers that a breaking change takes a MAJOR. The repo's operative rule is the launch-window convention: all 69 published `@objectstack/*` packages sit in one Changesets `fixed` group and a breaking change ships as a MINOR, enforced by `scripts/check-changeset-no-major.mjs`. - protocol page: hoist the governing rule above the SemVer table so it is the first thing a reader meets, correct the MINOR row, the breaking-change table's Version Impact column, the process ending, and deprecation Phase 3 (plus its diagram and summary callout), and align the existing Launch Window section's authority sentence with the now-corrected tables. - delete the "Minimum 30-day community review period" claim: the only occurrence of "review period" in the repo is the claim itself. - releases/index.mdx: the Minor sentence said releases add capabilities "without breaking existing metadata or code"; it now states the override and cites the shipped 17.2.0 / 15.1.0 removals. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WLJQhde67SeTccsmnBVarV
baozhoutao
marked this pull request as ready for review
September 1, 2026 13:14
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Sep 1, 2026
4 tasks
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#13893
Docs-only. Exactly two files, no code riders, per the triage fence ruling (「两页合一个 docs-only PR —— 两处陈述必须同时改才自洽。⛔ 该 PR 不得夹带任何代码。」).
The defect
Both pages told customers a breaking change takes a MAJOR. The operative rule is the launch-window convention: all 69 published
@objectstack/*packages sit in one Changesetsfixedgroup, and a breaking change ships as a MINOR, mechanically enforced byscripts/check-changeset-no-major.mjs(enforcing state confirmed on this tree:.changeset/pre.jsonis absent).Shipped evidence, verified in
packages/spec/CHANGELOG.mdon this tree — all inside### Minor Changessections:17.2.0—**BREAKING**retirement ofhttp_request_errors_totaland ofsys_position.permissions(ADR-0049 enforce-or-remove)15.1.0— removal oftenancy.strategyandtenancy.crossTenantAccesscontent/docs/releases/index.mdx— the unconditionally false page, corrected firstTriage ranked this page as the heavier of the two: it carried no overriding clause at all (re-grepped on this tree for launch window / lockstep: 0 hits), so its Minor sentence was false with nothing anywhere on the page to correct it.
content/docs/releases/v17.mdx:28), and ends with the version number not being the upgrade-safety signal plus a link into the protocol page's Launch Window section.content/docs/protocol/backward-compatibility.mdx— the ordered-false pageTriage's diagnosis was order of encounter: the false table sat at
:20, the correction #13779 added at:177, 157 lines apart. So the primary fix is a hoist, not a reword.warncallout: breaking ships as MINOR during the launch window, overrides the tables below, links to the Launch Window sectionVersion Impact: MAJORVersion Impact (launch window), those 6 rows readMINOR, with a lead-in making Breaking? the risk signal rather than the bump size**BREAKING**changeset entry and thecheck-changeset-no-major.mjsmechanism namedv4.0.0 — feature removedv3.5.0 — feature removed (earliest possible removal, MINOR)— it illustrates Phase 3 three lines below itThe 30-day claim: deleted, per the binary ruling
Triage ruled this in-scope and binary. Re-grepped independently on this tree over
.github/ scripts/ docs/for30-day|30 day|thirty.day: the grep is live (many hits) but every hit is unrelated — dependency-freshness windows, PM horizon arithmetic, attachment grace periods, grant lifecycle, a backup checklist. A wider check is more decisive: the only occurrence of the phrase "review period" anywhere in the repository was the claim itself. A prior audit agrees —docs/audits/2026-06-handwritten-docs-accuracy-followups.md:51lists "RFC/30-day review" among policy statements with no backing implementation.⇒ No mechanism to cite, so the promise is deleted and the process renumbered to 4 steps.
Alignment with #13779's overriding section
Per the fence, that section is the source-of-truth wording and was not reworded — its authority sentence is kept and strengthened ("this section is the operative rule wherever any part of this page disagrees"). One sentence in it did have to change: it opened "The versioning tables and deprecation timeline above describe the policy in its settled form", which stopped being true once those tables were corrected to state today's rule. It now says the tables state this rule directly and that classic SemVer is the settled form returned to when the window closes.
⛔ The window's end condition is deliberately not stated — no date, no version, no criteria — because that belongs to #14043.
Two same-class lines fixed in place, declared
Beyond the anchors the card enumerates, two lines carried the identical false mapping and would have re-stated it inside the very PR removing it:
:26— "removing or renaming properties is a MAJOR change", one bullet below the corrected table:166— "Removing an export is always a MAJOR change"Both now say "breaking change, which during the launch window ships in a MINOR release". The "within a MAJOR version" stability phrasings elsewhere on the page were left alone — they are a different claim shape, and the hoisted callout governs them.
Verification
Gate family derived from the real diff by
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(the script computes its own change set) — 32 families. All run at655c21fa:PREREQUISITE NOT MET(unbuilt@objectstack/formula,@objectstack/lint,@objectstack/spec,@objectstack/client-react, or a missingjson-schematree) — not findings. Afterturbo run buildfor those packages, four re-ran green, includingcheck:skill-examples("259 prose examples type-check across 3 surface(s)") andcheck:docs.scripts/check-test-completeness.mjsgrades a savedturbo run testlog and none exists locally; the gate's own text instructs recording it as NOT MEASURED and states it is not a red.pnpm lint(eslint . --no-inline-config, repo-wide, not narrowed): exit 0.Control on the load-bearing anchor. Both pages now link
#launch-window-minor-releases-can-contain-breaking-changes, so a greencheck:doc-anchorshad to be shown non-vacuous. Mutating that slug to a bogus one inreleases/index.mdx— mutation confirmed on disk by counting both the removed and injected strings — turned the gate red with the expected message ("renders no heading with id"). Restored viagit checkout HEAD -- ABSOLUTE_PATH; restore proven by blob hash matching the HEAD blob andgit diff HEADempty.No changeset: docs-only, nothing published. Expecting the
skip-changesetlabel.Filed, not fixed here
#14210— the page's Breaking Change Process names abreaking-changelabel and the reporting section names acompatibilitylabel; measured against the live 61-label set, neither exists (nearest isprotocol:breaking). Same card also records that the "minimum 2 MINOR releases" dwell guarantee has no located mechanism — the same shape as the 30-day claim, but a different defect class from this card's version-number defect, so it was preserved verbatim here rather than widened into this PR.Generated by Claude Code