Skip to content

[finding] Check Changeset 在 opened 事件上先于 skip-changeset 标签落地而判红 —— 每个走 skip 路线的 PR 都要白跑一次重投(今日 6 例) #6260

Description

@os-zhuang

观察类发现,来自 2026-08-07 一整天 domain:spec-tooling 车道的派发实测。不影响任何用户能碰到的行为,也不会让错误的 PR 通过 —— 纯粹是每个走 skip-changeset 路线的 PR 都要额外付一次重投 + 一轮等待。按 PD#10 登记,未指派,交分诊定级。

机制

Check Changeset 门禁在 PR 的 opened 事件上就触发。而 skip-changeset 标签是 dev 在开完 PR 之后才打上去的 —— 两者之间有一个不可避免的窗口。门在窗口内读到的是「无 changeset、无 skip 标签」,于是判红。

#5625 之后该门读实时标签,所以标签落地后重投一次即绿,无需任何代码改动。也就是说这一红从来不是 PR 的缺陷,而是事件时序。

直接证据(本条立单当时正在发生的那一例)

PR #6258(#5331,新增 SKILL.md compatibility 对账门禁):

  • Check Changeset 在 head 104d0a259failure(run 31177486494 / job 92862633929,12:16Z);
  • 同一时刻读 PR:skip-changeset 标签已在位(labels = ci/cd, size/l, dependencies, skip-changeset);
  • 改动 3 个文件(scripts/check-skill-compatibility-version.mjs、根 package.json 脚本注册、.github/workflows/lint.yml),.changeset/*.md,且没有一个落在已发布包里 —— 即 skip-changeset正确档位;
  • 重投该 job 后转绿。

今日复发计数

同一形态今天在本车道至少 6 次:#6096#6102#6196#6200#6222#6258。每次处置都相同(重投一次),累计浪费的是排队与等待时间,不是判断力 —— 但它也训练出一种坏习惯:「Check Changeset 红了?先重投看看」。这条捷径在真·缺 changeset 的 PR 上同样会被套用,那才是真正的代价 —— 一道经常性假红的门禁,会把「读一下它到底在说什么」这个动作磨掉。

为什么值得记一笔,而不是继续人工重投

空 frontmatter changeset 已被 #6059/#5471 禁止,skip-changeset 标签因此是「本 PR 不发布任何东西」的唯一合法表达(三选一规则的一档)。也就是说这条假红不是边角路径,而是三分之一的正常路径,且会随 tooling/CI 类 PR 的比例上升而更频繁。

可能的修法(不预设,交分诊)

  1. 把触发事件收窄:去掉 opened,只在 labeled / unlabeled / synchronize 上跑 —— 最小,但要确认「开了 PR 之后再也不动」的情形仍会被覆盖到;
  2. opened 上给一个宽限:首次运行若判定为「无 changeset 且无 skip 标签」,不直接判红,而是等待/重查一次标签;
  3. 让 dev 先打标签再开 PR —— 流程侧规避,零 CI 改动,但依赖每个 dev 记得,且对已有 PR 无效(不推荐:这正是把机制问题转嫁成纪律问题)。

方向 1 看起来最干净,但 opened 上完全不跑意味着一个从头到尾没有标签、也没有 changeset 的 PR 要等到第一次 synchronize 才被拦 —— 是否可接受,需要看这道门在合并队列上的必需性(required check 集合),我没有量,所以不替维护者选。

边界

零运行时、零协议、零发布面;只动 .github/workflows/ 的触发条件或该门禁脚本自身。

关联:#5625(门改读实时标签)、#6059 / #5471(空 changeset 已被禁止)、#5292(changeset 三选一规则)、#4898(全空 changeset 集静默拖停 17.0.0-rc.2,即这套规则的来历)。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions