@hunter-harness/workflow-harness 0.2.85 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) 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 -9
  9. package/harness/bundles/general/claude-code/harness-plan/checklist.md +19 -91
  10. package/harness/bundles/general/claude-code/harness-plan/protocols.md +3 -1
  11. package/harness/bundles/general/claude-code/harness-plan/reference.md +74 -83
  12. package/harness/bundles/general/claude-code/harness-pull/SKILL.md +1 -1
  13. package/harness/bundles/general/claude-code/harness-push/SKILL.md +1 -1
  14. package/harness/bundles/general/claude-code/harness-review/SKILL.md +3 -3
  15. package/harness/bundles/general/claude-code/harness-review/protocols.md +1 -1
  16. package/harness/bundles/general/claude-code/harness-run/SKILL.md +13 -5
  17. package/harness/bundles/general/claude-code/harness-submit/SKILL.md +2 -2
  18. package/harness/bundles/general/claude-code/harness-submit/checklist.md +1 -1
  19. package/harness/bundles/general/claude-code/harness-sync/SKILL.md +1 -1
  20. package/harness/bundles/general/claude-code/harness-test/SKILL.md +11 -2
  21. package/harness/bundles/general/claude-code/scripts/harness_adoption_metrics.py +391 -0
  22. package/harness/bundles/general/claude-code/scripts/harness_archive.py +23 -14
  23. package/harness/bundles/general/claude-code/scripts/harness_change.py +25 -7
  24. package/harness/bundles/general/claude-code/scripts/harness_context.py +154 -60
  25. package/harness/bundles/general/claude-code/scripts/harness_events.py +1 -1
  26. package/harness/bundles/general/claude-code/scripts/harness_events_sync.py +1 -0
  27. package/harness/bundles/general/claude-code/scripts/harness_fixback.py +14 -10
  28. package/harness/bundles/general/claude-code/scripts/harness_gate.py +293 -90
  29. package/harness/bundles/general/claude-code/scripts/harness_ledger.py +47 -2
  30. package/harness/bundles/general/claude-code/scripts/harness_paths.py +175 -0
  31. package/harness/bundles/general/claude-code/scripts/harness_phase.py +65 -23
  32. package/harness/bundles/general/claude-code/scripts/harness_plan_finalize.py +140 -874
  33. package/harness/bundles/general/claude-code/scripts/harness_review.py +25 -4
  34. package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
  35. package/harness/bundles/general/codebuddy/contracts/workflow-policy.json +46 -17
  36. package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +2 -2
  37. package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +2 -2
  38. package/harness/bundles/general/codebuddy/harness-execute/SKILL.md +170 -0
  39. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +2 -2
  40. package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +2 -2
  41. package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +10 -9
  42. package/harness/bundles/general/codebuddy/harness-plan/checklist.md +19 -91
  43. package/harness/bundles/general/codebuddy/harness-plan/protocols.md +3 -1
  44. package/harness/bundles/general/codebuddy/harness-plan/reference.md +74 -83
  45. package/harness/bundles/general/codebuddy/harness-pull/SKILL.md +1 -1
  46. package/harness/bundles/general/codebuddy/harness-push/SKILL.md +1 -1
  47. package/harness/bundles/general/codebuddy/harness-review/SKILL.md +3 -3
  48. package/harness/bundles/general/codebuddy/harness-review/protocols.md +1 -1
  49. package/harness/bundles/general/codebuddy/harness-run/SKILL.md +13 -5
  50. package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +2 -2
  51. package/harness/bundles/general/codebuddy/harness-submit/checklist.md +1 -1
  52. package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +1 -1
  53. package/harness/bundles/general/codebuddy/harness-test/SKILL.md +11 -2
  54. package/harness/bundles/general/codebuddy/scripts/harness_adoption_metrics.py +391 -0
  55. package/harness/bundles/general/codebuddy/scripts/harness_archive.py +23 -14
  56. package/harness/bundles/general/codebuddy/scripts/harness_change.py +25 -7
  57. package/harness/bundles/general/codebuddy/scripts/harness_context.py +154 -60
  58. package/harness/bundles/general/codebuddy/scripts/harness_events.py +1 -1
  59. package/harness/bundles/general/codebuddy/scripts/harness_events_sync.py +1 -0
  60. package/harness/bundles/general/codebuddy/scripts/harness_fixback.py +14 -10
  61. package/harness/bundles/general/codebuddy/scripts/harness_gate.py +293 -90
  62. package/harness/bundles/general/codebuddy/scripts/harness_ledger.py +47 -2
  63. package/harness/bundles/general/codebuddy/scripts/harness_paths.py +175 -0
  64. package/harness/bundles/general/codebuddy/scripts/harness_phase.py +65 -23
  65. package/harness/bundles/general/codebuddy/scripts/harness_plan_finalize.py +140 -874
  66. package/harness/bundles/general/codebuddy/scripts/harness_review.py +25 -4
  67. package/harness/bundles/general/codex/.harness-build.json +1 -1
  68. package/harness/bundles/general/codex/contracts/workflow-policy.json +46 -17
  69. package/harness/bundles/general/codex/harness-archive/SKILL.md +2 -2
  70. package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +2 -2
  71. package/harness/bundles/general/codex/harness-execute/SKILL.md +170 -0
  72. package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +2 -2
  73. package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +2 -2
  74. package/harness/bundles/general/codex/harness-plan/SKILL.md +10 -9
  75. package/harness/bundles/general/codex/harness-plan/checklist.md +19 -91
  76. package/harness/bundles/general/codex/harness-plan/protocols.md +3 -1
  77. package/harness/bundles/general/codex/harness-plan/reference.md +74 -83
  78. package/harness/bundles/general/codex/harness-pull/SKILL.md +1 -1
  79. package/harness/bundles/general/codex/harness-push/SKILL.md +1 -1
  80. package/harness/bundles/general/codex/harness-review/SKILL.md +3 -3
  81. package/harness/bundles/general/codex/harness-review/protocols.md +1 -1
  82. package/harness/bundles/general/codex/harness-run/SKILL.md +13 -5
  83. package/harness/bundles/general/codex/harness-submit/SKILL.md +2 -2
  84. package/harness/bundles/general/codex/harness-submit/checklist.md +1 -1
  85. package/harness/bundles/general/codex/harness-sync/SKILL.md +1 -1
  86. package/harness/bundles/general/codex/harness-test/SKILL.md +11 -2
  87. package/harness/bundles/general/codex/scripts/harness_adoption_metrics.py +391 -0
  88. package/harness/bundles/general/codex/scripts/harness_archive.py +23 -14
  89. package/harness/bundles/general/codex/scripts/harness_change.py +25 -7
  90. package/harness/bundles/general/codex/scripts/harness_context.py +154 -60
  91. package/harness/bundles/general/codex/scripts/harness_events.py +1 -1
  92. package/harness/bundles/general/codex/scripts/harness_events_sync.py +1 -0
  93. package/harness/bundles/general/codex/scripts/harness_fixback.py +14 -10
  94. package/harness/bundles/general/codex/scripts/harness_gate.py +293 -90
  95. package/harness/bundles/general/codex/scripts/harness_ledger.py +47 -2
  96. package/harness/bundles/general/codex/scripts/harness_paths.py +175 -0
  97. package/harness/bundles/general/codex/scripts/harness_phase.py +65 -23
  98. package/harness/bundles/general/codex/scripts/harness_plan_finalize.py +140 -874
  99. package/harness/bundles/general/codex/scripts/harness_review.py +25 -4
  100. package/harness/bundles/general/cursor/.harness-build.json +1 -1
  101. package/harness/bundles/general/cursor/contracts/workflow-policy.json +46 -17
  102. package/harness/bundles/general/cursor/harness-archive/SKILL.md +2 -2
  103. package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +2 -2
  104. package/harness/bundles/general/cursor/harness-execute/SKILL.md +170 -0
  105. package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +2 -2
  106. package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +2 -2
  107. package/harness/bundles/general/cursor/harness-plan/SKILL.md +10 -9
  108. package/harness/bundles/general/cursor/harness-plan/checklist.md +19 -91
  109. package/harness/bundles/general/cursor/harness-plan/protocols.md +3 -1
  110. package/harness/bundles/general/cursor/harness-plan/reference.md +74 -83
  111. package/harness/bundles/general/cursor/harness-pull/SKILL.md +1 -1
  112. package/harness/bundles/general/cursor/harness-push/SKILL.md +1 -1
  113. package/harness/bundles/general/cursor/harness-review/SKILL.md +3 -3
  114. package/harness/bundles/general/cursor/harness-review/protocols.md +1 -1
  115. package/harness/bundles/general/cursor/harness-run/SKILL.md +13 -5
  116. package/harness/bundles/general/cursor/harness-submit/SKILL.md +2 -2
  117. package/harness/bundles/general/cursor/harness-submit/checklist.md +1 -1
  118. package/harness/bundles/general/cursor/harness-sync/SKILL.md +1 -1
  119. package/harness/bundles/general/cursor/harness-test/SKILL.md +11 -2
  120. package/harness/bundles/general/cursor/scripts/harness_adoption_metrics.py +391 -0
  121. package/harness/bundles/general/cursor/scripts/harness_archive.py +23 -14
  122. package/harness/bundles/general/cursor/scripts/harness_change.py +25 -7
  123. package/harness/bundles/general/cursor/scripts/harness_context.py +154 -60
  124. package/harness/bundles/general/cursor/scripts/harness_events.py +1 -1
  125. package/harness/bundles/general/cursor/scripts/harness_events_sync.py +1 -0
  126. package/harness/bundles/general/cursor/scripts/harness_fixback.py +14 -10
  127. package/harness/bundles/general/cursor/scripts/harness_gate.py +293 -90
  128. package/harness/bundles/general/cursor/scripts/harness_ledger.py +47 -2
  129. package/harness/bundles/general/cursor/scripts/harness_paths.py +175 -0
  130. package/harness/bundles/general/cursor/scripts/harness_phase.py +65 -23
  131. package/harness/bundles/general/cursor/scripts/harness_plan_finalize.py +140 -874
  132. package/harness/bundles/general/cursor/scripts/harness_review.py +25 -4
  133. package/harness/bundles/java/claude-code/.harness-build.json +1 -1
  134. package/harness/bundles/java/claude-code/contracts/workflow-policy.json +46 -17
  135. package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +2 -2
  136. package/harness/bundles/java/claude-code/harness-archive/SKILL.md +2 -2
  137. package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +2 -2
  138. package/harness/bundles/java/claude-code/harness-execute/SKILL.md +189 -0
  139. package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +2 -2
  140. package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +2 -2
  141. package/harness/bundles/java/claude-code/harness-package/SKILL.md +2 -2
  142. package/harness/bundles/java/claude-code/harness-plan/SKILL.md +10 -9
  143. package/harness/bundles/java/claude-code/harness-plan/checklist.md +19 -91
  144. package/harness/bundles/java/claude-code/harness-plan/protocols.md +3 -1
  145. package/harness/bundles/java/claude-code/harness-plan/reference.md +74 -83
  146. package/harness/bundles/java/claude-code/harness-pull/SKILL.md +1 -1
  147. package/harness/bundles/java/claude-code/harness-push/SKILL.md +1 -1
  148. package/harness/bundles/java/claude-code/harness-review/SKILL.md +3 -3
  149. package/harness/bundles/java/claude-code/harness-review/protocols.md +1 -1
  150. package/harness/bundles/java/claude-code/harness-run/SKILL.md +13 -5
  151. package/harness/bundles/java/claude-code/harness-submit/SKILL.md +2 -2
  152. package/harness/bundles/java/claude-code/harness-submit/checklist.md +1 -1
  153. package/harness/bundles/java/claude-code/harness-sync/SKILL.md +1 -1
  154. package/harness/bundles/java/claude-code/harness-test/SKILL.md +11 -2
  155. package/harness/bundles/java/claude-code/scripts/harness_adoption_metrics.py +391 -0
  156. package/harness/bundles/java/claude-code/scripts/harness_archive.py +23 -14
  157. package/harness/bundles/java/claude-code/scripts/harness_change.py +25 -7
  158. package/harness/bundles/java/claude-code/scripts/harness_context.py +154 -60
  159. package/harness/bundles/java/claude-code/scripts/harness_events.py +1 -1
  160. package/harness/bundles/java/claude-code/scripts/harness_events_sync.py +1 -0
  161. package/harness/bundles/java/claude-code/scripts/harness_fixback.py +14 -10
  162. package/harness/bundles/java/claude-code/scripts/harness_gate.py +293 -90
  163. package/harness/bundles/java/claude-code/scripts/harness_ledger.py +47 -2
  164. package/harness/bundles/java/claude-code/scripts/harness_paths.py +175 -0
  165. package/harness/bundles/java/claude-code/scripts/harness_phase.py +65 -23
  166. package/harness/bundles/java/claude-code/scripts/harness_plan_finalize.py +140 -874
  167. package/harness/bundles/java/claude-code/scripts/harness_review.py +25 -4
  168. package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
  169. package/harness/bundles/java/codebuddy/contracts/workflow-policy.json +46 -17
  170. package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +2 -2
  171. package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +2 -2
  172. package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +2 -2
  173. package/harness/bundles/java/codebuddy/harness-execute/SKILL.md +170 -0
  174. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +2 -2
  175. package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +2 -2
  176. package/harness/bundles/java/codebuddy/harness-package/SKILL.md +2 -2
  177. package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +10 -9
  178. package/harness/bundles/java/codebuddy/harness-plan/checklist.md +19 -91
  179. package/harness/bundles/java/codebuddy/harness-plan/protocols.md +3 -1
  180. package/harness/bundles/java/codebuddy/harness-plan/reference.md +74 -83
  181. package/harness/bundles/java/codebuddy/harness-pull/SKILL.md +1 -1
  182. package/harness/bundles/java/codebuddy/harness-push/SKILL.md +1 -1
  183. package/harness/bundles/java/codebuddy/harness-review/SKILL.md +3 -3
  184. package/harness/bundles/java/codebuddy/harness-review/protocols.md +1 -1
  185. package/harness/bundles/java/codebuddy/harness-run/SKILL.md +13 -5
  186. package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +2 -2
  187. package/harness/bundles/java/codebuddy/harness-submit/checklist.md +1 -1
  188. package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +1 -1
  189. package/harness/bundles/java/codebuddy/harness-test/SKILL.md +11 -2
  190. package/harness/bundles/java/codebuddy/scripts/harness_adoption_metrics.py +391 -0
  191. package/harness/bundles/java/codebuddy/scripts/harness_archive.py +23 -14
  192. package/harness/bundles/java/codebuddy/scripts/harness_change.py +25 -7
  193. package/harness/bundles/java/codebuddy/scripts/harness_context.py +154 -60
  194. package/harness/bundles/java/codebuddy/scripts/harness_events.py +1 -1
  195. package/harness/bundles/java/codebuddy/scripts/harness_events_sync.py +1 -0
  196. package/harness/bundles/java/codebuddy/scripts/harness_fixback.py +14 -10
  197. package/harness/bundles/java/codebuddy/scripts/harness_gate.py +293 -90
  198. package/harness/bundles/java/codebuddy/scripts/harness_ledger.py +47 -2
  199. package/harness/bundles/java/codebuddy/scripts/harness_paths.py +175 -0
  200. package/harness/bundles/java/codebuddy/scripts/harness_phase.py +65 -23
  201. package/harness/bundles/java/codebuddy/scripts/harness_plan_finalize.py +140 -874
  202. package/harness/bundles/java/codebuddy/scripts/harness_review.py +25 -4
  203. package/harness/bundles/java/codex/.harness-build.json +1 -1
  204. package/harness/bundles/java/codex/contracts/workflow-policy.json +46 -17
  205. package/harness/bundles/java/codex/harness-apidoc/SKILL.md +2 -2
  206. package/harness/bundles/java/codex/harness-archive/SKILL.md +2 -2
  207. package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +2 -2
  208. package/harness/bundles/java/codex/harness-execute/SKILL.md +170 -0
  209. package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +2 -2
  210. package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +2 -2
  211. package/harness/bundles/java/codex/harness-package/SKILL.md +2 -2
  212. package/harness/bundles/java/codex/harness-plan/SKILL.md +10 -9
  213. package/harness/bundles/java/codex/harness-plan/checklist.md +19 -91
  214. package/harness/bundles/java/codex/harness-plan/protocols.md +3 -1
  215. package/harness/bundles/java/codex/harness-plan/reference.md +74 -83
  216. package/harness/bundles/java/codex/harness-pull/SKILL.md +1 -1
  217. package/harness/bundles/java/codex/harness-push/SKILL.md +1 -1
  218. package/harness/bundles/java/codex/harness-review/SKILL.md +3 -3
  219. package/harness/bundles/java/codex/harness-review/protocols.md +1 -1
  220. package/harness/bundles/java/codex/harness-run/SKILL.md +13 -5
  221. package/harness/bundles/java/codex/harness-submit/SKILL.md +2 -2
  222. package/harness/bundles/java/codex/harness-submit/checklist.md +1 -1
  223. package/harness/bundles/java/codex/harness-sync/SKILL.md +1 -1
  224. package/harness/bundles/java/codex/harness-test/SKILL.md +11 -2
  225. package/harness/bundles/java/codex/scripts/harness_adoption_metrics.py +391 -0
  226. package/harness/bundles/java/codex/scripts/harness_archive.py +23 -14
  227. package/harness/bundles/java/codex/scripts/harness_change.py +25 -7
  228. package/harness/bundles/java/codex/scripts/harness_context.py +154 -60
  229. package/harness/bundles/java/codex/scripts/harness_events.py +1 -1
  230. package/harness/bundles/java/codex/scripts/harness_events_sync.py +1 -0
  231. package/harness/bundles/java/codex/scripts/harness_fixback.py +14 -10
  232. package/harness/bundles/java/codex/scripts/harness_gate.py +293 -90
  233. package/harness/bundles/java/codex/scripts/harness_ledger.py +47 -2
  234. package/harness/bundles/java/codex/scripts/harness_paths.py +175 -0
  235. package/harness/bundles/java/codex/scripts/harness_phase.py +65 -23
  236. package/harness/bundles/java/codex/scripts/harness_plan_finalize.py +140 -874
  237. package/harness/bundles/java/codex/scripts/harness_review.py +25 -4
  238. package/harness/bundles/java/cursor/.harness-build.json +1 -1
  239. package/harness/bundles/java/cursor/contracts/workflow-policy.json +46 -17
  240. package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +2 -2
  241. package/harness/bundles/java/cursor/harness-archive/SKILL.md +2 -2
  242. package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +2 -2
  243. package/harness/bundles/java/cursor/harness-execute/SKILL.md +170 -0
  244. package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +2 -2
  245. package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +2 -2
  246. package/harness/bundles/java/cursor/harness-package/SKILL.md +2 -2
  247. package/harness/bundles/java/cursor/harness-plan/SKILL.md +10 -9
  248. package/harness/bundles/java/cursor/harness-plan/checklist.md +19 -91
  249. package/harness/bundles/java/cursor/harness-plan/protocols.md +3 -1
  250. package/harness/bundles/java/cursor/harness-plan/reference.md +74 -83
  251. package/harness/bundles/java/cursor/harness-pull/SKILL.md +1 -1
  252. package/harness/bundles/java/cursor/harness-push/SKILL.md +1 -1
  253. package/harness/bundles/java/cursor/harness-review/SKILL.md +3 -3
  254. package/harness/bundles/java/cursor/harness-review/protocols.md +1 -1
  255. package/harness/bundles/java/cursor/harness-run/SKILL.md +13 -5
  256. package/harness/bundles/java/cursor/harness-submit/SKILL.md +2 -2
  257. package/harness/bundles/java/cursor/harness-submit/checklist.md +1 -1
  258. package/harness/bundles/java/cursor/harness-sync/SKILL.md +1 -1
  259. package/harness/bundles/java/cursor/harness-test/SKILL.md +11 -2
  260. package/harness/bundles/java/cursor/scripts/harness_adoption_metrics.py +391 -0
  261. package/harness/bundles/java/cursor/scripts/harness_archive.py +23 -14
  262. package/harness/bundles/java/cursor/scripts/harness_change.py +25 -7
  263. package/harness/bundles/java/cursor/scripts/harness_context.py +154 -60
  264. package/harness/bundles/java/cursor/scripts/harness_events.py +1 -1
  265. package/harness/bundles/java/cursor/scripts/harness_events_sync.py +1 -0
  266. package/harness/bundles/java/cursor/scripts/harness_fixback.py +14 -10
  267. package/harness/bundles/java/cursor/scripts/harness_gate.py +293 -90
  268. package/harness/bundles/java/cursor/scripts/harness_ledger.py +47 -2
  269. package/harness/bundles/java/cursor/scripts/harness_paths.py +175 -0
  270. package/harness/bundles/java/cursor/scripts/harness_phase.py +65 -23
  271. package/harness/bundles/java/cursor/scripts/harness_plan_finalize.py +140 -874
  272. package/harness/bundles/java/cursor/scripts/harness_review.py +25 -4
  273. package/harness/manifests/general/claude-code.json +40 -32
  274. package/harness/manifests/general/codebuddy.json +40 -32
  275. package/harness/manifests/general/codex.json +40 -32
  276. package/harness/manifests/general/cursor.json +40 -32
  277. package/harness/manifests/java/claude-code.json +42 -34
  278. package/harness/manifests/java/codebuddy.json +42 -34
  279. package/harness/manifests/java/codex.json +42 -34
  280. package/harness/manifests/java/cursor.json +42 -34
  281. package/hunter-workflow-family.json +4 -4
  282. package/package.json +1 -1
@@ -77,22 +77,11 @@ description: harness-plan 的阶段检查清单和覆盖检查列表。仅在执
77
77
 
78
78
  确认后立即追加 decision 事件,并写入 `meta/worktree.json`。设计文档按路径分流:
79
79
 
80
- - **v2**:审批内容写进 `meta/plan-evidence-input.json` 的 `approval.content`(含 `approver_id`),
80
+ - 审批内容写进 `meta/plan-evidence-input.json` 的 `approval.content`(含 `approver_id`),
81
81
  `plans/<change>-design.md` 由 finalize 从审批内容派生——**不要**手写它,手写的会被覆盖
82
- - **legacy**:写 `spec/<change>-design.md`(含下方 frontmatter)
83
82
 
84
83
  - [ ] 确认事件早于 approved 设计文档;未获确认时不得先落盘 `status: approved`
85
84
 
86
- legacy 设计文档必须包含 frontmatter:
87
- ```yaml
88
- ---
89
- change-name: <change-name>
90
- created: YYYY-MM-DD HH:mm
91
- status: approved
92
- source: harness-plan
93
- ---
94
- ```
95
-
96
85
  展示可审核包后,使用 `blocking user confirmation` 询问用户:
97
86
  - **确认**:设计方向正确,继续任务拆分
98
87
  - **修改**:某个部分需要调整,修改后再审核
@@ -184,8 +173,8 @@ source: harness-plan
184
173
  □ 已用 decision / issue 事件 note 记录五类输出:风险识别 / 复用机会 / 替代方案 / 推荐方案 / 关键决策
185
174
  □ 已叠加项目架构约束(分层规范、数据模型、接口规范)
186
175
  □ 需求澄清结论已追加到 events.ndjson,阶段结束后执行日志由渲染器生成
187
- 用户问题未超预算:简单修复 0-1 问,普通需求 1-3 问,高风险需求 5-7 问;无必须裁决事项时 0 问
188
- 提问遵循"一次一问、等答再继续";能由 context pack / 阶段3代码探索 / CodeGraph 自答的问题已自答,未打扰用户
176
+ 提问方式与问题预算符合 protocols.md decision-grilling-protocol(预算数值以那份为准,此处不复述)
177
+ 能由 context pack / 阶段3代码探索 / CodeGraph 自答的问题已自答,未打扰用户
189
178
  □ 每个需要用户决策的问题,AI 先给出了推荐答案、理由和取舍,用户仅确认或修正
190
179
  □ 高风险/业务语义决策(范围、权限、安全、支付、迁移、删除、API契约、用户可见行为)已显式等待用户确认
