@hunter-harness/workflow-harness 0.2.86 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/harness/bundles/general/claude-code/.harness-build.json +1 -1
  2. package/harness/bundles/general/claude-code/contracts/workflow-policy.json +46 -17
  3. package/harness/bundles/general/claude-code/harness-archive/SKILL.md +2 -2
  4. package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +2 -2
  5. package/harness/bundles/general/claude-code/harness-execute/SKILL.md +189 -0
  6. package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +2 -2
  7. package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +2 -2
  8. package/harness/bundles/general/claude-code/harness-plan/SKILL.md +10 -10
  9. package/harness/bundles/general/claude-code/harness-plan/checklist.md +2 -13
  10. package/harness/bundles/general/claude-code/harness-plan/reference.md +43 -81
  11. package/harness/bundles/general/claude-code/harness-pull/SKILL.md +1 -1
  12. package/harness/bundles/general/claude-code/harness-push/SKILL.md +1 -1
  13. package/harness/bundles/general/claude-code/harness-review/SKILL.md +3 -3
  14. package/harness/bundles/general/claude-code/harness-review/protocols.md +1 -1
  15. package/harness/bundles/general/claude-code/harness-run/SKILL.md +8 -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 +1 -1
  18. package/harness/bundles/general/claude-code/harness-sync/SKILL.md +1 -1
  19. package/harness/bundles/general/claude-code/harness-test/SKILL.md +11 -2
  20. package/harness/bundles/general/claude-code/scripts/harness_adoption_metrics.py +391 -0
  21. package/harness/bundles/general/claude-code/scripts/harness_archive.py +46 -15
  22. package/harness/bundles/general/claude-code/scripts/harness_context.py +94 -43
  23. package/harness/bundles/general/claude-code/scripts/harness_events.py +1 -1
  24. package/harness/bundles/general/claude-code/scripts/harness_events_sync.py +1 -0
  25. package/harness/bundles/general/claude-code/scripts/harness_fixback.py +10 -10
  26. package/harness/bundles/general/claude-code/scripts/harness_gate.py +92 -25
  27. package/harness/bundles/general/claude-code/scripts/harness_ledger.py +4 -2
  28. package/harness/bundles/general/claude-code/scripts/harness_paths.py +120 -5
  29. package/harness/bundles/general/claude-code/scripts/harness_phase.py +41 -17
  30. package/harness/bundles/general/claude-code/scripts/harness_plan_finalize.py +16 -873
  31. package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
  32. package/harness/bundles/general/codebuddy/contracts/workflow-policy.json +46 -17
  33. package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +2 -2
  34. package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +2 -2
  35. package/harness/bundles/general/codebuddy/harness-execute/SKILL.md +170 -0
  36. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +2 -2
  37. package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +2 -2
  38. package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +10 -10
  39. package/harness/bundles/general/codebuddy/harness-plan/checklist.md +2 -13
  40. package/harness/bundles/general/codebuddy/harness-plan/reference.md +43 -81
  41. package/harness/bundles/general/codebuddy/harness-pull/SKILL.md +1 -1
  42. package/harness/bundles/general/codebuddy/harness-push/SKILL.md +1 -1
  43. package/harness/bundles/general/codebuddy/harness-review/SKILL.md +3 -3
  44. package/harness/bundles/general/codebuddy/harness-review/protocols.md +1 -1
  45. package/harness/bundles/general/codebuddy/harness-run/SKILL.md +8 -2
  46. package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +2 -2
  47. package/harness/bundles/general/codebuddy/harness-submit/checklist.md +1 -1
  48. package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +1 -1
  49. package/harness/bundles/general/codebuddy/harness-test/SKILL.md +11 -2
  50. package/harness/bundles/general/codebuddy/scripts/harness_adoption_metrics.py +391 -0
  51. package/harness/bundles/general/codebuddy/scripts/harness_archive.py +46 -15
  52. package/harness/bundles/general/codebuddy/scripts/harness_context.py +94 -43
  53. package/harness/bundles/general/codebuddy/scripts/harness_events.py +1 -1
  54. package/harness/bundles/general/codebuddy/scripts/harness_events_sync.py +1 -0
  55. package/harness/bundles/general/codebuddy/scripts/harness_fixback.py +10 -10
  56. package/harness/bundles/general/codebuddy/scripts/harness_gate.py +92 -25
  57. package/harness/bundles/general/codebuddy/scripts/harness_ledger.py +4 -2
  58. package/harness/bundles/general/codebuddy/scripts/harness_paths.py +120 -5
  59. package/harness/bundles/general/codebuddy/scripts/harness_phase.py +41 -17
  60. package/harness/bundles/general/codebuddy/scripts/harness_plan_finalize.py +16 -873
  61. package/harness/bundles/general/codex/.harness-build.json +1 -1
  62. package/harness/bundles/general/codex/contracts/workflow-policy.json +46 -17
  63. package/harness/bundles/general/codex/harness-archive/SKILL.md +2 -2
  64. package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +2 -2
  65. package/harness/bundles/general/codex/harness-execute/SKILL.md +170 -0
  66. package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +2 -2
  67. package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +2 -2
  68. package/harness/bundles/general/codex/harness-plan/SKILL.md +10 -10
  69. package/harness/bundles/general/codex/harness-plan/checklist.md +2 -13
  70. package/harness/bundles/general/codex/harness-plan/reference.md +43 -81
  71. package/harness/bundles/general/codex/harness-pull/SKILL.md +1 -1
  72. package/harness/bundles/general/codex/harness-push/SKILL.md +1 -1
  73. package/harness/bundles/general/codex/harness-review/SKILL.md +3 -3
  74. package/harness/bundles/general/codex/harness-review/protocols.md +1 -1
  75. package/harness/bundles/general/codex/harness-run/SKILL.md +8 -2
  76. package/harness/bundles/general/codex/harness-submit/SKILL.md +2 -2
  77. package/harness/bundles/general/codex/harness-submit/checklist.md +1 -1
  78. package/harness/bundles/general/codex/harness-sync/SKILL.md +1 -1
  79. package/harness/bundles/general/codex/harness-test/SKILL.md +11 -2
  80. package/harness/bundles/general/codex/scripts/harness_adoption_metrics.py +391 -0
  81. package/harness/bundles/general/codex/scripts/harness_archive.py +46 -15
  82. package/harness/bundles/general/codex/scripts/harness_context.py +94 -43
  83. package/harness/bundles/general/codex/scripts/harness_events.py +1 -1
  84. package/harness/bundles/general/codex/scripts/harness_events_sync.py +1 -0
  85. package/harness/bundles/general/codex/scripts/harness_fixback.py +10 -10
  86. package/harness/bundles/general/codex/scripts/harness_gate.py +92 -25
  87. package/harness/bundles/general/codex/scripts/harness_ledger.py +4 -2
  88. package/harness/bundles/general/codex/scripts/harness_paths.py +120 -5
  89. package/harness/bundles/general/codex/scripts/harness_phase.py +41 -17
  90. package/harness/bundles/general/codex/scripts/harness_plan_finalize.py +16 -873
  91. package/harness/bundles/general/cursor/.harness-build.json +1 -1
  92. package/harness/bundles/general/cursor/contracts/workflow-policy.json +46 -17
  93. package/harness/bundles/general/cursor/harness-archive/SKILL.md +2 -2
  94. package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +2 -2
  95. package/harness/bundles/general/cursor/harness-execute/SKILL.md +170 -0
  96. package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +2 -2
  97. package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +2 -2
  98. package/harness/bundles/general/cursor/harness-plan/SKILL.md +10 -10
  99. package/harness/bundles/general/cursor/harness-plan/checklist.md +2 -13
  100. package/harness/bundles/general/cursor/harness-plan/reference.md +43 -81
  101. package/harness/bundles/general/cursor/harness-pull/SKILL.md +1 -1
  102. package/harness/bundles/general/cursor/harness-push/SKILL.md +1 -1
  103. package/harness/bundles/general/cursor/harness-review/SKILL.md +3 -3
  104. package/harness/bundles/general/cursor/harness-review/protocols.md +1 -1
  105. package/harness/bundles/general/cursor/harness-run/SKILL.md +8 -2
  106. package/harness/bundles/general/cursor/harness-submit/SKILL.md +2 -2
  107. package/harness/bundles/general/cursor/harness-submit/checklist.md +1 -1
  108. package/harness/bundles/general/cursor/harness-sync/SKILL.md +1 -1
  109. package/harness/bundles/general/cursor/harness-test/SKILL.md +11 -2
  110. package/harness/bundles/general/cursor/scripts/harness_adoption_metrics.py +391 -0
  111. package/harness/bundles/general/cursor/scripts/harness_archive.py +46 -15
  112. package/harness/bundles/general/cursor/scripts/harness_context.py +94 -43
  113. package/harness/bundles/general/cursor/scripts/harness_events.py +1 -1
  114. package/harness/bundles/general/cursor/scripts/harness_events_sync.py +1 -0
  115. package/harness/bundles/general/cursor/scripts/harness_fixback.py +10 -10
  116. package/harness/bundles/general/cursor/scripts/harness_gate.py +92 -25
  117. package/harness/bundles/general/cursor/scripts/harness_ledger.py +4 -2
  118. package/harness/bundles/general/cursor/scripts/harness_paths.py +120 -5
  119. package/harness/bundles/general/cursor/scripts/harness_phase.py +41 -17
  120. package/harness/bundles/general/cursor/scripts/harness_plan_finalize.py +16 -873
  121. package/harness/bundles/java/claude-code/.harness-build.json +1 -1
  122. package/harness/bundles/java/claude-code/contracts/workflow-policy.json +46 -17
  123. package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +2 -2
  124. package/harness/bundles/java/claude-code/harness-archive/SKILL.md +2 -2
  125. package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +2 -2
  126. package/harness/bundles/java/claude-code/harness-execute/SKILL.md +189 -0
  127. package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +2 -2
  128. package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +2 -2
  129. package/harness/bundles/java/claude-code/harness-package/SKILL.md +2 -2
  130. package/harness/bundles/java/claude-code/harness-plan/SKILL.md +10 -10
  131. package/harness/bundles/java/claude-code/harness-plan/checklist.md +2 -13
  132. package/harness/bundles/java/claude-code/harness-plan/reference.md +43 -81
  133. package/harness/bundles/java/claude-code/harness-pull/SKILL.md +1 -1
  134. package/harness/bundles/java/claude-code/harness-push/SKILL.md +1 -1
  135. package/harness/bundles/java/claude-code/harness-review/SKILL.md +3 -3
  136. package/harness/bundles/java/claude-code/harness-review/protocols.md +1 -1
  137. package/harness/bundles/java/claude-code/harness-run/SKILL.md +8 -2
  138. package/harness/bundles/java/claude-code/harness-submit/SKILL.md +2 -2
  139. package/harness/bundles/java/claude-code/harness-submit/checklist.md +1 -1
  140. package/harness/bundles/java/claude-code/harness-sync/SKILL.md +1 -1
  141. package/harness/bundles/java/claude-code/harness-test/SKILL.md +11 -2
  142. package/harness/bundles/java/claude-code/scripts/harness_adoption_metrics.py +391 -0
  143. package/harness/bundles/java/claude-code/scripts/harness_archive.py +46 -15
  144. package/harness/bundles/java/claude-code/scripts/harness_context.py +94 -43
  145. package/harness/bundles/java/claude-code/scripts/harness_events.py +1 -1
  146. package/harness/bundles/java/claude-code/scripts/harness_events_sync.py +1 -0
  147. package/harness/bundles/java/claude-code/scripts/harness_fixback.py +10 -10
  148. package/harness/bundles/java/claude-code/scripts/harness_gate.py +92 -25
  149. package/harness/bundles/java/claude-code/scripts/harness_ledger.py +4 -2
  150. package/harness/bundles/java/claude-code/scripts/harness_paths.py +120 -5
  151. package/harness/bundles/java/claude-code/scripts/harness_phase.py +41 -17
  152. package/harness/bundles/java/claude-code/scripts/harness_plan_finalize.py +16 -873
  153. package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
  154. package/harness/bundles/java/codebuddy/contracts/workflow-policy.json +46 -17
  155. package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +2 -2
  156. package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +2 -2
  157. package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +2 -2
  158. package/harness/bundles/java/codebuddy/harness-execute/SKILL.md +170 -0
  159. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +2 -2
  160. package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +2 -2
  161. package/harness/bundles/java/codebuddy/harness-package/SKILL.md +2 -2
  162. package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +10 -10
  163. package/harness/bundles/java/codebuddy/harness-plan/checklist.md +2 -13
  164. package/harness/bundles/java/codebuddy/harness-plan/reference.md +43 -81
  165. package/harness/bundles/java/codebuddy/harness-pull/SKILL.md +1 -1
  166. package/harness/bundles/java/codebuddy/harness-push/SKILL.md +1 -1
  167. package/harness/bundles/java/codebuddy/harness-review/SKILL.md +3 -3
  168. package/harness/bundles/java/codebuddy/harness-review/protocols.md +1 -1
  169. package/harness/bundles/java/codebuddy/harness-run/SKILL.md +8 -2
  170. package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +2 -2
  171. package/harness/bundles/java/codebuddy/harness-submit/checklist.md +1 -1
  172. package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +1 -1
  173. package/harness/bundles/java/codebuddy/harness-test/SKILL.md +11 -2
  174. package/harness/bundles/java/codebuddy/scripts/harness_adoption_metrics.py +391 -0
  175. package/harness/bundles/java/codebuddy/scripts/harness_archive.py +46 -15
  176. package/harness/bundles/java/codebuddy/scripts/harness_context.py +94 -43
  177. package/harness/bundles/java/codebuddy/scripts/harness_events.py +1 -1
  178. package/harness/bundles/java/codebuddy/scripts/harness_events_sync.py +1 -0
  179. package/harness/bundles/java/codebuddy/scripts/harness_fixback.py +10 -10
  180. package/harness/bundles/java/codebuddy/scripts/harness_gate.py +92 -25
  181. package/harness/bundles/java/codebuddy/scripts/harness_ledger.py +4 -2
  182. package/harness/bundles/java/codebuddy/scripts/harness_paths.py +120 -5
  183. package/harness/bundles/java/codebuddy/scripts/harness_phase.py +41 -17
  184. package/harness/bundles/java/codebuddy/scripts/harness_plan_finalize.py +16 -873
  185. package/harness/bundles/java/codex/.harness-build.json +1 -1
  186. package/harness/bundles/java/codex/contracts/workflow-policy.json +46 -17
  187. package/harness/bundles/java/codex/harness-apidoc/SKILL.md +2 -2
  188. package/harness/bundles/java/codex/harness-archive/SKILL.md +2 -2
  189. package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +2 -2
  190. package/harness/bundles/java/codex/harness-execute/SKILL.md +170 -0
  191. package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +2 -2
  192. package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +2 -2
  193. package/harness/bundles/java/codex/harness-package/SKILL.md +2 -2
  194. package/harness/bundles/java/codex/harness-plan/SKILL.md +10 -10
  195. package/harness/bundles/java/codex/harness-plan/checklist.md +2 -13
  196. package/harness/bundles/java/codex/harness-plan/reference.md +43 -81
  197. package/harness/bundles/java/codex/harness-pull/SKILL.md +1 -1
  198. package/harness/bundles/java/codex/harness-push/SKILL.md +1 -1
  199. package/harness/bundles/java/codex/harness-review/SKILL.md +3 -3
  200. package/harness/bundles/java/codex/harness-review/protocols.md +1 -1
  201. package/harness/bundles/java/codex/harness-run/SKILL.md +8 -2
  202. package/harness/bundles/java/codex/harness-submit/SKILL.md +2 -2
  203. package/harness/bundles/java/codex/harness-submit/checklist.md +1 -1
  204. package/harness/bundles/java/codex/harness-sync/SKILL.md +1 -1
  205. package/harness/bundles/java/codex/harness-test/SKILL.md +11 -2
  206. package/harness/bundles/java/codex/scripts/harness_adoption_metrics.py +391 -0
  207. package/harness/bundles/java/codex/scripts/harness_archive.py +46 -15
  208. package/harness/bundles/java/codex/scripts/harness_context.py +94 -43
  209. package/harness/bundles/java/codex/scripts/harness_events.py +1 -1
  210. package/harness/bundles/java/codex/scripts/harness_events_sync.py +1 -0
  211. package/harness/bundles/java/codex/scripts/harness_fixback.py +10 -10
  212. package/harness/bundles/java/codex/scripts/harness_gate.py +92 -25
  213. package/harness/bundles/java/codex/scripts/harness_ledger.py +4 -2
  214. package/harness/bundles/java/codex/scripts/harness_paths.py +120 -5
  215. package/harness/bundles/java/codex/scripts/harness_phase.py +41 -17
  216. package/harness/bundles/java/codex/scripts/harness_plan_finalize.py +16 -873
  217. package/harness/bundles/java/cursor/.harness-build.json +1 -1
  218. package/harness/bundles/java/cursor/contracts/workflow-policy.json +46 -17
  219. package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +2 -2
  220. package/harness/bundles/java/cursor/harness-archive/SKILL.md +2 -2
  221. package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +2 -2
  222. package/harness/bundles/java/cursor/harness-execute/SKILL.md +170 -0
  223. package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +2 -2
  224. package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +2 -2
  225. package/harness/bundles/java/cursor/harness-package/SKILL.md +2 -2
  226. package/harness/bundles/java/cursor/harness-plan/SKILL.md +10 -10
  227. package/harness/bundles/java/cursor/harness-plan/checklist.md +2 -13
  228. package/harness/bundles/java/cursor/harness-plan/reference.md +43 -81
  229. package/harness/bundles/java/cursor/harness-pull/SKILL.md +1 -1
  230. package/harness/bundles/java/cursor/harness-push/SKILL.md +1 -1
  231. package/harness/bundles/java/cursor/harness-review/SKILL.md +3 -3
  232. package/harness/bundles/java/cursor/harness-review/protocols.md +1 -1
  233. package/harness/bundles/java/cursor/harness-run/SKILL.md +8 -2
  234. package/harness/bundles/java/cursor/harness-submit/SKILL.md +2 -2
  235. package/harness/bundles/java/cursor/harness-submit/checklist.md +1 -1
  236. package/harness/bundles/java/cursor/harness-sync/SKILL.md +1 -1
  237. package/harness/bundles/java/cursor/harness-test/SKILL.md +11 -2
  238. package/harness/bundles/java/cursor/scripts/harness_adoption_metrics.py +391 -0
  239. package/harness/bundles/java/cursor/scripts/harness_archive.py +46 -15
  240. package/harness/bundles/java/cursor/scripts/harness_context.py +94 -43
  241. package/harness/bundles/java/cursor/scripts/harness_events.py +1 -1
  242. package/harness/bundles/java/cursor/scripts/harness_events_sync.py +1 -0
  243. package/harness/bundles/java/cursor/scripts/harness_fixback.py +10 -10
  244. package/harness/bundles/java/cursor/scripts/harness_gate.py +92 -25
  245. package/harness/bundles/java/cursor/scripts/harness_ledger.py +4 -2
  246. package/harness/bundles/java/cursor/scripts/harness_paths.py +120 -5
  247. package/harness/bundles/java/cursor/scripts/harness_phase.py +41 -17
  248. package/harness/bundles/java/cursor/scripts/harness_plan_finalize.py +16 -873
  249. package/harness/manifests/general/claude-code.json +36 -28
  250. package/harness/manifests/general/codebuddy.json +36 -28
  251. package/harness/manifests/general/codex.json +36 -28
  252. package/harness/manifests/general/cursor.json +36 -28
  253. package/harness/manifests/java/claude-code.json +38 -30
  254. package/harness/manifests/java/codebuddy.json +38 -30
  255. package/harness/manifests/java/codex.json +38 -30
  256. package/harness/manifests/java/cursor.json +38 -30
  257. package/hunter-workflow-family.json +2 -2
  258. package/package.json +1 -1
@@ -6,7 +6,7 @@ description: harness-plan 的需求提取模板、任务拆分规则、测试场
6
6
 
7
7
  ## Worktree 决策文件模板
8
8
 
9
- 阶段 4 设计审批包确认后必须生成 `.harness/changes/<change-name>/meta/worktree.json`。这是后续 `/harness-run` 是否创建/切换 worktree 的唯一机器可读依据。
9
+ 阶段 4 设计审批包确认后必须生成 `.harness/changes/<change-name>/meta/worktree.json`。这是后续 `/harness-execute` 是否创建/切换 worktree 的唯一机器可读依据。
10
10
 
11
11
  ### 使用 Worktree
12
12
 
@@ -21,7 +21,7 @@ description: harness-plan 的需求提取模板、任务拆分规则、测试场
21
21
  "branch": "harness/<change-name>",
22
22
  "decisionBy": "user",
23
23
  "decisionAt": "YYYY-MM-DD HH:mm",
24
- "ownerSkill": "harness-run"
24
+ "ownerSkill": "harness-execute"
25
25
  }
26
26
  ```
27
27
 
@@ -43,7 +43,7 @@ description: harness-plan 的需求提取模板、任务拆分规则、测试场
43
43
 
44
44
  `path` 与 `branch` 必须来自 `harness_runtime.py adapter`/`meta/runtime.json`。所有 agent 共享统一路径 `.worktrees/<change-name>` 与统一分支前缀 `harness/`;`agent` 字段仅作创建者元数据,不再决定路径。
45
45
 
46
- `用户选择使用 Worktree;决策文件为 meta/worktree.json;requested=true, created=false;创建责任为 harness-run。`
46
+ `用户选择使用 Worktree;决策文件为 meta/worktree.json;requested=true, created=false;创建责任为 harness-execute。`
47
47
 
48
48
  ## 参考 — 详细格式
49
49
 
@@ -108,12 +108,13 @@ description: harness-plan 的需求提取模板、任务拆分规则、测试场
108
108
 
109
109
  | 路径 | 审批内容去哪 | 设计文档 |
110
110
  |------|------------|---------|
111
- | **v2**(默认) | `meta/plan-evidence-input.json` 的 `approval.content` + `approver_id` | `plans/<change-name>-design.md`,由 finalize 从审批内容派生——**不要手写**,手写的会被派生渲染覆盖 |
112
- | **legacy** | 直接写文档 | `.harness/changes/<change-name>/spec/<change-name>-design.md`(不存在则不得进入阶段 6) |
111
+ | **v2**(唯一路径) | `meta/plan-evidence-input.json` 的 `approval.content` + `approver_id` | `plans/<change-name>-design.md`,由 finalize 从审批内容派生——**不要手写**,手写的会被派生渲染覆盖 |
112
+
113
+ > 历史 change 的 `spec/<change-name>-design.md`(legacy 产物)保持可读,归档与 read-protocol 照常消费。
113
114
 
114
115
  **设计文档路径规则**:禁止保存到 `docs/superpowers/specs/` 作为正式产物;`/harness-plan` 不运行时调用 Superpowers。同一 change 不得同时存在 `plans/` 与 `spec/` 两份设计——v2 发布的那份才受完整性门禁保护。
115
116
 
116
- ### 设计文档模板(legacy 路径手写时使用;v2 由 finalize 派生,此模板仅作内容清单参考)
117
+ ### 设计文档模板(v2 由 finalize 派生;此模板仅作内容清单参考)
117
118
 
118
119
  ```markdown
119
120
  ---
@@ -189,8 +190,8 @@ source: harness-plan
189
190
  ```
190
191
  .harness/changes/<change-name>/plans/
191
192
  ├── <change-name>-design.md # 设计(v2 由 finalize 派生)
192
- ├── <change-name>-plan.md # harness 简洁任务表,run 默认读取
193
- ├── <change-name>-implementation-detail.md # 原生自适应详细执行参考,run 补充读取
193
+ ├── <change-name>-plan.md # harness 简洁任务表,execute 默认读取
194
+ ├── <change-name>-implementation-detail.md # 原生自适应详细执行参考,execute 补充读取
194
195
  └── <change-name>-test-scenarios.md # 测试场景表
195
196
  ```
196
197
 
@@ -293,55 +294,21 @@ status: approved
293
294
  .harness/changes/<change-name>/backups/
294
295
  ```
295
296
 
296
- 3. **保存设计文档**:
297
- - **v2**:不手写文档;把审批内容填进 `meta/plan-evidence-input.json` `approval.content`,
298
- `plans/<change-name>-design.md` 由 finalize 派生(frontmatter 也由渲染器写)
299
- - **legacy**:保存到 `.harness/changes/<change-name>/spec/<change-name>-design.md`
300
-
301
- legacy 设计文档 frontmatter 格式:
302
- ```yaml
303
- ---
304
- change-name: <change-name>
305
- created: YYYY-MM-DD HH:mm
306
- status: approved
307
- source: harness-plan
308
- ---
309
- ```
310
-
311
- > 如果 frontmatter 缺失,后续 run/test/review/submit/archive 不得依赖模型猜测 change-name。
297
+ 3. **保存设计文档**:不手写文档;把审批内容填进 `meta/plan-evidence-input.json` 的
298
+ `approval.content`,`plans/<change-name>-design.md` finalize 派生(frontmatter 也由渲染器写)。
312
299
 
313
300
  4. **初始化结构化事件**:由阶段 0.5 的 `harness_context.py bootstrap-plan` 一次完成——它生成合规的 `<plan-run-id>`(`plan_<uuid>` 形状,必须小写字母开头:v2 identity 规则,裸 UUID 有 10/16 概率数字开头被拒)、`<attempt>`(首次为 `1`)并追加 `phase.start`,重跑复用同一身份不重复写事件。finalizer 必须复用引导返回的 `runId`/`attempt`,否则 verify 会按生命周期身份 fail-closed。同一次 plan 尝试内不得改变身份。执行日志在 `phase.end` 时由完整事件流渲染,任何阶段都不得直接用 Write/Edit 维护该投影。
314
301
 
315
- 5. **保存计划文件**:
316
- - **v2**:不手写;任务填 `structured_input.tasks`、场景填 `structured_input.scenarios`,
317
- `plans/` 下四份 Markdown 全部由 finalize 派生
318
- - **legacy**:手写并保存到(含 YAML frontmatter,含 change-name)
319
- - `.harness/changes/<change-name>/plans/<change-name>-plan.md`(简洁任务表)
320
- - `.harness/changes/<change-name>/plans/<change-name>-implementation-detail.md`(自适应详细执行参考)
321
- - `.harness/changes/<change-name>/plans/<change-name>-test-scenarios.md`(测试场景表)
322
-
323
- legacy 计划文件 frontmatter 格式:
324
- ```yaml
325
- ---
326
- change-name: <change-name>
327
- plan-name: <change-name>
328
- created: YYYY-MM-DD HH:mm
329
- source-spec: ../spec/<change-name>-design.md
330
- implementation-detail: ./<change-name>-implementation-detail.md
331
- test-scenarios: ./<change-name>-test-scenarios.md
332
- status: approved
333
- ---
334
- ```
335
-
336
- > 如果 frontmatter 缺失,后续 run 不得依赖模型猜测 change-name 或关联文件路径。
302
+ 5. **保存计划文件**:不手写;任务填 `structured_input.tasks`、场景填 `structured_input.scenarios`,
303
+ `plans/` 下四份 Markdown 全部由 finalize 派生。
337
304
 
338
- 6. **等待用户确认后**,提示下一步:运行 `/harness-run`
305
+ 6. **等待用户确认后**,提示下一步:运行 `/harness-execute`
339
306
 
340
- > 后续 skill(run/test/review)启动时,会扫描 `.harness/changes/*/plans/`(排除 `.harness/archive/*/`)自动定位变更名目录,无需手动指定路径。同一时间最多一个未归档变更。
307
+ > 后续 skill(execute/review)启动时,会扫描 `.harness/changes/*/plans/`(排除 `.harness/archive/*/`)自动定位变更名目录,无需手动指定路径。同一时间最多一个未归档变更。
341
308
 
342
309
  ## 阶段 8:结束前产物完整性检查 ⚠️ 强制
343
310
 
344
- > **缺任一文件 → ❌FAIL,不得宣称 plan 完成。先认清走的是 v2 还是 legacy——两条路径的必需文件集不同,拿 legacy 的表去查 v2 会得出假失败。**
311
+ > **缺任一文件 → ❌FAIL,不得宣称 plan 完成。新 change 只走 v2;legacy 列仅用于读历史 change(0.3.0 起不再写入)。**
345
312
 
346
313
  | 文件 | v2 | legacy |
347
314
  |------|:---:|:---:|
@@ -358,11 +325,11 @@ status: approved
358
325
  | `.harness/changes/<change>/meta/scenario-manifest.json` | ✅ | ✅ |
359
326
  | `.harness/changes/<change>/meta/publication-journals/<op>.json`(committed) | ✅ | — |
360
327
  | `.harness/changes/<change>/meta/plan-events.ndjson` | ✅ | — |
361
- | `.harness/changes/<change>/meta/plan-finalization.json` | — | |
362
- | `.harness/changes/<change>/logs/execution-log.md` | — | |
328
+ | `.harness/changes/<change>/meta/plan-finalization.json` | — | ✅(只读) |
329
+ | `.harness/changes/<change>/logs/execution-log.md` | — | ✅(只读) |
363
330
  | `.harness/changes/<change>/events.ndjson` | ✅ | ✅ |
364
331
 
365
- legacy 的 `plan-finalization.json.files` 必须完整列出 design、plan、implementation-detail、test-scenarios、gate-policy、worktree 六项标准输入。`verify` 对缺项、重复项、越界路径以及 symlink/junction/reparse point 一律 fail-closed;不得通过删减收据文件集后重算哈希来绕过完整性检查。
332
+ 历史 change legacy `plan-finalization.json.files` 必须完整列出 design、plan、implementation-detail、test-scenarios、gate-policy、worktree 六项标准输入。`harness_plan_finalize.py verify`(唯一保留子命令)对缺项、重复项、越界路径以及 symlink/junction/reparse point 一律 fail-closed;不得通过删减收据文件集后重算哈希来绕过完整性检查。
366
333
 
367
334
  ### 两套分类模型的边界(别把它们当同一件事)
368
335
 
@@ -371,15 +338,17 @@ legacy 的 `plan-finalization.json.files` 必须完整列出 design、plan、imp
371
338
  | 取值 | `fast` / `standard` / `full` | `quick` / `standard` / `assurance` |
372
339
  | 写到哪 | `meta/gate-policy.json`(`schemaVersion:1`,camelCase) | `meta/plan-profile.json`(artifact 包装体,snake_case) |
373
340
  | 谁写 | `harness_gate.py classify`(阶段 0.5 由 bootstrap-plan 调起) | `hunter-harness plan finalize`(阶段 8 发布) |
374
- | 地位 | **门禁权威**:驱动 `requiredGateDag`、`requiredValidationsByPhase`,run/test 开门读它 | **派生视图**:供展示与下游只读消费,门禁不读 |
375
- | 输入 | 计划文档的「风险等级」正则 + capabilityGates 信号 | 自然输入里手填的 `risk_signals` |
341
+ | 地位 | **classify 工作副本**:0.5 分类 + 0.6 阶段计划落盘处;未发布的 change 由它驱动门禁 | **门禁权威**:发布时把工作副本的门禁字段(DAG/validations/tier/source)并入 content 并哈希绑定;`harness_paths.load_change_gate_policy` v2 优先、工作副本回退 |
342
+ | 输入 | 计划文档的「风险等级」正则 + capabilityGates 信号 | `risk_signals`(手填与命令推断取并集)+ 真实仓库 capabilities |
376
343
 
377
- **两者不共用文件名。** v2 发布对 `binding.ownership_paths` 逐个原子覆盖,若派生视图占用 `meta/gate-policy.json`,阶段 8 会把 classify 写的那份换成包装体,之后 `gate begin --phase run` 直接 `POLICY_LOAD_FAILED`——`harness_gate.effective_workflow_policy` 读 `schemaVersion` 拿不到就 raise。
344
+ **两者不共用文件名。** v2 发布对 `binding.ownership_paths` 逐个原子覆盖,若派生视图占用 `meta/gate-policy.json`,阶段 8 会把 classify 写的那份换成包装体,之后 `gate begin --phase execute` 直接 `POLICY_LOAD_FAILED`——`harness_gate.effective_workflow_policy` 读 `schemaVersion` 拿不到就 raise。
378
345
 
379
- **为什么派生视图目前不能当权威**(将来要接通就得先解决这两条):
346
+ **派生视图的两条前置缺陷已接通**(2026-08,接通 ≠ 门禁权威切换,权威仍是 Python gate-policy):
380
347
 
381
- 1. `plan evidence-pack` `risk_signals` **不做任何推断**——不读 git diff、不扫路径、不解析 frontmatter,值完全来自自然输入里手填的那个数组。拿它当门禁权威等于让 agent 自声明低风险来跳门禁。
382
- 2. 命令里的 `capabilities` 是写死的(`is_git:true, has_remote:true, uses_worktree:false`),用户在阶段 0.6 通过 `configure-plan` 选的阶段计划被完全忽略,`planned_phases` 退化成 mode 的纯函数。
348
+ 1. `risk_signals` 不再是纯手填。`plan evidence-pack` `structured_input.tasks[].affected_paths`(主源)与 `git status --porcelain --untracked-files=all`(次源)经 marker 表推断信号(与 `harness_gate.py` classify 同一张表),**与手填取并集**——推断是安全地板,手填不能删除推断项;逐条信号在 `pack.context.signal_provenance` 标注 `declared / inferred / declared+inferred`。
349
+ 2. `capabilities` 由命令真实探测:`is_git`(`rev-parse --is-inside-work-tree`)、`has_remote`(`git remote` 非空)、`uses_worktree`(`--git-dir` ≠ `--git-common-dir`,或 `machine.worktree_policy=required`);探针不可用(非 git 目录/无 git)则全 false 并标注 `provenance: "unavailable"`。阶段 0.6 `configure-plan` 落的 `meta/gate-policy.json` `plannedPhases` 也会被读取(顶层 `plannedPhases` 为字符串数组才视为权威形状,v2 包装体/坏 JSON 一律回退派生),可选阶段照它取舍,required 阶段缺失时保留并在 stdout 告警 `phase_set_required_retained`,来源标注 `phase_set_source: gate-policy | derived`。
350
+
351
+ **权威已切换(2026-08)**:`meta/plan-profile.json` 是门禁权威。发布时 `plan evidence-pack` 把工作副本的 `requiredGateDag`/`requiredValidationsByPhase`/`tier`/`source` 并入 v2 gate_policy content(白名单键,哈希绑定),`harness_paths.load_change_gate_policy` 在 gate/context/phase/archive 各处统一 v2 优先:快照完整(含 `mode`/`planned_phases`/`required_gate_dag`/`required_validations_by_phase`)即以它为准;0.2.92-era 的不完整快照与未发布的 change 回退工作副本。两者并存且 `plannedPhases`(canonical 去重后)不一致 → drift 报告,以 v2 为准——发布后改写工作副本本身就是异常。provenance 标注只进 stdout 与 `pack.context`,不进任何哈希身份字段。
383
352
 
384
353
  `meta/implementation-checkpoints.json` 的情况不同:v2 包装体里的 `content.foundation_gate` 信息是够的,所以门禁在**只读侧**解包(`checkpoint_status` 同时认 `checkpoints[]`、顶层 `foundationGate` 与 v2 包装体三种形状),不改文件名。注意写回路径(`gate checkpoint approve`)仍然操作原始文档——用归一化结构覆盖会破坏 v2 产物的哈希绑定。
385
354
 
@@ -412,7 +381,7 @@ npx hunter-harness plan finalize --input .harness/changes/<cn>/meta/plan-evidenc
412
381
  | `change_key` | `replace-with-change-name` | 真实 change-name(kebab-case:`^[a-z0-9]+(-[a-z0-9]+)*$`) |
413
382
  | `context.run_id` | `plan_replace-with-your-plan-run-id` | 阶段 0.5 生成、`phase.start` 已用的**同一个** plan-run-id |
414
383
  | `evidence_sources[].content_hash` | `sha256:deadbeef…` | 证据源内容的真实 sha256(校验器显式拒绝全 0) |
415
- | `risk_signals` | `["production_code"]` | classify 实际返回的信号 |
384
+ | `risk_signals` | `["production_code"]` | 可留空数组:命令按 affected_paths 与 git status 推断并与手填取并集;手填只增不减 |
416
385
 
417
386
  **容易踩的硬约束**(违反时命令会给 `field_path`,不必再猜):
418
387
 
@@ -462,36 +431,29 @@ npx hunter-harness plan finalize --input .harness/changes/<cn>/meta/plan-evidenc
462
431
  - **证据包**(`plan-evidence.json`)是命令推导的产物(trusted/publication/context/baseline),不得手改;任何字段变化必须改自然输入后重跑 evidence-pack。
463
432
  - **成功语义**:finalize exit 0 且 `code:"PLAN_FINALIZED"`。落盘事实 = 八 target(plans/*.md ×4 + meta/*.json ×4)+ `meta/publication-journals/<op>.json`(状态 committed)+ `meta/plan-events.ndjson`(artifact_published/phase_ended)。确定性门失败 exit 1 且 `code:"PLAN_FINALIZE_DETERMINISTIC_FAILED"` 附 findings——此时必须回到对应阶段修正规划内容,**不得**手改证据包或 staged 内容绕过。
464
433
  - **验证**:journal `state==="committed"` + 八 target 存在 + plan-events.ndjson 含两类终态事件;不得手工补写任何一项。
465
- - **legacy 收据**:过渡期(阶段 14 前)v2 路径不写 `plan-finalization.json`;消费方若仍读 legacy receipt,由兼容投影单独提供,不得反向要求 v2 双写。
466
- - **回退**:v2 自然输入不完整(如缺真实审批记录)时才允许走 Python finalizer(legacy 路径);同一次发布不得两条路径混用。
467
-
468
- ### 发布后修订计划(republish)
469
-
470
- 计划发布后又要改产物,是**正常且高频**的情况——用户看完计划补一个回归场景、修正一条任务、调整验收标准。这时不要与哈希守卫搏斗:
434
+ - **legacy 收据**:v2 路径不写 `plan-finalization.json`;消费方若读历史 legacy receipt,`harness_plan_finalize.py verify` 保持可读。0.3.0 起 v2 无 legacy 回退——自然输入不完整先补齐(例如补真实审批记录),不得走已删除的 Python finalizer。
471
435
 
472
- ```bash
473
- python <skills-root>/scripts/harness_plan_finalize.py republish \
474
- --change-dir ".harness/changes/<cn>" --staging-dir ".harness/changes/<cn>/runtime/plan-staging" \
475
- --change <cn> --run-id "plan_$(uuidgen)" --reason "<为什么要改>" --json
476
- ```
436
+ ### 发布后修订计划(v2 重跑流)
477
437
 
478
- 它一次性完成整套动作:校验 staging → 分配新 attempt(自动取已用最大值 +1)→ 追加 `phase.start` → 替换收据 → 重新派生 `scenario-manifest.json` 与 `implementation-checkpoints.json` → 写 `phase.end`。收据里保留 `supersedes`(被取代的 hash/runId/attempt)与 `amendReason`,修订全程可审计。
438
+ 计划发布后又要改产物,是**正常且高频**的情况——用户看完计划补一个回归场景、修正一条任务、调整验收标准。这时不要与哈希守卫搏斗,按三步重跑修订流:
479
439
 
480
- | 约束 | 说明 |
481
- |------|------|
482
- | `--reason` 必填 | 修订已发布计划必须留下理由,否则 `PLAN_AMEND_REASON_REQUIRED` |
483
- | `--run-id` 必须全新 | 复用旧 run-id 报 `PLAN_AMEND_RUN_ID_IN_USE`(attemptrun-id 一一绑定) |
484
- | 首次发布不能用它 | 无收据时报 `PLAN_NOT_FINALIZED`,首次发布走 `finalize` |
485
- | 内容没变则空操作 | 返回 `idempotent:true`,不写事件、不消耗 attempt |
440
+ 1. `meta/plan-evidence-input.json`(自然输入是唯一可编辑面)。
441
+ 2. 重跑 `npx hunter-harness plan evidence-pack --input <input> --output <pack>`:
442
+ - `context.attempt` 递增(1→2→…);
443
+ - `expected_baseline` `present`,带上次发布的 `manifest_hash``generation`
444
+ (读 `meta/plan-finalization-transactions/` 最新事务的对应字段)。
445
+ 3. 再跑 `npx hunter-harness plan finalize --input <pack>`。
486
446
 
487
- ⚠️ **绝对不要手改 `meta/scenario-manifest.json`**。它是 finalizer `test-scenarios.md` 派生的产物,手改会造成真实漂移:`verify` 报 `ARTIFACT_HASH_DRIFT`,run 阶段 `validate_plan_handoff` 也会记 WARN。`republish` 会重新派生它,这才是唯一正确入口。
447
+ attempt + 换收据 + 重新派生 `scenario-manifest.json` `implementation-checkpoints.json`
448
+ 一次完成;事务链天然保留历史(每次 finalize 一条事务记录),修订全程可审计。
449
+ (0.3.0 前 legacy change 用的 `republish` 子命令已删除;历史收据只读。)
488
450
 
489
- > 直接重跑 `finalize` 会报 `PLAN_FINALIZATION_HASH_CONFLICT`——这是守卫在防止发布后产物被悄悄改动,不是 bug。报错信息里已经给出 `republish` 命令行。
451
+ ⚠️ **绝对不要手改 `meta/scenario-manifest.json`**。它是 finalizer 从 `test-scenarios.md` 派生的产物,手改会造成真实漂移:`verify` `ARTIFACT_HASH_DRIFT`,execute 阶段 `validate_plan_handoff` 也会记 WARN。重跑修订流会重新派生它,这才是唯一正确入口。
490
452
 
491
453
  ### Plan 结束行为规则
492
454
 
493
- - **禁止询问执行模式**:Subagent-Driven / Inline Execution 属于 /harness-run 阶段
494
- - 最终输出只提示产出物路径和下一步 `/harness-run`
455
+ - **禁止询问执行模式**:Subagent-Driven / Inline Execution 属于 /harness-execute 阶段
456
+ - 最终输出只提示产出物路径和下一步 `/harness-execute`
495
457
  - `docs/superpowers/` 不得作为最终产物路径出现在输出中
496
458
 
497
459
  ## C2 升级口:跨 provider 评审(显式、非默认)
@@ -3,7 +3,7 @@ name: harness-pull
3
3
  description: 从 Hunter Platform 下拉配置/规则/架构/指令(及显式来源分支的分支文件恢复)。仅当用户显式调用
4
4
  /harness-pull 或明确说'从平台拉取/恢复'时使用;不得自动触发。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=874039c57f9d1bc4; overlay=java; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=c61bc81bd050fc63; overlay=java; agent=codex; do not edit -->
7
7
  # harness-pull — 从 Hunter Platform 下拉与恢复
8
8
 
9
9
  ## Purpose
@@ -3,7 +3,7 @@ name: harness-push
3
3
  description: 上传本地配置/规则/架构/指令(及显式归档)到 Hunter Platform。仅当用户显式调用 /harness-push
4
4
  或明确说'上传到平台'时使用;不得因存在本地修改就自动触发。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=874039c57f9d1bc4; overlay=java; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=c61bc81bd050fc63; overlay=java; agent=codex; do not edit -->
7
7
  # harness-push — 上传到 Hunter Platform
8
8
 
9
9
  ## Purpose
@@ -4,7 +4,7 @@ description: 6维度代码审查(架构/安全/规范/兼容/测试/性能)
4
4
  .harness/context-index.json)和测试场景表,在隔离上下文运行。仅当用户显式调用 /harness-review 时使用;不得在
5
5
  test 结束后自动接续执行。
6
6
  ---
7
- <!-- generated by harness_deploy.py; core=874039c57f9d1bc4; overlay=java; agent=codex; do not edit -->
7
+ <!-- generated by harness_deploy.py; core=c61bc81bd050fc63; overlay=java; agent=codex; do not edit -->
8
8
  # harness-review — 代码审查
9
9
 
10
10
  ## Purpose
@@ -15,7 +15,7 @@ description: 6维度代码审查(架构/安全/规范/兼容/测试/性能)
15
15
 
16
16
  仅当用户显式调用 `/harness-review` 时执行。test 阶段结束后**不自动**进入本阶段;用户口头提到"审查/review"而未调用本 skill 时,先确认是否走 Harness 审查阶段。
17
17
 
18
- **单阶段原则**:review 关门(报告 + fixback 产出)后必须停止并交还用户,仅提示下一步可执行 `/harness-run --fixback`(有待修项)或 `/harness-submit`;禁止自动接续执行。
18
+ **单阶段原则**:review 关门(报告 + fixback 产出)后必须停止并交还用户,仅提示下一步可执行 `/harness-execute --fixback`(有待修项)或 `/harness-submit`;禁止自动接续执行。
19
19
 
20
20
  ## Inputs
21
21
 
@@ -160,7 +160,7 @@ python <skills-root>/scripts/harness_events.py append --change-dir ".harness/cha
160
160
 
161
161
  > **Task 4 §6.1 写入契约**:普通 `append` = 加锁 -> 追加一行 -> fsync -> 解锁,**不 load 历史、不渲染**(O(1),跨进程锁 `events.ndjson.lock`,UUID 用完整 `uuid4().hex` 无需去重扫描)。仅 `--type phase.end` append 在追加成功后渲染一次 `execution-log.md`;显式 `harness_events.py render` 随时从完整 events 重建;`harness_archive.py finalize` 在 collect 前强制 render 一次。高频 command append 期间 log 可能滞后,phase 边界保持最新。
162
162
 
163
- 每个阶段的 `phase.start` 与对应 `phase.end` 必须复用同一 `--run-id` / `--attempt`;阶段结束必须写 `--status OK|WARN|FAIL|BLOCKED`。重试同一阶段时生成新的 run-id 并增加 `--attempt <n>`,不得覆盖或伪装成一次执行。**`attempt` 按 phase 全局递增,不是按 run-id**:一个 run-id 只绑定一个 attempt,重试必须「新 run-id + 下一个 attempt」两者同时换,只换其一会撞 `EVENT_ATTEMPT_CONFLICT` 或 `PHASE_ALREADY_CLOSED`。已发布的 plan `harness_plan_finalize.py republish` 自动分配两者。
163
+ 每个阶段的 `phase.start` 与对应 `phase.end` 必须复用同一 `--run-id` / `--attempt`;阶段结束必须写 `--status OK|WARN|FAIL|BLOCKED`。重试同一阶段时生成新的 run-id 并增加 `--attempt <n>`,不得覆盖或伪装成一次执行。**`attempt` 按 phase 全局递增,不是按 run-id**:一个 run-id 只绑定一个 attempt,重试必须「新 run-id + 下一个 attempt」两者同时换,只换其一会撞 `EVENT_ATTEMPT_CONFLICT` 或 `PHASE_ALREADY_CLOSED`。已发布 plan 的修订通过重跑 `plan evidence-pack` + `plan finalize` 分配新 attempt(`harness_plan_finalize.py republish` 已于 0.3.0 移除)。
164
164
 
165
165
  阶段跑得久(plan/run 常见)时用 `harness_context.py renew --project . --change <cn> --executor <tool>` 续租;租约到期本身不再阻断 `close`(同一 owner 的过期租约不构成冲突,收据里记 `leaseLapsed`),但续租能让 `view` 的状态如实反映在跑。跨工具继续执行时写 `--executor-tool <codex|claude-code|codebuddy|cursor>`,并在接棒事件写 `--handoff-from-tool` / `--handoff-reason`;也可由 `HUNTER_HARNESS_TOOL/AGENT/MODEL/RUN_ID` 环境变量统一注入。
166
166
  > 片段:logging · phase=`review` · 事件:phase/decision/verification/issue/artifact
@@ -34,7 +34,7 @@ description: harness-review 的原生修复反馈协议。内化 receiving-code-
34
34
  | 风险说明 | 说明为什么值得处理 |
35
35
  | 推荐修复 | 可执行的修复方向,不写空泛建议 |
36
36
  | 验证方式 | 构建、测试、场景编号或人工确认方式 |
37
- | 修复动作 | `code` / `manual` / `workflow`;只有 `code` 会进入 `/harness-run --fixback` |
37
+ | 修复动作 | `code` / `manual` / `workflow`;只有 `code` 会进入 `/harness-execute --fixback` |
38
38
  | submit 影响 | 默认 advisory;仅 strict-review-gate=true 时标记阻塞 |
39
39
 
40
40
  如果没有 RED/YELLOW,必须明确写:
@@ -3,9 +3,15 @@ name: harness-run
3
3
  description: 按变更簇执行 TDD 编码循环(RED→GREEN→REFACTOR→编译验证),逐变更簇实现计划中的任务。仅当用户显式调用
4
4
  /harness-run 时使用;不得因用户提到编码/实现就自动触发,也不得被其他阶段 skill 自动接续。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=874039c57f9d1bc4; overlay=java; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=c61bc81bd050fc63; overlay=java; agent=codex; do not edit -->
7
7
  # harness-run — 需求编码
8
8
 
9
+ > **2026-08 阶段合并**:原 `run`(编码)与 `test`(验证)合并为单一 `execute` 阶段,
10
+ > 统一入口为 **`/harness-execute`**(`harness/harness-execute/SKILL.md`)。本 skill 作为
11
+ > 别名保留,frontmatter `name` 不变、内容照旧可用;门禁入参 `--phase run` 经
12
+ > `LEGACY_PHASE_ALIASES` 归一为 execute。别名至少保留一个 minor 版本,退役时间见
13
+ > `docs/harness-improvement-roadmap/`。下文出现的阶段名 `run`/`test` 均按别名解析。
14
+
9
15
  ## Purpose
10
16
 
11
17
  基于 plan + test-scenarios,按**变更簇**执行 TDD(RED→GREEN→REFACTOR→构建验证),写入 verification-ledger。负责 worktree 创建/切换(见 worktree-gate)。
@@ -194,7 +200,7 @@ python <skills-root>/scripts/harness_events.py append --change-dir ".harness/cha
194
200
 
195
201
  > **Task 4 §6.1 写入契约**:普通 `append` = 加锁 -> 追加一行 -> fsync -> 解锁,**不 load 历史、不渲染**(O(1),跨进程锁 `events.ndjson.lock`,UUID 用完整 `uuid4().hex` 无需去重扫描)。仅 `--type phase.end` append 在追加成功后渲染一次 `execution-log.md`;显式 `harness_events.py render` 随时从完整 events 重建;`harness_archive.py finalize` 在 collect 前强制 render 一次。高频 command append 期间 log 可能滞后,phase 边界保持最新。
196
202
 
197
- 每个阶段的 `phase.start` 与对应 `phase.end` 必须复用同一 `--run-id` / `--attempt`;阶段结束必须写 `--status OK|WARN|FAIL|BLOCKED`。重试同一阶段时生成新的 run-id 并增加 `--attempt <n>`,不得覆盖或伪装成一次执行。**`attempt` 按 phase 全局递增,不是按 run-id**:一个 run-id 只绑定一个 attempt,重试必须「新 run-id + 下一个 attempt」两者同时换,只换其一会撞 `EVENT_ATTEMPT_CONFLICT` 或 `PHASE_ALREADY_CLOSED`。已发布的 plan `harness_plan_finalize.py republish` 自动分配两者。
203
+ 每个阶段的 `phase.start` 与对应 `phase.end` 必须复用同一 `--run-id` / `--attempt`;阶段结束必须写 `--status OK|WARN|FAIL|BLOCKED`。重试同一阶段时生成新的 run-id 并增加 `--attempt <n>`,不得覆盖或伪装成一次执行。**`attempt` 按 phase 全局递增,不是按 run-id**:一个 run-id 只绑定一个 attempt,重试必须「新 run-id + 下一个 attempt」两者同时换,只换其一会撞 `EVENT_ATTEMPT_CONFLICT` 或 `PHASE_ALREADY_CLOSED`。已发布 plan 的修订通过重跑 `plan evidence-pack` + `plan finalize` 分配新 attempt(`harness_plan_finalize.py republish` 已于 0.3.0 移除)。
198
204
 
199
205
  阶段跑得久(plan/run 常见)时用 `harness_context.py renew --project . --change <cn> --executor <tool>` 续租;租约到期本身不再阻断 `close`(同一 owner 的过期租约不构成冲突,收据里记 `leaseLapsed`),但续租能让 `view` 的状态如实反映在跑。跨工具继续执行时写 `--executor-tool <codex|claude-code|codebuddy|cursor>`,并在接棒事件写 `--handoff-from-tool` / `--handoff-reason`;也可由 `HUNTER_HARNESS_TOOL/AGENT/MODEL/RUN_ID` 环境变量统一注入。
200
206
  > 片段:logging · phase=`run`
@@ -3,7 +3,7 @@ name: harness-submit
3
3
  description: 最终提交封装:验证→中文 commit→提交/推送;worktree 模式含 --no-ff 合并回主分支。仅当用户显式调用
4
4
  /harness-submit(或 /harness-merge 重入合并段)时使用;用户口头说'提交/commit/push'时必须先确认,不得自动触发。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=874039c57f9d1bc4; overlay=java; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=c61bc81bd050fc63; overlay=java; agent=codex; do not edit -->
7
7
  # harness-submit — 最终提交(含 worktree 合并)
8
8
 
9
9
  ## Purpose
@@ -183,7 +183,7 @@ python <skills-root>/scripts/harness_events.py append --change-dir ".harness/cha
183
183
 
184
184
  > **Task 4 §6.1 写入契约**:普通 `append` = 加锁 -> 追加一行 -> fsync -> 解锁,**不 load 历史、不渲染**(O(1),跨进程锁 `events.ndjson.lock`,UUID 用完整 `uuid4().hex` 无需去重扫描)。仅 `--type phase.end` append 在追加成功后渲染一次 `execution-log.md`;显式 `harness_events.py render` 随时从完整 events 重建;`harness_archive.py finalize` 在 collect 前强制 render 一次。高频 command append 期间 log 可能滞后,phase 边界保持最新。
185
185
 
186
- 每个阶段的 `phase.start` 与对应 `phase.end` 必须复用同一 `--run-id` / `--attempt`;阶段结束必须写 `--status OK|WARN|FAIL|BLOCKED`。重试同一阶段时生成新的 run-id 并增加 `--attempt <n>`,不得覆盖或伪装成一次执行。**`attempt` 按 phase 全局递增,不是按 run-id**:一个 run-id 只绑定一个 attempt,重试必须「新 run-id + 下一个 attempt」两者同时换,只换其一会撞 `EVENT_ATTEMPT_CONFLICT` 或 `PHASE_ALREADY_CLOSED`。已发布的 plan `harness_plan_finalize.py republish` 自动分配两者。
186
+ 每个阶段的 `phase.start` 与对应 `phase.end` 必须复用同一 `--run-id` / `--attempt`;阶段结束必须写 `--status OK|WARN|FAIL|BLOCKED`。重试同一阶段时生成新的 run-id 并增加 `--attempt <n>`,不得覆盖或伪装成一次执行。**`attempt` 按 phase 全局递增,不是按 run-id**:一个 run-id 只绑定一个 attempt,重试必须「新 run-id + 下一个 attempt」两者同时换,只换其一会撞 `EVENT_ATTEMPT_CONFLICT` 或 `PHASE_ALREADY_CLOSED`。已发布 plan 的修订通过重跑 `plan evidence-pack` + `plan finalize` 分配新 attempt(`harness_plan_finalize.py republish` 已于 0.3.0 移除)。
187
187
 
188
188
  阶段跑得久(plan/run 常见)时用 `harness_context.py renew --project . --change <cn> --executor <tool>` 续租;租约到期本身不再阻断 `close`(同一 owner 的过期租约不构成冲突,收据里记 `leaseLapsed`),但续租能让 `view` 的状态如实反映在跑。跨工具继续执行时写 `--executor-tool <codex|claude-code|codebuddy|cursor>`,并在接棒事件写 `--handoff-from-tool` / `--handoff-reason`;也可由 `HUNTER_HARNESS_TOOL/AGENT/MODEL/RUN_ID` 环境变量统一注入。
189
189
  > 片段:logging · phase=`submit`/`merge`
@@ -117,7 +117,7 @@ python <skills-root>/scripts/harness_ledger.py can-reuse `
117
117
 
