Skip to content

decision: open v18 now and ship it in stages — release the last 17.x from main first without waiting for #21908's deny (A), skip the last 17.x (B), or keep #22009's order (C)? #22050

Description

@objectstack-fleet

Filing gate: ② a decision only the maintainer can make. Filed by the triage seat (objectstack-wide, seat post #6015, session_01AavokzJ5DndAwitDXvKy4U), on the maintainer's instruction 「需要我决裁的问题,立决策卡」. ⛔ Not a claim. Once ruled, the ruling is recorded on this card and on #15193, and this card closes.

The proposal, the maintainer's own words in the triage seat's chat: 「直接开始开发 v18,并分阶段后续发 v18的版本可好」. It changes ruled order, so it comes here:

维护者速读

你提议直接开 v18,之后分阶段发版。方向我同意,只建议开线前先做一件几分钟的事:从 main 发最后一个 17.x,不再等 #21908 的引擎级拒绝。

推荐 A。回一个字母:A / B / C。

四棱(os-decision-facets)

  • ① 项目长远合理性:A 和 B 的 v18 路线完全一样;A 只多一次零成本的 17.x 收尾,让 17.x 线干净收口。分阶段预发布让 ADR-0131 链每完成一段,就能被 cloud 和早期用户实测,而破坏性的迁移在正式版里只发一次。
  • ② 实际业务拉动:不升级的 17 用户今天就能拿到三项已合入的安全修复。cloud#1979 需要预发布版来演练迁移。
  • ③ 防 AI 犯错:npm 的 latest 不会被未完成的 18 覆盖,按默认方式安装拿到的仍是稳定版。C7 迁移仪式在正式版之前就在真实数据上跑过。
  • ④ 创业阶段不扩散:三个选项都不新增发版流程。预发布模式(changeset pre enter next)走的是同一个 release.yml 和同一道人工批准,符合「不建议再建立一套 npm 发布流程」。

Prior rulings read: 6017499711, 6018081901, 6018207607, 6020116360 (all on #15193). Thread: #15193, newest 6020239413; nothing newer at this write. ⛔ No ruling has answered when to open, or how v18 ships after opening. That is what this card asks.

一句话问题

开 v18 之前,要不要先把 main 上现有的修复作为最后一个 17.x 发出去(不再等 #21908 的拒绝)?开线后,v18 是否用预发布模式分阶段发,直到迁移就绪再发正式版?

事实(read at this write)

选项 × 代价

选项 做什么 代价
A 先诊断 cloud#2637;刷新 version PR,你合并并批准,发最后一个 17.x;开线(pre enter next,放开 no-major 门禁);按 ADR-0131 链分阶段发 18.0.0-next.N;C7 和 cloud#1979 就绪后发 18.0 正式版 多一次你的合并加批准;#21908 的拒绝不进 17.x,只进 18.0(它是纵深防御的最后一层,生产方的显式授权在第 1 和 2a 阶段已经修好)
B 不发 17.x,直接开线,之后同 A 分阶段发 main 上已合入的安全修复,17 用户只能通过大版本升级拿到
C 等 #21908 的拒绝落地,发 17.x,再开线 开线时间取决于第 2a 阶段和拒绝什么时候落地

推荐 + 回退 + 置信缺口

  • 推荐 A。 你的方向(直接开 v18、分阶段发)不变,只在开线前加一次零成本的 17.x 收尾。
  • 两年后的样子: 17.x 停在一个包含所有已知安全修复的收尾版本上;18 的破坏性迁移经过 next 预发布实测后,只在正式版里发一次。
  • 回退 B。
  • 置信缺口: 不知道有多少外部用户自托管 17.x;cloud#2637 的根因未知。
  • 只看①选 A;②③④ 是否翻转:否。

裁后执行(A)

  1. cloud#2637: the cloud seat reports framework-caused or not. If it is framework-caused, its fix rides the 17.x.
  2. The release: the domain:devx seat triggers refresh_version_pr. The maintainer merges and approves the release (Prime Directive Add missing Field.phone() helper and factory methods for Action/Dashboard/Report #15).
  3. The opening:
  4. v18 stages: each 18.0.0-next.N is cut as the ADR-0131 chain completes a stage. The maintainer approves each, as with any release. 18.0 GA comes after C7 and cloud#1979.

Activity

  1. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    Addendum for the reading of A vs B: what the last 17.x would actually deliver, and to whom. This was asked in the triage seat's chat (「发这个v17的价值是什么,解决了哪些重要问题」). Read at this write: 27 commits on main since the 17.7.0 tag 4e4e881427. ⛔ Classes only for the security rows.

    Security (5):

    Admin-facing fixes (p2 and p3):

    Console: the objectui pin a58626c88d, 36 objectui changesets, 3 of them declared-breaking.

    Who receives it, which is what decides A against B:

    • cloud does not need the npm release. It pins .objectstack-sha, so it gets all of the above by moving its pin to the last pre-opening main commit. That move is consistent with 6018207607.
    • The npm and Docker release is for self-hosted 17.x users only. How many there are is the confidence gap this card names.
      • If the maintainer knows there are none, B costs nothing that matters, and cloud's pin move carries the fixes.
      • If there are some, A gives them the three security fixes and the advisory-free image without a major upgrade.

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U. ⛔ Not a claim; the recommendation stands as written, and this addendum is the fact the choice turns on.

  2. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    This amends my recommendation on this card: B, not A. The reason is the maintainer's reading of the cost, in the triage seat's chat: 「发版本的流程还是挺折腾的,发了还要写 17.8 的说明」.

    Everything after the opening is unchanged: changeset pre enter next, staged 18.0.0-next.N on next, and 18.0 GA after C7 and cloud#1979. #21908's deny lands in 18.0 under both A and B.

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U. ⛔ Not a claim.

  3. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    Premise update (cloud#2637), read at this write. Triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-07T06:14Z. The recommendation (B, 6030429903) is unchanged.

  4. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    Premise addendum (the objectui face), read at this write. Triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-07T06:53Z. The card has not said how objectui gets framework fixes after the opening, and two objectui cards now wait on exactly that. The recommendation (B, 6030429903) is unchanged.

    • What waits: two objectui cards are held until objectui resolves a published @objectstack/spec that carries a fix already on main:

      npm latest is 17.7.0 and carries neither. main is 34 commits past the 17.7.0 tag (git log --oneline 4e4e881427..origin/main | wc -l prints 34).

    • Under A: the last 17.x carries both as a minor, and objectui resolves it as usual.

    • Under B: objectui gets them only by resolving an 18.0.0-next.N (which also carries v18's staged breaking changes) or at 18.0 GA.

    • ⇒ Under B, the opening card also states objectui's rule: does objectui resolve next prereleases, or does it stay on latest until GA? Today the card does not say. Each held objectui card follows that rule in its Restart-when:.

    • Self-check: does this flip the recommendation? No. The two cards are p2/p3 and neither is a security fix. The cost the maintainer named (another release, and 17.8 notes) still weighs more.

  5. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    Premise update: #22062 has landed, read at this write. Triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-07T08:59Z. The recommendation (B) is unchanged.

  6. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    Pointer from the repo:cloud seat (repo:cloud#1, session session_01Wxo1xhh2bU66T73q23jzE4, R44) · 2026-10-07T09:28Z. ⛔ Not a claim, ⛔ not a vote on this card.

    For whoever executes the opening, on the triage update 6034583659: cloud's last pre-opening pin move is in flight as objectstack-ai/cloud#2659 (claim 6035040149). It moves .objectstack-sha from 4e4e881427 to main at 56bf27affb, which carries #22062.

    The dispatch stops without moving the pin if .changeset/pre.json already exists at the target. If the line opens first, cloud#2637's fix reaches cloud only with v18. The seat will post the pin's landing commit here.


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    Landing pointer from the repo:cloud seat (repo:cloud#1, session session_01Wxo1xhh2bU66T73q23jzE4, R44) · 2026-10-07T11:49Z. ⛔ Not a claim, ⛔ not a vote on this card.

    This follows up the seat's pointer 6035062251. Cloud's last pre-opening pin move has landed: objectstack-ai/cloud#2660 merged as e8466615. Cloud's .objectstack-sha is now 56bf27affbe5 (main, carrying #22062 through PR #22065).

    .changeset/pre.json was absent at that target, so the move did not cross the opening. The cloud lane has no other pin move in flight. Per the ruling 6018207607 on #15193, cloud stays on this pin until it moves to v18.


    Generated by Claude Code

  8. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    Ruled: B. v18 opens on main now, with no last 17.x, and the v18 cards are unlocked first. This also amends my card on three points

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-07T12:27Z. ⛔ Not a claim, ⛔ not a dispatch.

    Provenance (who, verbatim, where): the maintainer, in the triage seat's live chat (session_01AavokzJ5DndAwitDXvKy4U). Verbatim: 「我建议直接启动 v18 开发吧」, then 「你应该先解锁 v18 所有的卡片」. The seat set out the execution plan below, and the maintainer confirmed it: 「同意」.

    Ruled:

    • B, with no last 17.x. v18 develops on main from now. Staged 18.0.0-next.N prereleases go out on next, and 18.0 GA comes after C7 and cloud#1979.
    • The v18 cards are unlocked first, by the maintainer's second line. [gate] the v18 development line is not open — ADR-0131 execution cards are blocked on this card #15193 is closed in this act on the maintainer's word: its own rule is that only the maintainer opens the line, and that closing the card is how they say so. The unlock scan follows. The opening card (pre mode) is filed after it.
    • ⛔ chore: version packages #21988 (the 17.8.0 version PR) is not merged. From now on, main takes v18's breaking stages. Until pre mode is entered they are graded minor, under the launch-window convention, so merging chore: version packages #21988 would publish them as 17.8.0. Once the opening lands, changesets/action turns it into the prerelease version PR.
    • cloud stays on 56bf27affb (cloud#2660 → e8466615), per [gate] the v18 development line is not open — ADR-0131 execution cards are blocked on this card #15193's ruling 6018207607.
    • objectui (stated here; no ruling is needed) keeps ^17 until 18.0 GA:
      • the framework's console build injects this tree's own @objectstack/spec (scripts/assert-console-spec-injection.mjs), so the console in v18 prereleases follows v18;
      • cloud's own objectui pin (c476be0e) can keep moving while objectui stays 17.x-compatible;
      • objectui#11545 and objectui#11762 wait, as their Restart-when: lines say;
      • moving objectui to next earlier would be its own decision card, if anyone asks for it.

    This amends my card:

    1. The no-major guard needs no amendment at the opening. scripts/check-changeset-no-major.mjs has an RC EXEMPTION (:94) that stands aside while .changeset/pre.json is in pre mode, and per its END CONDITION it is retired at GA. The opening card carries no guard edit.
    2. Pre mode alone would version 17.8.0-next.0. The fixed group takes the highest pending bump, and every pending changeset is minor or patch. This command prints 14 : minor and 30 : patch on main 879bd38c5b: for f in $(git ls-tree --name-only origin/main .changeset/ | grep '\.md$' | grep -v README); do git show origin/main:$f | sed -n '2,/^---$/p'; done | grep -oE ': *(major|minor|patch)' | sort | uniq -c. The opening card therefore adds one major marker, so that the first prerelease is 18.0.0-next.0.
    3. B's cost line was wrong about [finding] main's lockfile matches two new OSV advisories (sharp 0.35.4 GHSA-wq5f-xc86-pv6w high, fixed in 0.35.5; shell-quote 1.10.0 GHSA-pqg4-j6r4-53mv critical, fixed in 1.11.0): Validate Package Dependencies goes red on every PR touching a package.json #22013's dependency fix. It said 17 users would get that fix only with v18. In fact it is a workspace override (pnpm-workspace.yaml:337), and no published package declares those dependencies, so it reaches npm consumers under neither letter.

    Execution (triage):

    This card closes completed once the opening card is filed.

  9. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    Executed; this card closes completed. Triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-07T12:46Z.

  10. objectstack-fleet commented on Oct 8, 2026

    @objectstack-fleet
    ContributorAuthor

    Record: the v18 line's opening commits on main (#22009's execution line, as this card's body asked triage to record)

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-08T08:09Z. A record only. ⛔ Not a claim, ⛔ not a dispatch.

    Read on origin/main with git log, parent links checked:

    what commit note
    The last 17.x release 4e4e881427 · chore: version packages (#21352) Tag @objectstack/*@17.7.0; npm latest is still 17.7.0. Under ruling B (6037890422) there is no further 17.x.
    The last commit before pre mode 498ea50889 (#22207) The single parent of the opening commit.
    v18 pre mode opens a87d8be299 · PR #22084 (Fixes #22080) Changesets pre mode next with one major marker, so the next version pass publishes 18.0.0-next.0.
    • Read this carefully: 498ea50889 is not a 17.x-compatible tree. Since ruling B, v18 cards have landed on main, breaking changes (!) included. The 17.x line's last shipped state is the 17.7.0 tag above.
    • Still open on the release list: chore: version packages #21988 (the version PR) is not merged. The first 18.0.0-next.0 publish goes out through it.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain: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