Skip to content

空 frontmatter changeset 相对 skip-changeset 标签零收益、单向风险 —— 「禁止空 changeset 进 .changeset/」的决策证据(#5292 结案后无处存放) #5471

Description

@os-zhuang

这不是待办工单,是一条决策证据的存放点。 不带 pm:queue、不指派,由维护者裁定是否立项。

为什么单独开一条

#5292 提出过一个备选方案:「若认为空 changeset 在某些场景下确实是正当声明,那就需要在闸门之外再加一道:禁止空 frontmatter 的 changeset 进入 .changeset/,让『声明』只走标签这一条路。」

devx 车道 2026-08-05 的分诊把它明确划到本单之外(牵动 changesets/action 的输入语义与发布机器行为,#4898/#4899/#4901 一族),留待维护者认可后另行立项。

问题在于:#5292 会被 PR #5467 关掉,这个提案连同下面这条证据就跟着一起沉底了。所以把它单独记在这里。

新证据:空 changeset 相对标签是零收益、单向风险

处理 #5292 时顺手实测了「空 frontmatter changeset 到底产出了什么」,结论比原 issue 的描述更强:

它什么都不产出。

  • 取三个已被 changeset version 消费过的空 changeset(adr-0044-revise-service-owned-note、ci-node-22-pin、duplicate-fix-guard),把各自正文原句 grep 全仓 CHANGELOG.md → 各 0 处命中;
  • 对照组:任取一个非空 changeset 的正文首句 → 命中 packages/spec/CHANGELOG.md 与 packages/cli/CHANGELOG.md,2 处。

机制上也讲得通:空 frontmatter 不点名任何 package,summary 是挂在 release 上的,零 release 即零挂载点,正文因此进不了任何 CHANGELOG。

于是两条出路的收益/风险表变成完全单向:

skip-changeset 标签 空 frontmatter changeset
满足 Check Changeset 闸门 是 是
产出 CHANGELOG 条目 否 否(实测)
是否成为 changesets/action 的输入 否 是
全空时触发 0 秒静默不发版分支(#4898) 不可能 可能

即:空 changeset 没有任何标签给不了的东西,却独家带来 #4898 的风险面。它作为「声明」手段没有存在理由 —— 这正是「干脆禁掉」这个方案的核心论据,而在写 #5292 时这一条还只是推测。

现状盘点(origin/main @ 61fde5e44)

  • .changeset/*.md(不含 README)共 1065,其中空 frontmatter 172;
  • pre.json 为 mode: pre / tag: rc,记录 860 个已消费 id;那 172 个空文件里 140 个已记录(RC 模式保留的残留)、32 个未记录(下一次 release run 的待消费输入);
  • 32 个里 26 个在历史根提交即存在(无法再归因),6 个可归因且全部来自只碰非发布路径的 PR —— 未发现无主残留;
  • 0 秒分支当前未被触发:待消费的 changeset 里还有 173 个非空,hasNonEmptyChangesets 为真。

明细见 PR #5467 的正文。

若要立项,值得先想清楚的两点

  1. 既有的 172 个空文件怎么办。 直接禁止新增 + 存量豁免?还是随下一次 changeset pre exit 一并清掉?后者要确认 changeset version 对空文件的删除行为(本次未验证)。
  2. 禁在哪一层。 加一道 PR 闸门(和 Check Changeset 同层,只拦新增)最轻;改 changeset 配置/包装脚本让它压根写不出空 frontmatter 更彻底,但会碰发布机器。这两者的取舍属于发布面,不该由 devx 车道自行决定。

相关:#5292(文案已由 PR #5467 修正)、#4898(被静默卡死的那次发布)、#4899、#4901。
出处:PR #5467 的验收过程。

Activity

  1. os-zhuang commented on Aug 5, 2026

    @os-zhuang
    ContributorAuthor

    发现分诊轮:转 needs-user-decision(摘 finding,保留 domain:devx)。理由:本单自陈是「禁止空 changeset 进 .changeset/」的决策证据存放点、由维护者裁定是否立项 —— 这是 决定待做,不是观察持有;实测证据(零收益、单向风险表)已齐,存量 172 个的处置与禁在哪一层两问随裁决一并定。准了 → 按裁定层级立项回队;不准 → 记 hold 三要素。本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  2. claude commented on Aug 6, 2026

    @claude
    Contributor

    裁决(2026-08-06):方案 A——PR 闸门禁止新增空 frontmatter changeset。

    与 Check Changeset 同层加闸:新增的空 frontmatter changeset 直接红(指向 skip-changeset 标签路径);存量 182 个豁免不动。依据:实测文案劝阻无效(#5467 已合,空文件仍一天净增 10 个),每个新空文件都是未来 #4898(0 秒静默不发版)的输入;「tests/docs-only 声明只走标签一条路」单通道收敛。

    存量清理留到 changeset pre exit 时另单处理(届时验证 changeset version 对空文件的删除行为)——A 不碰发布机器、可秒回滚。量级 S。

    经办:PM 会话 session_01GcjbQLUQKysMU9uXB34iyv;维护者 2026-08-06 审阅决策简报后授权按建议执行(否决窗口:可评论/重开推翻)。


    Generated by Claude Code

  3. os-zhuang commented on Aug 6, 2026

    @os-zhuang
    ContributorAuthor

    【裁决落地】维护者 2026-08-06 批复全舰队决策箱评估报告(批复「同意」),本单裁定:

    准立项——禁止空 frontmatter changeset 进 .changeset/:① 闸门落 PR 层(最轻,不碰发布机器/changeset 配置);② 存量 172 个空文件禁新增 + 豁免,不随 pre exit 清(避免动发布态)。实测证据(零 CHANGELOG 产出 + 独担 #4898「0 秒静默不发版」风险)成立。

    流转:摘 needs-user-decision → pm:queue,归 devx 车道。

    评估与落地会话:session_01N3uGFF8teXbpgtbEJ1aYXu


    Generated by Claude Code

  4. self-assigned this
    on Aug 6, 2026
  5. hotlong commented on Aug 6, 2026

    @hotlong
    Contributor

    认领:PM 循环第 3 轮(devx 车道)
    会话:session_01BDmDsu2575gDxeMCxXhDE3
    分支:claude/issue-5471-ban-empty-changeset-gate
    Worktree:objectstack-issue-5471
    域:domain:devx
    文件面:.github/workflows/pr-automation.yml(Check Changeset 步骤)或配套 scripts/ 新脚本、.changeset/(仅豁免清单如需)(越界即停,报告说明)

    按 10:44Z 已批裁决执行:PR 层闸门,新增空 frontmatter changeset → 红并指向 skip-changeset 标签路径;存量 172 豁免不动;⛔ 不碰发布机器/changeset 配置。与 #5947 并轨:同一 PR 双 Fixes(见该单认领)。⚠️ 同文件 #5620(allow-major 步骤)pm:blocked 休眠中,⛔ 不碰那一步。


    Generated by Claude Code

  6. hotlong commented on Aug 6, 2026

    @hotlong
    Contributor

    验收(devx 车道,会话 session_01BDmDsu2575gDxeMCxXhDE3):ACCEPT → PR #6059(双 Fixes 并轨 #5947),已转 ready 并挂 auto-merge —— 平台故障波中 auto-merge 会在 required 集转绿时自动入队,无需人工盯。

    交付摘要(按 10:44Z 已批裁决):


    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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions