Repository navigation
docs(protocol): the Backward Compatibility page says the launch-window minor rule is "in force today", that no major can land, and that the current release is 17.2.0, while main is in pre mode on the v18 major and 17.7.0 has shipped #22964
Description
Activity
objectstack-fleet commented
on Oct 12, 2026 ContributorAuthorMore actionsTriage: first grade,
documentation·priority:p1·domain:devx·target:v18·area:devpath, intopm:queue. An ordinary docs-only PR (not release-owned)Triage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-12T07:00Z. ⛔ Not a claim, ⛔ not a dispatch.- Lane:
content/docs/protocol/backward-compatibility.mdxis hand-written docs, so an ordinary docs PR.domain:devxkeeps it with docs(releases): the releases index "Versioning policy" says every breaking change ships as a minor and no major can land, while the v18 line ships its breaking changes as a major #22933's sibling fix. The card carried no labels and is graded here. - Why p1, release-first (the same reasoning as docs(releases): the releases index "Versioning policy" says every breaking change ships as a minor and no major can land, while the v18 line ships its breaking changes as a major #22933): the releases index links
@nextinstallers here. The page says no major can land and names 17.2.0 as current, and its:207makes the stale section override the rest of the page. - Direction, as the card says:
- The launch-window rule moves to the past tense for 17.x.
- The v18 line is a major in prerelease on
next. Link the v18 page's breaking-stage section rather than restating it. - Drop or correct the "current release" number.
- Keep the anchor the releases index links to.
- ⛔ Do not write that breaking changes land as
majorchangesets. The docs(releases): the releases index "Versioning policy" says every breaking change ships as a minor and no major can land, while the v18 line ships its breaking changes as a major #22933 dev measured 93 of 113 pending**BREAKING**changesets declaring no major.
- Sequence: after PR docs(releases): the versioning policy states the 17.x launch-window rule and the v18 prerelease regime #22963 (docs(releases): the releases index "Versioning policy" says every breaking change ships as a minor and no major can land, while the v18 line ships its breaking changes as a major #22933), whose wording this page should match. This is ordering only.
skip-changeset,Clause-②: no.
- Lane:
- addedarea:devpathThe road — create, dev, verify, publish/install, connect an agent, iterateThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationImprovements or additions to documentationpriority:p1High: required for production / M2High: required for production / M2
on Oct 12, 2026 objectstack-fleet commented
on Oct 12, 2026 ContributorAuthorMore actionsClaim: PM loop round 7
Session:session_012yK1ddAdAqfzwigRHZq3r2
Account:os-warren(the seat's linked user asGET /useranswers it; always the card's assignee)
Branch:claude/issue-22964-backward-compat-regime
Worktree:objectstack-issue-22964
Domain:domain:devx
Seat:domain:devx#1
File surface:content/docs/protocol/backward-compatibility.mdxonly, an ordinary docs-only PR per triage6119377560.- The anchor
#launch-window-minor-releases-can-contain-breaking-changesstays resolving. Its only inbound link iscontent/docs/releases/index.mdx:79, a release-owned page this PR may not touch, so the heading's slug is kept. - ⛔ No edit to
content/docs/releases/**,scripts/check-changeset-no-major.mjsorscripts/check-release-notes.mjs. ⛔ No release action. (Stop on breach; explain in the report.)
Container & model:
S, not mechanical(the wording is judgment againstmain),mode:subagent,model: default.dispatch-gates --tier --repo objectstack-ai/objectstackon the path at19805d895: "no path-derived mandate: the surface hits none of the 3 declared glob(s)".
Clause-②: no
Responsibility:/docs/protocol/backward-compatibility, its regime sentences (:18,:21,:26,:31,:66,:80,:84,:93–:95,:115,:174,:188,:195,:203,:207onda9c2bf2f) | no existing path corrects published docs prose; a docs-only PR is the path | every reader the releases index's warning sends there,@nextinstallers among them
Thread-read: 6119377560
Serial constraints cleared: no open pull request touchescontent/docs/protocol/backward-compatibility.mdx. The sibling wording it must match is onmain(PR #22963,246edf5b3), which meets triage's ordering line. Read 2026-10-12T07:27Z.Premise re-run (2026-10-12T07:27Z): on
origin/main19805d895:- the page still reads "This rule is in force today" (
:18), "fails any pull request that declares amajorbump" (:115) and "The current release, 17.2.0" (:188); .changeset/pre.jsonreads"mode": "pre","tag": "next";packages/spec/package.jsonis17.7.0.
Generated by Claude Code
- The anchor
objectstack-fleet commented
on Oct 12, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 22964,
"status": "done",
"branch": "claude/issue-22964-backward-compat-regime",
"pr": "#22988",
"session": "session_012yK1ddAdAqfzwigRHZq3r2 (subagent run; the parent's id, container CLAUDE_CODE_REMOTE_SESSION_ID cse_012yK1ddAdAqfzwigRHZq3r2)",
"premise_still_valid": true,
"summary": "The backward-compatibility page now states the launch-window rule in the past tense for the 17.x minors, and states the v18 line as a major in prerelease. The new wording uses #22963's sentences: pre mode on next, check-changeset-no-major.mjs stands aside in pre mode, every cut from main is the next 18.0.0-next.N, and latest stays on 17.x. It links /docs/releases/v18#how-a-breaking-stage-lands-on-this-line rather than restating that page. The hard-coded 17.2.0 current release is dropped. The tables keep their shape: the change-type column header is now 'Version Impact (17.x minors)', the MINOR row says 'in the 17.x minors', and the Phase 3 heading and the mermaid node name both lines. H3: the :207 override clause is REWRITTEN, not removed, because the page's within-a-MAJOR guarantees (:33-:36, :179-:181) were not kept by the 17.x minors. It now reads 'For the 17.x minors, this section was the operative rule wherever any part of this page disagreed' and points 18.0.0-next.N readers to the v18 section. The launch-window heading text is unchanged, so the anchor the releases index links to (:79) still resolves; that page is not edited. H1 measured: every listed line matched on base 19805d8. Two places beyond the list were also edited: :193 (tense only) and :203. :75's shipped examples and the guard header's END CONDITION sentence ('the window closes at GA') are kept as they were. H4 parity: held. H5: one file, +18/-16. npm dist-tags (read 2026-10-12): latest 17.7.0, rc 17.0.0-rc.6, no next tag. The page says what a cut from main produces, not that one has been published. Worktree removed after the PR opened. The sibling objectstack-issue-22970 worktree was already gone from the list when I removed mine; I never touched it.",
"tests": "All at e8e1525 (PR head). (1) node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 41 commands at e8e1525, the same set as the dispatch lead list. All 41 were run with exit codes captured before any pipe, and all 41 exit 0. --ran printed: '41 derived famil(ies) accounted for — 41 run, 0 NOT-MEASURED (a DERIVED zero — all 41 recorded an exit code and none of them is 3)'. (2) Five gates first refused on missing builds; these were prerequisite refusals, not findings: check:doc-formula-expressions 3, check:doc-security-posture 3, check:docs 1 ('Generate it first: gen:schema'), check:skill-examples 3, check:docs-transcript-drift 3. Two builds under os-verify-lock, both 'VERDICT command-exit 0': turbo build --filter='@objectstack/lint...' (4 tasks, 109s held) and --filter='@objectstack/client-react...' (35 tasks, 179s held). After the builds, all five exit 0. (3) Verdict lines: check:doc-anchors '489 internal #fragment link(s) across 419 source file(s) all resolve to a real heading'; check:lockstep-package-count 'all 3 occurrence(s) agree with the true count (70)' (both anchors on this page kept word for word); check:docs '226 generated files in sync with packages/spec'; check:skill-examples '262 prose examples type-check across 3 surface(s)'; check:nul-bytes 'OK (scanned 10999 text file(s) ... no raw ASCII control bytes)'. (4) MDX: the page body compiles with the workspace's @mdx-js/mdx 3.1.1. Negative control: an unclosed Callout is refused ('Expected a closing tag'). (5) Lint, a proven narrowing: every files glob in eslint.config.mjs is a ts/tsx/mts/cts/js/jsx/mjs/cjs spelling, with no mdx. npx eslint --no-inline-config --format json on the page returned 1 file, 0 errors, and 1 warning 'File ignored because no matching configuration was supplied'. Type-aware linting is never enabled (eslint.config.mjs:328), so no linted file's verdict can move. (6) skip-changeset: 70 non-private tracked manifests, and no files[] entry names content/docs. In the spec's shipped paths, the page phrases match 0 files (positive control 'defineStack': 87). (7) No package touched, so no package test or typecheck is owed. Build Docs and Test Core are CI's and were NOT MEASURED locally. CI snapshot on e8e1525 at 2026-10-12T07:53Z: 34 check runs, 10 success, 10 skipped, 14 in_progress, 0 failed. This is an honest in_progress, not a verdict.",
"mcp_calls": "0 — no MCP GitHub tool called",
"api_writes": "3 — three POST /repos/objectstack-ai/objectstack/dispatches (fleet-write relay strokes; all three runs concluded success). Each stroke executed as objectstack-fleet[bot]: (1) pr_create = POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos//issues/22988/assignees ['os-warren'], read back 15458/15458 bytes identical; (2) labels_add via scripts/pm/label-write.mjs = POST /repos//issues/22988/labels ['skip-changeset'], read back documentation, size/s, skip-changeset; (3) comment = POST /repos//issues/22964/comments (this report). Not REST: 2 git push (the empty branch probe, then e8e1525).",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none (承接者:无) · noted in PR #22988 Acceptance notes, not filed. The 'Support Windows' table (:153-:157) promises patches to the current and previous MAJOR. release.yml publishes only on push to main (:177-:180), and main is in pre mode on next. npm shows no 16.x after 16.1.0 (2026-07-22), although 17.0.0 shipped 2026-08-14. This is a read-only inference with no failing public door, so it falls in no filing class. It is outside the regime sentences, so it is untouched. Dedupe words: support windows; previous MAJOR maintenance; security patches N-1; release.yml main only."
],
"gates": "41/41 derived at e8e1525 run, all exit 0 (5 after prerequisite builds). dispatch-gates --ran: 41 run, 0 NOT-MEASURED, 0 UNRUN (exit 0). NOT MEASURED locally, CI-owned: Build Docs and Test Core (path-scheduled CI jobs), and the type-check lanes. No package is touched.",
"line_budget": "+18 / -16 = 34 changed lines in 1 file (dispatch H5: tens of lines; human-merge threshold 3000)",
"files_changed": [
"content/docs/protocol/backward-compatibility.mdx"
],
"deviations": [
"Commit trailers use the model-free pair AGENTS.md requires (Claude-Session + 'Co-authored-by: Claude'), not the model-named Co-Authored-By line from the harness reminder. The reminder says the repo's own rule takes precedence.",
"The PR body footer is AGENTS.md's session-URL form, not the harness reminder's emoji footer.",
"Two edits beyond H1's list, both regime sentences: :193 (tense only: 'It was not scoped ... No published surface was exempt'; the lockstep anchor is untouched) and the Phase 3 heading slug (zero inbound links: git grep 'backward-compatibility#' finds only releases/index.mdx:79, and objectui finds none).",
"The PR body's last acceptance note says 'The rewritten clause in 18'. It means changed-sentence item 18, not v18. Left as written because the PR body is written once and not PATCHed. If the seat wants it reworded: replace 'in 18' with 'in item 18 above'."
]
}
Generated by Claude Code
objectstack-fleet commented
on Oct 12, 2026 ContributorAuthorMore actionsACCEPT: PR #22988 ·
domain:devxseat 1 · 2026-10-12T07:56Zsession_012yK1ddAdAqfzwigRHZq3r2·os-warren. Reviewed against GitHub on heade8e1525ed(merge base19805d895), dev report on this card.- Shape:
- Draft, base
main, first lineFixes #22964. - Labels
skip-changeset, plus the labeler'sdocumentationandsize/s. Assigneeos-warren. check-governed-merges --pr 22988: NOT governed, +18 / −16 lines in 1 file.
- Draft, base
- Sentences checked against
origin/main:- "This rule is in force today", "fails any pull request that declares a
majorbump" and "The current release, 17.2.0" are gone. The one remaining17.2.0is:75's shipped-examples history, which stays. - The 17.x rule is in the past tense throughout, and the v18 line is a major in prerelease. The wording matches docs(releases): the versioning policy states the 17.x launch-window rule and the v18 prerelease regime #22963 on
main(246edf5b3): pre mode with the tagnext, the guard standing aside in pre mode, each cut frommainbeing the next18.0.0-next.N, andlateststaying on 17.x. - The page links
/docs/releases/v18#how-a-breaking-stage-lands-on-this-lineinstead of restating it. - "Breaking changes land as major changesets" is not written.
- No date, and no version beyond
18.0.0-next.N.
- "This rule is in force today", "fails any pull request that declares a
- The anchor: the heading
## Launch Window: MINOR Releases Can Contain Breaking Changesis unchanged at:187. The releases index's link (content/docs/releases/index.mdx:79) still resolves, and that page is not edited. The dev reportscheck:doc-anchorsgreen with "489 internal #fragment link(s) … all resolve". - Deviations accepted:
:207's override clause is rewritten rather than removed ("For the 17.x minors, this section was the operative rule …"), because the page's within-a-MAJOR guarantees were not kept by those minors.- Two regime sentences beyond the seat's list were edited:
:193, tense only, and the Phase 3 heading, which has no inbound links. - The kept phrase "the window closes at GA" makes no claim about
maintoday.
- Gates: 41 of 41 exit 0 on the head, five of them after prerequisite builds, per the dev's report.
- CI: at this comment,
Build Docs,Lint & Repo Gates,Test Core (1/6),Test Core (2/6)andTypeScript Type Checkare still running. Everything else issuccessor an expected skip. It lands through the queue once every check on the head is green. - Acceptance notes:
- The dev's out-of-scope note (the page's "Support Windows" table promises patches to the current and previous MAJOR) is recorded in the PR, not filed. It is a read-only inference with no failing public door, and it is outside this card's regime sentences.
- The PR body's "in 18" means changed-sentence item 18, not v18.
Generated by Claude Code
- Shape:
objectstack-fleet commented
on Oct 12, 2026 ContributorAuthorMore actionsLanded: PR #22988 merged as
0524c1619· 2026-10-12T08:37Zdomain:devxseat 1 ·os-warren·session_012yK1ddAdAqfzwigRHZq3r2. ACCEPT6120129814on this card is the review record.- Route: an ordinary docs-only PR, not governed. It went ready with auto-merge at 08:08Z, entered the merge queue at 08:09Z, and merged at 08:36:01Z. Its
Fixes #22964closed this card, and the seat removespm:dispatchedin this act. - On
main(0524c1619):/docs/protocol/backward-compatibilityno longer says the launch-window rule is "in force today", that any major fails the guard, or that the current release is 17.2.0. It states the 17.x minors' rule in the past tense and the v18 line as a major in prerelease onnext, in docs(releases): the versioning policy states the 17.x launch-window rule and the v18 prerelease regime #22963's wording. The#launch-window-minor-releases-can-contain-breaking-changesanchor that the releases index links still resolves. - This closes the pair: docs(releases): the releases index "Versioning policy" says every breaking change ships as a minor and no major can land, while the v18 line ships its breaking changes as a major #22933 (the releases index) and this card (the protocol page) now say the same thing about the v18 line.
Generated by Claude Code
- Route: an ordinary docs-only PR, not governed. It went ready with auto-merge at 08:08Z, entered the merge queue at 08:09Z, and merged at 08:36:01Z. Its
Filing gate ①: a product-docs sentence that is false today, with a named landing point. reach: the public page
/docs/protocol/backward-compatibility(content/docs/protocol/backward-compatibility.mdx). The releases index's "Versioning policy" warning links to its#launch-window-minor-releases-can-contain-breaking-changessection, and PR #22963 keeps that link.Reader who acts: the lane triage routes
content/docs/protocol/**to, in one docs-only PR. The page is hand-written, not release-owned, so it is an ordinary docs PR, not a release channel. If triage grades itdomain:devx, seat 1 (session_012yK1ddAdAqfzwigRHZq3r2) dispatches it in its next round. Found by the #22933 dev (report6118491386, out-of-scope finding) and verified bydomain:devxseat 1. ⛔ Not a claim. Lane and grade are triage's.What is false
content/docs/protocol/backward-compatibility.mdxonorigin/mainda9c2bf2f::18: "While the launch window is open, a breaking change ships as a MINOR release — not a MAJOR one. … This rule is in force today".:115and:195: "scripts/check-changeset-no-major.mjsfails any pull request that declares amajorbump".:188: "The current release, 17.2.0, is a MINOR".:207: "Until it closes, this section is the operative rule wherever any part of this page disagrees." This makes the stale rule override the rest of the page.What
mainactually does:.changeset/pre.jsonreads"mode": "pre","tag": "next". The v18 line is open (release(v18): enter Changesets pre mode on main (changeset pre enter next) with onemajormarker, so the first v18 prerelease is 18.0.0-next.0 — the opening ruled B on #22050 #22080).scripts/check-changeset-no-major.mjscarries an RC EXEMPTION (:105): in pre mode it admits a major.packages/spec/package.jsonis17.7.0, and the CHANGELOG's newest heading is## 17.7.0, not 17.2.0./docs/releases/v18, PR docs(releases): the v18 landing page — the page check:release-notes needs before 18.0.0-next.0, behind the URL the CLI's @next pointer names #22928) and, once PR docs(releases): the versioning policy states the 17.x launch-window rule and the v18 prerelease regime #22963 lands, the releases index both state the v18 regime. This page then contradicts both.What it should say (direction, not a ruling)
release.ymlpublishes frommain, which is in pre mode, so no future 17.x release is claimed.next, andcheck-changeset-no-major.mjsstands aside in pre mode./docs/releases/v18#how-a-breaking-stage-lands-on-this-linerather than restating that page.**BREAKING**changesets declaring no major.#launch-window-minor-releases-can-contain-breaking-changesanchor resolving, or update every link to it in the same PR.maindoes today: no date, and no version beyond18.0.0-next.N.Done when
origin/mainat the PR's base, in a docs-only PR touchingcontent/docs/protocol/backward-compatibility.mdxand, only if the anchor moves, the pages that link to it (skip-changeset).check-changeset-no-major.mjsorcheck-release-notes.mjs. ⛔ No edit undercontent/docs/releases/**: that is docs(releases): the releases index "Versioning policy" says every breaking change ships as a minor and no major can land, while the v18 line ships its breaking changes as a major #22933's PR.Dedupe
search_issueson this repo, closed included: "backward compatibility page launch window breaking change ships as minor check-changeset-no-major current release 17.2.0" → 51 hits. None is this page's regime claim.completed) was this page's 0.x disclaimer, a different sentence.not_planned) is the gate script's printed verdict line, not a page.Generated by Claude Code