Repository navigation
空 frontmatter changeset 相对 skip-changeset 标签零收益、单向风险 —— 「禁止空 changeset 进 .changeset/」的决策证据(#5292 结案后无处存放) #5471
Description
Activity
- added and removed
on Aug 5, 2026 发现分诊轮:转
needs-user-decision(摘 finding,保留domain:devx)。理由:本单自陈是「禁止空 changeset 进 .changeset/」的决策证据存放点、由维护者裁定是否立项 —— 这是 决定待做,不是观察持有;实测证据(零收益、单向风险表)已齐,存量 172 个的处置与禁在哪一层两问随裁决一并定。准了 → 按裁定层级立项回队;不准 → 记 hold 三要素。本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
裁决(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
【裁决落地】维护者 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
认领: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
验收(devx 车道,会话
session_01BDmDsu2575gDxeMCxXhDE3):ACCEPT → PR #6059(双 Fixes 并轨 #5947),已转 ready 并挂 auto-merge —— 平台故障波中 auto-merge 会在 required 集转绿时自动入队,无需人工盯。交付摘要(按 10:44Z 已批裁决):
- 新增
scripts/check-empty-changeset.mjs+ Check Changeset 作业接线:PR 新引入空 frontmatter changeset → 红、点名文件、指向skip-changeset路径、引用 空 changeset 会静默卡死已 version 的发布:Release run 全绿,但 npm 和 Docker 什么都没发(17.0.0-rc.2 现在就卡着) #4898。 - 豁免为规则而非清单:「HEAD 空 且(base 无 或 base 非空)才违规」—— 天然豁免存量 182 份(实测,裁决记录的 172 为旧值),同时堵住「掏空存量非空文件」这个
--diff-filter=A盲区绕过口;对 origin/main 自跑绿 = 豁免机制的真数据证明。 - self-test 21 断言建真临时 git 仓跑同一
scan();真仓双向反证(加空文件红→撤绿、掏空红 kind=emptied、邻近非空/存量改正文均不误伤);解析器与独立 awk 计数逐位相同(1230/182)。 - 已发布 skill 变更的 changeset 路线先例与 #5292 现行处方冲突(空 frontmatter vs skip-changeset 标签) #5947 半边:处方路线 2 显式列入
skills/**并正面驳掉「没有包可署名⇒空文件」的自我复制推理;路线 3 标 (CLOSED)。⛔ pr-automation.yml 的 allow-major 步骤仍从事件载荷读标签:#5580 同款竞态的孪生体(pre-mode 期间休眠) #5620 的 allow-major 步骤 grep 零命中;发布机器零触碰。 - 验收特别记录(闸门类 PR 固有缺口):本 PR 自带 skip-changeset,新步骤在本 PR CI 上按设计未执行 —— 行为由 self-test + 真仓反证背书,非本 PR 绿色背书。首个非豁免 PR 过闸即实证;闸门 fail-closed(base 缺失即红),若出现假红,处置是修 checkout 深度而非回滚。本座位将在下一个带 changeset 的 devx PR 上主动观察首跑。
- 门禁族 job 双绿;其余红为 15:14Z 起 GitHub Actions 波状故障(job 级验签:Set up job 即死,零代码执行),非本单缺陷。
Generated by Claude Code
- 新增
- added a commit that references this issue
on Aug 7, 2026 - added a commit that references this issue
on Aug 11, 2026 - added a commit that references this issue
on Sep 17, 2026 - added 3 commits that reference this issue
on Sep 28, 2026
这不是待办工单,是一条决策证据的存放点。 不带
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 处命中;packages/spec/CHANGELOG.md与packages/cli/CHANGELOG.md,2 处。机制上也讲得通:空 frontmatter 不点名任何 package,summary 是挂在 release 上的,零 release 即零挂载点,正文因此进不了任何 CHANGELOG。
于是两条出路的收益/风险表变成完全单向:
skip-changeset标签即:空 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 的待消费输入);hasNonEmptyChangesets为真。明细见 PR #5467 的正文。
若要立项,值得先想清楚的两点
changeset pre exit一并清掉?后者要确认changeset version对空文件的删除行为(本次未验证)。changeset配置/包装脚本让它压根写不出空 frontmatter 更彻底,但会碰发布机器。这两者的取舍属于发布面,不该由 devx 车道自行决定。相关:#5292(文案已由 PR #5467 修正)、#4898(被静默卡死的那次发布)、#4899、#4901。
出处:PR #5467 的验收过程。