@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,11 +1,11 @@
1
- # 产品设计本体 · cyning-harness(v1.2
1
+ # 产品设计本体 · cyning-harness(v1.3
2
2
 
3
3
 
4
4
  | 项 | 内容 |
5
5
  | ------- | --------------------------------------------------------------------------------------------------------------------- |
6
6
  | **状态** | `draft` |
7
- | **版本** | v1.2 |
8
- | **日期** | 2026-06-15 |
7
+ | **版本** | v1.3 |
8
+ | **日期** | 2026-06-21 |
9
9
  | **范围** | **产品内部**概念模型 · 指导模板 / wizard / sync / SDD 链实现 |
10
10
  | **非范围** | 商业战略、ETCLOVG 行业对标(见 [`../pointers/STRATEGY_ONTOLOGY_v1_zh.md`](../pointers/STRATEGY_ONTOLOGY_v1_zh.md)) |
11
11
  | **真值** | 本文件 + [`../../ARCHITECTURE.md`](../../ARCHITECTURE.md) + [`../../../harness/templates/`](../../../harness/templates/) + `ontology.yaml`(机器可读抽取 · v0.4+ · 与本文件同目录) |
@@ -64,7 +64,7 @@ Stakeholder Hat · Task · Gate · Review 运行时
64
64
 
65
65
  ```yaml
66
66
  # docs/ontology.yaml · 从本 Markdown 抽取 · 非第二真值
67
- version: "1.2"
67
+ version: "1.3"
68
68
  classes:
69
69
  - id: Track
70
70
  domain: Package
@@ -110,7 +110,7 @@ schemas:
110
110
  | **VersionManifest** | 钉住产品包版本(v0.3+) | `.cyning-harness/manifest.json` | `{ "version": "0.3.0" }` |
111
111
  | **Task** | 可验收工作项文档 | `docs/tasks/active/task_*.md` | 改码 task |
112
112
  | **Epic** | 多 Task 总纲(**v1 暂为 Task 特化** · 见 §1.4) | `docs/tasks/active/TASK_epic_*.md` | Epic 编排 |
113
- | **Hat** | SDD 角色帽(行为约束) | `docs/harness/prompts/N-*.md` | `22-task-audit` |
113
+ | **Hat** | SDD 角色帽(行为约束) | `docs/harness/prompts/N-*.md` | `20-task-audit`(Starter 别名 `22-task-audit`) |
114
114
  | **InvokeSnapshot** | 新帽开局时的调用体落盘 | `docs/harness/invokes/` | `invoke_*_30_*.md` |
115
115
  | **AuditReview** | 任务审核书面产出 | `docs/harness/reviews/` | `*_audit_R1_*.md` |
116
116
  | **FailureReport** | 30 执行失败时的结构化产出(v0.3+) | `docs/harness/reviews/` 或 task 附录 | `*_30_failure_*.md` |
@@ -213,7 +213,7 @@ Task --executedIn--> ExecutionShell [external] # Cursor / Kimi C
213
213
 
214
214
  ```yaml
215
215
  Hat:
216
- hat_id: string # 稳定 ID · 如 "22-task-audit" · gate-check 解析用
216
+ hat_id: string # 稳定 ID · 如 "20-task-audit" · gate-check 解析用 · 历史 "22-task-audit" 为别名
217
217
 
218
218
  Task:
219
219
  task_slug: string
@@ -259,7 +259,9 @@ SyncOperation:
259
259
  | HumanGate → blocks_hats | **1..*** · **无重复 hat_id** | 同一 Gate 内不可重复阻塞同一帽 |
260
260
  | Hat → blocked_by_gates | **0..***(同 Task 内) | 多 Gate 可叠阻塞同一 Hat(如 30) |
261
261
  | Task → HG-AUDIT-R1 | 改码类 **1:1 必须** | 30 前须存在且可解析 |
262
- | 22 每轮 AuditReview | **1:1 必须** | 零阻塞也落盘 |
262
+ | TaskHG-SPEC-SIGNOFF | Epic / 功能轨 **0..1** | SPEC 已 signed 后 00 方可派 P0 task 链至 30 |
263
+ | 20-task-audit 每轮 → AuditReview | **1:1 必须** | 零阻塞也落盘 |
264
+ | 20-spec-audit 每轮 → AuditReview | **1:1 必须**(功能轨) | 如 `*_spec_ACCEPT_*` |
263
265
  | InvokeSnapshot → 新帽开局 | **0..1** | 每帽首次 §3 替换后落盘 |
264
266
  | Sync → Task/Reviews/by-task | **禁止覆盖** | 业务数据与纪律层分离 |
265
267
 
@@ -304,23 +306,36 @@ instance_marker: .cyning-harness/tracks/process.yaml
304
306
 
305
307
  JSON Schema 真值:`docs/schemas/track-schema.json`(v0.4+ · 与 `ontology.yaml` 的 `schemas.track` 互链)。
306
308
 
307
- ### 3.2 帽链(Hat 特化 · Starter vs Extended
309
+ ### 3.2 帽链(Hat 特化 · Starter vs Extended · **V2**)
308
310
 
309
311
  ```text
310
312
  Hat(抽象)
311
- ├── OrchestratorHat(00 · 工作区 Extended · 非 Starter 默认)
312
- ├── StarterHat
313
- │ ├── RequirementsHat(10)
314
- ├── TaskAuditHat22
315
- │ └── ExecuteHat30)
316
- └── ExtendedHat(工作区 POINTER · 20/40/50/链式 PROMPT
313
+ ├── OrchestratorHat(00 · Extended · 工作区)
314
+ ├── RequirementsHat(10 · 拆为两子类)
315
+ │ ├── SpecRequirementsHat(10-spec · Extended
316
+ └── TaskRequirementsHat10-task · Starter 别名 10-requirements
317
+ ├── AuditHat20 · 拆为两子类 · 均须 reviews/)
318
+ │ ├── SpecAuditHat(20-spec-audit · Extended · HG-SPEC-SIGNOFF
319
+ │ └── TaskAuditHat(20-task-audit · Starter 别名 22-task-audit · HG-AUDIT-R1)
320
+ ├── ExecuteHat(30 · Starter)
321
+ ├── SelfCheckHat(40 · Extended · A2 待入 Starter)
322
+ └── ReinspectHat(50 · Extended)
317
323
  ```
318
324
 
325
+ **10 / 20 双类型对照(V2 · 与工作区 [`GUIDANCE_harness_hat_v2_chain_v1_zh.md`](../../../../docs/harness/guides/GUIDANCE_harness_hat_v2_chain_v1_zh.md) 对齐)**
326
+
327
+ | 10(思考回填) | 20(书面审) | 人闸 |
328
+ |----------------|--------------|------|
329
+ | **10-spec** | **20-spec-audit** | **HG-SPEC-SIGNOFF** |
330
+ | **10-task** | **20-task-audit** | **HG-AUDIT-R1** |
331
+
332
+ **轻量 task(维护者同意)**:SPEC 已 HG-SPEC-SIGNOFF → 00 草稿 → **10-task R0–R2** → **20-task-audit R1** → HG-AUDIT-R1 → 30→40→…
333
+
319
334
  **设计决策**:
320
335
 
321
- - 产品包默认闭包 = **StarterHat 子集 + ProcessTrack**。
322
- - **ExtendedHat 仅供内部 / 签约伙伴** · 工作区 POINTER · **不**复制进用户仓 · README 须明确声明,避免社区误以为功能缺失。
323
- - `blocks_hats` **必须**引用 `Hat.hat_id` · gate-check 动态解析 · **禁止**硬编码裸编号字符串作为唯一真值。
336
+ - 产品包 Starter 闭包 = **10-task(10-requirements)+ 20-task-audit(22-task-audit)+ 30 + 40**(A2)。
337
+ - **10-spec / 20-spec-audit** 为 **ExtendedHat** · 工作区 POINTER · **不**默认复制进用户仓。
338
+ - `blocks_hats` **必须**引用 `Hat.hat_id` · gate-check 动态解析 · **禁止**硬编码裸编号字符串作为唯一真值 · **须**接受历史别名 `22-task-audit`。
324
339
 
325
340
  ### 3.3 Preset 特化
326
341
 
@@ -367,36 +382,69 @@ Task(抽象)
367
382
 
368
383
  ## 4. 状态机与生命周期
369
384
 
370
- ### 4.1 SDD 帽链(ProcessTrack 核心)
385
+ ### 4.1 SDD 帽链(ProcessTrack 核心 · **V2**)
386
+
387
+ **标准流程(人读版 · 与 [`SDD_HAT_FLOW_v2_zh.md`](./SDD_HAT_FLOW_v2_zh.md) 一致)**
371
388
 
372
389
  ```text
373
- [00] ──► 10 ◄──────────────────────────────────────────────┐
374
- draft/pending/in_progress │
375
- ▼ │
376
- [20?] ──► 22(R*) ──[HG approved]──► 30 ──► 40 ──► 22(CLOSE) ──► done
390
+ 人 + 00 chat 大纲
391
+ 10-spec R0–R9
392
+ → 20-spec-audit + HG-SPEC-SIGNOFF(人签 · 可多轮修改)
393
+ 00 起草 P0 task
394
+ → 10-task
395
+ → 20-task-audit R1(↺ 10-task)
396
+ → HG-AUDIT-R1(人签)
397
+ → 30 → 40(同 Agent · 自修重跑 40 直至通过)
398
+ → 50(↺ 30 · 可选)
399
+ → CLOSE(小问题 → 下一 task/SPEC · 偏差过大 → 10-spec/10-task)
400
+ ```
401
+
402
+ **状态机(实现读版)**
403
+
404
+ ```text
405
+ [00] ──► 10-spec ◄──────────────────────────────┐
406
+ │ │
407
+ ▼ │
408
+ 20-spec-audit(R*) ──[HG-SPEC-SIGNOFF]──► [00 起草 task]
409
+ │ │ │
410
+ │ └── 人 rejected / 未过 ──► 10-spec
411
+ └── 否决 ──► 10-spec │
412
+
413
+ [00] ──► 10-task ◄─────────────────────────────────┤
414
+ │ │
415
+ ▼ │
416
+ 20-task-audit(R*) ──[HG-AUDIT-R1]──► 30 ══► 40(同 Agent 闭环)
377
417
  │ │ │
378
- │ ├── HG pending ──► blocked ──► (approve) ──► 继续
379
- ├── HG rejected ──► task.status=draft ──► 10(强制)
380
- └── 30 失败 ──► FailureReport ──► failed ──► 22 或 10
381
- └── 否决 ──► 10
418
+ ├── 50? ── fail ──► 30
419
+ │ └── CLOSE ──► done | 下一 task | 10
420
+ ├── HG pending ──► blocked
421
+ │ ├── HG rejected ──► 10-task
422
+ │ └── 30 失败 ──► FailureReport ──► 20-task-audit 或 10-task
423
+ └── 否决 ──► 10-task
382
424
  ```
383
425
 
384
- **FailureReport 联动(模板级 · v0.3+)**:10 / 22 Prompt **须**检查 task 是否关联 `FailureReport`;若存在,`failed` 原因与退回路径须在 Review / 需求节 **显式引用** 该 Artifact 路径。
426
+ **30→40 纪律**:40 Verify 子步;**默认不单独派 40 对话** · 30 Agent task 验证命令、回填自检结论 · 不通过则改码并重跑直至通过。
427
+
428
+ **bugfix 轨**:跳过 10-spec / 20-spec-audit · 自 **10-task → 20-task-audit → 30**。
429
+
430
+ **FailureReport 联动(模板级 · v0.3+)**:10-task / 20-task-audit Prompt **须**检查 task 是否关联 `FailureReport`;若存在,`failed` 原因与退回路径须在 Review / 需求节 **显式引用** 该 Artifact 路径。
385
431
 
386
432
  | 转移 | 条件 |
387
433
  | ------- | ----------------------------------------------- |
388
- | → 30 | `HG-AUDIT-R1 = approved` **且** 22 无内容阻塞 |
434
+ | → 30 | `HG-AUDIT-R1 = approved` **且** 20-task-audit 无内容阻塞 |
435
+ | Epic → 30(链) | **另须** `HG-SPEC-SIGNOFF = approved`(若 task 自 SPEC 投影) |
389
436
  | 30 拒开工 | 任一 blocking gate = pending · 或 failure_paths 缺失 → **blocked** |
390
- | 30 执行失败 | 产出 **FailureReport** · task.status → **failed** · 维护者选择退回 22 或 10 |
391
- | HG rejected | 记录否决理由 · task.status → **draft** · **强制** 回 10 |
392
- | → CLOSE | 22 终轮「签收/关闭」节 + task status → done |
393
- | 10 重入 | 来自 20 否决 · HG **rejected** · 30 **failed**(含 FailureReport) |
437
+ | 30 执行失败 | 产出 **FailureReport** · task.status → **failed** · 维护者选择退回 20-task-audit 或 10-task |
438
+ | HG rejected | 记录否决理由 · task.status → **draft** · **强制** 回 10-task |
439
+ | → CLOSE | 50 pass 或跳过 50 · task status → done · **小问题**留下一 task/SPEC · **偏差过大**维护者 ↺ 10-spec/10-task |
440
+ | 50 fail | 打回 **30** 修复 |
441
+ | 10-task 重入 | 20-spec-audit / 20-task-audit 否决 · HG **rejected** · 30 **failed** · CLOSE 决策重开 |
394
442
 
395
443
 
396
444
  | Task.status | 含义 | 恢复路径 |
397
445
  | --- | --- | --- |
398
446
  | `blocked` | Gate pending 或 30 拒开工 | Gate approved → 继续 30 |
399
- | `failed` | 30 执行失败已落 FailureReport | 退回 22 修复 或 退回 10 重定范围 |
447
+ | `failed` | 30 执行失败已落 FailureReport | 退回 20-task-audit 或 退回 10-task 重定范围 |
400
448
 
401
449
  ### 4.2 HumanGate
402
450
 
@@ -410,7 +458,7 @@ pending ──(maintainer reject)──► rejected
410
458
  pending ──(Agent 30 扫描)──► BLOCKED(运行时 · 非持久 status)──► TEMPLATE_30_gate_stop
411
459
  ```
412
460
 
413
- | status | 22 行为 | 30 行为 | 后续 |
461
+ | status | 20-task-audit 行为 | 30 行为 | 后续 |
414
462
  | --- | --- | --- | --- |
415
463
  | `pending` | 可产出 Review · **禁止**附 30 Prompt(D2) | **BLOCKED** | — |
416
464
  | `approved` | 正常 | 允许开工 | — |
@@ -494,8 +542,8 @@ R1 ──(零阻塞 + 人签)──► 30 允许
494
542
 
495
543
  | ID | 公理 |
496
544
  | ------ | --------------------------------------------------- |
497
- | **D1** | 每次 22 **必须** 产出 `AuditReview`(零阻塞须写明) |
498
- | **D2** | `HG-AUDIT-R1 = pending` 时 22 **禁止** 附 30 Prompt |
545
+ | **D1** | 每次 **20-task-audit** **必须** 产出 `AuditReview`(零阻塞须写明) |
546
+ | **D2** | `HG-AUDIT-R1 = pending` 时 **20-task-audit** **禁止** 附 30 Prompt |
499
547
  | **D3** | 30 首输出 **必须** 扫描 task 闸表(见 `TEMPLATE_30_gate_stop`) · 目标 CLI:`gate-check` |
500
548
  | **D4** | 改码 task 开工前 `HG-GRAPH-MODULES = approved`(D4-a) |
501
549
  | **D5** | `test_strategy=required` → 须先失败测试再实现(或同 PR 可见红过) |
@@ -620,18 +668,22 @@ npx CLI ≡ WizardTool 新实例
620
668
 
621
669
  ---
622
670
 
623
- ## 8. 与 SDD 编号对照(快速查)
671
+ ## 8. 与 SDD 编号对照(快速查 · **V2**)
672
+
673
+ > 链真值(工作区):[`docs/harness/guides/GUIDANCE_harness_hat_v2_chain_v1_zh.md`](../../../../docs/harness/guides/GUIDANCE_harness_hat_v2_chain_v1_zh.md)
624
674
 
675
+ | 编号 | Hat 类 / hat_id | 必落盘类 | Starter |
676
+ | --- | --------------- | ---------------- | --- |
677
+ | 00 | OrchestratorHat | —(Handoff / KPI · Extended) | — |
678
+ | **10-spec** | SpecRequirementsHat | SPEC(更新) | Extended |
679
+ | **10-task** | TaskRequirementsHat | Task(更新) | ✅(`10-requirements` 别名) |
680
+ | **20-spec-audit** | SpecAuditHat | **AuditReview**(`*_spec_*`) | Extended |
681
+ | **20-task-audit** | TaskAuditHat | **AuditReview**(`*_audit_*`) | ✅(`22-task-audit` 别名) |
682
+ | 30 | ExecuteHat | 代码 diff · **FailureReport**(失败时) | ✅ |
683
+ | 40 | SelfCheckHat | Task.自检结论 | Extended(A2 待入 Starter) |
684
+ | 50 | ReinspectHat | 可选 Review | Extended |
625
685
 
626
- | 编号 | Hat 类 | 必落盘类 |
627
- | --- | --------------- | ---------------- |
628
- | 00 | OrchestratorHat | —(Handoff / KPI · Extended) |
629
- | 10 | RequirementsHat | Task(更新) |
630
- | 20 | SpecReviewHat | —(对话 · Extended) |
631
- | 22 | TaskAuditHat | **AuditReview** |
632
- | 30 | ExecuteHat | 代码 diff · **FailureReport**(失败时) |
633
- | 40 | SelfCheckHat | Task.自检结论 · Extended Starter 待 A2 |
634
- | 50 | ReinspectHat | 可选 Review · Extended |
686
+ **历史编号(别名 · 勿删)**:`20-review-spec-task` **10-spec**;`10-requirements` → **10-task**;`22-task-audit` → **20-task-audit**。
635
687
 
636
688
 
637
689
  ---
@@ -697,7 +749,7 @@ npx CLI ≡ WizardTool 新实例
697
749
  ### 11.1 下一步优先级(评审共识 · 非本体变更)
698
750
 
699
751
  ```text
700
- P0 最小 v0.2 闭环(harness-only · sync plan/apply · 10→22→30 金样)
752
+ P0 最小 v0.2 闭环(harness-only · sync · SDD_HAT_FLOW_v2 标准流程)
701
753
  P1 gate-check 基础 · README Quick Start + §7.5 展开
702
754
  P2 examples/kimi-code-integration(v0.3)· 第一篇对外博客
703
755
  P3 v0.2.0 tag · Kimi 社区触达 · 简历链 GitHub
@@ -716,4 +768,5 @@ P3 v0.2.0 tag · Kimi 社区触达 · 简历链 GitHub
716
768
  | v1.1 | 2026-06-15 | 吸收外部评审:元本体 · ICVO · 异常态 · 迁移/rollback · Epic 编排 · S5/S6/D7 · track.yaml · Q5 |
717
769
  | v1.1.1 | 2026-06-15 | Preset 更名 `kimi-code-meta` · §3.3.1 meta/bootstrap 用语 · 锁定 rejected→10 · 合并冲突强制人工 |
718
770
  | v1.2 | 2026-06-15 | v1.2 评审:§0.3 贡献清单 · §0.4 ontology.yaml · track-schema · D6-a · 合并 base 澄清 · plan 预检 · 状态图细化 · depends_on 禁环 |
771
+ | v1.3 | 2026-06-21 | **V2 帽链**:10-spec/10-task · 20-spec-audit/20-task-audit · 30→40 同 Agent · 50/CLOSE 打回 · [`SDD_HAT_FLOW_v2_zh.md`](./SDD_HAT_FLOW_v2_zh.md) |
719
772
 
@@ -2,7 +2,8 @@
2
2
 
3
3
  | 文档 | 说明 |
4
4
  | --- | --- |
5
- | **[`DESIGN_ONTOLOGY_v1_zh.md`](./DESIGN_ONTOLOGY_v1_zh.md)** | **真值** v1.2 · Track / Hat / Sync / P·S·D 公理 / ICVO |
5
+ | **[`DESIGN_ONTOLOGY_v1_zh.md`](./DESIGN_ONTOLOGY_v1_zh.md)** | **真值** v1.3 · Track / Hat / Sync / P·S·D 公理 / ICVO |
6
+ | **[`SDD_HAT_FLOW_v2_zh.md`](./SDD_HAT_FLOW_v2_zh.md)** | **帽链流程** · 人读版 · 30→40 · 打回规则 |
6
7
 
7
8
  **分层**:回答「产品 **是什么** · 由哪些实体组成 · 允许哪些状态转移」。
8
9
 
