Skip to content

chore(ci): 加 audit 脚本 + workflow 自动检测上游漂移(防回归基建)#31

Open
jnMetaCode wants to merge 1 commit into
mainfrom
chore/audit-script-and-ci
Open

chore(ci): 加 audit 脚本 + workflow 自动检测上游漂移(防回归基建)#31
jnMetaCode wants to merge 1 commit into
mainfrom
chore/audit-script-and-ci

Conversation

@jnMetaCode
Copy link
Copy Markdown
Owner

你要解决什么问题?

本轮全量质量审计发现 4 类 P0 漂移(hooks-cursor.json Windows 回归、brainstorm scripts 落后 v5.0.6、code-reviewer 引用过时、code-reviewer.md 未 v5.1.0 self-contained 化)—— 这些问题如果有自动化漂移检测在 CI 跑,PR 阶段就会被拦下,不会一直累积到用户社区报 bug。

现状:仓库只有 .github/workflows/ci.yml(验证 SKILL.md frontmatter + package.json schema),完全不查上游对齐 / 不查交叉引用 / 不跑 installer 端到端。一行 `hooks-cursor.json` 回归 CI 看不见。

这个 PR 做了什么改变?

加两个文件:

scripts/audit.sh(独立运行的全量审计脚本,本地也可跑):

4 类共 90+ 项检查:

  1. 静态校验:所有 `*.json` parse 通过;每个 `SKILL.md` 有 `name` + `description` frontmatter;所有 symlink 解析;`hooks/session-start` + `run-hook.cmd` 可执行
  2. Installer 功能:17 款工具走 `--tool ` → 装 → 再装(幂等)→ 卸载,任何步骤崩了 FAIL
  3. 上游对齐:`hooks/` 4 文件(含 hooks-cursor.json)+ `brainstorming/scripts/` 3 文件 → `diff vs upstream/main` 必须 0 行;14 个翻译 skill 的 H1-H4 标题数 vs upstream/main 必须 ±3 以内(容差留给翻译造成的小幅波动);`code-reviewer.md` 必须是 v5.1.0 self-contained 结构(6 个 H 头)
  4. 交叉引用:README → `docs/README.*.md` 链接全部存在;所有 SKILL.md 里的 `superpowers:xxx` 引用对应的 `skills/xxx/` 目录必须存在;`npx --tool claude` 装完后 `.claude/skills/using-superpowers/SKILL.md` 必须存在(SessionStart hook 依赖此路径)

支持开关:

  • `--quick` 跳过 installer 功能测试(17 个 mktemp + node 跑较慢)
  • `--no-upstream` 跳过上游对齐(CI 没网络时)

WARN(不阻塞)vs FAIL(阻塞)分级:

  • 主动扩写(如 `executing-plans` 我们加了 6 个中文示例 header)→ WARN
  • 结构性落后上游版本(如 `using-git-worktrees` 没 sync v5.1.0)→ FAIL

.github/workflows/audit.yml

  • 触发:PR + push to main + 手动 dispatch
  • 步骤:fetch-depth 0 checkout + Node 20 + 加 upstream remote + fetch upstream main 浅克隆 + `bash scripts/audit.sh`
  • FAIL > 0 → workflow 失败 → PR 被卡

这个改变适合放在核心库中吗?

适合。本 PR 是 fork 的防漂移基建——其目的恰恰是"自动强制对齐上游",与维护者"主站有的同步,主站没有的暂时不改"的方针精神一致:把 "对齐上游" 这件事自动化、不再靠手工 audit。

虽然 audit.sh 本身是 fork-specific 代码(上游没有同样的脚本),但它的输出是"检查我们 vs 上游是否漂移"——是服务对齐意图的 infrastructure,不是新增功能。

你考虑了哪些替代方案?

  1. 不加自动化,每次 release 前手工跑 audit:本次审计是我手工写的 ad-hoc bash 块,下次维护者忘了跑、或忘了某项检查 → 漂移又积压。手工流程不可持续。Pass。
  2. 塞到现有 ci.yml 而不是新增 audit.yml:ci.yml 是 "skill frontmatter 校验" 性质的轻量检查(秒级),audit 跑 17 个 installer 端到端(分钟级)+ 上游 fetch + diff,混在一起会拖慢 PR 反馈。分开 workflow 让 ci.yml 快速反馈、audit 慢但全面。Pass 的中间方案。
  3. 现方案:独立脚本 + 独立 workflow——脚本可以本地跑、本地调试;workflow 跟 ci.yml 互不干扰。✓

这个 PR 是否包含多个不相关的改变?

否。只新增两个文件,scope = "加上游漂移检测 CI"。

已有的 PR

  • 我已查看所有已开放和已关闭的 PR,确认没有重复或先前的类似工作
  • 相关 PR:未找到处理 CI 漂移检测的 PR

测试环境

工具 工具版本 模型 模型版本/ID
Claude Code latest Claude Opus claude-opus-4-7

本地烟测:

评估

不适用 —— 本 PR 是 CI infrastructure,不改任何 skill 内容、不改安装行为、不影响模型行为

验证维度:

  1. ✅ audit 能在 main 上抓到所有已知漂移(false-negative 测试)
  2. ✅ audit 能在 PR chore(skills): 同步上游 P0 漂移修复(hooks-cursor + brainstorm + code-reviewer 引用) #30 分支上通过(false-positive 测试)
  3. ⚠️ GitHub Actions 实际跑起来效果待 PR 提交后看 CI 输出

严格性

  • 这不是 skill 内容改变,无需对抗式压力测试
  • 没有修改任何精心调优的 skill 内容
  • 修改的是 fork 自有 CI/scripts 基建

人工审核

  • 提交前已有人工审核过 diff(283 行新增,2 文件)
  • 完整文本 review 待你在 GitHub PR diff 视图 inline 评论

防回归基建:把本轮全量质量审计的 4 类检查打包成可重复运行的脚本,
每次 PR 自动跑,发现漂移立刻拦下。

scripts/audit.sh:
1. 静态校验:JSON parse、SKILL.md frontmatter、symlink、hook 可执行性
2. Installer 功能:17 款工具装 / 重装(幂等)/ 卸载全跑一遍
3. 上游对齐:hooks 4 文件 + brainstorm scripts 3 文件 + 14 翻译 skill
   结构层级(H1-H4 标题数)+ code-reviewer.md self-contained 版结构
4. 交叉引用:README → docs/ 链接、skill 间 superpowers:xxx 引用、
   装完后 .claude/skills/using-superpowers/SKILL.md 路径解析

支持 --quick(跳过 installer)和 --no-upstream(跳过对齐)两个开关。

.github/workflows/audit.yml:
- 触发:PR + push to main + 手动 dispatch
- 步骤:checkout(fetch-depth 0)+ setup node 20 + 加 upstream remote
  + fetch upstream main 浅克隆 + 跑 audit.sh
- FAIL > 0 → 整个 workflow 失败,PR 被卡

设计原则:
- 这次"4 个 P0 缺陷漂"事件(hooks-cursor + brainstorm + code-reviewer 引用 +
  code-reviewer.md 整合)如果当时有这个 audit 在 CI 跑,PR 阶段就会被拦下
- 用 H 数对齐而不是行数 diff 来判断结构漂移(避免翻译造成的假阳性)
- WARN(不阻塞)vs FAIL(阻塞)分级:主动扩写算 WARN,
  结构性落后上游算 FAIL

本地烟测:
- main 分支跑:92 PASS / 2 WARN / 8 FAIL(捕获到所有已知漂移)
- chore/sync-upstream-p0-drift(PR #30)跑:97 PASS / 2 WARN / 0 FAIL(PR 修复后全绿)

后续:PR #28 + #30 merge 后,main 上 FAIL 应归零(WARN 只剩 executing-plans
主动扩写一项)。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant