Skip to content

[Decision] Release cadence: a week of merges is about 1,700 PRs, so each QA-gated release carries a very large delta and app repos wait days to install fixes #29466

Open

Description

@objectstack-fleet

director#1 · os-support-ai · session_01WGufzg12BtjFc5rHp7YD1J
Ruled: 6663894403 · letter B · 2026-11-05T16:47Z (lifts the suspension of 6583414011)

Filing gate ②, a decision only the maintainer can make (every publish is the maintainer's own act, AGENTS.md Prime Directive 15). The maintainer, in the director session, 「同意」 to the director's offer to file this card after the project assessment. ⛔ Not a claim. Reader who acts: the maintainer rules; then the domain:devx seat for any workflow change, and the director seat's daily summary for the cadence reminder.

维护者速读

  • 问题:合并速度约每周 1,700 个 PR,发布是人工 QA 把关后由您手动发,所以每次发布带的改动非常大,下游应用仓要等好几天才能装到修复。
  • 实测:18.0.0(10-20)、18.1.0(10-24)、18.2.0(10-27)约 3–4 天一发;18.3.0 的发版测试从 10-29 开始,现在第 4 波,刚出一轮 23 PASS / 4 FAIL;Version Packages PR chore: version packages #26517 已开 6 天,+57,972 / −17,952 行、1,354 个文件,待发 changeset 1,088 个。今天的决策卡 fix(plugin-security): an app permission set's readable:false on a sys_* field also masks platform admins who hold that set #29106 就是应用仓在 18.2.0 上实测出来的。
  • 推荐 B:稳定版照旧走 QA 与您的批准;另加一个 next 预发布通道,每天从 main 发一次(仍是您点批准),应用仓可以立刻装到修复。
  • 代价:您每天多一次批准点击;发布 workflow 要加一条快照发布路径(Tier H,需您批准)。
  • 您要做的一个动作:回一个字母(A / B / C)。

Measured

reading value re-check
18.x publish dates (npm time) 18.0.0 10-20 12:51Z · 18.1.0 10-24 09:11Z · 18.2.0 10-27 06:20Z npm view @objectstack/spec time --json
PRs merged 2026-10-26 → 11-02 1,776 search is:pr is:merged merged:>=2026-10-26
Version Packages PR #26517 open since 10-27 06:17Z; +57,972 / −17,952; 1,354 files GET /pulls/26517
pending changeset files on main 1,088 count .changeset/*.md other than README.md
18.3.0 release sweep #27377 open since 10-29; wave 4 run #28981: 23 PASS / 4 FAIL GET /issues/27377

What would make the delta small instead: a release every day, or a channel that is installable without waiting for the sweep. Neither exists today; next was last used for 18.0.0-next.0 … next.5 under Changesets pre mode, exited by #24528.

Governing text

  • AGENTS.md Prime Directive 15: 「A version release is performed by the maintainer, by hand — no AI seat publishes, tags, cuts a Release, or triggers a release, and none merges the Version Packages PR.」 Every option keeps this.
  • ADR-0125: the release is triggered by the push that lands the Version Packages PR and held at the release environment approval, which is the maintainer's publish authorisation.
  • ADR-0087: 「Every major is published to the next dist-tag at least one RC cycle before」 it goes latest; nothing in it covers minors or patches.

Options

what it does what a customer notices workload
A Fixed stable cadence, e.g. Tuesday and Friday: the release goes out on the day; the QA checklist runs continuously on main instead of as a per-release wave, and a FAIL blocks the release only when it meets the release-board test (target:*); other FAILs become fix-forward cards. Fixes reach latest within 3–4 days at most; each release is about half today's delta. No workflow change. Process change in the release sweep (domain:devx, checklist-test) · 1 card · no precedent.
B Stable stays as today. Add a next snapshot channel: once a day the maintainer approves a snapshot publish (changeset version --snapshot, --tag next) from main. App repos pin next when they need a fix now. App repos install a fix the next day; latest users see no change. release.yml gains a snapshot lane (Tier H, the maintainer approves the PR) · 1–2 PRs · no precedent for snapshots here; precedent for a next channel: 18.0.0-next.0–5 under pre mode. Plus one approval click a day.
C Keep today's process: release when the RC sweep closes. App repos wait for the sweep; deltas stay at about a week of merges. None.

四轴分析

  • 项目长远合理性:两年后成熟平台的发布形态是「稳定版按 QA 节奏 + 每日可安装的预发布通道」,Next.js 的 canary、React canary、Supabase CLI 的 beta 通道都是这样;稳定版不必为了快而降低把关。B 是这个形态;A 用节奏换增量大小,但仍要在快和稳之间二选一;C 让每次发布越来越大,出问题越难定位。
  • 实际业务拉动:有。应用仓按「可安装」解锁(跨仓解锁判据),今天 fix(plugin-security): an app permission set's readable:false on a sys_* field also masks platform admins who hold that set #29106 等卡就是应用仓在 18.2.0 上实测的;修复在 main 上已合,用户却装不到。
  • 防 AI 犯错:发布增量越大,发布后回溯哪个 PR 引入问题越难;B 让应用仓每天在真实安装面上验证,问题更早响亮暴露。A 也缩小增量。C 最差。
  • 创业阶段不扩散:A 不新增任何面;B 新增一个预发布通道和一条 workflow 路径,外加您每天一次点击;C 最省。

os-decision-facets

自检:只看①选 B;②③④ 是否翻转:否(④ 只影响时序:可先试行两周)。

推荐:B。 A 不取:它用节奏缩小增量,但每次仍要在 QA 完整性和速度之间让步。C 不取:增量每周约 1,700 个 PR,持续变大。置信缺口: 快照版本号会在应用仓的锁文件里出现,应用仓多久升一次 next 没有实测;本仓没有快照发布的先例,release.yml 的改动规模未测。

Analysis-tier: claude-opus-5-5 (served at filing; not CONTRACT_REVIEW_TIER).

裁后执行

  • A: one domain:devx card: continuous checklist runs on main and the release-board test as the only release block; the director's daily summary names the next release day.
  • B: one domain:devx card for the snapshot lane in release.yml (Tier H, the maintainer approves), quoting this ruling; app-repo seats are told the channel exists; a two-week trial, then the director reports usage.
  • C: this card closes not_planned.

Activity

  1. added
    needs-user-decisionBlocked on a maintainer decision — do not dispatch; decision cards only, never on a PR
    on Nov 2, 2026
  2. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    director#1 · os-support-ai · session_01WGufzg12BtjFc5rHp7YD1J

    Brief-claimed-by: session_01WGufzg12BtjFc5rHp7YD1J · batch #457 · 2026-11-02T15:56Z

    ⛔ Not a claim on the work. The director seat presents this card to the maintainer in batch #457, in the director session, with the analysis on this body.

  3. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: p2 · domain:devx · decision card · 2026-11-02T16:06Z

    ⛔ Not a claim.


    Generated by Claude Code

  4. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    director#1 · os-support-ai · session_01WGufzg12BtjFc5rHp7YD1J

    Ruling: batch #457 item 2 · letter B · maintainer 「同意」 2026-11-02T17:12Z

    • Record: batch [WIP] Update action run logic for improved monitoring #457 as presented in the director session, B recommended for this card; the maintainer answered 「同意」, read as the recommended letters. Brief-claim 6581691182.
    • Letter B: stable releases stay as today (QA sweep, the maintainer's approval under ADR-0125). A next snapshot channel is added: once a day the maintainer approves a snapshot publish (changeset version --snapshot, --tag next) from main; app repos pin next when they need a fix now. AGENTS.md Prime Directive 15 is unchanged: every publish remains the maintainer's own act. Two-week trial, then the director reports usage on this card.
    • Workload of the chosen letter: release.yml gains a snapshot lane (Tier H, the maintainer approves the PR), 1–2 PRs, no snapshot precedent here (precedent for a next channel: 18.0.0-next.0–5 under pre mode); plus one approval click a day.
    • Exit stroke and the release.yml card are the domain:devx seat's (triage 6581920525).
  5. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    director#1 · os-support-ai · session_01WGufzg12BtjFc5rHp7YD1J

    Ruling suspended · 2026-11-02T17:15Z

    • The ruling comment 6583414011 (batch [WIP] Update action run logic for improved monitoring #457 item 2, letter B, read from the maintainer's 「同意」) is suspended, not in force. While it was being written, the maintainer asked in the director session, verbatim: 「29466 发版本节奏还是我人工发布」「29466 你的方案具体说一下」「目前的发版本流程支持吗?需要怎么改造」.
    • So the maintainer has not ruled this card yet. ⛔ No Ruled: line goes on the body, no lane acts on 6583414011, and the card stays needs-user-decision. The director answers the three questions in the session and records the ruling here only on the maintainer's next answer.
  6. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    Ruling: batch 2026-11-05/1 item 5 · #29466 · letter B · maintainer 「29029 29425 29918 30461 29466 同意」 2026-11-05T16:47:09Z

    thread · os-elon-musk · session_016WV4cxaQxzxGCx9xsyjVWu · written 2026-11-05T17:05Z

    The maintainer answered batch 1 of the 总监决裁 presentation in the project thread (five cards, one recommendation each) with 「29029 29425 29918 30461 29466 同意」, read as the recommended letter on every card. Presentation: /mnt/project-files/director-batch/2026-11-05-batch-1.md (project files). ⛔ Not a claim.

    What the ruling binds

    This lifts the suspension of 6583414011 (2026-11-02T17:15Z). The maintainer's three questions were answered in the project thread before this answer:

    1. Every publish stays the maintainer's own act (AGENTS.md Prime Directive 15). The same holds for each snapshot.
    2. The stable channel is unchanged. A next snapshot channel is added on top.
    3. Today's release.yml does not support it. Its only publish paths are the version-commit push and the repair dispatch, and ADR-0125 D1 publishes the version commit only.
    • B: stable releases stay as today. That is the QA sweep, the Version Packages PR, and the maintainer's approval at environment: release, publishing to latest.
    • Added: a maintainer-approved next snapshot from main, proposed daily. It is a dispatch-only lane. It requires the full battery green at that commit, runs changeset version --snapshot next in the workspace only (never committed), and runs changeset publish --tag next --no-git-tag. It is held at environment: release like the stable publish. It pushes no tag, creates no GitHub Release, never touches the Version Packages PR, and ⛔ never moves latest.
    • App repos pin next when they need a fix now.
    • Two-week trial, then the director reports usage on this card.

    Workload of the letter

    domain:devx, two Tier H PRs:

    1. An ADR-0125 amendment that admits the snapshot lane next to D1.
    2. The release.yml snapshot lane with its guard.

    There is no snapshot precedent here (precedent for the next channel: 18.0.0-next.0–5 under pre mode). Before the first real snapshot, a dry run checks that changeset version --snapshot rewrites the 69-package fixed group and its workspace:* ranges correctly. Context: 18.3.0 published 2026-11-03T15:15Z, 7 days after 18.2.0; 214 changesets pending on main at b17dbcf2; the npm next tag still points at 18.2.0.

    Execution

    The domain:devx seat files the two cards; label strokes are the lane seat's.


    Generated by Claude Code

  7. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · marchtian · session_017ihL2ebbZkr2QAEG1x7UC8

    Written 2026-11-05T17:01Z.

    Ruling-ref: 6663894403

    Out of the decision box on ruling B. The two Tier H cards the ruling names are filed: #30590 (ADR-0125 amendment, pm:queue) and #30591 (release.yml next snapshot lane, pm:blocked on #30590). This card moves to pm:on-hold: nothing is left to build here, and the only remaining act is the director's usage report after the two-week trial.

    Restart-when: 14 days after the first next snapshot published by release.yml's snapshot lane (#30591), the director reports usage on this card

  8. added
    pm:on-holdDecision made, deliberately deferred — no dispatch, no nag; restart condition in the hold comment
    and removed
    needs-user-decisionBlocked on a maintainer decision — do not dispatch; decision cards only, never on a PR
    on Nov 5, 2026
  9. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · marchtian · session_017ihL2ebbZkr2QAEG1x7UC8

    Ruling: #29466 follow-up · next snapshot cadence · option A, a daily scheduled preflight that stops at the approval · 2026-11-06T05:42Z

    Recorded by the lane seat. The maintainer chose option A on a decision card in the project thread at 2026-11-06T05:41Z. The card asked 「next 快照要不要改成每天定时发?」 and offered three options:

    • (A) 每天定时预检,停在批准 (a daily preflight that stops at the approval, chosen);
    • (B) 每天全自动发布 (fully automatic daily publish);
    • (C) 先手动试用两周再定 (keep the dispatch-only lane for the two-week trial).

    ⛔ Not a claim.

    Why a follow-up was needed

    The 2026-11-05 amendment to ADR-0125 (merged e8a9387ef6) says "proposed daily" is a cadence of proposals, not a trigger: "no schedule and no push can start it". PR #30799, the lane, is dispatch-only. The maintainer noted that main lands about a hundred PRs a day, so every day has something to ship. He asked that the daily proposal itself start the preflight.

    What the ruling binds

    1. A schedule trigger starts the snapshot lane's preflight once a day. It is the same preflight as a dispatch: the commit at distance zero, the RC-cycle read at that commit and at main's tip, the debut rule, and the dry run.
    2. When the preflight passes, the snapshot job waits at environment: release. It publishes only after the maintainer approves. ⛔ The approval stays a human act, and Prime Directive 15 is unchanged: no seat dispatches the lane or approves its deployment.
    3. A run nobody approves is the system working, not a state to clear. The next day's run supersedes it. The stable prompt sweep stays untouched.
    4. Everything else in the 2026-11-05 amendment stands: next only, never latest, no debut, workspace only, no tag, no Release, no Version Packages PR touch.
    5. Option B (no approval) was not chosen.

    The ADR text needs an amendment, because the merged text forbids a schedule start. The card filed for this carries the amendment and the release.yml trigger in one PR, as the 2026-09-29 amendment shipped with its implementation (#20613).

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

    domain:devxDomain lane — seat card indexed by label:pm:seatpm:on-holdDecision made, deliberately deferred — no dispatch, no nag; restart condition in the hold commentpriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions