feat(req-test-gate): 集成 Harness Engineering 工程约束方法论

将项目级的 Ratchet/约定检测方法论融入 req-test-gate 技能,
通过 /req 流程三个节点自动触发(dev 环境检测、cr 约定建议、test Gate 0B),
无需手动记忆执行。

新增文档:harness-engineering.md、ratchet-pattern.md、convention-flow.md、
project-bootstrap.md 及 4 个模板(ratchet/convention 脚本、GATES.md、pre-commit)。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-26 11:34:42 +10:30
parent e3924e6b2b
commit b9c808cce0
13 changed files with 1333 additions and 14 deletions

View File

@@ -0,0 +1,113 @@
# Harness Engineering — 工程约束方法论
## 概述
Harness Engineering 是一套**建立自动化护栏防止新违规,同时允许渐进式清理遗留问题**的工程方法论。
**三大支柱**
| 支柱 | 核心机制 | 说明 |
|------|---------|------|
| **Ratchet** | 基线 + 单调递减 | 遗留违规数只能减不能增,新代码零容忍 |
| **约定建立** | Bug → 文档 → 自动检测 | 每个 bug 修复后立即建立约定和检测脚本 |
| **门禁层级** | Level 1-3 递进 | 按项目成熟度逐级引入基础设施 |
## 子文件索引
| 文件 | 内容 |
|------|------|
| [ratchet-pattern.md](ratchet-pattern.md) | Ratchet 模式详解Ratchet vs Hard Wall、基线格式、三命令接口 |
| [convention-flow.md](convention-flow.md) | 三步约定建立流程:修 bug → 文档化 → 自动化检测 |
| [project-bootstrap.md](project-bootstrap.md) | `/harness assess` 检测逻辑 + `/harness init` 分级实施指南 |
| [templates/](templates/) | 脚本模板ratchet、约定检测、GATES.md、pre-commit 配置 |
## 命令集与自动触发
| 命令 | 手动触发 | 自动触发时机 |
|------|---------|-------------|
| `/harness assess` | 用户显式调用 | **`/req dev`** 启动时快速检测(`.husky/` + `scripts/check-*.sh` 都不存在 → 提示 Level 0 |
| `/harness init [level]` | 用户显式调用 | 不自动触发(创建基础设施需用户确认) |
| `/harness convention [name]` | 用户显式调用 | **`/req cr` + category=bug** 时自动建议(分析根因 → 建议约定 → 用户确认后执行) |
| `/harness report` | 用户显式调用 | **`/req test` Gate 0B** 自动运行所有 `scripts/check-*.sh` |
### 自动触发流程图
```
/req dev (每次)
└→ 快速检测: .husky/ 存在? scripts/check-*.sh 存在?
└→ 都不存在 → 提示「Level 0建议 /harness init」不阻塞
└→ 有任一 → 静默通过
/req cr (bug 类型需求)
└→ 五视角扫描
└→ 运行 scripts/check-*.sh → 写入 CR 报告
└→ ⭐ 分析 bug 根因 → 可自动检测? → 建议建立约定
└→ 用户确认 → convention flow文档化 → 脚本 → CLAUDE.md
/req test
└→ Gate 0A: scope 分级
└→ Gate 0B: 运行所有 scripts/check-*.sh
└→ 有 FAIL → 阻塞,必须修复
└→ 全 PASS → 继续 Gate 1-5
```
> 手动命令仍然可用。自动触发只是让你"不用记得去跑"。
## 成熟度分级
| Level | 基础设施 | 适用场景 |
|-------|---------|---------|
| **0** | 无自动化检查 | 新项目/原型 |
| **1** | husky + lint-staged + formatter | 所有活跃项目 |
| **2** | + ratchet 脚本 + GATES.md + CLAUDE.md 质量段落 | >10k LOC 或 >1 开发者 |
| **3** | + CI workflow + 架构强制 + 约定检测 | 有 PR 流程和受保护分支的项目 |
## 技术栈检测矩阵
| 技术栈 | 检测标志 | Level 1 工具 | Level 2+ 工具 |
|--------|---------|-------------|--------------|
| **Go** | `go.mod` | gofmt + go vet | golangci-lint, architecture ratchet |
| **React/TS** | `package.json` + react 依赖 | ESLint + Prettier | tsc --noEmit, convention scripts |
| **Vue/TS** | `package.json` + vue 依赖 | ESLint + Prettier | vite build check |
| **Monorepo** | 多个 `package.json` / `go.mod` | 各子项目独立 lint | 统一 CI + 分模块 ratchet |
## CLAUDE.md 约定文档格式
在项目的 CLAUDE.md 中添加约定时,必须遵循以下标准格式:
```markdown
### {类别}: {约定名称}
{原因描述 — 为什么需要这条约定}
**规则:{一句话规则描述}**
\`\`\`{语言}
// WRONG — {错误原因}
{错误代码示例}
// CORRECT — {正确做法}
{正确代码示例}
\`\`\`
**检查命令**`./scripts/check-{name}.sh`CI 自动运行)
```
## 与其他技能的关系
Harness 和 req-test-gate 是**互补关系**,不要混淆两者的 Gate 编号:
| 维度 | Harness | req-test-gate |
|------|---------|--------------|
| **作用域** | 项目级(所有 PR 共享) | 需求级(每个需求独立) |
| **触发方式** | git commit / PR / `/req test` Gate 0B | `/req test` Gate 1-5 |
| **管什么** | pre-commit、lint、ratchet 脚本、约定检测 | 测试执行、质量验证、文档持久化、回归 |
| **产出物** | `.husky/``scripts/check-*.sh`、CLAUDE.md 约定 | 测试报告、回归用例 |
**⚠️ 注意**:项目的 `docs/quality/GATES.md` 中有自己的 Gate 编号Gate 0=pre-commit, Gate 1=CI lint, Gate 2=ratchet...),这是**项目文档的编号**,与 req-test-gate 的 Gate 0-5 是两套独立体系,不要混用。
| 技能 | 职责 |
|------|------|
| **harness**(本文档) | 建立和维护项目级护栏脚本、约定、CLAUDE.md |
| **req-test-gate** | 需求级测试门禁Gate 0-5其中 Gate 0B 自动调用 harness 建立的脚本 |
| **dev-coding** | 遵守 harness 建立的 CLAUDE.md 约定,编码时不违反 ratchet |