191
180
  ```
@@ -199,97 +188,34 @@ source: harness-plan
199
188
  ```
200
189
  □ 已读取 protocols.md,并按 implementation-planning-protocol 执行
201
190
  □ 输入为阶段4已审核设计文档
202
- 已生成基础任务列表,并用 artifact 事件 note 记录任务拆分摘要
191
+ 已用 artifact 事件 note 记录任务拆分摘要
203
192
  □ 已叠加项目层序依赖(数据/契约→业务层→接口层)
204
193
  □ 已生成 4 维度场景表(单元/接口/数据兼容/集成)
205
194
  □ 每个自动化场景均标注执行层级、预计时长、资源预算、超时、可复用证据;快速反馈不默认扫描全仓库
206
195
  □ 已确定变更名(kebab-case)
207
- □ 产物已写入 .harness/changes/<change-name>/plans/:
208
- - <change-name>-plan.md(简洁任务表)
209
- - <change-name>-implementation-detail.md(自适应详细执行参考)
210
- - <change-name>-test-scenarios.md(测试场景表)
211
196
  □ implementation-detail.md 按复杂度自适应:简单任务不过度展开,复杂任务写清接口/数据/顺序/风险/测试策略
212
197
  □ plan / implementation-detail / test-scenarios 三件套互相引用一致,无 TBD/TODO/空泛占位
213
198
  ```
214
199
 
200
+ > 产物是否齐全、任务表与场景表是否非空、优先级与 ownerPhase 取值是否合法,由 finalizer
201
+ > fail-closed 判定(`PLAN_ARTIFACT_MISSING` / `PLAN_TASKS_EMPTY` / `PLAN_SCENARIOS_EMPTY` /
202
+ > `PLAN_SCENARIO_PRIORITY_INVALID`),此处不重复勾选。上面留下的都是机器判不了的:
203
+ > 层序依赖是否合理、维度是否真被覆盖、详略是否配得上复杂度、三件套是否自洽。
204
+
215
205
  > 不再检查 Superpowers writing-plans 是否安装或调用;阶段 6 是 harness 原生协议,不存在 `docs/superpowers/` 同步分支。
216
206
 
217
207
  ## 阶段 8:结束前产物完整性检查 ⚠️ 强制
218
208
 
219
- > **缺任一文件❌FAIL,不得宣称 plan 完成。**
220
-
221
- > **先认路径再对表**:v2 与 legacy 的完整性口径不同,混用会得出错误结论。
222
-
223
- ### v2 路径(新 change 默认)
224
-
225
- - [ ] 只手写 `meta/plan-evidence-input.json`;`plans/*.md` 由 finalize 派生,**不得**手写后再被覆盖
226
- - [ ] `evidence-pack` 返回 `code:"PLAN_EVIDENCE_PACK_BUILT"`;结构报错按 `field_path`/`problems[]` 修正后重跑
227
- - [ ] `finalize` exit 0 且 `code:"PLAN_FINALIZED"`
228
- - [ ] 八 target 齐全:`plans/` ×4(design / implementation-detail / plan / test-scenarios)+ `meta/` ×4(gate-policy / implementation-checkpoints / scenario-manifest / worktree)
229
- - [ ] `meta/publication-journals/<op>.json` 的 `state === "committed"`
230
- - [ ] `meta/plan-events.ndjson` 含 `artifact_published` 与 `phase_ended` 两类终态事件
231
- - [ ] 以上任一缺失都不得手工补写;回到对应阶段改自然输入后重跑
232
-
233
- | 文件(v2) | 必须存在 | 检查结果 |
234
- |------|:---:|:---:|
235
- | `.harness/changes/<change>/meta/plan-evidence-input.json` | ✅ | □ |
236
- | `.harness/changes/<change>/plans/<change>-design.md` | ✅ | □ |
237
- | `.harness/changes/<change>/plans/<change>-plan.md` | ✅ | □ |
238
- | `.harness/changes/<change>/plans/<change>-implementation-detail.md` | ✅ | □ |
239
- | `.harness/changes/<change>/plans/<change>-test-scenarios.md` | ✅ | □ |
240
- | `.harness/changes/<change>/meta/gate-policy.json` | ✅ | □ |
241
- | `.harness/changes/<change>/meta/worktree.json` | ✅ | □ |
242
- | `.harness/changes/<change>/meta/implementation-checkpoints.json` | ✅ | □ |
243
- | `.harness/changes/<change>/meta/scenario-manifest.json`(非空且计数一致) | ✅ | □ |
244
- | `.harness/changes/<change>/meta/publication-journals/<op>.json`(committed) | ✅ | □ |
245
- | `.harness/changes/<change>/meta/plan-events.ndjson` | ✅ | □ |
246
- | `.harness/changes/<change>/events.ndjson` | ✅ | □ |
247
-
248
- > v2 过渡期**不写** `meta/plan-finalization.json` 与 `logs/execution-log.md`;缺这两项不算失败,不得为凑表手工补。
249
-
250
- ### legacy 路径(自然输入不完整时的回退)
251
-
252
- - [ ] 所有待发布产物先写入 staging,不直接覆盖正式 change 目录
253
- - [ ] 执行 `harness_plan_finalize.py finalize --change-dir ... --staging-dir ... --change ... --run-id <plan-run-id> --attempt <attempt> --json`;身份必须与本次 `phase.start` 完全相同
254
- - [ ] finalizer 返回 `ok=true`、`artifactsHash`、绝对 `receiptPath` 与稳定 `artifactRef=meta/plan-finalization.json`;重复执行返回 `idempotent=true`
255
- - [ ] 紧接着执行 `harness_plan_finalize.py verify --change-dir ... --json`
256
- - [ ] verify 返回 `phaseStartCount=1`、`phaseEndCount=1`、`phaseEndStatus=OK`、`receiptConsistent=true`
257
- - [ ] 收据 `files` 完整包含 design / plan / implementation-detail / test-scenarios / gate-policy / worktree 六项标准产物;不得省略、重复或经 symlink/junction/reparse point 引用
258
- - [ ] verify 的 `taskCount` 等于全部任务表行数,`scenarioCount` 等于 Markdown 中全部唯一场景 ID 数;任一为 0 或不一致即 ❌FAIL
259
- - [ ] finalizer 失败时正式目录无半发布产物、无成功 `phase.end`、无伪造 execution log
260
- - [ ] 禁止在 finalizer 之前手工追加成功 `phase.end`
261
- - [ ] context close 的 `--artifact` 只传 finalizer 原样返回的 `receiptPath` 或 `artifactRef`,不得猜测、拼接或使用 `<plan-finalization>` 占位文本
262
-
263
- | 文件(legacy) | 必须存在 | 检查结果 |
264
- |------|:---:|:---:|
265
- | `.harness/changes/<change>/spec/<change>-design.md` | ✅ | □ |
266
- | `.harness/changes/<change>/plans/<change>-plan.md` | ✅ | □ |
267
- | `.harness/changes/<change>/plans/<change>-implementation-detail.md` | ✅ | □ |
268
- | `.harness/changes/<change>/plans/<change>-test-scenarios.md` | ✅ | □ |
269
- | `.harness/changes/<change>/meta/gate-policy.json` | ✅ | □ |
270
- | `.harness/changes/<change>/meta/worktree.json` | ✅ | □ |
271
- | `.harness/changes/<change>/meta/implementation-checkpoints.json` | ✅ | □ |
272
- | `.harness/changes/<change>/meta/scenario-manifest.json`(非空且计数一致) | ✅ | □ |
273
- | `.harness/changes/<change>/meta/plan-finalization.json`(finalized) | ✅ | □ |
274
- | `.harness/changes/<change>/logs/execution-log.md` | ✅ | □ |
275
- | `.harness/changes/<change>/events.ndjson` | ✅ | □ |
276
-
277
- ### Plan 结束行为检查
209
+ > **先认路径**:新 change 只走 v2;legacy 产物(历史 change)只读。必需文件清单 `reference.md`「阶段 8」。
278
210
 
279
- ```
280
- □ 未询问 Subagent-Driven / Inline Execution 等执行模式
281
- □ 最终输出只提示了产出物路径和下一步 /harness-run
282
- □ 未将 docs/superpowers/ 列为最终产物路径
283
- ```
211
+ 文件是否齐全、哈希是否一致、身份是否匹配、计数是否对得上——这些 **finalizer 与 verify 已经 fail-closed 判定**,逐条复述不产生新结论,只会把一份事实变成两份。命令失败时按返回的 `code` 查 `reference.md`,不要对着清单猜。
284
212
 
285
- ### Legacy Frontmatter 兼容
213
+ 下面三条不在机器判定范围内,必须自己守:
214
+
215
+ - [ ] **v2**:只手写 `meta/plan-evidence-input.json`。`plans/*.md` 由 finalize 派生,手写的会被渲染覆盖,只是白写
216
+ - [ ] 任何缺失**都不得手工补写**(包括 `phase.end`);回到对应阶段改自然输入/staging 后重跑
217
+ - [ ] v2 过渡期**不写** `meta/plan-finalization.json` 与 `logs/execution-log.md`;缺这两项不算失败,不得为凑表手工补
286
218
 
287
- ```
288
- □ 已确认 plan 文件 frontmatter 存在
289
- □ 如不存在 → 已从路径推断 change-name 和 plan-name
290
- □ 如不存在 → 执行日志中已标记 🟡 legacy-plan
291
- □ 旧 plan 不因 frontmatter 缺失而 FAIL
292
- ```
293
219
 
294
220
  ## 关键原则
295
221
 
@@ -300,7 +226,9 @@ source: harness-plan
300
226
  - 场景表是后续所有步骤的真相源——宁可多花时间打磨,不要草草了事
301
227
  - 如果需求不明确,优先提问而不是猜测后继续设计
302
228
  - 任务拆分粒度按复杂度调整——plan 简表保持可追踪,implementation-detail 按风险和复杂度自适应展开
303
- - **Plan 结束禁止询问执行模式**:Subagent-Driven / Inline Execution 属于 /harness-run 阶段
229
+
230
+ > Plan 的结束行为(禁止询问执行模式、只提示 `/harness-run`)由 `SKILL.md` 的关键规则表定义,
231
+ > 详细规则见 `reference.md`「Plan 结束行为规则」。此处不再复述。
304
232
 
305
233
  ## 事件记录(前置规则)
306
234
 
@@ -128,4 +128,6 @@ description: harness-plan 的原生规划协议。吸收 brainstorming、grill-m
128
128
  - implementation-planning-protocol:plan 简表、implementation-detail、test-scenarios 三件套一致,无占位符
129
129
  ```
130
130
 
131
- 该自检作为 `verification` 事件的 `note` 追加;关键结论分别追加 `decision` / `issue` 事件。渲染器在 `phase.end` 后生成执行日志。
131
+ 自检结论直接展示给用户即可,**不要**再追加一条 `verification` 事件——「协议自检通过」不改变
132
+ 任何结论,只增加监控噪声(roadmap 12 号「事件规则」)。真正影响行为的东西照常留痕:关键决策
133
+ 追加 `decision`,发现的冲突与阻塞追加 `issue`。渲染器在 `phase.end` 后生成执行日志。
@@ -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
  |------|:---:|:---:|
@@ -351,17 +318,39 @@ status: approved
351
318
  | `.harness/changes/<change>/plans/<change>-plan.md` | ✅(派生) | ✅ |
352
319
  | `.harness/changes/<change>/plans/<change>-implementation-detail.md` | ✅(派生) | ✅ |
353
320
  | `.harness/changes/<change>/plans/<change>-test-scenarios.md` | ✅(派生) | ✅ |
354
- | `.harness/changes/<change>/meta/gate-policy.json` | | ✅ |
321
+ | `.harness/changes/<change>/meta/gate-policy.json` | ✅(**classify 写,非发布产物**) | ✅ |
322
+ | `.harness/changes/<change>/meta/plan-profile.json` | ✅(派生) | — |
355
323
  | `.harness/changes/<change>/meta/worktree.json` | ✅ | ✅ |
356
324
  | `.harness/changes/<change>/meta/implementation-checkpoints.json` | ✅ | ✅ |
357
325
  | `.harness/changes/<change>/meta/scenario-manifest.json` | ✅ | ✅ |
358
326
  | `.harness/changes/<change>/meta/publication-journals/<op>.json`(committed) | ✅ | — |
359
327
  | `.harness/changes/<change>/meta/plan-events.ndjson` | ✅ | — |
360
- | `.harness/changes/<change>/meta/plan-finalization.json` | — | |
361
- | `.harness/changes/<change>/logs/execution-log.md` | — | |
328
+ | `.harness/changes/<change>/meta/plan-finalization.json` | — | ✅(只读) |
329
+ | `.harness/changes/<change>/logs/execution-log.md` | — | ✅(只读) |
362
330
  | `.harness/changes/<change>/events.ndjson` | ✅ | ✅ |
363
331
 
364
- 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;不得通过删减收据文件集后重算哈希来绕过完整性检查。
333
+
334
+ ### 两套分类模型的边界(别把它们当同一件事)
335
+
336
+ | | Python `tier` | TS `mode` |
337
+ |---|---|---|
338
+ | 取值 | `fast` / `standard` / `full` | `quick` / `standard` / `assurance` |
339
+ | 写到哪 | `meta/gate-policy.json`(`schemaVersion:1`,camelCase) | `meta/plan-profile.json`(artifact 包装体,snake_case) |
340
+ | 谁写 | `harness_gate.py classify`(阶段 0.5 由 bootstrap-plan 调起) | `hunter-harness plan finalize`(阶段 8 发布) |
341
+ | 地位 | **classify 工作副本**:0.5 分类 + 0.6 阶段计划落盘处;未发布的 change 由它驱动门禁 | **门禁权威**:发布时把工作副本的门禁字段(DAG/validations/tier/source)并入 content 并哈希绑定;`harness_paths.load_change_gate_policy` v2 优先、工作副本回退 |
342
+ | 输入 | 计划文档的「风险等级」正则 + capabilityGates 信号 | `risk_signals`(手填与命令推断取并集)+ 真实仓库 capabilities |
343
+
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。
345
+
346
+ **派生视图的两条前置缺陷已接通**(2026-08,接通 ≠ 门禁权威切换,权威仍是 Python gate-policy):
347
+
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`,不进任何哈希身份字段。
352
+
353
+ `meta/implementation-checkpoints.json` 的情况不同:v2 包装体里的 `content.foundation_gate` 信息是够的,所以门禁在**只读侧**解包(`checkpoint_status` 同时认 `checkpoints[]`、顶层 `foundationGate` 与 v2 包装体三种形状),不改文件名。注意写回路径(`gate checkpoint approve`)仍然操作原始文档——用归一化结构覆盖会破坏 v2 产物的哈希绑定。
365
354
 
366
355
  ### 阶段 8 v2 路径(结构化证据包流程,新 change 优先)
367
356
 
@@ -392,7 +381,7 @@ npx hunter-harness plan finalize --input .harness/changes/<cn>/meta/plan-evidenc
392
381
  | `change_key` | `replace-with-change-name` | 真实 change-name(kebab-case:`^[a-z0-9]+(-[a-z0-9]+)*$`) |
393
382
  | `context.run_id` | `plan_replace-with-your-plan-run-id` | 阶段 0.5 生成、`phase.start` 已用的**同一个** plan-run-id |
394
383
  | `evidence_sources[].content_hash` | `sha256:deadbeef…` | 证据源内容的真实 sha256(校验器显式拒绝全 0) |
395
- | `risk_signals` | `["production_code"]` | classify 实际返回的信号 |
384
+ | `risk_signals` | `["production_code"]` | 可留空数组:命令按 affected_paths 与 git status 推断并与手填取并集;手填只增不减 |
396
385
 
397
386
  **容易踩的硬约束**(违反时命令会给 `field_path`,不必再猜):
398
387
 
@@ -422,47 +411,49 @@ npx hunter-harness plan finalize --input .harness/changes/<cn>/meta/plan-evidenc
422
411
  | `context` | project_id/run_id/branch_name/attempt(复用 plan-run-id 与 attempt) | 0.5 |
423
412
  | `expected_baseline` | 首次发布 `{state:"absent", manifest_hash:null, generation:0}` | 8 |
424
413
 
425
- > ⚠️ **已知缺口:v2 派生的 `meta/scenario-manifest.json` 目前喂不了 run/test 门禁。**
426
- > 它是 artifact 包装体,每条场景只有 `scenario_id/coverage_dimension/execution_level/
427
- > evidence_requirements/risk_level/task_refs/requirement_refs`;而门禁按
428
- > `id/priority/requiredEvidenceKind/ownerPhase/executableTestId/testFile/testTitle`
429
- > 判定哪些场景需要 ledger 证据。缺 `priority` 与 `requiredEvidenceKind` 时"必需场景"会算成空集,
430
- > 所以门禁**明确报 `SCENARIO_MANIFEST_V2_UNSUPPORTED` 并列出 `missingFields`,绝不静默放行**。
431
- > 需要 ledger 证据闭环的变更,在 v2 场景契约补齐这些字段前请走 legacy 路径。
414
+ > **场景契约与门禁的对接**(曾经的已知缺口,现已打通)
415
+ >
416
+ > v2 派生的 `meta/scenario-manifest.json` 是 artifact 包装体,键名与门禁消费的不同。消费端
417
+ > (`harness_gate` 的 C9、`harness_ledger` 的三处)统一调 `harness_plan_finalize.unpack_v2_scenario_manifest`
418
+ > 解成 legacy 形状再判定:`scenario_id→id`、`owner_phase→ownerPhase`、`required_evidence_kind→requiredEvidenceKind`
419
+ > 、可执行三元 `executable_test_id/test_file/test_title→executableTestId/testFile/testTitle`。
420
+ > `required_evidence_kind` `priority` 派生(P0/P1→`ledger`,P2→`advisory`),写在 artifact 里,
421
+ > 消费侧不重推。
422
+ >
423
+ > 因此自然输入的 `scenarios` **必须**带 `priority`(P0/P1/P2)与 `owner_phase`。缺任一项,
424
+ > 门禁**逐场景**校验后报 `SCENARIO_MANIFEST_V2_UNSUPPORTED` 并列出 `missingFields`,绝不静默放行
425
+ > ——逐场景而不是取键的并集:并集只要有一条场景带了 `priority` 就算通过,其余缺字段的会静默
426
+ > 落进非必需集,"必需场景"随之缩水。
427
+ >
428
+ > 可执行三元是**可选**的,但要么整组给全、要么整组省略。ledger 场景全部带齐 → manifest 声明
429
+ > `schemaVersion 2`,关门可绑结构化执行收据;否则降为 1。
432
430
 
433
431
  - **证据包**(`plan-evidence.json`)是命令推导的产物(trusted/publication/context/baseline),不得手改;任何字段变化必须改自然输入后重跑 evidence-pack。
434
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 内容绕过。
435
433
  - **验证**:journal `state==="committed"` + 八 target 存在 + plan-events.ndjson 含两类终态事件;不得手工补写任何一项。
436
- - **legacy 收据**:过渡期(阶段 14 前)v2 路径不写 `plan-finalization.json`;消费方若仍读 legacy receipt,由兼容投影单独提供,不得反向要求 v2 双写。
437
- - **回退**:v2 自然输入不完整(如缺真实审批记录)时才允许走 Python finalizer(legacy 路径);同一次发布不得两条路径混用。
434
+ - **legacy 收据**:v2 路径不写 `plan-finalization.json`;消费方若读历史 legacy receipt,`harness_plan_finalize.py verify` 保持可读。0.3.0 起 v2 无 legacy 回退——自然输入不完整先补齐(例如补真实审批记录),不得走已删除的 Python finalizer。
438
435
 
439
- ### 发布后修订计划(republish)
440
-
441
- 计划发布后又要改产物,是**正常且高频**的情况——用户看完计划补一个回归场景、修正一条任务、调整验收标准。这时不要与哈希守卫搏斗:
442
-
443
- ```bash
444
- python <skills-root>/scripts/harness_plan_finalize.py republish \
445
- --change-dir ".harness/changes/<cn>" --staging-dir ".harness/changes/<cn>/runtime/plan-staging" \
446
- --change <cn> --run-id "plan_$(uuidgen)" --reason "<为什么要改>" --json
447
- ```
436
+ ### 发布后修订计划(v2 重跑流)
448
437
 
449
- 它一次性完成整套动作:校验 staging → 分配新 attempt(自动取已用最大值 +1)→ 追加 `phase.start` → 替换收据 → 重新派生 `scenario-manifest.json` 与 `implementation-checkpoints.json` → 写 `phase.end`。收据里保留 `supersedes`(被取代的 hash/runId/attempt)与 `amendReason`,修订全程可审计。
438
+ 计划发布后又要改产物,是**正常且高频**的情况——用户看完计划补一个回归场景、修正一条任务、调整验收标准。这时不要与哈希守卫搏斗,按三步重跑修订流:
450
439
 
451
- | 约束 | 说明 |
452
- |------|------|
453
- | `--reason` 必填 | 修订已发布计划必须留下理由,否则 `PLAN_AMEND_REASON_REQUIRED` |
454
- | `--run-id` 必须全新 | 复用旧 run-id 报 `PLAN_AMEND_RUN_ID_IN_USE`(attemptrun-id 一一绑定) |
455
- | 首次发布不能用它 | 无收据时报 `PLAN_NOT_FINALIZED`,首次发布走 `finalize` |
456
- | 内容没变则空操作 | 返回 `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>`。
457
446
 
458
- ⚠️ **绝对不要手改 `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` 子命令已删除;历史收据只读。)
459
450
 
460
- > 直接重跑 `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。重跑修订流会重新派生它,这才是唯一正确入口。
461
452
 
462
453
  ### Plan 结束行为规则
463
454
 
464
- - **禁止询问执行模式**:Subagent-Driven / Inline Execution 属于 /harness-run 阶段
465
- - 最终输出只提示产出物路径和下一步 `/harness-run`
455
+ - **禁止询问执行模式**:Subagent-Driven / Inline Execution 属于 /harness-execute 阶段
456
+ - 最终输出只提示产出物路径和下一步 `/harness-execute`
466
457
  - `docs/superpowers/` 不得作为最终产物路径出现在输出中
467
458
 
468
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=b0e6891811c856ce; overlay=none; agent=codebuddy; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=d1485a25236f58dc; overlay=none; agent=codebuddy; 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=b0e6891811c856ce; overlay=none; agent=codebuddy; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=d1485a25236f58dc; overlay=none; agent=codebuddy; 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=b0e6891811c856ce; overlay=none; agent=codebuddy; do not edit -->
7
+ <!-- generated by harness_deploy.py; core=d1485a25236f58dc; overlay=none; agent=codebuddy; 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
 
@@ -169,7 +169,7 @@ python <skills-root>/scripts/harness_events.py append --change-dir ".harness/cha
169
169
 
170
170
  > **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 边界保持最新。
171
171
 
172
- 每个阶段的 `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` 自动分配两者。
172
+ 每个阶段的 `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 移除)。
173
173
 
174
174
  阶段跑得久(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` 环境变量统一注入。
175
175
  > 片段: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=b0e6891811c856ce; overlay=none; agent=codebuddy; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=d1485a25236f58dc; overlay=none; agent=codebuddy; 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)。
@@ -83,13 +89,15 @@ python <skills-root>/scripts/harness_test_runner.py exec --project . --timeout-s
83
89
 
84
90
  返回 `TEST_RUN_ALREADY_ACTIVE`(退出码 3)说明**已有构建在跑**:等它结束或用 `lock-status` 查明持有者,**不得**改用裸跑绕开锁,也不得另起一个并行构建。确认持有进程已消失时才用 `lock-reap` 回收。
85
91
 
86
- **长阶段租约续期**:`gate begin` 的租约默认 TTL 3600 秒,而 run 阶段常常跑得更久。租约过期不会中断执行,只会让最后的 `gate close` `LEASE_ABSENT`。凡预计超过 1 小时的阶段,每完成一个变更簇就用本阶段**原 run-id** 续租一次(同 run-id 重复 claim 即刷新,不会新开 attempt):
92
+ **长阶段租约**:`gate begin` 的租约默认 TTL 3600 秒,而 run 阶段常常跑得更久。租约过期不会中断执行,**也不再阻断收尾**:`gate close` 发现租约过期而 run-id 仍是本阶段的,会自动用原 run-id 重取并照常关门,只在返回体的 `leaseLapsed` 里记下这个阶段跑过了 TTL。过期本身不说明所有权变了——抢占会重写租约文件把 run-id 换掉,那时报的是 `LEASE_OWNER_MISMATCH`。
93
+
94
+ 因此**不需要**为了长阶段定期续租。确实想让租约始终有效时,用本阶段原 run-id 刷新即可(同 run-id 重复 claim 即刷新,不会新开 attempt):
87
95
 
88
96
  ```text
89
97
  python <skills-root>/scripts/harness_change.py claim --change <id> --phase run --run-id <本阶段 run-id> --ttl-seconds 3600 --json
90
98
  ```
91
99
 
92
- 已经报了 `LEASE_ABSENT` 也按同一条命令恢复——错误响应的 `resumeRunId` 就是要用的 run-id;**不要**重跑 `gate begin`,那会新开 attempt 并丢失本轮 capsule。
100
+ 仍然报 `LEASE_ABSENT` 说明这个阶段**根本没有租约记录**(从未 begin,或已被释放),不是超时;先确认 `gate begin` 真的跑过。报 `LEASE_INVALID` 说明租约文件损坏,无法证明没被抢占,需人工确认无并发后再用上面的命令重取。两种情况都**不要**重跑 `gate begin`——那会新开 attempt 并丢失本轮 capsule。
93
101
 
94
102
  **执行器边界**:优先使用项目 build profile 和已有测试入口。禁止为了绕过 ESM、路径或参数问题临时生成 `.js`、`require` 脚本;需要文件式 runner 时使用项目已有入口,确需新增时遵循项目模块类型(例如 ESM 使用 `.mjs`)。runner 包装说明写入 `runnerCommand` 元数据,不得拼进账本的规范 `command`。
95
103
 
@@ -123,7 +131,7 @@ python <skills-root>/scripts/harness_change.py claim --change <id> --phase run -
123
131
  | **关门/状态** | 10 项关门检查;持久化 run-task-status;仅 run-owned P0 静态-only 导致 WARN;test-owned 待办正常移交 |
124
132
  | **Worktree** | `requested=true` 时代码只写 worktree |
125
133
  | **构建/测试** | 一律经 `harness_test_runner.py exec`;禁止裸跑 mvn/gradle/npm test;`TEST_RUN_ALREADY_ACTIVE` 表示已有构建在跑,等待而非另起 |
126
- | **租约** | 阶段超 1 小时按变更簇用原 run-id 续租;`LEASE_ABSENT` `harness_change.py claim` 恢复,不重跑 begin |
134
+ | **租约** | 阶段超 TTL close 自动用原 run-id 重取,无需续租;`LEASE_ABSENT`(无记录)/`LEASE_INVALID`(文件损坏)才需人工 `harness_change.py claim`,一律不重跑 begin |
127
135
  | **PowerShell** | 所有 git 经 `powershell.exe -NoProfile -Command` |
128
136
 
129
137
  ### 陈旧测试安全修复与精确跟踪
@@ -174,7 +182,7 @@ python <skills-root>/scripts/harness_events.py append --change-dir ".harness/cha
174
182
 
175
183
  > **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 边界保持最新。
176
184
 
177
- 每个阶段的 `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` 自动分配两者。
185
+ 每个阶段的 `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 移除)。
178
186
 
179
187
  阶段跑得久(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` 环境变量统一注入。
180
188
  > 片段: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=b0e6891811c856ce; overlay=none; agent=codebuddy; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=d1485a25236f58dc; overlay=none; agent=codebuddy; do not edit -->
7
7
  # harness-submit — 最终提交(含 worktree 合并)
8
8
 
9
9
  ## Purpose
@@ -176,7 +176,7 @@ python <skills-root>/scripts/harness_events.py append --change-dir ".harness/cha
176
176
 
177
177
  > **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 边界保持最新。
178
178
 
179
- 每个阶段的 `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` 自动分配两者。
179
+ 每个阶段的 `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 移除)。
180
180
 
181
181
  阶段跑得久(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` 环境变量统一注入。
182
182
  > 片段: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=b0e6891811c856ce; overlay=none; agent=codebuddy; do not edit -->
7
+ <!-- generated by harness_deploy.py; core=d1485a25236f58dc; overlay=none; agent=codebuddy; do not edit -->
8
8
  # harness-sync
9
9
 
10
10
  ## Purpose