@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.
Files changed (33) hide show
  1. package/AGENTS.md +4 -3
  2. package/CHANGELOG.md +39 -0
  3. package/README.md +7 -5
  4. package/docs/ARCHITECTURE.md +2 -1
  5. package/docs/methodology/AUDIT_doc_consistency_2026-06-15_zh.md +29 -22
  6. package/docs/methodology/README.md +1 -0
  7. package/docs/methodology/execution/PROMPT_review_v203_v2_hat_flow_bump_v1_zh.md +136 -0
  8. package/docs/methodology/execution/README.md +1 -0
  9. package/docs/methodology/execution/reviews/review_v2_hat_flow_20260621.md +71 -0
  10. package/docs/methodology/pointers/HARNESS_HAT_CHAIN_V2_ONEPAGER_v1_zh.md +31 -0
  11. package/docs/methodology/pointers/README.md +1 -0
  12. package/docs/methodology/pointers/SDD_HAT_FLOW_v1_zh.md +5 -4
  13. package/docs/methodology/product/DESIGN_ONTOLOGY_v1_zh.md +100 -47
  14. package/docs/methodology/product/README.md +2 -1
  15. package/docs/methodology/product/SDD_HAT_FLOW_v2_zh.md +78 -0
  16. package/graph/templates/00_main.graph.yaml +72 -0
  17. package/graph/templates/00_main.md +53 -40
  18. package/graph/templates/02_version.md +6 -0
  19. package/graph/templates/10_flow_MAIN.graph.yaml +105 -0
  20. package/graph/templates/10_flow_MAIN.md +80 -38
  21. package/graph/templates/99_mermaid_protocol.md +39 -20
  22. package/graph/templates/README.md +37 -12
  23. package/harness/prompts/10-requirements.md +3 -1
  24. package/harness/prompts/22-task-audit.md +3 -1
  25. package/harness/prompts/30-execute-code.md +2 -1
  26. package/harness/prompts/40-self-check.md +7 -4
  27. package/harness/prompts/README.md +31 -22
  28. package/ontology.yaml +27 -7
  29. package/package.json +1 -1
  30. package/wizard/ONBOARDING_wizard_v1_zh.md +2 -1
  31. package/wizard/guides/GUIDE_new_project_bootstrap_v1_zh.md +158 -0
  32. package/graph/templates/00_main.ai.md +0 -28
  33. package/graph/templates/10_flow_MAIN.ai.md +0 -43
@@ -1,47 +1,89 @@
1
- # 主路径 Flow 示例(人类友好版)
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
- > **用途**:`docs/_tech_graph/10_flow_MAIN.md` **至少 1 条**主业务流(新仓 / S0 必做)。
4
- > **双轨**:须与 [`10_flow_MAIN.ai.md`](./10_flow_MAIN.ai.md) 语义等价。
5
- > **嵌入后**:将占位路径替换为真实 handler / 路由 / 页面流。
10
+ # 主路径 Flow 示例
6
11
 
