@hunter-harness/workflow-harness 0.3.1 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (402) hide show
  1. package/harness/bundles/general/claude-code/.harness-build.json +1 -1
  2. package/harness/bundles/general/claude-code/harness-archive/SKILL.md +1 -1
  3. package/harness/bundles/general/claude-code/harness-archive/reference.md +30 -1
  4. package/harness/bundles/general/claude-code/harness-archive/templates/summary-data-template.json +1 -0
  5. package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +1 -1
  6. package/harness/bundles/general/claude-code/harness-execute/SKILL.md +1 -1
  7. package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
  8. package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +1 -1
  9. package/harness/bundles/general/claude-code/harness-plan/SKILL.md +1 -1
  10. package/harness/bundles/general/claude-code/harness-pull/SKILL.md +1 -1
  11. package/harness/bundles/general/claude-code/harness-push/SKILL.md +1 -1
  12. package/harness/bundles/general/claude-code/harness-review/SKILL.md +1 -1
  13. package/harness/bundles/general/claude-code/harness-run/SKILL.md +1 -1
  14. package/harness/bundles/general/claude-code/harness-submit/SKILL.md +1 -1
  15. package/harness/bundles/general/claude-code/harness-sync/SKILL.md +1 -1
  16. package/harness/bundles/general/claude-code/harness-test/SKILL.md +1 -1
  17. package/harness/bundles/general/claude-code/scripts/harness_archive.py +146 -8
  18. package/harness/bundles/general/claude-code/scripts/harness_deploy.py +1 -1
  19. package/harness/bundles/general/claude-code/scripts/harness_knowledge_candidates.py +538 -4
  20. package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
  21. package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +1 -1
  22. package/harness/bundles/general/codebuddy/harness-archive/reference.md +30 -1
  23. package/harness/bundles/general/codebuddy/harness-archive/templates/summary-data-template.json +1 -0
  24. package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +1 -1
  25. package/harness/bundles/general/codebuddy/harness-execute/SKILL.md +1 -1
  26. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
  27. package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  28. package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +1 -1
  29. package/harness/bundles/general/codebuddy/harness-pull/SKILL.md +1 -1
  30. package/harness/bundles/general/codebuddy/harness-push/SKILL.md +1 -1
  31. package/harness/bundles/general/codebuddy/harness-review/SKILL.md +1 -1
  32. package/harness/bundles/general/codebuddy/harness-run/SKILL.md +1 -1
  33. package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +1 -1
  34. package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +1 -1
  35. package/harness/bundles/general/codebuddy/harness-test/SKILL.md +1 -1
  36. package/harness/bundles/general/codebuddy/scripts/harness_archive.py +146 -8
  37. package/harness/bundles/general/codebuddy/scripts/harness_deploy.py +1 -1
  38. package/harness/bundles/general/codebuddy/scripts/harness_knowledge_candidates.py +538 -4
  39. package/harness/bundles/general/codex/.harness-build.json +1 -1
  40. package/harness/bundles/general/codex/harness-archive/SKILL.md +1 -1
  41. package/harness/bundles/general/codex/harness-archive/reference.md +30 -1
  42. package/harness/bundles/general/codex/harness-archive/templates/summary-data-template.json +1 -0
  43. package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +1 -1
  44. package/harness/bundles/general/codex/harness-execute/SKILL.md +1 -1
  45. package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +1 -1
  46. package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +1 -1
  47. package/harness/bundles/general/codex/harness-plan/SKILL.md +1 -1
  48. package/harness/bundles/general/codex/harness-pull/SKILL.md +1 -1
  49. package/harness/bundles/general/codex/harness-push/SKILL.md +1 -1
  50. package/harness/bundles/general/codex/harness-review/SKILL.md +1 -1
  51. package/harness/bundles/general/codex/harness-run/SKILL.md +1 -1
  52. package/harness/bundles/general/codex/harness-submit/SKILL.md +1 -1
  53. package/harness/bundles/general/codex/harness-sync/SKILL.md +1 -1
  54. package/harness/bundles/general/codex/harness-test/SKILL.md +1 -1
  55. package/harness/bundles/general/codex/scripts/harness_archive.py +146 -8
  56. package/harness/bundles/general/codex/scripts/harness_deploy.py +1 -1
  57. package/harness/bundles/general/codex/scripts/harness_knowledge_candidates.py +538 -4
  58. package/harness/bundles/general/cursor/.harness-build.json +1 -1
  59. package/harness/bundles/general/cursor/harness-archive/SKILL.md +1 -1
  60. package/harness/bundles/general/cursor/harness-archive/reference.md +30 -1
  61. package/harness/bundles/general/cursor/harness-archive/templates/summary-data-template.json +1 -0
  62. package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +1 -1
  63. package/harness/bundles/general/cursor/harness-execute/SKILL.md +1 -1
  64. package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +1 -1
  65. package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +1 -1
  66. package/harness/bundles/general/cursor/harness-plan/SKILL.md +1 -1
  67. package/harness/bundles/general/cursor/harness-pull/SKILL.md +1 -1
  68. package/harness/bundles/general/cursor/harness-push/SKILL.md +1 -1
  69. package/harness/bundles/general/cursor/harness-review/SKILL.md +1 -1
  70. package/harness/bundles/general/cursor/harness-run/SKILL.md +1 -1
  71. package/harness/bundles/general/cursor/harness-submit/SKILL.md +1 -1
  72. package/harness/bundles/general/cursor/harness-sync/SKILL.md +1 -1
  73. package/harness/bundles/general/cursor/harness-test/SKILL.md +1 -1
  74. package/harness/bundles/general/cursor/scripts/harness_archive.py +146 -8
  75. package/harness/bundles/general/cursor/scripts/harness_deploy.py +1 -1
  76. package/harness/bundles/general/cursor/scripts/harness_knowledge_candidates.py +538 -4
  77. package/harness/bundles/general/pi/.harness-build.json +6 -0
  78. package/harness/bundles/general/pi/CONTEXT.md +98 -0
  79. package/harness/bundles/general/pi/README.md +478 -0
  80. package/harness/bundles/general/pi/contracts/build-profile-v3.schema.json +302 -0
  81. package/harness/bundles/general/pi/contracts/ci-metrics.schema.json +36 -0
  82. package/harness/bundles/general/pi/contracts/doctor-capability.schema.json +43 -0
  83. package/harness/bundles/general/pi/contracts/external-platform-observation.schema.json +62 -0
  84. package/harness/bundles/general/pi/contracts/fixtures/managed-execution.json +341 -0
  85. package/harness/bundles/general/pi/contracts/process-identity.schema.json +132 -0
  86. package/harness/bundles/general/pi/contracts/run-session.schema.json +142 -0
  87. package/harness/bundles/general/pi/contracts/service-retirement-receipt.schema.json +85 -0
  88. package/harness/bundles/general/pi/contracts/service-session.schema.json +147 -0
  89. package/harness/bundles/general/pi/contracts/workflow-policy.json +574 -0
  90. package/harness/bundles/general/pi/harness-archive/SKILL.md +322 -0
  91. package/harness/bundles/general/pi/harness-archive/checklist.md +71 -0
  92. package/harness/bundles/general/pi/harness-archive/reference.md +150 -0
  93. package/harness/bundles/general/pi/harness-archive/scripts/gen-manifest.ps1 +31 -0
  94. package/harness/bundles/general/pi/harness-archive/templates/summary-data-template.json +218 -0
  95. package/harness/bundles/general/pi/harness-codebase-map/SKILL.md +116 -0
  96. package/harness/bundles/general/pi/harness-codebase-map/checklist.md +126 -0
  97. package/harness/bundles/general/pi/harness-codebase-map/reference.md +364 -0
  98. package/harness/bundles/general/pi/harness-codebase-map/templates/ARCHITECTURE.md +57 -0
  99. package/harness/bundles/general/pi/harness-codebase-map/templates/CONCERNS.md +49 -0
  100. package/harness/bundles/general/pi/harness-codebase-map/templates/CONVENTIONS.md +57 -0
  101. package/harness/bundles/general/pi/harness-codebase-map/templates/INTEGRATIONS.md +52 -0
  102. package/harness/bundles/general/pi/harness-codebase-map/templates/STACK.md +55 -0
  103. package/harness/bundles/general/pi/harness-codebase-map/templates/STRUCTURE.md +69 -0
  104. package/harness/bundles/general/pi/harness-codebase-map/templates/TESTING.md +64 -0
  105. package/harness/bundles/general/pi/harness-codebase-map/templates/map-manifest.schema.json +73 -0
  106. package/harness/bundles/general/pi/harness-codebase-map/templates/map-summary.md +64 -0
  107. package/harness/bundles/general/pi/harness-execute/SKILL.md +170 -0
  108. package/harness/bundles/general/pi/harness-knowledge-ingest/SKILL.md +103 -0
  109. package/harness/bundles/general/pi/harness-knowledge-query/SKILL.md +97 -0
  110. package/harness/bundles/general/pi/harness-plan/SKILL.md +158 -0
  111. package/harness/bundles/general/pi/harness-plan/checklist.md +243 -0
  112. package/harness/bundles/general/pi/harness-plan/protocols.md +133 -0
  113. package/harness/bundles/general/pi/harness-plan/reference.md +468 -0
  114. package/harness/bundles/general/pi/harness-pull/SKILL.md +55 -0
  115. package/harness/bundles/general/pi/harness-push/SKILL.md +83 -0
  116. package/harness/bundles/general/pi/harness-review/SKILL.md +175 -0
  117. package/harness/bundles/general/pi/harness-review/checklist.md +124 -0
  118. package/harness/bundles/general/pi/harness-review/protocols.md +69 -0
  119. package/harness/bundles/general/pi/harness-review/reference.md +114 -0
  120. package/harness/bundles/general/pi/harness-run/SKILL.md +188 -0
  121. package/harness/bundles/general/pi/harness-run/checklist.md +279 -0
  122. package/harness/bundles/general/pi/harness-run/protocols.md +141 -0
  123. package/harness/bundles/general/pi/harness-run/reference.md +886 -0
  124. package/harness/bundles/general/pi/harness-submit/SKILL.md +182 -0
  125. package/harness/bundles/general/pi/harness-submit/checklist.md +452 -0
  126. package/harness/bundles/general/pi/harness-submit/reference.md +152 -0
  127. package/harness/bundles/general/pi/harness-sync/SKILL.md +72 -0
  128. package/harness/bundles/general/pi/harness-sync/reference.md +176 -0
  129. package/harness/bundles/general/pi/harness-test/SKILL.md +250 -0
  130. package/harness/bundles/general/pi/harness-test/checklist.md +359 -0
  131. package/harness/bundles/general/pi/harness-test/pitfalls-java.md +14 -0
  132. package/harness/bundles/general/pi/harness-test/pitfalls.md +307 -0
  133. package/harness/bundles/general/pi/harness-test/reference.md +880 -0
  134. package/harness/bundles/general/pi/harness-test/scripts/runtime-helpers.mjs +216 -0
  135. package/harness/bundles/general/pi/protocols/archive-report-protocol.md +196 -0
  136. package/harness/bundles/general/pi/protocols/ci-layering-protocol.md +22 -0
  137. package/harness/bundles/general/pi/protocols/evidence-based-reporting-protocol.md +134 -0
  138. package/harness/bundles/general/pi/protocols/execution-session-protocol.md +52 -0
  139. package/harness/bundles/general/pi/protocols/external-platform-protocol.md +27 -0
  140. package/harness/bundles/general/pi/protocols/ledger-protocol.md +365 -0
  141. package/harness/bundles/general/pi/protocols/memory-closeout-protocol.md +21 -0
  142. package/harness/bundles/general/pi/protocols/model-routing-protocol.md +22 -0
  143. package/harness/bundles/general/pi/protocols/powershell-protocol.md +238 -0
  144. package/harness/bundles/general/pi/protocols/registry-governance-protocol.md +31 -0
  145. package/harness/bundles/general/pi/protocols/report-pipeline-protocol.md +172 -0
  146. package/harness/bundles/general/pi/protocols/sensitive-info-protocol.md +110 -0
  147. package/harness/bundles/general/pi/protocols/state-layout-protocol.md +209 -0
  148. package/harness/bundles/general/pi/protocols/submit-protocol.md +78 -0
  149. package/harness/bundles/general/pi/protocols/verification-graph-protocol.md +32 -0
  150. package/harness/bundles/general/pi/scripts/harness_adoption_metrics.py +391 -0
  151. package/harness/bundles/general/pi/scripts/harness_apidoc.py +53 -0
  152. package/harness/bundles/general/pi/scripts/harness_archive.py +11345 -0
  153. package/harness/bundles/general/pi/scripts/harness_change.py +1626 -0
  154. package/harness/bundles/general/pi/scripts/harness_check_gate.py +113 -0
  155. package/harness/bundles/general/pi/scripts/harness_context.py +1774 -0
  156. package/harness/bundles/general/pi/scripts/harness_deploy.py +968 -0
  157. package/harness/bundles/general/pi/scripts/harness_efficiency.py +443 -0
  158. package/harness/bundles/general/pi/scripts/harness_environment.py +1690 -0
  159. package/harness/bundles/general/pi/scripts/harness_events.py +2234 -0
  160. package/harness/bundles/general/pi/scripts/harness_events_sync.py +1425 -0
  161. package/harness/bundles/general/pi/scripts/harness_execution_contracts.py +596 -0
  162. package/harness/bundles/general/pi/scripts/harness_fixback.py +1975 -0
  163. package/harness/bundles/general/pi/scripts/harness_gate.py +3816 -0
  164. package/harness/bundles/general/pi/scripts/harness_headless.py +37 -0
  165. package/harness/bundles/general/pi/scripts/harness_integration.py +2564 -0
  166. package/harness/bundles/general/pi/scripts/harness_knowledge_candidates.py +796 -0
  167. package/harness/bundles/general/pi/scripts/harness_ledger.py +3556 -0
  168. package/harness/bundles/general/pi/scripts/harness_migration_head.py +220 -0
  169. package/harness/bundles/general/pi/scripts/harness_orchestration.py +344 -0
  170. package/harness/bundles/general/pi/scripts/harness_paths.py +676 -0
  171. package/harness/bundles/general/pi/scripts/harness_phase.py +1726 -0
  172. package/harness/bundles/general/pi/scripts/harness_plan_aggregate.py +249 -0
  173. package/harness/bundles/general/pi/scripts/harness_plan_finalize.py +1016 -0
  174. package/harness/bundles/general/pi/scripts/harness_preflight.py +650 -0
  175. package/harness/bundles/general/pi/scripts/harness_process.py +1065 -0
  176. package/harness/bundles/general/pi/scripts/harness_profile.py +1817 -0
  177. package/harness/bundles/general/pi/scripts/harness_report_model.py +442 -0
  178. package/harness/bundles/general/pi/scripts/harness_retry.py +175 -0
  179. package/harness/bundles/general/pi/scripts/harness_review.py +631 -0
  180. package/harness/bundles/general/pi/scripts/harness_runtime.py +2243 -0
  181. package/harness/bundles/general/pi/scripts/harness_service.py +3355 -0
  182. package/harness/bundles/general/pi/scripts/harness_state.py +365 -0
  183. package/harness/bundles/general/pi/scripts/harness_sync.py +407 -0
  184. package/harness/bundles/general/pi/scripts/harness_test_cleanup.py +175 -0
  185. package/harness/bundles/general/pi/scripts/harness_test_guard.py +1899 -0
  186. package/harness/bundles/general/pi/scripts/harness_test_runner.py +1586 -0
  187. package/harness/bundles/general/pi/scripts/harness_verification.py +593 -0
  188. package/harness/bundles/general/pi/scripts/harness_workflow_policy.py +266 -0
  189. package/harness/bundles/java/claude-code/.harness-build.json +1 -1
  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-archive/reference.md +30 -1
  193. package/harness/bundles/java/claude-code/harness-archive/templates/summary-data-template.json +1 -0
  194. package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +1 -1
  195. package/harness/bundles/java/claude-code/harness-execute/SKILL.md +1 -1
  196. package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
  197. package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +1 -1
  198. package/harness/bundles/java/claude-code/harness-package/SKILL.md +1 -1
  199. package/harness/bundles/java/claude-code/harness-plan/SKILL.md +1 -1
  200. package/harness/bundles/java/claude-code/harness-pull/SKILL.md +1 -1
  201. package/harness/bundles/java/claude-code/harness-push/SKILL.md +1 -1
  202. package/harness/bundles/java/claude-code/harness-review/SKILL.md +1 -1
  203. package/harness/bundles/java/claude-code/harness-run/SKILL.md +1 -1
  204. package/harness/bundles/java/claude-code/harness-submit/SKILL.md +1 -1
  205. package/harness/bundles/java/claude-code/harness-sync/SKILL.md +1 -1
  206. package/harness/bundles/java/claude-code/harness-test/SKILL.md +1 -1
  207. package/harness/bundles/java/claude-code/scripts/harness_archive.py +146 -8
  208. package/harness/bundles/java/claude-code/scripts/harness_deploy.py +1 -1
  209. package/harness/bundles/java/claude-code/scripts/harness_knowledge_candidates.py +538 -4
  210. package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
  211. package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +1 -1
  212. package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +1 -1
  213. package/harness/bundles/java/codebuddy/harness-archive/reference.md +30 -1
  214. package/harness/bundles/java/codebuddy/harness-archive/templates/summary-data-template.json +1 -0
  215. package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +1 -1
  216. package/harness/bundles/java/codebuddy/harness-execute/SKILL.md +1 -1
  217. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
  218. package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  219. package/harness/bundles/java/codebuddy/harness-package/SKILL.md +1 -1
  220. package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +1 -1
  221. package/harness/bundles/java/codebuddy/harness-pull/SKILL.md +1 -1
  222. package/harness/bundles/java/codebuddy/harness-push/SKILL.md +1 -1
  223. package/harness/bundles/java/codebuddy/harness-review/SKILL.md +1 -1
  224. package/harness/bundles/java/codebuddy/harness-run/SKILL.md +1 -1
  225. package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +1 -1
  226. package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +1 -1
  227. package/harness/bundles/java/codebuddy/harness-test/SKILL.md +1 -1
  228. package/harness/bundles/java/codebuddy/scripts/harness_archive.py +146 -8
  229. package/harness/bundles/java/codebuddy/scripts/harness_deploy.py +1 -1
  230. package/harness/bundles/java/codebuddy/scripts/harness_knowledge_candidates.py +538 -4
  231. package/harness/bundles/java/codex/.harness-build.json +1 -1
  232. package/harness/bundles/java/codex/harness-apidoc/SKILL.md +1 -1
  233. package/harness/bundles/java/codex/harness-archive/SKILL.md +1 -1
  234. package/harness/bundles/java/codex/harness-archive/reference.md +30 -1
  235. package/harness/bundles/java/codex/harness-archive/templates/summary-data-template.json +1 -0
  236. package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +1 -1
  237. package/harness/bundles/java/codex/harness-execute/SKILL.md +1 -1
  238. package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +1 -1
  239. package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +1 -1
  240. package/harness/bundles/java/codex/harness-package/SKILL.md +1 -1
  241. package/harness/bundles/java/codex/harness-plan/SKILL.md +1 -1
  242. package/harness/bundles/java/codex/harness-pull/SKILL.md +1 -1
  243. package/harness/bundles/java/codex/harness-push/SKILL.md +1 -1
  244. package/harness/bundles/java/codex/harness-review/SKILL.md +1 -1
  245. package/harness/bundles/java/codex/harness-run/SKILL.md +1 -1
  246. package/harness/bundles/java/codex/harness-submit/SKILL.md +1 -1
  247. package/harness/bundles/java/codex/harness-sync/SKILL.md +1 -1
  248. package/harness/bundles/java/codex/harness-test/SKILL.md +1 -1
  249. package/harness/bundles/java/codex/scripts/harness_archive.py +146 -8
  250. package/harness/bundles/java/codex/scripts/harness_deploy.py +1 -1
  251. package/harness/bundles/java/codex/scripts/harness_knowledge_candidates.py +538 -4
  252. package/harness/bundles/java/cursor/.harness-build.json +1 -1
  253. package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +1 -1
  254. package/harness/bundles/java/cursor/harness-archive/SKILL.md +1 -1
  255. package/harness/bundles/java/cursor/harness-archive/reference.md +30 -1
  256. package/harness/bundles/java/cursor/harness-archive/templates/summary-data-template.json +1 -0
  257. package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +1 -1
  258. package/harness/bundles/java/cursor/harness-execute/SKILL.md +1 -1
  259. package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +1 -1
  260. package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +1 -1
  261. package/harness/bundles/java/cursor/harness-package/SKILL.md +1 -1
  262. package/harness/bundles/java/cursor/harness-plan/SKILL.md +1 -1
  263. package/harness/bundles/java/cursor/harness-pull/SKILL.md +1 -1
  264. package/harness/bundles/java/cursor/harness-push/SKILL.md +1 -1
  265. package/harness/bundles/java/cursor/harness-review/SKILL.md +1 -1
  266. package/harness/bundles/java/cursor/harness-run/SKILL.md +1 -1
  267. package/harness/bundles/java/cursor/harness-submit/SKILL.md +1 -1
  268. package/harness/bundles/java/cursor/harness-sync/SKILL.md +1 -1
  269. package/harness/bundles/java/cursor/harness-test/SKILL.md +1 -1
  270. package/harness/bundles/java/cursor/scripts/harness_archive.py +146 -8
  271. package/harness/bundles/java/cursor/scripts/harness_deploy.py +1 -1
  272. package/harness/bundles/java/cursor/scripts/harness_knowledge_candidates.py +538 -4
  273. package/harness/bundles/java/pi/.harness-build.json +6 -0
  274. package/harness/bundles/java/pi/CONTEXT.md +98 -0
  275. package/harness/bundles/java/pi/README.md +478 -0
  276. package/harness/bundles/java/pi/contracts/build-profile-v3.schema.json +302 -0
  277. package/harness/bundles/java/pi/contracts/ci-metrics.schema.json +36 -0
  278. package/harness/bundles/java/pi/contracts/doctor-capability.schema.json +43 -0
  279. package/harness/bundles/java/pi/contracts/external-platform-observation.schema.json +62 -0
  280. package/harness/bundles/java/pi/contracts/fixtures/managed-execution.json +341 -0
  281. package/harness/bundles/java/pi/contracts/process-identity.schema.json +132 -0
  282. package/harness/bundles/java/pi/contracts/run-session.schema.json +142 -0
  283. package/harness/bundles/java/pi/contracts/service-retirement-receipt.schema.json +85 -0
  284. package/harness/bundles/java/pi/contracts/service-session.schema.json +147 -0
  285. package/harness/bundles/java/pi/contracts/workflow-policy.json +574 -0
  286. package/harness/bundles/java/pi/harness-apidoc/SKILL.md +97 -0
  287. package/harness/bundles/java/pi/harness-apidoc/checklist.md +142 -0
  288. package/harness/bundles/java/pi/harness-apidoc/reference.md +233 -0
  289. package/harness/bundles/java/pi/harness-archive/SKILL.md +322 -0
  290. package/harness/bundles/java/pi/harness-archive/checklist.md +71 -0
  291. package/harness/bundles/java/pi/harness-archive/reference.md +150 -0
  292. package/harness/bundles/java/pi/harness-archive/scripts/gen-manifest.ps1 +31 -0
  293. package/harness/bundles/java/pi/harness-archive/templates/summary-data-template.json +218 -0
  294. package/harness/bundles/java/pi/harness-codebase-map/SKILL.md +116 -0
  295. package/harness/bundles/java/pi/harness-codebase-map/checklist.md +126 -0
  296. package/harness/bundles/java/pi/harness-codebase-map/reference.md +364 -0
  297. package/harness/bundles/java/pi/harness-codebase-map/templates/ARCHITECTURE.md +57 -0
  298. package/harness/bundles/java/pi/harness-codebase-map/templates/CONCERNS.md +49 -0
  299. package/harness/bundles/java/pi/harness-codebase-map/templates/CONVENTIONS.md +57 -0
  300. package/harness/bundles/java/pi/harness-codebase-map/templates/INTEGRATIONS.md +52 -0
  301. package/harness/bundles/java/pi/harness-codebase-map/templates/STACK.md +55 -0
  302. package/harness/bundles/java/pi/harness-codebase-map/templates/STRUCTURE.md +69 -0
  303. package/harness/bundles/java/pi/harness-codebase-map/templates/TESTING.md +64 -0
  304. package/harness/bundles/java/pi/harness-codebase-map/templates/map-manifest.schema.json +73 -0
  305. package/harness/bundles/java/pi/harness-codebase-map/templates/map-summary.md +64 -0
  306. package/harness/bundles/java/pi/harness-execute/SKILL.md +170 -0
  307. package/harness/bundles/java/pi/harness-knowledge-ingest/SKILL.md +103 -0
  308. package/harness/bundles/java/pi/harness-knowledge-query/SKILL.md +97 -0
  309. package/harness/bundles/java/pi/harness-package/SKILL.md +94 -0
  310. package/harness/bundles/java/pi/harness-package/checklist.md +322 -0
  311. package/harness/bundles/java/pi/harness-package/reference.md +210 -0
  312. package/harness/bundles/java/pi/harness-plan/SKILL.md +158 -0
  313. package/harness/bundles/java/pi/harness-plan/checklist.md +243 -0
  314. package/harness/bundles/java/pi/harness-plan/protocols.md +133 -0
  315. package/harness/bundles/java/pi/harness-plan/reference.md +468 -0
  316. package/harness/bundles/java/pi/harness-pull/SKILL.md +55 -0
  317. package/harness/bundles/java/pi/harness-push/SKILL.md +83 -0
  318. package/harness/bundles/java/pi/harness-review/SKILL.md +175 -0
  319. package/harness/bundles/java/pi/harness-review/checklist.md +124 -0
  320. package/harness/bundles/java/pi/harness-review/protocols.md +69 -0
  321. package/harness/bundles/java/pi/harness-review/reference.md +114 -0
  322. package/harness/bundles/java/pi/harness-run/SKILL.md +206 -0
  323. package/harness/bundles/java/pi/harness-run/checklist.md +252 -0
  324. package/harness/bundles/java/pi/harness-run/protocols.md +141 -0
  325. package/harness/bundles/java/pi/harness-run/reference.md +820 -0
  326. package/harness/bundles/java/pi/harness-submit/SKILL.md +189 -0
  327. package/harness/bundles/java/pi/harness-submit/checklist.md +452 -0
  328. package/harness/bundles/java/pi/harness-submit/reference.md +152 -0
  329. package/harness/bundles/java/pi/harness-sync/SKILL.md +72 -0
  330. package/harness/bundles/java/pi/harness-sync/reference.md +176 -0
  331. package/harness/bundles/java/pi/harness-test/SKILL.md +264 -0
  332. package/harness/bundles/java/pi/harness-test/checklist.md +320 -0
  333. package/harness/bundles/java/pi/harness-test/pitfalls-java.md +16 -0
  334. package/harness/bundles/java/pi/harness-test/pitfalls.md +307 -0
  335. package/harness/bundles/java/pi/harness-test/reference.md +792 -0
  336. package/harness/bundles/java/pi/harness-test/scripts/runtime-helpers.mjs +216 -0
  337. package/harness/bundles/java/pi/protocols/archive-report-protocol.md +196 -0
  338. package/harness/bundles/java/pi/protocols/ci-layering-protocol.md +22 -0
  339. package/harness/bundles/java/pi/protocols/evidence-based-reporting-protocol.md +134 -0
  340. package/harness/bundles/java/pi/protocols/execution-session-protocol.md +52 -0
  341. package/harness/bundles/java/pi/protocols/external-platform-protocol.md +27 -0
  342. package/harness/bundles/java/pi/protocols/ledger-protocol.md +365 -0
  343. package/harness/bundles/java/pi/protocols/memory-closeout-protocol.md +21 -0
  344. package/harness/bundles/java/pi/protocols/model-routing-protocol.md +22 -0
  345. package/harness/bundles/java/pi/protocols/powershell-protocol.md +238 -0
  346. package/harness/bundles/java/pi/protocols/registry-governance-protocol.md +31 -0
  347. package/harness/bundles/java/pi/protocols/report-pipeline-protocol.md +172 -0
  348. package/harness/bundles/java/pi/protocols/sensitive-info-protocol.md +110 -0
  349. package/harness/bundles/java/pi/protocols/state-layout-protocol.md +209 -0
  350. package/harness/bundles/java/pi/protocols/submit-protocol.md +78 -0
  351. package/harness/bundles/java/pi/protocols/verification-graph-protocol.md +32 -0
  352. package/harness/bundles/java/pi/scripts/harness_adoption_metrics.py +391 -0
  353. package/harness/bundles/java/pi/scripts/harness_apidoc.py +53 -0
  354. package/harness/bundles/java/pi/scripts/harness_archive.py +11345 -0
  355. package/harness/bundles/java/pi/scripts/harness_change.py +1626 -0
  356. package/harness/bundles/java/pi/scripts/harness_check_gate.py +113 -0
  357. package/harness/bundles/java/pi/scripts/harness_context.py +1774 -0
  358. package/harness/bundles/java/pi/scripts/harness_deploy.py +968 -0
  359. package/harness/bundles/java/pi/scripts/harness_efficiency.py +443 -0
  360. package/harness/bundles/java/pi/scripts/harness_environment.py +1690 -0
  361. package/harness/bundles/java/pi/scripts/harness_events.py +2234 -0
  362. package/harness/bundles/java/pi/scripts/harness_events_sync.py +1425 -0
  363. package/harness/bundles/java/pi/scripts/harness_execution_contracts.py +596 -0
  364. package/harness/bundles/java/pi/scripts/harness_fixback.py +1975 -0
  365. package/harness/bundles/java/pi/scripts/harness_gate.py +3816 -0
  366. package/harness/bundles/java/pi/scripts/harness_headless.py +37 -0
  367. package/harness/bundles/java/pi/scripts/harness_integration.py +2564 -0
  368. package/harness/bundles/java/pi/scripts/harness_knowledge_candidates.py +796 -0
  369. package/harness/bundles/java/pi/scripts/harness_ledger.py +3556 -0
  370. package/harness/bundles/java/pi/scripts/harness_migration_head.py +220 -0
  371. package/harness/bundles/java/pi/scripts/harness_orchestration.py +344 -0
  372. package/harness/bundles/java/pi/scripts/harness_paths.py +676 -0
  373. package/harness/bundles/java/pi/scripts/harness_phase.py +1726 -0
  374. package/harness/bundles/java/pi/scripts/harness_plan_aggregate.py +249 -0
  375. package/harness/bundles/java/pi/scripts/harness_plan_finalize.py +1016 -0
  376. package/harness/bundles/java/pi/scripts/harness_preflight.py +650 -0
  377. package/harness/bundles/java/pi/scripts/harness_process.py +1065 -0
  378. package/harness/bundles/java/pi/scripts/harness_profile.py +1817 -0
  379. package/harness/bundles/java/pi/scripts/harness_report_model.py +442 -0
  380. package/harness/bundles/java/pi/scripts/harness_retry.py +175 -0
  381. package/harness/bundles/java/pi/scripts/harness_review.py +631 -0
  382. package/harness/bundles/java/pi/scripts/harness_runtime.py +2243 -0
  383. package/harness/bundles/java/pi/scripts/harness_service.py +3355 -0
  384. package/harness/bundles/java/pi/scripts/harness_state.py +365 -0
  385. package/harness/bundles/java/pi/scripts/harness_sync.py +407 -0
  386. package/harness/bundles/java/pi/scripts/harness_test_cleanup.py +175 -0
  387. package/harness/bundles/java/pi/scripts/harness_test_guard.py +1899 -0
  388. package/harness/bundles/java/pi/scripts/harness_test_runner.py +1586 -0
  389. package/harness/bundles/java/pi/scripts/harness_verification.py +593 -0
  390. package/harness/bundles/java/pi/scripts/harness_workflow_policy.py +266 -0
  391. package/harness/manifests/general/claude-code.json +19 -19
  392. package/harness/manifests/general/codebuddy.json +19 -19
  393. package/harness/manifests/general/codex.json +19 -19
  394. package/harness/manifests/general/cursor.json +19 -19
  395. package/harness/manifests/general/pi.json +475 -0
  396. package/harness/manifests/java/claude-code.json +21 -21
  397. package/harness/manifests/java/codebuddy.json +21 -21
  398. package/harness/manifests/java/codex.json +21 -21
  399. package/harness/manifests/java/cursor.json +21 -21
  400. package/harness/manifests/java/pi.json +499 -0
  401. package/hunter-workflow-family.json +2 -2
  402. package/package.json +1 -1
@@ -0,0 +1,188 @@
1
+ ---
2
+ name: harness-run
3
+ description: 按变更簇执行 TDD 编码循环(RED→GREEN→REFACTOR→编译验证),逐变更簇实现计划中的任务。仅当用户显式调用
4
+ /harness-run 时使用;不得因用户提到编码/实现就自动触发,也不得被其他阶段 skill 自动接续。
5
+ ---
6
+ <!-- generated by harness_deploy.py; core=ec59ac2389d9dce9; overlay=none; agent=pi; do not edit -->
7
+ # harness-run — 需求编码
8
+
9
+ > **2026-08 阶段合并**:原 `run`(编码)与 `test`(验证)合并为单一 `execute` 阶段,
10
+ > 统一入口为 **`/harness-execute`**(`harness/harness-execute/SKILL.md`)。本 skill 作为
11
+ > 别名保留,frontmatter `name` 不变、内容照旧可用;门禁入参 `--phase run` 经
12
+ > `LEGACY_PHASE_ALIASES` 归一为 execute。别名至少保留一个 minor 版本,退役时间见
13
+ > `docs/harness-improvement-roadmap/`。下文出现的阶段名 `run`/`test` 均按别名解析。
14
+
15
+ ## Purpose
16
+
17
+ 基于 plan + test-scenarios,按**变更簇**执行 TDD(RED→GREEN→REFACTOR→构建验证),写入 verification-ledger。负责 worktree 创建/切换(见 worktree-gate)。
18
+
19
+ ## When to Use
20
+
21
+ 仅当用户显式调用 `/harness-run` 时执行;plan 完成后**不自动**进入本阶段。参数:`--subagent` 强制 Subagent-Driven;`--inline` 等同默认;`--fixback` 读最新 review fixback。**默认 Inline,不询问执行模式**。
22
+
23
+ **单阶段原则**:run 关门后必须停止并交还用户,仅提示 `plannedPhases` 中的真实下一阶段;禁止自动开始其他阶段。
24
+
25
+ ## 前置条件
26
+
27
+ - 设计文档(`plans/*-design.md` 优先,回退 `spec/*-design.md`)与 `plans/*-plan.md`(含 frontmatter)存在且已审批
28
+ - 读 `meta/worktree.json`:`requested=true` 时 worktree 须存在或 run 负责创建
29
+
30
+ ## Worktree 门禁
31
+
32
+ 读取 `meta/worktree.json`(兼容旧路径 `worktree.json`):
33
+
34
+ | 条件 | 行为 |
35
+ |------|------|
36
+ | `requested=false` | 主目录执行 |
37
+ | `requested=true` + path 存在 | 切换 worktree 执行 |
38
+ | `requested=true` + path 不存在 | **必须创建**(run)或 **停止**(test/review/submit) |
39
+
40
+ **严禁** `requested=true` 时静默回主目录。创建失败 → 停止或 blocking user confirmation 降级(须 🟡WARN + 用户确认)。
41
+
42
+ **状态与代码分离**:代码/编译/测试在 `worktreeRoot`;`stateDir`(logs/events/ledger/reports)写回 `.harness/changes/<change-name>/`。
43
+
44
+ 创建命令与 JSON 模板 → 各 skill `reference.md`(plan 写决策,run 创建/更新)。
45
+ > 片段:worktree-gate · 创建命令 → `reference.md`
46
+
47
+ ## 统一读取协议
48
+
49
+ 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 找回来;照第一种写法直接用
50
+ 1. **`.harness/changes/<change-name>/` 是唯一真相源** — 所有输入从该目录读取,产物写入对应子目录
51
+ 2. **change-name 优先从 frontmatter 读取** — `plans/*-design.md`、`spec/*-design.md`、`plans/*-plan.md` 的 YAML `change-name`
52
+ 3. **frontmatter 缺失时兼容旧格式** — 从路径推断,标记 `🟡 legacy-plan`,不失败
53
+ 4. **design** — 设计真相源按序取第一个存在的:`plans/<change>-design.md`(v2 发布产物,哈希绑定)→ `spec/<change>-design.md`(legacy 手写)。两份**同时存在**时以 `plans/` 为准,并记 `🟡 WARN 设计文档双份`——v2 发布的那份才受完整性门禁保护,读手写的那份等于绕过校验
54
+ 5. **plan** — 任务真相源:`plans/<change>-plan.md`
55
+ 6. **implementation-detail** — 自适应执行参考;legacy 缺失 🟡WARN,不阻断
56
+ 7. **test-scenarios** — 测试真相源:`plans/<change>-test-scenarios.md`
57
+ 8. **禁止读取 `docs/superpowers/` 作为正式输入** — 旧草稿仅人工线索
58
+ 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` 段仅为兼容空段,知识始终按需远端查询;快照不能替代源码读取和验证门禁。
59
+
60
+ 状态目录分层:新路径优先,旧路径兼容 → [[../protocols/state-layout-protocol.md|state-layout-protocol]]
61
+ > 片段:read-protocol · run 必读文件优先级 → `reference.md` Step 0
62
+
63
+ ## 执行模式
64
+
65
+ 默认 **Inline Execution**;仅 `--subagent` 切换 Subagent-Driven。
66
+
67
+ ## Workflow 概要
68
+
69
+ 0. 加载上下文:普通 Run 先 `harness_context.py prepare --project . --change <id> --phase run --executor <tool> --json`(`--project` 必填,漏了直接 argparse 报错),再 **`harness_context.py begin --project . --change <id> --phase run --executor <tool> --json`** 校验交接,最后运行 **`harness_gate.py begin --phase run --change <id>`**。<br>**交接凭证不必手工补**:v2 计划的 `plan finalize` 不写 context 事务,`prepare` 会在检测到 committed 的 `meta/publication-journals/*.json` 时自动补录 `plan → run` 凭证(凭证带 `bootstrapSource=plan_publication_journal` 留痕)。仍报 `HANDOFF_REQUIRED`/`LEGACY_BOOTSTRAP_REQUIRED` 说明**没有**这份发布证据——回到 plan 阶段确认发布是否真的完成,**不得**自己拼 `classify + configure-plan + close` 造凭证。`harness_gate.py` 会从当前已安装适配器自动识别 skills root;只有执行复制到别处的脚本时才显式传 `--skills-root`。`--fixback` 不得拼装这些底层步骤,必须只调用一次 `harness_fixback.py launch-review --project . --change <id> --change-dir <change-dir> --executor <tool> --skills-root <skills-root> --product-identity <当前产品身份> --json`:该命令会先筛选结构化评审项,再原子选择 Fixback 分支、确认上下文、取得 Run 门禁并创建已填充批次。返回 `FIXBACK_NOTHING_TO_APPLY` 时直接报告“本轮评审没有需要执行的代码修复”并停止;返回阻塞码时按 `recoveryAction` 停止,不搜索实现、不试探其他参数、不创建空批次。禁止手写 `events.ndjson` / `phase.end`。已连接平台时 begin 会 best-effort 补传事件,失败只告警。
70
+ 0.5. **测试基础设施探测**(先写 `CHECKING`,四项证据齐备后再结论)→ `reference.md` Step 0.5;测试基线已由上一步 gate begin 内部建立,不得再次执行 guard begin
71
+ 1. **变更簇 TDD** — `protocols.md` `run-tdd-protocol`;批量 RED/GREEN;按需 `change-cluster-review-protocol`(高风险 + reviewer 预检可用)
72
+ 2. 构建验证 + **仅**通过 `harness_ledger.py record` 写 ledger(禁止 Write/Edit `verification-ledger.json`);若本阶段创建/删除了清单、锁文件、源码根或改变技术栈,最后一次产品编辑后、写账本与关门前必须执行 `harness_preflight.py detect --project . --json` 刷新 build profile。`record --project . --profile-input <key>` 会对缺失/陈旧 profile 自动检测并从同一 target 推导 scope、coverage、规范命令和输入闭包;不得再手填另一套身份。detect 在嵌套/多组件仓库返回 `DETECTION_AMBIGUOUS` 时,响应里的 `profileTemplate` 就是可填骨架(已含 defaultsFingerprint、excludedRoots 默认集与 commands 条目形状),按 `hint` 填好写入 `.harness/config/build-profile.json` 即可,**不要去反读 `harness_profile.py` 源码凑结构**。`diff-hash --change-dir` 纳入 ignored tests → `reference.md` Step 2c
73
+ 3. **场景覆盖检查**(场景表映射,禁止用用例数冒充场景数)
74
+ 4. **关门检查**(10 项)→ 只执行一次 `harness_gate.py close`;`--to-phase` 必须取返回的 `nextPhases` 或 `plannedPhases` 中 run 的真实后继,禁止写死 test。该命令内部关闭 test guard、写 `phase.end`、释放租约、写 handoff 并补传事件;不得再单独调用 test-guard/context close。失败时按结构化 `recoveryAction` 原样重试,已完成步骤幂等复用。
75
+
76
+ **阶段归属规则**:只用 `ownerPhase=run` 的任务和场景判定编码阶段结果。`ownerPhase=test` 的任务或场景按计划留给测试阶段属于正常移交,必须记录为“待测试阶段执行”,不得将编码阶段降级为 WARN;只有 run 自身负责的工作未完成、验证降级或证据异常时才使用 WARN。
77
+
78
+ > 关门脚本与本规则一致:`harness_gate.py close --phase run` 的 C9 场景覆盖只要求 `ownerPhase` 为 `plan`/`run` 的必需场景有通过 receipt,`ownerPhase=test` 的场景出现在返回值的 `deferred` 里,不阻断 run。若 run 关门报 `REQUIRED_SCENARIO_NOT_EXECUTED` 且缺的是接口/端到端场景,那是 `meta/scenario-manifest.json` 里 `ownerPhase` 标错了(或老清单没声明),应当修清单——**不要**为了过门在 run 阶段起服务补跑本属 test 的验证。
79
+
80
+ **Fixback**:入口只用 `launch-review`,后续问题处理通过 `resolve-issue/close` 驱动,不得把修复说明当成新的普通 Run。只读取返回的受影响问题和文件;验证仅失效与 `changedFiles` 相交的目标,其他 Test/Review 证据继续复用。RED 优先;`manual`、`workflow` 或未选用的建议不进入代码批次,使用中文记录处理结论。
81
+
82
+ **构建/测试执行入口**:所有构建与测试命令(mvn / gradle / npm test / pytest 等)必须经 `harness_test_runner.py exec` 发起,**禁止**用 `powershell.exe -Command` 直接裸跑:
83
+
84
+ ```text
85
+ python <skills-root>/scripts/harness_test_runner.py exec --project . --timeout-seconds <预估上限> -- <构建命令及参数>
86
+ ```
87
+
88
+ 该入口持有项目级互斥锁并托管进程树。裸跑构建在宿主工具超时后会被推入后台,多个后台构建同时写同一个 `target/`、`build/` 或 `node_modules/.cache`,表现为编译产物被清空、日志文件被占用、"增量编译抖动"——这些都不是代码缺陷,是并发自相残杀,排查成本极高。`--timeout-seconds` 按最慢的一次全量构建估(默认 300 秒偏短),宁可给足也不要让命令被中途掐断。
89
+
90
+ 返回 `TEST_RUN_ALREADY_ACTIVE`(退出码 3)说明**已有构建在跑**:等它结束或用 `lock-status` 查明持有者,**不得**改用裸跑绕开锁,也不得另起一个并行构建。确认持有进程已消失时才用 `lock-reap` 回收。
91
+
92
+ **长阶段租约**:`gate begin` 的租约默认 TTL 3600 秒,而 run 阶段常常跑得更久。租约过期不会中断执行,**也不再阻断收尾**:`gate close` 发现租约过期而 run-id 仍是本阶段的,会自动用原 run-id 重取并照常关门,只在返回体的 `leaseLapsed` 里记下这个阶段跑过了 TTL。过期本身不说明所有权变了——抢占会重写租约文件把 run-id 换掉,那时报的是 `LEASE_OWNER_MISMATCH`。
93
+
94
+ 因此**不需要**为了长阶段定期续租。确实想让租约始终有效时,用本阶段原 run-id 刷新即可(同 run-id 重复 claim 即刷新,不会新开 attempt):
95
+
96
+ ```text
97
+ python <skills-root>/scripts/harness_change.py claim --change <id> --phase run --run-id <本阶段 run-id> --ttl-seconds 3600 --json
98
+ ```
99
+
100
+ 仍然报 `LEASE_ABSENT` 说明这个阶段**根本没有租约记录**(从未 begin,或已被释放),不是超时;先确认 `gate begin` 真的跑过。报 `LEASE_INVALID` 说明租约文件损坏,无法证明没被抢占,需人工确认无并发后再用上面的命令重取。两种情况都**不要**重跑 `gate begin`——那会新开 attempt 并丢失本轮 capsule。
101
+
102
+ **执行器边界**:优先使用项目 build profile 和已有测试入口。禁止为了绕过 ESM、路径或参数问题临时生成 `.js`、`require` 脚本;需要文件式 runner 时使用项目已有入口,确需新增时遵循项目模块类型(例如 ESM 使用 `.mjs`)。runner 包装说明写入 `runnerCommand` 元数据,不得拼进账本的规范 `command`。
103
+
104
+ **Foundation Gate**:若 `meta/implementation-checkpoints.json` 中 `foundation-gate` 为 pending,不得开始 plan 中任务 6+;由 `harness_gate.py` 硬阻断。
105
+
106
+ ## P0 执行可信度规则
107
+
108
+ - 命令结果不得靠猜测;普通 Bash 被拒 → 立即改用等价 PowerShell 重试一次
109
+ - 仅 PowerShell 成功且有明确证据(构建/git/测试输出、文件存在、exit 0)时可标 ✅OK;否则 ❌FAIL 或 🟡WARN
110
+ - 禁止把 hook 拒绝、静态验证、无输出、用户跳过说成成功 → 详见 [[../protocols/powershell-protocol.md|powershell-protocol]]、[[../protocols/evidence-based-reporting-protocol.md|evidence-based-reporting-protocol]]
111
+
112
+ ## 生成内容语言约定
113
+
114
+ - sync/ingest 等生成的文档、规则、知识条目、架构说明一律**优先使用中文**撰写(标识符、命令、代码、API 字段名保持原文)
115
+ - 面向平台展示的标题/摘要/正文默认中文;仅当用户明确要求或目标系统强制时才用英文
116
+ > 片段:p0-trust
117
+
118
+ ## 关键规则(硬门禁速查)
119
+
120
+ > 全文判定、示例、模板 → `reference.md`;ledger → `../protocols/ledger-protocol.md`
121
+
122
+ | 域 | 要点 |
123
+ |----|------|
124
+ | **文档输入** | 只读 `.harness/changes/<cn>/`;禁止 `docs/superpowers/` |
125
+ | **变更簇 TDD** | 一簇一次 RED/GREEN;低价值项豁免;新分支必须 RED |
126
+ | **RED/GREEN** | RED 须有效;静态验证 ≠ 测试通过;greenfield 大重写豁免见 reference |
127
+ | **Mapper/DB** | 纯 Mock 不得宣称 DB 验证通过;迁移脚本**永不自动执行** |
128
+ | **探测/ledger** | 基础设施先探测;每次构建/测试经 `harness_ledger.py record`;禁止手写 ledger JSON;用 canonical `diff-hash --change-dir` |
129
+ | **Gate/Guard** | 跨 Agent/阶段先用 `harness_context.py prepare/begin`;阶段门禁与上下文交接统一用 `harness_gate.py begin/close`;gate 内部负责 guard begin/close,模型只在需要记录测试来源或修复时调用 guard 的 `record/stage/mark` |
130
+ | **预存变更** | 保留 → baseline 隔离;存在则最终 ≥ 🟡WARN |
131
+ | **关门/状态** | 10 项关门检查;持久化 run-task-status;仅 run-owned P0 静态-only 导致 WARN;test-owned 待办正常移交 |
132
+ | **Worktree** | `requested=true` 时代码只写 worktree |
133
+ | **构建/测试** | 一律经 `harness_test_runner.py exec`;禁止裸跑 mvn/gradle/npm test;`TEST_RUN_ALREADY_ACTIVE` 表示已有构建在跑,等待而非另起 |
134
+ | **租约** | 阶段超 TTL 由 close 自动用原 run-id 重取,无需续租;`LEASE_ABSENT`(无记录)/`LEASE_INVALID`(文件损坏)才需人工 `harness_change.py claim`,一律不重跑 begin |
135
+ | **PowerShell** | 所有 git 经 `powershell.exe -NoProfile -Command` |
136
+
137
+ ### 陈旧测试安全修复与精确跟踪
138
+
139
+ 测试编译或 RED/GREEN 失败时,先区分当前实现缺陷、测试基础设施故障与陈旧测试。只有同时满足以下条件才允许自动修复陈旧测试:当前生产代码、已批准计划或可验证的历史变更能唯一确定新契约;修改范围仅限测试文件;修复后会立即重跑该测试及本变更目标测试。符合时以 `stale-test-repair` 记录:
140
+
141
+ ```text
142
+ python <skills-root>/scripts/harness_test_guard.py record --project . --change-dir ".harness/changes/<change-name>" --files "<精确测试文件路径,逗号分隔>" --reason stale-test-repair --json
143
+ ```
144
+
145
+ 新建或正常更新测试分别使用 `tdd-created` / `test-updated`。若预期行为存在业务歧义,停止测试修复并记录 `BLOCKED_PREEXISTING`,不得猜测新断言。
146
+
147
+ **禁止临时排除测试**:不得将测试改名为 `.bak`、移出测试目录、删除、添加 `@Disabled`/`@Ignore`、修改 Surefire/Gradle exclude 或跳过测试来制造绿色结果;也不得仅为满足陈旧测试而修改生产代码。`.gitignore` 中的测试只能通过 manifest 的精确路径闭环处理,禁止全局放宽 ignore。
148
+
149
+ ## Output Format
150
+
151
+ 变更文件表 + 构建/测试证据 + 场景覆盖摘要 + 最终状态(✅OK / 🟡WARN / ❌FAIL)。→ `reference.md`
152
+
153
+ ## 渐进披露
154
+
155
+ - **Read `protocols.md`** — run-tdd + change-cluster-review
156
+ - **Read `reference.md`** — Step 0–5 细节、TDD/RED/ledger/迁移/安全矩阵
157
+ - **Read `checklist.md`** — 逐步勾选
158
+
159
+ ## 交互白名单
160
+
161
+ 1. **预存变更**:保留 / 暂存 / 终止
162
+ 2. **数据库迁移**:展示审查清单并确认(**永不自动执行**)
163
+ 3. **worktree 创建失败**:是否改主目录
164
+
165
+ ## 执行日志
166
+
167
+ `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]]
168
+
169
+ **`phase.start` 由 `harness_gate.py begin` 写,不要再手工追加一次。** 两条同 `run-id` 的
170
+ `phase.start` 会让 `plan finalize` 以 `PHASE_START_DUPLICATE` 卡死,而且手工那次会先触发
171
+ auto-seal、把正在开始的 attempt 封成 `RECOVERED`。要补触发指令说明就带 `--note` 跑 `gate begin`。
172
+ (重复追加现已按 `(phase, run-id)` 判为幂等 no-op,但依赖它不如不写。)
173
+
174
+ ```powershell
175
+ # 阶段开始:gate begin 负责,note 在这里给
176
+ python <skills-root>/scripts/harness_gate.py begin --change-dir ".harness/changes/<change-name>" --phase <phase> --note "<触发指令>"
177
+ # 阶段中的其他事件才用 append
178
+ 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 "<摘要>"
179
+ ```
180
+
181
+ > **脚本接线**:`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 护栏解读。
182
+
183
+ > **Task 4 §6.1 写入契约**:普通 `append` = 加锁 -> 追加一行 -> fsync -> 解锁,**不 load 历史、不渲染**(O(1),跨进程锁 `events.ndjson.lock`,UUID 用完整 `uuid4().hex` 无需去重扫描)。仅 `--type phase.end` append 在追加成功后渲染一次 `execution-log.md`;显式 `harness_events.py render` 随时从完整 events 重建;`harness_archive.py finalize` 在 collect 前强制 render 一次。高频 command append 期间 log 可能滞后,phase 边界保持最新。
184
+
185
+ 每个阶段的 `phase.start` 与对应 `phase.end` 必须复用同一 `--run-id` / `--attempt`;阶段结束必须写 `--status OK|WARN|FAIL|BLOCKED`。重试同一阶段时生成新的 run-id 并增加 `--attempt <n>`,不得覆盖或伪装成一次执行。**`attempt` 按 phase 全局递增,不是按 run-id**:一个 run-id 只绑定一个 attempt,重试必须「新 run-id + 下一个 attempt」两者同时换,只换其一会撞 `EVENT_ATTEMPT_CONFLICT` 或 `PHASE_ALREADY_CLOSED`。已发布 plan 的修订通过重跑 `plan evidence-pack` + `plan finalize` 分配新 attempt(`harness_plan_finalize.py republish` 已于 0.3.0 移除)。
186
+
187
+ 阶段跑得久(plan/run 常见)时用 `harness_context.py renew --project . --change <cn> --executor <tool>` 续租;租约到期本身不再阻断 `close`(同一 owner 的过期租约不构成冲突,收据里记 `leaseLapsed`),但续租能让 `view` 的状态如实反映在跑。跨工具继续执行时写 `--executor-tool <codex|claude-code|codebuddy|cursor>`,并在接棒事件写 `--handoff-from-tool` / `--handoff-reason`;也可由 `HUNTER_HARNESS_TOOL/AGENT/MODEL/RUN_ID` 环境变量统一注入。
188
+ > 片段:logging · phase=`run`
@@ -0,0 +1,279 @@
1
+ ---
2
+ description: harness-run 的执行检查清单。仅在编码执行时读取。
3
+ ---
4
+
5
+ # harness-run 执行检查清单
6
+
7
+ > 编码执行时逐项勾选,确保不遗漏关键步骤。
8
+
9
+ ## 步骤 0:加载上下文
10
+
11
+ ### 步骤 0.0:Worktree 决策执行 ⚠️
12
+
13
+ - [ ] 运行 `harness_runtime.py doctor` 并读取 `meta/runtime.json`;后续使用绝对 executable 与 argv 数组
14
+ - [ ] 读取 `.harness/changes/<change-name>/meta/worktree.json`(旧路径 `worktree.json` 兼容)
15
+ - [ ] 如果文件缺失:🟡WARN,按 legacy 逻辑询问用户是否主目录执行或创建 worktree
16
+ - [ ] `requested=false` → 主目录执行,记录原因
17
+ - [ ] `requested=true` 且 worktree 存在 → 切换到 worktree 执行
18
+ - [ ] `requested=true` 且 worktree 不存在 → 必须创建 worktree
19
+ - [ ] worktree 创建命令必须使用 PowerShell:`git worktree add ...`
20
+ - [ ] 创建后验证 `.worktrees/<change-name>/.git` 存在
21
+ - [ ] 创建成功后更新 `meta/worktree.json` 的 `created=true/createdAt/createdBy`
22
+ - [ ] 创建失败 → 停止,或 blocking user confirmation 询问是否改为主目录执行
23
+ - [ ] 禁止 `requested=true && worktree 不存在` 时直接主目录执行
24
+ - [ ] 记录 `projectRoot / worktreeRoot / stateDir`
25
+
26
+
27
+
28
+ - [ ] 确定变更名:Glob 搜索 `.harness/changes/*/plans/*-plan.md`(排除 `.harness/archive/*/`),提取 `change-name`
29
+ - [ ] 读取并执行 `meta/worktree.json`:如果 `requested=true` 必须创建/切换 worktree,创建失败则停止或询问用户改为主目录;禁止静默降级
30
+ - [ ] **读取计划文件(主任务源)**:`.harness/changes/<change>/plans/<change>-plan.md` — 获取任务列表和依赖关系
31
+ - [ ] **读取详细计划(补充参考)**:`.harness/changes/<change>/plans/<change>-implementation-detail.md`(新版必需;legacy 缺失时 🟡WARN)
32
+ - [ ] **读取设计文档**:`.harness/changes/<change>/plans/<change>-design.md`(v2);不存在时回退 `spec/<change>-design.md`(legacy)— 获取核心设计决策和不变项
33
+ - [ ] **读取测试场景表**:`.harness/changes/<change>/plans/<change>-test-scenarios.md` — 获取与当前任务相关的测试场景
34
+ - [ ] **读取验证账本**:通过 context 返回的 `executionRoot` 读取 `evidence/verification-ledger.json`(如存在)— 复用已有 compile/unitTest 结果
35
+ - [ ] **读取任务状态**:`.harness/changes/<change>/evidence/run-task-status.md`(如存在)— 恢复上次运行状态
36
+ - [ ] **读取 review fixback**:用户传入 `--fixback` 或要求修复 review 问题时,读取最新 `.harness/changes/<change>/reports/review/fixback-*.md`
37
+ - [ ] 确认未将 `docs/superpowers/` 作为执行输入(旧草稿最多作为人工线索)
38
+ - [ ] 确认 `项目规则(见 .harness/context-index.json)/` 规则已加载
39
+ - [ ] 检查构建配置完整性(worktree 中确认构建配置文件存在,如 Java 的 `.mvn/maven.config`、`settings.xml`,前端的 `package.json`/lockfile 等)
40
+ - [ ] 依赖模块预安装(worktree 中检查上游依赖是否已安装,如 Java 的 `mvn install`、前端的 `npm install`/lockfile 等)
41
+ - [ ] 代码探索优先用 `codegraph_explore`,仅在返回不完整时补充 Read
42
+ - [ ] `harness_context.py prepare/begin` 均带 `--project .` 与 `--change <id>`(缺 `--project` 会被 argparse 直接拒)
43
+ - [ ] 交接凭证缺失时**不自行拼造**:v2 计划由 `prepare` 依据 committed 发布 journal 自动补录;仍报 `HANDOFF_REQUIRED`/`LEGACY_BOOTSTRAP_REQUIRED` 即代表发布证据不存在,回 plan 阶段查,不得用 `classify + configure-plan + close` 现编凭证
44
+ - [ ] `harness_gate.py begin --phase run` 已返回 Plan handoff 校验通过并自动 append `phase.start`;不得手工写事件绕过
45
+ - [ ] 门禁报 `SCENARIO_MANIFEST_V2_UNSUPPORTED` 时按 `missingFields` 回规划阶段补齐场景字段后重新发布;**不得**手改 `meta/scenario-manifest.json`(派生产物,手改必致哈希漂移)
46
+
47
+ ### 步骤 0.1:执行模式(无询问)
48
+
49
+ - [ ] 统计任务数量和涉及模块数
50
+ - [ ] 如果处于 `--fixback` 模式,将 RED/YELLOW fixback 条目映射为本轮变更簇,并记录 `fixback: applied`
51
+ - [ ] 默认 Inline Execution;`--subagent` / `--inline` 参数覆盖
52
+ - [ ] **禁止**因任务数/模块数 blocking user confirmation 选择执行模式
53
+
54
+ ## 步骤 0.5:测试基础设施探测(⚠️ 必须先于任何 TDD 降级结论)
55
+
56
+ > 探测完成前,执行日志中只能写 `**测试基础设施**: CHECKING`,不得写任何降级结论。
57
+
58
+ - [ ] 探测 1:测试目录是否存在(如 Java 的 `src/test/java`)
59
+ - [ ] 探测 2:构建配置/依赖清单是否包含测试依赖(如 Java 的 `pom.xml` 含 `spring-boot-starter-test`/`junit`/`mockito`)
60
+ - [ ] 探测 3:是否存在已有测试文件(按技术栈测试命名约定,如 Java 的 `*Test.java`/`*Tests.java`)
61
+ - [ ] 探测 4:目标模块测试基础设施是否可用(按技术栈,如 Java 的 `mvn test-compile -pl <module> -o -q` 验证测试可编译,或测试枚举/秒级 smoke;**禁止完整模块测试**,spec §3.3)
62
+ - [ ] 四项证据收集完毕 → 写结论:✅ 测试基础设施可用 / 🟡 测试基础设施部分可用 / ❌ 测试基础设施不可用
63
+ - [ ] 如果 ❌ 不可用 → 记录 TDD 降级原因(必须引用具体证据,如"模块 X 无测试目录(如 Java 的 src/test/java)")
64
+ - [ ] 若探测失败来自具体陈旧测试,先执行「陈旧测试安全修复」判定:当前代码/批准计划/可验证历史唯一确定契约 + 仅改测试 + 立即重跑;满足才修复,否则记录 `BLOCKED_PREEXISTING`
65
+ - [ ] 修复/新增/更新的精确测试路径已用 `harness_test_guard.py record` 记录为 `stale-test-repair` / `tdd-created` / `test-updated`
66
+ - [ ] **禁止临时排除测试**:未使用 `.bak`/改名/移目录/删除/禁用注解/build exclude/skip-tests 绕过失败
67
+
68
+ ## 步骤 0.2:预存变更检测与隔离
69
+
70
+ > 如果 run 开始前检测到已有未提交变更,必须执行此步骤。
71
+
72
+ - [ ] 检查 git status 是否有 run 前的预存变更
73
+ - [ ] 如果有预存变更 → 使用 blocking user confirmation 询问用户处理方式(保留/暂存/终止)
74
+ - [ ] 用户选择保留 → 创建 `.harness/changes/<change>/pre-existing-files.json`(文件列表 + diff hash + 用户选择)
75
+ - [ ] 用户选择保留 → 创建 `.harness/changes/<change>/pre-existing-diff.patch`(完整 diff 备份)
76
+ - [ ] 在执行日志中记录预存变更检测结果和用户选择
77
+
78
+ ## 变更簇 TDD 循环
79
+
80
+ > 默认按变更簇执行 TDD,不按每个小任务单独 RED/GREEN。
81
+
82
+ ### 步骤 1a:划分变更簇
83
+
84
+ - [ ] 读取 plan.md 任务列表,按业务行为分组为变更簇
85
+ - [ ] 检查是否有低价值 TDD 豁免项(错误码常量、数据契约字段 VO/DTO、注释、代码整理如 import 清理、格式化、数据库迁移脚本、配置模板、文档)→ 标记为豁免,不单独建测试类
86
+ - [ ] 确定每个变更簇的测试范围(哪些测试类合并执行)
87
+ - [ ] 确认变更簇内数据访问层查询条件是否需要用真实 DB 验证(非纯 Mock)
88
+
89
+ ### 进入变更簇 RED 前:执行 run-tdd-protocol
90
+
91
+ - [ ] 已读取 `harness-run/protocols.md`
92
+ - [ ] 为当前变更簇选择 RED 类型:真实 RED / 静态 RED / 复用 RED
93
+ - [ ] 真实 RED → 测试编译通过且失败断言指向目标行为
94
+ - [ ] 静态 RED → 记录降级原因、静态验证场景、待 harness-test 验证场景
95
+ - [ ] 复用 RED → 引用 test-scenarios 编号与前序证据,并在执行日志登记
96
+ - [ ] 任何 RED 类型都已写入 events.ndjson(`decision` / `verification` / `issue`)
97
+
98
+ ### RED(写测试 — 按变更簇批量执行)
99
+
100
+ - [ ] 从场景表选取对应当前变更簇的测试用例
101
+ - [ ] 写单元测试(按技术栈测试框架,如 Java 的 JUnit 5 + Mockito + AssertJ),**优先通过 public API 验证**(非 private 方法)
102
+ - [ ] **多个测试类合并到一次构建/测试命令执行**(按技术栈模块/用例定位参数,如 Java 的 `mvn test -pl <module> -Dtest=TestA,TestB,TestC -o`)
103
+ - [ ] **RED 有效性判定**(必须逐项确认):
104
+ - [ ] 测试编译通过?(编译失败 → ❌无效 RED,先修测试)
105
+ - [ ] 未直接调用 private 方法?(private 访问限制 → ❌无效 RED)
106
+ - [ ] 失败断言指向目标业务行为?(mock/stubbing 错误 → ❌无效 RED)
107
+ - [ ] 失败原因与本次 bug/需求直接相关?(无关 → ❌无效 RED)
108
+ - [ ] 无依赖注入上下文加载失败(如 Java 的 NoSuchBeanDefinitionException)/ NPE 来自测试搭建错误 / 不必要 stubbing?
109
+ - [ ] 判定结果写入执行日志:`RED: ✅有效 / 🟡部分有效 / ❌无效`
110
+ - [ ] 如果 ❌无效 RED → 必须先修测试,重新运行 RED,**禁止进入 GREEN**
111
+ - [ ] 如果无测试基础设施 → 降级为静态逻辑验证(在执行日志和覆盖报告中标注覆盖关系,**不得在业务代码注释中标注**)
112
+
113
+ ### 低价值 TDD 豁免检查
114
+
115
+ - [ ] 错误码常量 → 不单独建测试类,构建验证 + 被高层测试间接覆盖
116
+ - [ ] 数据契约字段(VO/DTO)→ 不单独建测试类,被业务层/API 测试间接覆盖
117
+ - [ ] 注释 / 代码整理(import 清理)/ 格式化 → 构建验证即可
118
+ - [ ] 数据库迁移脚本 → 不做 TDD,生成审查清单,标记 NEEDS_DB_VALIDATION
119
+ - [ ] 配置模板 / 文档 → 静态审查
120
+
121
+ ### 数据访问层查询条件验证检查
122
+
123
+ - [ ] 如果变更涉及数据访问层查询逻辑(Java 的 Mapper/LambdaQueryWrapper/SQL/XML)→ 不得用纯 Mock 宣称"自动化测试通过"
124
+ - [ ] 纯 Mock 数据访问层测试 → 标记为 🟡静态验证,交给 harness-test 真实 DB 验证
125
+ - [ ] 如果必须自动化 → 使用真实数据访问层(非 mock)或可检查查询条件的测试方式
126
+
127
+ ### 编码前检查(远程客户端 / stub 同源错误)
128
+
129
+ - [ ] 变更涉及 HTTP/RPC 客户端(Feign/RestTemplate/SDK 封装)时:取客户端注解路径(类级 + 方法级拼接),与服务提供方 controller 的 `@RequestMapping` + 方法级注解**完整拼接路径**逐一比对,在计划/执行记录中列出比对结果。只看方法级注解不算完成。
130
+ - [ ] 修 stub/null 返回时,顺带核对同文件相邻声明(注解、常量、同类方法路径)是否同源错误,一并列出核对结果
131
+
132
+ ### GREEN(最简实现 — 按变更簇批量实现)
133
+
134
+ - [ ] 写最少代码让变更簇测试全部通过
135
+ - [ ] 遵循约束:接口层只做参数校验和路由;业务层是唯一业务逻辑层;统一返回结构(如 Java 的 `Result<T>`);集合返回空集合不返回 null;日志用日志框架(如 Java 的 Slf4j);新增字段允许为空
136
+
137
+ ### REFACTOR(重构)
138
+
139
+ - [ ] 在测试保护下重构代码结构
140
+ - [ ] 清理过程性注释(如 `// 修复分页查询缺项目类型 Bug`),改写为稳定业务规则描述或删除
141
+ - [ ] 重构后重新运行变更簇测试确认全部通过
142
+
143
+ ### 批量构建验证(变更簇间)
144
+
145
+ - [ ] 每个变更簇最多执行一次 RED 构建/测试、一次 GREEN 构建/测试 — **不得每新增一个测试类就单独跑一次构建/测试**
146
+ - [ ] 多个测试类合并执行(按技术栈模块/用例定位参数,如 Java 的 `mvn test -pl <module> -Dtest=TestA,TestB,TestC -o`)
147
+ - [ ] 最终构建只执行一次(如前面已有构建成功证据,可复用 verification-ledger)
148
+ - [ ] 使用静默模式(如 Maven `-q`)时:报告中写 `exitCode=0`,不得写"构建成功"字样(如 Java 的 BUILD SUCCESS,除非输出中真实出现)
149
+ - [ ] 按 `change-cluster-review-protocol` 判断是否触发变更簇审查
150
+ - [ ] 高风险触发条件(数据迁移/权限/安全/并发/核心契约/缺真实测试/用户要求)已检查
151
+ - [ ] 触发审查时,已记录方式:只读 reviewer / 主会话自审
152
+ - [ ] 未触发审查时,已记录跳过理由(低风险/已有真实测试证据/后续 harness-review 覆盖)
153
+
154
+ ## 步骤 2:构建验证(默认轻量,批量执行)
155
+
156
+ - [ ] 构建命令(按技术栈,如 Java 的 `mvn compile -pl <module> -o`)(始终执行,优先不用静默模式以获取构建成功证据)
157
+ - [ ] 如果使用静默模式(如 Maven `-q`)→ 报告中写 `exitCode=0`,**不得写"构建成功"字样(如 Java 的 BUILD SUCCESS)**
158
+ - [ ] 最终构建只执行一次,如果前面已有构建成功证据,可复用 verification-ledger
159
+ - [ ] 判断是否需要全量测试:改了公共模块/数据访问层/数据库迁移/权限认证/接口层/数据契约,或用户要求 full-run-validation → 执行测试命令(按技术栈,如 Java 的 `mvn test -pl <module> -o`);否则跳过全量测试
160
+ - [ ] 构建失败 → 先分析错误类型(见 reference.md 构建失败策略表)
161
+ - [ ] **经 `harness_ledger.py record` 写入 ledger**(禁止 Write/Edit `verification-ledger.json`):`compile` 项必写;若执行了测试则 `unitTest` 项必写;未执行时标记 `NOT_RUN_BY_RUN`
162
+ - [ ] 顶层写入 `diffHash` / `currentHead` / `module` / `profile`;`diffHash` 必须执行 `harness_ledger.py diff-hash --repo . --base <baseCommit> --change-dir ".harness/changes/<change-name>" --json`,纳入 test-tracking manifest 中的 ignored tests;`currentHead`=`git rev-parse HEAD`
163
+ - [ ] test/submit/package 阶段如果 diffHash 一致,可复用 run 的 compile/unitTest 结果
164
+
165
+ ## 步骤 3:场景覆盖检查
166
+
167
+ - [ ] 单元测试场景逐条确认覆盖
168
+ - [ ] 接口测试场景逐条确认代码逻辑覆盖
169
+ - [ ] 数据兼容场景逐条确认(新字段 nullable、旧格式兼容)
170
+ - [ ] 将覆盖结果展示给用户(✅/🟡/❌/⏳ 标注)
171
+ - [ ] **覆盖状态必须正确分类**:✅ 自动化测试通过 / 🟡 静态检查未真实测试 / ❌ 未验证 / ⏳ `ownerPhase=test` 按计划移交
172
+ - [ ] 🟡 静态检查 **不得计入"已测试通过"**
173
+ - [ ] 如果任一 `ownerPhase=run` 的 P0 场景仅静态验证 → 最终结果必须是 🟡WARN
174
+ - [ ] `ownerPhase=test` 的任务或场景只记录为“待测试阶段执行”,不得将编码阶段降级为 WARN
175
+ - [ ] 最终摘要禁止写 `5✅ + 17🟡 = 22/22`,必须写 `自动化测试通过: 5 / 静态检查未真实验证: 17 / 未验证: 0`
176
+ - [ ] **禁止用测试用例数(如 178 tests)冒充场景数**——计数对象是 test-scenarios.md 的场景编号
177
+ - [ ] 四类计数自洽:run-owned 🟡/❌ 计入未验证;test-owned ⏳ 单列移交数量
178
+ - [ ] 输出为场景表映射(UT/API/COM/INT 逐条或范围 ✅/🟡/❌),不得只给聚合测试数
179
+
180
+ ### 权限/组织过滤类变更:安全矩阵
181
+
182
+ > 凡是修改了管理员/非管理员、orgCode、数据权限、越权异常等逻辑,必须强制生成。
183
+
184
+ - [ ] 生成安全矩阵(模板见 reference.md)
185
+ - [ ] 覆盖:超级管理员 token 空/非空 × 请求 orgCode 空/指定 × projectType 有/无
186
+ - [ ] 覆盖:非管理员 token 本组织/空 × 请求 orgCode 本组织/其他组织/空 × projectType 有/无
187
+ - [ ] 如果任一权限边界预期不明确 → 不允许标记 ✅OK
188
+
189
+ ## 步骤 4:关门检查(⚠️ 结束前强制执行)
190
+
191
+ - [ ] `git status --porcelain`
192
+ - [ ] `git diff --stat`
193
+ - [ ] `git diff --check`(如果失败 → 最终结果必须是 ❌FAIL)
194
+ - [ ] 变更文件是否全部在计划范围内
195
+ - [ ] 是否新增/修改了测试文件
196
+ - [ ] 是否误改 .harness/ 以外的非计划文件(如有 → 至少 🟡WARN,要求用户确认)
197
+ - [ ] 是否有 conflict marker:`<<<<<<<` / `=======` / `>>>>>>>`
198
+ - [ ] 是否有临时 debug:`System.out.println` / `console.log` / `debugger` / 临时 TODO/FIXME
199
+ - [ ] 是否有敏感信息:`password` / `token` / `secret` / `accessKey` / 私有 IP/URL
200
+ - [ ] 代码注释污染检查:生产代码中是否有 `// 修复 xxx Bug` / `// 本次变更` 等过程性注释(如有 → 必须在 REFACTOR 阶段清理)
201
+
202
+ ### 变更来源区分(预存变更隔离)
203
+
204
+ - [ ] 区分本次 run 修改的文件 vs run 前预存变更的文件
205
+ - [ ] 输出变更来源表(文件 / 来源 / 是否计划内 / 是否允许提交)
206
+ - [ ] 如果存在预存变更 → 最终结果至少为 🟡WARN
207
+
208
+ ### 数据库迁移任务审查清单
209
+
210
+ > 如果变更涉及数据库迁移脚本,必须生成此清单。
211
+
212
+ - [ ] DROP INDEX 是否存在 IF EXISTS 或等效检查
213
+ - [ ] 新索引名称
214
+ - [ ] 新索引字段
215
+ - [ ] 是否包含 deleted_time
216
+ - [ ] 是否兼容已有数据
217
+ - [ ] 是否包含历史数据修正
218
+ - [ ] 是否需要备份
219
+ - [ ] 是否需要回滚 SQL
220
+ - [ ] 数据库迁移脚本头部已标注"人工审查后手动执行,禁止自动运行"
221
+ - [ ] 数据库迁移任务状态标记为 🟡 NEEDS_DB_VALIDATION(不得标记为自动化测试通过)
222
+
223
+ ## 步骤 5:Worktree checkpoint commit(⚠️ 强制阻断)
224
+
225
+ > 仅在 worktree 中执行时触发此步骤。在主目录执行时跳过(标记 ⏭️主目录跳过)。
226
+
227
+ - [ ] 确认当前 cwd 在 `<adapter-worktree-root>/<change-name>/` 下,且 branch 使用 adapter 的 prefix
228
+ - [ ] 生成变更摘要:`git diff --stat` + `git diff --stat --cached`
229
+ - [ ] 构建 commit message:`wip(<scope>): <change-name> 编码完成 — N任务/M文件变更`
230
+ - [ ] **⚠️ 强制阻断**:用 blocking user confirmation 展示变更列表 + commit message,等待用户确认
231
+ - [ ] 用户确认 → 精确暂存业务文件;若存在 test-tracking manifest,先执行 `harness_test_guard.py stage --project . --change-dir ".harness/changes/<change-name>" --json`;禁止 `git add -A` 与目录级 force-add
232
+ - [ ] `git diff --cached --name-only` 包含 manifest 的全部精确测试路径后再 `git commit`(不用 --no-verify、--no-gpg-sign)
233
+ - [ ] 用户拒绝 → 记录 `❌用户拒绝`,继续后续流程
234
+ - [ ] 记录 checkpoint commit hash 到执行日志
235
+
236
+ ## 步骤 6:计划状态持久化
237
+
238
+ - [ ] 每个任务状态只更新到 `evidence/run-task-status.md`;不得修改 finalized plan 文件
239
+ - [ ] 状态区分:✅ DONE_AUTOMATED_TESTED / 🟡 DONE_STATIC_ONLY / 🟡 DONE_NEEDS_INTERFACE_TEST / 🟡 NEEDS_DB_VALIDATION / ❌ FAILED
240
+ - [ ] 确保后续 harness-test / harness-review 可读取待验证场景
241
+
242
+ ## 事件收尾记录
243
+
244
+ - [ ] append `phase.end` **仅**通过 `harness_gate.py close`(禁止手工 Edit `events.ndjson` / 直接 append phase.end 绕过 close 校验)
245
+ - [ ] 如果存在 run-owned 🟡静态验证 P0 场景 → 下一步必须写 `必须先运行 /harness-test`,不得并列"提交代码"
246
+ - [ ] 如果 run 阶段负责的数据库迁移/DB 验证未完成 → 最终不得输出纯 ✅OK
247
+
248
+ ### 最终状态分级
249
+
250
+ - [ ] **✅OK**:所有计划内代码变更完成 + run-owned 关键 P0 场景已自动化测试通过 + 构建成功 + 无预存变更或已隔离 + 无非计划文件混入 + 无 run-owned P0 静态-only 场景
251
+ - [ ] **🟡WARN**:存在 run-owned P0/P1 场景仅静态验证 / 存在预存变更 / run-owned 数据库验证未完成 / 低价值 Mock 替代真实验证
252
+ - [ ] **❌FAIL**:构建失败 / 有效测试失败 / RED 无法建立 / 非计划文件被修改且无法解释 / git diff --check 失败
253
+ - [ ] `ownerPhase=test` 的待办属于正常阶段移交;不得因为后续阶段尚未执行而把已完成的 run 标成 WARN
254
+ ## PowerShell-only 命令检查
255
+
256
+ - [ ] 所有 git 命令使用 `powershell.exe -NoProfile -Command "git ..."`
257
+ - [ ] 所有构建/测试命令使用 `powershell.exe -NoProfile -Command "<构建/测试命令> ..."`
258
+ - [ ] 所有文件系统命令使用 PowerShell
259
+ - [ ] 如果出现 Bash hook error,记录违规命令并将当前阶段至少标为 🟡WARN
260
+
261
+ ## Ledger 必填字段检查
262
+
263
+ - [ ] verification-ledger.json 包含 changeName/projectRoot/worktreeRoot/stateDir
264
+ - [ ] 包含 currentHead/baseCommit/diffHash/module/profile
265
+ - [ ] 包含 validations.compile 与 validations.unitTest
266
+ - [ ] 缺字段时标记 `ledgerReusable=false`,后续阶段不得复用
267
+ - [ ] diffHash 必须由 `harness_ledger.py diff-hash --change-dir` 生成;manifest hash 漂移或路径越界时硬停止,禁止绕过后复用 ledger
268
+
269
+ ## 新筛选参数非法值行为检查
270
+
271
+ - [ ] 如果新增筛选参数,设计中已明确非法值行为
272
+ - [ ] 如果采用“忽略并不过滤”,必须有用户确认记录
273
+ - [ ] 测试场景覆盖非法值
274
+
275
+
276
+ ## Wave-2 — Migration head(H-7)
277
+
278
+ - [ ] 若变更触及 alembic/versions 或项目约定 migration 路径:列出 config / CI / env / manifest 联动文件
279
+ - [ ] 消费项目存在 .harness/config/migration-head.json 时,跑 harness_migration_head.py check --project . --json
@@ -0,0 +1,141 @@
1
+ ---
2
+ description: harness-run 的原生执行协议。内化 TDD 与变更簇审查能力,但不运行时依赖 Superpowers。
3
+ ---
4
+
5
+ # harness-run 原生执行协议
6
+
7
+ 本文件定义 `/harness-run` 的内置执行协议。它吸收 test-driven-development 与 subagent-driven-development 的有效做法,但正式流程不调用 Superpowers,也不把外部 skill 是否存在作为执行条件。
8
+
9
+ ## 协议一:run-tdd-protocol
10
+
11
+ 用于每个变更簇。目标是保留 RED→GREEN→REFACTOR 的行为约束,同时允许 harness 按证据分级处理缺失测试基础设施的现实情况。
12
+
13
+ ### RED 三态
14
+
15
+ | RED 类型 | 何时使用 | 证据要求 |
16
+ |----------|----------|----------|
17
+ | 真实 RED | 测试基础设施可用,能写测试并运行失败 | 测试编译通过,失败断言指向目标行为 |
18
+ | 静态 RED | 测试基础设施不可用或目标层无法真实验证 | 记录降级原因、静态验证场景、待 harness-test 验证场景 |
19
+ | 复用 RED | 计划和测试场景已明确失败场景,且本轮只执行同一场景的实现 | 引用 test-scenarios 编号与前序证据,仍需在 run 日志登记 |
20
+
21
+ RED 失败原因必须与目标 bug 或需求直接相关。无效 RED(测试搭建错误、private 访问限制、mock/stubbing 错误、依赖注入失败、NPE 来自测试夹具)不得进入 GREEN。
22
+
23
+ ### GREEN
24
+
25
+ GREEN 只做让当前变更簇通过的最小实现。不得顺手处理无关重构、顺手扩范围、或把未确认业务决策写入代码。
26
+
27
+ ### REFACTOR
28
+
29
+ REFACTOR 只允许不改变行为的整理。若重构改变行为,必须回到 RED/GREEN。重构后重新运行当前变更簇对应验证;若无法运行真实测试,必须更新静态验证说明。
30
+
31
+ ### 证据写入
32
+
33
+ 每个变更簇结束必须写入或更新:
34
+
35
+ - `evidence/verification-ledger.json`:构建/测试命令、证据、diffHash、复用状态。
36
+ - `evidence/run-task-status.md`:任务状态、对应场景、未验证项。
37
+ - `events.ndjson`:关键 command / verification / issue / artifact 事件;RED 类型、GREEN 结果、REFACTOR 结果和验证证据放入事件 `note`。
38
+
39
+ 执行日志是上述事件在阶段边界生成的只读投影,不作为变更簇的直接输出目标。
40
+
41
+ 禁止把静态验证写成“测试通过”。静态 RED/GREEN 的最终状态至少是 🟡WARN,除非后续真实验证已完成。
42
+
43
+ 上述分级只评估 `ownerPhase=run` 的任务和场景。`ownerPhase=test` 的验证按计划留给测试阶段时,记录为“待测试阶段执行”,不得将编码阶段降级为 WARN;后续阶段未开始不是当前阶段的风险。
44
+
45
+ ## 协议二:change-cluster-review-protocol
46
+
47
+ 用于高风险变更簇后的轻量审查。它内化 subagent-driven-development 的“新上下文审查”价值,但不把每个变更簇的 subagent 审查设为默认流程。
48
+
49
+ ### 触发条件
50
+
51
+ 满足**全部**条件时启用:
52
+
53
+ - 变更簇命中高风险(数据迁移、权限、安全、并发、幂等、核心契约变更、缺真实测试证据等,见原触发列表任一)
54
+ - 当前宿主已显式提供隔离 reviewer 能力;需要固定 reviewer 时,单次 `check-agents` 返回 `executionMode=delegated`
55
+
56
+ 未满足时记录“跳过变更簇隔离审查:低风险 / 正常 inline / 后续 harness-review 覆盖”,不得视为降级或显示不可用告警。
57
+
58
+ ### 审查方式
59
+
60
+ `executionMode=delegated` 时委派只读 `harness-reviewer` 审查当前变更簇 diff。**不 retry**;spawn 失败或无效返回 → 主会话 checklist 自审,记一次 `issue` 事件。
61
+
62
+ 审查范围只限当前变更簇:
63
+
64
+ - 是否偏离 plan / implementation-detail。
65
+ - 是否遗漏 test-scenarios 中的 P0/P1 场景。
66
+ - 是否破坏 API、数据、权限、安全或兼容契约。
67
+ - 是否引入非计划文件、临时 debug、敏感信息或过程性注释。
68
+
69
+ ### 输出
70
+
71
+ 审查结论写入当前 run 日志:
72
+
73
+ ```markdown
74
+ ### 变更簇审查 — <cluster>
75
+ - 触发原因: <risk trigger>
76
+ - 方式: reviewer / 主会话自审 / 跳过
77
+ - 结论: OK / YELLOW / RED
78
+ - 问题: <文件:行 + 建议>
79
+ ```
80
+
81
+ RED 问题必须在当前 run 中处理或明确记录为未处理风险;YELLOW 问题可交给后续 `/harness-review`。
82
+
83
+ ## fixback 证据契约
84
+
85
+ > `launch-review` 的返回体里带 `evidenceContract` 字段,内容与本节一致。这里写一份是因为
86
+ > 光靠运行时返回,调用方往往已经动手改代码了才看到。
87
+
88
+ ### 命令链
89
+
90
+ ```text
91
+ run-start(修复前,采 RED)→ 改代码 → run-start(修复后,采 GREEN)
92
+ → evidence-template ×2 → register-evidence ×2 → resolve-issue
93
+ → run-start(受影响链)→ evidence-template --kind verification
94
+ → evidence-template --kind review → close
95
+ ```
96
+
97
+ ### 别手写证据 JSON
98
+
99
+ 证据文件的 `provenance` 需要 `sessionId` / `commandHash` / `resultDigest` / `runReceiptPath`
100
+ 四个字段,全部能从 `session.json` 直接读出来。用模板生成,不要手抄:
101
+
102
+ ```text
103
+ python <skills-root>/scripts/harness_fixback.py evidence-template \
104
+ --change-dir <change-dir> --kind red|green|verification|review \
105
+ --session <sessionId> --out <证据 JSON 路径> --json
106
+ ```
107
+
108
+ 输出即可直接喂给 `register-evidence`。撞 `FIXBACK_RUN_PROVENANCE_INVALID` 时,错误体会点名
109
+ **哪个字段、期望什么、实际什么**——按它改,不要去读实现反推。
110
+
111
+ ### `--product-identity`
112
+
113
+ 产品身份指纹,把 RED/GREEN 绑定到同一产品状态。规范取值是**当前 git HEAD**。省略即自动推导,
114
+ `launch-review` 会在返回体的 `resolvedProductIdentity` 里回显;`close --final-product-identity`
115
+ **原样引用那个值**,不要另行推导——推导方式不同就会撞 `FIXBACK_GREEN_IDENTITY_MISMATCH`。
116
+
117
+ ### RED 必须在修复之前
118
+
119
+ RED 证明问题真实存在,GREEN 证明修复真的生效。先改完再把改动回退来凑 RED,证明的只是回退后的
120
+ 状态,不是原始缺陷,中途还会留下脏工作树。
121
+
122
+ ### close 的两张收据与 review-findings.json
123
+
124
+ `close` 要 `--affected-receipt`(`kind=verification`,受影响链的托管会话)和 `--review-receipt`
125
+ (`kind=review`,指向 `reports/review/review-findings.json`)。
126
+
127
+ review 收据的放行规则按 **disposition**,不按 severity:
128
+
129
+ | disposition | 是否阻塞 | 说明 |
130
+ |---|---|---|
131
+ | `OPEN` / 未登记 | ❌ 阻塞 | 还没人处置,必须先给结论 |
132
+ | `FIXED` / `NOT_APPLICABLE` | ✅ 放行 | 已闭环 |
133
+ | `ACCEPTED_RISK` / `DEFERRED` | ✅ 放行 | 记入收据 `residualRisks` 留痕 |
134
+
135
+ > ⚠️ **不要为了让 close 通过而清空或删改 `review-findings.json`。** 它是发现的真相源,写空等于
136
+ > 抹掉整轮审查的审计轨迹。处置结论属于另一个 sidecar:
137
+ >
138
+ > ```text
139
+ > python <skills-root>/scripts/harness_review.py write-dispositions \
140
+ > --change-dir <change-dir> --input <dispositions.json>
141
+ > ```