mcpField
Q
quality-enforcement

quality-enforcement

github.com/noobygains测试与质量11559 次安装3 天前更新
代码仓库

关于 quality-enforcement

quality-enforcement 是面向开发团队的质量规范技能,强调在合并前自动执行可验证的检查。内容涵盖代码检查、类型、测试、构建、依赖、复杂度、死代码和打包体积。

主要功能

  1. 01每个拉取请求执行 CI 检查
  2. 02代码检查与严格类型标准
  3. 03不可降低的覆盖率门槛
  4. 04构建、依赖与体积检查
  5. 05复杂度与死代码检查

适用场景

  1. 01设置代码合并前的质量门槛
  2. 02审阅项目的 CI 质量检查清单

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/noobygains/godmode --skill quality-enforcement

安装后在 Claude Code 中输入/quality-enforcement确认已加载。

详细介绍

质量管控

概述

质量管控是自动化的,而非仅仅是目标。凡是机器能够检查的,都必须检查。

核心原则: 未在 CI 中强制执行的质量检查,就等于不存在。

没有例外。没有变通办法。没有捷径。

首要原则

NO CODE LANDS WITHOUT ALL QUALITY CHECKS PASSING

如果检查失败,就修复代码。绝不禁用检查。绝不绕过 CI。

适用时机

务必在以下操作之前:

  • 提交代码
  • 发起拉取请求
  • 合并到主干
  • 发布到生产环境

尤其是在以下情况:

  • “这次就先抑制一下代码检查工具的提示吧”(绝不)
  • “CI 太慢了,手动合并吧”(修复 CI,不要跳过它)
  • “有类型错误,但运行时没问题”(修复类型)
  • “覆盖率下降了,但关键路径都测过了”(恢复覆盖率)

执行流程

BEFORE any PR or merge:

1. LINT: Zero errors, zero warnings
2. TYPES: Zero type errors (strict mode)
3. TESTS: All passing, coverage meets threshold
4. BUILD: Clean build, no warnings
5. SIZE: Bundle/binary within budget (if applicable)
6. DEPS: No known vulnerabilities (critical/high)
7. COMPLEXITY: No functions exceeding complexity threshold

Any check fails = code is not ready. Fix before advancing.

质量检查参考

检查 1:代码检查
Standard: Zero errors AND zero warnings
设置值理由
错误0不容妥协
警告0警告会变成你习惯忽略的错误
提交配置是确保所有贡献者使用一致的配置
CI 强制执行是本地覆盖配置无关紧要

今天的警告就是明天的错误。 要么修复,要么调整规则。绝不容忍警告。

要禁用规则? 只有团队明确同意该规则不适用于此项目时才可以。请在配置文件中记录理由。绝不要为了方便而在代码行内禁用规则。

检查 2:类型安全
Standard: Zero type errors, strict mode enabled

TypeScript:

{
  "compilerOptions": {
    "strict": true,
    "noUncheckedIndexedAccess": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "forceConsistentCasingInFileNames": true
  }
}

Python: 使用严格模式的 mypy 或 pyright。

反模式问题修复方法
any 类型禁用了类型检查使用具体类型或泛型
// @ts-ignore掩盖真实错误修复类型错误
# type: ignore同样的问题修复类型错误
非严格模式造成虚假的安全感从第一天起就启用严格模式

any 是你选择不解决的类型错误。 每个 any 都会削弱它所影响的一切的类型系统。

检查 3:测试覆盖率
Standard: Coverage threshold that never decreases
指标最低要求目标
行覆盖率80%90%+
分支覆盖率70%85%+
新增代码覆盖率90%100%(努力达到)

覆盖率阈值只增不减。 它们只会提高,不会降低。配置 CI,在覆盖率低于当前水平时使其失败。

覆盖率是必要条件,但不是充分条件。断言质量差的 100% 覆盖率,不如断言严谨的 70% 覆盖率。覆盖率检查应与 TDD 纪律(godmode:test-first)结合使用。

检查 4:构建
Standard: Clean build, zero warnings
  • 构建必须成功完成
  • 编译器和构建警告为零
  • 输出符合预期结构
  • 构建时不得缺少依赖项
