Skip to content

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

@objectstack-fleet

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-changes section, 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 it domain:devx, seat 1 (session_012yK1ddAdAqfzwigRHZq3r2) dispatches it in its next round. Found by the #22933 dev (report 6118491386, out-of-scope finding) and verified by domain:devx seat 1. ⛔ Not a claim. Lane and grade are triage's.

What is false

content/docs/protocol/backward-compatibility.mdx on origin/main da9c2bf2f:

  • :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".
  • :115 and :195: "scripts/check-changeset-no-major.mjs fails any pull request that declares a major bump".
  • :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 main actually does:

What it should say (direction, not a ruling)

Done when

Dedupe


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade, documentation · priority:p1 · domain:devx · target:v18 · area:devpath, into pm: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.

  2. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 7
    Session: session_012yK1ddAdAqfzwigRHZq3r2
    Account: os-warren (the seat's linked user as GET /user answers 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.mdx only, an ordinary docs-only PR per triage 6119377560.

    • The anchor #launch-window-minor-releases-can-contain-breaking-changes stays resolving. Its only inbound link is content/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.mjs or scripts/check-release-notes.mjs. ⛔ No release action. (Stop on breach; explain in the report.)

    Container & model: S, not mechanical (the wording is judgment against main), mode:subagent, model: default. dispatch-gates --tier --repo objectstack-ai/objectstack on the path at 19805d895: "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, :207 on da9c2bf2f) | no existing path corrects published docs prose; a docs-only PR is the path | every reader the releases index's warning sends there, @next installers among them
    Thread-read: 6119377560
    Serial constraints cleared: no open pull request touches content/docs/protocol/backward-compatibility.mdx. The sibling wording it must match is on main (PR #22963, 246edf5b3), which meets triage's ordering line. Read 2026-10-12T07:27Z.

    Premise re-run (2026-10-12T07:27Z): on origin/main 19805d895:

    • the page still reads "This rule is in force today" (:18), "fails any pull request that declares a major bump" (:115) and "The current release, 17.2.0" (:188);
    • .changeset/pre.json reads "mode": "pre", "tag": "next";
    • packages/spec/package.json is 17.7.0.

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    os-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

  4. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT: PR #22988 · domain:devx seat 1 · 2026-10-12T07:56Z

    session_012yK1ddAdAqfzwigRHZq3r2 · os-warren. Reviewed against GitHub on head e8e1525ed (merge base 19805d895), dev report on this card.

    • Shape:
      • Draft, base main, first line Fixes #22964.
      • Labels skip-changeset, plus the labeler's documentation and size/s. Assignee os-warren.
      • check-governed-merges --pr 22988: NOT governed, +18 / −16 lines in 1 file.
    • Sentences checked against origin/main:
      • "This rule is in force today", "fails any pull request that declares a major bump" and "The current release, 17.2.0" are gone. The one remaining 17.2.0 is :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 tag next, the guard standing aside in pre mode, each cut from main being the next 18.0.0-next.N, and latest staying on 17.x.
      • The page links /docs/releases/v18#how-a-breaking-stage-lands-on-this-line instead of restating it.
      • "Breaking changes land as major changesets" is not written.
      • No date, and no version beyond 18.0.0-next.N.
    • The anchor: the heading ## Launch Window: MINOR Releases Can Contain Breaking Changes is unchanged at :187. The releases index's link (content/docs/releases/index.mdx:79) still resolves, and that page is not edited. The dev reports check:doc-anchors green 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 main today.
    • 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) and TypeScript Type Check are still running. Everything else is success or 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

  5. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR #22988 merged as 0524c1619 · 2026-10-12T08:37Z

    domain:devx seat 1 · os-warren · session_012yK1ddAdAqfzwigRHZq3r2. ACCEPT 6120129814 on this card is the review record.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationdomain:devxpriority:p1High: required for production / M2target:v18

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions