关于 code-quality-audit
面向 Drupal 和 Next.js 项目的 Claude Code 技能,用于代码质量与安全审计。它结合框架专项检查、覆盖率和 lint 检查、架构审查、TDD 工作流及报告。
主要功能
- 01Drupal 与 Next.js 审计
- 02覆盖率与 lint 检查
- 03SOLID 与重复代码检查
- 04框架专项安全扫描
- 05评分式代码审查与报告
- 06TDD 工作流命令
适用场景
- 01发布前审计 Drupal 代码库
- 02检查 Next.js 覆盖率与 lint 结果
- 03审查架构并查找重复代码
- 04执行全代码库安全扫描
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ camoa/ claude-skills --skill code-quality-audit安装后在 Claude Code 中输入/code-quality-audit确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
decision-guides/quality-audit-checklist.mdtest-type-selection.mdreferences/check-run-json.mdcloud-routine-sweep.mdcode-intelligence.mdcomposer-scripts.mdconfig-schema.mdcoverage-metrics.mddesktop-sweep-template.mddry-detection.mdjson-schemas.mdpost-batch-aggregation.mdpremerge-gate-routine.mdreview-md-v2.mdscheduled-sweeps.mdscope-targeting.mdsetup-hook-pattern.mdsolid-detection.mdtdd-workflow.mdtool-comparison.mdtroubleshooting.mdreferences/operations/dast-tools.mddrupal-audits.mddrupal-security.mddrupal-setup.mddrupal-tdd.mdnextjs-audits.mdnextjs-security.mdnextjs-setup.mdnextjs-tdd.md详细介绍
代码质量审计
使用统一的工具和报告流程,对 Drupal 和 Next.js 项目进行质量与安全审计。
阅读策略: 审计、评审、安全、SOLID 和 DRY 命令属于 B 类工作(审计 / 评审 / 架构分析)——Agent 必须完整阅读源文件和配置文件。切勿在这些工作流中优先使用 grep。继承的方法、注解和配置关联的类无法通过优先使用 grep 的方式发现。请通过
dev-guides-navigator查看https://camoa.github.io/dev-guides/development/reading-strategy/。安装代码智能插件后,LSP 工具可以从语义层面解析这些继承关系和配置关联关系——对于 SOLID/DRY/评审中的关系问题,优先使用该工具;如果无法使用,则回退到完整阅读流程。请参阅references/code-intelligence.md。
快速命令
直接使用以下命令:
/code-quality-tools:setup- 首次设置向导(安装并配置工具)/code-quality-tools:audit- 运行完整审计(全部 22 项操作)/code-quality-tools:coverage- 检查测试覆盖率/code-quality-tools:security- 安全扫描(Drupal 为 10 层,Next.js 为 7 层)/code-quality-tools:lint- 检查代码规范/code-quality-tools:solid- 检查架构和 SOLID 原则/code-quality-tools:dry- 查找代码重复/code-quality-tools:tdd- 开始 TDD 工作流(测试监视器模式)/code-quality-tools:review- 按评分标准评审代码(/50 分制,设有质量门禁)/code-quality-tools:ultrareview- 使用云端多 Agent 进行深度评审,并执行飞行前检查(5–10 分钟,免费额度用完后收费)/code-quality-tools:generate-review-md- 为 Claude Code 的托管代码评审生成 v2 REVIEW.md/code-quality-tools:architecture-debate- 架构辩论(实用主义者 + 纯粹主义者 + 维护者)/code-quality-tools:security-debate- 安全辩论(防御者 + 红队 + 合规专家)
如需使用对话式工作流,请继续阅读……
监视模式 Lint(技能作用域)
此技能在其 frontmatter 中声明了两个技能作用域钩子——仅在技能加载时生效,而非整个插件范围:
| 事件 | 触发时机 | 作用 |
|---|---|---|
FileChanged | Linter 配置发生变化——常见变体的确切文件名:composer.json、package.json、phpstan.neon*(3 个变体)、phpcs.xml*(3 个变体)、psalm.xml*(2 个变体)、eslint.config.{js,mjs,cjs}、.eslintrc.{js,json,yml,yaml}、tsconfig.json | 运行 hooks/lint-changed.sh——配置变更时重新运行 Lint;当 watchPaths 包含源文件时,源文件变更则只对该文件运行 Lint |
PermissionDenied | 自动模式下,Read、Grep、Glob 被拒绝 | 返回 {retry: true}——在审核期间重试非破坏性的分类器拒绝 |
遵守作用域限制:这些钩子会在调用技能时注册,并在本次会话剩余时间内持续运行——技能停用时它们不会关闭。技能作用域提供的是调用门控,而非关闭开关:插件作用域的 FileChanged 处理程序从会话开始起,就会在启用了该插件的每次对话中保持运行,并在文件变更时触发,即使用户从未要求审核也是如此。在此处声明后,只有在有人实际调用技能时才会触发。要在会话中停止监视模式,请使用下方的 CLAUDE_CODE_QUALITY_WATCH=0;如果希望 Claude Code 在钩子处理程序首次成功运行后将其移除,可使用 once: true——once 仅在技能 frontmatter 中生效,而且不适合用于需要反复触发的监视模式 Lint。
FileChanged 匹配器是字面匹配,而非 glob。根据 Hooks Reference,FileChanged 匹配器的值会按 | 拆分,并注册为字面文件名,而非 glob。若要监视任意源文件(*.php、*.tsx),请通过 CwdChanged 钩子动态填充 watchPaths,或将具体绝对路径添加到项目的 .claude/settings.json 中。此处的默认监视列表涵盖 Linter 配置变更;如果希望在源文件编辑时逐文件监视,请在设置中扩大范围。
在会话中强制禁用:
export CLAUDE_CODE_QUALITY_WATCH=0
取消设置该变量(或将其设为除 0 以外的任何值)即可重新启用。
**为什么不放在 hooks/hooks.json 中:**插件作用域的钩子无需调用——插件启用后,它会在每次会话中启动。只有 PreCompact 应放在那里,因为无论是否有人运行审核,它都应该生效。对于从未提出过此要求的用户,不应触发监视模式 Lint;在此处声明即可避免这种情况。
已知限制
- 恶意克隆仓库中的
npx。 如果你在攻击者控制的package.json仓库中加载此技能,然后编辑配置文件,监视模式分发器会在该目录树中运行npx --no-install eslint。被植入木马的node_modules/.bin/eslint就会执行。缓解措施:lint-changed.sh中的隔离防护会拒绝cwd以外的路径,但无法沙箱化 linter 本身。不要在不受信任的检出目录中加载此技能。 PermissionDenied重试会对Read|Grep|Glob无条件触发。 匹配器是现有机制中限制最严格的;没有更细粒度的筛选器来限定“仅在调用审计工具期间”。加载此技能时,其他只读操作被拒绝所产生的噪声是可接受的。--json输出由模型生成。 架构文档说明了必需的格式和 JSON 转义(references/json-schemas.md中的invariant 4),但是否遵守约定取决于模型。使用者应先运行jq .,再信任该文档。FileChanged匹配器使用字面文件名。 未列出的变体(例如phpstan.local.neon、自定义名称)不会触发;如果需要监视更广泛的源文件,可通过CwdChanged钩子动态填充watchPaths。
注意 — Claude Code 内置的
/simplify: Claude Code 内置了/simplify技能,可快速进行单轮代码审查。/code-quality-tools:review则不同:它会运行自动化工具(PHPStan/ESLint),按照 10 个评分标准类别进行打分(满分 /50),执行质量门槛(PASS 35+/FAIL),并写入持久化报告。需要快速临时反馈时使用/simplify;需要结构化、评分并留有文档记录的评估时,使用/code-quality-tools:review。
注意 —
security-guidance插件与原生/security-review: 此技能的安全流程(/code-quality-tools:security、各项辩论)属于整个代码库 / CI SAST层,会针对整个代码树运行了解框架的多工具扫描。在 Claude Code 的纵深防御模型中,它们位于两个原生层之下:官方的 security-guidance 插件会在 Claude 编写代码时审查它自己的修改(每次编辑 / 每轮结束 / 提交时触发——自动执行,无需命令;由/code-quality-tools:setup提供),原生/security-review会按需运行一次通用的、范围限定为差异的检查,而 Claude Security 插件会对整个仓库进行多 Agent 深度扫描(也可按要求扫描差异),生成 SARIF 并提出补丁,但绝不会自动应用——其自身文档将现有扫描器保留为单独的 CI 阶段,而不是用它们取而代之;其扫描结果在不同运行之间也并非确定。上述层会减少进入整棵代码树扫描的内容,但不能取代整树扫描——/security-review无法执行覆盖整个仓库的 Drupal/Next.js SAST、污点分析、依赖项 CVE 检查或多 Agent OWASP 辩论。要获得原生审查无法提供的框架专项、全代码库覆盖,请运行此技能的安全审计。
适用场景
Drupal 项目:
- “设置质量工具” / “安装 PHPStan”
- “运行代码审计” / “检查代码质量”
- “检查覆盖率” / “我的覆盖率是多少?”
- “查找 SOLID 违规” / “检查复杂度”
- “检查重复代码” / “DRY 检查”
- “检查代码风格” / “检查编码标准”
- “修复弃用项” / “运行 rector”
- “开始 TDD” / “RED-GREEN-REFACTOR”
- “检查安全性” / “查找漏洞” / “OWASP 审计”
Next.js 项目:
- “设置质量工具” / “安装 ESLint”
- “运行代码审计” / “检查代码质量”
- “检查覆盖率” / “运行 Jest 覆盖率”
- “查找 SOLID 违规” / “检查复杂度” / “检查循环依赖”
- “检查代码风格” / “运行 ESLint”
- “检查重复代码” / “DRY 检查”
- “开始 TDD” / “Jest 监视模式”
- “检查安全性” / “查找漏洞” / “OWASP 审计”
快速参考
下方及整个 references/ 中的脚本路径,指向此插件内部的文件,而不是运行审计的目录。调用方式如下:
bash "${CLAUDE_PLUGIN_ROOT}/skills/code-quality-audit/<path from the table>"
同时保持工作目录位于正在审计的项目中——每个脚本都会扫描自身的当前工作目录(cwd),因此切换到插件目录就会审计插件。${CLAUDE_PLUGIN_ROOT} 是 Claude Code 替换后的插件安装目录;在会话之外,请替换为此插件的检出目录。
Drupal 脚本
| 任务 | 脚本 | 详情 |
|---|---|---|
| 设置工具 | scripts/core/install-tools.sh | 参见 Drupal 设置 |
| 完整审计 | scripts/core/full-audit.sh | 参见 完整审计 |
| 覆盖率 | scripts/drupal/coverage-report.sh | 参见 覆盖率检查 |
| SOLID 检查 | scripts/drupal/solid-check.sh | 参见 SOLID 检查 |
| DRY 检查 | scripts/drupal/dry-check.sh | 参见 DRY 检查 |
| Lint 检查 | scripts/drupal/lint-check.sh | 参见 Lint 检查 |
| 修复弃用项 | scripts/drupal/rector-fix.sh | 参见 Rector 修复 |
| TDD 循环 | scripts/drupal/tdd-workflow.sh | 参见 TDD 工作流 |
| 安全审计 | scripts/drupal/security-check.sh | 参见 安全审计(10 个层级) |
Next.js 脚本
| 任务 | 脚本 | 详情 |
|---|---|---|
| 设置工具 | scripts/core/install-tools.sh | 参见 Next.js 设置 |
| 完整审计 | scripts/core/full-audit.sh | 参见 完整审计 |
| 覆盖率 | scripts/nextjs/coverage-report.sh | 参见 覆盖率检查 |
| SOLID 检查 | scripts/nextjs/solid-check.sh | 参见 SOLID 检查 |
| Lint 检查 | scripts/nextjs/lint-check.sh | 参见 Lint 检查 |
| DRY 检查 | scripts/nextjs/dry-check.sh | 参见 DRY 检查 |
| TDD 循环 | scripts/nextjs/tdd-workflow.sh | 参见 TDD 工作流 |
| 安全审计 | scripts/nextjs/security-check.sh | 参见 安全审计(7 个层级) |
执行任何操作前
Drupal:
- 定位 Drupal 根目录:检查
web/core/lib/Drupal.php或docroot/core/lib/Drupal.php - 验证 DDEV:
ddev describe
Next.js:
- 验证 npm:
npm --version
报告目录——不要创建
切勿运行 mkdir -p .reports,也切勿将 .reports/ 添加到被审计仓库的 .gitignore 中。 报告会引用被审计源代码中的行,并列出秘密扫描器匹配到的文件,因此不应出现在会被推送的分支上。仓库内的 .reports 已不再是报告存放位置。
/ 下的每个脚本都会通过引用 scripts/core/report-dir.sh 来解析自己的报告目录,创建该目录,并在启动时打印 Report directory: <path>。请读取这一行,而不要假设路径。解析顺序:显式设置的 REPORT_DIR;否则,使用为当前工作目录登记的 ai-dev-assistant 项目文件夹,存放在 <project>/audits/<date>/ 下;否则,在仓库之外使用 ${XDG_STATE_HOME:-$HOME/.local/state}/code-quality-tools/<project>/<timestamp>/。只有通过 REPORT_DIR_IN_REPO=1 请求时才会使用 .reports/,且创建时会将其加入 gitignore。
当你需要获取路径本身——例如读取报告,或告诉用户去哪里查看时,请向同一个文件询问,而不要记下目录名:
bash "${CLAUDE_PLUGIN_ROOT}/skills/code-quality-audit/scripts/core/report-dir.sh" --print # where the next run writes; creates nothing
bash "${CLAUDE_PLUGIN_ROOT}/skills/code-quality-audit/scripts/core/report-dir.sh" --ensure # same path, created with mode 0700; use before writing
bash "${CLAUDE_PLUGIN_ROOT}/skills/code-quality-audit/scripts/core/report-dir.sh" --latest # where the last run wrote; exits 1 if none yet
--latest 的值非零表示此处尚未运行审计,并不表示审计结果正常。请说明这一点,并提出运行审计。
沙盒用户:如果已启用内置的沙盒化 Bash 工具(
/sandbox),调用代码检查工具(PHPStan、ESLint、Semgrep、Trivy、Gitleaks)的 Bash 脚本需要将其二进制文件路径列入白名单。将这些工具的二进制文件添加到allowedPaths(例如vendor/bin/phpstan、/usr/local/bin/semgrep)。通过 DDEV 代理运行的命令在容器内执行,不受影响。在沙盒中安装 git 钩子会失败,而且报错含糊。 操作系统会对每条 Bash 命令及其子进程强制执行沙盒限制,并且
.git内的hooks和config都是受保护路径。没有任何设置能解除这一限制:allowWrite条目或涵盖该路径的Edit允许规则都无效,只有sandbox.filesystem.disabled才能关闭限制——而且会一次性对所有受保护路径关闭,不能单独设置。因此,在沙盒会话中,/code-quality-tools:setup的 git 钩子步骤(Drupal 上的 GrumPHPvendor/bin/grumphp git:init,Next.js 上的 Husky)无法写入.git/hooks/,因为这些安装程序会自行以子进程的形式写入该路径。在 Linux 和 WSL2 上,预期会看到unable to unlink old ... Read-only file system,而不是明确提及 hooks 的错误。请在沙盒外安装钩子,或跳过安装。在审计不可信目录树之前,先保护凭据。
sandbox.credentials适用于沙盒化的 Bash 命令,而本技能的审计关卡会在这些命令中运行composer audit、npm audit和semgrep。deny会阻止访问凭据文件,或直接移除环境变量;mask(变量需 v2.1.199+,文件需 v2.1.221+)会替换为每个会话独有的标记值,并允许沙盒代理为获准的主机换回真实值,因此身份验证仍然有效,命令及其日志也不会接触机密。这对于应对上文“已知限制”中提到的恶意克隆风险至关重要。无人值守的会话会在不询问的情况下运行此插件的钩子。 Claude Code 只会在交互式会话中显示文件夹信任对话框——
claude -p运行或 SDK 会话都不会显示该对话框,而且无论如何都会使用设置文件中的钩子。此插件包含一个插件作用域的PreCompact钩子,以及技能作用域的FileChanged和PermissionDenied钩子,因此在这种模式下,三个钩子都会针对陌生克隆运行,且不会征求任何人的意见。Bash 沙盒只限制 Bash——内置文件工具、MCP 服务和钩子在主机上不受限制地运行。这一点在此处尤为重要,因为监视模式分发器作为
FileChanged钩子(lint-changed.sh)运行,所以在上文“已知限制”中记录的npx木马风险不在 Bash 沙盒的隔离边界内。若要在不使用 Docker 的情况下,在同一个操作系统隔离边界内限制钩子(以及文件工具和 MCP),请在沙盒运行时(@anthropic-ai/sandbox-runtime,一项 Beta 研究预览版)下运行整个 Claude Code 进程:配置~/.srt-settings.json(默认拒绝所有写入和网络访问),允许访问你的项目目录、~/.claude/~/.claude.json和api.anthropic.com,然后通过npx @anthropic-ai/sandbox-runtime claude启动。建议:在沙盒运行时下审计不可信的检出内容(或者,为实现内核级隔离,使用专用 VM / Claude Code on the web)。请参阅沙盒环境指南(/en/sandbox-environments),比较各种隔离方式。
何时运行哪些检查
详细指南请参阅 decision-guides/quality-audit-checklist.md。
| 场景 | 运行内容 | 耗时 |
|---|---|---|
| 提交前 | 仅运行 quality:cs | ~5 秒 |
| 推送前 | PHPStan + 单元/内核测试 | ~2 分钟 |
| 合并前 | 完整审计 | ~10 分钟 |
| 每周 | 完整审计 + HTML 报告 | ~15 分钟 |
自适应审计深度(${CLAUDE_EFFORT})
此技能执行审计时,会根据会话的 effort level 调整审计深度。${CLAUDE_EFFORT} 替换为当前级别:
${CLAUDE_EFFORT} | 审计深度 |
|---|---|
low | 仅快速 lint——检查编码标准;跳过安全性、SOLID、DRY 和覆盖率 |
medium | lint + 覆盖率 + SOLID + DRY;跳过深度安全检查 |
high | 完整审计——全部 22 项操作(实际默认值) |
xhigh / max | 完整审计,然后提供 /code-quality-tools:security-debate,由 3 个 Agent 审查安全性发现 |
如果值未设置或无法识别,则按 high(完整审计)处理——绝不因无法读取级别而悄悄跳过覆盖率或安全检查。
这是一个试点(v3.5.0):自适应深度目前仅接入审计流程。FileChanged 监视模式分发器和各命令的 effort gate 暂未适配 effort level——待观察试点在实际使用中的表现后再重新评估。
指定审计范围
若要审计特定模块或组件,而不是整个项目:
参见指定审计范围,了解以下 3 种方法:
- 更改目录(推荐)-
cd web/modules/custom/my_module - 环境变量 -
DRUPAL_MODULES_PATH=path/to/module - 完整扫描(默认)- 从项目根目录运行
智能检测:Claude 会检测当前目录和用户意图。
Secret scan 范围(CQT_SECRET_SCAN)
“运行 gitleaks”是范围的选择,而不是一项操作,安全门禁会明确这一点。默认范围是工作树,运行时会打印一行 [SCOPE] 说明这一点;security-report.json 中也包含相同的值,因此读者可以从报告产物判断扫描的是工作树还是完整历史记录。树扫描后显示 Gitleaks: 0 findings,意味着当前检出内容没有发现问题,而非仓库没有问题。
完整历史记录扫描是可选项,因为开销很大;耗时是实测得出的,而非假设的:在本说明所述的仓库中(2,368 次提交、253,505 个打包对象、224.84 MiB 的历史记录;Composer 迁移前 core/vendor/contrib 均已提交),完整历史扫描运行了数分钟,CPU 占用达到数百个百分点,并在 10 分钟时被终止。请谨慎启用,并为其设定时间预算。
| 变量 | 值 | 开销和效果 |
|---|---|---|
CQT_SECRET_SCAN | tree(默认)、diff、history | tree = gitleaks dir,扫描工作树,耗时数秒。diff = 有界提交范围,是 CI 使用的选项,耗时与范围成正比。history = 扫描所有引用可达的每个提交,是唯一能发现已提交后又被移除的密钥的扫描,也是唯一真正开销很大的扫描。 |
CQT_SECRET_SCAN_BASE | git 引用 | diff 的起点。未设置时,会从第一个可解析的上游引用推导。如果没有可解析的引用,则拒绝扫描并记录为跳过,而不会悄悄扩大到所有内容。 |
CQT_SECRET_SCAN_LOG_OPTS | 字符串 | 在 history 或 diff 扫描中传递给 gitleaks --log-opts。不能包含引号字符: gitleaks 会在将此值传给 git log 之前按空格拆分,因此引号会丢失;带引号的路径规范会扫描 0 字节、找不到任何内容并以状态码 0 退出。包含引号的值会被拒绝。范围和不带引号的路径规范均可使用。 |
CQT_SECRET_SCAN_ALLOWLIST | vendored | 应用 templates/gitleaks-vendored-allowlist.toml。它会抑制发现项,因此需要选择启用,运行时会打印一行 [FILTER],指出当前使用的配置。它能让报告更易读,但不会缩短历史记录扫描的耗时,因为仍会读取每个 blob。 |
CQT_SECRET_SCAN_ALLOWLIST_FILE | 路径 | 使用此 gitleaks 配置文件替代随附的配置文件。 |
CQT_SECRET_SCAN_TIMEOUT | 秒(默认 300) | 任意一次扫描的时间预算,由 timeout(1) 强制执行,而非使用 gitleaks 自带的 --timeout:若为 gitleaks 设置自身的超时时间,它会写入格式正确的空报告并以状态码 1 退出,调用方无法据此区分干净的工作树。timeout(1) 会以状态码 124 退出且不写入任何内容。在没有 timeout(1) 的机器上,不会设置时间预算,范围说明行会指出这一点,而不会显示一个实际上无人执行的限制。 |
# What a PR build should run: only what this branch added.
CQT_SECRET_SCAN=diff CQT_SECRET_SCAN_BASE=origin/main bash scripts/drupal/security-check.sh
# The pass that finds a credential that was committed and later gitignored.
CQT_SECRET_SCAN=history CQT_SECRET_SCAN_TIMEOUT=1800 \
CQT_SECRET_SCAN_ALLOWLIST=vendored bash scripts/drupal/security-check.sh
完整表格以及实测的 --log-opts 失败模式:Drupal / Next.js。
运维
为便于整理,所有详细的运维说明均已移至参考文件。
Drupal 运维
设置和配置
- 操作 1: 设置工具 - 安装 PHPStan、PHPMD、PHPCPD、Coder
- 操作 6: 模块专属审计 - 将审计范围限定为一个模块
- 操作 7: 添加 Composer 脚本 - 配置质量脚本
- 操作 8: CI 集成 - 设置 GitHub Actions
质量审计
- 操作 2: 完整审计 - 运行所有质量检查
- 操作 3: 覆盖率检查 - 衡量测试覆盖率
- 操作 4: SOLID 检查 - 查找原则违反情况
- 操作 5: DRY 检查 - 检测代码重复
- 操作 11: Lint 检查 - 编码规范
- 操作 12: Rector 修复 - 自动修复弃用项
开发工作流
- 操作 10: TDD 工作流 - RED-GREEN-REFACTOR 循环
安全
- 操作 20: 安全审计 — 10 层安全防护
- Drush pm:security、Composer audit
- yousha/php-security-linter、Psalm 污点分析
- 自定义 Drupal 模式、Security Review 模块
- Semgrep SAST、Trivy 扫描器、Gitleaks
- Roave Security Advisories
Next.js 操作
设置与配置
- 操作 13: 设置工具 - 安装 ESLint、Jest、安全工具
质量审计
- 操作 14: 完整审计 - 运行所有质量检查
- 操作 15: Lint 检查 - ESLint + TypeScript
- 操作 16: 覆盖率检查 - Jest 覆盖率
- 操作 17: DRY 检查 - 检测重复
- 操作 19: SOLID 检查 - 循环依赖、复杂度
开发工作流
- 操作 18: TDD 工作流 - 使用 Jest 进行 RED-GREEN-REFACTOR
安全
- 操作 21: 安全审计 — 7 层安全防护
- npm audit、ESLint 安全插件
- Semgrep SAST、Trivy 扫描器、Gitleaks
- 自定义 React/Next.js 模式(XSS、eval、导航)
- Socket CLI
可选:DAST(动态测试)
面向预发布环境的安全测试
- 操作 22: DAST 工具 — 动态安全测试
- OWASP ZAP(完整 DAST 扫描器)
- Nuclei(基于模板的 CVE 扫描)
- 需要运行中的应用程序
- 在发布前于 staging/预发布环境中使用
保存报告
所有报告必须遵循 schemas/audit-report.schema.json:
{
"meta": {
"project_type": "drupal|nextjs|monorepo",
"timestamp": "2025-12-19T12:00:00Z",
"thresholds": { "coverage_minimum": 70, "duplication_max": 5 }
},
"summary": {
"overall_score": "pass|warning|fail|unknown",
"coverage_score": "pass|warning|fail",
"solid_score": "pass|warning|fail",
"dry_score": "pass|warning|fail",
"security_score": "pass|warning|fail|skipped"
},
"coverage": { "line_coverage": 75.5, "files_analyzed": 45 },
"solid": { "violations": [] },
"dry": { "duplication_percentage": 3.2, "clones": [] },
"security": { "critical": 0, "high": 0, "medium": 3, "low": 5, "issues": [] },
"recommendations": []
}
参考资料
核心指南
references/tdd-workflow.md- RED-GREEN-REFACTOR 模式、测试命名、循环目标references/coverage-metrics.md- 按代码类型划分的覆盖率目标、PCOV 与 Xdebugreferences/dry-detection.md- 三次法则、何时允许重复references/solid-detection.md- SOLID 检测模式与修复方法references/composer-scripts.md- 可直接使用的 composer 脚本references/scope-targeting.md- 针对特定模块/组件references/post-batch-aggregation.md- 可选的PostToolBatch聚合模式(Claude Code 2.1.118+);默认不附带references/code-intelligence.md- 可选的 LSP 工具代码智能,用于更深入的 SOLID/DRY/审查分析(建议使用,但非必需)references/setup-hook-pattern.md- 可选的Setup钩子模式,用于在claude --init -p时一次性引导 CI 工具;默认不附带
运维
references/operations/drupal-setup.md- Drupal 设置运维references/operations/drupal-audits.md- Drupal 质量审计运维references/operations/drupal-security.md- Drupal 安全性(10 层,v2.0.0)references/operations/drupal-tdd.md- Drupal TDD 工作流references/operations/nextjs-setup.md- Next.js 设置运维references/operations/nextjs-audits.md- Next.js 质量审计运维references/operations/nextjs-security.md- Next.js 安全性(7 层,v2.0.0)references/operations/nextjs-tdd.md- Next.js TDD 工作流
在线开发指南(Drupal 领域)
如需了解超出工具命令范围的 Drupal 专属模式,请获取指南索引:
索引: https://camoa.github.io/dev-guides/llms.txt
可能相关的主题:solid-principles、dry-principles、security、testing、tdd、js-development、github-actions
用法:使用 WebFetch 获取索引以查找可用主题,然后在说明违规问题、建议修复方案或提供架构背景时,获取具体主题页面。
决策指南
decision-guides/test-type-selection.md- Unit、Kernel 与 Functional 的决策树decision-guides/quality-audit-checklist.md- 何时运行哪些检查(提交前与合并前)
模板
Drupal
templates/drupal/phpstan.neon- PHPStan 2.x 配置(扩展自动加载)templates/drupal/phpmd.xml- Drupal 的 PHPMD 规则集templates/drupal/phpunit.xml- 带测试套件的 PHPUnit 配置templates/ci/github-drupal.yml- 配备安全工具的 GitHub Actions 工作流
Next.js
templates/nextjs/eslint.config.js- 配备 TypeScript 和安全功能的 ESLint v9 扁平配置templates/nextjs/jest.config.js- 带覆盖率阈值的 Jest 配置templates/nextjs/jest.setup.js- 配备 Testing Library 的 Jest 设置templates/nextjs/.prettierrc- 配备 Tailwind 插件的 Prettier 配置
版本历史请参阅 CHANGELOG.md。