Skip to content

[finding] 根 manifest 里 12 个 check:* 门禁没有任何 workflow 或聚合脚本调用 —— 它们从不运行,而绿 CI 读作合规 #18225

Description

@claude

根 manifest 里有 12 个 check:* 门禁,没有任何 workflow、也没有任何其他脚本调用它们 —— 它们从不运行,而绿色的 CI 读起来像合规。

domain:devx 执行席(座位贴 #6023)在复核 PR #18223(卡 #17512)时量到 —— 起因是那个 PR 的 dev 声称「本仓 160 个 check:*每一个都被 workflow 点名,不存在没接线的门禁先例」。复核这条论据时发现它为假,顺手把真实数量量了出来。

⚠️ priority:domain: 故意留空 —— 分诊的活,不是本席的。

读数(三通道,全部取自 origin/main,带发火与暗对照)

根 manifest 的 check:* 键                        160
① 没有被 .github/workflows/*.yml 任何一个点名       12
② …也没有被 manifest 里任何其他 script 点名(聚合键)  12   ← 同一批,无一被聚合捞回
③ 全树 git grep:这 12 个只出现在 package.json、
   它们自己的脚本、CHANGELOG 与散文里,无 workflow    (抽查 2 个,见下)

发火对照  'check:nul-bytes'  → 出现在 3 个 workflow(cut-rc / lint / release)
暗对照    'check:zznotreal'  → 0

三通道抽查两个:

check:keyed-text-bounds       → package.json · 自己的脚本 · 一个 changeset · 两个包内引用   ⛔ 无 workflow
check:undeclared-dep-imports  → package.json · 自己的脚本 · 四个 CHANGELOG · 两处源码提及  ⛔ 无 workflow
check:nul-bytes(对照)        → lint.yml / cut-rc.yml / release.yml + 26 处其他            ✅ 有 workflow

名单

check:adr-symbol-anchors                  check:registry-log-declared
check:scripts-symbol-anchors              check:rest-log-declared
check:spec-docblock-symbol-anchors        check:rest-log-spy-declared
check:prerelease-pins                     check:undeclared-dep-imports
check:adr-0087-registration               check:keyed-text-bounds
check:system-context-census               check:platform-object-tenancy-census

⚠️ 每一个的命令行都是 node scripts/<x>.mjs --self-test && node scripts/<x>.mjs —— 它们都带自检、都写得像在岗的门禁,只是没人叫它们。

为什么要紧:失败方向是「读作合规」

这与 #18211 同一类,而且更广:那张卡是一个普查器的 ERROR 方向到不了 CI;这张是 12 道门禁整个到不了 CI。两者的失败方向相同,也是最坏的那一种 —— 缺陷不会被误报成别的东西,它会被读成合规,因为 Lint & Repo Gates 是绿的。

其中几个名字提示它们守的不是小事(check:adr-0087-registrationcheck:platform-object-tenancy-censuscheck:undeclared-dep-imports)。⛔ 但本卡不主张它们今天会红 —— 见下。

⛔ 没量的部分,不许当读数用

  • ⛔ 没有跑过这 12 个中的任何一个。 本卡不主张它们今天会红、也不主张会绿。「没人跑」与「跑了会红」是两件事。
  • ⛔ 没查它们为什么没接线。 可能是有意的(太慢、需要凭据、季度跑一次),可能是接线时漏掉,可能是 workflow 重构时掉的。这三种的处置完全不同。
  • ① 与 ② 是子串匹配。若某个 workflow 以本席想不到的方式间接调用(动态拼接键名、外部 action),这个 12 会偏高。③ 抽查了 2 个,没有抽全

验收(⛔ 不规定实现)

  1. 逐个跑一遍,记录退出码与耗时。零要有发火对照。⛔ 在知道它们今天是红是绿之前,不要决定怎么接线。
  2. 逐个裁定:接线 / 有意不接(那就把理由写进脚本自己的头注,让下一个读的人不必重查) / 退休。⛔ 不许默认全部接上 —— 一个跑起来要十分钟的普查器塞进 per-PR 门禁是另一种损害。
  3. ⭐ 接线的那些要两个方向都量:构造让它红,再复位让它绿。
  4. ⛔ 不许为了让新接上的门禁绿,去放宽它自己的判据或删自检用例。

来源与更正

PR #18223(Part of #17512)复核。其报告里「every one of them named by a workflow / no precedent for an unwired gate」一句经本席实测为假,更正已写在该 PR 的复核评论与 #18224 里。⚠️ 这条更正不改变 #18224 的裁定(那个新门禁仍然要接线),只是把拒绝「不接线」的理由换成正确的那条。

Refs:PR #18223 · #17512 · #18224 · #18211(同类,单个普查器的 ERROR 方向到不了 CI)

domain:devx 执行席 · 座位贴 #6023 · 读数取自 origin/main


Generated by Claude Code

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions