@hunter-harness/workflow-harness 0.2.2 → 0.2.4

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 (194) hide show
  1. package/harness/bundles/general/claude-code/.harness-build.json +1 -1
  2. package/harness/bundles/general/claude-code/README.md +12 -11
  3. package/harness/bundles/general/claude-code/harness-archive/SKILL.md +7 -9
  4. package/harness/bundles/general/claude-code/harness-archive/checklist.md +4 -4
  5. package/harness/bundles/general/claude-code/harness-archive/reference.md +3 -5
  6. package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +2 -2
  7. package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +2 -2
  8. package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +10 -16
  9. package/harness/bundles/general/claude-code/harness-plan/SKILL.md +14 -10
  10. package/harness/bundles/general/claude-code/harness-plan/checklist.md +28 -13
  11. package/harness/bundles/general/claude-code/harness-plan/protocols.md +10 -3
  12. package/harness/bundles/general/claude-code/harness-plan/reference.md +9 -23
  13. package/harness/bundles/general/claude-code/harness-review/SKILL.md +2 -2
  14. package/harness/bundles/general/claude-code/harness-run/SKILL.md +2 -2
  15. package/harness/bundles/general/claude-code/harness-run/protocols.md +3 -2
  16. package/harness/bundles/general/claude-code/harness-submit/SKILL.md +2 -2
  17. package/harness/bundles/general/claude-code/harness-submit/checklist.md +2 -2
  18. package/harness/bundles/general/claude-code/harness-sync/SKILL.md +2 -2
  19. package/harness/bundles/general/claude-code/harness-test/SKILL.md +2 -2
  20. package/harness/bundles/general/claude-code/scripts/harness_check_gate.py +25 -17
  21. package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
  22. package/harness/bundles/general/codebuddy/README.md +12 -11
  23. package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +7 -9
  24. package/harness/bundles/general/codebuddy/harness-archive/checklist.md +4 -4
  25. package/harness/bundles/general/codebuddy/harness-archive/reference.md +3 -5
  26. package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +2 -2
  27. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +2 -2
  28. package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +10 -16
  29. package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +13 -9
  30. package/harness/bundles/general/codebuddy/harness-plan/checklist.md +28 -13
  31. package/harness/bundles/general/codebuddy/harness-plan/protocols.md +10 -3
  32. package/harness/bundles/general/codebuddy/harness-plan/reference.md +9 -23
  33. package/harness/bundles/general/codebuddy/harness-review/SKILL.md +2 -2
  34. package/harness/bundles/general/codebuddy/harness-run/SKILL.md +2 -2
  35. package/harness/bundles/general/codebuddy/harness-run/protocols.md +3 -2
  36. package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +2 -2
  37. package/harness/bundles/general/codebuddy/harness-submit/checklist.md +2 -2
  38. package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +2 -2
  39. package/harness/bundles/general/codebuddy/harness-test/SKILL.md +2 -2
  40. package/harness/bundles/general/codebuddy/scripts/harness_check_gate.py +25 -17
  41. package/harness/bundles/general/codex/.harness-build.json +1 -1
  42. package/harness/bundles/general/codex/README.md +12 -11
  43. package/harness/bundles/general/codex/harness-archive/SKILL.md +7 -9
  44. package/harness/bundles/general/codex/harness-archive/checklist.md +4 -4
  45. package/harness/bundles/general/codex/harness-archive/reference.md +3 -5
  46. package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +2 -2
  47. package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +2 -2
  48. package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +10 -16
  49. package/harness/bundles/general/codex/harness-plan/SKILL.md +13 -9
  50. package/harness/bundles/general/codex/harness-plan/checklist.md +28 -13
  51. package/harness/bundles/general/codex/harness-plan/protocols.md +10 -3
  52. package/harness/bundles/general/codex/harness-plan/reference.md +9 -23
  53. package/harness/bundles/general/codex/harness-review/SKILL.md +2 -2
  54. package/harness/bundles/general/codex/harness-run/SKILL.md +2 -2
  55. package/harness/bundles/general/codex/harness-run/protocols.md +3 -2
  56. package/harness/bundles/general/codex/harness-submit/SKILL.md +2 -2
  57. package/harness/bundles/general/codex/harness-submit/checklist.md +2 -2
  58. package/harness/bundles/general/codex/harness-sync/SKILL.md +2 -2
  59. package/harness/bundles/general/codex/harness-test/SKILL.md +2 -2
  60. package/harness/bundles/general/codex/scripts/harness_check_gate.py +25 -17
  61. package/harness/bundles/general/cursor/.harness-build.json +1 -1
  62. package/harness/bundles/general/cursor/README.md +12 -11
  63. package/harness/bundles/general/cursor/harness-archive/SKILL.md +7 -9
  64. package/harness/bundles/general/cursor/harness-archive/checklist.md +4 -4
  65. package/harness/bundles/general/cursor/harness-archive/reference.md +3 -5
  66. package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +2 -2
  67. package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +2 -2
  68. package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +10 -16
  69. package/harness/bundles/general/cursor/harness-plan/SKILL.md +13 -9
  70. package/harness/bundles/general/cursor/harness-plan/checklist.md +28 -13
  71. package/harness/bundles/general/cursor/harness-plan/protocols.md +10 -3
  72. package/harness/bundles/general/cursor/harness-plan/reference.md +9 -23
  73. package/harness/bundles/general/cursor/harness-review/SKILL.md +2 -2
  74. package/harness/bundles/general/cursor/harness-run/SKILL.md +2 -2
  75. package/harness/bundles/general/cursor/harness-run/protocols.md +3 -2
  76. package/harness/bundles/general/cursor/harness-submit/SKILL.md +2 -2
  77. package/harness/bundles/general/cursor/harness-submit/checklist.md +2 -2
  78. package/harness/bundles/general/cursor/harness-sync/SKILL.md +2 -2
  79. package/harness/bundles/general/cursor/harness-test/SKILL.md +2 -2
  80. package/harness/bundles/general/cursor/scripts/harness_check_gate.py +25 -17
  81. package/harness/bundles/java/claude-code/.harness-build.json +1 -1
  82. package/harness/bundles/java/claude-code/README.md +12 -11
  83. package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +2 -2
  84. package/harness/bundles/java/claude-code/harness-archive/SKILL.md +7 -9
  85. package/harness/bundles/java/claude-code/harness-archive/checklist.md +4 -4
  86. package/harness/bundles/java/claude-code/harness-archive/reference.md +3 -5
  87. package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +2 -2
  88. package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +2 -2
  89. package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +10 -16
  90. package/harness/bundles/java/claude-code/harness-package/SKILL.md +2 -2
  91. package/harness/bundles/java/claude-code/harness-plan/SKILL.md +14 -10
  92. package/harness/bundles/java/claude-code/harness-plan/checklist.md +28 -13
  93. package/harness/bundles/java/claude-code/harness-plan/protocols.md +10 -3
  94. package/harness/bundles/java/claude-code/harness-plan/reference.md +9 -23
  95. package/harness/bundles/java/claude-code/harness-review/SKILL.md +2 -2
  96. package/harness/bundles/java/claude-code/harness-run/SKILL.md +2 -2
  97. package/harness/bundles/java/claude-code/harness-run/checklist.md +2 -0
  98. package/harness/bundles/java/claude-code/harness-run/protocols.md +3 -2
  99. package/harness/bundles/java/claude-code/harness-run/reference.md +6 -0
  100. package/harness/bundles/java/claude-code/harness-submit/SKILL.md +2 -2
  101. package/harness/bundles/java/claude-code/harness-submit/checklist.md +2 -2
  102. package/harness/bundles/java/claude-code/harness-sync/SKILL.md +2 -2
  103. package/harness/bundles/java/claude-code/harness-test/SKILL.md +2 -2
  104. package/harness/bundles/java/claude-code/harness-test/checklist.md +3 -1
  105. package/harness/bundles/java/claude-code/harness-test/reference.md +2 -0
  106. package/harness/bundles/java/claude-code/scripts/harness_check_gate.py +25 -17
  107. package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
  108. package/harness/bundles/java/codebuddy/README.md +12 -11
  109. package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +2 -2
  110. package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +7 -9
  111. package/harness/bundles/java/codebuddy/harness-archive/checklist.md +4 -4
  112. package/harness/bundles/java/codebuddy/harness-archive/reference.md +3 -5
  113. package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +2 -2
  114. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +2 -2
  115. package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +10 -16
  116. package/harness/bundles/java/codebuddy/harness-package/SKILL.md +2 -2
  117. package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +13 -9
  118. package/harness/bundles/java/codebuddy/harness-plan/checklist.md +28 -13
  119. package/harness/bundles/java/codebuddy/harness-plan/protocols.md +10 -3
  120. package/harness/bundles/java/codebuddy/harness-plan/reference.md +9 -23
  121. package/harness/bundles/java/codebuddy/harness-review/SKILL.md +2 -2
  122. package/harness/bundles/java/codebuddy/harness-run/SKILL.md +2 -2
  123. package/harness/bundles/java/codebuddy/harness-run/checklist.md +2 -0
  124. package/harness/bundles/java/codebuddy/harness-run/protocols.md +3 -2
  125. package/harness/bundles/java/codebuddy/harness-run/reference.md +6 -0
  126. package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +2 -2
  127. package/harness/bundles/java/codebuddy/harness-submit/checklist.md +2 -2
  128. package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +2 -2
  129. package/harness/bundles/java/codebuddy/harness-test/SKILL.md +2 -2
  130. package/harness/bundles/java/codebuddy/harness-test/checklist.md +3 -1
  131. package/harness/bundles/java/codebuddy/harness-test/reference.md +2 -0
  132. package/harness/bundles/java/codebuddy/scripts/harness_check_gate.py +25 -17
  133. package/harness/bundles/java/codex/.harness-build.json +1 -1
  134. package/harness/bundles/java/codex/README.md +12 -11
  135. package/harness/bundles/java/codex/harness-apidoc/SKILL.md +2 -2
  136. package/harness/bundles/java/codex/harness-archive/SKILL.md +7 -9
  137. package/harness/bundles/java/codex/harness-archive/checklist.md +4 -4
  138. package/harness/bundles/java/codex/harness-archive/reference.md +3 -5
  139. package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +2 -2
  140. package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +2 -2
  141. package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +10 -16
  142. package/harness/bundles/java/codex/harness-package/SKILL.md +2 -2
  143. package/harness/bundles/java/codex/harness-plan/SKILL.md +13 -9
  144. package/harness/bundles/java/codex/harness-plan/checklist.md +28 -13
  145. package/harness/bundles/java/codex/harness-plan/protocols.md +10 -3
  146. package/harness/bundles/java/codex/harness-plan/reference.md +9 -23
  147. package/harness/bundles/java/codex/harness-review/SKILL.md +2 -2
  148. package/harness/bundles/java/codex/harness-run/SKILL.md +2 -2
  149. package/harness/bundles/java/codex/harness-run/checklist.md +2 -0
  150. package/harness/bundles/java/codex/harness-run/protocols.md +3 -2
  151. package/harness/bundles/java/codex/harness-run/reference.md +6 -0
  152. package/harness/bundles/java/codex/harness-submit/SKILL.md +2 -2
  153. package/harness/bundles/java/codex/harness-submit/checklist.md +2 -2
  154. package/harness/bundles/java/codex/harness-sync/SKILL.md +2 -2
  155. package/harness/bundles/java/codex/harness-test/SKILL.md +2 -2
  156. package/harness/bundles/java/codex/harness-test/checklist.md +3 -1
  157. package/harness/bundles/java/codex/harness-test/reference.md +2 -0
  158. package/harness/bundles/java/codex/scripts/harness_check_gate.py +25 -17
  159. package/harness/bundles/java/cursor/.harness-build.json +1 -1
  160. package/harness/bundles/java/cursor/README.md +12 -11
  161. package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +2 -2
  162. package/harness/bundles/java/cursor/harness-archive/SKILL.md +7 -9
  163. package/harness/bundles/java/cursor/harness-archive/checklist.md +4 -4
  164. package/harness/bundles/java/cursor/harness-archive/reference.md +3 -5
  165. package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +2 -2
  166. package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +2 -2
  167. package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +10 -16
  168. package/harness/bundles/java/cursor/harness-package/SKILL.md +2 -2
  169. package/harness/bundles/java/cursor/harness-plan/SKILL.md +13 -9
  170. package/harness/bundles/java/cursor/harness-plan/checklist.md +28 -13
  171. package/harness/bundles/java/cursor/harness-plan/protocols.md +10 -3
  172. package/harness/bundles/java/cursor/harness-plan/reference.md +9 -23
  173. package/harness/bundles/java/cursor/harness-review/SKILL.md +2 -2
  174. package/harness/bundles/java/cursor/harness-run/SKILL.md +2 -2
  175. package/harness/bundles/java/cursor/harness-run/checklist.md +2 -0
  176. package/harness/bundles/java/cursor/harness-run/protocols.md +3 -2
  177. package/harness/bundles/java/cursor/harness-run/reference.md +6 -0
  178. package/harness/bundles/java/cursor/harness-submit/SKILL.md +2 -2
  179. package/harness/bundles/java/cursor/harness-submit/checklist.md +2 -2
  180. package/harness/bundles/java/cursor/harness-sync/SKILL.md +2 -2
  181. package/harness/bundles/java/cursor/harness-test/SKILL.md +2 -2
  182. package/harness/bundles/java/cursor/harness-test/checklist.md +3 -1
  183. package/harness/bundles/java/cursor/harness-test/reference.md +2 -0
  184. package/harness/bundles/java/cursor/scripts/harness_check_gate.py +25 -17
  185. package/harness/manifests/general/claude-code.json +21 -21
  186. package/harness/manifests/general/codebuddy.json +21 -21
  187. package/harness/manifests/general/codex.json +21 -21
  188. package/harness/manifests/general/cursor.json +21 -21
  189. package/harness/manifests/java/claude-code.json +27 -27
  190. package/harness/manifests/java/codebuddy.json +27 -27
  191. package/harness/manifests/java/codex.json +27 -27
  192. package/harness/manifests/java/cursor.json +27 -27
  193. package/hunter-workflow-family.json +2 -2
  194. package/package.json +1 -1
@@ -12,7 +12,7 @@ description: harness-plan 的原生规划协议。吸收 brainstorming、grill-m
12
12
 
13
13
  用于阶段 4,目标是把需求从“用户意图”收敛成可审核设计输入。
14
14
 
15
- 必须输出以下五类结论,并写入 `logs/execution-log.md`,关键决策同步追加到 `events.ndjson`:
15
+ 必须输出以下五类结论。用 `harness_events.py append` 追加 `decision` / `issue` 事件,完整的人类可读结论放进事件 `note`;执行日志仅由事件渲染器派生:
16
16
 
17
17
  | 输出 | 要求 |
18
18
  |------|------|
@@ -24,11 +24,13 @@ description: harness-plan 的原生规划协议。吸收 brainstorming、grill-m
24
24
 
25
25
  执行纪律:
26
26
 
27
- 1. 先消费阶段 0.5 的 context pack、阶段 3 的代码探索结果和项目规则。
27
+ 1. 先消费阶段 1 的 context pack、阶段 3 的代码探索结果和项目规则。
28
28
  2. 能由代码、历史知识、配置、现有文档回答的问题,不问用户。
29
29
  3. 需要用户裁决时,交给 `decision-grilling-protocol`。
30
30
  4. 影响面检查必须覆盖用户未显式提到的参数、数据、接口、权限、兼容性、模块引用和测试影响。
31
31
  5. 低风险工程判断可由 AI 推荐并记录后继续;高风险或业务语义判断必须等待用户确认。
32
+ 6. **歧义优先检查**:否定、对比、动作对象、范围或保留/删除关系存在多种合理解释时,只做足以定位现状的最小取证,然后先给出推荐理解并确认;不得先沿某一种猜测深挖完整代码路径。
33
+ 7. 探索中发现的无关问题仅以非阻断 `issue` 记录,不加入当前决策树,不扩展设计范围。
32
34
 
33
35
  ## 协议二:decision-grilling-protocol
34
36
 
@@ -39,11 +41,14 @@ description: harness-plan 的原生规划协议。吸收 brainstorming、grill-m
39
41
  | 场景 | 用户问题上限 |
40
42
  |------|:---:|
41
43
  | 信息充分、无必须裁决的问题 | 0 |
44
+ | 简单修复 | 0-1 |
42
45
  | 普通需求 | 1-3 |
43
46
  | 高风险需求(auth、支付、数据迁移、并发、安全、不可逆删除、用户可见行为变化) | 5-7 |
44
47
 
45
48
  超过预算仍无法收敛时,不要继续追问;必须输出“未决决策清单”,标记阻塞项,并请用户裁决是否缩小范围或暂停。
46
49
 
50
+ 用户纠正了最初理解时,立即丢弃错误探索假设;简单修复最多再进行一次定向确认,不因旧探索结果追加连锁问题。
51
+
47
52
  ### 提问格式
48
53
 
49
54
  每次只问一个问题,且必须包含推荐答案:
@@ -89,6 +94,8 @@ description: harness-plan 的原生规划协议。吸收 brainstorming、grill-m
89
94
 
90
95
  `implementation-detail.md` 必须存在,但不再强制写成 2-5 分钟粒度、逐行代码片段或逐 commit 指令。简单任务可以短,复杂任务必须细。
91
96
 
97
+ 简单修复的四份产物采用“单点事实、引用不复述”:设计写行为契约,plan 写任务与依赖,detail 写关键修改点与命令,scenarios 写可验证用例。不得复制同一段背景、风险或结论来增加篇幅。
98
+
92
99
  ### 计划质量门槛
93
100
 
94
101
  任务拆分必须满足:
@@ -121,4 +128,4 @@ description: harness-plan 的原生规划协议。吸收 brainstorming、grill-m
121
128
  - implementation-planning-protocol:plan 简表、implementation-detail、test-scenarios 三件套一致,无占位符
122
129
  ```
123
130
 
124
- 该自检写入 execution-log;关键结论写入 events.ndjson。
131
+ 该自检作为 `verification` 事件的 `note` 追加;关键结论分别追加 `decision` / `issue` 事件。渲染器在 `phase.end` 后生成执行日志。
@@ -6,7 +6,7 @@ description: harness-plan 的需求提取模板、任务拆分规则、测试场
6
6
 
7
7
  ## Worktree 决策文件模板
8
8
 
9
- 阶段 2 必须生成 `.harness/changes/<change-name>/meta/worktree.json`。这是后续 `/harness-run` 是否创建/切换 worktree 的唯一机器可读依据。
9
+ 阶段 4 设计审批包确认后必须生成 `.harness/changes/<change-name>/meta/worktree.json`。这是后续 `/harness-run` 是否创建/切换 worktree 的唯一机器可读依据。
10
10
 
11
11
  ### 使用 Worktree
12
12
 
@@ -36,15 +36,9 @@ description: harness-plan 的需求提取模板、任务拆分规则、测试场
36
36
  }
37
37
  ```
38
38
 
39
- ### execution-log 记录示例
39
+ ### 决策事件 note 示例
40
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
- ```
41
+ `用户选择使用 Worktree;决策文件为 meta/worktree.json;requested=true, created=false;创建责任为 harness-run。`
48
42
 
49
43
  ## 参考 — 详细格式
50
44
 
@@ -99,11 +93,11 @@ description: harness-plan 的需求提取模板、任务拆分规则、测试场
99
93
  - 决策2: 说明
100
94
  ```
101
95
 
102
- ## 阶段 5:生成设计文档 ⚠️ 用户审核
96
+ ## 阶段 4:设计审批与文档落盘 ⚠️ 用户审核
103
97
 
104
98
  基于代码探索和需求澄清的结果,撰写设计文档并展示给用户审核。
105
99
 
106
- > **本阶段是强制检查点。** 设计文档生成后必须展示给用户,收到确认后才能进入阶段 6(任务拆分)。设计文档确保方向正确后再细化任务——避免基于错误理解拆分出无效任务。
100
+ > **本阶段是强制检查点。** 先展示设计审批包,收到确认并追加 decision 事件后,才能落盘 `status: approved` 的设计文档并进入阶段 6(任务拆分)。设计方向正确后再细化任务,避免基于错误理解拆分无效任务。
107
101
 
108
102
  **用户确认后必须立即写入** `.harness/changes/<change-name>/spec/<change-name>-design.md`。如果此文件不存在,harness-plan 不得进入阶段 6。
109
103
 
@@ -257,7 +251,7 @@ status: approved
257
251
  | INT-001 | 端到端 | ... | ... | N 步操作 | ... |
258
252
  ```
259
253
 
260
- ## 产物保存规则(跨阶段:阶段1/5/6/8)
254
+ ## 产物保存规则(跨阶段:阶段0.5/4/6/8)
261
255
 
262
256
  1. **自动确定变更名**:基于需求描述自动生成变更名(kebab-case),无需用户确认
263
257
 
@@ -267,7 +261,7 @@ status: approved
267
261
  - 示例:`contribution-module`、`fix-duplicate-submit`
268
262
  - 变更名一旦确定即为最终值,后续所有 skill 自动引用
269
263
 
270
- > **与 Worktree 的关系**:如果阶段 2 用户选择了 worktree,变更名在创建 worktree 时随分支名确定(worktree 名即变更名)。如果未使用 worktree,变更名在阶段 1 自动生成。
264
+ > **与 Worktree 的关系**:阶段 4 用户确认是否使用 worktree;变更名已在阶段 0.5 生成,后续 worktree 直接复用该名称。
271
265
 
272
266
  2. **创建产出目录**:用 Write 工具创建以下目录结构(Write 会自动创建中间目录):
273
267
  ```
@@ -283,7 +277,7 @@ status: approved
283
277
  .harness/changes/<change-name>/backups/
284
278
  ```
285
279
 
286
- 3. **保存设计文档**:将阶段 5 生成的设计文档保存到:
280
+ 3. **保存设计文档**:将阶段 4 已确认的设计文档保存到:
287
281
  - `.harness/changes/<change-name>/spec/<change-name>-design.md`
288
282
 
289
283
  设计文档 frontmatter 格式:
@@ -298,15 +292,7 @@ status: approved
298
292
 
299
293
  > 如果 frontmatter 缺失,后续 run/test/review/submit/archive 不得依赖模型猜测 change-name。
300
294
 
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
- ```
295
+ 4. **初始化结构化事件**:确定 change-name 后,立即运行 `harness_events.py append --type phase.start`。脚本负责建立父目录和 `events.ndjson`;执行日志在 `phase.end` 时由完整事件流渲染,任何阶段都不得直接用 Write/Edit 维护该投影。
310
296
 
311
297
  5. **保存计划文件**:计划文件包含 YAML frontmatter(含 change-name),保存到:
312
298
  - `.harness/changes/<change-name>/plans/<change-name>-plan.md`(简洁任务表)
@@ -3,7 +3,7 @@ name: harness-review
3
3
  description: 6维度代码审查(架构/安全/规范/兼容/测试/性能),对照项目规则(见
4
4
  .harness/context-index.json)和测试场景表,在隔离上下文运行。使用场景:代码审查、提交前检查、合并评审
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=0e63599ac74b7033; overlay=none; agent=codebuddy; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=31546eadb30f5fdf; overlay=none; agent=codebuddy; do not edit -->
7
7
  # harness-review — 代码审查
8
8
 
9
9
  ## Purpose
@@ -135,7 +135,7 @@ review 读取 `state-snapshot.json`(`harness_state.py` / state-layout-protocol
135
135
 
136
136
  ## 执行日志
137
137
 
138
- `events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止手工 Edit**。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
138
+ `events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止用 Write/Edit 直接维护**。直接修改的内容会在 `phase.end` 或 finalize 时被完整重建覆盖,属于数据丢失;需要保留的详情必须进入事件 `note`。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
139
139
 
140
140
  ```powershell
141
141
  python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase <phase> --type phase.start --note "<触发指令>"
@@ -2,7 +2,7 @@
2
2
  name: harness-run
3
3
  description: 按变更簇执行 TDD 编码循环(RED→GREEN→REFACTOR→编译验证),逐变更簇实现计划中的任务。使用场景:开始编码、实现功能、写代码、TDD 编码
4
4
  ---
5
- <!-- generated by harness_deploy.py; core=0e63599ac74b7033; overlay=none; agent=codebuddy; do not edit -->
5
+ <!-- generated by harness_deploy.py; core=31546eadb30f5fdf; overlay=none; agent=codebuddy; do not edit -->
6
6
  # harness-run — 需求编码
7
7
 
8
8
  ## Purpose
@@ -102,7 +102,7 @@ description: 按变更簇执行 TDD 编码循环(RED→GREEN→REFACTOR→编
102
102
 
103
103
  ## 执行日志
104
104
 
105
- `events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止手工 Edit**。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
105
+ `events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止用 Write/Edit 直接维护**。直接修改的内容会在 `phase.end` 或 finalize 时被完整重建覆盖,属于数据丢失;需要保留的详情必须进入事件 `note`。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
106
106
 
107
107
  ```powershell
108
108
  python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase <phase> --type phase.start --note "<触发指令>"
@@ -34,8 +34,9 @@ REFACTOR 只允许不改变行为的整理。若重构改变行为,必须回
34
34
 
35
35
  - `evidence/verification-ledger.json`:构建/测试命令、证据、diffHash、复用状态。
36
36
  - `evidence/run-task-status.md`:任务状态、对应场景、未验证项。
37
- - `logs/execution-log.md`:RED 类型、GREEN 结果、REFACTOR 结果、验证证据。
38
- - `events.ndjson`:关键 command / verification / issue / artifact 事件。
37
+ - `events.ndjson`:关键 command / verification / issue / artifact 事件;RED 类型、GREEN 结果、REFACTOR 结果和验证证据放入事件 `note`。
38
+
39
+ 执行日志是上述事件在阶段边界生成的只读投影,不作为变更簇的直接输出目标。
39
40
 
40
41
  禁止把静态验证写成“测试通过”。静态 RED/GREEN 的最终状态至少是 🟡WARN,除非后续真实验证已完成。
41
42
 
@@ -3,7 +3,7 @@ name: harness-submit
3
3
  description: 最终提交封装:验证→中文 commit→提交/推送;worktree 模式含 --no-ff
4
4
  合并回主分支。使用场景:提交代码、commit、push、合并分支、merge to main、完成开发
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=0e63599ac74b7033; overlay=none; agent=codebuddy; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=31546eadb30f5fdf; overlay=none; agent=codebuddy; do not edit -->
7
7
  # harness-submit — 最终提交(含 worktree 合并)
8
8
 
9
9
  ## Purpose
@@ -131,7 +131,7 @@ git 经 PowerShell;commit/报告不得含明文密钥。遵循 `../protocols/s
131
131
 
132
132
  ## 执行日志
133
133
 
134
- `events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止手工 Edit**。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
134
+ `events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止用 Write/Edit 直接维护**。直接修改的内容会在 `phase.end` 或 finalize 时被完整重建覆盖,属于数据丢失;需要保留的详情必须进入事件 `note`。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
135
135
 
136
136
  ```powershell
137
137
  python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase <phase> --type phase.start --note "<触发指令>"
@@ -380,14 +380,14 @@ powershell.exe -Command "git -C '<项目路径>' diff --name-only --diff-filter=
380
380
 
381
381
  重跑后写回 ledger 的 `compile`/`unitTest`,更新 `diffHash`/`currentHead`。
382
382
 
383
- **写 check-ok marker**(npm run check exit 0 后强制):让 pre-push hook 跳过重复 check(省 ~350s)。三重校验(marker ts<10min + command + HEAD),任一不满足照跑。
383
+ **写 check-ok marker**(npm run check exit 0 后强制):让 pre-push hook 跳过重复 check。三重校验(marker ts<10min + command + commit tree),任一不满足照跑。marker 写入时记录 `git write-tree`,因此验证后创建 commit 不会仅因 HEAD 前移而使缓存失效。
384
384
 
385
385
  ```powershell
386
386
  # npm run check exit 0 后立即写 marker(M5 或 REUSED 后均可)
387
387
  powershell.exe -Command "python harness/scripts/harness_check_gate.py --write"
388
388
  ```
389
389
 
390
- > marker 写入 `.harness/check-ok.marker`(gitignored,本地)。push 时 pre-push hook marker:HEAD 自写 marker 后未变 + ts<10min + command 匹配 → 跳过 npm run check;否则照跑(安全默认)。
390
+ > marker 写入 `.harness/check-ok.marker`(gitignored,本地)。push 时 pre-push hook 比较 `HEAD^{tree}` marker `treeHash`,再校验 ts<10min + command;commit tree 未变化即可跳过,任何内容变化都照跑(安全默认)。
391
391
 
392
392
  ### 步骤 M6:push 主分支
393
393
 
@@ -2,7 +2,7 @@
2
2
  name: harness-sync
3
3
  description: 检查并更新项目AI元数据(CodeGraph索引、harness-codebase-map分析、CLAUDE.md、AGENTS.md、.harness/完整性),确保Claude对代码库的理解与最新代码一致。当用户说'同步/更新索引/刷新元数据/检查一致性'时使用
4
4
  ---
5
- <!-- generated by harness_deploy.py; core=0e63599ac74b7033; overlay=none; agent=codebuddy; do not edit -->
5
+ <!-- generated by harness_deploy.py; core=31546eadb30f5fdf; overlay=none; agent=codebuddy; do not edit -->
6
6
  # harness-sync — 元数据同步
7
7
 
8
8
  ## Purpose
@@ -54,7 +54,7 @@ description: 检查并更新项目AI元数据(CodeGraph索引、harness-codeba
54
54
 
55
55
  ## 执行日志
56
56
 
57
- `events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止手工 Edit**。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
57
+ `events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止用 Write/Edit 直接维护**。直接修改的内容会在 `phase.end` 或 finalize 时被完整重建覆盖,属于数据丢失;需要保留的详情必须进入事件 `note`。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
58
58
 
59
59
  ```powershell
60
60
  python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase <phase> --type phase.start --note "<触发指令>"
@@ -2,7 +2,7 @@
2
2
  name: harness-test
3
3
  description: 测试执行:读取场景表,执行单元测试+API接口测试+数据兼容验证,输出测试报告。当用户说'跑测试/验证/跑用例/接口测试/单元测试'时使用
4
4
  ---
5
- <!-- generated by harness_deploy.py; core=0e63599ac74b7033; overlay=none; agent=codebuddy; do not edit -->
5
+ <!-- generated by harness_deploy.py; core=31546eadb30f5fdf; overlay=none; agent=codebuddy; do not edit -->
6
6
  # harness-test — 测试执行
7
7
 
8
8
  ## Purpose
@@ -149,7 +149,7 @@ Phase 1 前先读 `.harness/changes/<change-name>/evidence/verification-ledger.j
149
149
 
150
150
  ## 执行日志
151
151
 
152
- `events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止手工 Edit**。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
152
+ `events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止用 Write/Edit 直接维护**。直接修改的内容会在 `phase.end` 或 finalize 时被完整重建覆盖,属于数据丢失;需要保留的详情必须进入事件 `note`。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
153
153
 
154
154
  ```powershell
155
155
  python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase <phase> --type phase.start --note "<触发指令>"
@@ -1,14 +1,15 @@
1
1
  #!/usr/bin/env python3
2
2
  """Pre-push gate: skip `npm run check` when a recent check-ok marker matches
3
- the current HEAD.
3
+ the tree of the commit being pushed.
4
4
 
5
5
  Triple check (all must pass to skip, else exit 1 → hook runs npm run check):
6
6
  1. marker exists and its `ts` is within MAX_AGE_S (10 min) of now
7
7
  2. marker `command` == EXPECTED_CMD ("npm run check")
8
- 3. current `git rev-parse HEAD` == marker `commitHash`
8
+ 3. current `git rev-parse HEAD^{tree}` == marker `treeHash`
9
9
 
10
- The marker is written by harness-submit M5 right after a green `npm run check`.
11
- Any mismatch (no marker, stale, different command, HEAD moved since the check)
10
+ The marker is written by harness-submit M5 after a green `npm run check` and
11
+ records `git write-tree`. This remains valid after commit because the new HEAD
12
+ has the same tree. Any mismatch (no marker, stale, command or tree changed)
12
13
  forces a full re-run — the safe default. This is a local convenience only;
13
14
  non-harness pushes have no marker and always run the check.
14
15
 
@@ -28,10 +29,10 @@ MAX_AGE_S = 600 # 10 minutes
28
29
  EXPECTED_CMD = "npm run check"
29
30
 
30
31
 
31
- def _current_head() -> str | None:
32
+ def _git_output(args: list[str]) -> str | None:
32
33
  try:
33
34
  r = subprocess.run(
34
- ["git", "rev-parse", "HEAD"],
35
+ ["git", *args],
35
36
  cwd=str(ROOT),
36
37
  capture_output=True,
37
38
  text=True,
@@ -42,20 +43,27 @@ def _current_head() -> str | None:
42
43
  return r.stdout.strip() if r.returncode == 0 else None
43
44
 
44
45
 
46
+ def _current_index_tree() -> str | None:
47
+ return _git_output(["write-tree"])
48
+
49
+
50
+ def _current_head_tree() -> str | None:
51
+ return _git_output(["rev-parse", "HEAD^{tree}"])
52
+
53
+
45
54
  def write_marker() -> int:
46
- """Write a check-ok marker for the current HEAD (called by harness-submit M5
47
- after a green npm run check). Pre-push gate reads it to skip a re-run."""
48
- head = _current_head()
49
- if head is None:
55
+ """Record the verified index tree so the marker survives the next commit."""
56
+ tree = _current_index_tree()
57
+ if tree is None:
50
58
  return 1
51
59
  MARKER.parent.mkdir(parents=True, exist_ok=True)
52
- payload = {"ts": time.time(), "commitHash": head, "command": EXPECTED_CMD}
60
+ payload = {"ts": time.time(), "treeHash": tree, "command": EXPECTED_CMD}
53
61
  MARKER.write_text(
54
62
  json.dumps(payload, ensure_ascii=False) + "\n",
55
63
  encoding="utf-8",
56
64
  newline="\n",
57
65
  )
58
- print(f"check-ok marker written for HEAD {head[:7]}")
66
+ print(f"check-ok marker written for tree {tree[:7]}")
59
67
  return 0
60
68
 
61
69
 
@@ -84,17 +92,17 @@ def main(argv: list[str] | None = None) -> int:
84
92
  return 1
85
93
  if data.get("command") != EXPECTED_CMD:
86
94
  return 1
87
- marker_commit = data.get("commitHash")
88
- if not isinstance(marker_commit, str):
95
+ marker_tree = data.get("treeHash")
96
+ if not isinstance(marker_tree, str):
89
97
  return 1
90
- head = _current_head()
91
- if head is None or head != marker_commit:
98
+ tree = _current_head_tree()
99
+ if tree is None or tree != marker_tree:
92
100
  return 1
93
101
  # All three checks passed: a green npm run check ran on this exact HEAD
94
102
  # within the last 10 minutes. Safe to skip.
95
103
  print(
96
104
  f"pre-push: skipping npm run check (verified {int(time.time() - ts)}s ago "
97
- f"at HEAD {head[:7]})"
105
+ f"for tree {tree[:7]})"
98
106
  )
99
107
  return 0
100
108
 
@@ -2,5 +2,5 @@
2
2
  "schemaVersion": 1,
3
3
  "overlay": "none",
4
4
  "agent": "codex",
5
- "coreHash": "5401f914277e0517"
5
+ "coreHash": "ab1182505b44093f"
6
6
  }
@@ -135,12 +135,12 @@
135
135
 
136
136
  ## 执行日志与结构化事件机制
137
137
 
138
- 每个关联具体变更的 skill 都必须同时维护两类事实源:
138
+ 每个关联具体变更的 skill 只维护一个实时事实源:
139
139
 
140
- - `.harness/changes/<change-name>/logs/execution-log.md`:人类审计日志,保留上下文、降级原因、解释性文字。
141
- - `.harness/changes/<change-name>/events.ndjson`:程序化事件层,供 `harness_archive.py finalize` 生成 `summary-data.json`。
140
+ - `.harness/changes/<change-name>/events.ndjson`:程序化事件层;人类可读上下文、降级原因和解释性文字写入事件 `note`。
141
+ - `.harness/changes/<change-name>/logs/execution-log.md`:由 `harness_events.py` `phase.end` 自动重建的人类审计投影,禁止 Write/Edit。
142
142
 
143
- `execution-log.md` 中记录开始和结束,格式统一:
143
+ 渲染后的 `execution-log.md` 阶段格式统一:
144
144
 
145
145
  ```markdown
146
146
  ### [<序号>] harness-<skill> — YYYY-MM-DD HH:MM
@@ -152,16 +152,17 @@
152
152
  - **摘要**: <一两句话描述主要产出或问题>
153
153
  ```
154
154
 
155
- - harness-plan 创建变更目录时初始化日志文件和 `events.ndjson`
156
- - 后续每个 skill 开始时追加开始条目和 `phase.start` 事件,结束时追加结束/耗时/结果和 `phase.end` 事件
157
- - **任何代码修改前必须先追加开始条目**(不得等执行完才补记录)
155
+ - harness-plan 确定 change-name 后先追加 `phase.start`,脚本自动建立事件文件
156
+ - 后续每个 skill 开始时追加 `phase.start` 事件,结束时追加包含耗时/结果的 `phase.end` 事件
157
+ - **任何代码修改前必须先追加 `phase.start`**(不得等执行完才补记录)
158
158
  - **降级时必须记录明确原因**(如"Agent 不可用,降级为主会话只读探索"),不可仅写"完成"
159
- - **禁止末尾一次性补写**——每个阶段开始和结束都用 Edit 追加
159
+ - **禁止末尾一次性补写**——各阶段实时 append 结构化事件,渲染日志不得直接编辑
160
160
  - **Bash 拒绝、PowerShell 重试、降级、跳过、用户确认都必须记录**
161
161
  - 日志状态统一使用 `✅OK / 🟡WARN(原因) / ❌FAIL(原因)`
162
162
  - harness-archive 归档时从日志汇总:时间线、总用时、Skill 调用统计
163
163
  - `harness_archive.py finalize/replay` 优先从 `events.ndjson` 汇总命令、验证、artifact、问题和决策;旧 archive 缺少 events 时才回放 execution-log/ledger/manifest
164
164
  - sync 默认不关联具体变更目录,仅在已有变更目录时追加日志和 events
165
+ - archive 是例外:finalize 内部负责且仅负责一次 `phase.start` / `phase.end`,调用者不得重复追加阶段边界
165
166
 
166
167
  ## Skill 目录结构
167
168
 
@@ -259,10 +260,10 @@ harness-skills/
259
260
  | 阶段 | 强制检查 |
260
261
  |------|---------|
261
262
  | **plan 阶段 0** | 检查工作区是否有未提交业务代码变更,已有则询问用户处理方式(继续/暂存/回滚/取消),不得假装"编码前规划" |
262
- | **plan 阶段 3** | 委派前 `harness_preflight.py check-agents --agent harness-explorer`;`usable=false` 或无效返回 → 主会话只读探索,不 retry |
263
+ | **plan 阶段 3** | 委派前 `python <skills-root>/scripts/harness_preflight.py check-agents --skills-root <skills-root> --agent harness-explorer --json`;`usable=false` 或无效返回 → 主会话只读探索,不 retry |
263
264
  | **plan 阶段 4/6** | 原生规划协议必须记录风险/复用/替代方案/推荐方案/关键决策,以及任务拆分摘要 |
264
265
  | **plan 阶段 5** | 设计文档自审结果必须展示给用户;测试场景表未覆盖维度必须标记为 ⚠️ 缺口,不得全部 ✅ |
265
- | **run 步骤 0** | 任何代码修改前必须先追加执行日志开始记录和 `events.ndjson` `phase.start` |
266
+ | **run 步骤 0** | 任何代码修改前必须先向 `events.ndjson` 追加 `phase.start`;执行日志由阶段结束事件自动渲染 |
266
267
  | **run 轻量验证** | `/harness-run` 默认只做开发反馈:TDD RED/GREEN + REFACTOR + 构建命令增量编译(Java 的 `mvn compile -pl <module>` 等)+ 关门检查 + 写 verification-ledger;除非改了公共模块/数据访问层/sql/权限认证/接口层/数据契约 或用户要求 full-run-validation 或不打算继续 `/harness-test`,否则不默认跑全量测试命令(Java 的 `mvn test` 等)。若跑了全量测试必须写入 ledger 供 test/submit 复用 |
267
268
  | **run TDD 降级** | 输出必须写"🟡 静态逻辑验证通过,未执行真实单元测试",**禁止写"测试全部通过"**;降级标注写在执行日志和覆盖报告中,**不污染业务代码注释**;记录三项:降级原因、静态验证场景列表、待部署后验证场景列表 |
268
269
  | **test ledger 复用** | Phase 1 单元测试前先读 `verification-ledger.json`:若 run 阶段已对同一 diffHash/module/profile 跑过单元测试命令(Java 的 `mvn test` 等)且测试通过(Java 的 `Tests run: N, Failures: 0, Errors: 0` / 前端 N passing),可跳过重跑并标记"✅ 复用 harness-run 单元测试结果";diffHash 不一致 / profile 不一致 / 命令范围更窄 / run 后有行为性修改则不得复用 |
@@ -276,7 +277,7 @@ harness-skills/
276
277
  | **submit 步骤 4** | 提交前必须展示四项:实际 staged 文件列表、diff stat、commit message、是否 push |
277
278
  | **submit push 前** | `git fetch` 后检查远程是否有新提交;有则**不得直接 pull 后 push**,必须 pull/rebase + 重新 compile/test |
278
279
  | **submit hash 记录** | pre-pull local hash + final pushed hash 双标注(主目录);worktree 模式 submit 段只本地 commit,合并段产生 `mergeFinalHash`,archive 以 `mergeFinalHash` 为准(无则回退 final pushed hash) |
279
- | **archive 阶段 1** | 必须先 append `phase.start` 事件,**不得等归档完成后才补**;归档前确认:commit 已 push、hash 与 submit/merge 记录一致、test/review 报告状态 |
280
+ | **archive 阶段 1** | 归档前确认 commit 已 push、hash 与 submit/merge 记录一致、test/review 报告状态;阶段边界由 finalize 单进程维护,调用者不额外 append |
280
281
  | **archive 文件移动** | 只用 PowerShell 或 Read+Write+验证,**禁止 Bash mv/cp/rm**;移动失败时不删除原目录 |
281
282
  | **archive final-summary.html** | 默认运行 `harness_archive.py finalize`:由 events/ledger/log/manifest 生成 `summary-data.json`,再由 `templates/render-summary.mjs` 渲染 `final-summary.html`,内嵌 validate。无测试或无 review 时必须在 JSON 中标记 `NOT_RUN` / `ADVISORY_NOT_RUN`,禁止伪造 100% 通过率。必须真实展示状态演进(✅OK / 🟡WARN / 🔁REUSED / 🔁RETESTED / 📝ADVISORY / 🧹NON_BEHAVIORAL_CLEANUP) |
282
283
 
@@ -3,7 +3,7 @@ name: harness-archive
3
3
  description: 归档所有变更产出(计划/测试报告/审查/SQL/API文档)到
4
4
  .harness/archive/,含归档元数据和可视化最终总结。使用场景:归档、完成归档、收尾、打包产出物
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=5401f914277e0517; overlay=none; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=ab1182505b44093f; overlay=none; agent=codex; do not edit -->
7
7
  # harness-archive — 变更归档
8
8
 
9
9
  ## Purpose
@@ -82,11 +82,9 @@ AskUserQuestion 让用户确认归档操作。**用户拒绝 → 终止流程,
82
82
 
83
83
  ### Phase 3:执行归档
84
84
 
85
- 1. append `phase.start` 事件。
86
- 2. 运行 `python <skills-root>/scripts/harness_archive.py status --change-dir ".harness/changes/<change-name>" --json` 前置检查。
87
- 3. 运行 `python <skills-root>/scripts/harness_archive.py finalize --change-dir ".harness/changes/<change-name>" --archive-root ".harness/archive" --json`;读 JSON(移动、collect、render、validate、manifest 比对)。**finalize 不再同步执行知识维护**(§8.2):它写一个 `pending` maintenance-outbox 项即返回,`knowledgeMaintenance=QUEUED`;写 outbox 失败时 `NOT_QUEUED`(warning,不回滚 archive,总状态 CONDITIONAL)。后续由 `harness-sync` / `harness_knowledge.py maintain` 异步推进 outbox
88
- 4. 模型补写 `meta/archive-meta.md` 的维护者结论 / knownRisks / manualActions(脚本占位字段)。
89
- 5. append `phase.end` 事件。**finalize 失败或 validate 报错时不删除原目录**。
85
+ 1. 运行 `python <skills-root>/scripts/harness_archive.py status --change-dir ".harness/changes/<change-name>" --json` 前置检查。
86
+ 2. 如需维护者结论,在移动前补全 `meta/archive-meta.md`;不得在 finalize 后修改已校验的归档文件。
87
+ 3. 运行 `python <skills-root>/scripts/harness_archive.py finalize --change-dir ".harness/changes/<change-name>" --archive-root ".harness/archive" --json`;读 JSON(事件、移动、collect、render、validate、manifest 比对)。finalize 内部负责且仅负责一次 `phase.start` / `phase.end`,调用者不得重复追加。**finalize 不再同步执行知识维护**(§8.2):它写一个 `pending` maintenance-outbox 项即返回,`knowledgeMaintenance=QUEUED`;写 outbox 失败时 `NOT_QUEUED`(warning,不回滚 archive,总状态 CONDITIONAL)。后续由 `harness-sync` / `harness_knowledge.py maintain` 异步推进 outbox。**finalize 失败或 validate 报错时不删除原目录**。
90
88
 
91
89
  - **Read `reference.md`** — finalize 输出字段、archive-meta 格式、CONDITIONAL_OK 规则
92
90
  - **Read `templates/summary-data-template.json`** — summary-data 数据结构
@@ -153,9 +151,9 @@ API 测试 `USER_SKIPPED` 或 DB 兼容 `BLOCKED_BY_DBA` 时,最终状态必
153
151
 
154
152
  未提交但用于验证的测试文件必须归档到 `backups/uncommitted-tests/` 并在 final-summary 中展示。
155
153
 
156
- ### 十一、phase.start 事件前置
154
+ ### 十一、归档事件单一所有权
157
155
 
158
- 阶段 0 之前必须先 append `phase.start` 事件(`harness_events.py append`);不得等归档完成才补。归档后 events.ndjson 与自动渲染的 execution-log.md 一起移入 archive。
156
+ finalize 内部负责且仅负责一次 `phase.start` / `phase.end`,并在移动后继续向归档目录中的同一事件流追加。调用者不得在 finalize 前后重复追加阶段边界,否则会造成重复阶段或在原 changes 路径生成幽灵目录。归档后 events.ndjson 与自动渲染的 execution-log.md 一起位于 archive。
159
157
 
160
158
  ### 十二、Shell 安全 / 敏感信息 / 证据化报告
161
159
 
@@ -187,7 +185,7 @@ git 命令通过 `powershell.exe -Command "..."` 执行;archive-meta.md 和 fi
187
185
 
188
186
  ## 执行日志
189
187
 
190
- `events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止手工 Edit**。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
188
+ `events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止用 Write/Edit 直接维护**。直接修改的内容会在 `phase.end` 或 finalize 时被完整重建覆盖,属于数据丢失;需要保留的详情必须进入事件 `note`。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
191
189
 
192
190
  ```powershell
193
191
  python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase <phase> --type phase.start --note "<触发指令>"
@@ -16,12 +16,12 @@ description: harness-archive 的归档前检查项和归档后验证项。仅在
16
16
 
17
17
  ## 归档前检查(Phase 1)
18
18
 
19
- > ⚠️ **phase.start 前置**:在归档前检查的第一项前,必须先 append `phase.start` 事件(见 SKILL.md `## 执行日志`)。不得等归档完成才补。
19
+ > ⚠️ **单一所有权**:finalize 内部负责且仅负责一次 `phase.start` / `phase.end`。归档前检查不得自行追加 archive 阶段边界。
20
20
 
21
- - [ ] append `phase.start` 事件(`harness_events.py append --change-dir ".harness/changes/<change-name>"`)
21
+ - [ ] 未在调用 finalize 前手工追加 archive 阶段边界
22
22
  - [ ] 只有一个未归档变更目录(多个时终止或让用户选择)
23
23
  - [ ] 变更目录下有 plans/ 子目录(至少有计划文件)
24
- - [ ] `logs/execution-log.md` 存在(需要追加归档记录;新路径缺失时兼容根目录 `execution-log.md`)
24
+ - [ ] `events.ndjson` 存在;执行日志允许由 finalize 从事件流重新渲染(旧 archive 才兼容根目录 `execution-log.md`)
25
25
  - [ ] 准备生成 `archive-manifest-before.json`(path/size/sha256)
26
26
  - [ ] 准备生成 `summary-data.json`(业务目标、阶段状态、验证、产物、维护者结论)
27
27
  - [ ] git status 无未提交的重要变更(归档应对应已提交的代码)
@@ -40,7 +40,7 @@ description: harness-archive 的归档前检查项和归档后验证项。仅在
40
40
  - [ ] `.harness/archive/YYYY-MM-DD-<change-name>/` 目录存在(通过 Glob 实际扫描确认)
41
41
  - [ ] 所有子目录(plans/, tests/, reviews/, sqls/)已完整移入(通过 Glob 实际扫描确认,不仅看预期路径)
42
42
  - [ ] before/after manifest 校验通过(排除 `logs/execution-log.md`——归档追加结束记录预期 sha256 变化;其他 moved 文件 sha256 必须一致,missing/mismatch=0)
43
- - [ ] archive-meta.md 已创建,frontmatter 字段完整
43
+ - [ ] 如需 archive-meta.md,已在 finalize 前创建且 frontmatter 字段完整;finalize 后未再改动归档文件
44
44
  - [ ] summary-data.json 已生成,且为合法 JSON
45
45
  - [ ] final-summary.html 已由 `templates/render-summary.mjs` 渲染生成
46
46
  - [ ] **final-summary.html 真实性检查**:
@@ -10,11 +10,9 @@ description: harness-archive 的归档流程、manifest、summary-data、final-s
10
10
  - **Phase 1 确认归档对象**:Glob `.harness/changes/*/plans/*-plan.md`(排除 archive),展示概要;多变更让用户选择或终止。
11
11
  - **Phase 2 确认归档(强制阻断)**:AskUserQuestion 确认,拒绝即终止。
12
12
  - **Phase 3 执行归档**:
13
- 1. append `phase.start` 事件(`harness_events.py append`)。
14
- 2. 运行 `python <skills-root>/scripts/harness_archive.py status --change-dir ... --json` 做前置检查。
15
- 3. 运行 `python <skills-root>/scripts/harness_archive.py finalize --change-dir ... --archive-root ".harness/archive" --json`;读 JSON 结果。
16
- 4. 模型补写 `meta/archive-meta.md` 的 `maintenanceNotes` / `knownRisks` / `manualActions`(脚本留空占位)。
17
- 5. append `phase.end` 事件。**finalize 报错或 validate 失败时不删除原 changes 目录**。
13
+ 1. 运行 `python <skills-root>/scripts/harness_archive.py status --change-dir ... --json` 做前置检查。
14
+ 2. 需要维护者结论时,在移动前补全 `meta/archive-meta.md` `maintenanceNotes` / `knownRisks` / `manualActions`;finalize 后不再修改归档内容。
15
+ 3. 运行 `python <skills-root>/scripts/harness_archive.py finalize --change-dir ... --archive-root ".harness/archive" --json`;读 JSON 结果。finalize 内部负责且仅负责一次 `phase.start` / `phase.end`,调用者不得重复追加。**finalize 报错或 validate 失败时不删除原 changes 目录**。
18
16
  - **Phase 4 验证与提示**:见 `checklist.md` 归档后验证项。
19
17
 
20
18
  ## manifest 生成
@@ -3,7 +3,7 @@ name: harness-codebase-map
3
3
  description: 分析现有代码库并生成 .harness/codebase/map/
4
4
  下的结构化代码库地图。用于陌生项目理解、重大改造前梳理、harness-sync 提示 map 过期后的人工刷新。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=5401f914277e0517; overlay=none; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=ab1182505b44093f; overlay=none; agent=codex; do not edit -->
7
7
  # harness-codebase-map — 代码库地图
8
8
 
9
9
  ## Purpose
@@ -85,7 +85,7 @@ description: 分析现有代码库并生成 .harness/codebase/map/
85
85
 
86
86
  ## 执行日志
87
87
 
88
- `events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止手工 Edit**。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
88
+ `events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止用 Write/Edit 直接维护**。直接修改的内容会在 `phase.end` 或 finalize 时被完整重建覆盖,属于数据丢失;需要保留的详情必须进入事件 `note`。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
89
89
 
90
90
  ```powershell
91
91
  python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase <phase> --type phase.start --note "<触发指令>"
@@ -3,7 +3,7 @@ name: harness-knowledge-ingest
3
3
  description: 从 .harness/archive 归档整理、同步和维护项目知识索引。适用场景:ingest knowledge、sync
4
4
  knowledge、rebuild knowledge index、promote knowledge、确认知识条目、检查知识库是否过期。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=5401f914277e0517; overlay=none; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=ab1182505b44093f; overlay=none; agent=codex; do not edit -->
7
7
  # harness-knowledge-ingest
8
8
 
9
9
  从 `.harness/archive/**/reports/final/summary-data.json` 抽取项目知识,生成并维护本地 `.harness/knowledge/` 索引。
@@ -232,7 +232,7 @@ powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge.py' sync
232
232
 
233
233
  ## 执行日志
234
234
 
235
- `events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止手工 Edit**。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
235
+ `events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止用 Write/Edit 直接维护**。直接修改的内容会在 `phase.end` 或 finalize 时被完整重建覆盖,属于数据丢失;需要保留的详情必须进入事件 `note`。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
236
236
 
237
237
  ```powershell
238
238
  python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase <phase> --type phase.start --note "<触发指令>"