118
118
  **review 报告**(参考性):如果 `.harness/changes/<change-name>/reports/review/review-report-*.md` 存在(旧路径 `reviews/` 兼容),可读取并展示摘要(如“review 报告:RED 高风险建议 N 个,YELLOW 中低风险建议 M 个,仅供参考”),但不得因 review 结果阻塞提交。
119
119
 
120
- **review fixback**(参考性):如果 `.harness/changes/<change-name>/reports/review/fixback-*.md` 存在,展示最新 fixback 摘要并提示“可回到 `/harness-run --fixback` 处理”;除非 `review.strict-review-gate=true` 且存在 RED,否则不得阻塞提交。
120
+ **review fixback**(参考性):如果 `.harness/changes/<change-name>/reports/review/fixback-*.md` 存在,展示最新 fixback 摘要并提示“可回到 `/harness-execute --fixback` 处理”;除非 `review.strict-review-gate=true` 且存在 RED,否则不得阻塞提交。
121
121
 
122
122
  ## 步骤 3:.gitignore 检查 + 暂存业务文件 ⚠️ 强制阻断
123
123
 
@@ -4,7 +4,7 @@ description: Use when the user asks to synchronize, refresh, or validate Harness
4
4
  metadata, adapters, remote knowledge ownership, instruction entrypoints,
