SuperAPI AI 工具集

delivery-gate

测试与质量

查看项目

更新于 10-15 08:34

技能介绍

用途

Delivery Gate 是一个面向 Claude Code 的机械式质量门禁(Stop Hook),在 Claude 结束会话前执行检查,确保在质量检查通过前阻止其完成任务。它使用纯确定性检查——文件修改时间戳、磁盘占用和转录文本上的正则匹配,不涉及 AI 推理。

它与推理型门禁(如 self-audit)不同:delivery-gate 检查机器可验证的事实,self-audit 检查输出质量在四个推理维度上的表现。两者结合形成纵深防御:

  • delivery-gate:"今天是否动过学习库?磁盘空间是否安全?"
  • self-audit:"文件内容是否正确、完整、诚实?"

这与 CI 流水线门禁是同一模式——自动化的确定性检查,验证机器可读的事实,而非信任自我报告的状态。

主要能力

检查项 机制 命中时行为
合理化话术模式 对转录文本尾部进行正则匹配 仅警告(从不拦截)
学习库过期 检查 5 个可配置路径的 mtime 部分过期则警告;≥3 个过期,或 growth-log 过期且为复杂任务则拦截
磁盘空间 < 50GB shutil.disk_usage 警告
磁盘空间 < 15GB shutil.disk_usage 拦截(exit 2)

合理化检测会对"先跳过测试""既有 bug"之类的表述发出警告——这些是思考可能被草率收尾的表面信号。它从不单独触发拦截,因为正则启发式可能产生误报。触发拦截的条件是:磁盘临界、≥3 个学习库过期,或 growth-log 特定过期(均要求为复杂任务,即 ≥3 次编辑)。

设计动机

Claude Code 内置检查覆盖代码质量(build → type → lint → test)。但存在另一种失败模式:智能体产出了可运行的代码,却忽略了会话卫生——学习未被记录、合理化的捷径、磁盘在无声中被耗尽。

经过多次"交付即遗忘"的会话,人并没有成长。此 hook 强制养成习惯:复杂任务 → 必须触碰学习库。

安装方式

从 ECC 仓库根目录:

mkdir -p ~/.claude/scripts
cp skills/delivery-gate/hooks/quality-gate.py ~/.claude/scripts/

添加到 ~/.claude/settings.json:

{
  "hooks": {
    "Stop": [{
      "hooks": [{
        "type": "command",
        "command": "python3 ~/.claude/scripts/quality-gate.py",
        "timeout": 5000
      }]
    }]
  }
}

学习库

在项目的 memory 目录中创建以下文件。hook 会检查其中至少一个是否在今天被更新:

memory/
├── growth-log/          # 每日学习条目(目录)
├── decisions/log.md     # 决策日志
├── output-index.md      # 会话产出索引
├── ratings-tracker.md   # 技能评分随时间的变化
└── tooling_capabilities.md  # 已知工具清单

按需自定义 LIBS 字典以匹配自己的文件结构。

配置

编辑 quality-gate.py:

变量 默认值 用途
RATIONALIZE 4 个模式 用于合理化检测的正则模式
LIBS 5 个库 检查今日是否更新的文件/目录
COMPLEX_THRESHOLD 3 判定为复杂任务的 Edit/Write 调用次数
DISK_WARN_GB 50 低于此值警告
DISK_CRIT_GB 15 低于此值拦截

示例

简单会话——允许:

edit_count=1 (< 3, 非复杂) → exit 0

复杂任务,已记录学习——允许:

edit_count=5 (复杂) → 检查 LIBS → growth-log 今天已更新 → exit 0

复杂任务,无学习记录——被拦截:

edit_count=4 (复杂) → 检查 LIBS → 全部 5 个过期 → exit 2
stderr: "Blocked: complex task completed but no learning captured today."

磁盘空间不足——被拦截:

disk_free=12GB < 15GB 临界 → exit 2
stderr: "Blocked: disk space at 12GB (threshold: 15GB)."

限制

该 hook 强制的是"触碰学习库"这一习惯,而非所记录内容的质量。如果 output-index.md 被更新但 growth-log 被跳过,hook 仍会通过(5 个库中触碰了 1 个)。这是有意设计:机械门禁检查机器可验证的事实。若需内容质量验证,请搭配 self-audit 使用。

兼容性

  • Python 3.8+(使用 from future import annotations)
  • 跨平台:Windows、macOS、Linux
  • 除标准库外零依赖

质量说明

该代码经过 4 轮自动化代码审查(CodeRabbit + Greptile),发现并修复了 9 个真实 bug。

相关工具

  • self-audit —— 推理质量门禁(完整性/一致性/有据性/诚实性)
  • verification-loop —— 代码质量检查(build/type/lint/test)
  • gateguard —— PreToolUse 安全门禁