@hunter-harness/workflow-harness 0.2.10 → 0.2.12

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 (250) hide show
  1. package/harness/bundles/general/claude-code/.harness-build.json +1 -1
  2. package/harness/bundles/general/claude-code/contracts/ci-metrics.schema.json +36 -0
  3. package/harness/bundles/general/claude-code/contracts/workflow-policy.json +30 -0
  4. package/harness/bundles/general/claude-code/harness-archive/SKILL.md +1 -1
  5. package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +1 -1
  6. package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
  7. package/harness/bundles/general/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py +24 -2
  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 +4 -4
  10. package/harness/bundles/general/claude-code/harness-plan/checklist.md +6 -0
  11. package/harness/bundles/general/claude-code/harness-plan/reference.md +7 -2
  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-run/checklist.md +3 -2
  15. package/harness/bundles/general/claude-code/harness-run/reference.md +6 -4
  16. package/harness/bundles/general/claude-code/harness-submit/SKILL.md +1 -1
  17. package/harness/bundles/general/claude-code/harness-sync/SKILL.md +1 -1
  18. package/harness/bundles/general/claude-code/harness-test/SKILL.md +1 -1
  19. package/harness/bundles/general/claude-code/scripts/harness_archive.py +282 -120
  20. package/harness/bundles/general/claude-code/scripts/harness_events.py +400 -24
  21. package/harness/bundles/general/claude-code/scripts/harness_gate.py +585 -21
  22. package/harness/bundles/general/claude-code/scripts/harness_integration.py +403 -18
  23. package/harness/bundles/general/claude-code/scripts/harness_ledger.py +225 -29
  24. package/harness/bundles/general/claude-code/scripts/harness_phase.py +926 -0
  25. package/harness/bundles/general/claude-code/scripts/harness_plan_finalize.py +361 -0
  26. package/harness/bundles/general/claude-code/scripts/harness_profile.py +50 -0
  27. package/harness/bundles/general/claude-code/scripts/harness_runtime.py +248 -0
  28. package/harness/bundles/general/claude-code/scripts/harness_state.py +15 -2
  29. package/harness/bundles/general/claude-code/scripts/harness_test_guard.py +188 -0
  30. package/harness/bundles/general/claude-code/scripts/harness_workflow_policy.py +19 -0
  31. package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
  32. package/harness/bundles/general/codebuddy/contracts/ci-metrics.schema.json +36 -0
  33. package/harness/bundles/general/codebuddy/contracts/workflow-policy.json +30 -0
  34. package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +1 -1
  35. package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +1 -1
  36. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
  37. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge.py +24 -2
  38. package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  39. package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +4 -4
  40. package/harness/bundles/general/codebuddy/harness-plan/checklist.md +6 -0
  41. package/harness/bundles/general/codebuddy/harness-plan/reference.md +7 -2
  42. package/harness/bundles/general/codebuddy/harness-review/SKILL.md +1 -1
  43. package/harness/bundles/general/codebuddy/harness-run/SKILL.md +1 -1
  44. package/harness/bundles/general/codebuddy/harness-run/checklist.md +3 -2
  45. package/harness/bundles/general/codebuddy/harness-run/reference.md +6 -4
  46. package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +1 -1
  47. package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +1 -1
  48. package/harness/bundles/general/codebuddy/harness-test/SKILL.md +1 -1
  49. package/harness/bundles/general/codebuddy/scripts/harness_archive.py +282 -120
  50. package/harness/bundles/general/codebuddy/scripts/harness_events.py +400 -24
  51. package/harness/bundles/general/codebuddy/scripts/harness_gate.py +585 -21
  52. package/harness/bundles/general/codebuddy/scripts/harness_integration.py +403 -18
  53. package/harness/bundles/general/codebuddy/scripts/harness_ledger.py +225 -29
  54. package/harness/bundles/general/codebuddy/scripts/harness_phase.py +926 -0
  55. package/harness/bundles/general/codebuddy/scripts/harness_plan_finalize.py +361 -0
  56. package/harness/bundles/general/codebuddy/scripts/harness_profile.py +50 -0
  57. package/harness/bundles/general/codebuddy/scripts/harness_runtime.py +248 -0
  58. package/harness/bundles/general/codebuddy/scripts/harness_state.py +15 -2
  59. package/harness/bundles/general/codebuddy/scripts/harness_test_guard.py +188 -0
  60. package/harness/bundles/general/codebuddy/scripts/harness_workflow_policy.py +19 -0
  61. package/harness/bundles/general/codex/.harness-build.json +1 -1
  62. package/harness/bundles/general/codex/contracts/ci-metrics.schema.json +36 -0
  63. package/harness/bundles/general/codex/contracts/workflow-policy.json +30 -0
  64. package/harness/bundles/general/codex/harness-archive/SKILL.md +1 -1
  65. package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +1 -1
  66. package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +1 -1
  67. package/harness/bundles/general/codex/harness-knowledge-ingest/scripts/harness_knowledge.py +24 -2
  68. package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +1 -1
  69. package/harness/bundles/general/codex/harness-plan/SKILL.md +4 -4
  70. package/harness/bundles/general/codex/harness-plan/checklist.md +6 -0
  71. package/harness/bundles/general/codex/harness-plan/reference.md +7 -2
  72. package/harness/bundles/general/codex/harness-review/SKILL.md +1 -1
  73. package/harness/bundles/general/codex/harness-run/SKILL.md +1 -1
  74. package/harness/bundles/general/codex/harness-run/checklist.md +3 -2
  75. package/harness/bundles/general/codex/harness-run/reference.md +6 -4
  76. package/harness/bundles/general/codex/harness-submit/SKILL.md +1 -1
  77. package/harness/bundles/general/codex/harness-sync/SKILL.md +1 -1
  78. package/harness/bundles/general/codex/harness-test/SKILL.md +1 -1
  79. package/harness/bundles/general/codex/scripts/harness_archive.py +282 -120
  80. package/harness/bundles/general/codex/scripts/harness_events.py +400 -24
  81. package/harness/bundles/general/codex/scripts/harness_gate.py +585 -21
  82. package/harness/bundles/general/codex/scripts/harness_integration.py +403 -18
  83. package/harness/bundles/general/codex/scripts/harness_ledger.py +225 -29
  84. package/harness/bundles/general/codex/scripts/harness_phase.py +926 -0
  85. package/harness/bundles/general/codex/scripts/harness_plan_finalize.py +361 -0
  86. package/harness/bundles/general/codex/scripts/harness_profile.py +50 -0
  87. package/harness/bundles/general/codex/scripts/harness_runtime.py +248 -0
  88. package/harness/bundles/general/codex/scripts/harness_state.py +15 -2
  89. package/harness/bundles/general/codex/scripts/harness_test_guard.py +188 -0
  90. package/harness/bundles/general/codex/scripts/harness_workflow_policy.py +19 -0
  91. package/harness/bundles/general/cursor/.harness-build.json +1 -1
  92. package/harness/bundles/general/cursor/contracts/ci-metrics.schema.json +36 -0
  93. package/harness/bundles/general/cursor/contracts/workflow-policy.json +30 -0
  94. package/harness/bundles/general/cursor/harness-archive/SKILL.md +1 -1
  95. package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +1 -1
  96. package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +1 -1
  97. package/harness/bundles/general/cursor/harness-knowledge-ingest/scripts/harness_knowledge.py +24 -2
  98. package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +1 -1
  99. package/harness/bundles/general/cursor/harness-plan/SKILL.md +4 -4
  100. package/harness/bundles/general/cursor/harness-plan/checklist.md +6 -0
  101. package/harness/bundles/general/cursor/harness-plan/reference.md +7 -2
  102. package/harness/bundles/general/cursor/harness-review/SKILL.md +1 -1
  103. package/harness/bundles/general/cursor/harness-run/SKILL.md +1 -1
  104. package/harness/bundles/general/cursor/harness-run/checklist.md +3 -2
  105. package/harness/bundles/general/cursor/harness-run/reference.md +6 -4
  106. package/harness/bundles/general/cursor/harness-submit/SKILL.md +1 -1
  107. package/harness/bundles/general/cursor/harness-sync/SKILL.md +1 -1
  108. package/harness/bundles/general/cursor/harness-test/SKILL.md +1 -1
  109. package/harness/bundles/general/cursor/scripts/harness_archive.py +282 -120
  110. package/harness/bundles/general/cursor/scripts/harness_events.py +400 -24
  111. package/harness/bundles/general/cursor/scripts/harness_gate.py +585 -21
  112. package/harness/bundles/general/cursor/scripts/harness_integration.py +403 -18
  113. package/harness/bundles/general/cursor/scripts/harness_ledger.py +225 -29
  114. package/harness/bundles/general/cursor/scripts/harness_phase.py +926 -0
  115. package/harness/bundles/general/cursor/scripts/harness_plan_finalize.py +361 -0
  116. package/harness/bundles/general/cursor/scripts/harness_profile.py +50 -0
  117. package/harness/bundles/general/cursor/scripts/harness_runtime.py +248 -0
  118. package/harness/bundles/general/cursor/scripts/harness_state.py +15 -2
  119. package/harness/bundles/general/cursor/scripts/harness_test_guard.py +188 -0
  120. package/harness/bundles/general/cursor/scripts/harness_workflow_policy.py +19 -0
  121. package/harness/bundles/java/claude-code/.harness-build.json +1 -1
  122. package/harness/bundles/java/claude-code/contracts/ci-metrics.schema.json +36 -0
  123. package/harness/bundles/java/claude-code/contracts/workflow-policy.json +30 -0
  124. package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +1 -1
  125. package/harness/bundles/java/claude-code/harness-archive/SKILL.md +1 -1
  126. package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +1 -1
  127. package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
  128. package/harness/bundles/java/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py +24 -2
  129. package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +1 -1
  130. package/harness/bundles/java/claude-code/harness-package/SKILL.md +1 -1
  131. package/harness/bundles/java/claude-code/harness-plan/SKILL.md +4 -4
  132. package/harness/bundles/java/claude-code/harness-plan/checklist.md +6 -0
  133. package/harness/bundles/java/claude-code/harness-plan/reference.md +7 -2
  134. package/harness/bundles/java/claude-code/harness-review/SKILL.md +1 -1
  135. package/harness/bundles/java/claude-code/harness-run/SKILL.md +1 -1
  136. package/harness/bundles/java/claude-code/harness-submit/SKILL.md +1 -1
  137. package/harness/bundles/java/claude-code/harness-sync/SKILL.md +1 -1
  138. package/harness/bundles/java/claude-code/harness-test/SKILL.md +1 -1
  139. package/harness/bundles/java/claude-code/scripts/harness_archive.py +282 -120
  140. package/harness/bundles/java/claude-code/scripts/harness_events.py +400 -24
  141. package/harness/bundles/java/claude-code/scripts/harness_gate.py +585 -21
  142. package/harness/bundles/java/claude-code/scripts/harness_integration.py +403 -18
  143. package/harness/bundles/java/claude-code/scripts/harness_ledger.py +225 -29
  144. package/harness/bundles/java/claude-code/scripts/harness_phase.py +926 -0
  145. package/harness/bundles/java/claude-code/scripts/harness_plan_finalize.py +361 -0
  146. package/harness/bundles/java/claude-code/scripts/harness_profile.py +50 -0
  147. package/harness/bundles/java/claude-code/scripts/harness_runtime.py +248 -0
  148. package/harness/bundles/java/claude-code/scripts/harness_state.py +15 -2
  149. package/harness/bundles/java/claude-code/scripts/harness_test_guard.py +188 -0
  150. package/harness/bundles/java/claude-code/scripts/harness_workflow_policy.py +19 -0
  151. package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
  152. package/harness/bundles/java/codebuddy/contracts/ci-metrics.schema.json +36 -0
  153. package/harness/bundles/java/codebuddy/contracts/workflow-policy.json +30 -0
  154. package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +1 -1
  155. package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +1 -1
  156. package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +1 -1
  157. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
  158. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge.py +24 -2
  159. package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  160. package/harness/bundles/java/codebuddy/harness-package/SKILL.md +1 -1
  161. package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +4 -4
  162. package/harness/bundles/java/codebuddy/harness-plan/checklist.md +6 -0
  163. package/harness/bundles/java/codebuddy/harness-plan/reference.md +7 -2
  164. package/harness/bundles/java/codebuddy/harness-review/SKILL.md +1 -1
  165. package/harness/bundles/java/codebuddy/harness-run/SKILL.md +1 -1
  166. package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +1 -1
  167. package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +1 -1
  168. package/harness/bundles/java/codebuddy/harness-test/SKILL.md +1 -1
  169. package/harness/bundles/java/codebuddy/scripts/harness_archive.py +282 -120
  170. package/harness/bundles/java/codebuddy/scripts/harness_events.py +400 -24
  171. package/harness/bundles/java/codebuddy/scripts/harness_gate.py +585 -21
  172. package/harness/bundles/java/codebuddy/scripts/harness_integration.py +403 -18
  173. package/harness/bundles/java/codebuddy/scripts/harness_ledger.py +225 -29
  174. package/harness/bundles/java/codebuddy/scripts/harness_phase.py +926 -0
  175. package/harness/bundles/java/codebuddy/scripts/harness_plan_finalize.py +361 -0
  176. package/harness/bundles/java/codebuddy/scripts/harness_profile.py +50 -0
  177. package/harness/bundles/java/codebuddy/scripts/harness_runtime.py +248 -0
  178. package/harness/bundles/java/codebuddy/scripts/harness_state.py +15 -2
  179. package/harness/bundles/java/codebuddy/scripts/harness_test_guard.py +188 -0
  180. package/harness/bundles/java/codebuddy/scripts/harness_workflow_policy.py +19 -0
  181. package/harness/bundles/java/codex/.harness-build.json +1 -1
  182. package/harness/bundles/java/codex/contracts/ci-metrics.schema.json +36 -0
  183. package/harness/bundles/java/codex/contracts/workflow-policy.json +30 -0
  184. package/harness/bundles/java/codex/harness-apidoc/SKILL.md +1 -1
  185. package/harness/bundles/java/codex/harness-archive/SKILL.md +1 -1
  186. package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +1 -1
  187. package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +1 -1
  188. package/harness/bundles/java/codex/harness-knowledge-ingest/scripts/harness_knowledge.py +24 -2
  189. package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +1 -1
  190. package/harness/bundles/java/codex/harness-package/SKILL.md +1 -1
  191. package/harness/bundles/java/codex/harness-plan/SKILL.md +4 -4
  192. package/harness/bundles/java/codex/harness-plan/checklist.md +6 -0
  193. package/harness/bundles/java/codex/harness-plan/reference.md +7 -2
  194. package/harness/bundles/java/codex/harness-review/SKILL.md +1 -1
  195. package/harness/bundles/java/codex/harness-run/SKILL.md +1 -1
  196. package/harness/bundles/java/codex/harness-submit/SKILL.md +1 -1
  197. package/harness/bundles/java/codex/harness-sync/SKILL.md +1 -1
  198. package/harness/bundles/java/codex/harness-test/SKILL.md +1 -1
  199. package/harness/bundles/java/codex/scripts/harness_archive.py +282 -120
  200. package/harness/bundles/java/codex/scripts/harness_events.py +400 -24
  201. package/harness/bundles/java/codex/scripts/harness_gate.py +585 -21
  202. package/harness/bundles/java/codex/scripts/harness_integration.py +403 -18
  203. package/harness/bundles/java/codex/scripts/harness_ledger.py +225 -29
  204. package/harness/bundles/java/codex/scripts/harness_phase.py +926 -0
  205. package/harness/bundles/java/codex/scripts/harness_plan_finalize.py +361 -0
  206. package/harness/bundles/java/codex/scripts/harness_profile.py +50 -0
  207. package/harness/bundles/java/codex/scripts/harness_runtime.py +248 -0
  208. package/harness/bundles/java/codex/scripts/harness_state.py +15 -2
  209. package/harness/bundles/java/codex/scripts/harness_test_guard.py +188 -0
  210. package/harness/bundles/java/codex/scripts/harness_workflow_policy.py +19 -0
  211. package/harness/bundles/java/cursor/.harness-build.json +1 -1
  212. package/harness/bundles/java/cursor/contracts/ci-metrics.schema.json +36 -0
  213. package/harness/bundles/java/cursor/contracts/workflow-policy.json +30 -0
  214. package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +1 -1
  215. package/harness/bundles/java/cursor/harness-archive/SKILL.md +1 -1
  216. package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +1 -1
  217. package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +1 -1
  218. package/harness/bundles/java/cursor/harness-knowledge-ingest/scripts/harness_knowledge.py +24 -2
  219. package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +1 -1
  220. package/harness/bundles/java/cursor/harness-package/SKILL.md +1 -1
  221. package/harness/bundles/java/cursor/harness-plan/SKILL.md +4 -4
  222. package/harness/bundles/java/cursor/harness-plan/checklist.md +6 -0
  223. package/harness/bundles/java/cursor/harness-plan/reference.md +7 -2
  224. package/harness/bundles/java/cursor/harness-review/SKILL.md +1 -1
  225. package/harness/bundles/java/cursor/harness-run/SKILL.md +1 -1
  226. package/harness/bundles/java/cursor/harness-submit/SKILL.md +1 -1
  227. package/harness/bundles/java/cursor/harness-sync/SKILL.md +1 -1
  228. package/harness/bundles/java/cursor/harness-test/SKILL.md +1 -1
  229. package/harness/bundles/java/cursor/scripts/harness_archive.py +282 -120
  230. package/harness/bundles/java/cursor/scripts/harness_events.py +400 -24
  231. package/harness/bundles/java/cursor/scripts/harness_gate.py +585 -21
  232. package/harness/bundles/java/cursor/scripts/harness_integration.py +403 -18
  233. package/harness/bundles/java/cursor/scripts/harness_ledger.py +225 -29
  234. package/harness/bundles/java/cursor/scripts/harness_phase.py +926 -0
  235. package/harness/bundles/java/cursor/scripts/harness_plan_finalize.py +361 -0
  236. package/harness/bundles/java/cursor/scripts/harness_profile.py +50 -0
  237. package/harness/bundles/java/cursor/scripts/harness_runtime.py +248 -0
  238. package/harness/bundles/java/cursor/scripts/harness_state.py +15 -2
  239. package/harness/bundles/java/cursor/scripts/harness_test_guard.py +188 -0
  240. package/harness/bundles/java/cursor/scripts/harness_workflow_policy.py +19 -0
  241. package/harness/manifests/general/claude-code.json +43 -27
  242. package/harness/manifests/general/codebuddy.json +43 -27
  243. package/harness/manifests/general/codex.json +43 -27
  244. package/harness/manifests/general/cursor.json +43 -27
  245. package/harness/manifests/java/claude-code.json +43 -27
  246. package/harness/manifests/java/codebuddy.json +43 -27
  247. package/harness/manifests/java/codex.json +43 -27
  248. package/harness/manifests/java/cursor.json +43 -27
  249. package/hunter-workflow-family.json +2 -2
  250. package/package.json +1 -1
