@cyning/harness 2.0.3 → 2.1.0
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/AGENTS.md +4 -3
- package/CHANGELOG.md +39 -0
- package/README.md +7 -5
- package/docs/ARCHITECTURE.md +2 -1
- package/docs/methodology/AUDIT_doc_consistency_2026-06-15_zh.md +29 -22
- package/docs/methodology/README.md +1 -0
- package/docs/methodology/execution/PROMPT_review_v203_v2_hat_flow_bump_v1_zh.md +136 -0
- package/docs/methodology/execution/README.md +1 -0
- package/docs/methodology/execution/reviews/review_v2_hat_flow_20260621.md +71 -0
- package/docs/methodology/pointers/HARNESS_HAT_CHAIN_V2_ONEPAGER_v1_zh.md +31 -0
- package/docs/methodology/pointers/README.md +1 -0
- package/docs/methodology/pointers/SDD_HAT_FLOW_v1_zh.md +5 -4
- package/docs/methodology/product/DESIGN_ONTOLOGY_v1_zh.md +100 -47
- package/docs/methodology/product/README.md +2 -1
- package/docs/methodology/product/SDD_HAT_FLOW_v2_zh.md +78 -0
- package/graph/templates/00_main.graph.yaml +72 -0
- package/graph/templates/00_main.md +53 -40
- package/graph/templates/02_version.md +6 -0
- package/graph/templates/10_flow_MAIN.graph.yaml +105 -0
- package/graph/templates/10_flow_MAIN.md +80 -38
- package/graph/templates/99_mermaid_protocol.md +39 -20
- package/graph/templates/README.md +37 -12
- package/harness/prompts/10-requirements.md +3 -1
- package/harness/prompts/22-task-audit.md +3 -1
- package/harness/prompts/30-execute-code.md +2 -1
- package/harness/prompts/40-self-check.md +7 -4
- package/harness/prompts/README.md +31 -22
- package/ontology.yaml +27 -7
- package/package.json +1 -1
- package/wizard/ONBOARDING_wizard_v1_zh.md +2 -1
- package/wizard/guides/GUIDE_new_project_bootstrap_v1_zh.md +158 -0
- package/graph/templates/00_main.ai.md +0 -28
- package/graph/templates/10_flow_MAIN.ai.md +0 -43
|
@@ -1,47 +1,89 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
graph_id: 10_flow_MAIN
|
|
3
|
+
title: 主路径 Flow 示例
|
|
4
|
+
description: 典型 HTTP 请求从入口到响应的主干流程
|
|
5
|
+
version: '2026-06-30'
|
|
6
|
+
generated_from: 10_flow_MAIN.graph.yaml
|
|
7
|
+
generator: scripts/graph_yaml_compile.js
|
|
8
|
+
---
|
|
2
9
|
|
|
3
|
-
|
|
4
|
-
> **双轨**:须与 [`10_flow_MAIN.ai.md`](./10_flow_MAIN.ai.md) 语义等价。
|
|
5
|
-
> **嵌入后**:将占位路径替换为真实 handler / 路由 / 页面流。
|
|
10
|
+
# 主路径 Flow 示例
|
|
6
11
|
|
|
7
|
-
|
|
8
|
-
flowchart TD
|
|
9
|
-
%% Entry: 例 GET/POST /api/v1/resource — 替换为真实入口
|
|
10
|
-
|
|
11
|
-
%% === 请求阶段 ===
|
|
12
|
-
IN[HTTP 请求] --> AUTH[鉴权 / 会话校验]
|
|
13
|
-
AUTH --> VAL[参数校验<br/>schema / DTO]
|
|
14
|
-
VAL --> SVC[业务服务层<br/>例:ResourceService]
|
|
15
|
-
|
|
16
|
-
%% === 数据阶段 ===
|
|
17
|
-
SVC --> REPO[仓储 / ORM<br/>例:ResourceRepository]
|
|
18
|
-
REPO --> DB[(数据库 / 存储)]
|
|
19
|
-
|
|
20
|
-
REPO -->|无记录| NOTFOUND[404 / 空结果]
|
|
21
|
-
SVC -->|业务规则失败| BIZERR[4xx 业务错误]
|
|
12
|
+
> 典型 HTTP 请求从入口到响应的主干流程
|
|
22
13
|
|
|
23
|
-
|
|
24
|
-
SVC --> RESP[组装响应 DTO]
|
|
25
|
-
RESP --> OUT[返回 JSON / 页面]
|
|
14
|
+
> **源文件**:`10_flow_MAIN.graph.yaml` · 由 `scripts/graph_yaml_compile.js` 生成 · 请勿直接手写本文件
|
|
26
15
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
16
|
+
```mermaid
|
|
17
|
+
flowchart TD
|
|
18
|
+
IN[[HTTP 请求]]
|
|
19
|
+
AUTH[[鉴权 / 会话校验]]
|
|
20
|
+
VAL[[参数校验]]
|
|
21
|
+
SVC[[业务服务层]]
|
|
22
|
+
ERR_AUTH[[Auth Failed]]
|
|
23
|
+
ERR_VAL[[Validation Failed]]
|
|
24
|
+
REPO[[仓储 / ORM]]
|
|
25
|
+
DB[(数据库 / 存储)]
|
|
26
|
+
HIT{record exists?}
|
|
27
|
+
NOTFOUND[[404 / 空结果]]
|
|
28
|
+
BIZERR[[4xx 业务错误]]
|
|
29
|
+
RESP[[组装响应 DTO]]
|
|
30
|
+
OUT[[返回 JSON / 页面]]
|
|
31
|
+
LOG(( 结构化日志 ))
|
|
32
|
+
MAIN_DOC[>00_main.md]
|
|
33
|
+
IN --> AUTH
|
|
34
|
+
AUTH --"[ok]"--> VAL
|
|
35
|
+
AUTH --"[err]"--> ERR_AUTH
|
|
36
|
+
VAL --"[ok]"--> SVC
|
|
37
|
+
VAL --"[err]"--> ERR_VAL
|
|
38
|
+
SVC --> REPO
|
|
39
|
+
REPO --> DB
|
|
40
|
+
REPO --"?>"--> HIT
|
|
41
|
+
HIT --"[no]"--> NOTFOUND
|
|
42
|
+
HIT --"[yes]"--> SVC
|
|
43
|
+
SVC --"[err]"--> BIZERR
|
|
44
|
+
SVC --> RESP
|
|
45
|
+
RESP --> OUT
|
|
46
|
+
OUT --"::archives"--> LOG
|
|
47
|
+
IN --"加载"--> MAIN_DOC
|
|
48
|
+
%% 锚点:见 YAML 源 edges[].anchors
|
|
38
49
|
```
|
|
39
50
|
|
|
40
|
-
##
|
|
51
|
+
## Nodes
|
|
41
52
|
|
|
42
|
-
|
|
43
|
-
|
|
53
|
+
| ID | Label |
|
|
54
|
+
|----|-------|
|
|
55
|
+
| IN | HTTP 请求 |
|
|
56
|
+
| AUTH | 鉴权 / 会话校验 |
|
|
57
|
+
| VAL | 参数校验 |
|
|
58
|
+
| SVC | 业务服务层 |
|
|
59
|
+
| ERR_AUTH | Auth Failed |
|
|
60
|
+
| ERR_VAL | Validation Failed |
|
|
61
|
+
| REPO | 仓储 / ORM |
|
|
62
|
+
| DB | 数据库 / 存储 |
|
|
63
|
+
| HIT | record exists? |
|
|
64
|
+
| NOTFOUND | 404 / 空结果 |
|
|
65
|
+
| BIZERR | 4xx 业务错误 |
|
|
66
|
+
| RESP | 组装响应 DTO |
|
|
67
|
+
| OUT | 返回 JSON / 页面 |
|
|
68
|
+
| LOG | 结构化日志 |
|
|
69
|
+
| MAIN_DOC | >00_main.md |
|
|
44
70
|
|
|
45
|
-
##
|
|
71
|
+
## Edges
|
|
46
72
|
|
|
47
|
-
|
|
73
|
+
| From | To | Label | Type | Anchors |
|
|
74
|
+
|------|----|-------|------|---------|
|
|
75
|
+
| IN | AUTH | -> | | middleware/auth.py::require_user |
|
|
76
|
+
| AUTH | VAL | [ok] | | |
|
|
77
|
+
| AUTH | ERR_AUTH | [err] | | middleware/auth.py#L42 |
|
|
78
|
+
| VAL | SVC | [ok] | | services/resource_service.py::handle |
|
|
79
|
+
| VAL | ERR_VAL | [err] | | |
|
|
80
|
+
| SVC | REPO | -> | | repositories/resource_repo.py::find_by_id |
|
|
81
|
+
| REPO | DB | -> | | db/session.py |
|
|
82
|
+
| REPO | HIT | ?> | | |
|
|
83
|
+
| HIT | NOTFOUND | [no] | | |
|
|
84
|
+
| HIT | SVC | [yes] | | |
|
|
85
|
+
| SVC | BIZERR | [err] | | services/resource_service.py |
|
|
86
|
+
| SVC | RESP | -> | | |
|
|
87
|
+
| RESP | OUT | -> | | handlers/resource.py::to_response |
|
|
88
|
+
| OUT | LOG | ::archives | archives | observability/logger.py |
|
|
89
|
+
| IN | MAIN_DOC | 加载 | | |
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
# Mermaid 拓扑协议(通用 ·
|
|
1
|
+
# Mermaid 拓扑协议(通用 · v3)
|
|
2
2
|
|
|
3
|
-
> **用途**:`docs/_tech_graph/99_mermaid_protocol.md` — flowchart
|
|
4
|
-
> **双轨制**:`.md` 人类友好;`.ai.md` AI / 脚本协议版;**语义等价**。
|
|
3
|
+
> **用途**:`docs/_tech_graph/99_mermaid_protocol.md` — flowchart 边标记、节点形状与 YAML-first 生成真值。
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|------|--------|------|
|
|
8
|
-
| `.md` | 开发者 | 简洁可读;少量裸边可接受 |
|
|
9
|
-
| `.ai.md` | LLM / 脚本 | 结构化标记、锚点分离、**零裸边** |
|
|
5
|
+
## 0. YAML-first 工作流
|
|
10
6
|
|
|
11
|
-
|
|
7
|
+
- **唯一人工编辑源**:`*.graph.yaml`(本目录下如 `00_main.graph.yaml`、`10_flow_MAIN.graph.yaml`)。
|
|
8
|
+
- **生成物**:同名 `*.md` 由 `scripts/graph_yaml_compile.js` 自动生成,包含 YAML frontmatter、Mermaid flowchart、Nodes/Edges 表。
|
|
9
|
+
- **禁止手写 `.md`**:如需改图,改 YAML 源后重新运行编译脚本;`--check` 模式可检测 `.md` 与 `.graph.yaml` 是否同步。
|
|
10
|
+
- **历史 `.ai.md` 双轨已弃用**:Post-G0 后不再维护 `.md` + `.ai.md` 两份文件;所有结构化信息(锚点、边类型)集中在 YAML 源中。
|
|
12
11
|
|
|
13
12
|
---
|
|
14
13
|
|
|
@@ -59,19 +58,23 @@
|
|
|
59
58
|
|
|
60
59
|
---
|
|
61
60
|
|
|
62
|
-
## 3.
|
|
61
|
+
## 3. 锚点规则(YAML 源强制)
|
|
63
62
|
|
|
64
|
-
每条 **硬边**
|
|
63
|
+
每条 **硬边** 须可追溯到代码或文档,写在 YAML `edges[].anchors` 中:
|
|
65
64
|
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
65
|
+
```yaml
|
|
66
|
+
edges:
|
|
67
|
+
- from: "Q"
|
|
68
|
+
to: "E"
|
|
69
|
+
anchors:
|
|
70
|
+
- path: "src/main.py"
|
|
71
|
+
line: 1
|
|
72
|
+
- path: "app/router/index.ts"
|
|
73
|
+
symbol: "Router"
|
|
71
74
|
```
|
|
72
75
|
|
|
73
|
-
-
|
|
74
|
-
-
|
|
76
|
+
- 跨模块调用:使用 `::triggers` 或虚线,**不**展开对方内部。
|
|
77
|
+
- 未知锚点:保留 `path: TBD` 并开 task 补全。
|
|
75
78
|
|
|
76
79
|
---
|
|
77
80
|
|
|
@@ -87,14 +90,30 @@
|
|
|
87
90
|
|
|
88
91
|
## 5. 禁止项
|
|
89
92
|
|
|
90
|
-
- `.ai.md`
|
|
91
|
-
-
|
|
93
|
+
- **禁止**维护 `.ai.md` 双轨文件。
|
|
94
|
+
- **禁止**在生成的 `.md` 中直接手写 flowchart(会被下次编译覆盖)。
|
|
95
|
+
- 禁止虚构文件路径;未知处用 `path: TBD` 并开 task 补锚点。
|
|
92
96
|
- **禁止** onboarding 默认「全仓扫描生图」。
|
|
93
97
|
|
|
94
98
|
---
|
|
95
99
|
|
|
96
|
-
## 6.
|
|
100
|
+
## 6. YAML 字段到 Mermaid 映射
|
|
101
|
+
|
|
102
|
+
| YAML 字段 | Mermaid 输出 | 说明 |
|
|
103
|
+
|-----------|--------------|------|
|
|
104
|
+
| `nodes[].id` | 节点 ID | 必须唯一 |
|
|
105
|
+
| `nodes[].label` | 节点显示文本 | 决定节点形状 |
|
|
106
|
+
| `edges[].from` / `to` | 边两端 | 必须引用存在的节点 |
|
|
107
|
+
| `edges[].label` | 边标签 | `"->"` 表示裸执行边 |
|
|
108
|
+
| `edges[].mark` | 元关系标记 | 如 `::triggers`、`::branches` |
|
|
109
|
+
| `edges[].type` | 边类型 | 与 `mark` 命名空间对应 |
|
|
110
|
+
| `edges[].anchors` | 不渲染,写入 table | 代码追溯 |
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 7. 修订记录
|
|
97
115
|
|
|
98
116
|
| 日期 | 说明 |
|
|
99
117
|
|------|------|
|
|
118
|
+
| 2026-06-30 | v3:YAML-first,删除 `.ai.md` 双轨,新增 YAML → Mermaid 映射 |
|
|
100
119
|
| YYYY-MM-DD | 嵌入用户仓时填写首次版本 |
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
复制到用户仓 **`docs/_tech_graph/`**。
|
|
4
4
|
|
|
5
|
-
## v0.
|
|
5
|
+
## v0.2 已交付模板(T2 · YAML-first)
|
|
6
6
|
|
|
7
7
|
| 文件 | 状态 | 说明 |
|
|
8
8
|
|------|------|------|
|
|
9
|
-
| [`00_main.
|
|
10
|
-
| [`00_main.
|
|
9
|
+
| [`00_main.graph.yaml`](./00_main.graph.yaml) | ✅ | 顶层流程(唯一编辑源) |
|
|
10
|
+
| [`00_main.md`](./00_main.md) | ✅ | 顶层流程(编译生成物) |
|
|
11
11
|
| [`01_struct.md`](./01_struct.md) | ✅ | **模块边界表**(D4-a · **HG-GRAPH-MODULES** 人签真值) |
|
|
12
|
-
| [`
|
|
13
|
-
| [`10_flow_MAIN.md`](./10_flow_MAIN.md) | ✅ | 主路径 flow
|
|
14
|
-
| [`
|
|
12
|
+
| [`10_flow_MAIN.graph.yaml`](./10_flow_MAIN.graph.yaml) | ✅ | 主路径 flow 示例(唯一编辑源) |
|
|
13
|
+
| [`10_flow_MAIN.md`](./10_flow_MAIN.md) | ✅ | 主路径 flow 示例(编译生成物) |
|
|
14
|
+
| [`99_mermaid_protocol.md`](./99_mermaid_protocol.md) | ✅ | Mermaid 拓扑协议(YAML-first) |
|
|
15
15
|
|
|
16
16
|
## 仍可选补(非 T1 硬门槛)
|
|
17
17
|
|
|
@@ -19,16 +19,41 @@
|
|
|
19
19
|
|------|------|
|
|
20
20
|
| `02_version.md` | 版本时间线;新仓建议嵌入后首周补 |
|
|
21
21
|
|
|
22
|
+
## 编辑与复制流程
|
|
23
|
+
|
|
24
|
+
1. **改图**:只改 `.graph.yaml`,不要手写 `.md`。
|
|
25
|
+
2. **编译**:在 `cyning-harness/` 根运行:
|
|
26
|
+
```bash
|
|
27
|
+
node scripts/graph_yaml_compile.js
|
|
28
|
+
```
|
|
29
|
+
3. **校验**:
|
|
30
|
+
```bash
|
|
31
|
+
bash scripts/verify-template-compile.sh
|
|
32
|
+
```
|
|
33
|
+
4. **复制到业务仓**:
|
|
34
|
+
```bash
|
|
35
|
+
mkdir -p docs/_tech_graph
|
|
36
|
+
cp -R cyning-harness/graph/templates/* docs/_tech_graph/
|
|
37
|
+
# 按需删除 README 或本说明段
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## 业务仓专属产物
|
|
41
|
+
|
|
42
|
+
以下文件是业务仓运行时 artifact,**不在模板包中生成空壳**:
|
|
43
|
+
|
|
44
|
+
- `_manifest.json`
|
|
45
|
+
- `_contract_manifest.json`
|
|
46
|
+
- `_test_manifest.json`
|
|
47
|
+
|
|
48
|
+
业务仓应基于真实 endpoint / RPC / 表 / 事件契约,通过自身 CI(如 `tech-graph.yml`、`tech-graph-contract.yml`)生成并校验这些 manifest。模板包仅提供 `.graph.yaml` → `.md` 的简化编译流。
|
|
49
|
+
|
|
22
50
|
## 嵌入后
|
|
23
51
|
|
|
24
52
|
- **新仓**:骨架 + 模块表人签 + 至少 1 主 flow(见 [`docs/ONBOARDING.md`](../../docs/ONBOARDING.md) §3)
|
|
25
53
|
- **存量**:按 ONBOARDING 档位 S0~S3;**禁止**首次全 flow 构图
|
|
26
54
|
- **人签**:`01_struct` 模块表 → **HG-GRAPH-MODULES** approved → 允许 30 改码
|
|
27
55
|
|
|
28
|
-
##
|
|
56
|
+
## 历史说明
|
|
29
57
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
cp -R cyning-harness/graph/templates/* docs/_tech_graph/
|
|
33
|
-
# 按需删除 README 或本说明段
|
|
34
|
-
```
|
|
58
|
+
- v0.1 使用 `.md` + `.ai.md` 双轨;v0.2 起改为 YAML-first,`.ai.md` 已弃用。
|
|
59
|
+
- 复杂业务仓应采用 `.graph.yaml` 源 + manifest/contract CI;`cyning-harness` 模板包维持简化编译流。
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# 帽子:需求 / 任务分析(Harness · Starter 子集)
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> **hat_id(V2)**:**10-task** · 对应 **20-task-audit** · 历史文件名 **10-requirements** 保留。
|
|
4
|
+
> **姊妹帽**:SPEC 思考 **10-spec**(Extended · 工作区 `docs/harness/prompts/10-spec-requirements.md`)。
|
|
5
|
+
> **完整版 POINTER**(Ink 工作区):`docs/harness/prompts/10-task-requirements.md`
|
|
4
6
|
> **本文件**:嵌入用户仓 `docs/harness/prompts/` 的 **精简真值**。
|
|
5
7
|
|
|
6
8
|
## 身份
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# 帽子:任务审核(Harness · Starter 子集)
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> **hat_id(V2)**:**20-task-audit** · 对应 **10-task** · 历史文件名 **22-task-audit** 保留。
|
|
4
|
+
> **姊妹帽**:SPEC 书面审 **20-spec-audit**(Extended · 工作区 `docs/harness/prompts/20-spec-audit.md`)。
|
|
5
|
+
> **完整版 POINTER**(Ink 工作区):`docs/harness/prompts/20-task-audit.md`
|
|
4
6
|
> **本文件**:嵌入用户仓 `docs/harness/prompts/` 的 **精简真值**。
|
|
5
7
|
|
|
6
8
|
## 身份
|
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
## 身份
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
**执行者自检**:默认由 **30 同一 Agent** 在本轮连续完成;把「声称完成」变成 **可核对证据**。
|
|
9
|
+
|
|
10
|
+
> **纪律**:不通过则 30 改码并重跑本帽步骤,直至 task 验证命令绿;**无需**维护者单独开 40 对话澄清。
|
|
9
11
|
|
|
10
12
|
## 只做什么
|
|
11
13
|
|
|
@@ -36,8 +38,9 @@
|
|
|
36
38
|
|
|
37
39
|
## 交接物
|
|
38
40
|
|
|
39
|
-
- 给 50 复检 / 00
|
|
40
|
-
- task 内 **`### 自检结论(执行者)`**
|
|
41
|
+
- 给 50 复检 / 00 统筹 / **CLOSE**:diff + 日志 + 自检验收表
|
|
42
|
+
- task 内 **`### 自检结论(执行者)`** 须已回填
|
|
43
|
+
- 50 未过 → 打回 **30**;CLOSE 偏差过大 → 维护者决策 ↺ **10-task** 或 **10-spec**
|
|
41
44
|
|
|
42
45
|
---
|
|
43
46
|
|
|
@@ -45,4 +48,4 @@
|
|
|
45
48
|
|
|
46
49
|
| 日期 | 摘要 |
|
|
47
50
|
|------|------|
|
|
48
|
-
| 2026-06-
|
|
51
|
+
| 2026-06-21 | 30 同 Agent 闭环 · 50/CLOSE 打回规则 |
|
|
@@ -1,31 +1,40 @@
|
|
|
1
1
|
# harness/prompts
|
|
2
2
|
|
|
3
|
-
从本目录向用户仓 **`docs/harness/prompts/`** 复制 **Starter
|
|
4
|
-
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
3
|
+
从本目录向用户仓 **`docs/harness/prompts/`** 复制 **Starter 子集**。
|
|
4
|
+
|
|
5
|
+
## 标准流程(V2)
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
人 + 00 chat 大纲
|
|
9
|
+
→ 10-spec R0–R9
|
|
10
|
+
→ 20-spec-audit + HG-SPEC-SIGNOFF(人签 · 可多轮)
|
|
11
|
+
→ 00 起草 P0 task
|
|
12
|
+
→ 10-task → 20-task-audit R1(↺ 10-task)→ HG-AUDIT-R1
|
|
13
|
+
→ 30 → 40(同 Agent · 自修重跑直至通过)
|
|
14
|
+
→ 50(↺ 30 · 可选)→ CLOSE
|
|
15
|
+
```
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
详述:[`../docs/methodology/product/SDD_HAT_FLOW_v2_zh.md`](../docs/methodology/product/SDD_HAT_FLOW_v2_zh.md)
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
| 10 | 20 | 人闸 |
|
|
20
|
+
|----|-----|------|
|
|
21
|
+
| 10-spec | 20-spec-audit | HG-SPEC-SIGNOFF |
|
|
22
|
+
| 10-task | 20-task-audit | HG-AUDIT-R1 |
|
|
18
23
|
|
|
19
|
-
|
|
24
|
+
## Starter(本目录)
|
|
20
25
|
|
|
21
|
-
|
|
26
|
+
| 文件 | hat_id | 说明 |
|
|
27
|
+
|------|--------|------|
|
|
28
|
+
| [`10-requirements.md`](./10-requirements.md) | 10-task | task §5 思考 |
|
|
29
|
+
| [`22-task-audit.md`](./22-task-audit.md) | 20-task-audit | reviews/ · HG-AUDIT-R1 |
|
|
30
|
+
| [`30-execute-code.md`](./30-execute-code.md) | 30 | 实现 · **含 40 自检闭环** |
|
|
31
|
+
| [`40-self-check.md`](./40-self-check.md) | 40 | 与 30 同 Agent · 规则分文件 |
|
|
32
|
+
| [`TEMPLATE_30_gate_stop.md`](./TEMPLATE_30_gate_stop.md) | — | 30 拒开工 |
|
|
22
33
|
|
|
23
|
-
|
|
24
|
-
## 完整 Harness 库
|
|
25
|
-
- 上游:你的组织/monorepo `docs/harness/prompts/`(只读对照 · 非 Starter 默认)
|
|
26
|
-
```
|
|
34
|
+
Extended(10-spec / 20-spec-audit / 00 / 50):工作区 `docs/harness/prompts/` · 见 [`SDD_HAT_FLOW_v2_zh.md`](../docs/methodology/product/SDD_HAT_FLOW_v2_zh.md) §4。
|
|
27
35
|
|
|
28
|
-
##
|
|
36
|
+
## 修订记录
|
|
29
37
|
|
|
30
|
-
|
|
31
|
-
|
|
38
|
+
| 日期 | 摘要 |
|
|
39
|
+
|------|------|
|
|
40
|
+
| 2026-06-21 | V2 标准流程 · 30→40 同 Agent · 50/CLOSE 打回 |
|
package/ontology.yaml
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
# 人类真值:docs/methodology/product/DESIGN_ONTOLOGY_v1_zh.md
|
|
3
3
|
# 冲突时以 Markdown 为准 · 供未来 harness ontology-check 使用
|
|
4
4
|
|
|
5
|
-
version: "1.
|
|
6
|
-
product_semver: "2.0.
|
|
5
|
+
version: "1.3"
|
|
6
|
+
product_semver: "2.0.4"
|
|
7
7
|
license: MIT
|
|
8
8
|
|
|
9
9
|
classes:
|
|
@@ -64,24 +64,44 @@ axioms:
|
|
|
64
64
|
text: "禁止 sync 覆盖 docs/tasks、reviews、invokes/by-task"
|
|
65
65
|
- id: S5
|
|
66
66
|
text: "harness-sync apply 前须 git-clean(可 --force 跳过)"
|
|
67
|
+
- id: D1
|
|
68
|
+
text: "每次 20-task-audit 必须产出 AuditReview(零阻塞须写明)"
|
|
67
69
|
- id: D2
|
|
68
|
-
text: "HG-AUDIT-R1 pending 时
|
|
70
|
+
text: "HG-AUDIT-R1 pending 时 20-task-audit 不得附 30 Prompt(别名 22-task-audit)"
|
|
69
71
|
- id: D7
|
|
70
72
|
text: "public push 须 HG-RELEASE 人闸 checklist 全勾"
|
|
71
73
|
|
|
74
|
+
# V2 hat_id · Starter 闭包 + Extended POINTER(见 DESIGN_ONTOLOGY §3.2)
|
|
72
75
|
starter_hats:
|
|
73
|
-
- hat_id: "10-
|
|
74
|
-
role:
|
|
75
|
-
|
|
76
|
+
- hat_id: "10-task"
|
|
77
|
+
role: TaskRequirementsHat
|
|
78
|
+
alias: "10-requirements"
|
|
79
|
+
- hat_id: "20-task-audit"
|
|
76
80
|
role: TaskAuditHat
|
|
81
|
+
alias: "22-task-audit"
|
|
77
82
|
- hat_id: "30-execute-code"
|
|
78
83
|
role: ExecuteHat
|
|
79
84
|
- hat_id: "40-self-check"
|
|
80
85
|
role: SelfCheckHat
|
|
81
86
|
|
|
87
|
+
extended_hats:
|
|
88
|
+
- hat_id: "10-spec"
|
|
89
|
+
role: SpecRequirementsHat
|
|
90
|
+
pointer: "工作区 docs/harness/prompts/10-spec-requirements.md"
|
|
91
|
+
- hat_id: "20-spec-audit"
|
|
92
|
+
role: SpecAuditHat
|
|
93
|
+
pointer: "工作区 docs/harness/prompts/20-spec-audit.md"
|
|
94
|
+
- hat_id: "00-orchestrator"
|
|
95
|
+
role: OrchestratorHat
|
|
96
|
+
- hat_id: "50-independent-reinspect"
|
|
97
|
+
role: ReinspectHat
|
|
98
|
+
|
|
82
99
|
human_gates:
|
|
83
100
|
- id: HG-TASK-DRAFT
|
|
84
|
-
blocks_hats: ["
|
|
101
|
+
blocks_hats: ["20-task-audit", "30-execute-code"]
|
|
102
|
+
- id: HG-SPEC-SIGNOFF
|
|
103
|
+
blocks_hats: ["30-execute-code"]
|
|
104
|
+
note: "Epic 级 · SPEC approved 后 00 方可派实现链至 30"
|
|
85
105
|
- id: HG-AUDIT-R1
|
|
86
106
|
blocks_hats: ["30-execute-code"]
|
|
87
107
|
- id: HG-RELEASE
|
package/package.json
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
> **状态**:`active`(M2 v0.1)
|
|
4
4
|
> **形态**:**脚本优先**([`wizard/README.md`](./README.md));本文档为 preset 说明备查
|
|
5
|
-
> **关联**:[`docs/ONBOARDING.md`](../docs/ONBOARDING.md) · GUIDANCE D3 IDE 轨
|
|
5
|
+
> **关联**:[`docs/ONBOARDING.md`](../docs/ONBOARDING.md) · GUIDANCE D3 IDE 轨
|
|
6
|
+
> **新建项目引导**:[`wizard/guides/GUIDE_new_project_bootstrap_v1_zh.md`](./guides/GUIDE_new_project_bootstrap_v1_zh.md) — 从零接入的 6 步操作手册
|
|
6
7
|
|
|
7
8
|
---
|
|
8
9
|
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# GUIDE · 新建项目 Harness 引导(v1)
|
|
2
|
+
|
|
3
|
+
| 项 | 内容 |
|
|
4
|
+
| --- | --- |
|
|
5
|
+
| **状态** | `active` |
|
|
6
|
+
| **版本** | v1 |
|
|
7
|
+
| **日期** | 2026-06-29 |
|
|
8
|
+
| **触发** | harness-probe bootstrapping 实录 → 抽象为通用模式 |
|
|
9
|
+
| **读者** | 维护者在新项目中接入 Harness 时的操作手册 |
|
|
10
|
+
|
|
11
|
+
> **用途**:从零开始给一个新项目(单仓、Python、无前端)接入 cyning-harness 纪律体系。存量项目见 [`ONBOARDING_wizard_v1_zh.md`](../ONBOARDING_wizard_v1_zh.md)。
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 1. 判断:你的项目需要什么
|
|
16
|
+
|
|
17
|
+
| 条件 | 推荐 profile | 说明 |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| 纯文档/小工具 | `harness-only` | 只给 prompts + invoke 模板 |
|
|
20
|
+
| 有业务代码 + CI | `harness-only` + 手动补图谱和 CI | **本指南覆盖** |
|
|
21
|
+
| 全栈 Ink 类(前端+后端) | `fullstack-node-py` | 带 Wiki、standards、task bootstrap |
|
|
22
|
+
|
|
23
|
+
**关键原则**:宁可先用 `harness-only` 打底,再按需补。fullstack profile 多出来的 Wiki + standards 对小项目是噪音。
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 2. 引导 6 步(通用模板)
|
|
28
|
+
|
|
29
|
+
### Step 1:种子 prompts + invoke 模板
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
cd <project-root>
|
|
33
|
+
npx @cyning/harness init --preset harness-only --ide cursor
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
产物:
|
|
37
|
+
- `docs/harness/prompts/`:10/22/30/40 + FRAGMENT + TEMPLATE
|
|
38
|
+
- `docs/harness/invokes/TEMPLATE_invoke.md`
|
|
39
|
+
- `.cursor/rules/06-harness-pointer.mdc`
|
|
40
|
+
|
|
41
|
+
**注意**:`.cyning-harness/` 加到 `.gitignore`。
|
|
42
|
+
|
|
43
|
+
### Step 2:AGENTS.md + CLAUDE.md
|
|
44
|
+
|
|
45
|
+
模板源:`cyning-harness/ide/adapters/`
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
cp <path-to-cyning-harness>/ide/adapters/CLAUDE.md.fragment.example <project-root>/CLAUDE.md
|
|
49
|
+
cp <path-to-cyning-harness>/ide/adapters/AGENTS.md.fragment.example <project-root>/AGENTS.md
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**CLAUDE.md**:薄层,基本不用改。替换 Verify 表里的技术栈(前端→删掉、后端→`pytest tests/ -q`)。
|
|
53
|
+
|
|
54
|
+
**AGENTS.md**:片段末尾追加项目专属段(~20 行):
|
|
55
|
+
- **读序**:README → 架构文档 → 图谱
|
|
56
|
+
- **命令**:项目专属 vitest/pytest/build 命令
|
|
57
|
+
- **边界**:不改什么、不碰什么
|
|
58
|
+
- **关键词**:项目专属关键词
|
|
59
|
+
|
|
60
|
+
### Step 3:Agent 定义 + 权限
|
|
61
|
+
|
|
62
|
+
创建 `.claude/agents/<project>-agent.md`:
|
|
63
|
+
|
|
64
|
+
```markdown
|
|
65
|
+
---
|
|
66
|
+
name: <project>
|
|
67
|
+
description: <项目描述> · spawn by Lead
|
|
68
|
+
tools: Read, Write, Edit, Grep, Glob, Bash
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
你是 **<project> agent**。
|
|
72
|
+
|
|
73
|
+
## 必读
|
|
74
|
+
- `docs/harness/prompts/30-execute-code.md`
|
|
75
|
+
- `docs/harness/prompts/40-self-check.md`
|
|
76
|
+
- `docs/_tech_graph/graph.json`
|
|
77
|
+
- 当前 task:`docs/harness/tasks/active/task_*.md`
|
|
78
|
+
|
|
79
|
+
## Open Folder
|
|
80
|
+
- **`<project>/`**
|
|
81
|
+
|
|
82
|
+
## 边界
|
|
83
|
+
- 列出项目专属禁止项
|
|
84
|
+
|
|
85
|
+
## Verify
|
|
86
|
+
- `pytest tests/ -q`
|
|
87
|
+
|
|
88
|
+
## 回报(≤10 行)
|
|
89
|
+
Status / Deliverables / Blockers / Judgment
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
`.claude/settings.json`:最小权限基线(Read/Bash 白名单)。
|
|
93
|
+
|
|
94
|
+
### Step 4:技术图谱
|
|
95
|
+
|
|
96
|
+
**模块 ≤ 10 个 → 手写 graph.json**。模块多了再引入导出工具链。
|
|
97
|
+
|
|
98
|
+
1. 创建 `docs/_tech_graph/` 目录
|
|
99
|
+
2. 为每个模块写一个 `.ai.md`(node id + label + depends_on + entry_points)
|
|
100
|
+
3. 手写 `graph.json`(`schema_version: graph_v2`)
|
|
101
|
+
4. `README.md` + `99_mermaid_protocol.md`
|
|
102
|
+
|
|
103
|
+
**验证**:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
python -m src.probe graph-query --graph docs/_tech_graph/graph.json --node <entry> --depth 2
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Step 5:CI 门禁
|
|
110
|
+
|
|
111
|
+
复制 `task_validate.py` 并定制:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
cp <source-repo>/tools/harness_task_validate.py <project-root>/tools/
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
修改:
|
|
118
|
+
- `ACTIVE_TASKS` 路径 → `<project>/docs/harness/tasks/active/`
|
|
119
|
+
- `_section_body` 用子串匹配(`title not in ...`),不精确匹配
|
|
120
|
+
|
|
121
|
+
CI workflow(`.github/workflows/tech-graph.yml`):
|
|
122
|
+
- `task_validate` job:扫描 PR diff 中的 `docs/harness/tasks/` 变更
|
|
123
|
+
- `pytest` job:跑全量测试
|
|
124
|
+
|
|
125
|
+
### Step 6:验证链路
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
pytest tests/ -q # 单测全绿
|
|
129
|
+
python -m src.probe verify --task <path> # probe 自带 verify
|
|
130
|
+
npx @cyning/harness verify --target . --task <path> # cyning-harness verify
|
|
131
|
+
python tools/harness_task_validate.py <path> # task 门禁
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
全部 exit 0 则引导完成。
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 3. 常见问题
|
|
139
|
+
|
|
140
|
+
### Q: 为什么不直接用 fullstack profile?
|
|
141
|
+
|
|
142
|
+
fullstack 带了 Wiki、standards L1/L2、task bootstrap——小项目用不上,反而增加 Agent 读取负担。
|
|
143
|
+
|
|
144
|
+
### Q: task_validate.py 的 `_section_body` 为什么要子串匹配?
|
|
145
|
+
|
|
146
|
+
因为 task 文件常用编号标题(`## 3. 失败路径`),精确匹配会遗漏。用 `title in heading` 替代 `title == heading`。
|
|
147
|
+
|
|
148
|
+
### Q: GATE_ROW regex 为什么要接受反引号?
|
|
149
|
+
|
|
150
|
+
因为 human_gate 表的状态列可能写 `approved` 或 `` `approved` ``,正则加 `?` 做可选反引号匹配。
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## 4. 修订记录
|
|
155
|
+
|
|
156
|
+
| 版本 | 日期 | 说明 |
|
|
157
|
+
| --- | --- | --- |
|
|
158
|
+
| v1 | 2026-06-29 | 初版 · 从 harness-probe 引导实录抽象 |
|