5
5
  config origins, or CodeGraph status.
6
6
  ---
7
- <!-- generated by harness_deploy.py; core=874039c57f9d1bc4; overlay=java; agent=codex; do not edit -->
7
+ <!-- generated by harness_deploy.py; core=c61bc81bd050fc63; overlay=java; agent=codex; do not edit -->
8
8
  # harness-sync
9
9
 
10
10
  ## Purpose
@@ -3,9 +3,18 @@ name: harness-test
3
3
  description: 测试执行:读取场景表,执行单元测试+API接口测试+数据兼容验证,输出测试报告。仅当用户显式调用 /harness-test
4
4
  时使用;不得在 run 结束后自动接续执行。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=874039c57f9d1bc4; overlay=java; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=c61bc81bd050fc63; overlay=java; agent=codex; do not edit -->
7
7
  # harness-test — 测试执行
8
8
 
9
+ > **2026-08 阶段合并**:原 `run`(编码)与 `test`(验证)合并为单一 `execute` 阶段,
10
+ > 统一入口为 **`/harness-execute`**(`harness/harness-execute/SKILL.md`)。本 skill 作为
11
+ > 别名保留,frontmatter `name` 不变、内容照旧可用;门禁入参 `--phase test` 经
12
+ > `LEGACY_PHASE_ALIASES` 归一为 execute。别名至少保留一个 minor 版本,退役时间见
13
+ > `docs/harness-improvement-roadmap/`。下文出现的阶段名 `run`/`test` 均按别名解析。
14
+ >
15
+ > 合并语义注意:execute 关门时 C9 场景覆盖要求全部 `ownerPhase=execute` 场景有通过
16
+ > receipt(包括本属 test 的接口/兼容场景);`ownerPhase=review`/`submit` 仍按计划顺延。
17
+
9
18
  ## Purpose