@@ -2,5 +2,5 @@
2
2
  "schemaVersion": 1,
3
3
  "overlay": "none",
4
4
  "agent": "claude-code",
5
- "coreHash": "43088896a4556b69"
5
+ "coreHash": "8dd8ce9aa1ac47f5"
6
6
  }
@@ -0,0 +1,36 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://hunter-harness.dev/contracts/ci-metrics.schema.json",
4
+ "title": "Hunter Harness CI Metrics",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schemaVersion",
9
+ "runner",
10
+ "source",
11
+ "suites",
12
+ "passed",
13
+ "failed",
14
+ "skipped",
15
+ "setupErrors",
16
+ "durationMs",
17
+ "headSha"
18
+ ],
19
+ "properties": {
20
+ "schemaVersion": { "const": 1 },
21
+ "runner": { "enum": ["junit", "vitest", "playwright"] },
22
+ "source": { "type": ["string", "null"] },
23
+ "suites": { "type": ["integer", "null"], "minimum": 0 },
24
+ "passed": { "type": ["integer", "null"], "minimum": 0 },
25
+ "failed": { "type": ["integer", "null"], "minimum": 0 },
26
+ "skipped": { "type": ["integer", "null"], "minimum": 0 },
27
+ "setupErrors": { "type": ["integer", "null"], "minimum": 0 },
28
+ "durationMs": { "type": ["integer", "null"], "minimum": 0 },
29
+ "headSha": {
30
+ "anyOf": [
31
+ { "type": "null" },
32
+ { "type": "string", "pattern": "^[0-9a-f]{40}([0-9a-f]{24})?$" }
33
+ ]
34
+ }
35
+ }
36
+ }
@@ -138,6 +138,36 @@
138
138
  "submit": [],
