hunter-harness 0.1.3 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +11 -0
- package/dist/bin.js +1540 -491
- package/package.json +9 -7
- package/resources/harness/general/.harness-build.json +0 -5
- package/resources/harness/general/CONTEXT.md +0 -65
- package/resources/harness/general/README.md +0 -478
- package/resources/harness/general/agents/harness-evaluator.md +0 -96
- package/resources/harness/general/agents/harness-explorer.md +0 -72
- package/resources/harness/general/agents/harness-reviewer.md +0 -69
- package/resources/harness/general/harness-archive/SKILL.md +0 -215
- package/resources/harness/general/harness-archive/checklist.md +0 -52
- package/resources/harness/general/harness-archive/reference.md +0 -103
- package/resources/harness/general/harness-archive/scripts/gen-manifest.ps1 +0 -31
- package/resources/harness/general/harness-archive/templates/render-summary.mjs +0 -171
- package/resources/harness/general/harness-archive/templates/summary-data-template.json +0 -128
- package/resources/harness/general/harness-codebase-map/SKILL.md +0 -112
- package/resources/harness/general/harness-codebase-map/checklist.md +0 -126
- package/resources/harness/general/harness-codebase-map/reference.md +0 -364
- package/resources/harness/general/harness-codebase-map/templates/ARCHITECTURE.md +0 -57
- package/resources/harness/general/harness-codebase-map/templates/CONCERNS.md +0 -49
- package/resources/harness/general/harness-codebase-map/templates/CONVENTIONS.md +0 -57
- package/resources/harness/general/harness-codebase-map/templates/INTEGRATIONS.md +0 -52
- package/resources/harness/general/harness-codebase-map/templates/STACK.md +0 -55
- package/resources/harness/general/harness-codebase-map/templates/STRUCTURE.md +0 -69
- package/resources/harness/general/harness-codebase-map/templates/TESTING.md +0 -64
- package/resources/harness/general/harness-codebase-map/templates/map-manifest.schema.json +0 -73
- package/resources/harness/general/harness-codebase-map/templates/map-summary.md +0 -64
- package/resources/harness/general/harness-knowledge-ingest/SKILL.md +0 -246
- package/resources/harness/general/harness-knowledge-ingest/design.md +0 -842
- package/resources/harness/general/harness-knowledge-ingest/evaluations/harness_knowledge_evaluation.xml +0 -42
- package/resources/harness/general/harness-knowledge-ingest/mcp-config.example.json +0 -10
- package/resources/harness/general/harness-knowledge-ingest/reference.md +0 -309
- package/resources/harness/general/harness-knowledge-ingest/scripts/harness_knowledge.py +0 -4082
- package/resources/harness/general/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +0 -273
- package/resources/harness/general/harness-knowledge-query/SKILL.md +0 -164
- package/resources/harness/general/harness-plan/SKILL.md +0 -127
- package/resources/harness/general/harness-plan/checklist.md +0 -243
- package/resources/harness/general/harness-plan/protocols.md +0 -124
- package/resources/harness/general/harness-plan/reference.md +0 -376
- package/resources/harness/general/harness-review/SKILL.md +0 -156
- package/resources/harness/general/harness-review/checklist.md +0 -124
- package/resources/harness/general/harness-review/protocols.md +0 -68
- package/resources/harness/general/harness-review/reference.md +0 -86
- package/resources/harness/general/harness-run/SKILL.md +0 -132
- package/resources/harness/general/harness-run/checklist.md +0 -259
- package/resources/harness/general/harness-run/protocols.md +0 -78
- package/resources/harness/general/harness-run/reference.md +0 -834
- package/resources/harness/general/harness-submit/SKILL.md +0 -159
- package/resources/harness/general/harness-submit/checklist.md +0 -407
- package/resources/harness/general/harness-submit/reference.md +0 -152
- package/resources/harness/general/harness-sync/SKILL.md +0 -82
- package/resources/harness/general/harness-sync/reference.md +0 -153
- package/resources/harness/general/harness-test/SKILL.md +0 -180
- package/resources/harness/general/harness-test/checklist.md +0 -319
- package/resources/harness/general/harness-test/pitfalls.md +0 -260
- package/resources/harness/general/harness-test/reference.md +0 -791
- package/resources/harness/general/protocols/archive-report-protocol.md +0 -175
- package/resources/harness/general/protocols/evidence-based-reporting-protocol.md +0 -134
- package/resources/harness/general/protocols/ledger-protocol.md +0 -270
- package/resources/harness/general/protocols/powershell-protocol.md +0 -181
- package/resources/harness/general/protocols/report-pipeline-protocol.md +0 -150
- package/resources/harness/general/protocols/sensitive-info-protocol.md +0 -92
- package/resources/harness/general/protocols/state-layout-protocol.md +0 -131
- package/resources/harness/general/protocols/submit-protocol.md +0 -78
- package/resources/harness/general/scripts/harness_archive.py +0 -2319
- package/resources/harness/general/scripts/harness_deploy.py +0 -613
- package/resources/harness/general/scripts/harness_events.py +0 -680
- package/resources/harness/general/scripts/harness_ledger.py +0 -671
- package/resources/harness/general/scripts/harness_preflight.py +0 -780
- package/resources/harness/general/scripts/harness_service.py +0 -1331
- package/resources/harness/java/.harness-build.json +0 -5
- package/resources/harness/java/CONTEXT.md +0 -65
- package/resources/harness/java/README.md +0 -478
- package/resources/harness/java/agents/harness-evaluator.md +0 -96
- package/resources/harness/java/agents/harness-explorer.md +0 -72
- package/resources/harness/java/agents/harness-reviewer.md +0 -69
- package/resources/harness/java/harness-apidoc/SKILL.md +0 -86
- package/resources/harness/java/harness-apidoc/checklist.md +0 -142
- package/resources/harness/java/harness-apidoc/reference.md +0 -233
- package/resources/harness/java/harness-archive/SKILL.md +0 -215
- package/resources/harness/java/harness-archive/checklist.md +0 -52
- package/resources/harness/java/harness-archive/reference.md +0 -103
- package/resources/harness/java/harness-archive/scripts/gen-manifest.ps1 +0 -31
- package/resources/harness/java/harness-archive/templates/render-summary.mjs +0 -171
- package/resources/harness/java/harness-archive/templates/summary-data-template.json +0 -128
- package/resources/harness/java/harness-codebase-map/SKILL.md +0 -112
- package/resources/harness/java/harness-codebase-map/checklist.md +0 -126
- package/resources/harness/java/harness-codebase-map/reference.md +0 -364
- package/resources/harness/java/harness-codebase-map/templates/ARCHITECTURE.md +0 -57
- package/resources/harness/java/harness-codebase-map/templates/CONCERNS.md +0 -49
- package/resources/harness/java/harness-codebase-map/templates/CONVENTIONS.md +0 -57
- package/resources/harness/java/harness-codebase-map/templates/INTEGRATIONS.md +0 -52
- package/resources/harness/java/harness-codebase-map/templates/STACK.md +0 -55
- package/resources/harness/java/harness-codebase-map/templates/STRUCTURE.md +0 -69
- package/resources/harness/java/harness-codebase-map/templates/TESTING.md +0 -64
- package/resources/harness/java/harness-codebase-map/templates/map-manifest.schema.json +0 -73
- package/resources/harness/java/harness-codebase-map/templates/map-summary.md +0 -64
- package/resources/harness/java/harness-knowledge-ingest/SKILL.md +0 -246
- package/resources/harness/java/harness-knowledge-ingest/design.md +0 -842
- package/resources/harness/java/harness-knowledge-ingest/evaluations/harness_knowledge_evaluation.xml +0 -42
- package/resources/harness/java/harness-knowledge-ingest/mcp-config.example.json +0 -10
- package/resources/harness/java/harness-knowledge-ingest/reference.md +0 -309
- package/resources/harness/java/harness-knowledge-ingest/scripts/harness_knowledge.py +0 -4082
- package/resources/harness/java/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +0 -273
- package/resources/harness/java/harness-knowledge-query/SKILL.md +0 -164
- package/resources/harness/java/harness-package/SKILL.md +0 -87
- package/resources/harness/java/harness-package/checklist.md +0 -322
- package/resources/harness/java/harness-package/reference.md +0 -210
- package/resources/harness/java/harness-plan/SKILL.md +0 -127
- package/resources/harness/java/harness-plan/checklist.md +0 -243
- package/resources/harness/java/harness-plan/protocols.md +0 -124
- package/resources/harness/java/harness-plan/reference.md +0 -376
- package/resources/harness/java/harness-review/SKILL.md +0 -156
- package/resources/harness/java/harness-review/checklist.md +0 -124
- package/resources/harness/java/harness-review/protocols.md +0 -68
- package/resources/harness/java/harness-review/reference.md +0 -86
- package/resources/harness/java/harness-run/SKILL.md +0 -148
- package/resources/harness/java/harness-run/checklist.md +0 -250
- package/resources/harness/java/harness-run/protocols.md +0 -78
- package/resources/harness/java/harness-run/reference.md +0 -814
- package/resources/harness/java/harness-submit/SKILL.md +0 -166
- package/resources/harness/java/harness-submit/checklist.md +0 -407
- package/resources/harness/java/harness-submit/reference.md +0 -152
- package/resources/harness/java/harness-sync/SKILL.md +0 -82
- package/resources/harness/java/harness-sync/reference.md +0 -153
- package/resources/harness/java/harness-test/SKILL.md +0 -192
- package/resources/harness/java/harness-test/checklist.md +0 -317
- package/resources/harness/java/harness-test/pitfalls-java.md +0 -16
- package/resources/harness/java/harness-test/pitfalls.md +0 -260
- package/resources/harness/java/harness-test/reference.md +0 -788
- package/resources/harness/java/protocols/archive-report-protocol.md +0 -175
- package/resources/harness/java/protocols/evidence-based-reporting-protocol.md +0 -134
- package/resources/harness/java/protocols/ledger-protocol.md +0 -270
- package/resources/harness/java/protocols/powershell-protocol.md +0 -181
- package/resources/harness/java/protocols/report-pipeline-protocol.md +0 -150
- package/resources/harness/java/protocols/sensitive-info-protocol.md +0 -92
- package/resources/harness/java/protocols/state-layout-protocol.md +0 -131
- package/resources/harness/java/protocols/submit-protocol.md +0 -78
- package/resources/harness/java/scripts/harness_archive.py +0 -2319
- package/resources/harness/java/scripts/harness_deploy.py +0 -613
- package/resources/harness/java/scripts/harness_events.py +0 -680
- package/resources/harness/java/scripts/harness_ledger.py +0 -671
- package/resources/harness/java/scripts/harness_preflight.py +0 -780
- package/resources/harness/java/scripts/harness_service.py +0 -1331
- package/resources/harness/manifests/general.json +0 -276
- package/resources/harness/manifests/java.json +0 -304
- package/resources/harness/migrations/0.1.1/general.json +0 -358
- package/resources/harness/migrations/0.1.1/java.json +0 -398
|
@@ -1,376 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: harness-plan 的需求提取模板、任务拆分规则、测试场景4维度详细格式。仅在执行规划需要参考详细格式时读取。
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# harness-plan
|
|
6
|
-
|
|
7
|
-
## Worktree 决策文件模板
|
|
8
|
-
|
|
9
|
-
阶段 2 必须生成 `.harness/changes/<change-name>/meta/worktree.json`。这是后续 `/harness-run` 是否创建/切换 worktree 的唯一机器可读依据。
|
|
10
|
-
|
|
11
|
-
### 使用 Worktree
|
|
12
|
-
|
|
13
|
-
```json
|
|
14
|
-
{
|
|
15
|
-
"requested": true,
|
|
16
|
-
"created": false,
|
|
17
|
-
"path": ".claude/worktrees/<change-name>",
|
|
18
|
-
"branch": "worktree/<change-name>",
|
|
19
|
-
"decisionBy": "user",
|
|
20
|
-
"decisionAt": "YYYY-MM-DD HH:mm",
|
|
21
|
-
"ownerSkill": "harness-run"
|
|
22
|
-
}
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
### 不使用 Worktree
|
|
26
|
-
|
|
27
|
-
```json
|
|
28
|
-
{
|
|
29
|
-
"requested": false,
|
|
30
|
-
"created": false,
|
|
31
|
-
"path": null,
|
|
32
|
-
"branch": null,
|
|
33
|
-
"decisionBy": "user",
|
|
34
|
-
"decisionAt": "YYYY-MM-DD HH:mm",
|
|
35
|
-
"ownerSkill": null
|
|
36
|
-
}
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### execution-log 记录示例
|
|
40
|
-
|
|
41
|
-
```md
|
|
42
|
-
## 阶段 2:Worktree 决策
|
|
43
|
-
- 用户选择:使用 Worktree
|
|
44
|
-
- 决策文件:.harness/changes/<change-name>/meta/worktree.json
|
|
45
|
-
- requested=true, created=false
|
|
46
|
-
- 创建责任:harness-run
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
## 参考 — 详细格式
|
|
50
|
-
|
|
51
|
-
## 阶段 1:需求接收
|
|
52
|
-
|
|
53
|
-
接收用户输入(文字描述或文档路径),提取关键信息:
|
|
54
|
-
- 功能范围(要做什么、不做什么)
|
|
55
|
-
- 业务规则(校验逻辑、权限约束)
|
|
56
|
-
- 数据模型变更(新表、新字段)
|
|
57
|
-
- 接口变更(新增/修改的端点)
|
|
58
|
-
|
|
59
|
-
如果需求不明确(如"做一个指标管理功能"),列出具体疑问向用户澄清——不要猜测后直接设计。
|
|
60
|
-
|
|
61
|
-
### 影响面检查
|
|
62
|
-
|
|
63
|
-
方案汇总后(阶段 4 末尾),主动列出可能受影响但用户未提及的点,让用户一次性确认:
|
|
64
|
-
|
|
65
|
-
```markdown
|
|
66
|
-
### 影响面检查
|
|
67
|
-
|
|
68
|
-
基于代码探索,以下点可能受本次变更影响但尚未讨论:
|
|
69
|
-
|
|
70
|
-
| # | 影响点 | 说明 | 需要处理? |
|
|
71
|
-
|:--:|--------|------|:----------:|
|
|
72
|
-
| 1 | 请求参数变更 | 数据契约删除字段后,前端请求格式变化 | 是/否 |
|
|
73
|
-
| 2 | 数据库迁移 | 字段删除前需迁移历史数据 | 是/否 |
|
|
74
|
-
| 3 | 其他模块引用 | 其他业务模块引用了该字段 | 是/否 |
|
|
75
|
-
| 4 | 前端兼容性 | 旧前端传已删除字段会报错 | 是/否 |
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
> 这一检查的目的是减少设计文档生成后的迭代轮次——提前发现用户可能提出的修改。
|
|
79
|
-
|
|
80
|
-
## 阶段 3:代码探索(只读)输出格式
|
|
81
|
-
|
|
82
|
-
```markdown
|
|
83
|
-
## 设计概要 — <功能名>
|
|
84
|
-
|
|
85
|
-
### 涉及模块
|
|
86
|
-
- 接口层: xxx-server/.../xxx/
|
|
87
|
-
- 业务层: 同上
|
|
88
|
-
- 新增表: xxx
|
|
89
|
-
- 修改表: xxx (新增 N 字段)
|
|
90
|
-
|
|
91
|
-
### 接口变更
|
|
92
|
-
| 方法 | 路径 | 类型 |
|
|
93
|
-
|------|------|:----:|
|
|
94
|
-
| GET | /xxx | 新增 |
|
|
95
|
-
| POST | /xxx | 修改 |
|
|
96
|
-
|
|
97
|
-
### 关键决策
|
|
98
|
-
- 决策1: 说明
|
|
99
|
-
- 决策2: 说明
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
## 阶段 5:生成设计文档 ⚠️ 用户审核
|
|
103
|
-
|
|
104
|
-
基于代码探索和需求澄清的结果,撰写设计文档并展示给用户审核。
|
|
105
|
-
|
|
106
|
-
> **本阶段是强制检查点。** 设计文档生成后必须展示给用户,收到确认后才能进入阶段 6(任务拆分)。设计文档确保方向正确后再细化任务——避免基于错误理解拆分出无效任务。
|
|
107
|
-
|
|
108
|
-
**用户确认后必须立即写入** `.harness/changes/<change-name>/spec/<change-name>-design.md`。如果此文件不存在,harness-plan 不得进入阶段 6。
|
|
109
|
-
|
|
110
|
-
**设计文档路径规则**:设计文档必须保存到 `.harness/changes/<change-name>/spec/<change-name>-design.md`。禁止保存到 `docs/superpowers/specs/` 作为正式产物;`/harness-plan` 不运行时调用 Superpowers。
|
|
111
|
-
|
|
112
|
-
### 设计文档模板
|
|
113
|
-
|
|
114
|
-
```markdown
|
|
115
|
-
---
|
|
116
|
-
change-name: <change-name>
|
|
117
|
-
created: YYYY-MM-DD HH:mm
|
|
118
|
-
status: approved
|
|
119
|
-
source: harness-plan
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
# <功能名> 设计文档
|
|
123
|
-
|
|
124
|
-
> 日期:YYYY-MM-DD
|
|
125
|
-
> 状态:待审核
|
|
126
|
-
> 范围:<简述改动范围>
|
|
127
|
-
|
|
128
|
-
---
|
|
129
|
-
|
|
130
|
-
## 1. 背景与动机
|
|
131
|
-
|
|
132
|
-
<为什么做这个改动?现有代码有什么问题或缺失?这个改动解决什么痛点?>
|
|
133
|
-
|
|
134
|
-
<如果涉及差距分析,用表格对比现状与目标:>
|
|
135
|
-
|
|
136
|
-
| 维度 | 现状 | 目标 | 差距级别 |
|
|
137
|
-
|------|------|------|---------|
|
|
138
|
-
| ... | ... | ... | 🔴/🟡/🟠 |
|
|
139
|
-
|
|
140
|
-
---
|
|
141
|
-
|
|
142
|
-
## 2. 方案概述
|
|
143
|
-
|
|
144
|
-
<选定方案的核心思路,2-3句话概括>
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
## 3. 详细设计
|
|
149
|
-
|
|
150
|
-
<按改动涉及的维度分节展示,每节包含:>
|
|
151
|
-
- 具体做法
|
|
152
|
-
- 配置变更
|
|
153
|
-
- 关键设计决策及原因
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## 4. 变更清单
|
|
158
|
-
|
|
159
|
-
| 类别 | 文件路径 | 说明 |
|
|
160
|
-
|------|---------|------|
|
|
161
|
-
| 新增 | `exact/path/to/file` | ... |
|
|
162
|
-
| 修改 | `exact/path/to/file` | ... |
|
|
163
|
-
|
|
164
|
-
---
|
|
165
|
-
|
|
166
|
-
## 5. 验证方式
|
|
167
|
-
|
|
168
|
-
<如何测试这些改动?列出关键验证步骤>
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
### 设计文档自审
|
|
172
|
-
|
|
173
|
-
写完设计文档后,用以下清单自检:
|
|
174
|
-
- □ 无"TBD"/"TODO"/未完成章节
|
|
175
|
-
- □ 各节之间无矛盾
|
|
176
|
-
- □ 范围聚焦,无不相关内容
|
|
177
|
-
- □ 无歧义需求(可被两种方式解读的,已选一种并明确说明)
|
|
178
|
-
|
|
179
|
-
## 阶段 6:任务拆分
|
|
180
|
-
|
|
181
|
-
将设计拆分为可追踪的任务,标注涉及文件和依赖关系。任务拆分执行 `protocols.md` 的 `implementation-planning-protocol`:plan 简表保持精炼,implementation-detail 按复杂度自适应展开。
|
|
182
|
-
|
|
183
|
-
### 产物结构
|
|
184
|
-
|
|
185
|
-
推荐结构:
|
|
186
|
-
|
|
187
|
-
```
|
|
188
|
-
.harness/changes/<change-name>/plans/
|
|
189
|
-
├── <change-name>-plan.md # harness 简洁任务表,run 默认读取
|
|
190
|
-
├── <change-name>-implementation-detail.md # 原生自适应详细执行参考,run 补充读取
|
|
191
|
-
└── <change-name>-test-scenarios.md # 测试场景表
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
### 计划文件 frontmatter(必须)
|
|
195
|
-
|
|
196
|
-
```yaml
|
|
197
|
-
---
|
|
198
|
-
change-name: <change-name>
|
|
199
|
-
plan-name: <change-name>
|
|
200
|
-
created: YYYY-MM-DD HH:mm
|
|
201
|
-
source-spec: ../spec/<change-name>-design.md
|
|
202
|
-
implementation-detail: ./<change-name>-implementation-detail.md
|
|
203
|
-
test-scenarios: ./<change-name>-test-scenarios.md
|
|
204
|
-
status: approved
|
|
205
|
-
---
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
### 简洁任务表格式(`<change-name>-plan.md`)
|
|
209
|
-
|
|
210
|
-
```markdown
|
|
211
|
-
| # | 任务 | 涉及文件 | 依赖 |
|
|
212
|
-
|:--:|------|----------|:----:|
|
|
213
|
-
| 1 | 新建枚举类 | 2 个枚举 | - |
|
|
214
|
-
| 2 | 扩展错误码 | 错误码定义文件 | - |
|
|
215
|
-
| 3 | 编写数据库迁移脚本 | 1 个迁移脚本 | - |
|
|
216
|
-
| 4 | 新建数据模型 | 2 个数据模型 | 3 |
|
|
217
|
-
| ... | ... | ... | ... |
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
## 阶段 7:测试场景表 4 维度格式
|
|
221
|
-
|
|
222
|
-
场景表覆盖 **4 个维度**:
|
|
223
|
-
|
|
224
|
-
```markdown
|
|
225
|
-
## 测试场景 — <功能名>
|
|
226
|
-
> 生成日期:YYYY-MM-DD | 对应需求:xxx.md | 对应计划:xxx-plan.md
|
|
227
|
-
|
|
228
|
-
### 一、单元测试场景
|
|
229
|
-
|
|
230
|
-
#### 1.1 <类名.方法名>
|
|
231
|
-
|
|
232
|
-
| # | 分类 | 场景描述 | 输入 | 预期 |
|
|
233
|
-
|:--:|:----:|----------|------|------|
|
|
234
|
-
| UT-001 | 正常 | ... | ... | ... |
|
|
235
|
-
| UT-002 | 异常 | ... | ... | 抛 xxxException |
|
|
236
|
-
| UT-003 | 边界 | ... | ... | ... |
|
|
237
|
-
|
|
238
|
-
### 二、接口测试场景
|
|
239
|
-
|
|
240
|
-
#### 2.1 POST /xxx
|
|
241
|
-
|
|
242
|
-
| # | 分类 | 场景描述 | 关键字段 | HTTP | code | message |
|
|
243
|
-
|:--:|:----:|----------|----------|:----:|:----:|--------|
|
|
244
|
-
| API-001 | 正常 | ... | ... | 200 | 0 | 成功 |
|
|
245
|
-
| API-002 | 校验 | ... | ... | 200 | xxx | ... |
|
|
246
|
-
|
|
247
|
-
### 三、数据兼容场景
|
|
248
|
-
|
|
249
|
-
| # | 分类 | 场景描述 | 操作 | 数据特征 | 预期 |
|
|
250
|
-
|:--:|:----:|----------|:----:|----------|------|
|
|
251
|
-
| COM-001 | 旧数据 | ... | ... | ... | ... |
|
|
252
|
-
|
|
253
|
-
### 四、集成场景
|
|
254
|
-
|
|
255
|
-
| # | 分类 | 场景描述 | 前置条件 | 步骤 | 预期 |
|
|
256
|
-
|:--:|:----:|----------|----------|------|------|
|
|
257
|
-
| INT-001 | 端到端 | ... | ... | N 步操作 | ... |
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
## 产物保存规则(跨阶段:阶段1/5/6/8)
|
|
261
|
-
|
|
262
|
-
1. **自动确定变更名**:基于需求描述自动生成变更名(kebab-case),无需用户确认
|
|
263
|
-
|
|
264
|
-
变更名命名规则:
|
|
265
|
-
- **kebab-case**(小写字母,单词间连字符)
|
|
266
|
-
- 从需求/功能描述中提取核心关键词
|
|
267
|
-
- 示例:`contribution-module`、`fix-duplicate-submit`
|
|
268
|
-
- 变更名一旦确定即为最终值,后续所有 skill 自动引用
|
|
269
|
-
|
|
270
|
-
> **与 Worktree 的关系**:如果阶段 2 用户选择了 worktree,变更名在创建 worktree 时随分支名确定(worktree 名即变更名)。如果未使用 worktree,变更名在阶段 1 自动生成。
|
|
271
|
-
|
|
272
|
-
2. **创建产出目录**:用 Write 工具创建以下目录结构(Write 会自动创建中间目录):
|
|
273
|
-
```
|
|
274
|
-
.harness/changes/<change-name>/meta/
|
|
275
|
-
.harness/changes/<change-name>/logs/
|
|
276
|
-
.harness/changes/<change-name>/spec/
|
|
277
|
-
.harness/changes/<change-name>/plans/
|
|
278
|
-
.harness/changes/<change-name>/evidence/
|
|
279
|
-
.harness/changes/<change-name>/reports/
|
|
280
|
-
.harness/changes/<change-name>/sqls/
|
|
281
|
-
.harness/changes/<change-name>/scripts/
|
|
282
|
-
.harness/changes/<change-name>/runtime/
|
|
283
|
-
.harness/changes/<change-name>/backups/
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
3. **保存设计文档**:将阶段 5 生成的设计文档保存到:
|
|
287
|
-
- `.harness/changes/<change-name>/spec/<change-name>-design.md`
|
|
288
|
-
|
|
289
|
-
设计文档 frontmatter 格式:
|
|
290
|
-
```yaml
|
|
291
|
-
---
|
|
292
|
-
change-name: <change-name>
|
|
293
|
-
created: YYYY-MM-DD HH:mm
|
|
294
|
-
status: approved
|
|
295
|
-
source: harness-plan
|
|
296
|
-
---
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
> 如果 frontmatter 缺失,后续 run/test/review/submit/archive 不得依赖模型猜测 change-name。
|
|
300
|
-
|
|
301
|
-
4. **初始化执行日志和结构化事件**:创建 `.harness/changes/<change-name>/logs/execution-log.md` 与 `.harness/changes/<change-name>/events.ndjson`,写入变更开始记录和 `phase.start` 事件:
|
|
302
|
-
|
|
303
|
-
```markdown
|
|
304
|
-
# 执行日志 — <change-name>
|
|
305
|
-
|
|
306
|
-
> 变更创建时间:YYYY-MM-DD HH:MM | 变更名:<change-name>
|
|
307
|
-
|
|
308
|
-
---
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
5. **保存计划文件**:计划文件包含 YAML frontmatter(含 change-name),保存到:
|
|
312
|
-
- `.harness/changes/<change-name>/plans/<change-name>-plan.md`(简洁任务表)
|
|
313
|
-
- `.harness/changes/<change-name>/plans/<change-name>-implementation-detail.md`(自适应详细执行参考)
|
|
314
|
-
- `.harness/changes/<change-name>/plans/<change-name>-test-scenarios.md`(测试场景表)
|
|
315
|
-
|
|
316
|
-
计划文件 frontmatter 格式:
|
|
317
|
-
```yaml
|
|
318
|
-
---
|
|
319
|
-
change-name: <change-name>
|
|
320
|
-
plan-name: <change-name>
|
|
321
|
-
created: YYYY-MM-DD HH:mm
|
|
322
|
-
source-spec: ../spec/<change-name>-design.md
|
|
323
|
-
implementation-detail: ./<change-name>-implementation-detail.md
|
|
324
|
-
test-scenarios: ./<change-name>-test-scenarios.md
|
|
325
|
-
status: approved
|
|
326
|
-
---
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
> 如果 frontmatter 缺失,后续 run 不得依赖模型猜测 change-name 或关联文件路径。
|
|
330
|
-
|
|
331
|
-
6. **等待用户确认后**,提示下一步:运行 `/harness-run`
|
|
332
|
-
|
|
333
|
-
> 后续 skill(run/test/review)启动时,会扫描 `.harness/changes/*/plans/`(排除 `.harness/archive/*/`)自动定位变更名目录,无需手动指定路径。同一时间最多一个未归档变更。
|
|
334
|
-
|
|
335
|
-
## 阶段 8:结束前产物完整性检查 ⚠️ 强制
|
|
336
|
-
|
|
337
|
-
> **缺任一文件 → ❌FAIL,不得宣称 plan 完成。**
|
|
338
|
-
|
|
339
|
-
| 文件 | 必须存在 |
|
|
340
|
-
|------|:---:|
|
|
341
|
-
| `.harness/changes/<change>/spec/<change>-design.md` | ✅ |
|
|
342
|
-
| `.harness/changes/<change>/plans/<change>-plan.md` | ✅ |
|
|
343
|
-
| `.harness/changes/<change>/plans/<change>-implementation-detail.md` | ✅ |
|
|
344
|
-
| `.harness/changes/<change>/plans/<change>-test-scenarios.md` | ✅ |
|
|
345
|
-
| `.harness/changes/<change>/meta/worktree.json` | ✅ |
|
|
346
|
-
| `.harness/changes/<change>/logs/execution-log.md` | ✅ |
|
|
347
|
-
| `.harness/changes/<change>/events.ndjson` | ✅ |
|
|
348
|
-
|
|
349
|
-
### Plan 结束行为规则
|
|
350
|
-
|
|
351
|
-
- **禁止询问执行模式**:Subagent-Driven / Inline Execution 属于 /harness-run 阶段
|
|
352
|
-
- 最终输出只提示产出物路径和下一步 `/harness-run`
|
|
353
|
-
- `docs/superpowers/` 不得作为最终产物路径出现在输出中
|
|
354
|
-
|
|
355
|
-
## C2 升级口:Codex 跨 provider 评审(可选,未实现)
|
|
356
|
-
|
|
357
|
-
阶段 7.5 的 harness-evaluator 是同 provider(Claude)评审,基于"上下文隔离 + 档位差异"。如需真正跨 provider 对抗(高风险构建:auth/支付/数据迁移/并发),可在 evaluator 返回 REVISE 后,可选调 Codex CLI 做二次确认。
|
|
358
|
-
|
|
359
|
-
### 前置
|
|
360
|
-
- Codex CLI ≥ 0.130:`npm install -g @openai/codex@latest`(现 0.142.3)
|
|
361
|
-
- Codex 已登录:`codex login`(ChatGPT 账号即可)
|
|
362
|
-
- Windows + bridge 环境未实测,TODO(review)
|
|
363
|
-
|
|
364
|
-
### 执行(示例)
|
|
365
|
-
```powershell
|
|
366
|
-
powershell.exe -NoProfile -Command "codex exec -s read-only '$(Get-Content .harness/changes/<cn>/spec/<cn>-design.md -Raw)'"
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
### 安全线 ⚠️
|
|
370
|
-
- 首次 `codex exec -s read-only` 强制只读沙箱
|
|
371
|
-
- resume 必须加 `-c sandbox_mode="read-only"`(`resume` 不接受 `-s`,漏写会继承 config 默认,可能 `danger-full-access`)——这是最关键安全线
|
|
372
|
-
- Codex 全程只读,从不写文件
|
|
373
|
-
- 不 pin `-m` 模型(ChatGPT 账号鉴权会拒 `gpt-5.x-codex` 变体并 400 报错)
|
|
374
|
-
|
|
375
|
-
### 状态
|
|
376
|
-
本节为**升级口**,当前 harness-plan 阶段 7.5 默认走 harness-evaluator(C1),不自动触发 Codex。需手动启用,且建议先验证 Codex CLI 在当前环境可用。详见 grill-me 文档的 grill-me-codex Act 2(技术知识库/02-Skills与扩展/Skills合集/grill-me.md)。
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: harness-review
|
|
3
|
-
description: "6维度代码审查(架构/安全/规范/兼容/测试/性能),对照.claude/rules/和测试场景表,在隔离上下文运行。使用场景:代码审查、提交前检查、合并评审"
|
|
4
|
-
argument-hint: "变更名或留空自动检测"
|
|
5
|
-
effort: high
|
|
6
|
-
allowed-tools: [Read, Write, Edit, Glob, Grep, Agent, Bash(powershell.exe:*)]
|
|
7
|
-
disallowed-tools:
|
|
8
|
-
- Bash(git *)
|
|
9
|
-
- Bash(mvn *)
|
|
10
|
-
- Bash(ls *)
|
|
11
|
-
- Bash(find *)
|
|
12
|
-
- Bash(grep *)
|
|
13
|
-
- Bash(cat *)
|
|
14
|
-
- Bash(cp *)
|
|
15
|
-
- Bash(mv *)
|
|
16
|
-
- Bash(rm *)
|
|
17
|
-
- Bash(mkdir *)
|
|
18
|
-
- Bash(touch *)
|
|
19
|
-
- Bash(sed *)
|
|
20
|
-
- Bash(awk *)
|
|
21
|
-
- Bash(curl *)
|
|
22
|
-
- Bash(codegraph *)
|
|
23
|
-
---
|
|
24
|
-
<!-- generated by harness_deploy.py; core=76dd32302df53f0b; overlay=none; do not edit -->
|
|
25
|
-
# harness-review — 代码审查
|
|
26
|
-
|
|
27
|
-
## Purpose
|
|
28
|
-
|
|
29
|
-
对 git diff 进行6维度审查,对照项目规则和测试场景表,输出分级报告。**审查结果仅供参考,默认不阻塞后续 submit/archive 流程。**
|
|
30
|
-
|
|
31
|
-
## When to Use
|
|
32
|
-
|
|
33
|
-
使用此 Skill 当:
|
|
34
|
-
- 代码变更完成后需要审查
|
|
35
|
-
- 提交前需要质量检查
|
|
36
|
-
- 合并评审时需要系统性检查
|
|
37
|
-
- 用户说"审查代码"、"review"、"检查代码质量"
|
|
38
|
-
|
|
39
|
-
## Inputs
|
|
40
|
-
|
|
41
|
-
- `$ARGUMENTS`:变更名(可选,留空时自动扫描 `.harness/changes/*/plans/` 确定)
|
|
42
|
-
- 相关文件:`.harness/changes/*/plans/*-plan.md`、`.claude/rules/`、测试场景表
|
|
43
|
-
|
|
44
|
-
## 前置条件
|
|
45
|
-
|
|
46
|
-
- `.harness/changes/<change-name>/plans/<change-name>-plan.md` 存在(任务真相源)
|
|
47
|
-
- 必须读取 `.harness/changes/<change-name>/meta/worktree.json`:`requested=true` 且 worktree 已创建 → 在 worktree 目录中执行审查;`requested=true` 但 worktree 不存在 → 停止,提示先修复 `harness-run`,不得静默回主目录
|
|
48
|
-
- **review 不阻塞后续流程**:test 报告缺失或未运行不阻止 review(review 是参考性阶段),但应在报告中标注 test 状态供参考
|
|
49
|
-
|
|
50
|
-
## 统一读取协议
|
|
51
|
-
|
|
52
|
-
1. **`.harness/changes/<change-name>/` 是唯一真相源** — 所有输入从该目录读取,产物写入对应子目录
|
|
53
|
-
2. **change-name 优先从 frontmatter 读取** — `spec/*-design.md`、`plans/*-plan.md` 的 YAML `change-name`
|
|
54
|
-
3. **frontmatter 缺失时兼容旧格式** — 从路径推断,标记 `🟡 legacy-plan`,不失败
|
|
55
|
-
4. **spec** — 设计真相源:`spec/<change>-design.md`
|
|
56
|
-
5. **plan** — 任务真相源:`plans/<change>-plan.md`
|
|
57
|
-
6. **implementation-detail** — 自适应执行参考;legacy 缺失 🟡WARN,不阻断
|
|
58
|
-
7. **test-scenarios** — 测试真相源:`plans/<change>-test-scenarios.md`
|
|
59
|
-
8. **禁止读取 `docs/superpowers/` 作为正式输入** — 旧草稿仅人工线索
|
|
60
|
-
|
|
61
|
-
状态目录分层:新路径优先,旧路径兼容 → [[../protocols/state-layout-protocol.md|state-layout-protocol]]
|
|
62
|
-
|
|
63
|
-
## Workflow
|
|
64
|
-
|
|
65
|
-
0. **启动准备** — 确定变更名(Glob `.harness/changes/*/plans/*-plan.md`,排除 `.harness/archive/*/`,读 frontmatter 提取 change-name);**append `phase.start` 事件**(不得等审查完成才补)
|
|
66
|
-
1. **读取 worktree 状态(门禁检查)** — 读 `.harness/changes/<change-name>/meta/worktree.json`:`requested=true` 但 worktree 不存在 → 停止并提示先修复 `harness-run`,不得静默回主目录(否则 git diff 为空);`requested=true` 且 worktree 已创建 → spawned agent 用该 worktree 路径执行 `git diff`(确保审查 worktree 变更而非主目录);`requested=false` → 审查主目录变更
|
|
67
|
-
2. **委派 harness-reviewer** — 先运行 `python <skills-root>/scripts/harness_preflight.py check-agents --skills-root <skills-root> --agent harness-reviewer --json`。`usable=false` → **直接主会话审查**,记 `decision` 事件,**不委派**。`usable=true` 时用 Agent spawn `harness-reviewer`(只读, 6 维度)。返回空 / 无报告正文 → **不 retry**,降级主会话审查。
|
|
68
|
-
3. **持久化报告(强制,主会话)** — Agent 返回后主会话 Write 到 `reports/review/review-report-*.md`。未 Write → 🟡WARN,不得宣称 review 完成。
|
|
69
|
-
4. **生成修复反馈(原生协议)** — 若报告存在 RED/YELLOW 问题,执行 `protocols.md` 的 `review-fixback-protocol`,将问题转化为结构化 fixback 清单并落盘到 `.harness/changes/<change-name>/reports/review/fixback-YYYYMMDD-HHmm.md`。若无 RED/YELLOW,记录 `review-fixback-protocol: skipped(no findings)`。不调用 Superpowers `receiving-code-review`,也不记录外部 skill 降级。
|
|
70
|
-
5. **收尾** — append `phase.end` / `artifact` 事件;控制台输出摘要
|
|
71
|
-
|
|
72
|
-
## Review 定位(重要)
|
|
73
|
-
|
|
74
|
-
**harness-review 是参考性代码审查阶段,不是硬门禁。**
|
|
75
|
-
|
|
76
|
-
| 等级 | 含义 | 后续影响 |
|
|
77
|
-
|:----:|------|----------|
|
|
78
|
-
| RED | 高风险建议,强烈建议处理 | 不阻塞后续流程 |
|
|
79
|
-
| YELLOW | 中低风险建议 | 不阻塞后续流程 |
|
|
80
|
-
| OK | 无问题 | 不阻塞后续流程 |
|
|
81
|
-
|
|
82
|
-
- 审查结果默认只作为参考,不阻塞 `/harness-submit`、`/harness-archive`
|
|
83
|
-
- 除非用户显式要求"review 结果阻塞提交",否则 review 不参与硬门禁
|
|
84
|
-
- Review 报告中**禁止写**:阻塞 submit / 必须修复后才能继续
|
|
85
|
-
- Review 报告中**应写**:建议优先处理 / 建议在 submit 前人工确认 / 建议补充测试 / 仅供参考,不阻塞后续 harness 流程
|
|
86
|
-
|
|
87
|
-
### 可选 strict-review-gate 配置
|
|
88
|
-
|
|
89
|
-
如果团队希望 review 结果阻塞提交,可在 `.harness/config/harness-test-config.md` 中设置:
|
|
90
|
-
|
|
91
|
-
```yaml
|
|
92
|
-
review:
|
|
93
|
-
strict-review-gate: true # 默认 false
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
当且仅当 `strict-review-gate: true` 时,review RED 才阻塞 submit。默认行为是 `strict-review-gate: false`。
|
|
97
|
-
|
|
98
|
-
## Output Format
|
|
99
|
-
|
|
100
|
-
审查报告保存到 `.harness/changes/<change-name>/reports/review/review-report-YYYYMMDD-HHmm.md`(时间戳区分多次运行),同时在控制台输出摘要。报告格式详见 `reference.md` 的「输出报告完整模板」。
|
|
101
|
-
|
|
102
|
-
## 渐进披露
|
|
103
|
-
|
|
104
|
-
- **Read `checklist.md`** 仅在执行完整6维度审查时 — 含6维度检查项详细列表 + 输出格式 + 执行日志记录模板
|
|
105
|
-
- **Read `reference.md`** 仅在需要理解审查标准或生成详细报告时 — 含"为什么需要审查"概述 + 严重级别判定标准 + 输出报告完整模板
|
|
106
|
-
- **Read `protocols.md`** 仅在 RED/YELLOW 问题需要转化为修复反馈时 — 含 `review-fixback-protocol` 的结构化 fixback 字段与落盘要求
|
|
107
|
-
|
|
108
|
-
## 原生修复反馈协议
|
|
109
|
-
|
|
110
|
-
`/harness-review` 不再运行时调用 Superpowers `receiving-code-review`。审查后的修复反馈能力内化为 `protocols.md` 的 `review-fixback-protocol`:
|
|
111
|
-
|
|
112
|
-
1. RED/YELLOW 问题转成 fixback 条目:严重级别、位置、风险、建议、验证方式、对 submit 的影响。
|
|
113
|
-
2. fixback 落盘到 `.harness/changes/<change-name>/reports/review/fixback-YYYYMMDD-HHmm.md`。
|
|
114
|
-
3. 无 RED/YELLOW 时记录跳过原因,不制造空修复任务。
|
|
115
|
-
|
|
116
|
-
## P0 执行可信度规则
|
|
117
|
-
|
|
118
|
-
- 命令结果不得靠猜测;普通 Bash 被拒 → 立即改用等价 PowerShell 重试一次
|
|
119
|
-
- 仅 PowerShell 成功且有明确证据(构建/git/测试输出、文件存在、exit 0)时可标 ✅OK;否则 ❌FAIL 或 🟡WARN
|
|
120
|
-
- 禁止把 hook 拒绝、静态验证、无输出、用户跳过说成成功 → 详见 [[../protocols/powershell-protocol.md|powershell-protocol]]、[[../protocols/evidence-based-reporting-protocol.md|evidence-based-reporting-protocol]]
|
|
121
|
-
|
|
122
|
-
## 关键规则(硬门禁速查)
|
|
123
|
-
|
|
124
|
-
> 每条规则的详细判定、检查项见 `checklist.md` 对应章节;Shell 执行安全见 `../protocols/powershell-protocol.md`,敏感信息见 `../protocols/sensitive-info-protocol.md`,证据化报告见 `../protocols/evidence-based-reporting-protocol.md`,状态目录见 `../protocols/state-layout-protocol.md`,结构化报告事件见 `../protocols/report-pipeline-protocol.md`。
|
|
125
|
-
|
|
126
|
-
### 一、只审查 git diff 变更部分
|
|
127
|
-
|
|
128
|
-
只审查本次 `git diff` 中的变更,不审查已有代码;diff 为空 → 直接返回"无变更可审查"。每个问题给出具体修复建议(文件:行号 + 建议做法)。
|
|
129
|
-
|
|
130
|
-
### 二、严重级别三态
|
|
131
|
-
|
|
132
|
-
RED=高风险建议(强烈建议处理),YELLOW=中低风险建议,OK=无问题。6维度逐文件审查(架构/安全/规范/兼容/测试/性能)—— 检查项见 `checklist.md`。判定标准见 `reference.md`「严重级别判定标准」。
|
|
133
|
-
|
|
134
|
-
### 三、review 结果仅供参考(不阻塞后续流程)
|
|
135
|
-
|
|
136
|
-
review 结果默认只作参考,不阻塞 submit/archive;报告措辞遵循 `## Review 定位(重要)` 的“禁止写/应写”清单,不得出现“阻塞 submit / 必须修复后才能继续”。
|
|
137
|
-
|
|
138
|
-
### 四、Shell 安全 / 敏感信息 / 证据化报告 / CodeGraph 探索
|
|
139
|
-
|
|
140
|
-
git diff/log 命令通过 `powershell.exe -Command "..."` 执行;review-report 中如发现明文 token/密码/密钥,必须列入 RED 问题并在报告中以 `<TOKEN_REDACTED>` 等占位符引用;RED/YELLOW/OK 结论必须基于实际 diff 内容,不得凭印象判断。代码探索必须优先使用 CodeGraph MCP 工具(`mcp__codegraph__codegraph_explore`),不允许通过普通 Bash 调 codegraph 命令(已列入 `disallowed-tools`);MCP 不可用时降级为 Grep/Glob + Read,并在执行日志记录降级原因。遵循 `../protocols/powershell-protocol.md` / `sensitive-info-protocol.md` / `evidence-based-reporting-protocol.md`。
|
|
141
|
-
|
|
142
|
-
## 交互白名单
|
|
143
|
-
|
|
144
|
-
**无** AskUserQuestion(审查全自动)。委派失败 → 主会话审查 + `decision` 事件。
|
|
145
|
-
|
|
146
|
-
## 执行日志
|
|
147
|
-
|
|
148
|
-
`events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止手工 Edit**。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
|
|
149
|
-
|
|
150
|
-
```powershell
|
|
151
|
-
python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase <phase> --type phase.start --note "<触发指令>"
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
> **脚本接线**:`harness_events.py append`;`harness_archive.py finalize`;`harness_preflight.py check`;`harness_ledger.py can-reuse`;`harness_service.py ensure/stop`(须 `--files`/`serviceStart.inputFiles`)。JSON 输出按 D13 护栏解读。
|
|
155
|
-
|
|
156
|
-
> **Task 4 §6.1 写入契约**:普通 `append` = 加锁 -> 追加一行 -> fsync -> 解锁,**不 load 历史、不渲染**(O(1),跨进程锁 `events.ndjson.lock`,UUID 用完整 `uuid4().hex` 无需去重扫描)。仅 `--type phase.end` append 在追加成功后渲染一次 `execution-log.md`;显式 `harness_events.py render` 随时从完整 events 重建;`harness_archive.py finalize` 在 collect 前强制 render 一次。高频 command append 期间 log 可能滞后,phase 边界保持最新。
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: harness-review 的6维度审查检查项详细列表。仅在执行完整代码审查时读取。
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# harness-review 检查清单
|
|
6
|
-
|
|
7
|
-
## 启动准备:确定变更名
|
|
8
|
-
|
|
9
|
-
用 Glob 搜索 `.harness/changes/*/plans/*-plan.md`(**排除 `.harness/archive/*/`**),读取 frontmatter 提取 `change-name`。默认最多一个未归档变更;如有多个,优先取最近修改的,或询问用户。后续所有路径基于此变更名。
|
|
10
|
-
|
|
11
|
-
**读取 worktree 状态**:读 `.harness/changes/<change-name>/meta/worktree.json`。`requested=true` 且 worktree 已创建 → 后续 `git diff` 的 `<项目路径>` 用 worktree 路径(`.claude/worktrees/<change-name>`);`requested=true` 但 worktree 不存在 → 停止,提示先修复 `harness-run`,不得静默回主目录。
|
|
12
|
-
|
|
13
|
-
## 审查流程
|
|
14
|
-
|
|
15
|
-
### 1. 获取变更范围
|
|
16
|
-
|
|
17
|
-
```powershell
|
|
18
|
-
powershell.exe -Command "git -C '<项目路径>' diff --stat"
|
|
19
|
-
powershell.exe -Command "git -C '<项目路径>' diff"
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
### 2. 六维度逐文件审查
|
|
23
|
-
|
|
24
|
-
#### 维度 1:架构
|
|
25
|
-
|
|
26
|
-
| 检查项 | 为什么重要 |
|
|
27
|
-
|--------|------------|
|
|
28
|
-
| 接口层中有业务逻辑 | 破坏分层,后续修改影响面不可控 |
|
|
29
|
-
| 业务层间循环依赖 | 启动失败或运行时 StackOverflow |
|
|
30
|
-
| 接口层跨模块调用业务层 | 破坏模块边界,耦合扩散 |
|
|
31
|
-
| 业务层抛异常、接口层 try-catch | 异常处理应在全局异常处理器统一 |
|
|
32
|
-
| 写操作无事务边界 | 数据不一致(部分写入成功、部分失败) |
|
|
33
|
-
|
|
34
|
-
#### 维度 2:安全
|
|
35
|
-
|
|
36
|
-
| 检查项 | 为什么重要 |
|
|
37
|
-
|--------|------------|
|
|
38
|
-
| 硬编码密码/Token/密钥 | 代码泄露 = 凭据泄露 |
|
|
39
|
-
| 字符串拼接 SQL | SQL 注入风险 |
|
|
40
|
-
| 用户输入直接返回前端 | XSS 风险 |
|
|
41
|
-
| 对生产库执行写操作 | 数据丢失/破坏 |
|
|
42
|
-
| 日志打印敏感信息 | 日志泄露 Token/身份证号 |
|
|
43
|
-
| 新增接口无权限校验 | 未授权访问 |
|
|
44
|
-
|
|
45
|
-
#### 维度 3:编码规范
|
|
46
|
-
|
|
47
|
-
| 检查项 | 严重度 |
|
|
48
|
-
|--------|:------:|
|
|
49
|
-
| 数据类暴露不必要可变 setter(应改只读访问器) | YELLOW |
|
|
50
|
-
| 控制台输出替代日志框架 | YELLOW |
|
|
51
|
-
| 集合方法返回 null 而非空集合 | YELLOW |
|
|
52
|
-
| 魔法值未定义常量 | YELLOW |
|
|
53
|
-
| 公共 API 无文档注释 | YELLOW |
|
|
54
|
-
|
|
55
|
-
#### 维度 4:兼容性
|
|
56
|
-
|
|
57
|
-
| 检查项 | 为什么重要 |
|
|
58
|
-
|--------|------------|
|
|
59
|
-
| 删除/修改已发布接口的字段 | 旧前端/调用方立即报错 |
|
|
60
|
-
| 删除/重命名数据库已有字段 | 数据丢失 |
|
|
61
|
-
| 删除/修改已有枚举值 | 存量数据无法解析 |
|
|
62
|
-
| 新增字段不为 nullable | 旧数据无法查询/写入 |
|
|
63
|
-
|
|
64
|
-
#### 维度 5:测试
|
|
65
|
-
|
|
66
|
-
对照场景表检查覆盖。重点看新增业务方法是否有对应单元测试,异常场景是否有覆盖。
|
|
67
|
-
|
|
68
|
-
#### 维度 6:性能
|
|
69
|
-
|
|
70
|
-
| 检查项 | 信号 |
|
|
71
|
-
|--------|------|
|
|
72
|
-
| N+1 查询 | 循环体内调用数据访问层查询 |
|
|
73
|
-
| 缺少索引 | 新增 WHERE 条件无对应索引 |
|
|
74
|
-
| 大事务 | 事务内含远程调用或文件 IO |
|
|
75
|
-
| 逐条 insert | 循环内单条 insert 而非批量 |
|
|
76
|
-
|
|
77
|
-
### 3. 对照 .claude/rules/ 检查
|
|
78
|
-
|
|
79
|
-
逐个规则文件检查变更是否违规。违规项标注对应规则文件名和行号。
|
|
80
|
-
|
|
81
|
-
### 4. 对照场景表检查
|
|
82
|
-
|
|
83
|
-
如果场景表存在,逐条确认代码是否覆盖。未覆盖的标记为「测试缺口」。
|
|
84
|
-
|
|
85
|
-
## 输出格式
|
|
86
|
-
|
|
87
|
-
审查报告保存到 `.harness/changes/<change-name>/reports/review/review-report-YYYYMMDD-HHmm.md`(时间戳格式:日期+时分),同时在控制台输出摘要。完整报告模板见 `reference.md`「输出报告完整模板」,本文不再重复。
|
|
88
|
-
|
|
89
|
-
## 原生修复反馈检查
|
|
90
|
-
|
|
91
|
-
### fixback 生成确认(按需)
|
|
92
|
-
|
|
93
|
-
如果用户需要修复任务清单,确认以下事项:
|
|
94
|
-
|
|
95
|
-
```
|
|
96
|
-
□ 已读取 harness-review/protocols.md
|
|
97
|
-
□ 已执行 review-fixback-protocol(不调用外部 receiving-code-review)
|
|
98
|
-
□ RED/YELLOW 问题已转化为结构化修复任务清单
|
|
99
|
-
□ 修复任务清单含严重级别、位置、风险、修复建议、验证方式、submit 影响
|
|
100
|
-
□ fixback 已落盘到 .harness/changes/<change-name>/reports/review/fixback-YYYYMMDD-HHmm.md
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
> 如果没有 RED/YELLOW 问题,记录 `review-fixback-protocol: skipped(no findings)`,不要生成空 fixback。`harness-review` 不检查 Superpowers 是否安装,也不记录外部 skill 降级。
|
|
104
|
-
|
|
105
|
-
### 代码探索效率检查
|
|
106
|
-
|
|
107
|
-
```
|
|
108
|
-
□ 审查代码时优先使用 codegraph_explore(一次获取多个符号源码)
|
|
109
|
-
□ 未逐个 Read 文件(违反 .claude/rules/codegraph.md 规则)
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
## 关键原则
|
|
113
|
-
|
|
114
|
-
- 只审查 `git diff` 中的变更部分,不审查已有代码
|
|
115
|
-
- 对照 `.claude/rules/` 是审查的基准线
|
|
116
|
-
- 区分严重级别:RED=高风险建议(强烈建议处理),YELLOW=中低风险建议
|
|
117
|
-
- 每个问题给出具体修复建议(文件:行号 + 建议做法)
|
|
118
|
-
- 如果 diff 为空,直接返回"无变更可审查"
|
|
119
|
-
- **review 结果仅供参考,不阻塞后续 submit/archive**
|
|
120
|
-
|
|
121
|
-
## 事件记录
|
|
122
|
-
|
|
123
|
-
- [ ] append `phase.start` 事件(步骤 0 启动准备之前;`note` 含触发指令)
|
|
124
|
-
- [ ] append `phase.end` 事件(`note` 含耗时、结果、落盘 path、RED/YELLOW 统计摘要)
|