10
19
 
11
20
  读取测试场景表,逐条执行单元测试和接口测试,验证代码变更的正确性,输出测试报告。
@@ -249,7 +258,7 @@ python <skills-root>/scripts/harness_events.py append --change-dir ".harness/cha
249
258
 
250
259
  > **Task 4 §6.1 写入契约**:普通 `append` = 加锁 -> 追加一行 -> fsync -> 解锁,**不 load 历史、不渲染**(O(1),跨进程锁 `events.ndjson.lock`,UUID 用完整 `uuid4().hex` 无需去重扫描)。仅 `--type phase.end` append 在追加成功后渲染一次 `execution-log.md`;显式 `harness_events.py render` 随时从完整 events 重建;`harness_archive.py finalize` 在 collect 前强制 render 一次。高频 command append 期间 log 可能滞后,phase 边界保持最新。
251
260
 
252
- 每个阶段的 `phase.start` 与对应 `phase.end` 必须复用同一 `--run-id` / `--attempt`;阶段结束必须写 `--status OK|WARN|FAIL|BLOCKED`。重试同一阶段时生成新的 run-id 并增加 `--attempt <n>`,不得覆盖或伪装成一次执行。**`attempt` 按 phase 全局递增,不是按 run-id**:一个 run-id 只绑定一个 attempt,重试必须「新 run-id + 下一个 attempt」两者同时换,只换其一会撞 `EVENT_ATTEMPT_CONFLICT` 或 `PHASE_ALREADY_CLOSED`。已发布的 plan `harness_plan_finalize.py republish` 自动分配两者。
261
+ 每个阶段的 `phase.start` 与对应 `phase.end` 必须复用同一 `--run-id` / `--attempt`;阶段结束必须写 `--status OK|WARN|FAIL|BLOCKED`。重试同一阶段时生成新的 run-id 并增加 `--attempt <n>`,不得覆盖或伪装成一次执行。**`attempt` 按 phase 全局递增,不是按 run-id**:一个 run-id 只绑定一个 attempt,重试必须「新 run-id + 下一个 attempt」两者同时换,只换其一会撞 `EVENT_ATTEMPT_CONFLICT` 或 `PHASE_ALREADY_CLOSED`。已发布 plan 的修订通过重跑 `plan evidence-pack` + `plan finalize` 分配新 attempt(`harness_plan_finalize.py republish` 已于 0.3.0 移除)。
253
262
 
254
263
  阶段跑得久(plan/run 常见)时用 `harness_context.py renew --project . --change <cn> --executor <tool>` 续租;租约到期本身不再阻断 `close`(同一 owner 的过期租约不构成冲突,收据里记 `leaseLapsed`),但续租能让 `view` 的状态如实反映在跑。跨工具继续执行时写 `--executor-tool <codex|claude-code|codebuddy|cursor>`,并在接棒事件写 `--handoff-from-tool` / `--handoff-reason`;也可由 `HUNTER_HARNESS_TOOL/AGENT/MODEL/RUN_ID` 环境变量统一注入。
255
264
  > 片段:logging · phase=`test` · 事件:phase/command/verification/decision/issue/artifact