139
139
  "package": ["package"]
140
140
  },
141
+ "validationPhases": {
142
+ "compile": "run",
143
+ "unitTest": "run",
144
+ "unitTestFull": "test",
145
+ "apiTest": "test",
146
+ "dbCompatibility": "test",
147
+ "package": "package"
148
+ },
149
+ "capabilityGates": {
150
+ "deployment": {
151
+ "signals": ["deploy-required"],
152
+ "requiredStages": ["package"],
153
+ "requiredValidations": ["package"]
154
+ },
155
+ "container": {
156
+ "signals": ["install-verification"],
157
+ "requiredStages": ["package"],
158
+ "requiredValidations": ["package"]
159
+ },
160
+ "api": {
161
+ "signals": ["api-diff-present"],
162
+ "requiredStages": ["apidoc"],
163
+ "requiredValidations": ["apiTest"]
164
+ },
165
+ "database": {
166
+ "signals": ["migration"],
167
+ "requiredStages": [],
168
+ "requiredValidations": ["dbCompatibility"]
169
+ }
170
+ },
141
171
  "conditionalStages": {
142
172
  "review": {
143
173
  "tiers": ["standard", "full"],
@@ -20,7 +20,7 @@ disallowed-tools:
20
20
  - Bash(awk *)
21
21
  - Bash(curl *)
22
22
  ---
23
- <!-- generated by harness_deploy.py; core=43088896a4556b69; overlay=none; agent=claude-code; do not edit -->
23
+ <!-- generated by harness_deploy.py; core=8dd8ce9aa1ac47f5; overlay=none; agent=claude-code; do not edit -->
24
24
  # harness-archive — 变更归档
25
25
 
26
26
  ## Purpose
@@ -20,7 +20,7 @@ disallowed-tools:
20
20
  - Bash(awk *)
21
21
  - Bash(curl *)
22
22
  ---
23
- <!-- generated by harness_deploy.py; core=43088896a4556b69; overlay=none; agent=claude-code; do not edit -->
23
+ <!-- generated by harness_deploy.py; core=8dd8ce9aa1ac47f5; overlay=none; agent=claude-code; do not edit -->
24
24
  # harness-codebase-map — 代码库地图
25
25
 
26
26
  ## Purpose
@@ -20,7 +20,7 @@ disallowed-tools:
20
20
  - Bash(awk *)
21
21
  - Bash(curl *)
22
22
  ---
23
- <!-- generated by harness_deploy.py; core=43088896a4556b69; overlay=none; agent=claude-code; do not edit -->
23
+ <!-- generated by harness_deploy.py; core=8dd8ce9aa1ac47f5; overlay=none; agent=claude-code; do not edit -->
24
24
  # harness-knowledge-ingest
25
25
 
26
26
  从 `.harness/archive/**/reports/final/summary-data.json` 抽取项目知识,生成并维护本地 `.harness/knowledge/` 索引。
@@ -1823,6 +1823,19 @@ def compute_inputs_hash(
1823
1823
  versions + preserved entries (active / manually demoted), so promote/demote
1824
1824
  correctly invalidate the no-op fast path.
1825
1825
  """
1826
+ return compute_inputs_hash_from_preserved(
1827
+ records,
1828
+ config,
1829
+ load_preserved_entries(knowledge),
1830
+ )
1831
+
1832
+
1833
+ def compute_inputs_hash_from_preserved(
1834
+ records: list[dict[str, Any]],
1835
+ config: dict[str, Any],
1836
+ preserved_entries: list[dict[str, Any]],
1837
+ ) -> str:
1838
+ """Hash knowledge inputs using an already-resolved preserved closure."""
1826
1839
  archive_fingerprint = json.dumps(
1827
1840
  sorted(
1828
1841
  (
@@ -1843,7 +1856,6 @@ def compute_inputs_hash(
1843
1856
  },
1844
1857
  sort_keys=True,
1845
1858
  )
1846
- preserved = load_preserved_entries(knowledge)
1847
1859
  preserved_fingerprint = json.dumps(
1848
1860
  sorted(
1849
1861
  (
@@ -1852,7 +1864,7 @@ def compute_inputs_hash(
1852
1864
  "status": e.get("status"),
1853
1865
  "lifecycle": e.get("lifecycle", {}),
1854
1866
  }
1855
- for e in preserved
1867
+ for e in preserved_entries
1856
1868
  ),
1857
1869
  key=lambda item: item["id"] or "",
1858
1870
  ),
@@ -2120,6 +2132,16 @@ def build_index(
2120
2132
  ingest_mode["confidenceScored"] = len(indexed_entries)
2121
2133
  ingest_mode["entriesPruned"] = prune_generated_entries(knowledge, indexed_entries)
2122
2134
 
2135
+ # Lifecycle policies above may relocate or mutate preserved entries. The
2136
+ # pre-build hash remains useful for the no-op gate, but the persisted index
2137
+ # must describe the final preserved closure or an immediate sync will mark
2138
+ # the freshly rebuilt index stale.
2139
+ ingest_mode["inputsHash"] = compute_inputs_hash_from_preserved(
2140
+ archive_records,
2141
+ config,
2142
+ load_preserved_entries(knowledge),
2143
+ )
2144
+
2123
2145
  sqlite_stats = write_sqlite(knowledge / "index.sqlite", indexed_entries)
2124
2146
  ingest_mode.update(sqlite_stats)
2125
2147
  index = make_manifest(
@@ -20,7 +20,7 @@ disallowed-tools:
20
20
  - Bash(awk *)
21
21
  - Bash(curl *)
22
22
  ---
23
- <!-- generated by harness_deploy.py; core=43088896a4556b69; overlay=none; agent=claude-code; do not edit -->
23
+ <!-- generated by harness_deploy.py; core=8dd8ce9aa1ac47f5; overlay=none; agent=claude-code; do not edit -->
24
24
  # harness-knowledge-query
25
25
 
26
26
  并行 change 中查询必须传 `--change <change-id>`;成功后以该 change 的 `meta/knowledge-context.json` 为稳定指针。全局 `context-packs/latest.json` 仅向后兼容,不得用于判断多个 active change 的上下文归属。
@@ -20,7 +20,7 @@ disallowed-tools:
20
20
  - Bash(awk *)
21
21
  - Bash(curl *)
22
22
  ---
23
- <!-- generated by harness_deploy.py; core=43088896a4556b69; overlay=none; agent=claude-code; do not edit -->
23
+ <!-- generated by harness_deploy.py; core=8dd8ce9aa1ac47f5; overlay=none; agent=claude-code; do not edit -->
24
24
  # harness-plan — 需求规划
25
25
 
26
26
  ## Purpose
@@ -76,7 +76,7 @@ disallowed-tools:
76
76
 
77
77
  | 阶段 | 动作 |
78
78
  |------|------|
79
- | 0 | git status;脏工作区 → baseline 隔离 + `decision`,不询问 |
79
+ | 0 | 用当前解释器运行 `harness_runtime.py doctor`,后续消费绝对 argv;git status;脏工作区 → baseline 隔离 + `decision`,不询问 |
80
80
  | 0.5 | 先初始化 change-name + `phase.start`,从第一条知识查询起保留事件证据 |
81
81
  | 1 | `harness-knowledge-query` 单次 query(内部 ensure-current;失败记 `issue`) |
82
82
  | 2 | 歧义优先检查 + 复杂度分级;先确认会改变实现方向的语义歧义 |
@@ -84,7 +84,7 @@ disallowed-tools:
84
84
  | 4 | **设计审批包** AskUserQuestion;确认事件早于 approved 设计文档和 `meta/worktree.json` |
85
85
  | 5–6 | plan + implementation-detail + test-scenarios → `plans/` |
86
86
  | 7.5 | 仅 `--adversarial` 对抗评审 |
87
- | 8 | 产物完整性必检 → `checklist.md` |
87
+ | 8 | 在临时产物集上运行 `harness_plan_finalize.py finalize`;原子发布、唯一 `phase.end`、render → `checklist.md` |
88
88
 
89
89
  change-name 范围变更 → 提示重命名或记 🟡WARN(→ `reference.md`)
90
90
 
@@ -100,7 +100,7 @@ change-name 范围变更 → 提示重命名或记 🟡WARN(→ `reference.md`
100
100
  |------|------|
101
101
  | 产物路径 | 只写 `.harness/changes/<cn>/`;禁止 superpowers 输入 |
102
102
  | 设计审批包 | 一次 AskUserQuestion 含 worktree(读 `harness.json` `defaultWorktree`) |
103
- | 阶段 8 | spec/plan/detail/scenarios/worktree.json/logs/events 缺一不可 ❌FAIL |
103
+ | 阶段 8 | spec/plan/detail/scenarios/worktree.json 先进入 staging;仅 finalizer 校验成功后发布并写唯一 `phase.end`/log,失败不得手工补终态 |
104
104
  | Plan 结束 | **禁止**询问执行模式;只提示 `/harness-run` |
105
105
  | 知识查询 | 0.5 失败不得假装已读历史 |
106
106
  | 歧义优先检查 | 否定、对比、动作对象或范围存在多种合理解释时,最小取证后先给推荐理解并一次一问;确认前不深挖错误方向 |
@@ -213,6 +213,12 @@ source: harness-plan
213
213
 
214
214
  > **缺任一文件 → ❌FAIL,不得宣称 plan 完成。**
215
215
 
216
+ - [ ] 所有待发布产物先写入 staging,不直接覆盖正式 change 目录
217
+ - [ ] 执行 `harness_plan_finalize.py finalize --change-dir ... --staging-dir ... --change ... --run-id ... --attempt ... --json`
218
+ - [ ] finalizer 返回 `ok=true` 与 `artifactsHash`;重复执行返回 `idempotent=true`
219
+ - [ ] finalizer 失败时正式目录无半发布产物、无成功 `phase.end`、无伪造 execution log
220
+ - [ ] 禁止在 finalizer 之前手工追加成功 `phase.end`
221
+
216
222
  | 文件 | 必须存在 | 检查结果 |
217
223
  |------|:---:|:---:|
218
224
  | `.harness/changes/<change>/spec/<change>-design.md` | ✅ | □ |
@@ -14,8 +14,11 @@ description: harness-plan 的需求提取模板、任务拆分规则、测试场
14
14
  {
15
15
  "requested": true,
16
16
  "created": false,
17
- "path": ".claude/worktrees/<change-name>",
18
- "branch": "worktree/<change-name>",
17
+ "agent": "<active-adapter>",
18
+ "worktreeRoot": "<adapter-worktree-root>",
19
+ "branchPrefix": "<adapter-branch-prefix>",
20
+ "path": "<adapter-worktree-root>/<change-name>",
21
+ "branch": "<adapter-branch-prefix><change-name>",
19
22
  "decisionBy": "user",
20
23
  "decisionAt": "YYYY-MM-DD HH:mm",
21
24
  "ownerSkill": "harness-run"
@@ -38,6 +41,8 @@ description: harness-plan 的需求提取模板、任务拆分规则、测试场
38
41
 
39
42
  ### 决策事件 note 示例
40
43
 
44
+ `path` 与 `branch` 必须来自 `harness_runtime.py adapter`/`meta/runtime.json`,不得复制其他 agent 的历史路径。Codex 的合同固定为 `.codex/worktrees/<change-name>` 与 `codex/<change-name>`。
45
+
41
46
  `用户选择使用 Worktree;决策文件为 meta/worktree.json;requested=true, created=false;创建责任为 harness-run。`
42
47
 
43
48
  ## 参考 — 详细格式
@@ -21,7 +21,7 @@ disallowed-tools:
21
21
  - Bash(curl *)
22
22
  - Bash(codegraph *)
23
23
  ---
24
- <!-- generated by harness_deploy.py; core=43088896a4556b69; overlay=none; agent=claude-code; do not edit -->
24
+ <!-- generated by harness_deploy.py; core=8dd8ce9aa1ac47f5; overlay=none; agent=claude-code; do not edit -->
25
25
  # harness-review — 代码审查
26
26
 
27
27
  ## Purpose
@@ -21,7 +21,7 @@ disallowed-tools:
21
21
  - Bash(curl *)
22
22
  - Bash(codegraph *)
23
23
  ---
24
- <!-- generated by harness_deploy.py; core=43088896a4556b69; overlay=none; agent=claude-code; do not edit -->
24
+ <!-- generated by harness_deploy.py; core=8dd8ce9aa1ac47f5; overlay=none; agent=claude-code; do not edit -->
25
25
  # harness-run — 需求编码
26
26
 
27
27
  ## Purpose
@@ -10,13 +10,14 @@ description: harness-run 的执行检查清单。仅在编码执行时读取。
10
10
 
11
11
  ### 步骤 0.0:Worktree 决策执行 ⚠️
12
12
 
13
+ - [ ] 运行 `harness_runtime.py doctor` 并读取 `meta/runtime.json`;后续使用绝对 executable 与 argv 数组
13
14
  - [ ] 读取 `.harness/changes/<change-name>/meta/worktree.json`(旧路径 `worktree.json` 兼容)
14
15
  - [ ] 如果文件缺失:🟡WARN,按 legacy 逻辑询问用户是否主目录执行或创建 worktree
15
16
  - [ ] `requested=false` → 主目录执行,记录原因
16
17
  - [ ] `requested=true` 且 worktree 存在 → 切换到 worktree 执行
17
18
  - [ ] `requested=true` 且 worktree 不存在 → 必须创建 worktree
18
19
  - [ ] worktree 创建命令必须使用 PowerShell:`git worktree add ...`
19
- - [ ] 创建后验证 `.claude/worktrees/<change-name>/.git` 存在
20
+ - [ ] 创建后验证 `<adapter-worktree-root>/<change-name>/.git` 存在;Codex 必须是 `.codex/worktrees/<change-name>`
20
21
  - [ ] 创建成功后更新 `meta/worktree.json` 的 `created=true/createdAt/createdBy`
21
22
  - [ ] 创建失败 → 停止,或 AskUserQuestion 询问是否改为主目录执行
22
23
  - [ ] 禁止 `requested=true && worktree 不存在` 时直接主目录执行
@@ -219,7 +220,7 @@ description: harness-run 的执行检查清单。仅在编码执行时读取。
219
220
 
220
221
  > 仅在 worktree 中执行时触发此步骤。在主目录执行时跳过(标记 ⏭️主目录跳过)。
221
222
 
222
- - [ ] 确认当前 cwd 在 `.claude/worktrees/<change-name>/`
223
+ - [ ] 确认当前 cwd 在 `<adapter-worktree-root>/<change-name>/` 下,且 branch 使用 adapter 的 prefix
223
224
  - [ ] 生成变更摘要:`git diff --stat` + `git diff --stat --cached`
224
225
  - [ ] 构建 commit message:`wip(<scope>): <change-name> 编码完成 — N任务/M文件变更`
225
226
  - [ ] **⚠️ 强制阻断**:用 AskUserQuestion 展示变更列表 + commit message,等待用户确认
@@ -49,20 +49,22 @@ requested=true + path missing
49
49
 
50
50
  ### PowerShell 命令模板
51
51
 
52
+ 先执行 runtime doctor,并从 `meta/runtime.json` 读取 adapter 的 `path`、`branch` 以及 PowerShell `argvPrefix`;不要依赖裸 `python`/`powershell.exe`,也不要硬编码 Claude 路径。
53
+
52
54
  ```powershell
53
- powershell.exe -NoProfile -Command "git worktree add '.claude/worktrees/<change-name>' -b 'worktree/<change-name>'"
55
+ & <powershell-argv-prefix> -Command "git worktree add -- '<adapter-worktree-path>' -b '<adapter-branch>'"
54
56
  ```
55
57
 
56
58
  如果分支已存在:
57
59
 
58
60
  ```powershell
59
- powershell.exe -NoProfile -Command "git worktree add '.claude/worktrees/<change-name>' 'worktree/<change-name>'"
61
+ & <powershell-argv-prefix> -Command "git worktree add -- '<adapter-worktree-path>' '<adapter-branch>'"
60
62
  ```
61
63
 
62
64
  验证:
63
65
 
64
66
  ```powershell
65
- powershell.exe -NoProfile -Command "Test-Path '.claude/worktrees/<change-name>/.git'"
67
+ & <powershell-argv-prefix> -Command "Test-Path -LiteralPath '<adapter-worktree-path>/.git'"
66
68
  ```
67
69
 
68
70
  ### 状态目录写入
@@ -72,7 +74,7 @@ powershell.exe -NoProfile -Command "Test-Path '.claude/worktrees/<change-name>/.
72
74
  ```json
73
75
  {
74
76
  "projectRoot": ".../udp",
75
- "worktreeRoot": ".../udp/.claude/worktrees/<change-name>",
77
+ "worktreeRoot": ".../udp/<adapter-worktree-root>/<change-name>",
76
78
  "stateDir": ".../udp/.harness/changes/<change-name>"
77
79
  }
78
80
  ```
@@ -20,7 +20,7 @@ disallowed-tools:
20
20
  - Bash(awk *)
21
21
  - Bash(curl *)
22
22
  ---
23
- <!-- generated by harness_deploy.py; core=43088896a4556b69; overlay=none; agent=claude-code; do not edit -->
23
+ <!-- generated by harness_deploy.py; core=8dd8ce9aa1ac47f5; overlay=none; agent=claude-code; do not edit -->
24
24
  # harness-submit — 最终提交(含 worktree 合并)
25
25
 
26
26
  ## Purpose
@@ -19,7 +19,7 @@ disallowed-tools:
19
19
  - Bash(awk *)
20
20
  - Bash(curl *)
21
21
  ---
22
- <!-- generated by harness_deploy.py; core=43088896a4556b69; overlay=none; agent=claude-code; do not edit -->
22
+ <!-- generated by harness_deploy.py; core=8dd8ce9aa1ac47f5; overlay=none; agent=claude-code; do not edit -->
23
23
  # harness-sync — 元数据同步
24
24
 
25
25
  ## Purpose
@@ -22,7 +22,7 @@ disallowed-tools:
22
22
  - Bash(node *)
23
23
  - Bash(codegraph *)
24
24
  ---
25
- <!-- generated by harness_deploy.py; core=43088896a4556b69; overlay=none; agent=claude-code; do not edit -->
25
+ <!-- generated by harness_deploy.py; core=8dd8ce9aa1ac47f5; overlay=none; agent=claude-code; do not edit -->
26
26
  # harness-test — 测试执行
27
27
 
28
28
  ## Purpose