Skip to content

[bug] run-tests.sh 是文档声称的必过门,却不在任何 CI workflow 里 #213

Description

@PanQiWei

What happened

bash run-tests.sh 是 AGENTS.md §10 与 CONTRIBUTING「before you open a PR」列为必须以 ALL TESTS PASSED 收尾的一道门,但没有任何 CI workflow 运行它

于是这道门在实际执行上只靠人工自觉。而它已经漏了:60bc0f13 (#209) 合入时带进了两条从未跑绿的测试,并在 main 上一直红到 2026-07-28 被发现。期间 ccm-ci 对每个相关 commit 都报 success。

证据

CI 的 required check build-and-check 只聚合两个 job:

build-and-check  needs: [ccm, plugin-contracts]

plugin-contracts 实际只跑:

tests/content/skill-knowledge-scaffold.test.mjs
tests/content/plugin-release-package-contract.test.mjs
tests/content/trusted-release-bundle.test.mjs
node scripts/skill-knowledge.mjs check --stage K0     ← 只到 K0,不是 K3
node scripts/check-release-knowledge-boundary.mjs

grep -rn "run-tests" .github/workflows/ → 零命中。

tests/content/ 下目前有 60+ 个测试文件,CI 只选跑其中 3 个。

漏掉的两条(已在分支 feat/issue-211-user-unknowns 修复,但机制缺口仍在)

两条都来自 60bc0f13 (#209),且都与同一个 commit 引入的代码/守卫互相矛盾

  1. skill-overlay-v3-skills-swap-commit.test.mjsv4: 用例测的是 projectAndPublishSkillsSurface 的 legacy beforePublish 接缝——而同一个 PR 把该接缝改成了显式拒绝。
  2. skill-overlay-v9-whole-host-atomic.test.mjs 断言 plugin/dist/<host>/knowledge 存在——而同一个 PR 加的 check-release-knowledge-boundary.mjs 正是为了保证它不存在knowledge/ 是 repo-only,禁止进 dist/package/release)。

一个 PR 内自相矛盾却能合入,正说明这道门没有机制执行。

What you expected

要么 run-tests.sh 真的成为 CI 门的一部分,要么 AGENTS.md / CONTRIBUTING 不再把它写成必过的硬门。文档声称的门与机制执行的门应当一致。

可能的修法(未定,需要权衡)

  1. run-tests.sh 整体接进 plugin-contracts —— 最直接,但本地实测全套约 90 分钟attestation-regen-convergence 会重跑整条 attestation 流水线;skill-knowledge 隔离测试每个 case 建隔离仓跑全量投影)。直接上 CI 的 runner 成本需要评估,且与 #212 刚做的「reduce redundant Actions usage」方向相反。
  2. plugin-contracts 的测试名单到 tests/content/ 全集 —— 比 (1) 轻,但仍需评估时长。
  3. 分层:把快的 content 测试接进每 PR 的 required check,把重的(attestation / 隔离投影)放 nightly 或 ci: label 触发(仓库已有 ci:macos-live 这个 opt-in label 先例)。
  4. 只加一道防回归的窄门:至少保证「测试文件与它测的代码在同一个 PR 内不自相矛盾」——但这个不好机械表达。

倾向 (3),因为它同时解决「门要真」和「不烧 runner」两个约束,且仓库已有同型先例。具体阈值与切分需要先量各测试文件的实际耗时。

附带观察

本仓测试时长与知识图规模是超线性关系的:skill-knowledge 那批测试每个 case 都建隔离仓跑全量四 host 投影,图每长一个 module,每个 case 都变慢。这会让 (1) 随时间越来越贵,也是倾向 (3) 的理由之一。

Fit with cc-master's design

  • 不涉及 hooks,不触碰 board narrow waist
  • 不改变 ship-anywhere 口径
  • 纯 CI / 工程门问题,不改分发 skill 语义

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions