Skip to content

[follow-up] PR #2 dogfood 揭示两个预存问题:CI repro 豁免 + Matrix baseline pnpm test 失败 #3

Description

@libz-renlab-ai

来源:PR #2 dogfood 跑了第一次远程评审 workflow,验证机械全部工作,但 verdict=fail —— 揭示 两个非本 PR 引入的预存问题

Gap 1: fixtures/repro-specs/hook-moment-block.ts 是 Windows-only + 手工预置

现象:Ubuntu CI 上跑 tsx scripts/verify/repro-cli.ts fixtures/repro-specs/hook-moment-block.ts --no-gif 输出 verdict=fail

根因:spec(第 22 行)显式设 baseline.ref = "HEAD",设计成「同代码、不同 env(USERPROFILE/HOME)」数据驱动差异 —— 前置依赖是 $TA_DEMO_STAGE/home-empty$TA_DEMO_STAGE/home-loaded 两份知识库目录已备好(见 docs/acceptance/2026-05-14-hook-moment-block/recording/README.md)。Ubuntu runner 上既没那俩目录,也没 TA_DEMO_STAGE 环境变量,spec 默认值还是个 Windows 路径(C:/Users/tianhaoxuan/ta-demo-stage)。

修复选项(择一):

  • a. spec 自报 ci: skip:在 ReproSpec 加可选 ci?: { skip?: boolean; reason?: string },pr-review.ymllist-specs job 读 spec 字段过滤掉 ci.skip === true 的;给 hook-moment-block 标 ci: { skip: true, reason: "需 demo-stage 目录预置" }
  • b. CI 自己 stage 目录:在 pr-review.ymlrepro job 跑 repro 前先跑一个 setup step 把两份知识库目录造出来(估计 30+ 行 yaml,且要把 home-loaded 的具体内容硬编码进去 —— 很脆)
  • c. 把 spec 改成纯 code-diff 形态:让 baseline.ref 真指 main 之前的 commit(回到 hook 还没实现的代码),不再依赖 env 切知识库;现有 hook-moment-block 改成 docs/ 下的纯文档样板,不进 fixtures/repro-specs/ 自动发现

推荐 a —— 实现 5 行代码,语义清楚,对未来 spec 是合理的扩展点。

Gap 2: Matrix baseline 上的预存 pnpm test 失败(本地 Windows 21 个)

现象:本地 Windows 跑 pnpm test21 failed / 2063 passed / 21 skipped。失败集中在:

  • packages/cli/src/__tests__/install-rollback.test.ts(多个 case 期待 result.status === 'ok',实际 'error')
  • packages/cli/src/__tests__/session-start-input-shape.test.ts(期待 exit code 0,实际 1)
  • packages/cli/src/__tests__/symphony.test.ts(SymphonyError: after_create hook failed)

根因:这 3 个文件均由 PR #2 改动(git diff --stat main..PR2 -- packages/cli/ 为空)。属 Matrix baseline 自身的 known-bad-on-Windows 测试。Ubuntu CI 上具体多少个 fail 还没拉日志统计(zip 里 tests/4_pnpm test.txt 181 KB,值得做一次 grep 看是不是同一批)。

修复选项:

  • a. 一个个修:逐个失败查根因 → 改实现 → 跑绿(可能要花一周)
  • b. 临时 xfail:在这 3 个 test 文件上挂 .skipdescribe.skipIf(process.platform==='win32'),留 TODO 注释带 issue 链接
  • c. 不动这 21 个:接受 review/verdict 长期 fail tests-and-merge-clean 这条,改 pr-review.yml 让 tests job 允许已知失败白名单

推荐 b(对未来工作影响最小),并把这 3 个文件挑出来再开 3 个独立的 fix issue —— 不一锅烩。

优先级

  • Gap 1 阻碍任何 repro spec 在 CI 上能 pass(目前唯一 spec 就 hook-moment-block);若不修,review/verdict 永远 fail 的 repro-pass 标准
  • Gap 2 阻碍review/verdict 拿到 pass(tests-and-merge-clean 永远 fail);但人手 squash merge 不受影响(docs/POSTPR.md 的 Visual proof of work 路径专门为此设)

短期建议:先做 Gap 1.a(5 行代码),让 repro 路径绿;Gap 2 留作中期治理。

关联


🤖 由 Claude Code 在 PR #2 dogfood 验证后自动开

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

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions