一键导入
audit
有边界的代码审计与修复。分层标准:L1阻塞性/L2功能性/L3最佳实践/L4过度优化。 默认目标L2,L1+L2清零即宣布完成,防止无限深挖。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
有边界的代码审计与修复。分层标准:L1阻塞性/L2功能性/L3最佳实践/L4过度优化。 默认目标L2,L1+L2清零即宣布完成,防止无限深挖。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
统一开发工作流入口。 v3.2.0 变更(步骤重构): - Step 4: DoD → 探索(先读代码理解架构) - Step 5: 写代码 → DoD(基于探索结果定义验收标准) - Step 6: 写测试 → 写代码(含测试,合并旧 05+06) - Step 7: 质检 → 本地验证(跑 npm test,不生成空 JSON) 循环控制由 Stop Hook 实现: - 有头模式: Stop Hook 检测 .dev-mode 文件,exit 2 阻止会话结束 - 无头模式: CECELIA_HEADLESS=true 时 Stop Hook 直接 exit 0,外部循环控制
跨仓库 QA 总控。统一管理测试决策、回归契约、Golden Paths 和 Feature 归类。
OKR 统一拆解工具。支持 6 层层级识别(Global OKR → Area OKR → KR → Project → Initiative → Task), 自动判断输入层级,逐层拆解到可执行 Task。Exploratory 优先策略。
| name | audit |
| version | 1.2.0 |
| updated | "2026-01-23T00:00:00.000Z" |
| description | 有边界的代码审计与修复。分层标准:L1阻塞性/L2功能性/L3最佳实践/L4过度优化。 默认目标L2,L1+L2清零即宣布完成,防止无限深挖。 |
CRITICAL LANGUAGE RULE(语言规则): 所有输出必须使用简体中文。包括步骤说明、状态更新、日志信息、错误报告。严禁使用日语、韩语或任何其他语言,即使在无头(headless)子进程中也必须遵守。
有边界的代码审计,避免无限深挖。
| Layer | 名称 | 描述 | 完成标准 |
|---|---|---|---|
| L1 | 阻塞性 | 功能不工作、崩溃、数据丢失 | 必须修 |
| L2 | 功能性 | 边界条件、错误处理、已知 edge case | 建议修 |
| L3 | 最佳实践 | 代码风格、一致性、可读性 | 可选 |
| L4 | 过度优化 | 理论边界、极端情况、性能微调 | 不修 |
当审计发现问题时,严重性关键字会自动映射为业务优先级:
| 审计严重性 | 业务优先级 | 对应 Layer | RCI 要求 |
|---|---|---|---|
| CRITICAL | P0 | L1 阻塞性 | ✅ 必须更新 RCI |
| HIGH | P1 | L2 功能性 | ✅ 必须更新 RCI |
| MEDIUM | P2 | L2/L3 | 可选 |
| LOW | P3 | L3/L4 | 可选 |
触发规则:
CRITICAL → 触发 P0 检查HIGH → 触发 P1 检查security: 开头 → 触发 P0 检查影响:
regression-contract.yaml 添加 RCI 条目scripts/devgate/detect-priority.cjs 执行scripts/devgate/require-rci-update-if-p0p1.sh 检查注意:本 Skill 的 L1/L2/L3/L4 是 问题严重性分类,用于审计发现的问题。
这与 /dev 工作流的质检分层是不同概念:
| 质检层 | 名称 | 内容 | 与本 Skill 的关系 |
|---|---|---|---|
| L1 | 自动化测试 | npm run qa | 无关 |
| L2A | 代码审计 | 本 Skill 执行的工作 | Audit 是 L2A |
| L2B | Evidence 证据 | 截图/curl 验证 | 无关 |
| L3 | Acceptance 验收 | DoD 全勾 | 无关 |
简单说:
L2 完成 = 稳定可用(推荐停止点)
用户说"找 bug" → 做到 L2
用户说"深度审计" → 做到 L3
用户说"极致优化" → 警告用户,确认后做 L3
# 询问用户
- 审计哪些文件/目录?
- 目标层级?(默认 L2)
- 最大轮次?(默认 3 轮)
第 1 轮:只找 L1 问题(阻塞性)
第 2 轮:找 L2 问题(功能性)
第 3 轮:如果用户要求,找 L3 问题
问自己:
1. 这个问题会导致功能失败吗? → L1
2. 这个问题会在边界情况出错吗? → L2
3. 这个问题只是"可以更好"吗? → L3,停止
如果找到的都是 L3/L4 问题 → 宣布审计完成
当以下条件满足时,主动声明审计完成:
✅ L1 问题:0 个
✅ L2 问题:0 个(或已全部修复)
✅ 连续 2 轮未发现新的 L1/L2 问题
输出:
"审计完成。L1/L2 问题已清零,剩余 N 个 L3 建议(可选修复)。"
使用自动化脚本进行合同验证
# 对比实际改动与 QA-DECISION.md 中允许的 Scope
BASE_BRANCH=$(git branch -r | grep -q 'origin/develop' && echo "develop" || echo "main")
node scripts/audit/compare-scope.cjs --base $BASE_BRANCH --head HEAD
# 输出:
{
"scopeCheck": {
"allowed": ["scripts/*", "skills/*"],
"changed": ["scripts/qa/risk-score.js", ...],
"extraChanges": [], # 超出范围的改动
"pass": true
},
"forbiddenCheck": {
"forbidden": ["node_modules/*", ".git/*"],
"forbiddenTouched": [], # 触碰的禁区
"pass": true
},
"overallPass": true
}
# 检查是否触碰禁止修改的区域
BASE_BRANCH=$(git branch -r | grep -q 'origin/develop' && echo "develop" || echo "main")
node scripts/audit/check-forbidden.cjs --base $BASE_BRANCH --head HEAD
# 输出:
{
"pass": true,
"forbiddenTouched": [],
"details": "No forbidden areas touched"
}
# 验证 Tests 字段对应的测试是否完成
node scripts/audit/check-proof.cjs --qa-decision docs/QA-DECISION.md
# 输出:
{
"pass": true,
"totalTests": 5,
"passedTests": 5,
"failedTests": [],
"details": "All tests verified"
}
# 聚合所有审计结果,生成 AUDIT-REPORT.md
BASE_BRANCH=$(git branch -r | grep -q 'origin/develop' && echo "develop" || echo "main")
node scripts/audit/generate-report.cjs --base $BASE_BRANCH --head HEAD --output docs/AUDIT-REPORT.md
# 输出:
{
"success": true,
"outputPath": "docs/AUDIT-REPORT.md",
"decision": "PASS"
}
在 Step 6(Audit Node)中自动调用:
# 1. Scope 验证
node scripts/audit/compare-scope.cjs || exit 1
# 2. Forbidden 检查
node scripts/audit/check-forbidden.cjs || exit 1
# 3. Proof 验证
node scripts/audit/check-proof.cjs || exit 1
# 4. 生成报告
node scripts/audit/generate-report.cjs || exit 1
# 5. 检查 Decision
if grep -q "Decision: PASS" docs/AUDIT-REPORT.md; then
echo "✅ Audit passed"
else
echo "❌ Audit failed, check AUDIT-REPORT.md"
exit 1
fi
scripts/audit/compare-scope.cjs - Scope 对比scripts/audit/check-forbidden.cjs - Forbidden 检查scripts/audit/check-proof.cjs - Proof 验证scripts/audit/generate-report.cjs - 报告生成当 /dev 流程调用 Audit Node 时,必须输出 docs/AUDIT-REPORT.md。
# Audit Report
Branch: cp-xxx
Date: YYYY-MM-DD
Scope: file1, file2, ...
Target Level: L2
Summary:
L1: 0
L2: 0
L3: 0
L4: 0
Decision: PASS | FAIL
Findings:
- id: A1-001
layer: L1 | L2 | L3 | L4
file: path/to/file
line: 123
issue: 问题描述
fix: 修复建议
status: fixed | pending
Blockers: [] # L1 + L2 问题列表
| 字段 | 必填 | 说明 |
|---|---|---|
| Branch | ✅ | 当前分支名 |
| Date | ✅ | 审计日期 |
| Scope | ✅ | 审计范围(改动的文件) |
| Target Level | ✅ | 目标层级(默认 L2) |
| Summary | ✅ | 各层级问题数量 |
| Decision | ✅ | PASS=可继续 / FAIL=需修复 |
| Findings | ✅ | 发现的问题列表 |
| Blockers | ✅ | L1+L2 问题的 ID 列表 |
L1 > 0 OR L2 > 0 → Decision: FAIL
L1 = 0 AND L2 = 0 → Decision: PASS
PR Gate 会检查:
docs/AUDIT-REPORT.md 存在Decision: PASS(FAIL 则 Gate 失败)/dev 流程中的使用(必须):
Step 5(写代码)完成后:
- Audit Node 对新代码做 L1+L2 检查
- 输出 docs/AUDIT-REPORT.md
- Decision: FAIL 时必须修复后重新审计
- Decision: PASS 后才能继续 PR 创建
Gate 强制检查:
- PR Gate 检查 AUDIT-REPORT.md 存在
- PR Gate 检查 Decision: PASS
❌ "我再找找看还有没有问题" → 无边界 ❌ "这个地方可以更好" → L3/L4 ❌ "理论上可能出问题" → L4 ❌ "为了一致性统一改掉" → L3
✅ "L1/L2 已清零,审计完成" ✅ "发现 N 个 L3 建议,是否需要修复?"
/audit → L2 审计(默认)
/audit deep → L3 审计(用户明确要求)
/audit <路径> → 指定范围
生成 AUDIT-REPORT.md 后的行为:
关键点: