@hunter-harness/workflow-harness 0.4.8 → 0.4.10

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 (453) hide show
  1. package/harness/bundles/general/claude-code/.harness-build.json +1 -1
  2. package/harness/bundles/general/claude-code/CONTEXT.md +1 -1
  3. package/harness/bundles/general/claude-code/README.md +36 -38
  4. package/harness/bundles/general/claude-code/contracts/workflow-policy.json +0 -50
  5. package/harness/bundles/general/claude-code/harness-archive/SKILL.md +1 -1
  6. package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +1 -1
  7. package/harness/bundles/general/claude-code/harness-codebase-map/templates/TESTING.md +1 -1
  8. package/harness/bundles/general/claude-code/harness-execute/SKILL.md +17 -17
  9. package/harness/bundles/general/{codex/harness-run/checklist.md → claude-code/harness-execute/coding-checklist.md} +9 -9
  10. package/harness/bundles/general/{codex/harness-run/reference.md → claude-code/harness-execute/coding-reference.md} +36 -36
  11. package/harness/bundles/general/{codex/harness-run → claude-code/harness-execute}/protocols.md +4 -4
  12. package/harness/bundles/general/{codebuddy/harness-test/checklist.md → claude-code/harness-execute/testing-checklist.md} +9 -10
  13. package/harness/bundles/general/claude-code/harness-execute/testing-pitfalls-java.md +21 -0
  14. package/harness/bundles/general/{codex/harness-test/pitfalls.md → claude-code/harness-execute/testing-pitfalls.md} +7 -7
  15. package/harness/bundles/general/claude-code/{harness-test/reference.md → harness-execute/testing-reference.md} +13 -13
  16. package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +7 -1
  17. package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +1 -1
  18. package/harness/bundles/general/claude-code/harness-plan/SKILL.md +3 -3
  19. package/harness/bundles/general/claude-code/harness-plan/checklist.md +2 -1
  20. package/harness/bundles/general/claude-code/harness-plan/reference.md +8 -0
  21. package/harness/bundles/general/claude-code/harness-pull/SKILL.md +1 -1
  22. package/harness/bundles/general/claude-code/harness-push/SKILL.md +1 -1
  23. package/harness/bundles/general/claude-code/harness-review/SKILL.md +3 -3
  24. package/harness/bundles/general/claude-code/harness-review/checklist.md +1 -1
  25. package/harness/bundles/general/claude-code/harness-submit/SKILL.md +1 -1
  26. package/harness/bundles/general/claude-code/harness-submit/checklist.md +1 -1
  27. package/harness/bundles/general/claude-code/harness-submit/reference.md +1 -1
  28. package/harness/bundles/general/claude-code/harness-sync/SKILL.md +1 -1
  29. package/harness/bundles/general/claude-code/protocols/evidence-based-reporting-protocol.md +1 -1
  30. package/harness/bundles/general/claude-code/protocols/ledger-protocol.md +8 -8
  31. package/harness/bundles/general/claude-code/protocols/sensitive-info-protocol.md +2 -2
  32. package/harness/bundles/general/claude-code/scripts/harness_context.py +71 -8
  33. package/harness/bundles/general/claude-code/scripts/harness_deploy.py +2 -2
  34. package/harness/bundles/general/claude-code/scripts/harness_events.py +17 -11
  35. package/harness/bundles/general/claude-code/scripts/harness_gate.py +95 -10
  36. package/harness/bundles/general/claude-code/scripts/harness_ledger.py +84 -4
  37. package/harness/bundles/general/claude-code/scripts/harness_profile.py +3 -3
  38. package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
  39. package/harness/bundles/general/codebuddy/CONTEXT.md +1 -1
  40. package/harness/bundles/general/codebuddy/README.md +36 -38
  41. package/harness/bundles/general/codebuddy/contracts/workflow-policy.json +0 -50
  42. package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +1 -1
  43. package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +1 -1
  44. package/harness/bundles/general/codebuddy/harness-codebase-map/templates/TESTING.md +1 -1
  45. package/harness/bundles/general/codebuddy/harness-execute/SKILL.md +17 -17
  46. package/harness/bundles/general/{claude-code/harness-run/checklist.md → codebuddy/harness-execute/coding-checklist.md} +9 -9
  47. package/harness/bundles/general/codebuddy/{harness-run/reference.md → harness-execute/coding-reference.md} +36 -36
  48. package/harness/bundles/general/codebuddy/{harness-run → harness-execute}/protocols.md +4 -4
  49. package/harness/bundles/general/{codex/harness-test/checklist.md → codebuddy/harness-execute/testing-checklist.md} +9 -10
  50. package/harness/bundles/general/codebuddy/harness-execute/testing-pitfalls-java.md +21 -0
  51. package/harness/bundles/general/{claude-code/harness-test/pitfalls.md → codebuddy/harness-execute/testing-pitfalls.md} +7 -7
  52. package/harness/bundles/general/codebuddy/{harness-test/reference.md → harness-execute/testing-reference.md} +13 -13
  53. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +7 -1
  54. package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  55. package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +3 -3
  56. package/harness/bundles/general/codebuddy/harness-plan/checklist.md +2 -1
  57. package/harness/bundles/general/codebuddy/harness-plan/reference.md +8 -0
  58. package/harness/bundles/general/codebuddy/harness-pull/SKILL.md +1 -1
  59. package/harness/bundles/general/codebuddy/harness-push/SKILL.md +1 -1
  60. package/harness/bundles/general/codebuddy/harness-review/SKILL.md +3 -3
  61. package/harness/bundles/general/codebuddy/harness-review/checklist.md +1 -1
  62. package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +1 -1
  63. package/harness/bundles/general/codebuddy/harness-submit/checklist.md +1 -1
  64. package/harness/bundles/general/codebuddy/harness-submit/reference.md +1 -1
  65. package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +1 -1
  66. package/harness/bundles/general/codebuddy/protocols/evidence-based-reporting-protocol.md +1 -1
  67. package/harness/bundles/general/codebuddy/protocols/ledger-protocol.md +8 -8
  68. package/harness/bundles/general/codebuddy/protocols/sensitive-info-protocol.md +2 -2
  69. package/harness/bundles/general/codebuddy/scripts/harness_context.py +71 -8
  70. package/harness/bundles/general/codebuddy/scripts/harness_deploy.py +2 -2
  71. package/harness/bundles/general/codebuddy/scripts/harness_events.py +17 -11
  72. package/harness/bundles/general/codebuddy/scripts/harness_gate.py +95 -10
  73. package/harness/bundles/general/codebuddy/scripts/harness_ledger.py +84 -4
  74. package/harness/bundles/general/codebuddy/scripts/harness_profile.py +3 -3
  75. package/harness/bundles/general/codex/.harness-build.json +1 -1
  76. package/harness/bundles/general/codex/CONTEXT.md +1 -1
  77. package/harness/bundles/general/codex/README.md +36 -38
  78. package/harness/bundles/general/codex/contracts/workflow-policy.json +0 -50
  79. package/harness/bundles/general/codex/harness-archive/SKILL.md +1 -1
  80. package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +1 -1
  81. package/harness/bundles/general/codex/harness-codebase-map/templates/TESTING.md +1 -1
  82. package/harness/bundles/general/codex/harness-execute/SKILL.md +17 -17
  83. package/harness/bundles/general/{cursor/harness-run/checklist.md → codex/harness-execute/coding-checklist.md} +9 -9
  84. package/harness/bundles/general/{cursor/harness-run/reference.md → codex/harness-execute/coding-reference.md} +36 -36
  85. package/harness/bundles/general/{claude-code/harness-run → codex/harness-execute}/protocols.md +4 -4
  86. package/harness/bundles/general/{cursor/harness-test/checklist.md → codex/harness-execute/testing-checklist.md} +9 -10
  87. package/harness/bundles/general/codex/harness-execute/testing-pitfalls-java.md +21 -0
  88. package/harness/bundles/general/{codebuddy/harness-test/pitfalls.md → codex/harness-execute/testing-pitfalls.md} +7 -7
  89. package/harness/bundles/general/codex/{harness-test/reference.md → harness-execute/testing-reference.md} +13 -13
  90. package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +7 -1
  91. package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +1 -1
  92. package/harness/bundles/general/codex/harness-plan/SKILL.md +3 -3
  93. package/harness/bundles/general/codex/harness-plan/checklist.md +2 -1
  94. package/harness/bundles/general/codex/harness-plan/reference.md +8 -0
  95. package/harness/bundles/general/codex/harness-pull/SKILL.md +1 -1
  96. package/harness/bundles/general/codex/harness-push/SKILL.md +1 -1
  97. package/harness/bundles/general/codex/harness-review/SKILL.md +3 -3
  98. package/harness/bundles/general/codex/harness-review/checklist.md +1 -1
  99. package/harness/bundles/general/codex/harness-submit/SKILL.md +1 -1
  100. package/harness/bundles/general/codex/harness-submit/checklist.md +1 -1
  101. package/harness/bundles/general/codex/harness-submit/reference.md +1 -1
  102. package/harness/bundles/general/codex/harness-sync/SKILL.md +1 -1
  103. package/harness/bundles/general/codex/protocols/evidence-based-reporting-protocol.md +1 -1
  104. package/harness/bundles/general/codex/protocols/ledger-protocol.md +8 -8
  105. package/harness/bundles/general/codex/protocols/sensitive-info-protocol.md +2 -2
  106. package/harness/bundles/general/codex/scripts/harness_context.py +71 -8
  107. package/harness/bundles/general/codex/scripts/harness_deploy.py +2 -2
  108. package/harness/bundles/general/codex/scripts/harness_events.py +17 -11
  109. package/harness/bundles/general/codex/scripts/harness_gate.py +95 -10
  110. package/harness/bundles/general/codex/scripts/harness_ledger.py +84 -4
  111. package/harness/bundles/general/codex/scripts/harness_profile.py +3 -3
  112. package/harness/bundles/general/cursor/.harness-build.json +1 -1
  113. package/harness/bundles/general/cursor/CONTEXT.md +1 -1
  114. package/harness/bundles/general/cursor/README.md +36 -38
  115. package/harness/bundles/general/cursor/contracts/workflow-policy.json +0 -50
  116. package/harness/bundles/general/cursor/harness-archive/SKILL.md +1 -1
  117. package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +1 -1
  118. package/harness/bundles/general/cursor/harness-codebase-map/templates/TESTING.md +1 -1
  119. package/harness/bundles/general/cursor/harness-execute/SKILL.md +17 -17
  120. package/harness/bundles/general/{codebuddy/harness-run/checklist.md → cursor/harness-execute/coding-checklist.md} +9 -9
  121. package/harness/bundles/general/{claude-code/harness-run/reference.md → cursor/harness-execute/coding-reference.md} +36 -36
  122. package/harness/bundles/general/cursor/{harness-run → harness-execute}/protocols.md +4 -4
  123. package/harness/bundles/general/{claude-code/harness-test/checklist.md → cursor/harness-execute/testing-checklist.md} +9 -10
  124. package/harness/bundles/general/cursor/harness-execute/testing-pitfalls-java.md +21 -0
  125. package/harness/bundles/general/cursor/{harness-test/pitfalls.md → harness-execute/testing-pitfalls.md} +7 -7
  126. package/harness/bundles/general/cursor/{harness-test/reference.md → harness-execute/testing-reference.md} +13 -13
  127. package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +7 -1
  128. package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +1 -1
  129. package/harness/bundles/general/cursor/harness-plan/SKILL.md +3 -3
  130. package/harness/bundles/general/cursor/harness-plan/checklist.md +2 -1
  131. package/harness/bundles/general/cursor/harness-plan/reference.md +8 -0
  132. package/harness/bundles/general/cursor/harness-pull/SKILL.md +1 -1
  133. package/harness/bundles/general/cursor/harness-push/SKILL.md +1 -1
  134. package/harness/bundles/general/cursor/harness-review/SKILL.md +3 -3
  135. package/harness/bundles/general/cursor/harness-review/checklist.md +1 -1
  136. package/harness/bundles/general/cursor/harness-submit/SKILL.md +1 -1
  137. package/harness/bundles/general/cursor/harness-submit/checklist.md +1 -1
  138. package/harness/bundles/general/cursor/harness-submit/reference.md +1 -1
  139. package/harness/bundles/general/cursor/harness-sync/SKILL.md +1 -1
  140. package/harness/bundles/general/cursor/protocols/evidence-based-reporting-protocol.md +1 -1
  141. package/harness/bundles/general/cursor/protocols/ledger-protocol.md +8 -8
  142. package/harness/bundles/general/cursor/protocols/sensitive-info-protocol.md +2 -2
  143. package/harness/bundles/general/cursor/scripts/harness_context.py +71 -8
  144. package/harness/bundles/general/cursor/scripts/harness_deploy.py +2 -2
  145. package/harness/bundles/general/cursor/scripts/harness_events.py +17 -11
  146. package/harness/bundles/general/cursor/scripts/harness_gate.py +95 -10
  147. package/harness/bundles/general/cursor/scripts/harness_ledger.py +84 -4
  148. package/harness/bundles/general/cursor/scripts/harness_profile.py +3 -3
  149. package/harness/bundles/general/pi/.harness-build.json +1 -1
  150. package/harness/bundles/general/pi/CONTEXT.md +1 -1
  151. package/harness/bundles/general/pi/README.md +36 -38
  152. package/harness/bundles/general/pi/contracts/workflow-policy.json +0 -50
  153. package/harness/bundles/general/pi/harness-archive/SKILL.md +1 -1
  154. package/harness/bundles/general/pi/harness-codebase-map/SKILL.md +1 -1
  155. package/harness/bundles/general/pi/harness-codebase-map/templates/TESTING.md +1 -1
  156. package/harness/bundles/general/pi/harness-execute/SKILL.md +17 -17
  157. package/harness/bundles/general/pi/harness-execute/coding-checklist.md +279 -0
  158. package/harness/bundles/general/pi/harness-execute/coding-reference.md +886 -0
  159. package/harness/bundles/general/pi/harness-execute/protocols.md +141 -0
  160. package/harness/bundles/general/pi/harness-execute/testing-checklist.md +358 -0
  161. package/harness/bundles/general/pi/harness-execute/testing-pitfalls-java.md +21 -0
  162. package/harness/bundles/general/pi/harness-execute/testing-pitfalls.md +307 -0
  163. package/harness/bundles/general/pi/harness-execute/testing-reference.md +880 -0
  164. package/harness/bundles/general/pi/harness-knowledge-ingest/SKILL.md +7 -1
  165. package/harness/bundles/general/pi/harness-knowledge-query/SKILL.md +1 -1
  166. package/harness/bundles/general/pi/harness-plan/SKILL.md +3 -3
  167. package/harness/bundles/general/pi/harness-plan/checklist.md +2 -1
  168. package/harness/bundles/general/pi/harness-plan/reference.md +8 -0
  169. package/harness/bundles/general/pi/harness-pull/SKILL.md +1 -1
  170. package/harness/bundles/general/pi/harness-push/SKILL.md +1 -1
  171. package/harness/bundles/general/pi/harness-review/SKILL.md +3 -3
  172. package/harness/bundles/general/pi/harness-review/checklist.md +1 -1
  173. package/harness/bundles/general/pi/harness-submit/SKILL.md +1 -1
  174. package/harness/bundles/general/pi/harness-submit/checklist.md +1 -1
  175. package/harness/bundles/general/pi/harness-submit/reference.md +1 -1
  176. package/harness/bundles/general/pi/harness-sync/SKILL.md +1 -1
  177. package/harness/bundles/general/pi/protocols/evidence-based-reporting-protocol.md +1 -1
  178. package/harness/bundles/general/pi/protocols/ledger-protocol.md +8 -8
  179. package/harness/bundles/general/pi/protocols/sensitive-info-protocol.md +2 -2
  180. package/harness/bundles/general/pi/scripts/harness_context.py +71 -8
  181. package/harness/bundles/general/pi/scripts/harness_deploy.py +2 -2
  182. package/harness/bundles/general/pi/scripts/harness_events.py +17 -11
  183. package/harness/bundles/general/pi/scripts/harness_gate.py +95 -10
  184. package/harness/bundles/general/pi/scripts/harness_ledger.py +84 -4
  185. package/harness/bundles/general/pi/scripts/harness_profile.py +3 -3
  186. package/harness/bundles/java/claude-code/.harness-build.json +1 -1
  187. package/harness/bundles/java/claude-code/CONTEXT.md +1 -1
  188. package/harness/bundles/java/claude-code/README.md +36 -38
  189. package/harness/bundles/java/claude-code/contracts/workflow-policy.json +0 -50
  190. package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +1 -1
  191. package/harness/bundles/java/claude-code/harness-archive/SKILL.md +1 -1
  192. package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +1 -1
  193. package/harness/bundles/java/claude-code/harness-codebase-map/templates/TESTING.md +1 -1
  194. package/harness/bundles/java/claude-code/harness-execute/SKILL.md +49 -17
  195. package/harness/bundles/java/claude-code/{harness-run/checklist.md → harness-execute/coding-checklist.md} +6 -6
  196. package/harness/bundles/java/claude-code/{harness-run/reference.md → harness-execute/coding-reference.md} +37 -37
  197. package/harness/bundles/java/claude-code/harness-execute/protocols.md +141 -0
  198. package/harness/bundles/java/claude-code/{harness-test/checklist.md → harness-execute/testing-checklist.md} +9 -9
  199. package/harness/bundles/java/claude-code/{harness-test/pitfalls-java.md → harness-execute/testing-pitfalls-java.md} +2 -1
  200. package/harness/bundles/java/claude-code/harness-execute/testing-pitfalls.md +307 -0
  201. package/harness/bundles/java/claude-code/{harness-test/reference.md → harness-execute/testing-reference.md} +13 -13
  202. package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +7 -1
  203. package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +1 -1
  204. package/harness/bundles/java/claude-code/harness-package/SKILL.md +1 -1
  205. package/harness/bundles/java/claude-code/harness-package/checklist.md +7 -7
  206. package/harness/bundles/java/claude-code/harness-plan/SKILL.md +3 -3
  207. package/harness/bundles/java/claude-code/harness-plan/checklist.md +2 -1
  208. package/harness/bundles/java/claude-code/harness-plan/reference.md +8 -0
  209. package/harness/bundles/java/claude-code/harness-pull/SKILL.md +1 -1
  210. package/harness/bundles/java/claude-code/harness-push/SKILL.md +1 -1
  211. package/harness/bundles/java/claude-code/harness-review/SKILL.md +3 -3
  212. package/harness/bundles/java/claude-code/harness-review/checklist.md +1 -1
  213. package/harness/bundles/java/claude-code/harness-submit/SKILL.md +1 -1
  214. package/harness/bundles/java/claude-code/harness-submit/checklist.md +1 -1
  215. package/harness/bundles/java/claude-code/harness-submit/reference.md +1 -1
  216. package/harness/bundles/java/claude-code/harness-sync/SKILL.md +1 -1
  217. package/harness/bundles/java/claude-code/protocols/evidence-based-reporting-protocol.md +1 -1
  218. package/harness/bundles/java/claude-code/protocols/ledger-protocol.md +8 -8
  219. package/harness/bundles/java/claude-code/protocols/sensitive-info-protocol.md +2 -2
  220. package/harness/bundles/java/claude-code/scripts/harness_context.py +71 -8
  221. package/harness/bundles/java/claude-code/scripts/harness_deploy.py +2 -2
  222. package/harness/bundles/java/claude-code/scripts/harness_events.py +17 -11
  223. package/harness/bundles/java/claude-code/scripts/harness_gate.py +95 -10
  224. package/harness/bundles/java/claude-code/scripts/harness_ledger.py +84 -4
  225. package/harness/bundles/java/claude-code/scripts/harness_profile.py +3 -3
  226. package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
  227. package/harness/bundles/java/codebuddy/CONTEXT.md +1 -1
  228. package/harness/bundles/java/codebuddy/README.md +36 -38
  229. package/harness/bundles/java/codebuddy/contracts/workflow-policy.json +0 -50
  230. package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +1 -1
  231. package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +1 -1
  232. package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +1 -1
  233. package/harness/bundles/java/codebuddy/harness-codebase-map/templates/TESTING.md +1 -1
  234. package/harness/bundles/java/codebuddy/harness-execute/SKILL.md +49 -17
  235. package/harness/bundles/java/codebuddy/{harness-run/checklist.md → harness-execute/coding-checklist.md} +6 -6
  236. package/harness/bundles/java/codebuddy/{harness-run/reference.md → harness-execute/coding-reference.md} +37 -37
  237. package/harness/bundles/java/codebuddy/harness-execute/protocols.md +141 -0
  238. package/harness/bundles/java/codebuddy/{harness-test/checklist.md → harness-execute/testing-checklist.md} +9 -9
  239. package/harness/bundles/java/codebuddy/{harness-test/pitfalls-java.md → harness-execute/testing-pitfalls-java.md} +2 -1
  240. package/harness/bundles/java/codebuddy/harness-execute/testing-pitfalls.md +307 -0
  241. package/harness/bundles/java/codebuddy/{harness-test/reference.md → harness-execute/testing-reference.md} +13 -13
  242. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +7 -1
  243. package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  244. package/harness/bundles/java/codebuddy/harness-package/SKILL.md +1 -1
  245. package/harness/bundles/java/codebuddy/harness-package/checklist.md +7 -7
  246. package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +3 -3
  247. package/harness/bundles/java/codebuddy/harness-plan/checklist.md +2 -1
  248. package/harness/bundles/java/codebuddy/harness-plan/reference.md +8 -0
  249. package/harness/bundles/java/codebuddy/harness-pull/SKILL.md +1 -1
  250. package/harness/bundles/java/codebuddy/harness-push/SKILL.md +1 -1
  251. package/harness/bundles/java/codebuddy/harness-review/SKILL.md +3 -3
  252. package/harness/bundles/java/codebuddy/harness-review/checklist.md +1 -1
  253. package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +1 -1
  254. package/harness/bundles/java/codebuddy/harness-submit/checklist.md +1 -1
  255. package/harness/bundles/java/codebuddy/harness-submit/reference.md +1 -1
  256. package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +1 -1
  257. package/harness/bundles/java/codebuddy/protocols/evidence-based-reporting-protocol.md +1 -1
  258. package/harness/bundles/java/codebuddy/protocols/ledger-protocol.md +8 -8
  259. package/harness/bundles/java/codebuddy/protocols/sensitive-info-protocol.md +2 -2
  260. package/harness/bundles/java/codebuddy/scripts/harness_context.py +71 -8
  261. package/harness/bundles/java/codebuddy/scripts/harness_deploy.py +2 -2
  262. package/harness/bundles/java/codebuddy/scripts/harness_events.py +17 -11
  263. package/harness/bundles/java/codebuddy/scripts/harness_gate.py +95 -10
  264. package/harness/bundles/java/codebuddy/scripts/harness_ledger.py +84 -4
  265. package/harness/bundles/java/codebuddy/scripts/harness_profile.py +3 -3
  266. package/harness/bundles/java/codex/.harness-build.json +1 -1
  267. package/harness/bundles/java/codex/CONTEXT.md +1 -1
  268. package/harness/bundles/java/codex/README.md +36 -38
  269. package/harness/bundles/java/codex/contracts/workflow-policy.json +0 -50
  270. package/harness/bundles/java/codex/harness-apidoc/SKILL.md +1 -1
  271. package/harness/bundles/java/codex/harness-archive/SKILL.md +1 -1
  272. package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +1 -1
  273. package/harness/bundles/java/codex/harness-codebase-map/templates/TESTING.md +1 -1
  274. package/harness/bundles/java/codex/harness-execute/SKILL.md +49 -17
  275. package/harness/bundles/java/codex/{harness-run/checklist.md → harness-execute/coding-checklist.md} +6 -6
  276. package/harness/bundles/java/codex/{harness-run/reference.md → harness-execute/coding-reference.md} +37 -37
  277. package/harness/bundles/java/codex/harness-execute/protocols.md +141 -0
  278. package/harness/bundles/java/codex/{harness-test/checklist.md → harness-execute/testing-checklist.md} +9 -9
  279. package/harness/bundles/java/codex/{harness-test/pitfalls-java.md → harness-execute/testing-pitfalls-java.md} +2 -1
  280. package/harness/bundles/java/codex/harness-execute/testing-pitfalls.md +307 -0
  281. package/harness/bundles/java/codex/{harness-test/reference.md → harness-execute/testing-reference.md} +13 -13
  282. package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +7 -1
  283. package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +1 -1
  284. package/harness/bundles/java/codex/harness-package/SKILL.md +1 -1
  285. package/harness/bundles/java/codex/harness-package/checklist.md +7 -7
  286. package/harness/bundles/java/codex/harness-plan/SKILL.md +3 -3
  287. package/harness/bundles/java/codex/harness-plan/checklist.md +2 -1
  288. package/harness/bundles/java/codex/harness-plan/reference.md +8 -0
  289. package/harness/bundles/java/codex/harness-pull/SKILL.md +1 -1
  290. package/harness/bundles/java/codex/harness-push/SKILL.md +1 -1
  291. package/harness/bundles/java/codex/harness-review/SKILL.md +3 -3
  292. package/harness/bundles/java/codex/harness-review/checklist.md +1 -1
  293. package/harness/bundles/java/codex/harness-submit/SKILL.md +1 -1
  294. package/harness/bundles/java/codex/harness-submit/checklist.md +1 -1
  295. package/harness/bundles/java/codex/harness-submit/reference.md +1 -1
  296. package/harness/bundles/java/codex/harness-sync/SKILL.md +1 -1
  297. package/harness/bundles/java/codex/protocols/evidence-based-reporting-protocol.md +1 -1
  298. package/harness/bundles/java/codex/protocols/ledger-protocol.md +8 -8
  299. package/harness/bundles/java/codex/protocols/sensitive-info-protocol.md +2 -2
  300. package/harness/bundles/java/codex/scripts/harness_context.py +71 -8
  301. package/harness/bundles/java/codex/scripts/harness_deploy.py +2 -2
  302. package/harness/bundles/java/codex/scripts/harness_events.py +17 -11
  303. package/harness/bundles/java/codex/scripts/harness_gate.py +95 -10
  304. package/harness/bundles/java/codex/scripts/harness_ledger.py +84 -4
  305. package/harness/bundles/java/codex/scripts/harness_profile.py +3 -3
  306. package/harness/bundles/java/cursor/.harness-build.json +1 -1
  307. package/harness/bundles/java/cursor/CONTEXT.md +1 -1
  308. package/harness/bundles/java/cursor/README.md +36 -38
  309. package/harness/bundles/java/cursor/contracts/workflow-policy.json +0 -50
  310. package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +1 -1
  311. package/harness/bundles/java/cursor/harness-archive/SKILL.md +1 -1
  312. package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +1 -1
  313. package/harness/bundles/java/cursor/harness-codebase-map/templates/TESTING.md +1 -1
  314. package/harness/bundles/java/cursor/harness-execute/SKILL.md +49 -17
  315. package/harness/bundles/java/cursor/{harness-run/checklist.md → harness-execute/coding-checklist.md} +6 -6
  316. package/harness/bundles/java/cursor/{harness-run/reference.md → harness-execute/coding-reference.md} +37 -37
  317. package/harness/bundles/java/cursor/harness-execute/protocols.md +141 -0
  318. package/harness/bundles/java/cursor/{harness-test/checklist.md → harness-execute/testing-checklist.md} +9 -9
  319. package/harness/bundles/java/cursor/{harness-test/pitfalls-java.md → harness-execute/testing-pitfalls-java.md} +2 -1
  320. package/harness/bundles/java/cursor/harness-execute/testing-pitfalls.md +307 -0
  321. package/harness/bundles/java/cursor/{harness-test/reference.md → harness-execute/testing-reference.md} +13 -13
  322. package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +7 -1
  323. package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +1 -1
  324. package/harness/bundles/java/cursor/harness-package/SKILL.md +1 -1
  325. package/harness/bundles/java/cursor/harness-package/checklist.md +7 -7
  326. package/harness/bundles/java/cursor/harness-plan/SKILL.md +3 -3
  327. package/harness/bundles/java/cursor/harness-plan/checklist.md +2 -1
  328. package/harness/bundles/java/cursor/harness-plan/reference.md +8 -0
  329. package/harness/bundles/java/cursor/harness-pull/SKILL.md +1 -1
  330. package/harness/bundles/java/cursor/harness-push/SKILL.md +1 -1
  331. package/harness/bundles/java/cursor/harness-review/SKILL.md +3 -3
  332. package/harness/bundles/java/cursor/harness-review/checklist.md +1 -1
  333. package/harness/bundles/java/cursor/harness-submit/SKILL.md +1 -1
  334. package/harness/bundles/java/cursor/harness-submit/checklist.md +1 -1
  335. package/harness/bundles/java/cursor/harness-submit/reference.md +1 -1
  336. package/harness/bundles/java/cursor/harness-sync/SKILL.md +1 -1
  337. package/harness/bundles/java/cursor/protocols/evidence-based-reporting-protocol.md +1 -1
  338. package/harness/bundles/java/cursor/protocols/ledger-protocol.md +8 -8
  339. package/harness/bundles/java/cursor/protocols/sensitive-info-protocol.md +2 -2
  340. package/harness/bundles/java/cursor/scripts/harness_context.py +71 -8
  341. package/harness/bundles/java/cursor/scripts/harness_deploy.py +2 -2
  342. package/harness/bundles/java/cursor/scripts/harness_events.py +17 -11
  343. package/harness/bundles/java/cursor/scripts/harness_gate.py +95 -10
  344. package/harness/bundles/java/cursor/scripts/harness_ledger.py +84 -4
  345. package/harness/bundles/java/cursor/scripts/harness_profile.py +3 -3
  346. package/harness/bundles/java/pi/.harness-build.json +1 -1
  347. package/harness/bundles/java/pi/CONTEXT.md +1 -1
  348. package/harness/bundles/java/pi/README.md +36 -38
  349. package/harness/bundles/java/pi/contracts/workflow-policy.json +0 -50
  350. package/harness/bundles/java/pi/harness-apidoc/SKILL.md +1 -1
  351. package/harness/bundles/java/pi/harness-archive/SKILL.md +1 -1
  352. package/harness/bundles/java/pi/harness-codebase-map/SKILL.md +1 -1
  353. package/harness/bundles/java/pi/harness-codebase-map/templates/TESTING.md +1 -1
  354. package/harness/bundles/java/pi/harness-execute/SKILL.md +49 -17
  355. package/harness/bundles/java/pi/harness-execute/coding-checklist.md +252 -0
  356. package/harness/bundles/java/pi/harness-execute/coding-reference.md +820 -0
  357. package/harness/bundles/java/pi/harness-execute/protocols.md +141 -0
  358. package/harness/bundles/java/pi/harness-execute/testing-checklist.md +320 -0
  359. package/harness/bundles/java/pi/harness-execute/testing-pitfalls-java.md +17 -0
  360. package/harness/bundles/java/pi/harness-execute/testing-pitfalls.md +307 -0
  361. package/harness/bundles/java/pi/harness-execute/testing-reference.md +792 -0
  362. package/harness/bundles/java/pi/harness-knowledge-ingest/SKILL.md +7 -1
  363. package/harness/bundles/java/pi/harness-knowledge-query/SKILL.md +1 -1
  364. package/harness/bundles/java/pi/harness-package/SKILL.md +1 -1
  365. package/harness/bundles/java/pi/harness-package/checklist.md +7 -7
  366. package/harness/bundles/java/pi/harness-plan/SKILL.md +3 -3
  367. package/harness/bundles/java/pi/harness-plan/checklist.md +2 -1
  368. package/harness/bundles/java/pi/harness-plan/reference.md +8 -0
  369. package/harness/bundles/java/pi/harness-pull/SKILL.md +1 -1
  370. package/harness/bundles/java/pi/harness-push/SKILL.md +1 -1
  371. package/harness/bundles/java/pi/harness-review/SKILL.md +3 -3
  372. package/harness/bundles/java/pi/harness-review/checklist.md +1 -1
  373. package/harness/bundles/java/pi/harness-submit/SKILL.md +1 -1
  374. package/harness/bundles/java/pi/harness-submit/checklist.md +1 -1
  375. package/harness/bundles/java/pi/harness-submit/reference.md +1 -1
  376. package/harness/bundles/java/pi/harness-sync/SKILL.md +1 -1
  377. package/harness/bundles/java/pi/protocols/evidence-based-reporting-protocol.md +1 -1
  378. package/harness/bundles/java/pi/protocols/ledger-protocol.md +8 -8
  379. package/harness/bundles/java/pi/protocols/sensitive-info-protocol.md +2 -2
  380. package/harness/bundles/java/pi/scripts/harness_context.py +71 -8
  381. package/harness/bundles/java/pi/scripts/harness_deploy.py +2 -2
  382. package/harness/bundles/java/pi/scripts/harness_events.py +17 -11
  383. package/harness/bundles/java/pi/scripts/harness_gate.py +95 -10
  384. package/harness/bundles/java/pi/scripts/harness_ledger.py +84 -4
  385. package/harness/bundles/java/pi/scripts/harness_profile.py +3 -3
  386. package/harness/manifests/general/claude-code.json +62 -70
  387. package/harness/manifests/general/codebuddy.json +62 -70
  388. package/harness/manifests/general/codex.json +62 -70
  389. package/harness/manifests/general/cursor.json +62 -70
  390. package/harness/manifests/general/pi.json +62 -70
  391. package/harness/manifests/java/claude-code.json +65 -73
  392. package/harness/manifests/java/codebuddy.json +65 -73
  393. package/harness/manifests/java/codex.json +65 -73
  394. package/harness/manifests/java/cursor.json +65 -73
  395. package/harness/manifests/java/pi.json +65 -73
  396. package/hunter-workflow-family.json +2 -2
  397. package/package.json +1 -1
  398. package/harness/bundles/general/claude-code/harness-run/SKILL.md +0 -207
  399. package/harness/bundles/general/claude-code/harness-test/SKILL.md +0 -270
  400. package/harness/bundles/general/claude-code/harness-test/pitfalls-java.md +0 -14
  401. package/harness/bundles/general/codebuddy/harness-run/SKILL.md +0 -188
  402. package/harness/bundles/general/codebuddy/harness-test/SKILL.md +0 -250
  403. package/harness/bundles/general/codebuddy/harness-test/pitfalls-java.md +0 -14
  404. package/harness/bundles/general/codex/harness-run/SKILL.md +0 -188
  405. package/harness/bundles/general/codex/harness-test/SKILL.md +0 -250
  406. package/harness/bundles/general/codex/harness-test/pitfalls-java.md +0 -14
  407. package/harness/bundles/general/cursor/harness-run/SKILL.md +0 -188
  408. package/harness/bundles/general/cursor/harness-test/SKILL.md +0 -250
  409. package/harness/bundles/general/cursor/harness-test/pitfalls-java.md +0 -14
  410. package/harness/bundles/general/pi/harness-run/SKILL.md +0 -188
  411. package/harness/bundles/general/pi/harness-run/checklist.md +0 -279
  412. package/harness/bundles/general/pi/harness-run/protocols.md +0 -141
  413. package/harness/bundles/general/pi/harness-run/reference.md +0 -886
  414. package/harness/bundles/general/pi/harness-test/SKILL.md +0 -250
  415. package/harness/bundles/general/pi/harness-test/checklist.md +0 -359
  416. package/harness/bundles/general/pi/harness-test/pitfalls-java.md +0 -14
  417. package/harness/bundles/general/pi/harness-test/pitfalls.md +0 -307
  418. package/harness/bundles/general/pi/harness-test/reference.md +0 -880
  419. package/harness/bundles/java/claude-code/harness-run/SKILL.md +0 -225
  420. package/harness/bundles/java/claude-code/harness-run/protocols.md +0 -141
  421. package/harness/bundles/java/claude-code/harness-test/SKILL.md +0 -284
  422. package/harness/bundles/java/claude-code/harness-test/pitfalls.md +0 -307
  423. package/harness/bundles/java/codebuddy/harness-run/SKILL.md +0 -206
  424. package/harness/bundles/java/codebuddy/harness-run/protocols.md +0 -141
  425. package/harness/bundles/java/codebuddy/harness-test/SKILL.md +0 -264
  426. package/harness/bundles/java/codebuddy/harness-test/pitfalls.md +0 -307
  427. package/harness/bundles/java/codex/harness-run/SKILL.md +0 -206
  428. package/harness/bundles/java/codex/harness-run/protocols.md +0 -141
  429. package/harness/bundles/java/codex/harness-test/SKILL.md +0 -264
  430. package/harness/bundles/java/codex/harness-test/pitfalls.md +0 -307
  431. package/harness/bundles/java/cursor/harness-run/SKILL.md +0 -206
  432. package/harness/bundles/java/cursor/harness-run/protocols.md +0 -141
  433. package/harness/bundles/java/cursor/harness-test/SKILL.md +0 -264
  434. package/harness/bundles/java/cursor/harness-test/pitfalls.md +0 -307
  435. package/harness/bundles/java/pi/harness-run/SKILL.md +0 -206
  436. package/harness/bundles/java/pi/harness-run/checklist.md +0 -252
  437. package/harness/bundles/java/pi/harness-run/protocols.md +0 -141
  438. package/harness/bundles/java/pi/harness-run/reference.md +0 -820
  439. package/harness/bundles/java/pi/harness-test/SKILL.md +0 -264
  440. package/harness/bundles/java/pi/harness-test/checklist.md +0 -320
  441. package/harness/bundles/java/pi/harness-test/pitfalls-java.md +0 -16
  442. package/harness/bundles/java/pi/harness-test/pitfalls.md +0 -307
  443. package/harness/bundles/java/pi/harness-test/reference.md +0 -792
  444. /package/harness/bundles/general/claude-code/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
  445. /package/harness/bundles/general/codebuddy/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
  446. /package/harness/bundles/general/codex/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
  447. /package/harness/bundles/general/cursor/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
  448. /package/harness/bundles/general/pi/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
  449. /package/harness/bundles/java/claude-code/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
  450. /package/harness/bundles/java/codebuddy/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
  451. /package/harness/bundles/java/codex/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
  452. /package/harness/bundles/java/cursor/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
  453. /package/harness/bundles/java/pi/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
@@ -2220,7 +2220,7 @@ def _validate_scenario_coverage(
2220
2220
  is due by that phase are required to carry passing receipts. Scenarios
2221
2221
  owned by a later phase (e.g. `ownerPhase=test` at `run` close) are
2222
2222
  reported under `deferred` instead of blocking the close — this matches the
2223
- documented hand-off rule in harness-run/SKILL.md ("ownerPhase=test 按计划移交").
2223
+ documented hand-off rule in harness-execute/SKILL.md ("ownerPhase=test 按计划移交").
2224
2224
  """
2225
2225
  manifest_path = change_dir / "meta" / "scenario-manifest.json"
2226
2226
  if not manifest_path.is_file():
@@ -2594,6 +2594,64 @@ def _normalize_gate_phase(args: argparse.Namespace, as_json: bool) -> int | None
2594
2594
  )
2595
2595
 
2596
2596
 
2597
+ def _verification_target_coverage_warning(
2598
+ change_dir: Path, phase: str
2599
+ ) -> dict[str, Any] | None:
2600
+ """E-5:场景表引用未声明的 verification target 时提前 WARN。
2601
+
2602
+ 场景带 execution_level(unit/integration/…),但 build-profile 的
2603
+ verificationGraph.targets 未声明对应 target 时,问题要等到 ledger record
2604
+ 才以 unsupported verification 报错——太迟。gate begin 提前列出待补清单。
2605
+ 映射约定:unit → unitTest;其他 level → 任一以其名开头的 target。
2606
+ """
2607
+ if phase != "execute":
2608
+ return None
2609
+ manifest_path = change_dir / "meta" / "scenario-manifest.json"
2610
+ profile_path = change_dir / "meta" / "build-profile.json"
2611
+ if not profile_path.is_file():
2612
+ # build-profile 常规位置在项目 .harness/config/;change meta 下优先
2613
+ profile_path = change_dir.parents[2] / ".harness" / "config" / "build-profile.json"
2614
+ if not manifest_path.is_file() or not profile_path.is_file():
2615
+ return None
2616
+ try:
2617
+ manifest = json.loads(manifest_path.read_text(encoding="utf-8-sig"))
2618
+ profile = json.loads(profile_path.read_text(encoding="utf-8-sig"))
2619
+ except (OSError, json.JSONDecodeError):
2620
+ return None
2621
+ content = manifest.get("content") if isinstance(manifest, dict) else None
2622
+ scenarios = content.get("scenarios") if isinstance(content, dict) else None
2623
+ if not isinstance(scenarios, list):
2624
+ return None
2625
+ levels = sorted({
2626
+ str(s.get("execution_level")).strip()
2627
+ for s in scenarios
2628
+ if isinstance(s, dict) and str(s.get("execution_level") or "").strip()
2629
+ })
2630
+ graph = profile.get("verificationGraph")
2631
+ targets = graph.get("targets") if isinstance(graph, dict) else None
2632
+ target_names = set(targets.keys()) if isinstance(targets, dict) else set()
2633
+ uncovered = [
2634
+ level for level in levels
2635
+ if level != "unit"
2636
+ and not any(name.lower().startswith(level.lower()) for name in target_names)
2637
+ ]
2638
+ # unit 场景由 unitTest 覆盖;只在完全没有 unitTest 时才算缺口
2639
+ if "unit" in levels and "unitTest" not in target_names:
2640
+ uncovered.append("unit(→unitTest)")
2641
+ if not uncovered:
2642
+ return None
2643
+ return {
2644
+ "code": "VERIFICATION_TARGETS_UNDECLARED",
2645
+ "message": (
2646
+ "场景表涉及未声明的验证级别: " + ", ".join(uncovered) +
2647
+ ";ledger record 将报 unsupported verification。请在 "
2648
+ ".harness/config/build-profile.json 的 verificationGraph.targets "
2649
+ "声明对应 target(如 integrationTest)"
2650
+ ),
2651
+ "uncoveredLevels": uncovered,
2652
+ }
2653
+
2654
+
2597
2655
  def cmd_begin(args: argparse.Namespace) -> int:
2598
2656
  as_json = bool(args.json)
2599
2657
  normalized = _normalize_gate_phase(args, as_json)
@@ -2911,6 +2969,14 @@ def cmd_begin(args: argparse.Namespace) -> int:
2911
2969
  )
2912
2970
  raise
2913
2971
 
2972
+ coverage_warning = _verification_target_coverage_warning(change_dir, args.phase)
2973
+ if coverage_warning is not None:
2974
+ gate_warnings.append(coverage_warning)
2975
+ print(
2976
+ f"[harness-gate] WARNING {coverage_warning['code']}: "
2977
+ f"{coverage_warning['message']}",
2978
+ file=sys.stderr,
2979
+ )
2914
2980
  payload = {
2915
2981
  "ok": True,
2916
2982
  "code": "PHASE_BEGUN",
@@ -3800,11 +3866,25 @@ def cmd_classify(args: argparse.Namespace) -> int:
3800
3866
  payload["classifiedAt"] = classified_at
3801
3867
 
3802
3868
  if change_dir is not None and change_dir.is_dir():
3803
- policy_doc = gate_policy_document(payload)
3804
- policy_path = change_dir / "meta" / "gate-policy.json"
3805
- _write_json(policy_path, policy_doc)
3806
- payload["policyPersisted"] = True
3807
- payload["policyPath"] = str(policy_path)
3869
+ finalized = (change_dir / "meta" / "plan-profile.json").is_file()
3870
+ if finalized and not getattr(args, "force", False):
3871
+ # P1-1:classify 形态像只读查询,实际是写操作。已发布的 change
3872
+ # 被误跑 classify 会覆盖 configure-plan 写入的工作副本(2026-08-30
3873
+ # demo-datasource 实测 plannedPhases 被清)。默认拒写并显式提示。
3874
+ payload["policyPersisted"] = False
3875
+ payload["warning"] = (
3876
+ "change 已发布(meta/plan-profile.json 存在),classify 不再重写 "
3877
+ "meta/gate-policy.json 工作副本;确需重算请显式传 --force"
3878
+ )
3879
+ payload["writeGuarded"] = True
3880
+ else:
3881
+ policy_doc = gate_policy_document(payload)
3882
+ policy_path = change_dir / "meta" / "gate-policy.json"
3883
+ _write_json(policy_path, policy_doc)
3884
+ payload["policyPersisted"] = True
3885
+ payload["policyPath"] = str(policy_path)
3886
+ if finalized:
3887
+ payload["warning"] = "--force:已发布 change 的工作副本已被重写"
3808
3888
  else:
3809
3889
  payload["policyPersisted"] = False
3810
3890
  payload["warning"] = (
@@ -3930,7 +4010,7 @@ def build_parser() -> argparse.ArgumentParser:
3930
4010
 
3931
4011
  p_begin = sub.add_parser("begin", parents=[shared])
3932
4012
  p_begin.add_argument("--phase", required=True)
3933
- p_begin.add_argument("--change", default=None)
4013
+ p_begin.add_argument("--change", "--change-dir", dest="change", default=None)
3934
4014
  p_begin.add_argument(
3935
4015
  "--project",
3936
4016
  default=None,
@@ -3960,7 +4040,7 @@ def build_parser() -> argparse.ArgumentParser:
3960
4040
  help="关闭阶段门禁(关门只调本命令;上下文交接由 --to-phase 内联完成,不要再单独调 harness_context.py close)",
3961
4041
  )
3962
4042
  p_close.add_argument("--phase", required=True)
3963
- p_close.add_argument("--change", default=None)
4043
+ p_close.add_argument("--change", "--change-dir", dest="change", default=None)
3964
4044
  p_close.add_argument(
3965
4045
  "--project",
3966
4046
  default=None,
@@ -3985,7 +4065,7 @@ def build_parser() -> argparse.ArgumentParser:
3985
4065
 
3986
4066
  p_classify = sub.add_parser("classify", parents=[shared])
3987
4067
  p_classify.add_argument("--project", default=None, type=Path, help=_PROJECT_ROOT_HELP)
3988
- p_classify.add_argument("--change", default=None)
4068
+ p_classify.add_argument("--change", "--change-dir", dest="change", default=None)
3989
4069
  p_classify.add_argument("--stage", required=True, choices=["plan", "post-run"])
3990
4070
  p_classify.add_argument(
3991
4071
  "--tier-override",
@@ -3993,13 +4073,18 @@ def build_parser() -> argparse.ArgumentParser:
3993
4073
  choices=["fast", "standard", "full"],
3994
4074
  )
3995
4075
  p_classify.add_argument("--override-by", default="user")
4076
+ p_classify.add_argument(
4077
+ "--force",
4078
+ action="store_true",
4079
+ help="已发布 change 也强制重写 gate-policy.json 工作副本",
4080
+ )
3996
4081
  p_classify.set_defaults(func=cmd_classify)
3997
4082
 
3998
4083
  p_checkpoint = sub.add_parser("checkpoint", parents=[shared])
3999
4084
  p_checkpoint.add_argument("--project", default=None, type=Path, help=_PROJECT_ROOT_HELP)
4000
4085
  p_checkpoint.add_argument("checkpoint_action", choices=["status", "approve"])
4001
4086
  p_checkpoint.add_argument("--id", required=True)
4002
- p_checkpoint.add_argument("--change", default=None)
4087
+ p_checkpoint.add_argument("--change", "--change-dir", dest="change", default=None)
4003
4088
  p_checkpoint.add_argument("--reviewer", default=None)
4004
4089
  p_checkpoint.set_defaults(func=cmd_checkpoint)
4005
4090
 
@@ -1624,6 +1624,15 @@ def evidence_summary(entry: dict[str, Any]) -> dict[str, Any]:
1624
1624
  }
1625
1625
 
1626
1626
 
1627
+ def _is_relative_to(path: Path, base: Path) -> bool:
1628
+ """Python 3.9 兼容的 is_relative_to。"""
1629
+ try:
1630
+ path.relative_to(base)
1631
+ return True
1632
+ except ValueError:
1633
+ return False
1634
+
1635
+
1627
1636
  def _nonempty_str(value: Any) -> bool:
1628
1637
  return isinstance(value, str) and bool(value.strip())
1629
1638
 
@@ -3056,6 +3065,12 @@ def cmd_record(args: argparse.Namespace) -> int:
3056
3065
  "scenarioCoverage": entry.get("scenarioCoverage"),
3057
3066
  "migrationReceipt": migration_receipt,
3058
3067
  }
3068
+ zero_warn = _zero_tests_with_selector_warning(
3069
+ str(args.command), args.evidence, project_root
3070
+ )
3071
+ if zero_warn is not None:
3072
+ payload["warnings"] = [zero_warn]
3073
+ print(f"[harness-ledger] WARNING {zero_warn}", file=sys.stderr)
3059
3074
  emit_compact_or_verbose(
3060
3075
  payload, as_json=as_json, verbose=verbose,
3061
3076
  compact_fn=_compact_record_payload,
@@ -3063,6 +3078,47 @@ def cmd_record(args: argparse.Namespace) -> int:
3063
3078
  return 0
3064
3079
 
3065
3080
 
3081
+ def _zero_tests_with_selector_warning(
3082
+ command: str, evidence: str | None, project_root: Path | None
3083
+ ) -> str | None:
3084
+ """选择器存在却 0 命中 → WARN(E-2)。
3085
+
3086
+ surefire 插件级 ``<excludedGroups>`` 会压过命令行空值覆盖,
3087
+ `-Dgroups=X` 选择器 0 命中仍 exit 0——只看退出码就是假阳性
3088
+ (2026-08-30 demo-datasource 集成测试静默 0 执行实测)。
3089
+ 证据文本出现 Tests run: 0 且命令含选择器时,record 给出醒目警告。
3090
+ """
3091
+ if not evidence:
3092
+ return None
3093
+ selectors = ("-Dgroups=", "-Dtest=", "--groups", "--filter", "-DfailIfNoSpecifiedTests")
3094
+ if not any(selector in str(command) for selector in selectors):
3095
+ return None
3096
+ candidates = [Path(evidence)]
3097
+ if project_root is not None and not Path(evidence).is_absolute():
3098
+ candidates.insert(0, project_root / evidence)
3099
+ text: str | None = None
3100
+ for candidate in candidates:
3101
+ try:
3102
+ if candidate.is_file() and candidate.stat().st_size <= 4 * 1024 * 1024:
3103
+ text = candidate.read_text(encoding="utf-8", errors="replace")
3104
+ break
3105
+ except OSError:
3106
+ continue
3107
+ if text is None:
3108
+ return None
3109
+ zero = re.search(
3110
+ r"Tests run:\s*0,\s*Failures:\s*0,\s*Errors:\s*0", text
3111
+ )
3112
+ ran_something = re.search(r"Tests run:\s*[1-9]", text)
3113
+ if zero is not None and ran_something is None:
3114
+ return (
3115
+ "ZERO_TESTS_WITH_SELECTOR: 命令含测试选择器但 Tests run=0(exit 0 不代表通过);"
3116
+ "常见于 surefire 插件级 excludedGroups 压过命令行覆盖——检查 pom 是否写死 "
3117
+ "<excludedGroups>(应改为 ${excludedGroups} 属性占位)"
3118
+ )
3119
+ return None
3120
+
3121
+
3066
3122
  def cmd_scenario_receipt_template(args: argparse.Namespace) -> int:
3067
3123
  """Emit a schema-v2 receipt skeleton built from the scenario manifest.
3068
3124
 
@@ -3202,8 +3258,32 @@ def cmd_scenario_receipt_template(args: argparse.Namespace) -> int:
3202
3258
  return 0
3203
3259
  out_path = Path(str(out_raw)).expanduser()
3204
3260
  if not out_path.is_absolute():
3205
- out_path = change_dir / out_path
3261
+ # 防双重拼接(E-1):调用方按 CLI 惯例传 cwd 相对路径时(如
3262
+ # .harness/changes/<cn>/evidence/x.json),直接拼 change_dir 会产生嵌套
3263
+ # 幽灵目录。相对路径若以 change-dir 自身前缀开头,按 cwd 解析;否则按
3264
+ # 文档规则相对 change-dir 解析。
3265
+ cwd = Path.cwd().resolve()
3266
+ change_resolved = change_dir.resolve()
3267
+ if _is_relative_to(change_resolved, cwd):
3268
+ change_rel = change_resolved.relative_to(cwd)
3269
+ if out_path.parts[: len(change_rel.parts)] == change_rel.parts:
3270
+ out_path = cwd / out_path
3271
+ else:
3272
+ out_path = change_dir / out_path
3273
+ else:
3274
+ out_path = change_dir / out_path
3206
3275
  out_path = out_path.resolve()
3276
+ change_resolved = change_dir.resolve()
3277
+ cwd = Path.cwd().resolve()
3278
+ if not (
3279
+ _is_relative_to(out_path, change_resolved)
3280
+ or _is_relative_to(out_path, cwd)
3281
+ ):
3282
+ return emit_error(
3283
+ "--out 解析后越出项目目录: " + str(out_path),
3284
+ as_json=as_json,
3285
+ error_code="SCENARIO_RECEIPT_OUT_OF_PROJECT",
3286
+ )
3207
3287
  try:
3208
3288
  out_path.parent.mkdir(parents=True, exist_ok=True)
3209
3289
  out_path.write_text(body, encoding="utf-8", newline="\n")
@@ -3321,7 +3401,7 @@ def build_parser() -> argparse.ArgumentParser:
3321
3401
  p_hash.set_defaults(func=cmd_hash)
3322
3402
 
3323
3403
  p_reuse = sub.add_parser("can-reuse", parents=[shared_json], help="decide whether a verification can be reused")
3324
- p_reuse.add_argument("--change-dir", required=True)
3404
+ p_reuse.add_argument("--change-dir", "--change", dest="change_dir", required=True)
3325
3405
  p_reuse.add_argument(
3326
3406
  "--verification",
3327
3407
  required=True,
@@ -3389,7 +3469,7 @@ def build_parser() -> argparse.ArgumentParser:
3389
3469
  p_reuse.set_defaults(func=cmd_can_reuse)
3390
3470
 
3391
3471
  p_record = sub.add_parser("record", parents=[shared_json], help="write validation result into ledger")
3392
- p_record.add_argument("--change-dir", required=True)
3472
+ p_record.add_argument("--change-dir", "--change", dest="change_dir", required=True)
3393
3473
  p_record.add_argument("--verification", required=True)
3394
3474
  p_record.add_argument("--status", required=True)
3395
3475
  p_record.add_argument("--command", required=True)
@@ -3515,7 +3595,7 @@ def build_parser() -> argparse.ArgumentParser:
3515
3595
  "pre-filled from meta/scenario-manifest.json"
3516
3596
  ),
3517
3597
  )
3518
- p_receipt.add_argument("--change-dir", required=True)
3598
+ p_receipt.add_argument("--change-dir", "--change", dest="change_dir", required=True)
3519
3599
  p_receipt.add_argument(
3520
3600
  "--scenario-ids",
3521
3601
  required=True,
@@ -854,13 +854,13 @@ def _node_commands(project: Path) -> dict[str, Any]:
854
854
  "apps/*/tests/**/*.tsx",
855
855
  ]
856
856
  # harness dogfood: canonical Python + .mjs sources feed npm run check (vitest
857
- # imports harness-test/scripts; smoke:pack runs sync-harness.mjs).
857
+ # imports harness-execute/scripts; smoke:pack runs sync-harness.mjs).
858
858
  if (project / "harness").is_dir():
859
859
  inputs.extend(
860
860
  [
861
861
  "harness/scripts/*.py",
862
- "harness/harness-test/scripts/*.mjs",
863
- "harness/harness-test/scripts/tests/*.mjs",
862
+ "harness/harness-execute/scripts/*.mjs",
863
+ "harness/harness-execute/scripts/tests/*.mjs",
864
864
  "scripts/*.mjs",
865
865
  ]
866
866
  )
@@ -2,5 +2,5 @@
2
2
  "schemaVersion": 1,
3
3
  "overlay": "java",
4
4
  "agent": "claude-code",
5
- "coreHash": "c74ed00e15a0ea44"
5
+ "coreHash": "9fc7d572f47e4634"
6
6
  }
@@ -17,7 +17,7 @@ _Avoid_: 外部依赖, 必需插件
17
17
  _Avoid_: 运行时增强, 降级分支, 硬依赖
18
18
 
19
19
  **变更簇**:
20
- 围绕同一业务行为或同一验证目标的一组任务。变更簇是 `/harness-run` 执行 RED→GREEN→REFACTOR 的基本单位。
20
+ 围绕同一业务行为或同一验证目标的一组任务。变更簇是 `/harness-execute` 执行 RED→GREEN→REFACTOR 的基本单位。
21
21
  _Avoid_: 小任务, 单步任务
22
22
 
23
23
  **自适应执行参考**:
@@ -4,7 +4,7 @@
4
4
 
5
5
  本包为通用 harness-skills,技术栈无关:构建/测试/打包命令按目标项目技术栈解析(Java=Maven、前端=npm、Python=pytest 等,详见项目 CLAUDE.md 或 `.harness/config/`)。文中 Java/Maven、Mapper/Controller/VO、Spring Boot、jar/war 等措辞仅为示例,不影响流程骨架的通用性。
6
6
 
7
- 环境、CodeGraph 等外部增强检查应在 `npx hunter-harness` 初始化阶段完成。Superpowers / grill-me 等外部技能只作为方法论来源与人工参考;`harness-plan`、`harness-run`、`harness-review` 已内化关键能力,不再运行时依赖外部 skill。
7
+ 环境、CodeGraph 等外部增强检查应在 `npx hunter-harness` 初始化阶段完成。Superpowers / grill-me 等外部技能只作为方法论来源与人工参考;`harness-plan`、`harness-execute`、`harness-review` 已内化关键能力,不再运行时依赖外部 skill。
8
8
 
9
9
 
10
10
  > 一套完整的 AI 辅助开发 Skill,覆盖从上下文同步到代码提交的全流程。
@@ -49,10 +49,9 @@
49
49
  | Skill | allowed-tools | disallowed-tools |
50
50
  |-------|---------------|------------------|
51
51
  | harness-plan | `[Read, Glob, Grep, Edit, Write, Agent, Bash(powershell.exe:*)]` | `Bash(git *)`, `Bash(mvn *)`, 等 14 项普通 Bash 命令 |
52
- | harness-run | `[Read, Edit, Write, Glob, Grep, Bash(powershell.exe:*)]` | 同上 |
52
+ | harness-execute | `[Read, Edit, Write, Glob, Grep, Agent, Bash(powershell.exe:*)]` | 同上 + `Bash(node *)` |
53
53
  | harness-submit | `[Bash(powershell.exe:*), Read, Write, Edit, Glob, Grep]` | 同上 |
54
54
  | harness-archive | `[Read, Edit, Write, Glob, Grep, Bash(powershell.exe:*)]` | 同上 |
55
- | harness-test | `[Read, Glob, Grep, Write, Edit, Agent, Bash(powershell.exe:*)]` | 同上 + `Bash(node *)` |
56
55
  | harness-review | `[Read, Write, Edit, Glob, Grep, Agent, Bash(powershell.exe:*)]` | 同上 |
57
56
  | harness-sync | `[Read, Glob, Grep, Edit, Write, Bash(powershell.exe:*)]` | 同上 |
58
57
  | harness-codebase-map | `[Read, Glob, Grep, Write, Edit, Agent, Bash(powershell.exe:*)]` | 同上 |
@@ -103,18 +102,18 @@
103
102
  │ │ └── <change-name>-test-scenarios.md # 测试场景表(4维度覆盖)
104
103
  │ ├── evidence/ # 验证证据
105
104
  │ │ ├── verification-ledger.json # 验证账本(compile/unit/api 可复用结果)
106
- │ │ └── run-task-status.md # 任务执行状态(harness-run 持久化产出)
105
+ │ │ └── run-task-status.md # 任务执行状态(harness-execute 持久化产出)
107
106
  │ ├── reports/ # 报告
108
107
  │ │ ├── test/
109
- │ │ │ └── test-report-YYYYMMDD-HHmm.md # harness-test 产出(时间戳区分多次运行)
108
+ │ │ │ └── test-report-YYYYMMDD-HHmm.md # harness-execute 产出(时间戳区分多次运行)
110
109
  │ │ └── review/
111
110
  │ │ ├── review-report-YYYYMMDD-HHmm.md # harness-review 产出(时间戳区分多次运行)
112
111
  │ │ └── fixback-YYYYMMDD-HHmm.md # RED/YELLOW 修复反馈(按需)
113
112
  │ ├── sqls/
114
- │ │ └── V<version>__<desc>.sql # 数据库迁移脚本(harness-run 产出)
113
+ │ │ └── V<version>__<desc>.sql # 数据库迁移脚本(harness-execute 产出)
115
114
  │ ├── scripts/ # 固定脚本和本次运行脚本
116
115
  │ ├── runtime/ # 运行时临时文件(不提交)
117
- │ │ ├── api-test-runner.mjs # 接口测试执行器脚本(harness-test 产出)
116
+ │ │ ├── api-test-runner.mjs # 接口测试执行器脚本(harness-execute 产出)
118
117
  │ │ ├── api-test-results.json # runner 输出的结构化结果
119
118
  │ │ └── credential-cache.json # 认证凭证缓存(旧名 token-cache.json 兼容读取)
120
119
  │ └── backups/
@@ -186,16 +185,16 @@ harness-skills/
186
185
  │ ├── checklist.md # 阶段检查清单
187
186
  │ ├── protocols.md # 原生澄清/有限盘问/任务拆分协议
188
187
  │ └── reference.md # 详细模板和规则
189
- ├── harness-run/
190
- │ ├── SKILL.md # TDD 编码循环
191
- │ ├── checklist.md # 编码步骤检查清单
188
+ ├── harness-execute/
189
+ │ ├── SKILL.md # execute 阶段:编码(变更簇 TDD)+ 验证(单元/接口/兼容)
192
190
  │ ├── protocols.md # 原生 TDD / 变更簇审查协议
193
- └── reference.md # 编译失败策略 + TDD 降级 + 编码约束
194
- ├── harness-test/
195
- │ ├── SKILL.md # 测试执行 + 避坑规则索引
196
- │ ├── checklist.md # Phase 0 环境准备 7 项检查
197
- │ ├── reference.md # API 测试细节 + 响应验证
198
- └── pitfalls.md # 30 条避坑规则(详细说明)
191
+ ├── coding-reference.md # 编译失败策略 + TDD 降级 + 编码约束
192
+ ├── coding-checklist.md # 编码步骤检查清单
193
+ │ ├── testing-reference.md # API 测试细节 + 响应验证 + 执行器模板
194
+ │ ├── testing-checklist.md # Phase 0 环境准备 7 项检查
195
+ │ ├── testing-pitfalls.md # 30 条避坑规则(详细说明)
196
+ ├── testing-pitfalls-java.md # Java 专项避坑(java profile 由 overlay 覆盖)
197
+ │ └── scripts/ # runtime-helpers.mjs(BOM-safe JSON 等运行时辅助)
199
198
  ├── harness-review/
200
199
  │ ├── SKILL.md # 6 维度代码审查
201
200
  │ ├── checklist.md # 6 维度详细检查项
@@ -220,15 +219,14 @@ harness-skills/
220
219
  | harness-sync | `/harness-sync` | 10 项元数据检查(7 核心 + 3 辅助) | 初始化检查 | ✅ | 控制台报告 + 自动更新 |
221
220
  | harness-codebase-map | `/harness-codebase-map` | 生成代码库地图(7 类文档 + summary + manifest) | `sync`/独立 | ✅ | `.harness/codebase/map/` |
222
221
  | harness-plan | `/harness-plan` | 需求→设计→任务拆分→**测试场景表** + 自动命名变更名 | `sync` | 手动 | `.harness/changes/<cn>/plans/` |
223
- | harness-run | `/harness-run` | TDD 循环 变更簇编码 | `plan` | 手动 | `.harness/changes/<cn>/sqls/` |
224
- | harness-test | `/harness-test` | 单元测试+接口测试+30条避坑 | `run` | 手动 | `.harness/changes/<cn>/reports/test/` |
225
- | harness-review | `/harness-review` | 6维度参考性审查(不阻塞后续流程) | `test` | 手动 | `.harness/changes/<cn>/reports/review/` |
222
+ | harness-execute | `/harness-execute` | 变更簇 TDD 编码 + 单元/接口测试 + 数据兼容验证 | `plan` | 手动 | `.harness/changes/<cn>/sqls/`、`reports/test/` |
223
+ | harness-review | `/harness-review` | 6维度参考性审查(不阻塞后续流程) | `execute` | 手动 | `.harness/changes/<cn>/reports/review/` |
226
224
  | harness-submit | `/harness-submit` 或 `/harness-merge`(别名) | commit+push(主目录)/ worktree:本地 commit→--no-ff 合并→push 主分支 | `review` | 手动 | ledger `mergeFinalHash` + 控制台报告 |
227
225
  | harness-archive | `/harness-archive` | 归档产出到 archive/YYYY-MM-DD-<cn>,释放工作区 | `submit` | 手动 | `.harness/archive/YYYY-MM-DD-<cn>/` |
228
226
  | harness-knowledge-query | `/harness-knowledge-query` | 只查询平台语义知识;无本地索引或离线回退 | 独立 | ✅ | CLI JSON(不落本地知识文件) |
229
227
  | harness-knowledge-ingest | `/harness-knowledge-ingest` | 确认归档 ZIP 已由平台保存、解包并 ingest | `archive` | ✅ | 服务端 package/knowledge 收据 |
230
228
 
231
- > 生命周期 skill(plan → runtest → review → submit → archive)为**手动触发**:单阶段结束后停止,不自动接续下一阶段(已设 `disable-model-invocation`)。sync / codebase-map / knowledge 等辅助 skill 仍可按需被调用。`harness-run`、`harness-submit`、`harness-archive` 涉及 git 写操作、文件移动或归档,调用前必须确保前置条件已满足。
229
+ > 生命周期 skill(plan → execute → review → submit → archive)为**手动触发**:单阶段结束后停止,不自动接续下一阶段(已设 `disable-model-invocation`)。2026-08 起 run+test 合并为 execute,0.4.9(workflow-harness)起 `/harness-run`、`/harness-test` 入口移除。sync / codebase-map / knowledge 等辅助 skill 仍可按需被调用。`harness-execute`、`harness-submit`、`harness-archive` 涉及 git 写操作、文件移动或归档,调用前必须确保前置条件已满足。
232
230
  > `<cn>` = change-name,由 harness-plan 阶段7确定。其他 skill 自动扫描未归档变更定位。
233
231
  > 门禁默认 `gate_severity_mode=lenient`(可再生 soft site → WARN);发布阶段与 3 类硬不变量仍 fail-closed。可用 `HUNTER_HARNESS_GATE_MODE` 或 `gate-policy.json` 的 `severityMode` 强制 `strict`。
234
232
 
@@ -262,13 +260,13 @@ harness-skills/
262
260
  | **plan 阶段 3** | 默认主会话 CodeGraph/Read inline 探索;仅高复杂度且准备委派固定 agent 时单次预检,失败或无效返回立即 inline,不 retry |
263
261
  | **plan 阶段 4/6** | 原生规划协议必须记录风险/复用/替代方案/推荐方案/关键决策,以及任务拆分摘要 |
264
262
  | **plan 阶段 5** | 设计文档自审结果必须展示给用户;测试场景表未覆盖维度必须标记为 ⚠️ 缺口,不得全部 ✅ |
265
- | **run 步骤 0** | 任何代码修改前必须先向 `events.ndjson` 追加 `phase.start`;执行日志由阶段结束事件自动渲染 |
266
- | **run 轻量验证** | `/harness-run` 默认只做开发反馈:TDD RED/GREEN + REFACTOR + 构建命令增量编译(Java 的 `mvn compile -pl <module>` 等)+ 关门检查 + 写 verification-ledger;除非改了公共模块/数据访问层/sql/权限认证/接口层/数据契约 或用户要求 full-run-validation 或不打算继续 `/harness-test`,否则不默认跑全量测试命令(Java 的 `mvn test` 等)。若跑了全量测试必须写入 ledger 供 test/submit 复用 |
267
- | **run TDD 降级** | 输出必须写"🟡 静态逻辑验证通过,未执行真实单元测试",**禁止写"测试全部通过"**;降级标注写在执行日志和覆盖报告中,**不污染业务代码注释**;记录三项:降级原因、静态验证场景列表、待部署后验证场景列表 |
268
- | **test ledger 复用** | Phase 1 单元测试前先读 `verification-ledger.json`:若 run 阶段已对同一 diffHash/module/profile 跑过单元测试命令(Java 的 `mvn test` 等)且测试通过(Java 的 `Tests run: N, Failures: 0, Errors: 0` / 前端 N passing),可跳过重跑并标记"✅ 复用 harness-run 单元测试结果";diffHash 不一致 / profile 不一致 / 命令范围更窄 / run 后有行为性修改则不得复用 |
269
- | **test 批量 runner** | 默认使用 **PowerShell 接口测试执行器**:生成 `.harness/changes/<cn>/runtime/api-test-runner.mjs`,通过一次 PowerShell + node 执行全部场景,输出 `api-test-results.json`,主会话只读 JSON 生成摘要。Playwright MCP `browser_evaluate` 仅作 fallback,报告必须区分执行器:PowerShell 接口测试执行器 ✅使用 / PowerShell batch 🟡fallback / Playwright MCP 🟡fallback / curl 🟡fallback |
270
- | **test token 策略** | 先读 `.harness/changes/<cn>/runtime/credential-cache.json`(旧名 `token-cache.json` 兼容),本地轻量接口验证通过则复用,失败才访问远程 SSO;接口测试执行器必须用 request context / node fetch 直接请求本地 baseURL,**不得依赖浏览器当前页面 origin** |
271
- | **post-test 变更分类** | test 之后发生代码变更时,submit/archive 必须按 7 类分类(NON_BEHAVIORAL_CLEANUP / COMMENT_ONLY / TEST_ONLY / BEHAVIORAL_SERVICE_CHANGE / API_CONTRACT_CHANGE / SQL_OR_MAPPER_CHANGE / SECURITY_OR_PERMISSION_CHANGE)写入 ledger 的 `postTestClassification`;非行为性清理可复用 API 测试结果但须记录依据,行为性变更必须重跑相关场景 |
263
+ | **execute 编码侧步骤 0** | 任何代码修改前必须先向 `events.ndjson` 追加 `phase.start`;执行日志由阶段结束事件自动渲染 |
264
+ | **execute 轻量验证** | `/harness-execute` 编码侧默认只做开发反馈:TDD RED/GREEN + REFACTOR + 构建命令增量编译(Java 的 `mvn compile -pl <module>` 等)+ 关门检查 + 写 verification-ledger;除非改了公共模块/数据访问层/sql/权限认证/接口层/数据契约 或用户要求 full-run-validation,否则不默认跑全量测试命令(Java 的 `mvn test` 等)。若跑了全量测试必须写入 ledger 供验证侧/submit 复用 |
265
+ | **execute TDD 降级** | 输出必须写"🟡 静态逻辑验证通过,未执行真实单元测试",**禁止写"测试全部通过"**;降级标注写在执行日志和覆盖报告中,**不污染业务代码注释**;记录三项:降级原因、静态验证场景列表、待部署后验证场景列表 |
266
+ | **execute ledger 复用** | 验证侧执行单元测试前先读 `verification-ledger.json`:若编码侧已对同一 diffHash/module/profile 跑过单元测试命令(Java 的 `mvn test` 等)且测试通过(Java 的 `Tests run: N, Failures: 0, Errors: 0` / 前端 N passing),可跳过重跑并标记"✅ 复用编码侧单元测试结果";diffHash 不一致 / profile 不一致 / 命令范围更窄 / 编码侧之后有行为性修改则不得复用 |
267
+ | **execute 批量 runner** | 默认使用 **PowerShell 接口测试执行器**:生成 `.harness/changes/<cn>/runtime/api-test-runner.mjs`,通过一次 PowerShell + node 执行全部场景,输出 `api-test-results.json`,主会话只读 JSON 生成摘要。Playwright MCP `browser_evaluate` 仅作 fallback,报告必须区分执行器:PowerShell 接口测试执行器 ✅使用 / PowerShell batch 🟡fallback / Playwright MCP 🟡fallback / curl 🟡fallback |
268
+ | **execute token 策略** | 先读 `.harness/changes/<cn>/runtime/credential-cache.json`(旧名 `token-cache.json` 兼容),本地轻量接口验证通过则复用,失败才访问远程 SSO;接口测试执行器必须用 request context / node fetch 直接请求本地 baseURL,**不得依赖浏览器当前页面 origin** |
269
+ | **execute 后变更分类** | 验证完成后发生代码变更时,submit/archive 必须按 7 类分类(NON_BEHAVIORAL_CLEANUP / COMMENT_ONLY / TEST_ONLY / BEHAVIORAL_SERVICE_CHANGE / API_CONTRACT_CHANGE / SQL_OR_MAPPER_CHANGE / SECURITY_OR_PERMISSION_CHANGE)写入 ledger 的 `postTestClassification`;非行为性清理可复用 API 测试结果但须记录依据,行为性变更必须重跑相关场景 |
272
270
  | **submit 时序** | `/harness-submit` 完成后:主目录模式可直接 `/harness-archive`;worktree 模式在同一 skill 内自动完成合并后再 archive |
273
271
  | **submit ledger 复用** | 验证前先读 `verification-ledger.json`:若当前 diffHash 已通过 test 完整验证且无行为性 post-test 修改,submit 不默认重跑构建命令/测试命令(Java 的 `mvn compile`/`mvn test` 等);只在远端有新提交 / staged diff 与 ledger 不一致 / 行为性 post-test 修改 / test 报告缺失或失败 / 用户要求 submit-full-verify 时重跑,重跑结果写回 ledger |
274
272
  | **submit commit message** | subject 只根据当前 `git diff --cached` 或本次变更名生成,**不得混入历史任务上下文** |
@@ -309,7 +307,7 @@ harness-skills/
309
307
  └──────┬───────┘
310
308
 
311
309
  ┌──────▼───────┐
312
- │ harness-test │ "测试验证" — 单元+接口+数据兼容
310
+ │ harness-execute │ "测试验证" — 单元+接口+数据兼容
313
311
  └──────┬───────┘
314
312
 
315
313
  ┌──────▼───────┐
@@ -335,22 +333,22 @@ harness-skills/
335
333
  └─────────────────────────────────────────────────┘
336
334
  ```
337
335
 
338
- > **harness-review 是参考性审查阶段**:默认只生成参考性审查报告和按需 fixback,不影响后续 submit、archive。如果用户选择处理 fixback,回到 `/harness-run --fixback`,再执行 `/harness-test` 和 `/harness-review`;如果团队希望 review RED 阻塞提交,可在 `.harness/config/harness-test-config.md` 中设置 `review.strict-review-gate: true`。
336
+ > **harness-review 是参考性审查阶段**:默认只生成参考性审查报告和按需 fixback,不影响后续 submit、archive。如果用户选择处理 fixback,回到 `/harness-execute --fixback`,再执行 `/harness-execute` 和 `/harness-review`;如果团队希望 review RED 阻塞提交,可在 `.harness/config/harness-test-config.md` 中设置 `review.strict-review-gate: true`。
339
337
 
340
- > **阶段顺序以计划为准**:Plan 会把本次 `plannedPhases` 写入上下文,后续阶段只消费该计划,不再假定 test、review、submit 或 merge 必经。快速流程默认可用 `plan → run → archive`;需要完整验证、评审或提交时再把对应阶段加入计划。无 Git、无 upstream、仅本地提交或主动跳过 submit 都不妨碍事实封存;只有“发布候选”需要额外满足发布策略。
338
+ > **阶段顺序以计划为准**:Plan 会把本次 `plannedPhases` 写入上下文,后续阶段只消费该计划,不再假定 test、review、submit 或 merge 必经。快速流程默认可用 `plan → execute → archive`;需要完整验证、评审或提交时再把对应阶段加入计划。无 Git、无 upstream、仅本地提交或主动跳过 submit 都不妨碍事实封存;只有“发布候选”需要额外满足发布策略。
341
339
 
342
340
  > **verification-ledger 驱动跨阶段复用**:先通过共享状态目录解析器定位变更,再读写其 `evidence/verification-ledger.json`,其中记录 compile/unitTest/apiTest 的结果、证据、diffHash 和作用范围。run/test/submit 执行验证前先读 ledger,满足复用条件(diffHash 一致、module/profile 一致、范围更严格、有证据、无行为性 post-test 修改)则跳过重跑并标记 🔁REUSED;post-test 小改动按 7 类分类,非行为性清理可复用 API 测试。详见 `protocols/ledger-protocol.md`。
343
341
 
344
342
  ## 外部方法论吸收(已内化)
345
343
 
346
- `harness-plan`、`harness-run`、`harness-review` 已将外部 skill 的有效方法内化为原生协议,不再运行时调用 Superpowers、grill-me 或 `receiving-code-review`,也不检查、降级或同步 `docs/superpowers/` 草稿。
344
+ `harness-plan`、`harness-execute`、`harness-review` 已将外部 skill 的有效方法内化为原生协议,不再运行时调用 Superpowers、grill-me 或 `receiving-code-review`,也不检查、降级或同步 `docs/superpowers/` 草稿。
347
345
 
348
346
  | 方法论来源 | harness 落点 | 当前关系 |
349
347
  |------------|--------------|----------|
350
348
  | brainstorming | `harness-plan/protocols.md` 的 clarification-protocol | 已内化:风险、复用机会、替代方案、推荐方案 |
351
349
  | grill-me | `harness-plan/protocols.md` 的 decision-grilling-protocol | 已内化:有限问题预算、一次一问、每问推荐答案 |
352
350
  | writing-plans | `harness-plan/protocols.md` 的 implementation-planning-protocol | 已内化:任务简表、自适应执行参考、无占位符自检 |
353
- | Superpowers TDD / subagent-driven-dev | `harness-run/protocols.md` 的 run-tdd-protocol / change-cluster-review-protocol | 已内化:RED 类型、GREEN 最小实现、风险触发审查 |
351
+ | Superpowers TDD / subagent-driven-dev | `harness-execute/protocols.md` 的 run-tdd-protocol / change-cluster-review-protocol | 已内化:RED 类型、GREEN 最小实现、风险触发审查 |
354
352
  | receiving-code-review | `harness-review/protocols.md` 的 review-fixback-protocol | 已内化:RED/YELLOW 转结构化 fixback |
355
353
 
356
354
  > **状态说明**:Superpowers / grill-me 可作为人工参考或后续方法论对标来源,但不是 harness 正式流程的运行时依赖;缺失时不触发降级记录。
@@ -397,7 +395,7 @@ powershell.exe -Command "Copy-Item -Path 'harness-skills/harness-*' -Destination
397
395
  或者只复制需要的 skill:
398
396
 
399
397
  ```powershell
400
- powershell.exe -Command "Copy-Item -Path 'harness-skills/harness-test' -Destination '<目标项目>/.claude/skills/' -Recurse -Force"
398
+ powershell.exe -Command "Copy-Item -Path 'harness-skills/harness-execute' -Destination '<目标项目>/.claude/skills/' -Recurse -Force"
401
399
  ```
402
400
 
403
401
  Claude Code/CodeBuddy 可选复制 3 个隔离角色:`harness-explorer` 仅高复杂度探索、`harness-evaluator` 仅 `--adversarial`/高风险规划、`harness-reviewer` 仅发布候选/高风险审查。Codex/Cursor 默认使用主会话或宿主临时隔离任务,不安装固定角色,也不执行固定 agent 预检:
@@ -420,8 +418,8 @@ npx hunter-harness # 初始化阶段检查环境/CodeGraph/基础状态(非
420
418
  /harness-sync # 10 项元数据检查(7 核心 + 3 辅助)
421
419
  /harness-codebase-map # 生成代码库地图(7 类文档)
422
420
  /harness-plan # 需求规划(生成测试场景表 + 自动命名变更名)
423
- /harness-run # TDD 编码
424
- /harness-test # 运行测试(30条避坑规则)
421
+ /harness-execute # TDD 编码
422
+ /harness-execute # 运行测试(30条避坑规则)
425
423
  /harness-review # 代码审查
426
424
  /harness-submit # 提交代码(worktree 模式含合并;/harness-merge 为别名)
427
425
  /harness-archive # 归档产出(harness_archive.py execute),释放工作区
@@ -429,7 +427,7 @@ npx hunter-harness # 初始化阶段检查环境/CodeGraph/基础状态(非
429
427
 
430
428
  ## 避坑知识来源
431
429
 
432
- `harness-test/pitfalls.md` 中的 30 条避坑规则来自真实对话日志(2026-06-12 ~ 06-24)。
430
+ `harness-execute/testing-pitfalls.md` 中的 30 条避坑规则来自真实对话日志(2026-06-12 ~ 06-24)。
433
431
 
434
432
  ---
435
433
  ← 返回 [[AI开发工作流|工作流主页]]
@@ -439,9 +437,9 @@ npx hunter-harness # 初始化阶段检查环境/CodeGraph/基础状态(非
439
437
 
440
438
  ### Worktree 决策状态
441
439
 
442
- `harness-plan` 阶段 2 用户选择后,必须写入 `.harness/changes/<change-name>/meta/worktree.json`。`harness-run` 负责读取该文件并创建/切换 worktree。
440
+ `harness-plan` 阶段 2 用户选择后,必须写入 `.harness/changes/<change-name>/meta/worktree.json`。`harness-execute` 负责读取该文件并创建/切换 worktree。
443
441
 
444
- 硬规则:如果 `worktree.json` 中 `requested=true`,而 worktree 不存在,`harness-run` 必须创建 worktree 或停止,不得静默回到主目录执行。
442
+ 硬规则:如果 `worktree.json` 中 `requested=true`,而 worktree 不存在,`harness-execute` 必须创建 worktree 或停止,不得静默回到主目录执行。
445
443
 
446
444
 
447
445
  ## Cross-skill Protocols
@@ -132,56 +132,6 @@
132
132
  "risk-classify-plan"
133
133
  ]
134
134
  },
135
- "harness-run": {
136
- "phase": "execute",
137
- "inputs": [
138
- "implementation-detail",
139
- "state-snapshot"
140
- ],
141
- "artifacts": [
142
- "code",
143
- "verification-ledger"
144
- ],
145
- "events": [
146
- "phase.start",
147
- "phase.end",
148
- "command",
149
- "verification"
150
- ],
151
- "allowedInteractions": [],
152
- "capabilities": [
153
- "gate-begin",
154
- "gate-close",
155
- "ledger-record"
156
- ]
157
- },
158
- "harness-test": {
159
- "phase": "execute",
160
- "inputs": [
161
- "test-scenarios",
162
- "verification-ledger"
163
- ],
164
- "artifacts": [
165
- "test-reports",
166
- "verification-ledger"
167
- ],
168
- "events": [
169
- "phase.start",
170
- "phase.end",
171
- "command",
172
- "verification"
173
- ],
174
- "allowedInteractions": [
175
- "resource-intensive-test-confirmation"
176
- ],
177
- "capabilities": [
178
- "gate-begin",
179
- "gate-close",
180
- "test-guard",
181
- "ledger-record",
182
- "resource-safe-test-runner"
183
- ]
184
- },
185
135
  "harness-review": {
186
136
  "phase": "review",
187
137
  "inputs": [
@@ -21,7 +21,7 @@ disallowed-tools:
21
21
  - Bash(awk *)
22
22
  - Bash(curl *)
23
23
  ---
24
- <!-- generated by harness_deploy.py; core=c74ed00e15a0ea44; overlay=java; agent=claude-code; do not edit -->
24
+ <!-- generated by harness_deploy.py; core=9fc7d572f47e4634; overlay=java; agent=claude-code; do not edit -->
25
25
  # harness-apidoc — 前端接口文档(Java overlay)
26
26
 
27
27
  ## Purpose
@@ -21,7 +21,7 @@ disallowed-tools:
21
21
  - Bash(awk *)
22
22
  - Bash(curl *)
23
23
  ---
24
- <!-- generated by harness_deploy.py; core=c74ed00e15a0ea44; overlay=java; agent=claude-code; do not edit -->
24
+ <!-- generated by harness_deploy.py; core=9fc7d572f47e4634; overlay=java; agent=claude-code; do not edit -->
25
25
  # harness-archive — 变更归档
26
26
 
27
27
  ## Purpose
@@ -20,7 +20,7 @@ disallowed-tools:
20
20
  - Bash(awk *)
21
21
  - Bash(curl *)
22
22
  ---
23
- <!-- generated by harness_deploy.py; core=c74ed00e15a0ea44; overlay=java; agent=claude-code; do not edit -->
23
+ <!-- generated by harness_deploy.py; core=9fc7d572f47e4634; overlay=java; agent=claude-code; do not edit -->
24
24
  # harness-codebase-map — 代码库地图
25
25
 
26
26
  ## Purpose
@@ -61,4 +61,4 @@ status: active
61
61
 
62
62
  ## Notes for AI Agents
63
63
 
64
- - <how harness-test should use this map>
64
+ - <how harness-execute should use this map>