@@ -0,0 +1,78 @@
1
+ # SDD 帽链流程(V2 · 产品仓真值)
2
+
3
+ | 项 | 内容 |
4
+ |----|------|
5
+ | **版本** | v2.0 |
6
+ | **日期** | 2026-06-21 |
7
+ | **关联** | [`DESIGN_ONTOLOGY_v1_zh.md`](./DESIGN_ONTOLOGY_v1_zh.md) §3.2 · §4.1 · §8 · [`../../../harness/prompts/README.md`](../../../harness/prompts/README.md) |
8
+
9
+ ---
10
+
11
+ ## 1. 标准流程(功能 / Epic)
12
+
13
+ ```text
14
+ 人 + 00 chat 生成大纲
15
+ → 10-spec R0–R9(回填 SPEC · 可多轮)
16
+ → 20-spec-audit(规格验收 · reviews/)
17
+ ↔ HG-SPEC-SIGNOFF(人签 · 未过则回到 10-spec 或 20 再审)
18
+ → 00 起草 P0 task(自 SPEC §13 投影)
19
+ → 10-task(回填 task §5)
20
+ → 20-task-audit R1(reviews/ · 可打回 10-task)
21
+ ↔ HG-AUDIT-R1(人签)
22
+ → 30 实现
23
+ → 40 自检(通常由 30 同一 Agent 连续执行 · 失败自修并重跑 40 直至通过 · 无需单独开 40 对话)
24
+ → 50 独立复检(可选 · 未过打回 30)
25
+ → CLOSE(关账 · KPI)
26
+ ```
27
+
28
+ **10 / 20 配对**
29
+
30
+ | 10 | 20 | 人闸 |
31
+ |----|-----|------|
32
+ | 10-spec | 20-spec-audit | HG-SPEC-SIGNOFF |
33
+ | 10-task | 20-task-audit | HG-AUDIT-R1 |
34
+
35
+ 历史别名:`10-requirements`→10-task · `22-task-audit`→20-task-audit。
36
+
37
+ ---
38
+
39
+ ## 2. 打回与关账
40
+
41
+ | 节点 | 常见打回 | 说明 |
42
+ |------|----------|------|
43
+ | 20-spec-audit | → **10-spec** | 规格缺口 · 人闸 pending / rejected |
44
+ | 20-task-audit | → **10-task** | task 验收 / failure_paths 不可执行 |
45
+ | 50 | → **30** | 独立视角发现实现问题 |
46
+ | CLOSE | → **下一 task / SPEC 增量** | 小问题留后续迭代 |
47
+ | CLOSE | → **10-spec 或 10-task** | 结果与预期相差太远 · 维护者决策重开 |
48
+
49
+ **30→40**:不强制新对话;30 Agent 跑验证命令、回填 `### 自检结论(执行者)`,不通过则改码再跑,直到 task 所列命令绿。
50
+
51
+ **00**:编排层 · 不写产品代码 · 起草 SPEC/task · 派下一棒 Prompt。
52
+
53
+ ---
54
+
55
+ ## 3. bugfix 捷径
56
+
57
+ Issue ≈ mini-SPEC 且已签收时:**跳过 10-spec / 20-spec-audit** · 自 **00 草稿 task → 10-task → 20-task-audit → …**。
58
+
59
+ ---
60
+
61
+ ## 4. Starter 包与用户仓
62
+
63
+ | 帽 | 产品仓 Starter | 完整 Prompt |
64
+ |----|----------------|-------------|
65
+ | 10-task | `harness/prompts/10-requirements.md` | 工作区 Extended |
66
+ | 20-task-audit | `harness/prompts/22-task-audit.md` | 同上 |
67
+ | 30 / 40 | ✅ Starter | 同上 |
68
+ | 10-spec / 20-spec-audit / 00 / 50 | POINTER | 工作区 `docs/harness/prompts/` |
69
+
70
+ 工作区 Ink 全量库:[`docs/harness/guides/GUIDANCE_harness_hat_v2_chain_v1_zh.md`](../../../../docs/harness/guides/GUIDANCE_harness_hat_v2_chain_v1_zh.md)(POINTER · 私有 monorepo)。
71
+
72
+ ---
73
+
74
+ ## 修订记录
75
+
76
+ | 版本 | 日期 | 说明 |
77
+ |------|------|------|
78
+ | v2.0 | 2026-06-21 | 与 Ink 工作区 V2 对齐 · 30→40 同 Agent · 50/CLOSE 打回规则 |
@@ -0,0 +1,72 @@
1
+ graph_id: "00_main"
2
+ title: "顶层流程总图"
3
+ description: "模板包主入口分发与典型子流程路由"
4
+ version: "2026-06-30"
5
+
6
+ nodes:
7
+ - id: "Q"
8
+ label: "用户 / 客户端请求"
9
+ - id: "E"
10
+ label: "应用入口"
11
+ - id: "M1"
12
+ label: "核心业务处理"
13
+ - id: "M2"
14
+ label: "次要路径"
15
+ - id: "ADM"
16
+ label: "Admin / Job"
17
+ - id: "FLOW_MAIN"
18
+ label: "主路径子流程"
19
+ - id: "FLOW_DOC"
20
+ label: ">10_flow_MAIN.md"
21
+ - id: "DB"
22
+ label: "持久化"
23
+ - id: "STRUCT_DOC"
24
+ label: ">01_struct.md"
25
+
26
+ edges:
27
+ - from: "Q"
28
+ to: "E"
29
+ label: "->"
30
+ anchors:
31
+ - path: "src/main.py"
32
+ line: 1
33
+ - path: "app/router/index.ts"
34
+ line: 1
35
+ - from: "E"
36
+ to: "M1"
37
+ label: "主路径 A"
38
+ anchors:
39
+ - path: "handlers/resource.py"
40
+ symbol: "handle_create"
41
+ - from: "E"
42
+ to: "M2"
43
+ label: "主路径 B"
44
+ anchors:
45
+ - path: "handlers/health.py"
46
+ symbol: "health_check"
47
+ - from: "E"
48
+ to: "ADM"
49
+ label: "管理/批处理"
50
+ anchors:
51
+ - path: "jobs/ingest.py"
52
+ symbol: "run_sync"
53
+ - from: "M1"
54
+ to: "FLOW_MAIN"
55
+ mark: "::triggers"
56
+ type: "triggers"
57
+ - from: "FLOW_MAIN"
58
+ to: "FLOW_DOC"
59
+ label: "加载"
60
+ - from: "M1"
61
+ to: "DB"
62
+ label: "->"
63
+ anchors:
64
+ - path: "db/repository.py"
65
+ - from: "ADM"
66
+ to: "DB"
67
+ label: "->"
68
+ anchors:
69
+ - path: "db/repository.py"
70
+ - from: "E"
71
+ to: "STRUCT_DOC"
72
+ label: "加载"
@@ -1,52 +1,65 @@
1
- # 顶层流程总图(人类友好版)
1
+ ---
2
+ graph_id: 00_main
3
+ title: 顶层流程总图
4
+ description: 模板包主入口分发与典型子流程路由
5
+ version: '2026-06-30'
6
+ generated_from: 00_main.graph.yaml
7
+ generator: scripts/graph_yaml_compile.js
8
+ ---
2
9
 
