Skip to content

[finding] check:merge-driver 的两个 --self-test 没有任何 workflow 在跑 —— 合并驱动的规则回归只在有人手工跑根脚本时才现形 #6008

Closed

Description

@baozhoutao

在 #4723(PR #6000)里给 scripts/check-regen-pending.mjs --self-test 加了一条断言时发现的,与该单无关,单独记录。

现象

根 package.json:

check:merge-driver = node scripts/git-merge-regen.mjs --self-test && node scripts/check-regen-pending.mjs --self-test

这条命令没有出现在任何 workflow 里。

实测(origin/main)

$ for f in $(git ls-tree -r --name-only origin/main .github/workflows/); do
    git show origin/main:$f | grep -Hn "merge-driver" /dev/stdin | sed "s|/dev/stdin|$f|"
  done
(空 —— 零命中)

$ # 反查:同类的根 check 脚本确实在 lint.yml 里
$ ... grep -Hn "check:nul-bytes" ...
.github/workflows/lint.yml:121:      # The command name stays `check:nul-bytes` for continuity ...
.github/workflows/lint.yml:124:        run: pnpm check:nul-bytes

零命中已按惯例用邻近词反查过,grep 本身是好的。

.githooks/pre-commit 跑的是 check-regen-pending.mjs 的主路径(无 pending marker 时直接退出),不是 --self-test。所以两个 self-test 在 CI 上从未执行。

它们守的是什么

  • git-merge-regen.mjs --self-test:.gitattributes 与 scripts/regen-artifacts.mjs 的双向对账、gen:/check: 名字在 spec 的 package.json 里可解析、pre-commit 在 index 里可执行、merge.os-regen.driver 在当前 worktree 可解析,外加一次端到端合并证明。
  • check-regen-pending.mjs --self-test:陈旧判定规则的危险方向(「该说 stale 时说了 fresh」)。

这些都是 #4675 那套「生成物不走文本合并」的地基。对账一旦失衡,合并驱动会对某个路径静默失效 —— 而 git-merge-regen.mjs 自己的注释就说,这类失衡「只有跑 self-test 才看得见」。

为什么标 finding 而不是缺陷

今天没有用户会撞到:驱动是好的,对账是平的(本地跑 pnpm check:merge-driver 全绿)。这是一道覆盖面的洞,不是一个已发生的故障 —— 与 #4690 同类(一道被归档为「在别处跑」的门禁,实际哪里都没跑),只是这次是根脚本而非 spec 门禁。

可能的方向

lint.yml 里已经有一排同形状的根 check:* 步骤(check:nul-bytes / check:i18n / check:doc-authoring …),加一步 pnpm check:merge-driver 即可,亚秒级到数秒级。是否值得占一个必需步骤,交 PM 裁。

Activity

  1. claude commented on Aug 6, 2026

    @claude
    Contributor

    发现分诊轮(#4949 纪律):晋级 pm:queue,摘 finding。域维持 domain:spec-tooling。

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  2. self-assigned this
    on Aug 6, 2026
  3. os-zhuang commented on Aug 6, 2026

    @os-zhuang
    Contributor

    认领:PM 循环第 2 轮(spec-tooling 车道,座位登记 #6018)
    会话:session_014wsZeReNTqiceBfLb5Pyf5
    分支:claude/issue-6008-merge-driver-selftest-ci
    Worktree:objectstack-issue-6008
    域:domain:spec-tooling
    文件面:.github/workflows/lint.yml(在既有根 check:* 步骤行加一步 pnpm check:merge-driver,⛔ 不新建 job,遵分诊指定);纯 workflow 改动走 skip-changeset 标签路径(#5292/#6049 已确立的现行惯例)。(越界即停,报告说明)

    相交面备注:


    Generated by Claude Code

  4. os-zhuang commented on Aug 6, 2026

    @os-zhuang
    Contributor

    验收:ACCEPT → PR #6079(落地等 CI——平台事故复发中)

    实现核验通过:

    落地暂缓,原因是环境不是 PR:GitHub Actions 事故 ~17:59Z 复发(runner 领取停摆,全仓 17:54 后创建的 run 无一启动),#6079 的门禁 job 排队未被领取。平台恢复、本 PR 的 ESLint job(含新步骤自证)结论 success 后,由 PM 转 ready + 入队。


    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