بنقرة واحدة
quality-audit
代码质量诊断 — 六维扫描(重复代码/高复杂度/死代码/测试薄弱区/过大模块/架构退化)。产出分级质量报告,与 security-audit 并列运行于 Diagnose 阶段。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
代码质量诊断 — 六维扫描(重复代码/高复杂度/死代码/测试薄弱区/过大模块/架构退化)。产出分级质量报告,与 security-audit 并列运行于 Diagnose 阶段。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
上下文园艺师 — 先读项目,再读 CLAUDE.md,逐层审计四层架构(CLAUDE.md → skills/ → hooks/ → memory/)。不做代码修改,只做审查、总结、归纳。生成建议报告,可视化花园输出。
将 repo-decompose 需求树 + mvp-approach 核心路径转化为分阶段可执行的交付计划。每个 Phase 有明确目标、任务清单、验收标准和依赖关系。
代码优化循环总控 — 12 阶段生命周期(2 前置门控 Detect+EnvReady,10 阶段优化闭环 Observe→Understand→Diagnose→Plan→Bound→Fix→Verify→SelfReview→Learn→Decide)。跨 Agent 自适应,环境自动就绪,任务驱动单流程。
基于 knowledge-graph 模块依赖 + mvp-approach 边界条件 + task-graph 任务清单,生成可修改文件白名单和禁止触碰红区。防止 Agent 无意中修改核心模块。
代码知识图谱 — 四层递进分析(符号表→调用链→数据流→模块依赖),产出完整结构化 Markdown 技术文档供 Loop Agent 和开发者阅读。每个文件有详细分析、每段关键代码有决策解释、模块间有影响矩阵。
循环日志管理 — 每个阶段产出结构化 markdown 日志,记录完整分析过程,可追溯、可检索。自动保存到 .loop-log/,支持按阶段/日期/关键词检索。
| name | quality-audit |
| description | 代码质量诊断 — 六维扫描(重复代码/高复杂度/死代码/测试薄弱区/过大模块/架构退化)。产出分级质量报告,与 security-audit 并列运行于 Diagnose 阶段。 |
| argument-hint | audit code quality | find tech debt | scan for dead code |
| dependencies | {"upstream":["knowledge-graph","repo-decompose"],"downstream":["engineering-loop"]} |
安全审计告诉你"会不会出事",质量审计告诉你"好不好维护"。 本 skill 在 Diagnose 阶段与 security-audit 并行运行,扫描六维技术债。
[1] knowledge-graph 可用?
NO → STOP. "❌ 需要先运行 knowledge-graph"
[2] repo-decompose 可用?
NO → STOP. "❌ 需要先运行 repo-decompose"
检测方法:
1. 搜索同名函数但不同文件 → 候选重复
2. 搜索结构相似的代码块 (> 10 行, 相似度 > 80%)
3. 搜索复制粘贴的注释
严重度:
HIGH: 3+ 处重复 + 每处 > 20 行
MEDIUM: 2 处重复 + 每处 > 10 行
LOW: 函数签名重复但实现不同 → 可能是 overload
输出:
{ "pattern": "validateEmail", "locations": ["src/auth.ts:45", "src/api/users.ts:120", "src/utils/form.ts:88"], "similarity": 0.92 }
检测方法:
1. 从 knowledge-graph L1 符号表取所有函数
2. 计算复杂度指标:
- 行数 > 50 → 候选
- 嵌套深度 > 4 → 候选
- 分支数 (if/switch/case) > 8 → 候选
- 参数数量 > 5 → 候选
严重度:
CRITICAL: 行数 > 200 OR 分支数 > 20
HIGH: 行数 100-200 OR 分支数 12-20
MEDIUM: 行数 50-100 OR 分支数 8-12
LOW: 参数 > 5 但行数不大
输出:
{ "function": "processRequest", "file": "src/handler.ts:30-280", "lines": 251, "branches": 24, "nestedDepth": 6 }
检测方法:
1. knowledge-graph 中 扇入=0 且 exported=false → 死代码候选
2. 搜索注释中的 "TODO" / "FIXME" / "DEPRECATED" / "HACK"
3. 搜索被注释掉的代码块 (> 5 行)
4. 搜索 package.json 中未使用的依赖
严重度:
HIGH: 未使用导出 (exported=true, 扇入=0) → 但必须先排除 public API
MEDIUM: 未使用内部函数 (exported=false, 扇入=0)
LOW: TODO > 6 个月未处理 / 未使用依赖
删除保护(删除前必须逐条确认):
[1] 是否被动态 import / require() / 反射调用?
[2] 是否是 public API(即使当前仓库内无调用,外部用户可能依赖)?
[3] 是否被配置文件(JSON/YAML/TOML)引用?
[4] 是否是 plugin / hook / export convention 约定导出?
[5] 是否在测试中被引用(测试文件可能在别的目录)?
→ 5 条全部 NO → 可安全删除。任一条 YES → 标记为 "protected" 不删除。
输出:
{ "symbol": "oldParser", "file": "src/parser.ts:200-250", "type": "dead-code", "lastModified": "2024-01", "protected": false }
检测方法:
1. 从 repo-decompose 逻辑层取核心函数列表
2. 对每个核心函数 → 检查是否有对应测试文件
3. 检查测试覆盖率最低的文件 Top 10
4. 检查是否有纯 mock 测试(只测 mock 不测真实逻辑)
严重度:
CRITICAL: 核心入口函数无测试
HIGH: 核心业务函数无测试
MEDIUM: 有测试但无边界/异常用例
LOW: 测试文件存在但全部 skip/标记 TODO
输出:
{ "function": "handlePayment", "file": "src/payment.ts:45", "testCoverage": "none", "risk": "核心支付逻辑无测试" }
检测方法:
1. 文件行数 > 500 → 候选
2. 目录文件数 > 20 → 候选
3. 一个文件导出 > 15 个符号 → 候选
4. 一个目录下所有文件缺乏明显边界 → 候选
严重度:
CRITICAL: 单文件 > 1000 行
HIGH: 单文件 500-1000 行 OR 目录 > 30 文件
MEDIUM: 单文件 300-500 行 OR 导出 > 15 个符号
LOW: 目录 > 20 文件但有清晰子目录
输出:
{ "file": "src/utils.ts", "lines": 847, "exports": 23, "risk": "工具函数黑洞——职责不清" }
检测方法:
1. 循环依赖(从 knowledge-graph L4)
2. 高扇出模块(依赖 > 7 个其他模块)
3. 违反 README/设计文档中声明的架构模式
4. 测试文件依赖生产代码的细节实现
5. 存在明显不属于当前模块的代码(如 db 代码出现在 ui 目录)
严重度:
CRITICAL: 循环依赖 + 生产路径
HIGH: 高扇出 (> 10) + 核心模块
MEDIUM: 架构模式偏离(如 MVC 项目的 controller 中有 SQL)
LOW: 测试依赖实现细节(非公共 API)
输出:
{ "issue": "circular-dependency", "cycle": "src/auth → src/db → src/auth", "risk": "循环依赖导致无法独立测试" }
写入 .repo-loop-state.json → diagnose.qualityAudit:
{
"qualityAudit": {
"scannedAt": "ISO8601",
"totalFindings": 12,
"byDimension": { "D1-duplication": 2, "D2-complexity": 3, "D3-deadCode": 4, "D4-testGaps": 2, "D5-largeModules": 1, "D6-archDrift": 0 },
"bySeverity": { "CRITICAL": 1, "HIGH": 4, "MEDIUM": 5, "LOW": 2 },
"findings": [
{
"id": "QUAL-001",
"dimension": "D2-complexity",
"severity": "CRITICAL",
"location": "src/handler.ts:30-280",
"issue": "processRequest 函数 251 行, 24 个分支",
"suggestion": "按请求类型拆分为 processGetRequest / processPostRequest / processDeleteRequest",
"blocksDiagnose": true
}
],
"blocksDiagnose": false
}
}
blocksDiagnose: true → CRITICAL 项(如核心入口无测试、循环依赖在生产路径)阻塞 Diagnose。其余不阻塞但进入 Plan。
| # | Agent 借口 | 反驳 |
|---|---|---|
| 1 | "死代码不影响运行,不急着删" | 死代码增加阅读成本。每个读这段代码的人都在浪费时间 |
| 2 | "这个函数虽然长但逻辑清晰" | >200 行函数默认进入拆分候选。但 Fix 前必须先写 characterization test,确认拆分后行为不变 |
| 3 | "测试薄弱区以后补" | 核心入口无测试 = 改动即风险。先补测试再优化 |
| 4 | "架构退化是历史遗留,这轮不动" | 至少标注为技术债并写入 learn。不标注 = 永远不修 |
.repo-loop-state.json → diagnose.qualityAudit