3
- > **用途**:`docs/_tech_graph/00_main.md` — 本仓 **Happy Path** 主干;子流程折叠为 `10_flow_*.md` 链接。
4
- > **双轨**:须与 [`00_main.ai.md`](./00_main.ai.md) 语义等价;flowchart 改 `.ai.md` 优先,再同步本文件。
5
- > **协议**:[`99_mermaid_protocol.md`](./99_mermaid_protocol.md)
10
+ # 顶层流程总图
6
11
 
7
- ## 维护说明
12
+ > 模板包主入口分发与典型子流程路由
8
13
 
9
- 1. 替换下方占位节点为你的 **真实入口**(HTTP 路由 / CLI / 事件总线等)。
10
- 2. 子图节点 > 7 时折叠为 `[[Phase]]`,链至独立 `10_flow_*.md`。
11
- 3. 异常分支可挂侧链;主干保持可读。
14
+ > **源文件**:`00_main.graph.yaml` · `scripts/graph_yaml_compile.js` 生成 · 请勿直接手写本文件
12
15
 
13
16
  ```mermaid
14
17
  flowchart TD
15
- %% version: YYYY-MM-DD — 替换为首次人签日期
16
-
17
- %% === 入口 ===
18
- Q[用户 / 客户端请求] --> E{应用入口<br/>例:src/main.py 或 app/router}
19
-
20
- %% === 主业务分支(示例 · 按栈裁剪)===
21
- E -->|主路径 A| M1[核心业务处理<br/>例:/api/v1/resource]
22
- E -->|主路径 B| M2[次要路径<br/>例:/health 或 /metrics]
23
- E -->|管理/批处理| ADM[Admin / Job<br/>例:ingest / sync]
24
-
25
- %% === 子流程折叠 ===
26
- M1 --> FLOW_MAIN[主路径子流程]
27
- FLOW_MAIN --> FLOW_DOC[> 10_flow_MAIN.md]
28
-
29
- M1 --> DB[(持久化<br/>例:PostgreSQL / 文件)]
18
+ Q[[用户 / 客户端请求]]
19
+ E[[应用入口]]
20
+ M1[[核心业务处理]]
21
+ M2[[次要路径]]
22
+ ADM[[Admin / Job]]
23
+ FLOW_MAIN[[主路径子流程]]
24
+ FLOW_DOC[>10_flow_MAIN.md]
25
+ DB[(持久化)]
26
+ STRUCT_DOC[>01_struct.md]
27
+ Q --> E
28
+ E --"主路径 A"--> M1
29
+ E --"主路径 B"--> M2
30
+ E --"管理/批处理"--> ADM
31
+ M1 --"::triggers"--> FLOW_MAIN
32
+ FLOW_MAIN --"加载"--> FLOW_DOC
33
+ M1 --> DB
30
34
  ADM --> DB
31
-
32
- %% === 样式(可选)===
33
- classDef start fill:#e1f5fe,stroke:#01579b,stroke-width:2px
34
- classDef main fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
35
- classDef infra fill:#fff8e1,stroke:#ff6f00,stroke-width:1px
36
-
37
- class Q,E start
38
- class M1,M2,ADM main
39
- class FLOW_MAIN,DB infra
35
+ E --"加载"--> STRUCT_DOC
36
+ %% 锚点:见 YAML 源 edges[].anchors
40
37
  ```
41
38
 
42
- ## 待补 flow 清单(存量 S2+ 可用)
39
+ ## Nodes
43
40
 
44
- | flow 文件 | 状态 | 说明 |
45
- |-----------|------|------|
46
- | `10_flow_MAIN.md` | 示例已提供 | 主请求路径;嵌入后替换为真实 API/页面流 |
47
- | `10_flow_*.md` | 待增量 | 每 Epic 或跨模块改动时补 1 张 |
41
+ | ID | Label |
42
+ |----|-------|
43
+ | Q | 用户 / 客户端请求 |
44
+ | E | 应用入口 |
45
+ | M1 | 核心业务处理 |
46
+ | M2 | 次要路径 |
47
+ | ADM | Admin / Job |
48
+ | FLOW_MAIN | 主路径子流程 |
49
+ | FLOW_DOC | >10_flow_MAIN.md |
50
+ | DB | 持久化 |
51
+ | STRUCT_DOC | >01_struct.md |
48
52
 
49
- ## 关联
53
+ ## Edges
50
54
 
