@hunter-harness/workflow-harness 0.2.5 → 0.2.7

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 (270) hide show
  1. package/harness/bundles/general/claude-code/.harness-build.json +1 -1
  2. package/harness/bundles/general/claude-code/contracts/workflow-policy.json +169 -0
  3. package/harness/bundles/general/claude-code/harness-archive/SKILL.md +7 -2
  4. package/harness/bundles/general/claude-code/harness-archive/reference.md +1 -1
  5. package/harness/bundles/general/claude-code/harness-archive/templates/render-summary.mjs +78 -155
  6. package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +4 -2
  7. package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +5 -3
  8. package/harness/bundles/general/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py +109 -7
  9. package/harness/bundles/general/claude-code/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +2 -0
  10. package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +6 -2
  11. package/harness/bundles/general/claude-code/harness-plan/SKILL.md +8 -3
  12. package/harness/bundles/general/claude-code/harness-review/SKILL.md +8 -3
  13. package/harness/bundles/general/claude-code/harness-run/SKILL.md +13 -7
  14. package/harness/bundles/general/claude-code/harness-run/checklist.md +2 -2
  15. package/harness/bundles/general/claude-code/harness-run/reference.md +6 -3
  16. package/harness/bundles/general/claude-code/harness-submit/SKILL.md +11 -6
  17. package/harness/bundles/general/claude-code/harness-sync/SKILL.md +5 -3
  18. package/harness/bundles/general/claude-code/harness-test/SKILL.md +12 -3
  19. package/harness/bundles/general/claude-code/harness-test/reference.md +1 -1
  20. package/harness/bundles/general/claude-code/protocols/ledger-protocol.md +1 -1
  21. package/harness/bundles/general/claude-code/protocols/report-pipeline-protocol.md +11 -4
  22. package/harness/bundles/general/claude-code/scripts/harness_apidoc.py +53 -0
  23. package/harness/bundles/general/claude-code/scripts/harness_archive.py +231 -48
  24. package/harness/bundles/general/claude-code/scripts/harness_change.py +854 -0
  25. package/harness/bundles/general/claude-code/scripts/harness_events.py +134 -40
  26. package/harness/bundles/general/claude-code/scripts/harness_gate.py +1038 -0
  27. package/harness/bundles/general/claude-code/scripts/harness_preflight.py +46 -3
  28. package/harness/bundles/general/claude-code/scripts/harness_profile.py +2 -2
  29. package/harness/bundles/general/claude-code/scripts/harness_service.py +34 -1
  30. package/harness/bundles/general/claude-code/scripts/harness_state.py +148 -0
  31. package/harness/bundles/general/claude-code/scripts/harness_test_guard.py +210 -14
  32. package/harness/bundles/general/claude-code/scripts/harness_workflow_policy.py +160 -0
  33. package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
  34. package/harness/bundles/general/codebuddy/contracts/workflow-policy.json +169 -0
  35. package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +7 -2
  36. package/harness/bundles/general/codebuddy/harness-archive/reference.md +1 -1
  37. package/harness/bundles/general/codebuddy/harness-archive/templates/render-summary.mjs +78 -155
  38. package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +4 -2
  39. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +5 -3
  40. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge.py +109 -7
  41. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +2 -0
  42. package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +6 -2
  43. package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +8 -3
  44. package/harness/bundles/general/codebuddy/harness-review/SKILL.md +8 -3
  45. package/harness/bundles/general/codebuddy/harness-run/SKILL.md +13 -7
  46. package/harness/bundles/general/codebuddy/harness-run/checklist.md +2 -2
  47. package/harness/bundles/general/codebuddy/harness-run/reference.md +6 -3
  48. package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +11 -6
  49. package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +5 -3
  50. package/harness/bundles/general/codebuddy/harness-test/SKILL.md +12 -3
  51. package/harness/bundles/general/codebuddy/harness-test/reference.md +1 -1
  52. package/harness/bundles/general/codebuddy/protocols/ledger-protocol.md +1 -1
  53. package/harness/bundles/general/codebuddy/protocols/report-pipeline-protocol.md +11 -4
  54. package/harness/bundles/general/codebuddy/scripts/harness_apidoc.py +53 -0
  55. package/harness/bundles/general/codebuddy/scripts/harness_archive.py +231 -48
  56. package/harness/bundles/general/codebuddy/scripts/harness_change.py +854 -0
  57. package/harness/bundles/general/codebuddy/scripts/harness_events.py +134 -40
  58. package/harness/bundles/general/codebuddy/scripts/harness_gate.py +1038 -0
  59. package/harness/bundles/general/codebuddy/scripts/harness_preflight.py +46 -3
  60. package/harness/bundles/general/codebuddy/scripts/harness_profile.py +2 -2
  61. package/harness/bundles/general/codebuddy/scripts/harness_service.py +34 -1
  62. package/harness/bundles/general/codebuddy/scripts/harness_state.py +148 -0
  63. package/harness/bundles/general/codebuddy/scripts/harness_test_guard.py +210 -14
  64. package/harness/bundles/general/codebuddy/scripts/harness_workflow_policy.py +160 -0
  65. package/harness/bundles/general/codex/.harness-build.json +1 -1
  66. package/harness/bundles/general/codex/contracts/workflow-policy.json +169 -0
  67. package/harness/bundles/general/codex/harness-archive/SKILL.md +7 -2
  68. package/harness/bundles/general/codex/harness-archive/reference.md +1 -1
  69. package/harness/bundles/general/codex/harness-archive/templates/render-summary.mjs +78 -155
  70. package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +4 -2
  71. package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +5 -3
  72. package/harness/bundles/general/codex/harness-knowledge-ingest/scripts/harness_knowledge.py +109 -7
  73. package/harness/bundles/general/codex/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +2 -0
  74. package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +6 -2
  75. package/harness/bundles/general/codex/harness-plan/SKILL.md +8 -3
  76. package/harness/bundles/general/codex/harness-review/SKILL.md +7 -2
  77. package/harness/bundles/general/codex/harness-run/SKILL.md +13 -7
  78. package/harness/bundles/general/codex/harness-run/checklist.md +2 -2
  79. package/harness/bundles/general/codex/harness-run/reference.md +6 -3
  80. package/harness/bundles/general/codex/harness-submit/SKILL.md +11 -6
  81. package/harness/bundles/general/codex/harness-sync/SKILL.md +5 -3
  82. package/harness/bundles/general/codex/harness-test/SKILL.md +12 -3
  83. package/harness/bundles/general/codex/harness-test/reference.md +1 -1
  84. package/harness/bundles/general/codex/protocols/ledger-protocol.md +1 -1
  85. package/harness/bundles/general/codex/protocols/report-pipeline-protocol.md +11 -4
  86. package/harness/bundles/general/codex/scripts/harness_apidoc.py +53 -0
  87. package/harness/bundles/general/codex/scripts/harness_archive.py +231 -48
  88. package/harness/bundles/general/codex/scripts/harness_change.py +854 -0
  89. package/harness/bundles/general/codex/scripts/harness_events.py +134 -40
  90. package/harness/bundles/general/codex/scripts/harness_gate.py +1038 -0
  91. package/harness/bundles/general/codex/scripts/harness_preflight.py +46 -3
  92. package/harness/bundles/general/codex/scripts/harness_profile.py +2 -2
  93. package/harness/bundles/general/codex/scripts/harness_service.py +34 -1
  94. package/harness/bundles/general/codex/scripts/harness_state.py +148 -0
  95. package/harness/bundles/general/codex/scripts/harness_test_guard.py +210 -14
  96. package/harness/bundles/general/codex/scripts/harness_workflow_policy.py +160 -0
  97. package/harness/bundles/general/cursor/.harness-build.json +1 -1
  98. package/harness/bundles/general/cursor/contracts/workflow-policy.json +169 -0
  99. package/harness/bundles/general/cursor/harness-archive/SKILL.md +7 -2
  100. package/harness/bundles/general/cursor/harness-archive/reference.md +1 -1
  101. package/harness/bundles/general/cursor/harness-archive/templates/render-summary.mjs +78 -155
  102. package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +4 -2
  103. package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +5 -3
  104. package/harness/bundles/general/cursor/harness-knowledge-ingest/scripts/harness_knowledge.py +109 -7
  105. package/harness/bundles/general/cursor/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +2 -0
  106. package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +6 -2
  107. package/harness/bundles/general/cursor/harness-plan/SKILL.md +8 -3
  108. package/harness/bundles/general/cursor/harness-review/SKILL.md +7 -2
  109. package/harness/bundles/general/cursor/harness-run/SKILL.md +13 -7
  110. package/harness/bundles/general/cursor/harness-run/checklist.md +2 -2
  111. package/harness/bundles/general/cursor/harness-run/reference.md +6 -3
  112. package/harness/bundles/general/cursor/harness-submit/SKILL.md +11 -6
  113. package/harness/bundles/general/cursor/harness-sync/SKILL.md +5 -3
  114. package/harness/bundles/general/cursor/harness-test/SKILL.md +12 -3
  115. package/harness/bundles/general/cursor/harness-test/reference.md +1 -1
  116. package/harness/bundles/general/cursor/protocols/ledger-protocol.md +1 -1
  117. package/harness/bundles/general/cursor/protocols/report-pipeline-protocol.md +11 -4
  118. package/harness/bundles/general/cursor/scripts/harness_apidoc.py +53 -0
  119. package/harness/bundles/general/cursor/scripts/harness_archive.py +231 -48
  120. package/harness/bundles/general/cursor/scripts/harness_change.py +854 -0
  121. package/harness/bundles/general/cursor/scripts/harness_events.py +134 -40
  122. package/harness/bundles/general/cursor/scripts/harness_gate.py +1038 -0
  123. package/harness/bundles/general/cursor/scripts/harness_preflight.py +46 -3
  124. package/harness/bundles/general/cursor/scripts/harness_profile.py +2 -2
  125. package/harness/bundles/general/cursor/scripts/harness_service.py +34 -1
  126. package/harness/bundles/general/cursor/scripts/harness_state.py +148 -0
  127. package/harness/bundles/general/cursor/scripts/harness_test_guard.py +210 -14
  128. package/harness/bundles/general/cursor/scripts/harness_workflow_policy.py +160 -0
  129. package/harness/bundles/java/claude-code/.harness-build.json +1 -1
  130. package/harness/bundles/java/claude-code/contracts/workflow-policy.json +169 -0
  131. package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +11 -2
  132. package/harness/bundles/java/claude-code/harness-archive/SKILL.md +7 -2
  133. package/harness/bundles/java/claude-code/harness-archive/reference.md +1 -1
  134. package/harness/bundles/java/claude-code/harness-archive/templates/render-summary.mjs +78 -155
  135. package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +4 -2
  136. package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +5 -3
  137. package/harness/bundles/java/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py +109 -7
  138. package/harness/bundles/java/claude-code/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +2 -0
  139. package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +6 -2
  140. package/harness/bundles/java/claude-code/harness-package/SKILL.md +10 -4
  141. package/harness/bundles/java/claude-code/harness-plan/SKILL.md +8 -3
  142. package/harness/bundles/java/claude-code/harness-review/SKILL.md +8 -3
  143. package/harness/bundles/java/claude-code/harness-run/SKILL.md +13 -7
  144. package/harness/bundles/java/claude-code/harness-run/reference.md +1 -1
  145. package/harness/bundles/java/claude-code/harness-submit/SKILL.md +11 -6
  146. package/harness/bundles/java/claude-code/harness-sync/SKILL.md +5 -3
  147. package/harness/bundles/java/claude-code/harness-test/SKILL.md +12 -3
  148. package/harness/bundles/java/claude-code/harness-test/reference.md +1 -1
  149. package/harness/bundles/java/claude-code/protocols/ledger-protocol.md +1 -1
  150. package/harness/bundles/java/claude-code/protocols/report-pipeline-protocol.md +11 -4
  151. package/harness/bundles/java/claude-code/scripts/harness_apidoc.py +53 -0
  152. package/harness/bundles/java/claude-code/scripts/harness_archive.py +231 -48
  153. package/harness/bundles/java/claude-code/scripts/harness_change.py +854 -0
  154. package/harness/bundles/java/claude-code/scripts/harness_events.py +134 -40
  155. package/harness/bundles/java/claude-code/scripts/harness_gate.py +1038 -0
  156. package/harness/bundles/java/claude-code/scripts/harness_preflight.py +46 -3
  157. package/harness/bundles/java/claude-code/scripts/harness_profile.py +2 -2
  158. package/harness/bundles/java/claude-code/scripts/harness_service.py +34 -1
  159. package/harness/bundles/java/claude-code/scripts/harness_state.py +148 -0
  160. package/harness/bundles/java/claude-code/scripts/harness_test_guard.py +210 -14
  161. package/harness/bundles/java/claude-code/scripts/harness_workflow_policy.py +160 -0
  162. package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
  163. package/harness/bundles/java/codebuddy/contracts/workflow-policy.json +169 -0
  164. package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +11 -2
  165. package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +7 -2
  166. package/harness/bundles/java/codebuddy/harness-archive/reference.md +1 -1
  167. package/harness/bundles/java/codebuddy/harness-archive/templates/render-summary.mjs +78 -155
  168. package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +4 -2
  169. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +5 -3
  170. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge.py +109 -7
  171. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +2 -0
  172. package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +6 -2
  173. package/harness/bundles/java/codebuddy/harness-package/SKILL.md +10 -4
  174. package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +8 -3
  175. package/harness/bundles/java/codebuddy/harness-review/SKILL.md +8 -3
  176. package/harness/bundles/java/codebuddy/harness-run/SKILL.md +13 -7
  177. package/harness/bundles/java/codebuddy/harness-run/reference.md +1 -1
  178. package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +11 -6
  179. package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +5 -3
  180. package/harness/bundles/java/codebuddy/harness-test/SKILL.md +12 -3
  181. package/harness/bundles/java/codebuddy/harness-test/reference.md +1 -1
  182. package/harness/bundles/java/codebuddy/protocols/ledger-protocol.md +1 -1
  183. package/harness/bundles/java/codebuddy/protocols/report-pipeline-protocol.md +11 -4
  184. package/harness/bundles/java/codebuddy/scripts/harness_apidoc.py +53 -0
  185. package/harness/bundles/java/codebuddy/scripts/harness_archive.py +231 -48
  186. package/harness/bundles/java/codebuddy/scripts/harness_change.py +854 -0
  187. package/harness/bundles/java/codebuddy/scripts/harness_events.py +134 -40
  188. package/harness/bundles/java/codebuddy/scripts/harness_gate.py +1038 -0
  189. package/harness/bundles/java/codebuddy/scripts/harness_preflight.py +46 -3
  190. package/harness/bundles/java/codebuddy/scripts/harness_profile.py +2 -2
  191. package/harness/bundles/java/codebuddy/scripts/harness_service.py +34 -1
  192. package/harness/bundles/java/codebuddy/scripts/harness_state.py +148 -0
  193. package/harness/bundles/java/codebuddy/scripts/harness_test_guard.py +210 -14
  194. package/harness/bundles/java/codebuddy/scripts/harness_workflow_policy.py +160 -0
  195. package/harness/bundles/java/codex/.harness-build.json +1 -1
  196. package/harness/bundles/java/codex/contracts/workflow-policy.json +169 -0
  197. package/harness/bundles/java/codex/harness-apidoc/SKILL.md +11 -2
  198. package/harness/bundles/java/codex/harness-archive/SKILL.md +7 -2
  199. package/harness/bundles/java/codex/harness-archive/reference.md +1 -1
  200. package/harness/bundles/java/codex/harness-archive/templates/render-summary.mjs +78 -155
  201. package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +4 -2
  202. package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +5 -3
  203. package/harness/bundles/java/codex/harness-knowledge-ingest/scripts/harness_knowledge.py +109 -7
  204. package/harness/bundles/java/codex/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +2 -0
  205. package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +6 -2
  206. package/harness/bundles/java/codex/harness-package/SKILL.md +10 -4
  207. package/harness/bundles/java/codex/harness-plan/SKILL.md +8 -3
  208. package/harness/bundles/java/codex/harness-review/SKILL.md +7 -2
  209. package/harness/bundles/java/codex/harness-run/SKILL.md +13 -7
  210. package/harness/bundles/java/codex/harness-run/reference.md +1 -1
  211. package/harness/bundles/java/codex/harness-submit/SKILL.md +11 -6
  212. package/harness/bundles/java/codex/harness-sync/SKILL.md +5 -3
  213. package/harness/bundles/java/codex/harness-test/SKILL.md +12 -3
  214. package/harness/bundles/java/codex/harness-test/reference.md +1 -1
  215. package/harness/bundles/java/codex/protocols/ledger-protocol.md +1 -1
  216. package/harness/bundles/java/codex/protocols/report-pipeline-protocol.md +11 -4
  217. package/harness/bundles/java/codex/scripts/harness_apidoc.py +53 -0
  218. package/harness/bundles/java/codex/scripts/harness_archive.py +231 -48
  219. package/harness/bundles/java/codex/scripts/harness_change.py +854 -0
  220. package/harness/bundles/java/codex/scripts/harness_events.py +134 -40
  221. package/harness/bundles/java/codex/scripts/harness_gate.py +1038 -0
  222. package/harness/bundles/java/codex/scripts/harness_preflight.py +46 -3
  223. package/harness/bundles/java/codex/scripts/harness_profile.py +2 -2
  224. package/harness/bundles/java/codex/scripts/harness_service.py +34 -1
  225. package/harness/bundles/java/codex/scripts/harness_state.py +148 -0
  226. package/harness/bundles/java/codex/scripts/harness_test_guard.py +210 -14
  227. package/harness/bundles/java/codex/scripts/harness_workflow_policy.py +160 -0
  228. package/harness/bundles/java/cursor/.harness-build.json +1 -1
  229. package/harness/bundles/java/cursor/contracts/workflow-policy.json +169 -0
  230. package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +11 -2
  231. package/harness/bundles/java/cursor/harness-archive/SKILL.md +7 -2
  232. package/harness/bundles/java/cursor/harness-archive/reference.md +1 -1
  233. package/harness/bundles/java/cursor/harness-archive/templates/render-summary.mjs +78 -155
  234. package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +4 -2
  235. package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +5 -3
  236. package/harness/bundles/java/cursor/harness-knowledge-ingest/scripts/harness_knowledge.py +109 -7
  237. package/harness/bundles/java/cursor/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +2 -0
  238. package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +6 -2
  239. package/harness/bundles/java/cursor/harness-package/SKILL.md +10 -4
  240. package/harness/bundles/java/cursor/harness-plan/SKILL.md +8 -3
  241. package/harness/bundles/java/cursor/harness-review/SKILL.md +7 -2
  242. package/harness/bundles/java/cursor/harness-run/SKILL.md +13 -7
  243. package/harness/bundles/java/cursor/harness-run/reference.md +1 -1
  244. package/harness/bundles/java/cursor/harness-submit/SKILL.md +11 -6
  245. package/harness/bundles/java/cursor/harness-sync/SKILL.md +5 -3
  246. package/harness/bundles/java/cursor/harness-test/SKILL.md +12 -3
  247. package/harness/bundles/java/cursor/harness-test/reference.md +1 -1
  248. package/harness/bundles/java/cursor/protocols/ledger-protocol.md +1 -1
  249. package/harness/bundles/java/cursor/protocols/report-pipeline-protocol.md +11 -4
  250. package/harness/bundles/java/cursor/scripts/harness_apidoc.py +53 -0
  251. package/harness/bundles/java/cursor/scripts/harness_archive.py +231 -48
  252. package/harness/bundles/java/cursor/scripts/harness_change.py +854 -0
  253. package/harness/bundles/java/cursor/scripts/harness_events.py +134 -40
  254. package/harness/bundles/java/cursor/scripts/harness_gate.py +1038 -0
  255. package/harness/bundles/java/cursor/scripts/harness_preflight.py +46 -3
  256. package/harness/bundles/java/cursor/scripts/harness_profile.py +2 -2
  257. package/harness/bundles/java/cursor/scripts/harness_service.py +34 -1
  258. package/harness/bundles/java/cursor/scripts/harness_state.py +148 -0
  259. package/harness/bundles/java/cursor/scripts/harness_test_guard.py +210 -14
  260. package/harness/bundles/java/cursor/scripts/harness_workflow_policy.py +160 -0
  261. package/harness/manifests/general/claude-code.json +48 -28
  262. package/harness/manifests/general/codebuddy.json +48 -28
  263. package/harness/manifests/general/codex.json +48 -28
  264. package/harness/manifests/general/cursor.json +48 -28
  265. package/harness/manifests/java/claude-code.json +49 -29
  266. package/harness/manifests/java/codebuddy.json +49 -29
  267. package/harness/manifests/java/codex.json +49 -29
  268. package/harness/manifests/java/cursor.json +49 -29
  269. package/hunter-workflow-family.json +2 -2
  270. package/package.json +1 -1
@@ -0,0 +1,160 @@
1
+ #!/usr/bin/env python3
2
+ """Strict loader for harness/contracts/workflow-policy.json.
3
+
4
+ Unknown fields at any depth fail validation. Python 3.10+, stdlib only.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import json
10
+ from pathlib import Path
11
+ from typing import Any
12
+
13
+ POLICY_REL = Path("harness") / "contracts" / "workflow-policy.json"
14
+
15
+ TOP_LEVEL_KEYS = frozenset(
16
+ {
17
+ "schemaVersion",
18
+ "riskTiers",
19
+ "skills",
20
+ "requiredArtifacts",
21
+ "requiredValidations",
22
+ "conditionalStages",
23
+ "interactionWhitelist",
24
+ "checkpointRules",
25
+ }
26
+ )
27
+
28
+ RISK_TIER_KEYS = frozenset(
29
+ {
30
+ "description",
31
+ "defaultPhases",
32
+ "requiredValidations",
33
+ "conditionalStages",
34
+ "upgradeTriggers",
35
+ }
36
+ )
37
+
38
+ SKILL_KEYS = frozenset(
39
+ {
40
+ "phase",
41
+ "inputs",
42
+ "artifacts",
43
+ "events",
44
+ "allowedInteractions",
45
+ "capabilities",
46
+ "profiles",
47
+ }
48
+ )
49
+
50
+ CONDITIONAL_STAGE_KEYS = frozenset({"tiers", "signals"})
51
+ CHECKPOINT_RULE_KEYS = frozenset(
52
+ {
53
+ "afterTasks",
54
+ "beforeTasks",
55
+ "blocking",
56
+ "requiredReport",
57
+ "reviewerTool",
58
+ }
59
+ )
60
+
61
+
62
+ class PolicyValidationError(ValueError):
63
+ """Raised when workflow-policy.json contains unknown or invalid fields."""
64
+
65
+
66
+ def _reject_unknown(data: dict[str, Any], allowed: frozenset[str], path: str) -> None:
67
+ unknown = sorted(set(data) - allowed)
68
+ if unknown:
69
+ raise PolicyValidationError(
70
+ f"unknown field(s) at {path}: {', '.join(unknown)}"
71
+ )
72
+
73
+
74
+ def _require_type(value: Any, expected: type | tuple[type, ...], path: str) -> None:
75
+ if not isinstance(value, expected):
76
+ names = (
77
+ expected.__name__
78
+ if isinstance(expected, type)
79
+ else "|".join(t.__name__ for t in expected)
80
+ )
81
+ raise PolicyValidationError(f"{path} must be {names}, got {type(value).__name__}")
82
+
83
+
84
+ def validate_policy(data: Any) -> dict[str, Any]:
85
+ if not isinstance(data, dict):
86
+ raise PolicyValidationError("workflow policy root must be an object")
87
+ _reject_unknown(data, TOP_LEVEL_KEYS, "root")
88
+ _require_type(data.get("schemaVersion"), int, "schemaVersion")
89
+ if data["schemaVersion"] != 1:
90
+ raise PolicyValidationError("unsupported schemaVersion")
91
+
92
+ risk_tiers = data["riskTiers"]
93
+ _require_type(risk_tiers, dict, "riskTiers")
94
+ for tier_name, tier in risk_tiers.items():
95
+ path = f"riskTiers.{tier_name}"
96
+ _require_type(tier, dict, path)
97
+ _reject_unknown(tier, RISK_TIER_KEYS, path)
98
+ _require_type(tier["description"], str, f"{path}.description")
99
+ _require_type(tier["defaultPhases"], list, f"{path}.defaultPhases")
100
+ _require_type(tier["requiredValidations"], list, f"{path}.requiredValidations")
101
+ _require_type(tier["conditionalStages"], list, f"{path}.conditionalStages")
102
+ _require_type(tier["upgradeTriggers"], list, f"{path}.upgradeTriggers")
103
+
104
+ skills = data["skills"]
105
+ _require_type(skills, dict, "skills")
106
+ for skill_name, skill in skills.items():
107
+ path = f"skills.{skill_name}"
108
+ _require_type(skill, dict, path)
109
+ _reject_unknown(skill, SKILL_KEYS, path)
110
+ _require_type(skill["phase"], str, f"{path}.phase")
111
+ for key in ("inputs", "artifacts", "events", "allowedInteractions", "capabilities"):
112
+ _require_type(skill[key], list, f"{path}.{key}")
113
+ profiles = skill.get("profiles", ["general", "java"])
114
+ _require_type(profiles, list, f"{path}.profiles")
115
+ if not profiles or any(item not in {"general", "java"} for item in profiles):
116
+ raise PolicyValidationError(f"{path}.profiles must contain general and/or java")
117
+
118
+ for section in ("requiredArtifacts", "requiredValidations"):
119
+ section_data = data[section]
120
+ _require_type(section_data, dict, section)
121
+ for phase, items in section_data.items():
122
+ _require_type(items, list, f"{section}.{phase}")
123
+
124
+ conditional = data["conditionalStages"]
125
+ _require_type(conditional, dict, "conditionalStages")
126
+ for stage_name, stage in conditional.items():
127
+ path = f"conditionalStages.{stage_name}"
128
+ _require_type(stage, dict, path)
129
+ _reject_unknown(stage, CONDITIONAL_STAGE_KEYS, path)
130
+ _require_type(stage["tiers"], list, f"{path}.tiers")
131
+ _require_type(stage["signals"], list, f"{path}.signals")
132
+
133
+ interaction = data["interactionWhitelist"]
134
+ _require_type(interaction, dict, "interactionWhitelist")
135
+ for key, items in interaction.items():
136
+ _require_type(items, list, f"interactionWhitelist.{key}")
137
+
138
+ checkpoints = data["checkpointRules"]
139
+ _require_type(checkpoints, dict, "checkpointRules")
140
+ for checkpoint_id, rule in checkpoints.items():
141
+ path = f"checkpointRules.{checkpoint_id}"
142
+ _require_type(rule, dict, path)
143
+ _reject_unknown(rule, CHECKPOINT_RULE_KEYS, path)
144
+ _require_type(rule["afterTasks"], list, f"{path}.afterTasks")
145
+ _require_type(rule["beforeTasks"], list, f"{path}.beforeTasks")
146
+ _require_type(rule["blocking"], bool, f"{path}.blocking")
147
+
148
+ return data
149
+
150
+
151
+ def policy_path_for_repo(repo_root: Path) -> Path:
152
+ return repo_root / POLICY_REL
153
+
154
+
155
+ def load_policy(repo_root: Path) -> dict[str, Any]:
156
+ path = policy_path_for_repo(repo_root)
157
+ if not path.is_file():
158
+ raise FileNotFoundError(f"workflow policy missing: {path}")
159
+ data = json.loads(path.read_text(encoding="utf-8-sig"))
160
+ return validate_policy(data)
@@ -2,12 +2,12 @@
2
2
  "schema_version": 2,
3
3
  "profile": "general",
4
4
  "adapter": "claude-code",
5
- "bundle_version": "0.2.5",
5
+ "bundle_version": "0.2.7",
6
6
  "generator": "harness_deploy.py",
7
7
  "files": [
8
8
  {
9
9
  "path": ".harness-build.json",
10
- "sha256": "71e04fb13b0cb8d4db07617e87c7209f4c3effcd1782fd7a4fdd7e457069d1ca"
10
+ "sha256": "62f9de42abd5f5bfb76387cb20376045bd4be7e9fec84fb46126a56fd54a283b"
11
11
  },
12
12
  {
13
13
  "path": "agents/harness-evaluator.md",
@@ -25,13 +25,17 @@
25
25
  "path": "CONTEXT.md",
26
26
  "sha256": "19c75b493f6f760d0e607a88bd355acdd232fcb66660887ef94d10425f39507b"
27
27
  },
28
+ {
29
+ "path": "contracts/workflow-policy.json",
30
+ "sha256": "36614a228338a7e8f2b518351c129607245e3910a67062a5047acdcd42e86853"
31
+ },
28
32
  {
29
33
  "path": "harness-archive/checklist.md",
30
34
  "sha256": "0329561202acf39646f08c861a2859ffe68164df05b95526af86c5b1842d2009"
31
35
  },
32
36
  {
33
37
  "path": "harness-archive/reference.md",
34
- "sha256": "bae9ffb1e502fe842e57dcd6030ceb426fc95f3457054037de9133711f104da2"
38
+ "sha256": "144437331e65a94c2898bf05832edbf85735a1762cf804dd2ec2e5ade157fe49"
35
39
  },
36
40
  {
37
41
  "path": "harness-archive/scripts/gen-manifest.ps1",
@@ -39,11 +43,11 @@
39
43
  },
40
44
  {
41
45
  "path": "harness-archive/SKILL.md",
42
- "sha256": "827e9c212e0ae518302816a1987757330cd1b4878f8cff1cfbd2275da803c10d"
46
+ "sha256": "aafc3b5b11020aa722f6a069b63fc53c6566fb98ffa3c50681712ee832ed3c6c"
43
47
  },
44
48
  {
45
49
  "path": "harness-archive/templates/render-summary.mjs",
46
- "sha256": "6fab9fab77dae08f6e111342a5245e8efbf1faa683db1d379e480076618d22af"
50
+ "sha256": "fbfde9bdf16dba8aff1ef638e582a517064e81ea4681ed4831ff2e7c55f5ab9c"
47
51
  },
48
52
  {
49
53
  "path": "harness-archive/templates/summary-data-template.json",
@@ -59,7 +63,7 @@
59
63
  },
60
64
  {
61
65
  "path": "harness-codebase-map/SKILL.md",
62
- "sha256": "0cc5ab78b7d73ddc9e71423788c5148c90dcf3cc1ea36e790e058bb4285d09a1"
66
+ "sha256": "c1ed96332c181b5a2290b9be46d06b9cdef9d56ad166c6398392a57e447939af"
63
67
  },
64
68
  {
65
69
  "path": "harness-codebase-map/templates/ARCHITECTURE.md",
@@ -115,19 +119,19 @@
115
119
  },
116
120
  {
117
121
  "path": "harness-knowledge-ingest/scripts/harness_knowledge_mcp.py",
118
- "sha256": "5a6efd08a4a8f46f92d715051904bf118b4159d76199c318d8accb0122a2e20f"
122
+ "sha256": "a421ca43e8d1ef1718d51a398e20abae411ea0007b3d45aa333791c511a2aa33"
119
123
  },
120
124
  {
121
125
  "path": "harness-knowledge-ingest/scripts/harness_knowledge.py",
122
- "sha256": "6ec4851ed5fd99975b9dc192e826d0b20c24df638da4f428773476d29f7db7de"
126
+ "sha256": "2764b7985cf2675749bef3e7742f8ed93b4293c3603eef4a78040a97e5b05144"
123
127
  },
124
128
  {
125
129
  "path": "harness-knowledge-ingest/SKILL.md",
126
- "sha256": "cfe85e03c9376d90c7dac244f3bb1b90a0fd0691d94f24151b3e2250e0062f26"
130
+ "sha256": "5bc4b25a863c3d40af2b4213d087f93a309c877c844ab475fb288a351a3673b3"
127
131
  },
128
132
  {
129
133
  "path": "harness-knowledge-query/SKILL.md",
130
- "sha256": "dcce1d851ad2a6c9a261f53b078193080ee373f41757f4b45bdaf60c21f6759e"
134
+ "sha256": "8237f93b7e961e21823e562f4a116a63b0d95f9e7c311d3176fe1a77248e6239"
131
135
  },
132
136
  {
133
137
  "path": "harness-plan/checklist.md",
@@ -143,7 +147,7 @@
143
147
  },
144
148
  {
145
149
  "path": "harness-plan/SKILL.md",
146
- "sha256": "43fcc5be953de9835a66a54d759a5756579388bd4bc3ac402861e103ed058a6b"
150
+ "sha256": "0d8fbc2c59b0d0f1343f978848c0d4f1e93e10147d704f891d298b155ccef697"
147
151
  },
148
152
  {
149
153
  "path": "harness-review/checklist.md",
@@ -159,11 +163,11 @@
159
163
  },
160
164
  {
161
165
  "path": "harness-review/SKILL.md",
162
- "sha256": "e1994473cebf329c0179728e7bf9a3ebe3d1905a47e0df63f90d407f1e115abd"
166
+ "sha256": "85d5c71739c9b46423db5f0e8222ac72c6831afaec7ffa4db6819a30e8efc4bf"
163
167
  },
164
168
  {
165
169
  "path": "harness-run/checklist.md",
166
- "sha256": "350b352f2a85053449cf63a249780d30efd3be28718e912201388cbd0b4480a5"
170
+ "sha256": "1bbfdf3d2a5ac7daa7155bfe0ac39c92e3527edf1b66bdf1ece232d63bd31dc3"
167
171
  },
168
172
  {
169
173
  "path": "harness-run/protocols.md",
@@ -171,11 +175,11 @@
171
175
  },
172
176
  {
173
177
  "path": "harness-run/reference.md",
174
- "sha256": "dccaafad9a761284a13e2d909e2a79994698a506caa76148798647ed554d85da"
178
+ "sha256": "011a7f75e49392df9c7cde0d7126ac9b6772f779b22807e3b09b49f32622e447"
175
179
  },
176
180
  {
177
181
  "path": "harness-run/SKILL.md",
178
- "sha256": "6760cab591f9a2bd9b096c2a2ce6fcde3fcfb2d88e7f58d946de333a7b954b84"
182
+ "sha256": "c0db9a68f55106b8696d0b00e142a8119e077cafce18dd4e0e19303567068c34"
179
183
  },
180
184
  {
181
185
  "path": "harness-submit/checklist.md",
@@ -187,7 +191,7 @@
187
191
  },
188
192
  {
189
193
  "path": "harness-submit/SKILL.md",
190
- "sha256": "c53afc1bb8ddb9c0e2ebb50e7f69907bc352fd3a363aaf843fe9d33d20c95be3"
194
+ "sha256": "48ef9c28d527dc3b9b06e3fe228368076b8394e6489bd0280f09b1d8805df56e"
191
195
  },
192
196
  {
193
197
  "path": "harness-sync/reference.md",
@@ -195,7 +199,7 @@
195
199
  },
196
200
  {
197
201
  "path": "harness-sync/SKILL.md",
198
- "sha256": "5e6b0aa3964fa25abc3e41b4a37c26dfa2151a507189cbd572ee18bf9641fe0b"
202
+ "sha256": "0764a8f16714fcd95bf8326b432521b0b46ba7dc2316543ebde46971fe011768"
199
203
  },
200
204
  {
201
205
  "path": "harness-test/checklist.md",
@@ -207,7 +211,7 @@
207
211
  },
208
212
  {
209
213
  "path": "harness-test/reference.md",
210
- "sha256": "5a9ed764ea1f600c67456f42ecaea88147297796270137ea67afd09177801bc4"
214
+ "sha256": "b85b30256558a40113f0c2442d32aa9f28606cc975c32c72b7eedb0e655ea275"
211
215
  },
212
216
  {
213
217
  "path": "harness-test/scripts/runtime-helpers.mjs",
@@ -215,7 +219,7 @@
215
219
  },
216
220
  {
217
221
  "path": "harness-test/SKILL.md",
218
- "sha256": "be0aa762acafea69303adc55b5b1ed154821c951a1ad6c4eaea090b05ebcb17b"
222
+ "sha256": "50cb626636fb40b1fe0038dbfb6deb988109970963257e0804b4a1dc68d20e69"
219
223
  },
220
224
  {
221
225
  "path": "protocols/archive-report-protocol.md",
@@ -227,7 +231,7 @@
227
231
  },
228
232
  {
229
233
  "path": "protocols/ledger-protocol.md",
230
- "sha256": "2621749f0a1193015b185e3ebd5bd66e738db25fa091e4e27b3eaae06c950736"
234
+ "sha256": "6d47d884bc3858bf50c831ecb4c2db263680b41f6dcf2bc3f9b2100330ce9cac"
231
235
  },
232
236
  {
233
237
  "path": "protocols/powershell-protocol.md",
@@ -235,7 +239,7 @@
235
239
  },
236
240
  {
237
241
  "path": "protocols/report-pipeline-protocol.md",
238
- "sha256": "988a311db58b8ce88544d28919cf7858fe1fa225af70fb604ae715805ac76d9e"
242
+ "sha256": "2abfa402c006e2466514893e05d57ba7f71588f5af6b36b30a17abd3dfa8d710"
239
243
  },
240
244
  {
241
245
  "path": "protocols/sensitive-info-protocol.md",
@@ -253,9 +257,17 @@
253
257
  "path": "README.md",
254
258
  "sha256": "57ae38357a7bf4118f91c4404b8133a81aced923c836c498b04ff18461eae665"
255
259
  },
260
+ {
261
+ "path": "scripts/harness_apidoc.py",
262
+ "sha256": "3fa77ffabf99075a90374d9a4b2ddca3408cc5b90610725d779d9d0dfb70fbbb"
263
+ },
256
264
  {
257
265
  "path": "scripts/harness_archive.py",
258
- "sha256": "ada5f736cd692eab1531288fecdf57ce36ff760b55dd470c4e0553a2c73608c4"
266
+ "sha256": "b48bea12431e4122bae5b3f776b518fe4b48b873ba85b1c4e09a29f15a046ad2"
267
+ },
268
+ {
269
+ "path": "scripts/harness_change.py",
270
+ "sha256": "50672476e1a66e046e0b16c86cf55b03e117fc2adf8e0df2ced14aa04f7b2548"
259
271
  },
260
272
  {
261
273
  "path": "scripts/harness_check_gate.py",
@@ -267,7 +279,11 @@
267
279
  },
268
280
  {
269
281
  "path": "scripts/harness_events.py",
270
- "sha256": "62d4119dcc51f571d41ac78e9fdb1708df007cc361c65eefd71f35ad1e9de15f"
282
+ "sha256": "dbfb0ba77ebf4a11410449bbf437be93f0f80184d1aa8b1b128f3054635d107e"
283
+ },
284
+ {
285
+ "path": "scripts/harness_gate.py",
286
+ "sha256": "fdc596d51116e6fce58baad24673c94fc04b78b4af8781ee8afd7b2cdb3121eb"
271
287
  },
272
288
  {
273
289
  "path": "scripts/harness_ledger.py",
@@ -275,23 +291,27 @@
275
291
  },
276
292
  {
277
293
  "path": "scripts/harness_preflight.py",
278
- "sha256": "7ef079a96f0e76b7fd54eb06cdab915b0dd7f0e59d368494a72faf508d40ba2f"
294
+ "sha256": "245f70d6c1f9979f2921e14e5d7a6078bd5126ae6c5d8c0bcd6cfd9c4fd8e135"
279
295
  },
280
296
  {
281
297
  "path": "scripts/harness_profile.py",
282
- "sha256": "718e2f3a9e754850935e37c803bc16addb855061371b3351ec22fdc4b376c339"
298
+ "sha256": "da31a79b128e4c186f17424ec2ad6feb7fb0aaec46fb79fba0c31098596751b4"
283
299
  },
284
300
  {
285
301
  "path": "scripts/harness_service.py",
286
- "sha256": "fc471f90efcf03e26fcb6cd7757af37a0a1eea1184e2b57046665547a77f240f"
302
+ "sha256": "17c26b40ed3e7d110b74ef61e627fa0ad1bc84718a1721a066e6d72ee0e37649"
287
303
  },
288
304
  {
289
305
  "path": "scripts/harness_state.py",
290
- "sha256": "b33efacf9aba471f9f542f738c653acf274ed3ce57c4326520036e6df0f18966"
306
+ "sha256": "27073a1d7b1ea6d54a75bf6e679eb250a3507c95311101b60a1c4d32e00f909e"
291
307
  },
292
308
  {
293
309
  "path": "scripts/harness_test_guard.py",
294
- "sha256": "a6ad6f3619babb9ffc2bab16b3184ec916cc34f52b977dc4a5446e3e76fc894e"
310
+ "sha256": "ee3306a56a9ee7adf37ad4bcd26505c6d2c21fcdcb35b88cf5951c05a8f3b615"
311
+ },
312
+ {
313
+ "path": "scripts/harness_workflow_policy.py",
314
+ "sha256": "3e754da7041ebec852c3f0be8736cec423d7a0ee98424164bfe4a06fc4d8ca4f"
295
315
  }
296
316
  ]
297
317
  }
@@ -2,12 +2,12 @@
2
2
  "schema_version": 2,
3
3
  "profile": "general",
4
4
  "adapter": "codebuddy",
5
- "bundle_version": "0.2.5",
5
+ "bundle_version": "0.2.7",
6
6
  "generator": "harness_deploy.py",
7
7
  "files": [
8
8
  {
9
9
  "path": ".harness-build.json",
10
- "sha256": "bb798db90319798e513f4dfe6a8ec84b2d9091cf670112a70c647330942da818"
10
+ "sha256": "82e7ca91e1de4f7a268812a4d44ea58a5a9f58204f64258fca9f705e377a94b3"
11
11
  },
12
12
  {
13
13
  "path": "agents/harness-evaluator.md",
@@ -25,13 +25,17 @@
25
25
  "path": "CONTEXT.md",
26
26
  "sha256": "19c75b493f6f760d0e607a88bd355acdd232fcb66660887ef94d10425f39507b"
27
27
  },
28
+ {
29
+ "path": "contracts/workflow-policy.json",
30
+ "sha256": "36614a228338a7e8f2b518351c129607245e3910a67062a5047acdcd42e86853"
31
+ },
28
32
  {
29
33
  "path": "harness-archive/checklist.md",
30
34
  "sha256": "0329561202acf39646f08c861a2859ffe68164df05b95526af86c5b1842d2009"
31
35
  },
32
36
  {
33
37
  "path": "harness-archive/reference.md",
34
- "sha256": "bae9ffb1e502fe842e57dcd6030ceb426fc95f3457054037de9133711f104da2"
38
+ "sha256": "144437331e65a94c2898bf05832edbf85735a1762cf804dd2ec2e5ade157fe49"
35
39
  },
36
40
  {
37
41
  "path": "harness-archive/scripts/gen-manifest.ps1",
@@ -39,11 +43,11 @@
39
43
  },
40
44
  {
41
45
  "path": "harness-archive/SKILL.md",
42
- "sha256": "432664531252b8ad6d39ff567d42bc66e6e77c83d7a463854594bd3f07ca7149"
46
+ "sha256": "1101ff1566fe775869988347890adc85392eb060c0e87bc3b98e4608ad8883f7"
43
47
  },
44
48
  {
45
49
  "path": "harness-archive/templates/render-summary.mjs",
46
- "sha256": "6fab9fab77dae08f6e111342a5245e8efbf1faa683db1d379e480076618d22af"
50
+ "sha256": "fbfde9bdf16dba8aff1ef638e582a517064e81ea4681ed4831ff2e7c55f5ab9c"
47
51
  },
48
52
  {
49
53
  "path": "harness-archive/templates/summary-data-template.json",
@@ -59,7 +63,7 @@
59
63
  },
60
64
  {
61
65
  "path": "harness-codebase-map/SKILL.md",
62
- "sha256": "bd3c95132d95e3ee63efa8c63a8545d0a5beb920cb3def6f08dabdf2d72dd2cc"
66
+ "sha256": "38080ef3e37c15d09325566087d378f52f37b80ea16a3294a6a263832f2e7cbd"
63
67
  },
64
68
  {
65
69
  "path": "harness-codebase-map/templates/ARCHITECTURE.md",
@@ -115,19 +119,19 @@
115
119
  },
116
120
  {
117
121
  "path": "harness-knowledge-ingest/scripts/harness_knowledge_mcp.py",
118
- "sha256": "5a6efd08a4a8f46f92d715051904bf118b4159d76199c318d8accb0122a2e20f"
122
+ "sha256": "a421ca43e8d1ef1718d51a398e20abae411ea0007b3d45aa333791c511a2aa33"
119
123
  },
120
124
  {
121
125
  "path": "harness-knowledge-ingest/scripts/harness_knowledge.py",
122
- "sha256": "6ec4851ed5fd99975b9dc192e826d0b20c24df638da4f428773476d29f7db7de"
126
+ "sha256": "2764b7985cf2675749bef3e7742f8ed93b4293c3603eef4a78040a97e5b05144"
123
127
  },
124
128
  {
125
129
  "path": "harness-knowledge-ingest/SKILL.md",
126
- "sha256": "c049c460c0ad9d88f6de9d5276d6eda91b9790d9f81eaf06ef1ade799189abd1"
130
+ "sha256": "ea7043e61023abda02ad904d5707b972051cea917329ec04093884471d6f5d00"
127
131
  },
128
132
  {
129
133
  "path": "harness-knowledge-query/SKILL.md",
130
- "sha256": "32b0f72cb02861a9ecbac03180cfe307b60ba8daf5c8bffd14b846397a6ee486"
134
+ "sha256": "4546742d11d478fb18712d032c87793da2a74f4306a74034b1e52be0fa60ffac"
131
135
  },
132
136
  {
133
137
  "path": "harness-plan/checklist.md",
@@ -143,7 +147,7 @@
143
147
  },
144
148
  {
145
149
  "path": "harness-plan/SKILL.md",
146
- "sha256": "4eff8554625ba976bacdc023a18ff0984ef9876bd1fdf7669e1fab2a578adc01"
150
+ "sha256": "d8f43c6e24acce0b71ea58031029cd530351b28b1b1637d4278941ac0b5585a4"
147
151
  },
148
152
  {
149
153
  "path": "harness-review/checklist.md",
@@ -159,11 +163,11 @@
159
163
  },
160
164
  {
161
165
  "path": "harness-review/SKILL.md",
162
- "sha256": "bab6d055e01a7775e1c522b5f89b50d080a153432505a3f9280d0fc1a84599b3"
166
+ "sha256": "9acdec41556bc5872da1982b5044a5de05fb21c59b2a6dd9f96260691b075a26"
163
167
  },
164
168
  {
165
169
  "path": "harness-run/checklist.md",
166
- "sha256": "350b352f2a85053449cf63a249780d30efd3be28718e912201388cbd0b4480a5"
170
+ "sha256": "1bbfdf3d2a5ac7daa7155bfe0ac39c92e3527edf1b66bdf1ece232d63bd31dc3"
167
171
  },
168
172
  {
169
173
  "path": "harness-run/protocols.md",
@@ -171,11 +175,11 @@
171
175
  },
172
176
  {
173
177
  "path": "harness-run/reference.md",
174
- "sha256": "dccaafad9a761284a13e2d909e2a79994698a506caa76148798647ed554d85da"
178
+ "sha256": "011a7f75e49392df9c7cde0d7126ac9b6772f779b22807e3b09b49f32622e447"
175
179
  },
176
180
  {
177
181
  "path": "harness-run/SKILL.md",
178
- "sha256": "976ffe51083b613501e6664801326ad3b932d7d5a6db8fe4c1beeae859065de5"
182
+ "sha256": "5c3aeb6ad0d4e6c7559b5981287f254f8c78049933f1f70b6037e5feeb65cadc"
179
183
  },
180
184
  {
181
185
  "path": "harness-submit/checklist.md",
@@ -187,7 +191,7 @@
187
191
  },
188
192
  {
189
193
  "path": "harness-submit/SKILL.md",
190
- "sha256": "e477d065f442360320c37f80164c229a0cbd216c16218e67f0efeb200632536f"
194
+ "sha256": "424039642d3657c1bf47e4c99a9c0c2a6ee1676e388b7b1a91c73b33fbcfcd8e"
191
195
  },
192
196
  {
193
197
  "path": "harness-sync/reference.md",
@@ -195,7 +199,7 @@
195
199
  },
196
200
  {
197
201
  "path": "harness-sync/SKILL.md",
198
- "sha256": "a1160216070d6efff9e39cb62fd729477bb507e8be75ebd7fda932c9c71f157e"
202
+ "sha256": "10b5fd45695cc931d217280ced77a3e57d0ceeb95031dad41b58658c980b669d"
199
203
  },
200
204
  {
201
205
  "path": "harness-test/checklist.md",
@@ -207,7 +211,7 @@
207
211
  },
208
212
  {
209
213
  "path": "harness-test/reference.md",
210
- "sha256": "5a9ed764ea1f600c67456f42ecaea88147297796270137ea67afd09177801bc4"
214
+ "sha256": "b85b30256558a40113f0c2442d32aa9f28606cc975c32c72b7eedb0e655ea275"
211
215
  },
212
216
  {
213
217
  "path": "harness-test/scripts/runtime-helpers.mjs",
@@ -215,7 +219,7 @@
215
219
  },
216
220
  {
217
221
  "path": "harness-test/SKILL.md",
218
- "sha256": "245012500d436294cdc3d3e2e4aec9ac23c3f13078f58c6d6464ac615b242d7f"
222
+ "sha256": "dd7b93192c99f678b1eb8af15a7ca3c8e5d196545dc99c3759307a1bcb87111b"
219
223
  },
220
224
  {
221
225
  "path": "protocols/archive-report-protocol.md",
@@ -227,7 +231,7 @@
227
231
  },
228
232
  {
229
233
  "path": "protocols/ledger-protocol.md",
230
- "sha256": "2621749f0a1193015b185e3ebd5bd66e738db25fa091e4e27b3eaae06c950736"
234
+ "sha256": "6d47d884bc3858bf50c831ecb4c2db263680b41f6dcf2bc3f9b2100330ce9cac"
231
235
  },
232
236
  {
233
237
  "path": "protocols/powershell-protocol.md",
@@ -235,7 +239,7 @@
235
239
  },
236
240
  {
237
241
  "path": "protocols/report-pipeline-protocol.md",
238
- "sha256": "988a311db58b8ce88544d28919cf7858fe1fa225af70fb604ae715805ac76d9e"
242
+ "sha256": "2abfa402c006e2466514893e05d57ba7f71588f5af6b36b30a17abd3dfa8d710"
239
243
  },
240
244
  {
241
245
  "path": "protocols/sensitive-info-protocol.md",
@@ -253,9 +257,17 @@
253
257
  "path": "README.md",
254
258
  "sha256": "57ae38357a7bf4118f91c4404b8133a81aced923c836c498b04ff18461eae665"
255
259
  },
260
+ {
261
+ "path": "scripts/harness_apidoc.py",
262
+ "sha256": "3fa77ffabf99075a90374d9a4b2ddca3408cc5b90610725d779d9d0dfb70fbbb"
263
+ },
256
264
  {
257
265
  "path": "scripts/harness_archive.py",
258
- "sha256": "ada5f736cd692eab1531288fecdf57ce36ff760b55dd470c4e0553a2c73608c4"
266
+ "sha256": "b48bea12431e4122bae5b3f776b518fe4b48b873ba85b1c4e09a29f15a046ad2"
267
+ },
268
+ {
269
+ "path": "scripts/harness_change.py",
270
+ "sha256": "50672476e1a66e046e0b16c86cf55b03e117fc2adf8e0df2ced14aa04f7b2548"
259
271
  },
260
272
  {
261
273
  "path": "scripts/harness_check_gate.py",
@@ -267,7 +279,11 @@
267
279
  },
268
280
  {
269
281
  "path": "scripts/harness_events.py",
270
- "sha256": "62d4119dcc51f571d41ac78e9fdb1708df007cc361c65eefd71f35ad1e9de15f"
282
+ "sha256": "dbfb0ba77ebf4a11410449bbf437be93f0f80184d1aa8b1b128f3054635d107e"
283
+ },
284
+ {
285
+ "path": "scripts/harness_gate.py",
286
+ "sha256": "fdc596d51116e6fce58baad24673c94fc04b78b4af8781ee8afd7b2cdb3121eb"
271
287
  },
272
288
  {
273
289
  "path": "scripts/harness_ledger.py",
@@ -275,23 +291,27 @@
275
291
  },
276
292
  {
277
293
  "path": "scripts/harness_preflight.py",
278
- "sha256": "7ef079a96f0e76b7fd54eb06cdab915b0dd7f0e59d368494a72faf508d40ba2f"
294
+ "sha256": "245f70d6c1f9979f2921e14e5d7a6078bd5126ae6c5d8c0bcd6cfd9c4fd8e135"
279
295
  },
280
296
  {
281
297
  "path": "scripts/harness_profile.py",
282
- "sha256": "718e2f3a9e754850935e37c803bc16addb855061371b3351ec22fdc4b376c339"
298
+ "sha256": "da31a79b128e4c186f17424ec2ad6feb7fb0aaec46fb79fba0c31098596751b4"
283
299
  },
284
300
  {
285
301
  "path": "scripts/harness_service.py",
286
- "sha256": "fc471f90efcf03e26fcb6cd7757af37a0a1eea1184e2b57046665547a77f240f"
302
+ "sha256": "17c26b40ed3e7d110b74ef61e627fa0ad1bc84718a1721a066e6d72ee0e37649"
287
303
  },
288
304
  {
289
305
  "path": "scripts/harness_state.py",
290
- "sha256": "b33efacf9aba471f9f542f738c653acf274ed3ce57c4326520036e6df0f18966"
306
+ "sha256": "27073a1d7b1ea6d54a75bf6e679eb250a3507c95311101b60a1c4d32e00f909e"
291
307
  },
292
308
  {
293
309
  "path": "scripts/harness_test_guard.py",
294
- "sha256": "a6ad6f3619babb9ffc2bab16b3184ec916cc34f52b977dc4a5446e3e76fc894e"
310
+ "sha256": "ee3306a56a9ee7adf37ad4bcd26505c6d2c21fcdcb35b88cf5951c05a8f3b615"
311
+ },
312
+ {
313
+ "path": "scripts/harness_workflow_policy.py",
314
+ "sha256": "3e754da7041ebec852c3f0be8736cec423d7a0ee98424164bfe4a06fc4d8ca4f"
295
315
  }
296
316
  ]
297
317
  }