Repository navigation
release(v18): the version-pr lane refuses the major boundary at Validate the post-version tree, so #21988 never refreshes into 18.0.0-next.0 — wire the lane's major-only gates in, and stop prerelease cuts re-dating the last GA #22085
Description
Ruled: 6049734955 · letters Q1 B · Q2 A · Q3 B · 2026-10-08T00:41Z
This card carries the version-lane half of #22080's opening: the route by which 18.0.0-next.0 is actually cut once pre mode is in. #22080 keeps its own half, pre mode plus the one major marker, as PR #22084. Its After-it-lands line ("changesets/action refreshes #21988 into the prerelease version PR") is what this card makes true.
Filed by PM seat domain:devx#2 (session_01VF48aw8RPG6wzDnMgp6rtw) as an in-flight derivative of #22080. Per the execution duties, it inherits #22080's domain (domain:devx), priority (p1) and target:v18, and this seat dispatches it directly. ⛔ Not a claim; the claim follows.
Filing gate: ① a measured defect with a named producer. reach: named producer: release.yml's version-pr job (cron 0 */6 * * *), step Validate the post-version tree (:518 on main 3d9188502e). It exits 1 at :610–:613 on the first refresh after #22084 merges.
Reader: this seat's next dispatch, now.
Dedupe: the 435 most recently updated issues (state=all, REST page loop, PRs excluded), titles and bodies grepped for post-version tree|MAJOR_ONLY|major boundary|version-pr|18\.0\.0-next|release-index-currency|cut-rc. That gives 5 hits: #22080, #9139, #22050, #21993 and #21772. None wires the lane for the boundary. Dedupe words: version-pr major boundary; Validate the post-version tree; MAJOR_ONLY unvalidated; release index currency prerelease date.
What was measured (PR #22084's dev, report 6039596838. The seat re-read the release.yml and cut-rc.yml lines cited; the rest is the dev's throwaway reading)
- In a throwaway worktree at chore(release): enter Changesets pre mode (
next) with onemajormarker, so v18 opens at 18.0.0-next.0 #22084's head52f7a509c6, never committed, the full rootversionscript exits 0 and puts all 69fixedmembers at18.0.0-next.0. The script ischangeset version,sync-protocol-version,sync-template-versions,sync-docs-image-tagsandsync-release-index-currency. - Replaying the step's shape assertion on that tree finds 0 unexpected paths, but MAJOR_ONLY is non-empty:
packages/spec/src/kernel/protocol-version.ts,'17.0.0'→'18.0.0';packages/create-objectstack/src/templates/blank/objectstack.config.ts,objectstack.manifest.jsonandpackage.json.- The step prints
this version pass crossed a MAJOR boundary and wrote the surfaces above, which this lane has no gate for … Wire them in before letting this refresh through.and exits 1 (:610–:613). - The changesets/action step that would refresh chore: version packages (next) #21988 does not run.
cut-rc.ymlis no route either: it refuses any version not shapedX.Y.Z-rc.N(:156–:159) and anypre.jsontag butrc(:232–:237).- Same throwaway:
scripts/sync-release-index-currency.mjsrewrote the v17 entry incontent/docs/releases/index.mdxfromreleased 2026-10-06toreleased 2026-10-07, the cut's date. 17.7.0's version commit4e4e881427is dated 2026-10-06. In pre mode the newest GA does not move, so every prerelease cut would re-date the last GA.
The route (the seat's call, not re-rulable here)
#22050's ruling 6037890422, verbatim: "Once the opening lands, changesets/action turns it into the prerelease version PR." So the version PR is the ruled route, and this card wires it. ⛔ cut-rc.yml is not extended (that would be a second route the ruling did not name).
Done when
- A version pass that crosses the major boundary passes
Validate the post-version tree. The step now validates each MAJOR_ONLY surface instead of refusing it: the protocol-version lockstep and the blank template's render, using gates the lane or the repo already has. The refusal stays for any major-only path still unvalidated. sync-release-index-currencydoes not re-date the newest GA entry on a prerelease cut. This is pinned in its own battery.- Pin, in the PR body: the full root
versionscript plus the step's replayed assertion, on a throwaway tree carrying chore(release): enter Changesets pre mode (next) with onemajormarker, so v18 opens at 18.0.0-next.0 #22084'spre.jsonandmajorchangeset (or onmainonce chore(release): enter Changesets pre mode (next) with onemajormarker, so v18 opens at 18.0.0-next.0 #22084 merges). It exits 0 at18.0.0-next.0, and the release index's v17 date is unchanged. - Measured and reported, not edited: on the first prerelease,
sync-docs-image-tagsmoves the docs image pins (docker/README.md,content/docs/deployment/self-hosting.mdx,content/docs/upgrading.mdx) from17.7.0to18.0.0-next.0while npmlateststays 17.7.0. If keeping them on the GA during thenextline needs a choice, it goes in the report'sopen_questions. - ⛔ No publish, no tag, no
workflow_dispatchof any release workflow, ⛔ no merge of chore: version packages (next) #21988, ⛔ no edit tocut-rc.yml, ⛔ no hand edit ofcontent/docs/releases/**.
Activity
objectstack-fleet commentedon Oct 7, 2026
os-dev-report
{
"issue": 22085,
"addendum": "patch round: merge origin/main so a new head re-runs Lint and creates the missing required TypeScript Type Check context",
"status": "needs_decision",
"branch": "claude/issue-22085-version-lane-major-boundary",
"pr": "#22095",
"session": "session_01VF48aw8RPG6wzDnMgp6rtw (subagent: the dispatching PM's session)",
"previous_head": "a4cbcfdb16",
"new_head": "877ddea5ef",
"merge": "877ddea5ef = merge commit, parents a4cbcfd (branch) and bafb58b (origin/main: b04a529 #22086 ci.yml/lint.yml, bafb58b #22089 cli). No rebase, no force; the push was a fast-forward a4cbcfd..877ddea. No conflict. main's merge-base delta 3d91885..bafb58b touches neither release.yml nor scripts/sync-release-index-currency.mjs, and both files are byte-identical to a4cbcfd (git diff a4cbcfd HEAD over the two paths is empty). The PR's three-dot diff is still exactly those 2 files.",
"tests": "Run at 877ddea after pnpm install. Exit codes were written to disk before any pipe: node scripts/sync-release-index-currency.mjs --self-test :: exit 0; pnpm check:workflow-step-name-quoting :: exit 0; pnpm check:workflow-status-functions :: exit 0; node scripts/check-self-test-workflow-commands.mjs :: exit 0; node scripts/check-self-test-workflow-commands.mjs --self-test :: exit 0. Verdict lines:
OK self-test: 42 cases pass;check-workflow-step-name-quoting: OK (scanned 39 workflow file(s) + 2 composite action file(s), 742 step name(s));check-workflow-status-functions: OK (scanned 39 workflow file(s), 65 job(s));check-self-test-workflow-commands: no self-test CI runs prints a line the Actions runner would parse as a workflow command(231 scripts).","unchanged": "Q1-Q3 (6040990462) and the ACCEPT (6041309804) are not touched. No other file was edited.",
"mcp_calls": "0",
"api_writes": "1 — this comment (POST /repos//issues/22085/comments via post-stamped). Plus 1 git push (not REST).",
"note": "The first report's relay dispatch fw-20261007T150427Z-017251 never produced a duplicate: as of this round the card carries one os-dev-report (6040836373)."
}
Generated by Claude Code
objectstack-fleet commentedon Oct 7, 2026
Box intake (triage): the labels stand (
priority:p1·domain:devx·target:v18). This is the v18 opening's version-lane half, and release-priority. The decision is the seat's6040990462(Q1–Q3). It carries the four-facet block andPrior rulings read:, but it has no 「维护者速读」 heading. The seat adds one line of 维护者速读 in business language above Q1, so the director can present it as is. PR #22095 carries the measured half and needs no ruling. ⛔ #21988 stays unmerged until the version lane is ruled and #22084 lands.Triage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-07T16:17Z. ⛔ Not a claim.objectstack-fleet commentedon Oct 7, 2026
Landed (partial) — PR #22095 →
8a925b3b47·domain:devx#2· 2026-10-07T17:58Z8a925b3b47is onmain.mainby blob identity, both files equal to the PR head877ddea5ef:.github/workflows/release.yml=789eeddda4;scripts/sync-release-index-currency.mjs=28f5ee09dd.37641661459never created the requiredTypeScript Type Checkaggregate. A merge ofmain(877ddea5ef, addendum6041724501) re-ran it green. Both files were byte-unchanged.Part of #22085), inneeds-user-decision.Release: claim
6039719850(session_01VF48aw8RPG6wzDnMgp6rtw,os-justin) is released by its own holder at partial landing.6040836373). Also the template half of Done-when 1: the blank template's three major-boundary stamps are validated on theversion-prlane instead of refused.6040990462(Q1–Q3) and stay inneeds-user-decision. Once ruled, the execution follows that comment's 裁后执行 section: per the ruling, a spec-lane card (Q1 = B), a release-owned page (Q2 = A), and a devx card (Q3 = B).objectstack-fleet commentedon Oct 8, 2026
Ruling: batch #286 item 1 · letters Q1 B · Q2 A · Q3 B · maintainer 「22082 22085 同意」 2026-10-08T00:37Z
Director seat, summon #35,
session_01VYToj6PQehTEKNrjGM9akg(GitHubos-zhuang; written asobjectstack-fleet[bot]via the relay). Batch #286 was presented in chat with thedomain:devx#2seat's three questions (6040990462) and their options; the maintainer answered 「22082 22085 同意」, which takes every recommendation. Freshness gate: the body and all seven comments (newest 6043742559, the partial landing of PR #22095 at8a925b3b47, whoseRelease:line cleared the assignee) were re-read before this record; nothing newer exists. PR #22084 (pre mode plus onemajormarker) is still open, ready and green, waiting on the maintainer's merge; #21988 is unmerged. Thread-read: 6043742559.The ruling
PROTOCOL_VERSIONto 18, regenerates the two generated documents (spec-changes.json, the protocol upgrade guide's 17 → 18 section), rewrites the in-repo^17handshakes (examples, docs snippets, fixtures) to^18, and gives the lockstep test one narrow exception: in pre mode with a pendingmajor, the protocol major may equal the major about to be published. ⛔ Not taken: A (the version script rewriting handshakes and regenerating documents inside a bot pull request that runs no CI, the shapesync-protocol-version.mjs's own note on fix(spec): PROTOCOL_VERSION 13.0.0 → 14.0.0 — re-lockstep with the released major #2769 warns against) and D (the protocol staying 17 through the wholenextline, so a kernel that installed 18 would still shake hands as 17 for months). The constant lives inpackages/spec, so the work is thedomain:speclane's card, filed by thedomain:devxseat in execution; its first measurements are the cli fixtures declaring^17and whether ADR-0120 协议 18 项:D2 conversion(声明索引 unique: true → 'global')+ 裸 true 硬拒 + synonym pin 退役 —— 挂 18 列车,现在勿动工 #5082's 17 → 18 conversions may take effect before C8./docs/releases/v18(the line's purpose and the rule for its breaking stages), registered inmeta.json, so the pointerprotocol-version-gap.tsalready sends@nextinstallers to has a page behind it;check:release-noteskeeps its semantics. ⛔ Not taken: B (the gate counting only GA headings, with the CLI's link answering 404 through thenextline). The page belongs to the release side (content/docs/releases/**is not a code pull request's to touch); who writes it, the maintainer or this seat on the maintainer's word, is settled in chat and recorded on this card.nextline, the documented image and install versions follow the newest GA, not the prerelease. In pre modesync-docs-image-tagsandcheck-docs-image-tagpin the newest GA (read from the CHANGELOG, the same way the GA is already judged); outside pre mode nothing changes. ⛔ Not taken: A (self-hosting and upgrade documents reading18.0.0-next.Nwhile npmlatestand the published image stay 17.7.0, so a production user copying the documents is led into the breaking prerelease line).Why these three on the first axis: the release lane renders version numbers; a change of protocol, gate or document semantics is a reviewed pull request, as ADR-0087 D6 already frames the
nextchannel (every major goes tonextat least one RC cycle beforelatest). No new gate and no new version-time rewriter: one lockstep condition, one pair of rewriter-and-gate conditions, one short page.State
needs-user-decision→pm:queuein this act;tooling·priority:p1·domain:devx·target:v18·area:devpathunchanged, no assignee: thedomain:devxseat claims the card to execute the 裁后执行 of 6040990462 (file thedomain:speccard for Q1, thedomain:devxcard for Q3, and record the Q2 page as a release-side action on this card), then closes it when the protocol half of Done-when 1 and Done-when 3 are met. Body:Ruled:line added in the same act.next) with onemajormarker, so v18 opens at 18.0.0-next.0 #22084's merge is the maintainer's act; after it theversion-prrefresh stays red atValidate the post-version treeuntil the Q1 pull request lands, and red there publishes nothing; ⛔ chore: version packages (next) #21988 is not merged; ⛔ no seat publishes, tags or dispatches a release workflow.Generated by Claude Code
objectstack-fleet commentedon Oct 8, 2026
Claim: PM loop round 8
Session:
session_01VF48aw8RPG6wzDnMgp6rtwAccount:
os-justin(the seat's linked user asGET /useranswers it; the card's assignee)Branch: n/a. This card's remainder is executed by the seat itself (two card filings and one record). The Q3 code half goes on its own sub-issue with its own claim and branch.
Worktree: n/a
Domain:
domain:devxSeat:
domain:devx#2Ruling-ref: 6049734955 (Q1 B · Q2 A · Q3 B, re-read this round)
File surface: none on this card (issue writes only).
content/docs/releases/**. That page is the release side's, per Q2.workflow_dispatchof a release workflow. ⛔ chore: version packages (next) #21988 is not touched.Container & model: PM seat, in-session
Clause-②: no
Responsibility: n/a — not a defect card
Thread-read: 6049734955
Serial constraints cleared: none apply. The Q1 card's surface (
packages/specprotocol constant, generated documents,^17handshakes) is the spec lane's. The Q3 sub-issue's surface (scripts/sync-docs-image-tags.mjs,scripts/check-docs-image-tag.mjs) is touched by no open PR.objectstack-fleet commentedon Oct 8, 2026
Ruling executed — #22085's 裁后执行 (post-ruling actions) for Q1 B · Q2 A · Q3 B ·
domain:devx#2· 2026-10-08T01:38ZExecutes
6040990462's 裁后执行 under the ruling6049734955. Claim:6050348380. Ruling-ref: 6049734955.domain:spec,priority:p1,protocol:breaking,pm:queue), filed for the spec seat/docs/releases/v18, registered inmeta.json. The maintainer or the director seat writes it, as settled in chat.content/docs/releases/**is not a code PR's to touch. This seat waits for it and re-reads this card at each round.domain:devxsub-issue,priority:p1), dispatched by this seat this roundWhat remains on this card:
version-prrefresh on thatmainthat passesValidate the post-version treeis the reading.This seat closes the card on that reading. The card stays
pm:dispatchedto this seat until then.Standing, unchanged by this ruling:
next) with onemajormarker, so v18 opens at 18.0.0-next.0 #22084's merge is the maintainer's act.version-prrefresh stays red atValidate the post-version treeuntil spec(v18): move PROTOCOL_VERSION 17 → 18 in an ordinary pull request with full CI: regenerate spec-changes.json and the 17 → 18 upgrade-guide section, rewrite the in-repo ^17 handshakes, and give the lockstep test one pre-mode exception (#22085 Q1) #22130 lands. Red there publishes nothing.objectstack-fleet commentedon Oct 8, 2026
ec8f37c890(record on release(v18): in pre mode, sync-docs-image-tags and check-docs-image-tag pin the documented image and install versions to the newest GA, not 18.0.0-next.N (#22085 Q3) #22131). Remaining on this card: Q1 (spec(v18): move PROTOCOL_VERSION 17 → 18 in an ordinary pull request with full CI: regenerate spec-changes.json and the 17 → 18 upgrade-guide section, rewrite the in-repo ^17 handshakes, and give the lockstep test one pre-mode exception (#22085 Q1) #22130,domain:spec, after PR chore(release): enter Changesets pre mode (next) with onemajormarker, so v18 opens at 18.0.0-next.0 #22084) and Q2 (the release-side page at/docs/releases/v18).objectstack-fleet commentedon Oct 9, 2026
Triage: re-check of an owned card idle past 24 h. It is waiting on two maintainer-side events, not stalled
Triage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-09T04:02Z. ⛔ Not a claim, ⛔ not a dispatch. Assignee andpm:dispatchedstay.ec8f37c890).pm:awaiting-maintainer, carryingneeds-user-decision).6071129819).content/docs/releases/onmainstill has nov18entry (meta.jsonlistsv17first). It is the maintainer's or the director seat's to write, as settled.fix(release): judge the major-boundary template stamps on the version…
fix(scripts): in Changesets pre mode the doc image and install pins f…
objectstack-fleet commentedon Oct 9, 2026
Triage: event 1 of 2 is done. PR #22215 merged as
4e9fe9ff6a(#22130 closed); the/docs/releases/v18page remainsTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-09T17:55Z. ⛔ Not a claim, ⛔ not a dispatch. Assignee andpm:dispatchedstay.Thread-read: 6074009976
4e9fe9ff6a. spec(v18): move PROTOCOL_VERSION 17 → 18 in an ordinary pull request with full CI: regenerate spec-changes.json and the 17 → 18 upgrade-guide section, rewrite the in-repo ^17 handshakes, and give the lockstep test one pre-mode exception (#22085 Q1) #22130 closedcompleted, and its queue anchor Queue-flake anchor: test/verify-host-root.test.ts #22488 closed with it.Lint & Type Checkis green on that commit./docs/releases/v18page.mainat or after4e9fe9ff6a. Today's scheduled Release run failed at that step onf66c440de9, before this merge. Record whether the major boundary now validates or still refuses.objectstack-fleet commentedon Oct 9, 2026
Triage: the version-PR lane now fails on exactly one gate, the missing
/docs/releases/v18page. The major boundary validatesTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-09T18:57Z. ⛔ Not a claim, ⛔ not a dispatch. Assignee andpm:dispatchedstay.Thread-read: 6086369312
The scheduled Release run 37971535462 on
9411faa1ba(after PR #22215) still failsVersion PR maintenanceat "Validate the post-version tree". Its log, read this round, now names one gate only:pnpm check:release-notes: "content/docs/releases/v18.mdx(orcontent/docs/releases/v18/index.mdx) is missing. @objectstack/spec shipped a 18.x release but there is no curated release page. Write it (lead with breaking changes + migration), then add "v18" tocontent/docs/releases/meta.json."check-release-page-statusandcheck-release-section-coveragefor v16 and v17.So the major-boundary refusal this card was filed for is gone. What remains is this card's own event 2: write the v18 release page and add
"v18"tometa.json. That page is the maintainer-side event already listed. Once it lands, the next scheduled run should refresh PR #21988.objectstack-fleet commentedon Oct 10, 2026
Triage: re-check of an owned card idle for 24 h. The holder owes nothing; the one open event is the maintainer's or the director's v18 release page, now the only gate on the v18 version lane
Triage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-10T19:00Z. ⛔ Not a claim, ⛔ not a dispatch. Assignee andpm:dispatchedstay. Thread-read:6087315917.content/docs/releases/v18.mdx(orv18/index.mdx) is absent onmain61bea24207.Version PR maintenancerun since 2026-10-08T12:14Z fails atValidate the post-version tree, onpnpm check:release-notesalone. The run on243dd3c625reads "the post-version tree fails 1 gate(s) …: pnpm check:release-notes".17.8.0from 2026-10-08T06:19Z, before pre-mode entry.6049734955makes Q2 A a release-side action. "The maintainer or the director seat writes it" (6050401335, the table's Q2 row). ⛔ It is not this card's holder's.18.0.0-next.0until that page and itsmeta.jsonentry exist. The ruling asks for a short landing page: the line's purpose and the rule for its breaking stages.objectstack-fleet commentedon Oct 12, 2026
Pointer from the triage seat (seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-12T02:09Z. ⛔ Not a claim. No label or assignee change; this card stays as it is./docs/releases/v18landing page, the one gate left on the v18 version lane (#22085) #22919 (priority:p1,domain:devx,pm:queue). The maintainer directed it verbatim: 「开卡写 v18 发布页」.6049734955(Q2 → A) left to the maintainer. The page is release-owned channel 1, approved on that card.6101079499said the page was "the maintainer's or the director's". From here it is release(v18): write the/docs/releases/v18landing page, the one gate left on the v18 version lane (#22085) #22919's, and that card's PR is the one this lane's version-PR gate waits on./docs/releases/v18landing page, the one gate left on the v18 version lane (#22085) #22919 merges, the next scheduledrelease.ymlrun should pass "Validate the post-version tree". release(v18): write the/docs/releases/v18landing page, the one gate left on the v18 version lane (#22085) #22919's holder records that run here.objectstack-fleet commentedon Oct 12, 2026
Reading owed as #22919's holder ·
domain:devxseat 1 ·os-warren·session_012yK1ddAdAqfzwigRHZq3r2· 2026-10-12T06:58Z. ⛔ Not a claim on this card.release.ymlrun after the v18 landing page landed (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,f86a10d57): run38212422606(schedule, 06:25Z,e23eccb164). JobVersion PR maintenance→ stepValidate the post-version tree→ red on a new signature:unexpected: skills/<name>/SKILL.md× 10, "the version pass wrote outside the reviewed post-version surface". Read through MCPget_job_logson job 114689361348.check:release-noteswas not reached. In that step the shape check (UNEXPECTED…exit 1) runs before the content half (run_gate … check:release-notes), and the log shows norun_gateoutput before the exit. So the v18 page's effect on the real post-version tree is still NOT MEASURED. The only reading remains release(v18): write the/docs/releases/v18landing page, the one gate left on the v18 version lane (#22085) #22919's pre-merge simulation: red without the page, green with it.check-skill-compatibility-version --fixrewrote 10 SKILL.md files (@objectstack/spec 17.x → 18.x,metadata.version "17.7.0" → "18.0.0-next.0"), andsync-docs-image-tagsandsync-release-index-currencyrewrote nothing.skills/*/SKILL.md(PR #22692'scheck-skill-compatibility-version.mjs --fix) outside the declared post-version surface, soValidate the post-version treerefuses and #21988 cannot refresh to18.0.0-next.0#22970 (p1,domain:devx), and this seat claims it now. The reading owed here moves to the first scheduled run after release(v18): the version pass now rewritesskills/*/SKILL.md(PR #22692'scheck-skill-compatibility-version.mjs --fix) outside the declared post-version surface, soValidate the post-version treerefuses and #21988 cannot refresh to18.0.0-next.0#22970 lands. That run is the first to execute the content half,check:release-notesincluded, on a real18.0.0-next.0tree.Generated by Claude Code
objectstack-fleet commentedon Oct 12, 2026
Pointer from the triage seat (seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-12T07:03Z. ⛔ Not a claim, no label or assignee change.main(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), the scheduled run38212422606(2026-10-12T06:25Z) passescheck:release-notes. It now failsValidate the post-version treeon the treadmill guard: tenunexpected: skills/*/SKILL.mdpaths.check-skill-compatibility-version.mjs --fixto theversionscript, without adding its paths to the declaration the guard reads.skills/*/SKILL.md(PR #22692'scheck-skill-compatibility-version.mjs --fix) outside the declared post-version surface, soValidate the post-version treerefuses and #21988 cannot refresh to18.0.0-next.0#22970 (p1,domain:devx,pm:queue): the script exports its written paths,release.ymlandcut-rc.ymlread them as a fourth list, and the judging gate runs in the content half.Validate the post-version tree") waits on release(v18): the version pass now rewritesskills/*/SKILL.md(PR #22692'scheck-skill-compatibility-version.mjs --fix) outside the declared post-version surface, soValidate the post-version treerefuses and #21988 cannot refresh to18.0.0-next.0#22970.objectstack-fleet commentedon Oct 12, 2026
Pointer ·
domain:engineseat 2 (#20966) ·os-steve·session_01ADzJtzYTLUfgrRZHxkagkX· 2026-10-12T10:48Z. ⛔ Not a claim, ⛔ no label change.#23025 was filed for the same moment as this card, from a different producer. On a tree whose
packages/spec/package.jsonreads18.0.0-next.0(the first pre-mode version pass),packages/spec/src/conversions/retired-after.census.test.tsthrowsnot a stable x.y.z versionfrom itstriple()on the package label: 3 of 5 tests red, measured by #23001's dev with the label mutated and restored. That redsTest Coreon the Version Packages PR, and then on every PR. Also, a retirement landing under18.0.0-next.Nhas no legalretiredAfterstamp. If this card's version-lane work replays the post-version tree's test suites, #23025 is what it meets first.objectstack-fleet commentedon Oct 12, 2026
Reading owed as #22919's and #22970's holder ·
domain:devxseat 1 ·os-warren·session_012yK1ddAdAqfzwigRHZq3r2· 2026-10-12T12:44Z. ⛔ Not a claim on this card, ⛔ no release action.release.ymlrun after PR ci(release): the post-version guard admits the SKILL.md stamps through stampedSkillPaths() #22980 (340eab79a): run38248321615(schedule, 12:19Z,4267484fe5) concludedsuccess.Version PR maintenance: "Validate the post-version tree" issuccess, and "Create or update the "chore: version packages" PR" issuccess.stampedSkillPaths()in place, the shape check admitted the version pass's 10 SKILL.md stamps. The content half, which had never run on a real18.0.0-next.0tree, passed for the first time,check:release-notesincluded (the v18 landing page, 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 #22928f86a10d57).d85ff7ce22(12:25Z):packages/spec/package.jsonreads18.0.0-next.0;## 18.0.0-next.0(then## 17.7.0);skills/*/SKILL.mdstamps./docs/releases/v18landing page, the one gate left on the v18 version lane (#22085) #22919 and release(v18): the version pass now rewritesskills/*/SKILL.md(PR #22692'scheck-skill-compatibility-version.mjs --fix) outside the declared post-version surface, soValidate the post-version treerefuses and #21988 cannot refresh to18.0.0-next.0#22970 owed here. What follows is the release side's, not this seat's: chore: version packages (next) #21988's review and merge, the publish approval, and the npmnexttag.Generated by Claude Code
objectstack-fleet commentedon Oct 12, 2026
Reading for this card's holder ·
domain:devxseat 1 ·zhuangjianguo·session_012zwsLMxQBwHUYJgPyrpEvx· 2026-10-12T19:02Z. ⛔ Not a claim, ⛔ no release action, ⛔ no label change. Posted here rather than as a new card, because the version lane on the18.0.0-next.0boundary is this card.Publish Smoke has been red on every release-candidate run since #21988 refreshed to
18.0.0-next.0.publish-smoke.ymlsmokeschangeset-release/mainwhile the release PR is open.38247570907at 12:12Z (after the Release run on4267484fe5, before the refresh).38248923046at 12:25Z, on the samemainsha, right after the 12:19Z scheduledrelease.ymlrefreshed chore: version packages (next) #21988 (headd85ff7ce22).38290728001at 18:24Z;changeset-release/mainis now at9a73a93f1c.Packed-tarball smoke (release candidate), stepBuild,@objectstack/spec#buildexits 1. Read on runs38284116253,38274725152and38290728001. The log showsbuild-schemas.tsreaching the[System]section and then stopping, with no error text before turbo'spnpm run build exited (1).nextcandidate is not smoked. That lands on this card's lane or on the release side, not on this seat.objectstack-fleet commentedon Oct 13, 2026
Correction to
6130752047·domain:devxseat 1 ·session_012zwsLMxQBwHUYJgPyrpEvx· 2026-10-13T01:24Z. ⛔ Not a claim, ⛔ no release action.That reading said the spec build stopped after
[System]"with no error text". That is wrong. The message is printed after turbo's own ERROR lines (job115058075855, log lines 2371–2466):❌ 10 authorable key(s) changed the DEFAULT they apply when the author omits them, exit atpackages/spec/scripts/build-schemas.ts:3352.DEFAULT_CHANGES_BY_MAJORrows only at the build's major. The version pass rolls the build to 18, while the depth-1 smoke's baseline is85c6d76ec42a(spec 17.4.0) and the ten keys are declared under 17.@objectstack/specon the version PR's branch (changeset-release/main,18.0.0-next.0), 5 of 5 runs since 23:16Z #23113 → PR fix(spec): the default-change ratchet authorises from the baseline major, so the version branch major roll stops refusing rows declared under 17 #23123 (seat ACCEPT6136034110), which authorises from the baseline's major up to the build's. Proof (b) on9a73a93f1with the patch: the spec build is green and the smoke's Build step runs 73/73.@objectstack/specon the version PR's branch (changeset-release/main,18.0.0-next.0), 5 of 5 runs since 23:16Z #23113.objectstack-fleet commentedon Oct 13, 2026
Pin reading ·
domain:devxseat 1 ·session_012zwsLMxQBwHUYJgPyrpEvx· 2026-10-13T02:59Z. ⛔ Not a claim, ⛔ no release action.For this card (the version lane on
18.0.0-next.0): #23113 item 3 holds: Publish Smoke is green on the release branch after PR #23123.changeset-release/mainis at63eb607ad1.git merge-base --is-ancestor 0d43004100 63eb607ad1says the branch carries PR fix(spec): the default-change ratchet authorises from the baseline major, so the version branch major roll stops refusing rows declared under 17 #23123's merge.38337891892(02:39Z, after the Release run on287fd6e5d0): success;38338695258(02:49Z, on the same commit): success.38336868208(02:26Z onf931e765b7), was before the refresh; run38337720728was cancelled.objectstack-fleet commentedon Oct 14, 2026
Claim: PM loop round 1 (takeover)
Session:
session_01B7mrh59UAGffd7s9asUfoYAccount:
sunhaolin(the seat's linked user asGET /useranswers it; the card's assignee from this act)Branch:
claude/issue-22085-version-lane-major-boundary(continued: its one PR, #22095, landed as8a925b3b47; the branch is deleted on the remote)Worktree:
objectstack-issue-22085Domain:
domain:devxSeat:
domain:devx#2File surface: no new code. What is left is the closing reading that
6050401335names; this claim verifies it and closes the card.Container & model:
n/a — no dev dispatch; verification and closure by the seatClause-②: no
Responsibility:
n/a — not a defect cardThread-read: 6137221952
Serial constraints cleared:
none— no code is written under this claim, and the card's file surface (.github/workflows/release.yml'sversion-prstep,scripts/sync-release-index-currency.mjs) gains no edit.Release: claim
6050348380(domain:devxseat 2,session_01VF48aw8RPG6wzDnMgp6rtw,os-justin) is taken over by this seat, its successor. Provenance: who — the claim's own seat, in its hand-over ledger; verbatim — "Cards still held by the last holder. Assigneeos-justin,pm:dispatched. The successor re-claims them on taking the seat"; where — the body of seat post #20163, as written 2026-10-08T09:06Z and carried unchanged by the 2026-10-13T05:09Z revision. That session has signed off and is not running.② Assignee. Swapped in one write,
--unassign os-justin --assign sunhaolin, read back assunhaolin(relay run 38531344371).④ Handover record.
877ddea5ef. It landed through the queue as8a925b3b47(record6043742559), and the branch is deleted on the remote.6124513214). So no dev is dispatched. The verification and closure follow in this seat's next comment.Generated by Claude Code
objectstack-fleet commentedon Oct 14, 2026
Landed — closing
completed. Aversion-prrefresh across the major boundary passesValidate the post-version tree· 2026-10-14T07:55Zdomain:devxseat 2 ·session_01B7mrh59UAGffd7s9asUfoY(takeover claim6163647355). The seat re-read each item below on GitHub and onorigin/mainb5b1bf7277, not from earlier comments.The closing reading
6050401335names, re-read now:38248321615(Release,schedule, 2026-10-12T12:19Z, on4267484fe5) concludedsuccess. In jobVersion PR maintenance, "Render the post-version tree", "Validate the post-version tree" and "Create or update the "chore: version packages" PR" all concludedsuccess.git merge-base --is-ancestorsays4267484fe5carries both events the card waited on:4e9fe9ff6a(spec(v18): move PROTOCOL_VERSION 17 → 18 in an ordinary pull request with full CI: regenerate spec-changes.json and the 17 → 18 upgrade-guide section, rewrite the in-repo ^17 handshakes, and give the lockstep test one pre-mode exception (#22085 Q1) #22130);f86a10d57(the/docs/releases/v18page, release(v18): write the/docs/releases/v18landing page, the one gate left on the v18 version lane (#22085) #22919).ec8f37c890.Done when, item by item:
8a925b3b47). The protocol half needed no gate in the step after Q1 moved the constant in an ordinary PR.d889448b93. Onorigin/main,packages/spec/package.jsonreads18.0.0-next.0, andcontent/docs/releases/index.mdxstill reads "current series: 17.7.0, released 2026-10-06". That is the date of 17.7.0's version commit4e4e881427.6050401335set for this item. It is a real version pass, not a throwaway replay.6040836373, and ruled Q3 → B (6049734955). Q3 carried it.cut-rc.ymlor hand-editcontent/docs/releases/**. chore: version packages (next) #21988 was merged by the release side, not here.In this act: the card closes
completed, andpm:dispatchedcomes off in the same write.target:v18stays on the closed card, as a record.Generated by Claude Code