51
- - 模块边界:[`01_struct.md`](./01_struct.md)(**HG-GRAPH-MODULES** 人签真值)
52
- - 拓扑协议:[`99_mermaid_protocol.md`](./99_mermaid_protocol.md)
55
+ | From | To | Label | Type | Anchors |
56
+ |------|----|-------|------|---------|
57
+ | Q | E | -> | | src/main.py#L1, app/router/index.ts#L1 |
58
+ | E | M1 | 主路径 A | | handlers/resource.py::handle_create |
59
+ | E | M2 | 主路径 B | | handlers/health.py::health_check |
60
+ | E | ADM | 管理/批处理 | | jobs/ingest.py::run_sync |
61
+ | M1 | FLOW_MAIN | ::triggers | triggers | |
62
+ | FLOW_MAIN | FLOW_DOC | 加载 | | |
63
+ | M1 | DB | -> | | db/repository.py |
64
+ | ADM | DB | -> | | db/repository.py |
65
+ | E | STRUCT_DOC | 加载 | | |
@@ -0,0 +1,6 @@
1
+ # 图谱版本时间线
2
+
3
+ | 日期 | 版本 | 事件 |
4
+ |------|------|------|
5
+ | YYYY-MM-DD | v0.1 | 首次嵌入用户仓(请替换为真实日期) |
6
+ | 2026-06-30 | v0.2 | 模板包迁移至 YAML-first:`00_main.graph.yaml`、`10_flow_MAIN.graph.yaml` 成为唯一编辑源;`.ai.md` 双轨文件弃用并删除;`scripts/graph_yaml_compile.js` + `scripts/verify-template-compile.sh` 上线 |
@@ -0,0 +1,105 @@
1
+ graph_id: "10_flow_MAIN"
2
+ title: "主路径 Flow 示例"
3
+ description: "典型 HTTP 请求从入口到响应的主干流程"
4
+ version: "2026-06-30"
5
+
6
+ nodes:
7
+ - id: "IN"
8
+ label: "HTTP 请求"
9
+ - id: "AUTH"
10
+ label: "鉴权 / 会话校验"
11
+ - id: "VAL"
12
+ label: "参数校验"
13
+ - id: "SVC"
14
+ label: "业务服务层"
15
+ - id: "ERR_AUTH"
16
+ label: "Auth Failed"
17
+ - id: "ERR_VAL"
18
+ label: "Validation Failed"
19
+ - id: "REPO"
20
+ label: "仓储 / ORM"
21
+ - id: "DB"
22
+ label: "数据库 / 存储"
23
+ - id: "HIT"
24
+ label: "record exists?"
25
+ - id: "NOTFOUND"
26
+ label: "404 / 空结果"
27
+ - id: "BIZERR"
28
+ label: "4xx 业务错误"
29
+ - id: "RESP"
30
+ label: "组装响应 DTO"
31
+ - id: "OUT"
32
+ label: "返回 JSON / 页面"
33
+ - id: "LOG"
34
+ label: "结构化日志"
35
+ - id: "MAIN_DOC"
36
+ label: ">00_main.md"
37
+
38
+ edges:
39
+ - from: "IN"
40
+ to: "AUTH"
41
+ label: "->"
42
+ anchors:
43
+ - path: "middleware/auth.py"
44
+ symbol: "require_user"
45
+ - from: "AUTH"
46
+ to: "VAL"
47
+ label: "[ok]"
48
+ - from: "AUTH"
49
+ to: "ERR_AUTH"
50
+ label: "[err]"
51
+ anchors:
52
+ - path: "middleware/auth.py"
53
+ line: 42
54
+ - from: "VAL"
55
+ to: "SVC"
56
+ label: "[ok]"
57
+ anchors:
58
+ - path: "services/resource_service.py"
59
+ symbol: "handle"
60
+ - from: "VAL"
61
+ to: "ERR_VAL"
62
+ label: "[err]"
63
+ - from: "SVC"
64
+ to: "REPO"
65
+ label: "->"
66
+ anchors:
67
+ - path: "repositories/resource_repo.py"
68
+ symbol: "find_by_id"
69
+ - from: "REPO"
70
+ to: "DB"
71
+ label: "->"
72
+ anchors:
73
+ - path: "db/session.py"
74
+ - from: "REPO"
75
+ to: "HIT"
76
+ label: "?>"
77
+ - from: "HIT"
78
+ to: "NOTFOUND"
79
+ label: "[no]"
80
+ - from: "HIT"
81
+ to: "SVC"
82
+ label: "[yes]"
83
+ - from: "SVC"
84
+ to: "BIZERR"
85
+ label: "[err]"
86
+ anchors:
87
+ - path: "services/resource_service.py"
88
+ - from: "SVC"
89
+ to: "RESP"
90
+ label: "->"
91
+ - from: "RESP"
92
+ to: "OUT"
93
+ label: "->"
94
+ anchors:
95
+ - path: "handlers/resource.py"
96
+ symbol: "to_response"
97
+ - from: "OUT"
98
+ to: "LOG"
99
+ mark: "::archives"
100
+ type: "archives"
101
+ anchors:
102
+ - path: "observability/logger.py"
103
+ - from: "IN"
104
+ to: "MAIN_DOC"
105
+ label: "加载"