7
- ```mermaid
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
- OUT --> LOG[结构化日志 / trace]
29
-
30
- %% 样式
31
- classDef request fill:#e1f5fe,stroke:#01579b,stroke-width:2px
32
- classDef domain fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
33
- classDef data fill:#fff8e1,stroke:#ff6f00,stroke-width:1px
34
-
35
- class IN,AUTH,VAL request
36
- class SVC,RESP,OUT domain
37
- class REPO,DB,LOG data
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
- - [`00_main.md`](./00_main.md) 中由 `M1` 或等价节点 **加载** 本文件。
43
- - 模块归属见 [`01_struct.md`](./01_struct.md) 中 `api` / `core` 等行。
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
- BFF / API 契约时:**同 task** 更新本 flow 或另开图谱子 task;Harness 关账 ≠ 图谱关账。
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 拓扑协议(通用 · v2
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
- **转换方向**:人写 `.md` → 按本协议生成/同步 `.ai.md` → 渲染审阅。
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. 锚点规则(`.ai.md` 强制)
61
+ ## 3. 锚点规则(YAML 源强制)
63
62
 
64
- 每条 **硬边** 须可追溯到代码或文档:
63
+ 每条 **硬边** 须可追溯到代码或文档,写在 YAML `edges[].anchors` 中:
65
64
 
66
- ```text
67
- // → src/handlers/foo.py#L42
68
- // src/handlers/foo.py::handle_request
69
- // → migrations/001_init.sql#L12
70
- // → docs/_tech_graph/10_flow_MAIN.md
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
- - 锚点用 **独立注释行** `// → path#Ln`,不塞进节点标签。
74
- - 跨模块调用:虚线或 `::triggers`,**不**展开对方内部。
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
- - 禁止虚构文件路径;未知处用 `// → TBD` 并开 task 补锚点。
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.1 已交付模板(T1 · M2
5
+ ## v0.2 已交付模板(T2 · YAML-first
6
6
 
7
7
  | 文件 | 状态 | 说明 |
8
8
  |------|------|------|
9
- | [`00_main.md`](./00_main.md) | ✅ | 顶层流程(人类友好版) |
10
- | [`00_main.ai.md`](./00_main.ai.md) | ✅ | 顶层流程(AI 协议版 · 双轨) |
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
- | [`99_mermaid_protocol.md`](./99_mermaid_protocol.md) | ✅ | Mermaid 拓扑协议 |
13
- | [`10_flow_MAIN.md`](./10_flow_MAIN.md) | ✅ | 主路径 flow 示例(人类版) |
14
- | [`10_flow_MAIN.ai.md`](./10_flow_MAIN.ai.md) | ✅ | 主路径 flow 示例(AI 版) |
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
- ```bash
31
- mkdir -p docs/_tech_graph
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
- > **完整版 POINTER**(Ink 工作区):`docs/harness/prompts/10-requirements.md`
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
- > **完整版 POINTER**(Ink 工作区):`docs/harness/prompts/22-task-audit.md`
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
  ## 身份
@@ -38,7 +38,8 @@
38
38
  ## 输出形状
39
39
 
40
40
  - (拒开工)仅闸扫描 STOP 模板
41
- - (通过)diff + PR 验证说明 + invoke + task 自检回填 + 下一棒 40 Prompt
41
+ - (通过)diff + 验证说明 + invoke + **40 自检闭环**(同上下文跑命令 · 不通过则改码重跑 · 回填 `### 自检结论`)
42
+ - **40 不强制新开对话**;须 task 验证命令全绿后再交 50 / CLOSE
42
43
 
43
44
  ## 交接物
44
45
 
@@ -5,7 +5,9 @@
5
5
 
6
6
  ## 身份
7
7
 
8
- **执行者自检**:与 30 执行帽 **可同上下文连续**;把「声称完成」变成 **可核对证据**。
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 统筹:**diff + 日志摘要 + 自检验收表**
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-15 | A2 Starter 初版 · Ink 完整库 POINTER 对齐 |
51
+ | 2026-06-21 | 30 Agent 闭环 · 50/CLOSE 打回规则 |
@@ -1,31 +1,40 @@
1
1
  # harness/prompts
2
2
 
3
- 从本目录向用户仓 **`docs/harness/prompts/`** 复制 **Starter 子集**(非 Ink 全量帽子库)。
4
-
5
- ## v0.1 已交付(T3 · M2
6
-
7
- | 文件 | 状态 | 说明 |
8
- |------|------|------|
9
- | [`10-requirements.md`](./10-requirements.md) | ✅ | 需求 / 任务分析 · 精简 + POINTER |
10
- | [`22-task-audit.md`](./22-task-audit.md) | ✅ | 任务审核 · 落盘 reviews · HG-AUDIT-R1 |
11
- | [`30-execute-code.md`](./30-execute-code.md) | v0.1.1 | 执行编码 · 强制闸扫描 · AUDIT approved |
12
- | [`40-self-check.md`](./40-self-check.md) | ✅ v0.3.2 | 自检 · 命令证据 · 回填 task |
13
- | [`TEMPLATE_30_gate_stop.md`](./TEMPLATE_30_gate_stop.md) | v0.1.1 | 30 拒开工输出模板 |
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
- **Starter 闭包**:10 / 22 / 30 / **40**(A2 · v0.3.x)
17
+ 详述:[`../docs/methodology/product/SDD_HAT_FLOW_v2_zh.md`](../docs/methodology/product/SDD_HAT_FLOW_v2_zh.md)
16
18
 
17
- ## 完整库(POINTER · 不复制全文)
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
- Extended 帽(00/20/40/50、链式 PROMPT)由维护者在 **私有工作区或签约伙伴仓** 维护 · **不**默认复制进用户仓。
24
+ ## Starter(本目录)
20
25
 
21
- 嵌入用户仓后可在 README 追加(示例):
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
- ```markdown
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
- - 串行 Task 链:维护者工作区链式 PROMPT(M3 `harness ctx` 前手工 `@` 引用)
31
- - 每帽 invoke:[`../invokes/TEMPLATE_invoke.md`](../invokes/TEMPLATE_invoke.md)
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.2"
6
- product_semver: "2.0.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 时 22 不得附 30 Prompt"
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-requirements"
74
- role: RequirementsHat
75
- - hat_id: "22-task-audit"
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: ["22-task-audit", "30-execute-code"]
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyning/harness",
3
- "version": "2.0.3",
3
+ "version": "2.1.0",
4
4
  "description": "cyning-harness discipline package · init / upgrade / check CLI",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -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 引导实录抽象 |