检查 5:包体积预算(前端)
Standard: Total bundle size within defined budget
目标预算工具
初始 JS(压缩后)<200KBwebpack-bundle-analyzer
CSS<50KBPurgeCSS 检查
图片已优化,WebP/AVIFimagemin
页面总大小<1MBLighthouse

设定预算,并在 CI 中强制执行。 超出预算时,分析包内容并删除或拆分内容。

检查 6:依赖项审计
Standard: Zero critical or high vulnerabilities
语言命令CI 集成
JavaScriptnpm audit --audit-level=high存在高危及以上问题时失败
Pythonpip-audit 或 safety check存在高危及以上问题时失败
Gogovulncheck ./...存在任何问题时失败
Rustcargo audit存在任何问题时失败

还要确认:

  • 没有不必要的依赖项(每个依赖项都确实在使用吗?)
  • 没有重复的依赖项(同一软件包存在不同版本)
  • 依赖项仍在维护(最近一次更新在 12 个月以内)
检查 7:复杂度指标
Standard: No function exceeds complexity threshold
指标阈值工具
圈复杂度每个函数 <10ESLint(complexity 规则)、radon、gocyclo
函数长度<50 行Linter 规则
文件长度<400 行Linter 规则
参数数量每个函数 <5 个Linter 规则

复杂度超出阈值时: 重构。提取函数。简化条件语句。绝不提高阈值。

检查 8:死代码
Standard: No unused exports, variables, or dependencies
内容工具
未使用的导出ts-prune、knip
未使用的依赖depcheck、knip
未使用的变量Linter(no-unused-vars)
不可达代码Linter、类型检查器

死代码会误导人。它暗示有其他内容依赖它。删除它。

CI 流水线模板

# Minimum quality enforcement pipeline
quality-checks:
  steps:
    - name: Lint
      run: npm run lint
    - name: Type Check
      run: npm run typecheck
    - name: Test
      run: npm test -- --coverage
    - name: Coverage Check
      run: check-coverage --threshold 80
    - name: Build
      run: npm run build
    - name: Bundle Size
      run: bundlesize
    - name: Audit
      run: npm audit --audit-level=high

每个 PR 都会运行所有检查。合并前必须全部通过。

认知陷阱

合理化说辞事实
“只是 lint 警告,不是错误”被你忽视的警告,会变成你漏掉的错误。
“有类型错误,但运行时能正常工作”类型能防止你尚未遇到的运行时错误。
“覆盖率下降了 1%,问题不大”每个 PR 下降 1%,一年就会下降 50%。阈值只会越设越高。
“跳过 CI 吧,我在本地测试过了”本地环境与 CI 不同。这正是 CI 存在的原因。
“因为我们添加了功能,所以打包体积变大了”新功能应该替换或拆分现有内容,而不只是增加内容。
“漏洞在开发依赖里”开发依赖会在 CI 中运行。CI 里有密钥。这仍然有风险。
“函数虽然复杂,但可读”复杂度限制之所以存在,是因为可读性是主观的。
“以后可能会用到这段死代码”Git 会记住。删除它。需要时从历史记录中恢复。

护栏——立即停止并修复

  • 未提供文档化理由就内联禁用 lint 规则
  • 使用 @ts-ignore 或 # type: ignore,但没有附带相关 issue
  • 配置中的覆盖率阈值被降低
  • 为了合并而跳过或覆盖 CI
  • any 类型在整个代码库中蔓延
  • 打包体积增大却未进行调查
  • 将警告视为可以接受
  • 因为“这是开发依赖”而忽略审计失败

以上任何一种情况都意味着:检查机制已失效。继续编写代码之前,先修复检查机制。

集成

互补关系:

  • godmode:test-first — 测试只是众多检查之一
  • godmode:completion-gate — 质量检查是验证证据
  • godmode:project-bootstrap — 在项目初始化时配置检查
  • godmode:security-protocol — 依赖审计是一项安全检查
  • godmode:performance-tuning — 打包体积是一项性能检查

总结

Every quality check automated in CI. Every check passing before merge. No exceptions.

如果检查可以绕过,就一定会被绕过。让绕过检查变得不可能。

评论

支持 Markdown