@hunter-harness/workflow-harness 0.4.8 → 0.4.9

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 (409) 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 +16 -16
  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-test/pitfalls-java.md → harness-execute/testing-pitfalls-java.md} +2 -2
  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 +1 -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 +1 -1
  19. package/harness/bundles/general/claude-code/harness-plan/checklist.md +1 -1
  20. package/harness/bundles/general/claude-code/harness-pull/SKILL.md +1 -1
  21. package/harness/bundles/general/claude-code/harness-push/SKILL.md +1 -1
  22. package/harness/bundles/general/claude-code/harness-review/SKILL.md +3 -3
  23. package/harness/bundles/general/claude-code/harness-review/checklist.md +1 -1
  24. package/harness/bundles/general/claude-code/harness-submit/SKILL.md +1 -1
  25. package/harness/bundles/general/claude-code/harness-submit/checklist.md +1 -1
  26. package/harness/bundles/general/claude-code/harness-submit/reference.md +1 -1
  27. package/harness/bundles/general/claude-code/harness-sync/SKILL.md +1 -1
  28. package/harness/bundles/general/claude-code/protocols/evidence-based-reporting-protocol.md +1 -1
  29. package/harness/bundles/general/claude-code/protocols/ledger-protocol.md +8 -8
  30. package/harness/bundles/general/claude-code/protocols/sensitive-info-protocol.md +2 -2
  31. package/harness/bundles/general/claude-code/scripts/harness_deploy.py +2 -2
  32. package/harness/bundles/general/claude-code/scripts/harness_gate.py +1 -1
  33. package/harness/bundles/general/claude-code/scripts/harness_profile.py +3 -3
  34. package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
  35. package/harness/bundles/general/codebuddy/CONTEXT.md +1 -1
  36. package/harness/bundles/general/codebuddy/README.md +36 -38
  37. package/harness/bundles/general/codebuddy/contracts/workflow-policy.json +0 -50
  38. package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +1 -1
  39. package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +1 -1
  40. package/harness/bundles/general/codebuddy/harness-codebase-map/templates/TESTING.md +1 -1
  41. package/harness/bundles/general/codebuddy/harness-execute/SKILL.md +16 -16
  42. package/harness/bundles/general/{claude-code/harness-run/checklist.md → codebuddy/harness-execute/coding-checklist.md} +9 -9
  43. package/harness/bundles/general/codebuddy/{harness-run/reference.md → harness-execute/coding-reference.md} +36 -36
  44. package/harness/bundles/general/codebuddy/{harness-run → harness-execute}/protocols.md +4 -4
  45. package/harness/bundles/general/{codex/harness-test/checklist.md → codebuddy/harness-execute/testing-checklist.md} +9 -10
  46. package/harness/bundles/general/codebuddy/{harness-test/pitfalls-java.md → harness-execute/testing-pitfalls-java.md} +2 -2
  47. package/harness/bundles/general/{claude-code/harness-test/pitfalls.md → codebuddy/harness-execute/testing-pitfalls.md} +7 -7
  48. package/harness/bundles/general/codebuddy/{harness-test/reference.md → harness-execute/testing-reference.md} +13 -13
  49. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
  50. package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  51. package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +1 -1
  52. package/harness/bundles/general/codebuddy/harness-plan/checklist.md +1 -1
  53. package/harness/bundles/general/codebuddy/harness-pull/SKILL.md +1 -1
  54. package/harness/bundles/general/codebuddy/harness-push/SKILL.md +1 -1
  55. package/harness/bundles/general/codebuddy/harness-review/SKILL.md +3 -3
  56. package/harness/bundles/general/codebuddy/harness-review/checklist.md +1 -1
  57. package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +1 -1
  58. package/harness/bundles/general/codebuddy/harness-submit/checklist.md +1 -1
  59. package/harness/bundles/general/codebuddy/harness-submit/reference.md +1 -1
  60. package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +1 -1
  61. package/harness/bundles/general/codebuddy/protocols/evidence-based-reporting-protocol.md +1 -1
  62. package/harness/bundles/general/codebuddy/protocols/ledger-protocol.md +8 -8
  63. package/harness/bundles/general/codebuddy/protocols/sensitive-info-protocol.md +2 -2
  64. package/harness/bundles/general/codebuddy/scripts/harness_deploy.py +2 -2
  65. package/harness/bundles/general/codebuddy/scripts/harness_gate.py +1 -1
  66. package/harness/bundles/general/codebuddy/scripts/harness_profile.py +3 -3
  67. package/harness/bundles/general/codex/.harness-build.json +1 -1
  68. package/harness/bundles/general/codex/CONTEXT.md +1 -1
  69. package/harness/bundles/general/codex/README.md +36 -38
  70. package/harness/bundles/general/codex/contracts/workflow-policy.json +0 -50
  71. package/harness/bundles/general/codex/harness-archive/SKILL.md +1 -1
  72. package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +1 -1
  73. package/harness/bundles/general/codex/harness-codebase-map/templates/TESTING.md +1 -1
  74. package/harness/bundles/general/codex/harness-execute/SKILL.md +16 -16
  75. package/harness/bundles/general/{cursor/harness-run/checklist.md → codex/harness-execute/coding-checklist.md} +9 -9
  76. package/harness/bundles/general/{cursor/harness-run/reference.md → codex/harness-execute/coding-reference.md} +36 -36
  77. package/harness/bundles/general/{claude-code/harness-run → codex/harness-execute}/protocols.md +4 -4
  78. package/harness/bundles/general/{cursor/harness-test/checklist.md → codex/harness-execute/testing-checklist.md} +9 -10
  79. package/harness/bundles/general/codex/{harness-test/pitfalls-java.md → harness-execute/testing-pitfalls-java.md} +2 -2
  80. package/harness/bundles/general/{codebuddy/harness-test/pitfalls.md → codex/harness-execute/testing-pitfalls.md} +7 -7
  81. package/harness/bundles/general/codex/{harness-test/reference.md → harness-execute/testing-reference.md} +13 -13
  82. package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +1 -1
  83. package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +1 -1
  84. package/harness/bundles/general/codex/harness-plan/SKILL.md +1 -1
  85. package/harness/bundles/general/codex/harness-plan/checklist.md +1 -1
  86. package/harness/bundles/general/codex/harness-pull/SKILL.md +1 -1
  87. package/harness/bundles/general/codex/harness-push/SKILL.md +1 -1
  88. package/harness/bundles/general/codex/harness-review/SKILL.md +3 -3
  89. package/harness/bundles/general/codex/harness-review/checklist.md +1 -1
  90. package/harness/bundles/general/codex/harness-submit/SKILL.md +1 -1
  91. package/harness/bundles/general/codex/harness-submit/checklist.md +1 -1
  92. package/harness/bundles/general/codex/harness-submit/reference.md +1 -1
  93. package/harness/bundles/general/codex/harness-sync/SKILL.md +1 -1
  94. package/harness/bundles/general/codex/protocols/evidence-based-reporting-protocol.md +1 -1
  95. package/harness/bundles/general/codex/protocols/ledger-protocol.md +8 -8
  96. package/harness/bundles/general/codex/protocols/sensitive-info-protocol.md +2 -2
  97. package/harness/bundles/general/codex/scripts/harness_deploy.py +2 -2
  98. package/harness/bundles/general/codex/scripts/harness_gate.py +1 -1
  99. package/harness/bundles/general/codex/scripts/harness_profile.py +3 -3
  100. package/harness/bundles/general/cursor/.harness-build.json +1 -1
  101. package/harness/bundles/general/cursor/CONTEXT.md +1 -1
  102. package/harness/bundles/general/cursor/README.md +36 -38
  103. package/harness/bundles/general/cursor/contracts/workflow-policy.json +0 -50
  104. package/harness/bundles/general/cursor/harness-archive/SKILL.md +1 -1
  105. package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +1 -1
  106. package/harness/bundles/general/cursor/harness-codebase-map/templates/TESTING.md +1 -1
  107. package/harness/bundles/general/cursor/harness-execute/SKILL.md +16 -16
  108. package/harness/bundles/general/{codebuddy/harness-run/checklist.md → cursor/harness-execute/coding-checklist.md} +9 -9
  109. package/harness/bundles/general/{claude-code/harness-run/reference.md → cursor/harness-execute/coding-reference.md} +36 -36
  110. package/harness/bundles/general/cursor/{harness-run → harness-execute}/protocols.md +4 -4
  111. package/harness/bundles/general/{claude-code/harness-test/checklist.md → cursor/harness-execute/testing-checklist.md} +9 -10
  112. package/harness/bundles/general/cursor/{harness-test/pitfalls-java.md → harness-execute/testing-pitfalls-java.md} +2 -2
  113. package/harness/bundles/general/cursor/{harness-test/pitfalls.md → harness-execute/testing-pitfalls.md} +7 -7
  114. package/harness/bundles/general/cursor/{harness-test/reference.md → harness-execute/testing-reference.md} +13 -13
  115. package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +1 -1
  116. package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +1 -1
  117. package/harness/bundles/general/cursor/harness-plan/SKILL.md +1 -1
  118. package/harness/bundles/general/cursor/harness-plan/checklist.md +1 -1
  119. package/harness/bundles/general/cursor/harness-pull/SKILL.md +1 -1
  120. package/harness/bundles/general/cursor/harness-push/SKILL.md +1 -1
  121. package/harness/bundles/general/cursor/harness-review/SKILL.md +3 -3
  122. package/harness/bundles/general/cursor/harness-review/checklist.md +1 -1
  123. package/harness/bundles/general/cursor/harness-submit/SKILL.md +1 -1
  124. package/harness/bundles/general/cursor/harness-submit/checklist.md +1 -1
  125. package/harness/bundles/general/cursor/harness-submit/reference.md +1 -1
  126. package/harness/bundles/general/cursor/harness-sync/SKILL.md +1 -1
  127. package/harness/bundles/general/cursor/protocols/evidence-based-reporting-protocol.md +1 -1
  128. package/harness/bundles/general/cursor/protocols/ledger-protocol.md +8 -8
  129. package/harness/bundles/general/cursor/protocols/sensitive-info-protocol.md +2 -2
  130. package/harness/bundles/general/cursor/scripts/harness_deploy.py +2 -2
  131. package/harness/bundles/general/cursor/scripts/harness_gate.py +1 -1
  132. package/harness/bundles/general/cursor/scripts/harness_profile.py +3 -3
  133. package/harness/bundles/general/pi/.harness-build.json +1 -1
  134. package/harness/bundles/general/pi/CONTEXT.md +1 -1
  135. package/harness/bundles/general/pi/README.md +36 -38
  136. package/harness/bundles/general/pi/contracts/workflow-policy.json +0 -50
  137. package/harness/bundles/general/pi/harness-archive/SKILL.md +1 -1
  138. package/harness/bundles/general/pi/harness-codebase-map/SKILL.md +1 -1
  139. package/harness/bundles/general/pi/harness-codebase-map/templates/TESTING.md +1 -1
  140. package/harness/bundles/general/pi/harness-execute/SKILL.md +16 -16
  141. package/harness/bundles/general/pi/harness-execute/coding-checklist.md +279 -0
  142. package/harness/bundles/general/pi/harness-execute/coding-reference.md +886 -0
  143. package/harness/bundles/general/pi/harness-execute/protocols.md +141 -0
  144. package/harness/bundles/general/pi/harness-execute/testing-checklist.md +358 -0
  145. package/harness/bundles/general/pi/harness-execute/testing-pitfalls-java.md +14 -0
  146. package/harness/bundles/general/pi/harness-execute/testing-pitfalls.md +307 -0
  147. package/harness/bundles/general/pi/harness-execute/testing-reference.md +880 -0
  148. package/harness/bundles/general/pi/harness-knowledge-ingest/SKILL.md +1 -1
  149. package/harness/bundles/general/pi/harness-knowledge-query/SKILL.md +1 -1
  150. package/harness/bundles/general/pi/harness-plan/SKILL.md +1 -1
  151. package/harness/bundles/general/pi/harness-plan/checklist.md +1 -1
  152. package/harness/bundles/general/pi/harness-pull/SKILL.md +1 -1
  153. package/harness/bundles/general/pi/harness-push/SKILL.md +1 -1
  154. package/harness/bundles/general/pi/harness-review/SKILL.md +3 -3
  155. package/harness/bundles/general/pi/harness-review/checklist.md +1 -1
  156. package/harness/bundles/general/pi/harness-submit/SKILL.md +1 -1
  157. package/harness/bundles/general/pi/harness-submit/checklist.md +1 -1
  158. package/harness/bundles/general/pi/harness-submit/reference.md +1 -1
  159. package/harness/bundles/general/pi/harness-sync/SKILL.md +1 -1
  160. package/harness/bundles/general/pi/protocols/evidence-based-reporting-protocol.md +1 -1
  161. package/harness/bundles/general/pi/protocols/ledger-protocol.md +8 -8
  162. package/harness/bundles/general/pi/protocols/sensitive-info-protocol.md +2 -2
  163. package/harness/bundles/general/pi/scripts/harness_deploy.py +2 -2
  164. package/harness/bundles/general/pi/scripts/harness_gate.py +1 -1
  165. package/harness/bundles/general/pi/scripts/harness_profile.py +3 -3
  166. package/harness/bundles/java/claude-code/.harness-build.json +1 -1
  167. package/harness/bundles/java/claude-code/CONTEXT.md +1 -1
  168. package/harness/bundles/java/claude-code/README.md +36 -38
  169. package/harness/bundles/java/claude-code/contracts/workflow-policy.json +0 -50
  170. package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +1 -1
  171. package/harness/bundles/java/claude-code/harness-archive/SKILL.md +1 -1
  172. package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +1 -1
  173. package/harness/bundles/java/claude-code/harness-codebase-map/templates/TESTING.md +1 -1
  174. package/harness/bundles/java/claude-code/harness-execute/SKILL.md +48 -16
  175. package/harness/bundles/java/claude-code/{harness-run/checklist.md → harness-execute/coding-checklist.md} +6 -6
  176. package/harness/bundles/java/claude-code/{harness-run/reference.md → harness-execute/coding-reference.md} +37 -37
  177. package/harness/bundles/java/claude-code/harness-execute/protocols.md +141 -0
  178. package/harness/bundles/java/claude-code/{harness-test/checklist.md → harness-execute/testing-checklist.md} +9 -9
  179. package/harness/bundles/java/claude-code/{harness-test/pitfalls-java.md → harness-execute/testing-pitfalls-java.md} +1 -1
  180. package/harness/bundles/java/claude-code/harness-execute/testing-pitfalls.md +307 -0
  181. package/harness/bundles/java/claude-code/{harness-test/reference.md → harness-execute/testing-reference.md} +13 -13
  182. package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
  183. package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +1 -1
  184. package/harness/bundles/java/claude-code/harness-package/SKILL.md +1 -1
  185. package/harness/bundles/java/claude-code/harness-package/checklist.md +7 -7
  186. package/harness/bundles/java/claude-code/harness-plan/SKILL.md +1 -1
  187. package/harness/bundles/java/claude-code/harness-plan/checklist.md +1 -1
  188. package/harness/bundles/java/claude-code/harness-pull/SKILL.md +1 -1
  189. package/harness/bundles/java/claude-code/harness-push/SKILL.md +1 -1
  190. package/harness/bundles/java/claude-code/harness-review/SKILL.md +3 -3
  191. package/harness/bundles/java/claude-code/harness-review/checklist.md +1 -1
  192. package/harness/bundles/java/claude-code/harness-submit/SKILL.md +1 -1
  193. package/harness/bundles/java/claude-code/harness-submit/checklist.md +1 -1
  194. package/harness/bundles/java/claude-code/harness-submit/reference.md +1 -1
  195. package/harness/bundles/java/claude-code/harness-sync/SKILL.md +1 -1
  196. package/harness/bundles/java/claude-code/protocols/evidence-based-reporting-protocol.md +1 -1
  197. package/harness/bundles/java/claude-code/protocols/ledger-protocol.md +8 -8
  198. package/harness/bundles/java/claude-code/protocols/sensitive-info-protocol.md +2 -2
  199. package/harness/bundles/java/claude-code/scripts/harness_deploy.py +2 -2
  200. package/harness/bundles/java/claude-code/scripts/harness_gate.py +1 -1
  201. package/harness/bundles/java/claude-code/scripts/harness_profile.py +3 -3
  202. package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
  203. package/harness/bundles/java/codebuddy/CONTEXT.md +1 -1
  204. package/harness/bundles/java/codebuddy/README.md +36 -38
  205. package/harness/bundles/java/codebuddy/contracts/workflow-policy.json +0 -50
  206. package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +1 -1
  207. package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +1 -1
  208. package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +1 -1
  209. package/harness/bundles/java/codebuddy/harness-codebase-map/templates/TESTING.md +1 -1
  210. package/harness/bundles/java/codebuddy/harness-execute/SKILL.md +48 -16
  211. package/harness/bundles/java/codebuddy/{harness-run/checklist.md → harness-execute/coding-checklist.md} +6 -6
  212. package/harness/bundles/java/codebuddy/{harness-run/reference.md → harness-execute/coding-reference.md} +37 -37
  213. package/harness/bundles/java/codebuddy/harness-execute/protocols.md +141 -0
  214. package/harness/bundles/java/codebuddy/{harness-test/checklist.md → harness-execute/testing-checklist.md} +9 -9
  215. package/harness/bundles/java/codebuddy/{harness-test/pitfalls-java.md → harness-execute/testing-pitfalls-java.md} +1 -1
  216. package/harness/bundles/java/codebuddy/harness-execute/testing-pitfalls.md +307 -0
  217. package/harness/bundles/java/codebuddy/{harness-test/reference.md → harness-execute/testing-reference.md} +13 -13
  218. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
  219. package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  220. package/harness/bundles/java/codebuddy/harness-package/SKILL.md +1 -1
  221. package/harness/bundles/java/codebuddy/harness-package/checklist.md +7 -7
  222. package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +1 -1
  223. package/harness/bundles/java/codebuddy/harness-plan/checklist.md +1 -1
  224. package/harness/bundles/java/codebuddy/harness-pull/SKILL.md +1 -1
  225. package/harness/bundles/java/codebuddy/harness-push/SKILL.md +1 -1
  226. package/harness/bundles/java/codebuddy/harness-review/SKILL.md +3 -3
  227. package/harness/bundles/java/codebuddy/harness-review/checklist.md +1 -1
  228. package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +1 -1
  229. package/harness/bundles/java/codebuddy/harness-submit/checklist.md +1 -1
  230. package/harness/bundles/java/codebuddy/harness-submit/reference.md +1 -1
  231. package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +1 -1
  232. package/harness/bundles/java/codebuddy/protocols/evidence-based-reporting-protocol.md +1 -1
  233. package/harness/bundles/java/codebuddy/protocols/ledger-protocol.md +8 -8
  234. package/harness/bundles/java/codebuddy/protocols/sensitive-info-protocol.md +2 -2
  235. package/harness/bundles/java/codebuddy/scripts/harness_deploy.py +2 -2
  236. package/harness/bundles/java/codebuddy/scripts/harness_gate.py +1 -1
  237. package/harness/bundles/java/codebuddy/scripts/harness_profile.py +3 -3
  238. package/harness/bundles/java/codex/.harness-build.json +1 -1
  239. package/harness/bundles/java/codex/CONTEXT.md +1 -1
  240. package/harness/bundles/java/codex/README.md +36 -38
  241. package/harness/bundles/java/codex/contracts/workflow-policy.json +0 -50
  242. package/harness/bundles/java/codex/harness-apidoc/SKILL.md +1 -1
  243. package/harness/bundles/java/codex/harness-archive/SKILL.md +1 -1
  244. package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +1 -1
  245. package/harness/bundles/java/codex/harness-codebase-map/templates/TESTING.md +1 -1
  246. package/harness/bundles/java/codex/harness-execute/SKILL.md +48 -16
  247. package/harness/bundles/java/codex/{harness-run/checklist.md → harness-execute/coding-checklist.md} +6 -6
  248. package/harness/bundles/java/codex/{harness-run/reference.md → harness-execute/coding-reference.md} +37 -37
  249. package/harness/bundles/java/codex/harness-execute/protocols.md +141 -0
  250. package/harness/bundles/java/codex/{harness-test/checklist.md → harness-execute/testing-checklist.md} +9 -9
  251. package/harness/bundles/java/codex/{harness-test/pitfalls-java.md → harness-execute/testing-pitfalls-java.md} +1 -1
  252. package/harness/bundles/java/codex/harness-execute/testing-pitfalls.md +307 -0
  253. package/harness/bundles/java/codex/{harness-test/reference.md → harness-execute/testing-reference.md} +13 -13
  254. package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +1 -1
  255. package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +1 -1
  256. package/harness/bundles/java/codex/harness-package/SKILL.md +1 -1
  257. package/harness/bundles/java/codex/harness-package/checklist.md +7 -7
  258. package/harness/bundles/java/codex/harness-plan/SKILL.md +1 -1
  259. package/harness/bundles/java/codex/harness-plan/checklist.md +1 -1
  260. package/harness/bundles/java/codex/harness-pull/SKILL.md +1 -1
  261. package/harness/bundles/java/codex/harness-push/SKILL.md +1 -1
  262. package/harness/bundles/java/codex/harness-review/SKILL.md +3 -3
  263. package/harness/bundles/java/codex/harness-review/checklist.md +1 -1
  264. package/harness/bundles/java/codex/harness-submit/SKILL.md +1 -1
  265. package/harness/bundles/java/codex/harness-submit/checklist.md +1 -1
  266. package/harness/bundles/java/codex/harness-submit/reference.md +1 -1
  267. package/harness/bundles/java/codex/harness-sync/SKILL.md +1 -1
  268. package/harness/bundles/java/codex/protocols/evidence-based-reporting-protocol.md +1 -1
  269. package/harness/bundles/java/codex/protocols/ledger-protocol.md +8 -8
  270. package/harness/bundles/java/codex/protocols/sensitive-info-protocol.md +2 -2
  271. package/harness/bundles/java/codex/scripts/harness_deploy.py +2 -2
  272. package/harness/bundles/java/codex/scripts/harness_gate.py +1 -1
  273. package/harness/bundles/java/codex/scripts/harness_profile.py +3 -3
  274. package/harness/bundles/java/cursor/.harness-build.json +1 -1
  275. package/harness/bundles/java/cursor/CONTEXT.md +1 -1
  276. package/harness/bundles/java/cursor/README.md +36 -38
  277. package/harness/bundles/java/cursor/contracts/workflow-policy.json +0 -50
  278. package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +1 -1
  279. package/harness/bundles/java/cursor/harness-archive/SKILL.md +1 -1
  280. package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +1 -1
  281. package/harness/bundles/java/cursor/harness-codebase-map/templates/TESTING.md +1 -1
  282. package/harness/bundles/java/cursor/harness-execute/SKILL.md +48 -16
  283. package/harness/bundles/java/cursor/{harness-run/checklist.md → harness-execute/coding-checklist.md} +6 -6
  284. package/harness/bundles/java/cursor/{harness-run/reference.md → harness-execute/coding-reference.md} +37 -37
  285. package/harness/bundles/java/cursor/harness-execute/protocols.md +141 -0
  286. package/harness/bundles/java/cursor/{harness-test/checklist.md → harness-execute/testing-checklist.md} +9 -9
  287. package/harness/bundles/java/cursor/{harness-test/pitfalls-java.md → harness-execute/testing-pitfalls-java.md} +1 -1
  288. package/harness/bundles/java/cursor/harness-execute/testing-pitfalls.md +307 -0
  289. package/harness/bundles/java/cursor/{harness-test/reference.md → harness-execute/testing-reference.md} +13 -13
  290. package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +1 -1
  291. package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +1 -1
  292. package/harness/bundles/java/cursor/harness-package/SKILL.md +1 -1
  293. package/harness/bundles/java/cursor/harness-package/checklist.md +7 -7
  294. package/harness/bundles/java/cursor/harness-plan/SKILL.md +1 -1
  295. package/harness/bundles/java/cursor/harness-plan/checklist.md +1 -1
  296. package/harness/bundles/java/cursor/harness-pull/SKILL.md +1 -1
  297. package/harness/bundles/java/cursor/harness-push/SKILL.md +1 -1
  298. package/harness/bundles/java/cursor/harness-review/SKILL.md +3 -3
  299. package/harness/bundles/java/cursor/harness-review/checklist.md +1 -1
  300. package/harness/bundles/java/cursor/harness-submit/SKILL.md +1 -1
  301. package/harness/bundles/java/cursor/harness-submit/checklist.md +1 -1
  302. package/harness/bundles/java/cursor/harness-submit/reference.md +1 -1
  303. package/harness/bundles/java/cursor/harness-sync/SKILL.md +1 -1
  304. package/harness/bundles/java/cursor/protocols/evidence-based-reporting-protocol.md +1 -1
  305. package/harness/bundles/java/cursor/protocols/ledger-protocol.md +8 -8
  306. package/harness/bundles/java/cursor/protocols/sensitive-info-protocol.md +2 -2
  307. package/harness/bundles/java/cursor/scripts/harness_deploy.py +2 -2
  308. package/harness/bundles/java/cursor/scripts/harness_gate.py +1 -1
  309. package/harness/bundles/java/cursor/scripts/harness_profile.py +3 -3
  310. package/harness/bundles/java/pi/.harness-build.json +1 -1
  311. package/harness/bundles/java/pi/CONTEXT.md +1 -1
  312. package/harness/bundles/java/pi/README.md +36 -38
  313. package/harness/bundles/java/pi/contracts/workflow-policy.json +0 -50
  314. package/harness/bundles/java/pi/harness-apidoc/SKILL.md +1 -1
  315. package/harness/bundles/java/pi/harness-archive/SKILL.md +1 -1
  316. package/harness/bundles/java/pi/harness-codebase-map/SKILL.md +1 -1
  317. package/harness/bundles/java/pi/harness-codebase-map/templates/TESTING.md +1 -1
  318. package/harness/bundles/java/pi/harness-execute/SKILL.md +48 -16
  319. package/harness/bundles/java/pi/harness-execute/coding-checklist.md +252 -0
  320. package/harness/bundles/java/pi/harness-execute/coding-reference.md +820 -0
  321. package/harness/bundles/java/pi/harness-execute/protocols.md +141 -0
  322. package/harness/bundles/java/pi/harness-execute/testing-checklist.md +320 -0
  323. package/harness/bundles/java/pi/harness-execute/testing-pitfalls-java.md +16 -0
  324. package/harness/bundles/java/pi/harness-execute/testing-pitfalls.md +307 -0
  325. package/harness/bundles/java/pi/harness-execute/testing-reference.md +792 -0
  326. package/harness/bundles/java/pi/harness-knowledge-ingest/SKILL.md +1 -1
  327. package/harness/bundles/java/pi/harness-knowledge-query/SKILL.md +1 -1
  328. package/harness/bundles/java/pi/harness-package/SKILL.md +1 -1
  329. package/harness/bundles/java/pi/harness-package/checklist.md +7 -7
  330. package/harness/bundles/java/pi/harness-plan/SKILL.md +1 -1
  331. package/harness/bundles/java/pi/harness-plan/checklist.md +1 -1
  332. package/harness/bundles/java/pi/harness-pull/SKILL.md +1 -1
  333. package/harness/bundles/java/pi/harness-push/SKILL.md +1 -1
  334. package/harness/bundles/java/pi/harness-review/SKILL.md +3 -3
  335. package/harness/bundles/java/pi/harness-review/checklist.md +1 -1
  336. package/harness/bundles/java/pi/harness-submit/SKILL.md +1 -1
  337. package/harness/bundles/java/pi/harness-submit/checklist.md +1 -1
  338. package/harness/bundles/java/pi/harness-submit/reference.md +1 -1
  339. package/harness/bundles/java/pi/harness-sync/SKILL.md +1 -1
  340. package/harness/bundles/java/pi/protocols/evidence-based-reporting-protocol.md +1 -1
  341. package/harness/bundles/java/pi/protocols/ledger-protocol.md +8 -8
  342. package/harness/bundles/java/pi/protocols/sensitive-info-protocol.md +2 -2
  343. package/harness/bundles/java/pi/scripts/harness_deploy.py +2 -2
  344. package/harness/bundles/java/pi/scripts/harness_gate.py +1 -1
  345. package/harness/bundles/java/pi/scripts/harness_profile.py +3 -3
  346. package/harness/manifests/general/claude-code.json +58 -66
  347. package/harness/manifests/general/codebuddy.json +58 -66
  348. package/harness/manifests/general/codex.json +58 -66
  349. package/harness/manifests/general/cursor.json +58 -66
  350. package/harness/manifests/general/pi.json +58 -66
  351. package/harness/manifests/java/claude-code.json +61 -69
  352. package/harness/manifests/java/codebuddy.json +61 -69
  353. package/harness/manifests/java/codex.json +61 -69
  354. package/harness/manifests/java/cursor.json +61 -69
  355. package/harness/manifests/java/pi.json +61 -69
  356. package/hunter-workflow-family.json +2 -2
  357. package/package.json +1 -1
  358. package/harness/bundles/general/claude-code/harness-run/SKILL.md +0 -207
  359. package/harness/bundles/general/claude-code/harness-test/SKILL.md +0 -270
  360. package/harness/bundles/general/codebuddy/harness-run/SKILL.md +0 -188
  361. package/harness/bundles/general/codebuddy/harness-test/SKILL.md +0 -250
  362. package/harness/bundles/general/codex/harness-run/SKILL.md +0 -188
  363. package/harness/bundles/general/codex/harness-test/SKILL.md +0 -250
  364. package/harness/bundles/general/cursor/harness-run/SKILL.md +0 -188
  365. package/harness/bundles/general/cursor/harness-test/SKILL.md +0 -250
  366. package/harness/bundles/general/pi/harness-run/SKILL.md +0 -188
  367. package/harness/bundles/general/pi/harness-run/checklist.md +0 -279
  368. package/harness/bundles/general/pi/harness-run/protocols.md +0 -141
  369. package/harness/bundles/general/pi/harness-run/reference.md +0 -886
  370. package/harness/bundles/general/pi/harness-test/SKILL.md +0 -250
  371. package/harness/bundles/general/pi/harness-test/checklist.md +0 -359
  372. package/harness/bundles/general/pi/harness-test/pitfalls-java.md +0 -14
  373. package/harness/bundles/general/pi/harness-test/pitfalls.md +0 -307
  374. package/harness/bundles/general/pi/harness-test/reference.md +0 -880
  375. package/harness/bundles/java/claude-code/harness-run/SKILL.md +0 -225
  376. package/harness/bundles/java/claude-code/harness-run/protocols.md +0 -141
  377. package/harness/bundles/java/claude-code/harness-test/SKILL.md +0 -284
  378. package/harness/bundles/java/claude-code/harness-test/pitfalls.md +0 -307
  379. package/harness/bundles/java/codebuddy/harness-run/SKILL.md +0 -206
  380. package/harness/bundles/java/codebuddy/harness-run/protocols.md +0 -141
  381. package/harness/bundles/java/codebuddy/harness-test/SKILL.md +0 -264
  382. package/harness/bundles/java/codebuddy/harness-test/pitfalls.md +0 -307
  383. package/harness/bundles/java/codex/harness-run/SKILL.md +0 -206
  384. package/harness/bundles/java/codex/harness-run/protocols.md +0 -141
  385. package/harness/bundles/java/codex/harness-test/SKILL.md +0 -264
  386. package/harness/bundles/java/codex/harness-test/pitfalls.md +0 -307
  387. package/harness/bundles/java/cursor/harness-run/SKILL.md +0 -206
  388. package/harness/bundles/java/cursor/harness-run/protocols.md +0 -141
  389. package/harness/bundles/java/cursor/harness-test/SKILL.md +0 -264
  390. package/harness/bundles/java/cursor/harness-test/pitfalls.md +0 -307
  391. package/harness/bundles/java/pi/harness-run/SKILL.md +0 -206
  392. package/harness/bundles/java/pi/harness-run/checklist.md +0 -252
  393. package/harness/bundles/java/pi/harness-run/protocols.md +0 -141
  394. package/harness/bundles/java/pi/harness-run/reference.md +0 -820
  395. package/harness/bundles/java/pi/harness-test/SKILL.md +0 -264
  396. package/harness/bundles/java/pi/harness-test/checklist.md +0 -320
  397. package/harness/bundles/java/pi/harness-test/pitfalls-java.md +0 -16
  398. package/harness/bundles/java/pi/harness-test/pitfalls.md +0 -307
  399. package/harness/bundles/java/pi/harness-test/reference.md +0 -792
  400. /package/harness/bundles/general/claude-code/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
  401. /package/harness/bundles/general/codebuddy/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
  402. /package/harness/bundles/general/codex/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
  403. /package/harness/bundles/general/cursor/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
  404. /package/harness/bundles/general/pi/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
  405. /package/harness/bundles/java/claude-code/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
  406. /package/harness/bundles/java/codebuddy/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
  407. /package/harness/bundles/java/codex/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
  408. /package/harness/bundles/java/cursor/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
  409. /package/harness/bundles/java/pi/{harness-test → harness-execute}/scripts/runtime-helpers.mjs +0 -0
@@ -1,264 +0,0 @@
1
- ---
2
- name: harness-test
3
- description: 测试执行:读取场景表,执行单元测试+API接口测试+数据兼容验证,输出测试报告。仅当用户显式调用 /harness-test
4
- 时使用;不得在 run 结束后自动接续执行。
5
- ---
6
- <!-- generated by harness_deploy.py; core=a23ce7a4733cf3d7; overlay=java; agent=pi; do not edit -->
7
- # harness-test — 测试执行
8
-
9
- > **2026-08 阶段合并**:原 `run`(编码)与 `test`(验证)合并为单一 `execute` 阶段,
10
- > 统一入口为 **`/harness-execute`**(`harness/harness-execute/SKILL.md`)。本 skill 作为
11
- > 别名保留,frontmatter `name` 不变、内容照旧可用;门禁入参 `--phase test` 经
12
- > `LEGACY_PHASE_ALIASES` 归一为 execute。别名至少保留一个 minor 版本,退役时间见
13
- > `docs/harness-improvement-roadmap/`。下文出现的阶段名 `run`/`test` 均按别名解析。
14
- >
15
- > 合并语义注意:execute 关门时 C9 场景覆盖要求全部 `ownerPhase=execute` 场景有通过
16
- > receipt(包括本属 test 的接口/兼容场景);`ownerPhase=review`/`submit` 仍按计划顺延。
17
-
18
- ## Purpose
19
-
20
- 读取测试场景表,逐条执行单元测试和接口测试,验证代码变更的正确性,输出测试报告。
21
-
22
- ## When to Use
23
-
24
- 仅当用户显式调用 `/harness-test` 时执行(已设 `disable-model-invocation`)。run 阶段结束后**不自动**进入本阶段;用户口头提到"跑测试"而未调用本 skill 时,先确认是否走 Harness 测试阶段。
25
-
26
- **单阶段原则**:test 关门后必须停止并交还用户,仅提示 `plannedPhases` 中的真实下一阶段;禁止自动接续执行。
27
-
28
- 使用场景:
29
- - 完成 `/harness-run` 编码后,验证单元测试 + 接口测试 + 数据兼容
30
- - 修改公共模块 / 数据访问 / sql / 权限认证 / 接口层 / 数据契约 后需要真实接口验证
31
- - run 阶段 ledger 可复用时,跳过单元测试重跑,只补接口测试
32
-
33
- 前置依赖:
34
- - `.harness/changes/<change-name>/plans/<change-name>-test-scenarios.md` 存在(测试真相源)
35
- - `/harness-run` 已完成,或 ledger 中有可复用的 unitTest 结果
36
- - 必须读取 `.harness/changes/<change-name>/meta/worktree.json`:`requested=true` 且 worktree 已创建 → 在 worktree 目录中执行测试;`requested=true` 但 worktree 不存在 → 停止,提示先修复 `harness-run`,不得静默回到主目录
37
-
38
- 跳过场景:
39
- - 仅改了注释 / 格式化等非行为性清理,且 ledger `postTestClassification=NON_BEHAVIORAL_CLEANUP`,可复用已有 apiTest 结果,不必重跑
40
-
41
- ## 统一读取协议
42
-
43
- 0. **脚本在 `<skills-root>/scripts/` 共享,不在每个 skill 子目录下** — 实际形态是 `.codebuddy/skills/scripts/harness_*.py`(`.claude`/`.cursor`/`.codex` 同理),**没有** `.../skills/harness-<phase>/scripts/`。plan、run/test、archive 三份执行日志里都先猜成后者、报 `No such file` 再靠 Search 找回来;照第一种写法直接用
44
- 1. **`.harness/changes/<change-name>/` 是唯一真相源** — 所有输入从该目录读取,产物写入对应子目录
45
- 2. **change-name 优先从 frontmatter 读取** — `plans/*-design.md`、`spec/*-design.md`、`plans/*-plan.md` 的 YAML `change-name`
46
- 3. **frontmatter 缺失时兼容旧格式** — 从路径推断,标记 `🟡 legacy-plan`,不失败
47
- 4. **design** — 设计真相源按序取第一个存在的:`plans/<change>-design.md`(v2 发布产物,哈希绑定)→ `spec/<change>-design.md`(legacy 手写)。两份**同时存在**时以 `plans/` 为准,并记 `🟡 WARN 设计文档双份`——v2 发布的那份才受完整性门禁保护,读手写的那份等于绕过校验
48
- 5. **plan** — 任务真相源:`plans/<change>-plan.md`
49
- 6. **implementation-detail** — 自适应执行参考;legacy 缺失 🟡WARN,不阻断
50
- 7. **test-scenarios** — 测试真相源:`plans/<change>-test-scenarios.md`
51
- 8. **禁止读取 `docs/superpowers/` 作为正式输入** — 旧草稿仅人工线索
52
- 9. **每个 skill 边界只刷新一次状态快照** — 先运行 `python <skills-root>/scripts/harness_state.py capture --project . --change-dir ".harness/changes/<change-name>" --json`。首次 Plan 捕获时,脚本把当时的 Git HEAD 写入不可变 `changeBase`;后续阶段只刷新 `git.head` 与各段指纹,不得用当前 HEAD 覆盖 `changeBase`。只有迁移旧 change 且已能证明真实计划起点时,才在首次补录时传 `--base <baseCommit>`。`changedSegments=[]` 时复用已有 profile/rules/map/change/code 指纹,不再重复跑全量 `harness-sync` 或代码库扫描。`knowledge` 段仅为兼容空段,知识始终按需远端查询;快照不能替代源码读取和验证门禁。
53
-
54
- 状态目录分层:新路径优先,旧路径兼容 → [[../protocols/state-layout-protocol.md|state-layout-protocol]]
55
- > 片段:read-protocol
56
-
57
- ## Workflow
58
-
59
- 测试跟踪由 `harness_gate.py begin/close` 统一协调 test guard;不得额外手工执行 guard close。任一失败都必须使用 gate 返回的结构化状态,不得以自然语言覆盖失败状态。所有 change/state 路径必须使用 `harness_change.py resolve` 或 context 返回的 `executionRoot`,不得固定拼接 `.harness/changes/**`;split-v1 默认位于 `.harness/state/changes/**`。
60
-
61
- 兼容实现中的底层命令名是 `harness_test_guard.py begin` 与 `harness_test_guard.py close`,两者只允许由 gate 内部调用;写在这里用于能力审计,不构成模型执行步骤。
62
-
63
- 并行服务测试先运行 `harness_change.py lease-port --change <id> --run-id <run-id> --range <start-end> --json`,再把返回端口传给 `harness_service.py ensure --leased-port <port> --lease-owner <run-id>`。`serviceStart` 的 command/health/overlay 可用 `{leasedPort}` 占位符;用户自启进程仍只进入 Service Gate,禁止 kill。测试清理的 `finally` 中运行 `harness_change.py release-port --change <id> --run-id <run-id> --json`,避免租约池耗尽。
64
-
65
- ### Phase -1:资源安全门(任何测试命令之前)
66
-
67
- 测试默认使用 `safe` 资源档位,禁止直接执行会把整套测试放进同一长生命周期的裸命令。所有本地测试命令必须由 `harness/scripts/harness_test_runner.py` 托管:
68
-
69
- ```text
70
- python harness/scripts/harness_test_runner.py exec --profile safe --timeout-seconds <秒> -- <测试命令及参数>
71
- ```
72
-
73
- 对于 Python `unittest` 测试库,必须使用逐模块隔离模式,不得执行裸 `python -m unittest discover ...`:
74
-
75
- ```text
76
- python harness/scripts/harness_test_runner.py unittest --profile safe --tests-dir <测试目录>
77
- ```
78
-
79
- 资源档位是硬合同:
80
-
81
- - `safe`:默认;普通测试模块串行执行,每个模块使用全新进程。
82
- - `system`:只执行服务生命周期、集成等资源密集型模块。
83
- - `full`:先执行普通模块,再执行资源密集型模块;仍保持逐模块串行。
84
- - `system` / `full` 只有在用户明确要求资源密集型测试、传入 `--confirm-resource-intensive`,或受控 CI 设置 `CI=true` / `HARNESS_ALLOW_RESOURCE_INTENSIVE_TESTS=1` 时才允许执行。
85
-
86
- Runner 强制同项目单实例、低调度优先级、逐命令超时、正常结束和异常结束的进程树清理。`HARNESS_TEST_MAX_WORKERS` 默认且最高为 `2`,只能调低,不能调高;技术栈自身的并发参数也必须收敛到该值。Windows detached-service 模块在执行前先做 nested-breakaway 能力探测,受限沙箱不支持时立即返回 `DETACHED_PROCESS_CAPABILITY_UNAVAILABLE`,不得让每个服务用例逐一超时。出现该错误、`TEST_RUN_ALREADY_ACTIVE`、`PROCESS_TREE_ISOLATION_UNAVAILABLE` 或 `TEST_COMMAND_TIMEOUT` 必须停止,不得绕过 Runner 重跑裸命令。完整约束见 `checklist.md`「0.0-A 资源安全档位」。
87
-
88
- 动态数据库/Redis/令牌字段必须先由 `harness_environment.py prepare` 生成 secret-free receipt,再用 `exec --environment-receipt <file> --required-environment-field <NAME>` 闭包注入;缺失或指纹变化在启动测试前返回 `VERIFICATION_ENVIRONMENT_INCOMPLETE`。复杂 JSON、Docker template 或含引号参数不得跨多层 `-Command` 传递,改用 `exec --argv-file <utf8-json> --runtime-receipt <file>`;参数文件记录 PowerShell edition/version,运行回执只存 argv hash。`harness_service.py ensure` 属于正式持久服务模式,禁止从 bounded runner 内启动;命中时返回 `PERSISTENT_SERVICE_MODE_REQUIRED`。
89
-
90
- 预计超过交互窗口的正式验证使用 `harness_runtime.py run-start`,随后通过
91
- `run-status` / `run-log --cursor` 重连;不得把调用方存活当作验证存活条件。环境 acquire
92
- 必须显式选择 `change-session`(同 change + 内容指纹复用)或 `ephemeral`(每次重置)。
93
- 验证 DAG 的并行度由 `resourceLocks` 决定,未分类重任务默认串行。完整合同见
94
- `../protocols/execution-session-protocol.md`。
95
-
96
- ### Phase 0:环境准备(主会话执行,需要交互确认)
97
-
98
- 先 `harness_context.py prepare --project . --change <id> --phase test --executor <tool> --json`(`--project` 必填,漏了直接 argparse 报错),再 `harness_context.py begin --project . --change <id> --phase test --executor <tool> --json` 校验最新 run→test receipt 的 artifact/hash/HEAD;然后 **`harness_gate.py begin --phase test --change <id>`**(禁止手工 phase.start / 手写 ledger)。执行各项强制环境检查 + **命令执行模式 preflight (0.1)**;只有首选执行器不可用时,才执行 fallback 执行器探测。
99
-
100
- 验证写入**仅**允许 `harness_ledger.py record` / `can-reuse`;禁止 Write/Edit `verification-ledger.json`。测试跟踪:gate begin → 执行(可选 `harness_test_guard.py mark stale-test-repair`)→ 单次 `harness_gate.py close`。`--to-phase` 取实际阶段计划的后继;Fixback 返回 run,普通流程可直接进入 Review、Submit 或 Archive。Fixback 只失效与改动文件相交的验证目标。
101
-
102
- - **Read `checklist.md`** — 各项检查详情 + 0.1 preflight + Playwright 探测 + 避坑规则指引
103
- - **失败处理**:任一项检查失败 → 终止流程并报告原因,用户确认修复后才能继续
104
- - 通过后进入 Phase 1
105
-
106
- ### Phase 0.1:命令执行模式 preflight(⚠️ 必须在编译/启动服务/生成 runner 之前执行)
107
-
108
- `/harness-test` 高度依赖 PowerShell 与接口测试执行器。如果当前会话处于 Auto mode / 安全分类器降级 / PowerShell 被拒,会反复失败并错误降级到 Playwright MCP 逐条接口,造成长时间阻塞。**必须先做 4 项执行模式检查**(PowerShell 基础命令、执行器运行时可用性、构建工具可用性、安全分类器),将通过的 `executorPath` 写入 `.harness/changes/<change-name>/runtime/preflight.json`。
109
-
110
- 任一硬停情况(安全分类器不可用 / Auto mode 拦截 / PowerShell 被拒 / 执行器或构建工具不可执行)→ 原文输出"❌ 命令执行模式不可用...",不得继续编译/启动服务/生成执行器,不得盲目降级到 Playwright MCP。用户确认切换权限模式后**必须重新执行 0.1**,重试 ≤ 1 次。详见 `reference.md`「命令执行模式 preflight」。
111
-
112
- ### Phase 0.2:fallback 执行器探测(仅在首选执行器不可用时执行)
113
-
114
- 只有 0.1 通过但首选接口测试执行器不可用时才执行 0.2。如果 0.1 已确认执行器在 PowerShell 中可用,直接选择 **接口测试执行器**(Node runner 为一种实现,可按项目替换),不得继续探测或使用 Playwright MCP。
115
-
116
- 严格优先级(不得颠倒):接口测试执行器(默认首选,Node runner 为一种实现,可按项目替换为其他 HTTP 客户端)> PowerShell batch `.ps1`(首选不可用时降级)> Playwright MCP `browser_evaluate`(仅当 1+2 都不可用或用户明确选择)> curl + UTF-8 JSON body file(最后兜底)> 禁止直接用 curl 内联发送含中文 JSON body。
117
-
118
- > ⚠️ Playwright MCP `browser_evaluate` 不得替代执行器。执行器在 PowerShell 可用时,**禁止**使用 Playwright MCP 逐条执行接口测试——认证凭证是独立凭证,应读认证凭证缓存,由执行器直连本地 baseURL 发起请求。详见 `reference.md`「fallback 执行器探测」。
119
-
120
- ### Phase 1-2:测试执行(默认主会话执行)
121
-
122
- **Phase 1 前先检查 verification-ledger**:先执行 `harness_preflight.py check --project . --json`;profile 缺失或因清单、锁文件、源码根、技术栈变化而陈旧时立即执行一次 `detect --project . --json`。随后通过 state layout 解析后的路径调用 `harness_ledger.py can-reuse --project . --profile-input <key> --command <profile 解析出的规范命令>`;可复用时不得重跑。不得手工读取实现源码来猜账本参数。按返回的 `executionNeed` 使用中文:`first-run`=“尚未执行,需要首次运行”,`rerun`=“证据已失效,需要重新运行”,`evidence-incomplete`=“已有记录不完整,需要重新验证”,`reuse`=“现有证据可复用”;禁止把首次执行统一描述成“强制重跑”。
123
-
124
- **默认在主会话执行**(不委派 subagent):
125
- - 单元测试:可复用则跳过重跑;否则按技术栈执行测试命令
126
- - 接口测试:**强制批量执行器**,一次跑完全部场景,主会话只读 JSON
127
-
128
- ### Phase 3:覆盖率总结 + 关门检查(主会话执行)
129
-
130
- 读取测试报告,生成覆盖率总结,**执行关门检查**,包含:单元测试通过/失败/跳过计数、接口测试逐条结果+汇总+耗时、数据兼容验证汇总、败因分类(代码 Bug vs 测试脚本 vs 预存问题)、请求执行器及降级原因、关门检查 10 项(见「关键规则·十」)。
131
-
132
- ### Java 测试环境补充
133
-
134
- - **preflight 0.1**:写入 `runtime/preflight.json` 的 `executorPath`/`mvnVersion` 等;Maven 可用性 `mvn -version` exit 0
135
- - **编译门禁**:测试前按 `build-profile.json` 的 `commands.compile`(v2,profile key resolve);输出须含 `BUILD SUCCESS` 或 exit 0 证据
136
- - **条件 install**:worktree 首建或上游模块变更时按 profile 执行 `commands.install`(非每次强制 `-am`)
137
- - **单元测试**:可复用 ledger unitTest 则跳过;否则 `commands.unitTest`(典型 `mvn test -pl <module>`);执行模块全量 `commands.unitTestFull` 成功 → 记 `unitTestFull`(scope=module,供 submit 复用)
138
- - **陈旧测试安全修复**:测试编译明确命中已移除/改名 API 且当前代码与批准计划唯一确定新契约时,只修测试并定向重跑,记录 `stale-test-repair`;有歧义则 `BLOCKED_PREEXISTING`,禁止 `.bak`/删除/禁用/exclude
139
- - **服务启动**:`build-profile.json` 的 `serviceStartTemplate`(典型 `spring-boot:run` + profile);**禁止 hardcode 端口/模块路径**
140
- - **Maven 生命周期去重**:单元测试已独立通过后,服务启动命令可配置 `-Dmaven.test.skip=true` 避免重复测试编译;它仅优化启动,不是测试通过证据
141
- - **服务指纹输入**(Task 3 §5.1):`serviceStart.inputFiles` 必须列出 module 源 glob(如 `["<module>/pom.xml", "<module>/src/main/**/*.java", "<module>/src/main/resources/**"]`);`harness_service.py ensure` 取 CLI `--files` ∪ `inputFiles` 计算 `moduleInputsHash`。**空输入被拒绝**,不得生成可复用空指纹。源码/command/profile/overlayPath 任一变化即 restart
142
- - **runtime overlay**:`-Dspring.config.additional-location=file:<ascii-abs-path>/application-harness-test.yml`;禁止默认 Edit tracked `application*.yml`
143
- - **known-good-test-profile**:profile 名、baseURL、healthUrl 写在 build-profile,非 skill 硬编码
144
- - **多租户请求头**:header 名/值来自 build-profile 的 `httpHeaders` 配置
145
- - **Service Gate**:`harness_service.py ensure` 返回 `needs-user-decision`(用户进程占端口)时**才** blocking user confirmation
146
- ## P0 执行可信度规则
147
-
148
- - 命令结果不得靠猜测;普通 Bash 被拒 → 立即改用等价 PowerShell 重试一次
149
- - 仅 PowerShell 成功且有明确证据(构建/git/测试输出、文件存在、exit 0)时可标 ✅OK;否则 ❌FAIL 或 🟡WARN
150
- - 禁止把 hook 拒绝、静态验证、无输出、用户跳过说成成功 → 详见 [[../protocols/powershell-protocol.md|powershell-protocol]]、[[../protocols/evidence-based-reporting-protocol.md|evidence-based-reporting-protocol]]
151
-
152
- ## 生成内容语言约定
153
-
154
- - sync/ingest 等生成的文档、规则、知识条目、架构说明一律**优先使用中文**撰写(标识符、命令、代码、API 字段名保持原文)
155
- - 面向平台展示的标题/摘要/正文默认中文;仅当用户明确要求或目标系统强制时才用英文
156
- > 片段:p0-trust
157
-
158
- ## 关键规则(硬门禁速查)
159
-
160
- > 每条规则的详细判定、模板、表格见 `reference.md` 对应章节;Shell 执行安全见 `../protocols/powershell-protocol.md`,证据化报告见 `../protocols/evidence-based-reporting-protocol.md`,敏感信息见 `../protocols/sensitive-info-protocol.md`,ledger 见 `../protocols/ledger-protocol.md`,状态目录见 `../protocols/state-layout-protocol.md`,结构化报告事件见 `../protocols/report-pipeline-protocol.md`。
161
-
162
- ### 一、接口测试工具优先级
163
-
164
- 强制优先级:**接口测试执行器**(默认首选,Node runner 为一种实现,可按项目替换为其他 HTTP 客户端)> PowerShell batch `.ps1`(首选不可用时降级)> Playwright MCP `browser_evaluate`(仅 1+2 不可用或用户明确选择)> curl + UTF-8 JSON body file(最后兜底,须通过 PowerShell 调用)。**禁止裸 `node`、禁止用 Bash 执行 node**(`disallowed-tools` 已禁 `Bash(node *)`);执行器在 PowerShell 可用时**不得**用 Playwright MCP 逐条执行。详见 `reference.md`「接口测试工具优先级」。
165
-
166
- ### 二、批量测试执行 + Runner 三阶段
167
-
168
- 0.1 通过后生成 `.harness/changes/<change-name>/runtime/api-test-runner.mjs`(按技术栈选择实现,Node runner 为一种实现,可按项目替换),通过**一次命令**(PowerShell + 执行器绝对路径)执行全部场景,输出 `api-test-results.json`,主会话只读 JSON。执行器必须按 **setup / test / cleanup** 三阶段:setup 失败时依赖场景标 🟡 BLOCKED,**不得用 null ID 继续请求**。绝对路径从 `runtime/preflight.json` 的 `executorPath` 读取,禁止 hardcode。详见 `reference.md`「批量测试执行器」「执行器三阶段模板」。
169
-
170
- ### 三、请求体与测试数据
171
-
172
- 请求体必须从数据契约 / 接口定义 / 真实样例生成,**禁止临场猜字段、禁止先跑失败接口再补**。测试数据用唯一前缀 `TEST_<change-name>_<timestamp>_<random>`;唯一约束字段必须随机或避让,避免冲突导致大面积 BLOCKED。详见 `reference.md`「请求体生成」「测试数据治理」。
173
-
174
- ### 四、单元测试复用 + 写入 ledger
175
-
176
- Phase 1 前用 `harness_ledger.py diff-hash` 和 `can-reuse` 重算真实指纹。验证目标必须使用 profile key 的单一入口:`--project . --profile-input unitTest|unitTestFull --command <规范命令>`;声明 `--profile-input` 后不得同时传入另一套 `--files`。`record` 与 `can-reuse` 必须消费同一 profile target,由 CLI 推导 scope、coverage、规范命令与输入闭包。`npx vitest run` 与 `vitest run` 等包装差异由账本规范化,`safe runner` 等说明只能写 `--runner-command` 元数据。可复用则跳过;否则执行同一 profile 命令并只登记一条结果。增量测试记 `unitTest`,模块全量记 `unitTestFull`,API/浏览器分别记录。详见 `checklist.md` 与 ledger protocol。
177
-
178
- 报告必须分开呈现“产品测试”与“工具维护”。`ownership.productPaths` 决定产品结论;`.cursor/.agents/.claude/.codebuddy` 的 Harness 投影、context-index 与安装状态变化只进入“工具维护”,不得单独把产品结果降为 WARN。已知升级使用明确文案“Harness 已从 <旧版本> 更新到 <新版本>”,不得写“无关漂移”。场景统计分别列出:已执行、待手工验收、已豁免、说明性、NOT_APPLICABLE;“未验证”必须只等于仍要求执行但尚未完成的场景数。
179
-
180
- ### 五、命令与请求超时治理
181
-
182
- 所有命令必须通过资源安全 Runner 设置「预期时长 + 超时上限」,超过预期必须输出一次状态行,**不得静默等待**。测试模块超时或退出时必须清理其进程树;`durationMs > 10000` → 🟡 SLOW,`> 30000` → ❌ TIMEOUT_RISK。详见 `reference.md`「命令与请求超时治理」。
183
-
184
- ### 五-A、陈旧测试安全修复
185
-
186
- 若测试编译或执行明确指向已移除/改名 API 的陈旧测试,且当前生产代码、已批准计划或可验证历史能唯一确定新契约,可仅修改测试并立即重跑该测试与目标测试,然后记录:
187
-
188
- ```text
189
- python <skills-root>/scripts/harness_test_guard.py record --project . --change-dir ".harness/changes/<change-name>" --files "<精确测试文件路径,逗号分隔>" --reason stale-test-repair --json
190
- ```
191
-
192
- 普通新增/更新测试使用 `tdd-created` / `test-updated`。存在业务歧义或修复会触及生产代码时,记录 `BLOCKED_PREEXISTING` 并停止复用该验证,不得猜测或绕过。
193
-
194
- **禁止临时排除测试**:禁止 `.bak`/改名、移出测试目录、删除、禁用注解、构建 exclude、`skipTests`/`maven.test.skip` 充当测试通过证据;服务启动可在单元测试已独立通过后使用 `-Dmaven.test.skip=true` 避免重复编译测试,但不得据此声明测试通过。所有本轮新增、更新或安全修复且被忽略的测试必须写入 test-tracking manifest;仅执行、未修改的只读 ignored test 不获得 force-track 授权。
195
-
196
- ### 六、服务启动 + 生命周期管理
197
-
198
- 启动等待状态机:0–30s 每 2s 探测、30–120s 每 5s 探测、>120s 读日志判定;遇启动失败特征立即停。**Service Gate**:`harness_service.py ensure` 返回 `action=needs-user-decision`(用户自启服务占端口)时 **才** blocking user confirmation;AI 托管服务或端口空闲则自动继续,不询问。服务指纹(`moduleInputsHash`,来自 CLI `--files` ∪ `serviceStart.inputFiles`)+ `startCommandHash` + `profile` + `overlayPath` + 进程身份任一变化即 restart;**空输入被拒绝**,不生成可复用空指纹。测试结束默认清理 AI 启动的服务。详见 `reference.md`「服务决策门」。
199
-
200
- ### 七、运行时配置叠加(不动 tracked 配置)
201
-
202
- 禁止默认 Edit tracked 应用配置文件。默认运行时配置叠加(ASCII 绝对路径);改 tracked 配置 → 默认拒绝,记 `decision` 事件(不 blocking user confirmation,报告 🟡 WARN)。详见 `reference.md`。
203
-
204
- ### 八、Token 缓存与复用
205
-
206
- 先读 `.harness/changes/<change-name>/runtime/credential-cache.json`(认证凭证缓存,按项目认证机制;token/SSO 为常见实现),本地轻量接口验证通过则复用,失败才走远程认证。接口测试执行器用 request context / 原生 HTTP 客户端直连本地 baseURL,**不得依赖浏览器当前页面 origin**。同一次流程内凭证刷新计数 > 1 → 🟡 WARN。**不得在报告/日志/对话总结中输出明文凭证**。详见 `reference.md`「认证凭证缓存与复用」。
207
-
208
- > ⛔ **验证码 = 硬停,不是待解的技术问题。** 登录响应出现 `验证码` / `captcha` / `blockPuzzle` / `slider` / `geetest` 等特征时,**禁止**编写或运行任何求解代码(图像匹配、OCR、打码平台、反编译服务端找容差均在禁止之列)。立即记 `apiTest=BLOCKED`,请用户手工把凭证写入 `runtime/credential-cache.json` 或临时关闭测试环境验证码,并提示 `.harness/config/harness-test-config.md` 的认证方式已过期。详见 `pitfalls.md` 规则 31。
209
-
210
- ### 九、测试报告状态规则
211
-
212
- 整体 ✅OK / 🟡WARN / ❌FAIL 三态;API 维度使用 `OK` / `PARTIAL` / `BLOCKED` / `NOT_RUN` / `FAIL` 五态。**不得把「5 PASS + 9 BLOCKED + 1 FAIL」写成 `apiTest=NOT_RUN`**,正确为 `apiTest=PARTIAL`。P0 场景 BLOCKED 不得仍 OK。详见 `reference.md`「结果分级规则」。
213
-
214
- ### 十、关门检查(结束前强制执行)
215
-
216
- 输出最终总结前必须执行 10 项:`git status --porcelain` / `git diff --stat` / `git diff --check`(失败→❌FAIL,必须 PowerShell-only)/ 明文敏感信息 / runtime 不提交 / 服务生命周期收尾 / 测试数据清理 / 执行器表完整 / 慢请求或超时 / 未清理+fallback+慢请求→至少 🟡WARN。详见 `checklist.md`「关门检查」、`reference.md`「关门检查」。
217
-
218
- ### 十一、请求执行器 fallback 输出 + 性能统计
219
-
220
- 报告必须区分四种执行器(接口测试执行器 / PowerShell batch / Playwright MCP browser_evaluate / curl),**不得笼统写"Playwright"**,不得把 "Playwright API 执行器" 与 "Playwright MCP browser_evaluate" 混写。报告必须含请求耗时统计表。详见 `reference.md`「请求执行器 fallback 输出」「输出格式」。
221
-
222
- ## Output Format
223
-
224
- > 详细报告格式见 `reference.md` 的「输出格式」模板。
225
-
226
- 测试报告保存到 `.harness/changes/<change-name>/reports/test/test-report-YYYYMMDD-HHmm.md`(时间戳区分多次运行),同时在控制台输出摘要。
227
-
228
- ## 渐进披露
229
-
230
- - **Read `checklist.md`** 仅在 Phase 0 环境准备时 — 含 各项强制检查、0.1 命令执行模式 preflight、服务生命周期清单
231
- - **Read `reference.md`** 仅在执行接口测试时 — 含 API 测试执行方法、已知良好测试配置、运行时配置叠加、setup/test/cleanup 执行器模板、双格式错误码兼容
232
- - **Read `pitfalls.md`** 仅在遇到测试失败时 — 含所有踩坑规则(30 条,含 Bash 执行执行器 / 运行时配置叠加 / 唯一字段冲突 / 服务生命周期等)
233
-
234
- ## 交互白名单
235
-
236
- 本 skill **仅允许**以下 blocking user confirmation;其余默认值 + `decision` 事件:
237
-
238
- 1. **Service Gate**:仅当 `harness_service.py ensure` 返回 `needs-user-decision`(用户进程占端口)时询问处理方式
239
- 2. **资源密集型测试确认**:仅当发布/验收确实需要 `system` 或 `full` 档位,且用户尚未明确授权时询问;获得授权后传入 `--confirm-resource-intensive`
240
-
241
- ## 执行日志
242
-
243
- `events.ndjson` 为唯一事实源(schema_version 3,兼容读取 v1/v2;`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止用 Write/Edit 直接维护**。直接修改的内容会在 `phase.end` 或 finalize 时被完整重建覆盖,属于数据丢失;需要保留的详情必须进入事件 `note`。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
244
-
245
- **`phase.start` 由 `harness_gate.py begin` 写,不要再手工追加一次。** 两条同 `run-id` 的
246
- `phase.start` 会让 `plan finalize` 以 `PHASE_START_DUPLICATE` 卡死,而且手工那次会先触发
247
- auto-seal、把正在开始的 attempt 封成 `RECOVERED`。要补触发指令说明就带 `--note` 跑 `gate begin`。
248
- (重复追加现已按 `(phase, run-id)` 判为幂等 no-op,但依赖它不如不写。)
249
-
250
- ```powershell
251
- # 阶段开始:gate begin 负责,note 在这里给
252
- python <skills-root>/scripts/harness_gate.py begin --change-dir ".harness/changes/<change-name>" --phase <phase> --note "<触发指令>"
253
- # 阶段中的其他事件才用 append
254
- python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase <phase> --type <command|issue|verification> --run-id <phase-run-id> --note "<摘要>"
255
- ```
256
-
257
- > **脚本接线**:`harness_events.py append`;`harness_archive.py finalize`;`harness_preflight.py check`;`harness_ledger.py can-reuse`;`harness_service.py ensure/stop`(须 `--files`/`serviceStart.inputFiles`)。JSON 输出按 D13 护栏解读。
258
-
259
- > **Task 4 §6.1 写入契约**:普通 `append` = 加锁 -> 追加一行 -> fsync -> 解锁,**不 load 历史、不渲染**(O(1),跨进程锁 `events.ndjson.lock`,UUID 用完整 `uuid4().hex` 无需去重扫描)。仅 `--type phase.end` append 在追加成功后渲染一次 `execution-log.md`;显式 `harness_events.py render` 随时从完整 events 重建;`harness_archive.py finalize` 在 collect 前强制 render 一次。高频 command append 期间 log 可能滞后,phase 边界保持最新。
260
-
261
- 每个阶段的 `phase.start` 与对应 `phase.end` 必须复用同一 `--run-id` / `--attempt`;阶段结束必须写 `--status OK|WARN|FAIL|BLOCKED`。重试同一阶段时生成新的 run-id 并增加 `--attempt <n>`,不得覆盖或伪装成一次执行。**`attempt` 按 phase 全局递增,不是按 run-id**:一个 run-id 只绑定一个 attempt,重试必须「新 run-id + 下一个 attempt」两者同时换,只换其一会撞 `EVENT_ATTEMPT_CONFLICT` 或 `PHASE_ALREADY_CLOSED`。已发布 plan 的修订通过重跑 `plan evidence-pack` + `plan finalize` 分配新 attempt(`harness_plan_finalize.py republish` 已于 0.3.0 移除)。
262
-
263
- 阶段跑得久(plan/run 常见)时用 `harness_context.py renew --project . --change <cn> --executor <tool>` 续租;租约到期本身不再阻断 `close`(同一 owner 的过期租约不构成冲突,收据里记 `leaseLapsed`),但续租能让 `view` 的状态如实反映在跑。跨工具继续执行时写 `--executor-tool <codex|claude-code|codebuddy|cursor>`,并在接棒事件写 `--handoff-from-tool` / `--handoff-reason`;也可由 `HUNTER_HARNESS_TOOL/AGENT/MODEL/RUN_ID` 环境变量统一注入。
264
- > 片段:logging · phase=`test` · 事件:phase/command/verification/decision/issue/artifact
@@ -1,320 +0,0 @@
1
- ---
2
- description: harness-test 的 Phase 0 环境准备 + Playwright 探测 + 关门检查清单。仅在执行测试前的环境准备阶段读取。
3
- ---
4
-
5
- # harness-test 检查清单 — Phase 0 环境准备 + 关门检查
6
-
7
- 这 7 项确认完了再开始测试。每一项背后都有踩坑经历。
8
-
9
- #### 0.0 加载项目配置(如存在)与确定变更名
10
-
11
- 先检查当前项目的测试配置文件(按优先级查找):
12
-
13
- 1. **优先**:`.harness/config/harness-test-config.md`(集中配置目录)
14
- 2. **兼容**:`harness-test/harness-test-config.md(兼容旧路径)`(旧路径,过渡期仍支持)
15
-
16
- 如果任一文件存在,**必须先读取并应用其中的配置**。配置文件通常包含:
17
-
18
- - **登录端点**:本地无法直接登录时,远程 SSO/Gateway 的登录 URL
19
- - **测试账号**:各权限级别的用户名密码(如 admin、一层组织管理员等)
20
- - **真实测试数据**:有效的部门编码和名称、项目 ID、规则 ID 等
21
- - **环境调整**:需要使用的 profile、需要临时放行的 URL 路径、需要跳过的模块
22
- - **避坑补充**:本项目特有的已知问题和解决方案
23
-
24
- **Profile 选择**(从配置文件读取,如无配置则询问用户):
25
-
26
- | Profile | 适用场景 | 配置文件 |
27
- |---------|---------|---------|
28
- | `local` | 连接远程数据库/Redis | `application-local.yml` |
29
- | `local-dev` | 完全本地隔离 | `application-local-dev.yml` |
30
-
31
- > **关键**:不指定 profile 时默认使用 `application.yml` 中的配置(可能指向生产环境),必须显式指定。启动命令必须包含 `--spring.profiles.active=<profile>`。
32
-
33
- 然后确定变更名:用 Glob 搜索 `.harness/changes/*/plans/*-plan.md`(**排除 `.harness/archive/*/`**),读取 frontmatter 提取 `change-name`。
34
-
35
- #### 0.0y:命令执行模式 preflight(⚠️ 必须在编译/启动服务/生成 runner 之前执行)
36
-
37
- - [ ] 检查 PowerShell 基础命令:`powershell.exe -NoProfile -Command "$PSVersionTable.PSVersion"` 返回 exitCode=0
38
- - [ ] 检查 Node 绝对路径:`powershell.exe -NoProfile -Command "& 'C:\nvm4w\nodejs\node.exe' --version"` 返回 exitCode=0
39
- - [ ] 检查 Maven 可用性:`powershell.exe -NoProfile -Command "mvn -version"` 返回 exitCode=0
40
- - [ ] 读取 `.mvn/maven.config`,Maven 命令不重复或覆盖已有 `-s` / `-o` / 仓库设置
41
- - [ ] 离线依赖缺失时仅在项目规则允许联网时执行至多一次非离线 `-nsu` 恢复;失败后停止,禁止切换参数反复重试
42
- - [ ] 检查安全分类器:上述任一命令是否返回"安全分类器暂时不可用" / Auto mode 拦截 → **不应出现**
43
- - [ ] 将通过的 `nodeAbsolutePath` / `powershellVersion` / `mvnVersion` 写入 `.harness/changes/<change-name>/runtime/preflight.json`
44
- - [ ] **任一情况触发硬停**:原文输出"❌ 命令执行模式不可用:PowerShell/Node runner 无法稳定执行...",**不得继续编译/启动服务/生成 runner,不得长时间等待,不得盲目降级到 Playwright MCP**
45
- - [ ] 用户确认切换权限模式后,**重新执行 0.0y**;重试 ≤ 1 次
46
-
47
- #### 0.0x:fallback 执行器探测(仅在 Node runner 不可用时执行)
48
-
49
- - [ ] 如果 0.0y 已确认 PowerShell Node API runner 可用:标记 `NOT_NEEDED`,**跳过本阶段**,直接使用 Node runner
50
- - [ ] 仅当 Node runner 不可用时,检查 PowerShell batch runner (`.ps1`) 是否可用
51
- - [ ] 仅当 PowerShell batch 也不可用时,检查 Claude Code 是否暴露 Playwright MCP 工具(`mcp__plugin_playwright_playwright__*` 存在)
52
- - [ ] 检查 `claude mcp list` 中是否有 playwright(如果可以执行命令)
53
- - [ ] 检查 `@playwright/mcp` 是否可启动
54
- - [ ] 检查当前 skill 的 `allowed-tools` 是否允许 Playwright 相关工具
55
- - [ ] 输出 fallback 执行器可用性表格(见 reference.md)
56
- - [ ] 记录决策:PowerShell Node API runner / PowerShell batch / Playwright MCP browser_evaluate / curl fallback
57
- - [ ] 如果 fallback 不可用,必须写明原因,不得静默改用 curl
58
-
59
- #### 0.1 编译确认
60
-
61
- ```powershell
62
- powershell.exe -Command "Test-Path 'target/classes/<package>/<ChangedClass>.class'"
63
- ```
64
- 编译产物时间戳早于源文件 → 重新编译:
65
- ```powershell
66
- powershell.exe -Command "mvn compile -pl <module> -o -q"
67
- ```
68
-
69
- **编译成功必须有证据**:
70
- - mvn 输出包含 `BUILD SUCCESS` 才能继续测试
71
- - 如果命令被 hook 拒绝(`Denied` / `PreToolUse:Bash hook error`),停止流程
72
- - 不得在编译失败时继续宣称"准备进入测试阶段"
73
-
74
- #### 0.1b 依赖模块预安装检查
75
-
76
- > **强制检查,不可跳过。** 即使服务已运行,worktree 中的编译仍可能缺少依赖(服务可能从主目录启动)。
77
-
78
- **在编译前检查上游依赖模块是否已安装到本地仓库**:
79
-
80
- ```powershell
81
- powershell.exe -Command "Test-Path '$env:USERPROFILE\.m2\repository\<group-path>\<module>\*\*.jar'"
82
- ```
83
-
84
- 如果缺失,先安装上游依赖:
85
- ```powershell
86
- powershell.exe -Command "mvn install -pl <upstream-modules> -am -DskipTests -nsu"
87
- ```
88
-
89
- #### 0.2 认证方案确认
90
-
91
- | 方案 | 适用场景 | 操作 |
92
- |------|----------|------|
93
- | A. 配置放行 | 纯本地开发 | `application-local.yml` 的 `permit-all-urls` |
94
- | B. 本地 Token | 有本地 SSO | 通过本地登录接口获取 |
95
- | C. 权限降级 | 临时测试 | 无认证上下文时降级为 admin |
96
-
97
- > ⚠️ 方案 A 或 C 时,测试完成后确认还原配置。
98
-
99
- #### 0.3 请求头确认
100
-
101
- 所有 HTTP 请求必须带:`Content-Type: application/json; charset=UTF-8` 及 build-profile 的 `httpHeaders`。
102
-
103
- #### 0.4 编码确认
104
-
105
- Windows 环境特别注意:
106
- - 不要用 `curl` 发送含中文的请求体(curl 在 Windows 默认用 GBK 编码)
107
- - 优先用 PowerShell Node API runner;单次临时请求可用 PowerShell `Invoke-RestMethod`
108
- - curl 仅作为最后兜底,且必须用 UTF-8 JSON body file
109
-
110
- #### 0.5 服务确认、Service Decision Gate 与启动等待
111
-
112
- 检查服务是否运行(优先使用已知接口,不依赖 `/actuator/health`):
113
-
114
- ```powershell
115
- powershell.exe -NoProfile -Command "Test-NetConnection -ComputerName localhost -Port <port>"
116
- powershell.exe -NoProfile -Command "try { (Invoke-WebRequest -Uri 'http://127.0.0.1:<port>/<context-path>/meta' -UseBasicParsing -TimeoutSec 3).StatusCode } catch { $_.Exception.Message }"
117
- ```
118
-
119
- **如果端口已有 <service-module-from-build-profile> 进程,必须先进入 Service Decision Gate,禁止先跑业务接口。**
120
-
121
- 需要展示:pid、profile、startTime、commandLine、healthResult、serviceFingerprint(match/missing/mismatch)、当前源码是否晚于服务启动时间。
122
-
123
- 询问用户:
124
-
125
- ```text
126
- 1. 直接复用当前服务
127
- 2. 重启服务,使用 known-good-test-profile
128
- 3. 跳过接口测试,只执行单元测试
129
- 4. 停止测试
130
- ```
131
-
132
- 只有 service-fingerprint 与当前真实 diffHash/profile/sdkUrl/startCommandHash 完全匹配时,才允许自动复用。否则必须询问。
133
-
134
- **如果服务未运行**,询问用户:
135
-
136
- ```text
137
- 服务未启动(端口 <port> 无响应)。请选择:
138
- 1. AI 启动 — 使用 known-good-test-profile,serviceState=AI_STARTED
139
- 2. 用户手动启动 — 启动后告诉我继续,serviceState=USER_STARTED
140
- 3. 跳过接口测试 — 只运行单元测试,serviceState=NOT_STARTED
141
- 4. 停止测试
142
- ```
143
-
144
- **如果用户选择 AI 启动或 AI 重启**:
145
- 1. 从 `known-good-test-profile` 读取 module/profile/port/healthUrl/sdkUrl。
146
- 2. 生成 ASCII overlay:`C:/temp/harness-test-overlay/<change-name>/application-harness-test.yml`。
147
- 3. 禁止默认直接 Edit tracked `application-local-dev.yml`。
148
- 4. 默认启动命令:
149
- ```powershell
150
- powershell.exe -NoProfile -Command "mvn spring-boot:run -pl <module-from-build-profile> -Dspring-boot.run.profiles=local-dev -Dspring-boot.run.jvmArguments='-Dspring.config.additional-location=file:C:/temp/harness-test-overlay/<change-name>/application-harness-test.yml'"
151
- ```
152
- 5. 写入 `service.pid`、`service-start-command.txt`、`service-start.log`、`service-fingerprint.json`。
153
- 6. 服务启动等待:0–30s 每 2s 探测;30–120s 每 5s 探测;>10s 必须输出状态行;>120s 读取最近 200 行日志。
154
- 7. 发现 `BindException` / `Could not resolve placeholder` / `Connection refused during bean init` / `BeanCreationException` / `Failed to start bean` / `BUILD FAILURE` 立即失败。
155
-
156
- #### 0.5x 重入沿用(同一变更 harness-test 再次执行时)
157
-
158
- 满足以下**全部**条件时,可沿用上次服务决策,不重复询问:
159
-
160
- 1. 重入:同一 change-name 的 harness-test 再次执行(非首次)
161
- 2. 环境未变:PG 可用性、目标端口、执行器可用性与上次一致
162
- 3. 上次已确认执行器/服务方案(如"AI_STARTED,known-good-test-profile,端口 N")
163
- 4. 当前源码未改服务启动逻辑(如未改 main 启动路径、未改端口/profile 配置、未改 spring-boot:run 启动相关代码)
164
-
165
- 沿用时执行日志记录:`重入沿用上次服务决策 + 环境未变(PG=<同上次>、端口=<同上次>、执行器=<同上次>)`。
166
-
167
- **不适用重入沿用**(仍须询问/重启):
168
- - service-fingerprint 不匹配(diffHash 变化说明源码改了)
169
- - 环境已变(PG 从不可用变可用、端口被占、执行器丢失)
170
- - 上次 serviceState=USER_STARTED(用户手动启动,状态未知)
171
- - 源码改动影响服务启动逻辑
172
-
173
- #### 0.5d 服务生命周期收尾(即使测试失败也要进入 finally 清理)
174
-
175
- 测试结束前必须按 serviceState 分支处理:
176
-
177
- - `AI_STARTED` → 默认 `Stop-Process -Id <pid> -Force`,删除 `service.pid`,记录 `testServiceStopped=✅`。
178
- - `AI_RESTARTED_FROM_USER_SERVICE` → 默认停止新服务,报告中明确 `restoredOriginalService=❌ not supported`。
179
- - `USER_STARTED` → 保留进程,报告中提示用户可手动停止。
180
- - `REUSED_EXISTING` → 保留进程,除非用户明确要求关闭。
181
-
182
- 测试报告与 `summary-data.json` 的服务生命周期投影必须包含:
183
-
184
- ```md
185
- ## 服务生命周期
186
- | 项 | 值 |
187
- |---|---|
188
- | originalServicePid | ... / N/A |
189
- | originalServiceStopped | ✅ / ❌ / N/A |
190
- | testServicePid | ... / N/A |
191
- | testServiceStopped | ✅ / ❌ / N/A |
192
- | restoredOriginalService | ❌ not supported / N/A |
193
- | finalPortState | no service / service running |
194
- ```
195
-
196
- > 不要使用 Monitor 工具等待健康检查,直接用 PowerShell 检查已知接口。`/actuator/health` 可能返回 404。
197
-
198
- #### 0.5b 配置文件完整性检查
199
-
200
- **如果使用 worktree**,检查配置文件是否完整:
201
-
202
- ```powershell
203
- powershell.exe -Command "Test-Path '<worktree-path>/<module>/src/main/resources/application-<profile>.yml'"
204
- ```
205
-
206
- 如果缺失,从主目录复制:
207
- ```powershell
208
- powershell.exe -Command "Copy-Item '<main-dir>/<module>/src/main/resources/application-<profile>.yml' '<worktree-path>/<module>/src/main/resources/' -Force"
209
- ```
210
-
211
- **检查关键配置项**(读取配置文件内容确认):
212
- - `workflow.baseUrl`(或类似条件属性)— 缺失会导致 Bean 创建失败
213
- - `spring.cloud.nacos.discovery.register-enabled: false` — 缺失会导致线上流量路由到本地
214
- - `udp.security.permit-all-urls` — 需包含本次测试的接口路径
215
-
216
- #### 0.5c Playwright 远程访问确认
217
-
218
- 如果接口测试需要通过 Playwright 访问远程服务(如远程 SSO 获取 token),确认 Playwright MCP 配置允许目标地址。
219
-
220
- 检查 `.mcp.json` 或全局 MCP 配置中 Playwright 的 `allowedOrigins`:
221
- ```json
222
- {
223
- "playwright": {
224
- "allowedOrigins": ["http://localhost:*", "http://<remote-ip>:*"]
225
- }
226
- }
227
- ```
228
-
229
- > 如果 Playwright 无法访问远程地址,降级为 PowerShell Invoke-RestMethod 获取 token。
230
-
231
- #### 0.6 Nacos 风险确认
232
-
233
- 确认 `application-local.yml` 中 `spring.cloud.nacos.discovery.register-enabled: false`。
234
-
235
- ## 接口测试执行检查
236
-
237
- ### Token 缓存与复用
238
-
239
- - [ ] 检查 `.harness/changes/<change-name>/runtime/credential-cache.json` 是否存在
240
- - [ ] 如果存在 → 读取已有 token,用**本地轻量接口**(直连本地 baseURL)验证有效性
241
- - [ ] 验证通过 → 复用,不重新登录、不访问远程 SSO
242
- - [ ] 验证失败(401/expired) → 才访问远程 SSO 重新获取后写回 cache
243
- - [ ] 同一上下文中,前面已获取过 token 时必须优先复用
244
- - [ ] **同一次测试流程内只允许因 token 失效重新获取 1 次**;超过 1 次 → 🟡 WARN,记录原因
245
- - [ ] API runner 用 request context / node fetch 直连本地 baseURL,**不依赖浏览器当前页面 origin**
246
- - [ ] **不得因浏览器 origin 在 SSO 就重新获取 token**;禁止"SSO 取 token→导航 localhost→重新取 token"
247
- - [ ] **不得在报告、execution-log、对话总结中输出明文 token**
248
-
249
- ### 单元测试复用(ledger 驱动)
250
-
251
- - [ ] Phase 1 前通过共享状态目录解析器读取 `evidence/verification-ledger.json`
252
- - [ ] 判断是否复用 run 的 unitTest:diffHash 一致 + module/profile 一致 + scope 一致或更严格 + run 后无行为性修改 + run 实际跑了全量 mvn test
253
- - [ ] 复用 → 跳过重跑,标记"✅ 复用 harness-run 单元测试结果"
254
- - [ ] 不复用 → 重跑 `mvn test -pl <module>`,结果写回 ledger 的 `unitTest` 项
255
- - [ ] HTTP/API 契约结果写入 `apiTest`;真实浏览器/真实栈 Playwright 结果写入 `browserTest`,两者不得互相覆盖
256
-
257
- ### 批量 Runner(强制单次 PowerShell + Node 绝对路径执行)
258
-
259
- - [ ] 0.0y preflight 已通过,`preflight.json` 包含 `nodeAbsolutePath`
260
- - [ ] 生成 `.harness/changes/<change-name>/runtime/api-test-runner.mjs`,**按 setup / test / cleanup 三阶段结构**编写
261
- - [ ] payload 来自 `<XxxSaveReqVO>` / Controller / 真实样例,runner 注释/JSON 中标注字段来源;**禁止临场猜字段、禁止先跑失败接口再补**
262
- - [ ] 唯一前缀 `JAVATEST_<change-name>_<timestamp>_<random>`,priority/projectSubtype 用随机或避让策略,防 `priority=1` 冲突
263
- - [ ] 通过**一次命令**执行(PowerShell + node 绝对路径):
264
- ```powershell
265
- powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "& '<nodeAbsolutePath>' '.harness/changes/<change-name>/runtime/api-test-runner.mjs'"
266
- ```
267
- - [ ] **禁止**裸 `node ...`、禁止用 Bash 执行 node
268
- - [ ] runner 失败 ≤ 1 次重试;仍失败 → 提示用户切换权限模式或手动执行,**不得继续盲目重试或长时间等待**
269
- - [ ] runner 输出 `.harness/changes/<change-name>/runtime/api-test-results.json`,包含
270
- `passed/failed/blocked/skipped/setupErrors/cleanupResult/tokenRefreshCount`
271
- - [ ] **setup 失败时依赖该数据的场景必须标 🟡 BLOCKED,不得用 null ID 继续请求**
272
- - [ ] 主会话只 Read JSON 生成摘要,不再调用 MCP
273
- - [ ] **只有 Node runner 不可执行才降级**:PowerShell batch (.ps1) → 多次 MCP `browser_evaluate` → curl
274
- - [ ] **如果 Node 在 PowerShell 可用,禁止使用 Playwright MCP 逐条执行接口测试**
275
- - [ ] runner 直连本地 baseURL,复用 token,不依赖浏览器 origin
276
- - [ ] 记录每个请求的 durationMs、status、code、message、assertionResult
277
- - [ ] 支持失败时继续执行后续非依赖场景
278
- - [ ] 报告区分四种执行器:**PowerShell Node API runner / PowerShell batch / Playwright MCP browser_evaluate / curl**(不得与"Playwright"混写)
279
-
280
- ### 测试数据命名
281
-
282
- - [ ] 所有测试数据使用前缀 `JAVATEST_<change-name>_<timestamp>_<random>`
283
- - [ ] 测试报告记录测试数据表(ID、Code、用途、是否需要清理)
284
- - [ ] 测试结束后清理可清理的数据
285
- - [ ] 不能清理的记录遗留数据和原因
286
-
287
- ### 请求耗时
288
-
289
- - [ ] 每个请求记录 durationMs
290
- - [ ] durationMs > 10000 → 🟡SLOW,说明原因
291
- - [ ] durationMs > 30000 → ❌TIMEOUT_RISK,说明原因
292
-
293
- ## 关门检查(⚠️ 结束前强制执行)
294
-
295
- - [ ] `powershell.exe -NoProfile -Command "git status --porcelain"`
296
- - [ ] `powershell.exe -NoProfile -Command "git diff --stat"`
297
- - [ ] `powershell.exe -NoProfile -Command "git diff --check"`(如果失败 → 最终结果 ❌FAIL)
298
- - [ ] 检查报告和日志是否包含明文 token/password/secret/access-key/client-secret
299
- - [ ] 检查 `.harness/changes/<change>/runtime/` 是否不会被提交(.gitignore 确认)
300
- - [ ] **服务生命周期收尾**:AI_STARTED→Stop-Process / USER_STARTED→提示 / REUSED_EXISTING→保留或确认 / NOT_STARTED→N/A
301
- - [ ] 检查测试数据是否需要清理
302
- - [ ] 检查请求执行器结果是否完整(4 种执行器,未与 API runner 混写)
303
- - [ ] 检查是否存在慢请求或超时风险
304
- - [ ] **API 维度状态正确**:5 PASS + 9 BLOCKED + 1 FAIL → `apiTest=PARTIAL`,不得写成 `NOT_RUN`
305
- - [ ] 如果存在未清理测试数据、fallback 请求执行器、慢请求或环境变更 → 至少 🟡WARN
306
-
307
- ## 关键原则
308
-
309
- - 如果有项目配置文件,优先从 `.harness/config/harness-test-config.md` 读取并应用(含 `known-good-test-profile`)
310
- - 环境准备(阶段 0)的 **0.0y 命令执行模式 preflight + 7 项检查 + Playwright 探测** 必须在测试之前全部通过
311
- - 单元测试优先于接口测试(先跑 `mvn test`,通过后再跑接口)
312
- - 接口测试优先级:**PowerShell Node API runner > PowerShell batch > Playwright MCP browser_evaluate > curl**
313
- - 单用例失败不阻塞后续用例;setup 失败时依赖场景必须标 🟡 BLOCKED,**不得用 null ID 继续请求**
314
- - 失败类型必须区分:代码 Bug vs 测试脚本问题 vs 预存问题
315
- - 测试数据使用唯一前缀命名 + 唯一字段(priority/projectSubtype)随机或避让,测试后确认清理或记录遗留
316
- - 测试报告持久化到 `.harness/changes/<change-name>/reports/test/test-report-YYYYMMDD-HHmm.md`(时间戳区分多次运行)
317
- - 请求执行器必须在报告中明确记录(四种执行器,含降级原因)
318
- - 请求耗时统计必须包含在报告中
319
- - 服务由 AI 启动的情况,测试结束默认 Stop-Process;**即使测试失败也要进入 finally 清理**
320
- - `summary-data.json` 与平台监控中的 `apiTest` 状态必须使用 OK/PARTIAL/BLOCKED/NOT_RUN/FAIL(不得把 PARTIAL 写成 NOT_RUN)
@@ -1,16 +0,0 @@
1
- # Java 通用踩坑(overlay)
2
-
3
- > 项目专属端口/模块/tenant 值 → [[PROJECT-PROFILE-EXAMPLE.md|PROJECT-PROFILE-EXAMPLE]] / `build-profile.json`
4
-
5
- | # | 规则 | 现象 | 原因 | 处理 |
6
- |---|------|------|------|------|
7
- | 1 | Maven 用 PowerShell | Bash 被拒/乱码 | 中文路径 + hook | `powershell.exe -NoProfile -Command "mvn ..."` |
8
- | 2 | `-pl` 限定模块 | 无关子模块编译失败 | `-am` 拉起坏 POM | 用 `-pl <module>`,慎用 `-am` |
9
- | 3 | settings 相对路径 | Maven 输出乱码 | settings 含中文绝对路径 | `.mvn/maven.config` 用相对 `-s` |
10
- | 4 | 改代码后先 compile | 测试结果不变 | IDE 热重载未生效 | 测试前 `mvn compile -o` |
11
- | 5 | 禁止 Bash 跑 node | runner 失败 | disallowed-tools | PowerShell + 绝对路径 node |
12
- | 6 | Mock Mapper ≠ DB 验证 | 假绿 | 纯 Mock 返回值 | 🟡 静态验证,交 harness-test |
13
- | 7 | 请求体禁止临场猜 | 大面积 400 | 字段与 VO 不一致 | 从 Controller/VO/契约生成 |
14
- | 8 | 唯一字段加前缀 | 409/冲突 BLOCKED | 测试数据撞库 | `TEST_<change>_<ts>_<rand>` |
15
- | 9 | runtime overlay | tracked 配置被改 | 直接 Edit yml | additional-location 叠加 |
16
- | 10 | Service Gate 先决策 | 旧服务 500 | 端口已有进程 | ensure → needs-user-decision 才问 |