@hunter-harness/workflow-harness 0.2.8 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) 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 +3 -3
  3. package/harness/bundles/general/claude-code/harness-archive/SKILL.md +3 -3
  4. package/harness/bundles/general/claude-code/harness-archive/reference.md +30 -12
  5. package/harness/bundles/general/claude-code/harness-archive/templates/render-summary.mjs +5 -1
  6. package/harness/bundles/general/claude-code/harness-archive/templates/summary-data-template.json +6 -2
  7. package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +1 -1
  8. package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +3 -1
  9. package/harness/bundles/general/claude-code/harness-knowledge-ingest/reference.md +7 -0
  10. package/harness/bundles/general/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py +117 -0
  11. package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +1 -1
  12. package/harness/bundles/general/claude-code/harness-plan/SKILL.md +1 -1
  13. package/harness/bundles/general/claude-code/harness-plan/checklist.md +6 -0
  14. package/harness/bundles/general/claude-code/harness-review/SKILL.md +3 -3
  15. package/harness/bundles/general/claude-code/harness-run/SKILL.md +1 -1
  16. package/harness/bundles/general/claude-code/harness-run/checklist.md +5 -0
  17. package/harness/bundles/general/claude-code/harness-run/reference.md +33 -1
  18. package/harness/bundles/general/claude-code/harness-submit/SKILL.md +15 -10
  19. package/harness/bundles/general/claude-code/harness-submit/checklist.md +40 -76
  20. package/harness/bundles/general/claude-code/harness-sync/SKILL.md +17 -2
  21. package/harness/bundles/general/claude-code/harness-sync/reference.md +2 -2
  22. package/harness/bundles/general/claude-code/harness-test/SKILL.md +1 -1
  23. package/harness/bundles/general/claude-code/harness-test/checklist.md +9 -0
  24. package/harness/bundles/general/claude-code/harness-test/pitfalls-java.md +14 -0
  25. package/harness/bundles/general/claude-code/harness-test/reference.md +38 -0
  26. package/harness/bundles/general/claude-code/protocols/archive-report-protocol.md +26 -4
  27. package/harness/bundles/general/claude-code/protocols/ledger-protocol.md +38 -0
  28. package/harness/bundles/general/claude-code/protocols/powershell-protocol.md +16 -0
  29. package/harness/bundles/general/claude-code/protocols/report-pipeline-protocol.md +17 -0
  30. package/harness/bundles/general/claude-code/protocols/state-layout-protocol.md +15 -0
  31. package/harness/bundles/general/claude-code/scripts/harness_archive.py +1209 -170
  32. package/harness/bundles/general/claude-code/scripts/harness_change.py +18 -0
  33. package/harness/bundles/general/claude-code/scripts/harness_deploy.py +1 -44
  34. package/harness/bundles/general/claude-code/scripts/harness_events.py +174 -25
  35. package/harness/bundles/general/claude-code/scripts/harness_gate.py +203 -29
  36. package/harness/bundles/general/claude-code/scripts/harness_integration.py +878 -0
  37. package/harness/bundles/general/claude-code/scripts/harness_ledger.py +457 -10
  38. package/harness/bundles/general/claude-code/scripts/harness_paths.py +315 -0
  39. package/harness/bundles/general/claude-code/scripts/harness_profile.py +45 -0
  40. package/harness/bundles/general/claude-code/scripts/harness_review.py +326 -0
  41. package/harness/bundles/general/claude-code/scripts/harness_sync.py +407 -0
  42. package/harness/bundles/general/claude-code/scripts/harness_test_guard.py +244 -49
  43. package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
  44. package/harness/bundles/general/codebuddy/contracts/workflow-policy.json +3 -3
  45. package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +3 -3
  46. package/harness/bundles/general/codebuddy/harness-archive/reference.md +30 -12
  47. package/harness/bundles/general/codebuddy/harness-archive/templates/render-summary.mjs +5 -1
  48. package/harness/bundles/general/codebuddy/harness-archive/templates/summary-data-template.json +6 -2
  49. package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +1 -1
  50. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +3 -1
  51. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/reference.md +7 -0
  52. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge.py +117 -0
  53. package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  54. package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +1 -1
  55. package/harness/bundles/general/codebuddy/harness-plan/checklist.md +6 -0
  56. package/harness/bundles/general/codebuddy/harness-review/SKILL.md +3 -3
  57. package/harness/bundles/general/codebuddy/harness-run/SKILL.md +1 -1
  58. package/harness/bundles/general/codebuddy/harness-run/checklist.md +5 -0
  59. package/harness/bundles/general/codebuddy/harness-run/reference.md +33 -1
  60. package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +15 -10
  61. package/harness/bundles/general/codebuddy/harness-submit/checklist.md +40 -76
  62. package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +17 -2
  63. package/harness/bundles/general/codebuddy/harness-sync/reference.md +2 -2
  64. package/harness/bundles/general/codebuddy/harness-test/SKILL.md +1 -1
  65. package/harness/bundles/general/codebuddy/harness-test/checklist.md +9 -0
  66. package/harness/bundles/general/codebuddy/harness-test/pitfalls-java.md +14 -0
  67. package/harness/bundles/general/codebuddy/harness-test/reference.md +38 -0
  68. package/harness/bundles/general/codebuddy/protocols/archive-report-protocol.md +26 -4
  69. package/harness/bundles/general/codebuddy/protocols/ledger-protocol.md +38 -0
  70. package/harness/bundles/general/codebuddy/protocols/powershell-protocol.md +16 -0
  71. package/harness/bundles/general/codebuddy/protocols/report-pipeline-protocol.md +17 -0
  72. package/harness/bundles/general/codebuddy/protocols/state-layout-protocol.md +15 -0
  73. package/harness/bundles/general/codebuddy/scripts/harness_archive.py +1209 -170
  74. package/harness/bundles/general/codebuddy/scripts/harness_change.py +18 -0
  75. package/harness/bundles/general/codebuddy/scripts/harness_deploy.py +1 -44
  76. package/harness/bundles/general/codebuddy/scripts/harness_events.py +174 -25
  77. package/harness/bundles/general/codebuddy/scripts/harness_gate.py +203 -29
  78. package/harness/bundles/general/codebuddy/scripts/harness_integration.py +878 -0
  79. package/harness/bundles/general/codebuddy/scripts/harness_ledger.py +457 -10
  80. package/harness/bundles/general/codebuddy/scripts/harness_paths.py +315 -0
  81. package/harness/bundles/general/codebuddy/scripts/harness_profile.py +45 -0
  82. package/harness/bundles/general/codebuddy/scripts/harness_review.py +326 -0
  83. package/harness/bundles/general/codebuddy/scripts/harness_sync.py +407 -0
  84. package/harness/bundles/general/codebuddy/scripts/harness_test_guard.py +244 -49
  85. package/harness/bundles/general/codex/.harness-build.json +1 -1
  86. package/harness/bundles/general/codex/contracts/workflow-policy.json +3 -3
  87. package/harness/bundles/general/codex/harness-archive/SKILL.md +3 -3
  88. package/harness/bundles/general/codex/harness-archive/reference.md +30 -12
  89. package/harness/bundles/general/codex/harness-archive/templates/render-summary.mjs +5 -1
  90. package/harness/bundles/general/codex/harness-archive/templates/summary-data-template.json +6 -2
  91. package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +1 -1
  92. package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +3 -1
  93. package/harness/bundles/general/codex/harness-knowledge-ingest/reference.md +7 -0
  94. package/harness/bundles/general/codex/harness-knowledge-ingest/scripts/harness_knowledge.py +117 -0
  95. package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +1 -1
  96. package/harness/bundles/general/codex/harness-plan/SKILL.md +1 -1
  97. package/harness/bundles/general/codex/harness-plan/checklist.md +6 -0
  98. package/harness/bundles/general/codex/harness-review/SKILL.md +1 -1
  99. package/harness/bundles/general/codex/harness-run/SKILL.md +1 -1
  100. package/harness/bundles/general/codex/harness-run/checklist.md +5 -0
  101. package/harness/bundles/general/codex/harness-run/reference.md +33 -1
  102. package/harness/bundles/general/codex/harness-submit/SKILL.md +15 -10
  103. package/harness/bundles/general/codex/harness-submit/checklist.md +40 -76
  104. package/harness/bundles/general/codex/harness-sync/SKILL.md +17 -2
  105. package/harness/bundles/general/codex/harness-sync/reference.md +2 -2
  106. package/harness/bundles/general/codex/harness-test/SKILL.md +1 -1
  107. package/harness/bundles/general/codex/harness-test/checklist.md +9 -0
  108. package/harness/bundles/general/codex/harness-test/pitfalls-java.md +14 -0
  109. package/harness/bundles/general/codex/harness-test/reference.md +38 -0
  110. package/harness/bundles/general/codex/protocols/archive-report-protocol.md +26 -4
  111. package/harness/bundles/general/codex/protocols/ledger-protocol.md +38 -0
  112. package/harness/bundles/general/codex/protocols/powershell-protocol.md +16 -0
  113. package/harness/bundles/general/codex/protocols/report-pipeline-protocol.md +17 -0
  114. package/harness/bundles/general/codex/protocols/state-layout-protocol.md +15 -0
  115. package/harness/bundles/general/codex/scripts/harness_archive.py +1209 -170
  116. package/harness/bundles/general/codex/scripts/harness_change.py +18 -0
  117. package/harness/bundles/general/codex/scripts/harness_deploy.py +1 -44
  118. package/harness/bundles/general/codex/scripts/harness_events.py +174 -25
  119. package/harness/bundles/general/codex/scripts/harness_gate.py +203 -29
  120. package/harness/bundles/general/codex/scripts/harness_integration.py +878 -0
  121. package/harness/bundles/general/codex/scripts/harness_ledger.py +457 -10
  122. package/harness/bundles/general/codex/scripts/harness_paths.py +315 -0
  123. package/harness/bundles/general/codex/scripts/harness_profile.py +45 -0
  124. package/harness/bundles/general/codex/scripts/harness_review.py +326 -0
  125. package/harness/bundles/general/codex/scripts/harness_sync.py +407 -0
  126. package/harness/bundles/general/codex/scripts/harness_test_guard.py +244 -49
  127. package/harness/bundles/general/cursor/.harness-build.json +1 -1
  128. package/harness/bundles/general/cursor/contracts/workflow-policy.json +3 -3
  129. package/harness/bundles/general/cursor/harness-archive/SKILL.md +3 -3
  130. package/harness/bundles/general/cursor/harness-archive/reference.md +30 -12
  131. package/harness/bundles/general/cursor/harness-archive/templates/render-summary.mjs +5 -1
  132. package/harness/bundles/general/cursor/harness-archive/templates/summary-data-template.json +6 -2
  133. package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +1 -1
  134. package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +3 -1
  135. package/harness/bundles/general/cursor/harness-knowledge-ingest/reference.md +7 -0
  136. package/harness/bundles/general/cursor/harness-knowledge-ingest/scripts/harness_knowledge.py +117 -0
  137. package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +1 -1
  138. package/harness/bundles/general/cursor/harness-plan/SKILL.md +1 -1
  139. package/harness/bundles/general/cursor/harness-plan/checklist.md +6 -0
  140. package/harness/bundles/general/cursor/harness-review/SKILL.md +1 -1
  141. package/harness/bundles/general/cursor/harness-run/SKILL.md +1 -1
  142. package/harness/bundles/general/cursor/harness-run/checklist.md +5 -0
  143. package/harness/bundles/general/cursor/harness-run/reference.md +33 -1
  144. package/harness/bundles/general/cursor/harness-submit/SKILL.md +15 -10
  145. package/harness/bundles/general/cursor/harness-submit/checklist.md +40 -76
  146. package/harness/bundles/general/cursor/harness-sync/SKILL.md +17 -2
  147. package/harness/bundles/general/cursor/harness-sync/reference.md +2 -2
  148. package/harness/bundles/general/cursor/harness-test/SKILL.md +1 -1
  149. package/harness/bundles/general/cursor/harness-test/checklist.md +9 -0
  150. package/harness/bundles/general/cursor/harness-test/pitfalls-java.md +14 -0
  151. package/harness/bundles/general/cursor/harness-test/reference.md +38 -0
  152. package/harness/bundles/general/cursor/protocols/archive-report-protocol.md +26 -4
  153. package/harness/bundles/general/cursor/protocols/ledger-protocol.md +38 -0
  154. package/harness/bundles/general/cursor/protocols/powershell-protocol.md +16 -0
  155. package/harness/bundles/general/cursor/protocols/report-pipeline-protocol.md +17 -0
  156. package/harness/bundles/general/cursor/protocols/state-layout-protocol.md +15 -0
  157. package/harness/bundles/general/cursor/scripts/harness_archive.py +1209 -170
  158. package/harness/bundles/general/cursor/scripts/harness_change.py +18 -0
  159. package/harness/bundles/general/cursor/scripts/harness_deploy.py +1 -44
  160. package/harness/bundles/general/cursor/scripts/harness_events.py +174 -25
  161. package/harness/bundles/general/cursor/scripts/harness_gate.py +203 -29
  162. package/harness/bundles/general/cursor/scripts/harness_integration.py +878 -0
  163. package/harness/bundles/general/cursor/scripts/harness_ledger.py +457 -10
  164. package/harness/bundles/general/cursor/scripts/harness_paths.py +315 -0
  165. package/harness/bundles/general/cursor/scripts/harness_profile.py +45 -0
  166. package/harness/bundles/general/cursor/scripts/harness_review.py +326 -0
  167. package/harness/bundles/general/cursor/scripts/harness_sync.py +407 -0
  168. package/harness/bundles/general/cursor/scripts/harness_test_guard.py +244 -49
  169. package/harness/bundles/java/claude-code/.harness-build.json +1 -1
  170. package/harness/bundles/java/claude-code/contracts/workflow-policy.json +3 -3
  171. package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +1 -1
  172. package/harness/bundles/java/claude-code/harness-archive/SKILL.md +3 -3
  173. package/harness/bundles/java/claude-code/harness-archive/reference.md +30 -12
  174. package/harness/bundles/java/claude-code/harness-archive/templates/render-summary.mjs +5 -1
  175. package/harness/bundles/java/claude-code/harness-archive/templates/summary-data-template.json +6 -2
  176. package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +1 -1
  177. package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +3 -1
  178. package/harness/bundles/java/claude-code/harness-knowledge-ingest/reference.md +7 -0
  179. package/harness/bundles/java/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py +117 -0
  180. package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +1 -1
  181. package/harness/bundles/java/claude-code/harness-package/SKILL.md +1 -1
  182. package/harness/bundles/java/claude-code/harness-plan/SKILL.md +1 -1
  183. package/harness/bundles/java/claude-code/harness-plan/checklist.md +6 -0
  184. package/harness/bundles/java/claude-code/harness-review/SKILL.md +3 -3
  185. package/harness/bundles/java/claude-code/harness-run/SKILL.md +1 -1
  186. package/harness/bundles/java/claude-code/harness-submit/SKILL.md +15 -10
  187. package/harness/bundles/java/claude-code/harness-submit/checklist.md +40 -76
  188. package/harness/bundles/java/claude-code/harness-sync/SKILL.md +17 -2
  189. package/harness/bundles/java/claude-code/harness-sync/reference.md +2 -2
  190. package/harness/bundles/java/claude-code/harness-test/SKILL.md +1 -1
  191. package/harness/bundles/java/claude-code/protocols/archive-report-protocol.md +26 -4
  192. package/harness/bundles/java/claude-code/protocols/ledger-protocol.md +38 -0
  193. package/harness/bundles/java/claude-code/protocols/powershell-protocol.md +16 -0
  194. package/harness/bundles/java/claude-code/protocols/report-pipeline-protocol.md +17 -0
  195. package/harness/bundles/java/claude-code/protocols/state-layout-protocol.md +15 -0
  196. package/harness/bundles/java/claude-code/scripts/harness_archive.py +1209 -170
  197. package/harness/bundles/java/claude-code/scripts/harness_change.py +18 -0
  198. package/harness/bundles/java/claude-code/scripts/harness_deploy.py +1 -44
  199. package/harness/bundles/java/claude-code/scripts/harness_events.py +174 -25
  200. package/harness/bundles/java/claude-code/scripts/harness_gate.py +203 -29
  201. package/harness/bundles/java/claude-code/scripts/harness_integration.py +878 -0
  202. package/harness/bundles/java/claude-code/scripts/harness_ledger.py +457 -10
  203. package/harness/bundles/java/claude-code/scripts/harness_paths.py +315 -0
  204. package/harness/bundles/java/claude-code/scripts/harness_profile.py +45 -0
  205. package/harness/bundles/java/claude-code/scripts/harness_review.py +326 -0
  206. package/harness/bundles/java/claude-code/scripts/harness_sync.py +407 -0
  207. package/harness/bundles/java/claude-code/scripts/harness_test_guard.py +244 -49
  208. package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
  209. package/harness/bundles/java/codebuddy/contracts/workflow-policy.json +3 -3
  210. package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +1 -1
  211. package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +3 -3
  212. package/harness/bundles/java/codebuddy/harness-archive/reference.md +30 -12
  213. package/harness/bundles/java/codebuddy/harness-archive/templates/render-summary.mjs +5 -1
  214. package/harness/bundles/java/codebuddy/harness-archive/templates/summary-data-template.json +6 -2
  215. package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +1 -1
  216. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +3 -1
  217. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/reference.md +7 -0
  218. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge.py +117 -0
  219. package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  220. package/harness/bundles/java/codebuddy/harness-package/SKILL.md +1 -1
  221. package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +1 -1
  222. package/harness/bundles/java/codebuddy/harness-plan/checklist.md +6 -0
  223. package/harness/bundles/java/codebuddy/harness-review/SKILL.md +3 -3
  224. package/harness/bundles/java/codebuddy/harness-run/SKILL.md +1 -1
  225. package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +15 -10
  226. package/harness/bundles/java/codebuddy/harness-submit/checklist.md +40 -76
  227. package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +17 -2
  228. package/harness/bundles/java/codebuddy/harness-sync/reference.md +2 -2
  229. package/harness/bundles/java/codebuddy/harness-test/SKILL.md +1 -1
  230. package/harness/bundles/java/codebuddy/protocols/archive-report-protocol.md +26 -4
  231. package/harness/bundles/java/codebuddy/protocols/ledger-protocol.md +38 -0
  232. package/harness/bundles/java/codebuddy/protocols/powershell-protocol.md +16 -0
  233. package/harness/bundles/java/codebuddy/protocols/report-pipeline-protocol.md +17 -0
  234. package/harness/bundles/java/codebuddy/protocols/state-layout-protocol.md +15 -0
  235. package/harness/bundles/java/codebuddy/scripts/harness_archive.py +1209 -170
  236. package/harness/bundles/java/codebuddy/scripts/harness_change.py +18 -0
  237. package/harness/bundles/java/codebuddy/scripts/harness_deploy.py +1 -44
  238. package/harness/bundles/java/codebuddy/scripts/harness_events.py +174 -25
  239. package/harness/bundles/java/codebuddy/scripts/harness_gate.py +203 -29
  240. package/harness/bundles/java/codebuddy/scripts/harness_integration.py +878 -0
  241. package/harness/bundles/java/codebuddy/scripts/harness_ledger.py +457 -10
  242. package/harness/bundles/java/codebuddy/scripts/harness_paths.py +315 -0
  243. package/harness/bundles/java/codebuddy/scripts/harness_profile.py +45 -0
  244. package/harness/bundles/java/codebuddy/scripts/harness_review.py +326 -0
  245. package/harness/bundles/java/codebuddy/scripts/harness_sync.py +407 -0
  246. package/harness/bundles/java/codebuddy/scripts/harness_test_guard.py +244 -49
  247. package/harness/bundles/java/codex/.harness-build.json +1 -1
  248. package/harness/bundles/java/codex/contracts/workflow-policy.json +3 -3
  249. package/harness/bundles/java/codex/harness-apidoc/SKILL.md +1 -1
  250. package/harness/bundles/java/codex/harness-archive/SKILL.md +3 -3
  251. package/harness/bundles/java/codex/harness-archive/reference.md +30 -12
  252. package/harness/bundles/java/codex/harness-archive/templates/render-summary.mjs +5 -1
  253. package/harness/bundles/java/codex/harness-archive/templates/summary-data-template.json +6 -2
  254. package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +1 -1
  255. package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +3 -1
  256. package/harness/bundles/java/codex/harness-knowledge-ingest/reference.md +7 -0
  257. package/harness/bundles/java/codex/harness-knowledge-ingest/scripts/harness_knowledge.py +117 -0
  258. package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +1 -1
  259. package/harness/bundles/java/codex/harness-package/SKILL.md +1 -1
  260. package/harness/bundles/java/codex/harness-plan/SKILL.md +1 -1
  261. package/harness/bundles/java/codex/harness-plan/checklist.md +6 -0
  262. package/harness/bundles/java/codex/harness-review/SKILL.md +1 -1
  263. package/harness/bundles/java/codex/harness-run/SKILL.md +1 -1
  264. package/harness/bundles/java/codex/harness-submit/SKILL.md +15 -10
  265. package/harness/bundles/java/codex/harness-submit/checklist.md +40 -76
  266. package/harness/bundles/java/codex/harness-sync/SKILL.md +17 -2
  267. package/harness/bundles/java/codex/harness-sync/reference.md +2 -2
  268. package/harness/bundles/java/codex/harness-test/SKILL.md +1 -1
  269. package/harness/bundles/java/codex/protocols/archive-report-protocol.md +26 -4
  270. package/harness/bundles/java/codex/protocols/ledger-protocol.md +38 -0
  271. package/harness/bundles/java/codex/protocols/powershell-protocol.md +16 -0
  272. package/harness/bundles/java/codex/protocols/report-pipeline-protocol.md +17 -0
  273. package/harness/bundles/java/codex/protocols/state-layout-protocol.md +15 -0
  274. package/harness/bundles/java/codex/scripts/harness_archive.py +1209 -170
  275. package/harness/bundles/java/codex/scripts/harness_change.py +18 -0
  276. package/harness/bundles/java/codex/scripts/harness_deploy.py +1 -44
  277. package/harness/bundles/java/codex/scripts/harness_events.py +174 -25
  278. package/harness/bundles/java/codex/scripts/harness_gate.py +203 -29
  279. package/harness/bundles/java/codex/scripts/harness_integration.py +878 -0
  280. package/harness/bundles/java/codex/scripts/harness_ledger.py +457 -10
  281. package/harness/bundles/java/codex/scripts/harness_paths.py +315 -0
  282. package/harness/bundles/java/codex/scripts/harness_profile.py +45 -0
  283. package/harness/bundles/java/codex/scripts/harness_review.py +326 -0
  284. package/harness/bundles/java/codex/scripts/harness_sync.py +407 -0
  285. package/harness/bundles/java/codex/scripts/harness_test_guard.py +244 -49
  286. package/harness/bundles/java/cursor/.harness-build.json +1 -1
  287. package/harness/bundles/java/cursor/contracts/workflow-policy.json +3 -3
  288. package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +1 -1
  289. package/harness/bundles/java/cursor/harness-archive/SKILL.md +3 -3
  290. package/harness/bundles/java/cursor/harness-archive/reference.md +30 -12
  291. package/harness/bundles/java/cursor/harness-archive/templates/render-summary.mjs +5 -1
  292. package/harness/bundles/java/cursor/harness-archive/templates/summary-data-template.json +6 -2
  293. package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +1 -1
  294. package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +3 -1
  295. package/harness/bundles/java/cursor/harness-knowledge-ingest/reference.md +7 -0
  296. package/harness/bundles/java/cursor/harness-knowledge-ingest/scripts/harness_knowledge.py +117 -0
  297. package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +1 -1
  298. package/harness/bundles/java/cursor/harness-package/SKILL.md +1 -1
  299. package/harness/bundles/java/cursor/harness-plan/SKILL.md +1 -1
  300. package/harness/bundles/java/cursor/harness-plan/checklist.md +6 -0
  301. package/harness/bundles/java/cursor/harness-review/SKILL.md +1 -1
  302. package/harness/bundles/java/cursor/harness-run/SKILL.md +1 -1
  303. package/harness/bundles/java/cursor/harness-submit/SKILL.md +15 -10
  304. package/harness/bundles/java/cursor/harness-submit/checklist.md +40 -76
  305. package/harness/bundles/java/cursor/harness-sync/SKILL.md +17 -2
  306. package/harness/bundles/java/cursor/harness-sync/reference.md +2 -2
  307. package/harness/bundles/java/cursor/harness-test/SKILL.md +1 -1
  308. package/harness/bundles/java/cursor/protocols/archive-report-protocol.md +26 -4
  309. package/harness/bundles/java/cursor/protocols/ledger-protocol.md +38 -0
  310. package/harness/bundles/java/cursor/protocols/powershell-protocol.md +16 -0
  311. package/harness/bundles/java/cursor/protocols/report-pipeline-protocol.md +17 -0
  312. package/harness/bundles/java/cursor/protocols/state-layout-protocol.md +15 -0
  313. package/harness/bundles/java/cursor/scripts/harness_archive.py +1209 -170
  314. package/harness/bundles/java/cursor/scripts/harness_change.py +18 -0
  315. package/harness/bundles/java/cursor/scripts/harness_deploy.py +1 -44
  316. package/harness/bundles/java/cursor/scripts/harness_events.py +174 -25
  317. package/harness/bundles/java/cursor/scripts/harness_gate.py +203 -29
  318. package/harness/bundles/java/cursor/scripts/harness_integration.py +878 -0
  319. package/harness/bundles/java/cursor/scripts/harness_ledger.py +457 -10
  320. package/harness/bundles/java/cursor/scripts/harness_paths.py +315 -0
  321. package/harness/bundles/java/cursor/scripts/harness_profile.py +45 -0
  322. package/harness/bundles/java/cursor/scripts/harness_review.py +326 -0
  323. package/harness/bundles/java/cursor/scripts/harness_sync.py +407 -0
  324. package/harness/bundles/java/cursor/scripts/harness_test_guard.py +244 -49
  325. package/harness/manifests/general/claude-code.json +58 -38
  326. package/harness/manifests/general/codebuddy.json +58 -38
  327. package/harness/manifests/general/codex.json +58 -38
  328. package/harness/manifests/general/cursor.json +58 -38
  329. package/harness/manifests/java/claude-code.json +52 -36
  330. package/harness/manifests/java/codebuddy.json +52 -36
  331. package/harness/manifests/java/codex.json +52 -36
  332. package/harness/manifests/java/cursor.json +52 -36
  333. package/hunter-workflow-family.json +2 -2
  334. package/package.json +1 -1
@@ -21,6 +21,12 @@ import time
21
21
  from pathlib import Path
22
22
  from typing import Any
23
23
 
24
+ SCRIPTS_DIR = Path(__file__).resolve().parent
25
+ if str(SCRIPTS_DIR) not in sys.path:
26
+ sys.path.insert(0, str(SCRIPTS_DIR))
27
+
28
+ import harness_paths # noqa: E402
29
+
24
30
  SCHEMA_VERSION = 1
25
31
  MODE = "force-track-touched"
26
32
  MANIFEST_REL = Path("evidence") / "test-tracking.json"
@@ -166,13 +172,18 @@ def _change_dir(project: Path, change_dir: Path | str) -> Path | None:
166
172
  return resolved if any(_inside(resolved, root) for root in allowed_roots) else None
167
173
 
168
174
 
175
+ def _state_root(change_root: Path) -> Path:
176
+ return Path(harness_paths.resolve_state_dir_for_contract(change_root))
177
+
178
+
169
179
  def _manifest_path(change_root: Path) -> Path | None:
170
- evidence = change_root / MANIFEST_REL.parent
171
- manifest = change_root / MANIFEST_REL
180
+ state_root = _state_root(change_root)
181
+ evidence = state_root / MANIFEST_REL.parent
182
+ manifest = state_root / MANIFEST_REL
172
183
  expected_evidence = evidence.absolute()
173
184
  resolved_evidence = evidence.resolve()
174
185
  if (
175
- not _inside(resolved_evidence, change_root.resolve())
186
+ not _inside(resolved_evidence, state_root.resolve())
176
187
  or os.path.normcase(str(resolved_evidence))
177
188
  != os.path.normcase(str(expected_evidence))
178
189
  ):
@@ -181,9 +192,10 @@ def _manifest_path(change_root: Path) -> Path | None:
181
192
 
182
193
 
183
194
  def _manifest_target_inside(change_root: Path, manifest: Path) -> bool:
195
+ state_root = _state_root(change_root)
184
196
  resolved = manifest.resolve()
185
197
  return (
186
- _inside(resolved, change_root.resolve())
198
+ _inside(resolved, state_root.resolve())
187
199
  and _inside(resolved, manifest.parent.absolute())
188
200
  )
189
201
 
@@ -267,6 +279,52 @@ def _validate_file(project: Path, raw: str) -> tuple[Path | None, str | None, st
267
279
  return resolved, rel, None
268
280
 
269
281
 
282
+ def _contract_is_v2(change_root: Path) -> bool:
283
+ try:
284
+ contract = harness_paths.load_change_contract(change_root)
285
+ except (OSError, ValueError):
286
+ return False
287
+ if harness_paths.contract_layout_kind(contract) == "split-v1":
288
+ return True
289
+ version = contract.get("schemaVersion")
290
+ return isinstance(version, int) and version >= 2
291
+
292
+
293
+ def _byte_hash(path: Path) -> str:
294
+ return "sha256:" + hashlib.sha256(path.read_bytes()).hexdigest()
295
+
296
+
297
+ def logical_file_hash(repo_root: Path, rel: str) -> str:
298
+ """Logical identity for a tracked file (RET-10).
299
+
300
+ Text files hash with git blob semantics (path filters/attributes applied,
301
+ so LF/CRLF spellings of one logical text agree). Binary files keep byte
302
+ hash. Indeterminate content falls back to byte hash.
303
+ """
304
+ path = repo_root / rel
305
+ content = path.read_bytes()
306
+ attr = _git(repo_root, "check-attr", "text", "--", rel)
307
+ attr_out = attr.stdout.strip() if attr.returncode == 0 else ""
308
+ if attr_out.endswith(": unset"):
309
+ return _byte_hash(path)
310
+ if b"\x00" in content:
311
+ return _byte_hash(path)
312
+ try:
313
+ content.decode("utf-8")
314
+ except UnicodeDecodeError:
315
+ return _byte_hash(path)
316
+ proc = subprocess.run(
317
+ ["git", "hash-object", "--path", rel, "--stdin"],
318
+ input=content,
319
+ capture_output=True,
320
+ cwd=str(repo_root),
321
+ check=False,
322
+ )
323
+ if proc.returncode != 0:
324
+ return _byte_hash(path)
325
+ return "gitblob:" + proc.stdout.decode("ascii").strip()
326
+
327
+
270
328
  def _entry_shape_valid(item: Any) -> bool:
271
329
  return (
272
330
  isinstance(item, dict)
@@ -280,6 +338,78 @@ def _entry_shape_valid(item: Any) -> bool:
280
338
  )
281
339
 
282
340
 
341
+ def _entry_shape_valid_v2(item: Any) -> bool:
342
+ if not isinstance(item, dict):
343
+ return False
344
+ if not isinstance(item.get("path"), str) or not item["path"]:
345
+ return False
346
+ logical = item.get("logicalHash")
347
+ binary = item.get("binaryHash")
348
+ logical_ok = isinstance(logical, str) and (
349
+ logical.startswith("gitblob:") or logical.startswith("sha256:")
350
+ )
351
+ binary_ok = binary is None or (
352
+ isinstance(binary, str) and binary.startswith("sha256:")
353
+ )
354
+ if not (logical_ok or binary_ok):
355
+ return False
356
+ if item.get("reason") not in REASONS:
357
+ return False
358
+ if type(item.get("ignored")) is not bool:
359
+ return False
360
+ if not isinstance(item.get("introducedBy"), str) or not item["introducedBy"]:
361
+ return False
362
+ touched = item.get("touchedBy")
363
+ if not isinstance(touched, list) or not all(isinstance(t, str) for t in touched):
364
+ return False
365
+ return item.get("commitScope") in ("current-change", "foreign-change")
366
+
367
+
368
+ def _validate_existing_manifest_v2(
369
+ project: Path,
370
+ manifest: Any,
371
+ *,
372
+ allow_hash_drift: set[str] | None = None,
373
+ require_files: bool,
374
+ ) -> tuple[str | None, dict[str, dict[str, Any]]]:
375
+ if (
376
+ not isinstance(manifest, dict)
377
+ or manifest.get("schemaVersion") != 2
378
+ or manifest.get("mode") != MODE
379
+ ):
380
+ return "MANIFEST_INVALID", {}
381
+ repository_id = manifest.get("repositoryId")
382
+ if not isinstance(repository_id, str) or not repository_id.startswith("sha256:"):
383
+ return "MANIFEST_INVALID", {}
384
+ if repository_id != harness_paths.repository_identity(project):
385
+ return "MANIFEST_PROJECT_MISMATCH", {}
386
+ entries = manifest.get("files")
387
+ if not isinstance(entries, list):
388
+ return "MANIFEST_INVALID", {}
389
+ if require_files and not entries:
390
+ return "EMPTY_MANIFEST", {}
391
+
392
+ allowed_drift = allow_hash_drift or set()
393
+ validated: dict[str, dict[str, Any]] = {}
394
+ for item in entries:
395
+ if not _entry_shape_valid_v2(item):
396
+ return "MANIFEST_INVALID", {}
397
+ rel = item["path"]
398
+ if rel in validated:
399
+ return "MANIFEST_INVALID", {}
400
+ path, normalized, error = _validate_file(project, rel)
401
+ if error or normalized != rel or path is None:
402
+ return error or "MANIFEST_INVALID", {}
403
+ expected = item.get("logicalHash") or item.get("binaryHash")
404
+ if expected != logical_file_hash(project, rel) and rel not in allowed_drift:
405
+ return "HASH_DRIFT" if require_files else "MANIFEST_INVALID", {}
406
+ ignored_now = _is_ignored(project, rel)
407
+ if item["ignored"] != ignored_now:
408
+ return "MANIFEST_INVALID", {}
409
+ validated[rel] = dict(item)
410
+ return None, validated
411
+
412
+
283
413
  def _validate_existing_manifest(
284
414
  project: Path,
285
415
  manifest: Any,
@@ -366,7 +496,12 @@ def record(
366
496
  return _result(
367
497
  False, action, "MANIFEST_INVALID", [], error=str(exc)
368
498
  )
369
- error, existing_files = _validate_existing_manifest(
499
+ validator = (
500
+ _validate_existing_manifest_v2
501
+ if isinstance(existing, dict) and existing.get("schemaVersion") == 2
502
+ else _validate_existing_manifest
503
+ )
504
+ error, existing_files = validator(
370
505
  project_root,
371
506
  existing,
372
507
  allow_hash_drift={rel for _, rel in validated},
@@ -375,25 +510,54 @@ def record(
375
510
  if error:
376
511
  return _result(False, action, error, [])
377
512
 
378
- for path, rel in validated:
379
- ignored = _is_ignored(project_root, rel)
380
- tracked = _git(
381
- project_root, "ls-files", "--error-unmatch", "--", rel
382
- ).returncode == 0
383
- existing_files[rel] = {
384
- "path": rel,
385
- "sha256": _sha256(path),
386
- "reason": reason,
387
- "ignored": ignored,
388
- "trackedBefore": tracked,
513
+ if _contract_is_v2(change_root):
514
+ change_id = change_root.name
515
+ for path, rel in validated:
516
+ ignored = _is_ignored(project_root, rel)
517
+ previous = existing_files.get(rel, {})
518
+ touched = [
519
+ item for item in previous.get("touchedBy", [])
520
+ if isinstance(item, str)
521
+ ]
522
+ if change_id not in touched:
523
+ touched.append(change_id)
524
+ digest = logical_file_hash(project_root, rel)
525
+ existing_files[rel] = {
526
+ "path": rel,
527
+ "logicalHash": digest,
528
+ "binaryHash": None if digest.startswith("gitblob:") else digest,
529
+ "reason": reason,
530
+ "ignored": ignored,
531
+ "introducedBy": previous.get("introducedBy", change_id),
532
+ "touchedBy": touched,
533
+ "commitScope": "current-change",
534
+ }
535
+ manifest = {
536
+ "schemaVersion": 2,
537
+ "repositoryId": harness_paths.repository_identity(project_root),
538
+ "mode": MODE,
539
+ "files": [existing_files[key] for key in sorted(existing_files)],
540
+ }
541
+ else:
542
+ for path, rel in validated:
543
+ ignored = _is_ignored(project_root, rel)
544
+ tracked = _git(
545
+ project_root, "ls-files", "--error-unmatch", "--", rel
546
+ ).returncode == 0
547
+ existing_files[rel] = {
548
+ "path": rel,
549
+ "sha256": _sha256(path),
550
+ "reason": reason,
551
+ "ignored": ignored,
552
+ "trackedBefore": tracked,
553
+ }
554
+
555
+ manifest = {
556
+ "schemaVersion": SCHEMA_VERSION,
557
+ "mode": MODE,
558
+ "projectRoot": str(project_root),
559
+ "files": [existing_files[key] for key in sorted(existing_files)],
389
560
  }
390
-
391
- manifest = {
392
- "schemaVersion": SCHEMA_VERSION,
393
- "mode": MODE,
394
- "projectRoot": str(project_root),
395
- "files": [existing_files[key] for key in sorted(existing_files)],
396
- }
397
561
  _write_json(manifest_path, manifest)
398
562
  except LockUnavailable:
399
563
  return _result(False, action, "MANIFEST_LOCKED", [])
@@ -412,12 +576,18 @@ def _stage_locked(
412
576
  return _result(False, action, "MANIFEST_MISSING", [])
413
577
  except (OSError, json.JSONDecodeError) as exc:
414
578
  return _result(False, action, "MANIFEST_INVALID", [], error=str(exc))
415
- error, entries = _validate_existing_manifest(
416
- project_root, manifest, require_files=True
417
- )
579
+ is_v2 = isinstance(manifest, dict) and manifest.get("schemaVersion") == 2
580
+ validator = _validate_existing_manifest_v2 if is_v2 else _validate_existing_manifest
581
+ error, entries = validator(project_root, manifest, require_files=True)
418
582
  if error:
419
583
  return _result(False, action, error, [])
420
- rels = list(entries)
584
+ rels = [
585
+ rel
586
+ for rel, entry in entries.items()
587
+ if not is_v2 or entry.get("commitScope") == "current-change"
588
+ ]
589
+ if not rels:
590
+ return _result(True, action, "STAGED", [])
421
591
 
422
592
  before_cached_result = _git(project_root, "diff", "--cached", "--name-only")
423
593
  if before_cached_result.returncode != 0:
@@ -467,15 +637,38 @@ def _stage_locked(
467
637
  temp_index.unlink(missing_ok=True)
468
638
 
469
639
 
470
- def _glob_files_for_pattern(base: Path, pattern: str) -> list[Path]:
471
- normalized = pattern.replace("\\", "/")
472
- if normalized.endswith("/**"):
473
- prefix = normalized[:-3].rstrip("/")
474
- root = base / prefix
475
- if not root.is_dir():
476
- return []
477
- return [path for path in root.rglob("*") if path.is_file()]
478
- return [path for path in base.glob(normalized) if path.is_file()]
640
+ def _path_is_excluded(rel: str, excluded_roots: list[str]) -> bool:
641
+ rel_parts = tuple(os.path.normcase(part) for part in rel.split("/") if part)
642
+ for excluded in excluded_roots:
643
+ excluded_parts = tuple(
644
+ os.path.normcase(part) for part in excluded.split("/") if part
645
+ )
646
+ if excluded_parts and rel_parts[: len(excluded_parts)] == excluded_parts:
647
+ return True
648
+ return False
649
+
650
+
651
+ def _walk_matching_files(
652
+ base: Path, patterns: list[str], excluded_roots: list[str]
653
+ ) -> list[Path]:
654
+ """Walk once and prune excluded roots before matching recursive globs."""
655
+ matches: list[Path] = []
656
+ for root_raw, dir_names, file_names in os.walk(base, followlinks=False):
657
+ root = Path(root_raw)
658
+ root_rel = root.relative_to(base).as_posix()
659
+ prefix = "" if root_rel == "." else root_rel + "/"
660
+ dir_names[:] = [
661
+ name
662
+ for name in dir_names
663
+ if not _path_is_excluded(prefix + name, excluded_roots)
664
+ ]
665
+ for name in file_names:
666
+ rel = prefix + name
667
+ if _path_is_excluded(rel, excluded_roots):
668
+ continue
669
+ if any(_matches_pattern(rel, pattern) for pattern in patterns):
670
+ matches.append(root / name)
671
+ return matches
479
672
 
480
673
 
481
674
  def _enumerate_allowed_test_files(project_root: Path) -> dict[str, str]:
@@ -484,20 +677,22 @@ def _enumerate_allowed_test_files(project_root: Path) -> dict[str, str]:
484
677
  config = _profile_config(project_root)
485
678
  if config is None:
486
679
  patterns = ["test/**", "tests/**", "src/test/**"]
680
+ excluded_roots = [
681
+ ".git", ".harness", "node_modules", "dist", "build", "__pycache__"
682
+ ]
487
683
  else:
488
- patterns, _excluded = config
684
+ patterns, excluded_roots = config
489
685
  base = project_root.resolve()
490
686
  seen: set[str] = set()
491
- for pattern in patterns:
492
- for match in _glob_files_for_pattern(base, pattern):
493
- resolved = match.resolve()
494
- if not _inside(resolved, base):
495
- continue
496
- rel = resolved.relative_to(base).as_posix()
497
- if rel in seen or not _allowed_test_path(project_root, rel):
498
- continue
499
- seen.add(rel)
500
- found[rel] = _sha256(resolved)
687
+ for match in _walk_matching_files(base, patterns, excluded_roots):
688
+ resolved = match.resolve()
689
+ if not _inside(resolved, base):
690
+ continue
691
+ rel = resolved.relative_to(base).as_posix()
692
+ if rel in seen or not _allowed_test_path(project_root, rel):
693
+ continue
694
+ seen.add(rel)
695
+ found[rel] = _sha256(resolved)
501
696
  return found
502
697
 
503
698
 
@@ -510,7 +705,7 @@ def begin(project: Path | str, change_dir: Path | str) -> dict[str, Any]:
510
705
  manifest_path = _manifest_path(change_root)
511
706
  if manifest_path is None:
512
707
  return _result(False, action, "MANIFEST_PATH_OUTSIDE_PROJECT", [])
513
- snapshot_path = change_root / SNAPSHOT_REL
708
+ snapshot_path = _state_root(change_root) / SNAPSHOT_REL
514
709
  if not _manifest_target_inside(change_root, snapshot_path):
515
710
  return _result(False, action, "SNAPSHOT_PATH_OUTSIDE_PROJECT", [])
516
711
 
@@ -542,7 +737,7 @@ def close(project: Path | str, change_dir: Path | str) -> dict[str, Any]:
542
737
  change_root = _change_dir(project_root, change_dir)
543
738
  if change_root is None:
544
739
  return _result(False, action, "CHANGE_DIR_OUTSIDE_PROJECT", [])
545
- snapshot_path = change_root / SNAPSHOT_REL
740
+ snapshot_path = _state_root(change_root) / SNAPSHOT_REL
546
741
  if not snapshot_path.is_file():
547
742
  return _result(False, action, "SNAPSHOT_MISSING", [])
548
743
  try:
@@ -2,12 +2,12 @@
2
2
  "schema_version": 2,
3
3
  "profile": "general",
4
4
  "adapter": "claude-code",
5
- "bundle_version": "0.2.8",
5
+ "bundle_version": "0.2.10",
6
6
  "generator": "harness_deploy.py",
7
7
  "files": [
8
8
  {
9
9
  "path": ".harness-build.json",
10
- "sha256": "74266cba575a97e1ce2ceb96cec6a1b14f721f20c66071cef262dac1371f96b8"
10
+ "sha256": "89453fb13416f4c7f7002b4d04365762670e94fc7dffa37a345ef303d088e685"
11
11
  },
12
12
  {
13
13
  "path": "agents/harness-evaluator.md",
@@ -27,7 +27,7 @@
27
27
  },
28
28
  {
29
29
  "path": "contracts/workflow-policy.json",
30
- "sha256": "36614a228338a7e8f2b518351c129607245e3910a67062a5047acdcd42e86853"
30
+ "sha256": "e642d840fa90aa5943cb80bee6538e0aa11577fcaab0c4e534641ebfae8d8f00"
31
31
  },
32
32
  {
33
33
  "path": "harness-archive/checklist.md",
@@ -35,7 +35,7 @@
35
35
  },
36
36
  {
37
37
  "path": "harness-archive/reference.md",
38
- "sha256": "144437331e65a94c2898bf05832edbf85735a1762cf804dd2ec2e5ade157fe49"
38
+ "sha256": "a956c4474df338c35934933c131a3fefb84e6b296a961c4f731526a4aff4f32f"
39
39
  },
40
40
  {
41
41
  "path": "harness-archive/scripts/gen-manifest.ps1",
@@ -43,15 +43,15 @@
43
43
  },
44
44
  {
45
45
  "path": "harness-archive/SKILL.md",
46
- "sha256": "9af5a1017a20459e8f1c71a8a3ab8fe8e32050b79264d40296ed38993c466eca"
46
+ "sha256": "6859cdd961b3b476049ef784b5e5d7afa00579408127b6561da31a435612530d"
47
47
  },
48
48
  {
49
49
  "path": "harness-archive/templates/render-summary.mjs",
50
- "sha256": "fbfde9bdf16dba8aff1ef638e582a517064e81ea4681ed4831ff2e7c55f5ab9c"
50
+ "sha256": "f15d2b541649fe677d56de46bc7ac8deccaeab12e57c530f5cd64fb340f17df4"
51
51
  },
52
52
  {
53
53
  "path": "harness-archive/templates/summary-data-template.json",
54
- "sha256": "fd225a99a42ac8f9e67457b791c803d978c8f1b6b43b4adb138e520a12946630"
54
+ "sha256": "3ad30d331d53c1866ef707b9f770e11a3c1237e01d9516a50fac3aeb287c8cf8"
55
55
  },
56
56
  {
57
57
  "path": "harness-codebase-map/checklist.md",
@@ -63,7 +63,7 @@
63
63
  },
64
64
  {
65
65
  "path": "harness-codebase-map/SKILL.md",
66
- "sha256": "ec65efff813467277ea6cd40e3cc4b0524bfb16095c2cf2028f7e0da480e45f2"
66
+ "sha256": "8286097f7c01e3ea3c0e9d7fbe525089f3711e2acc1e5b447a0cb4cb151d4fc0"
67
67
  },
68
68
  {
69
69
  "path": "harness-codebase-map/templates/ARCHITECTURE.md",
@@ -115,7 +115,7 @@
115
115
  },
116
116
  {
117
117
  "path": "harness-knowledge-ingest/reference.md",
118
- "sha256": "28665f8be71787e0eb67cf3f2d6ec8511ca484a228cd914e36c4082e05bd5d38"
118
+ "sha256": "6d587ea318d73869d273366c37dccea0d7ee5578ac2e6534b91c7d790188c7a9"
119
119
  },
120
120
  {
121
121
  "path": "harness-knowledge-ingest/scripts/harness_knowledge_mcp.py",
@@ -123,19 +123,19 @@
123
123
  },
124
124
  {
125
125
  "path": "harness-knowledge-ingest/scripts/harness_knowledge.py",
126
- "sha256": "2764b7985cf2675749bef3e7742f8ed93b4293c3603eef4a78040a97e5b05144"
126
+ "sha256": "d6e180a28345f6ff21e0ae1f7dc5687bc85c4bd1f57309c8701ace64b65fc02f"
127
127
  },
128
128
  {
129
129
  "path": "harness-knowledge-ingest/SKILL.md",
130
- "sha256": "b777462d34fcef33f305a640a546446de7d660f9d066bd465903d2587025c1e4"
130
+ "sha256": "22f3760cd3c6b3087e7a38dd9662e029a3b1dae32f8a70b740dce7b71fc36f6c"
131
131
  },
132
132
  {
133
133
  "path": "harness-knowledge-query/SKILL.md",
134
- "sha256": "66fcad2800cbcb6d9cfdfe5bd08a2afe937214297ec722c30452bb039b9da14b"
134
+ "sha256": "30b3e76d5b3b29031cf3a7c295875f1d53b24f6d1becbb6b36af23472f0126a5"
135
135
  },
136
136
  {
137
137
  "path": "harness-plan/checklist.md",
138
- "sha256": "e45d38c204c9e51abe042f369ee6d39a883425b24d331106126f4500bc7d899d"
138
+ "sha256": "efd49a7430aae916d2cd6da82f812c0fdc9777eaabe8212a92904d5dcfa38534"
139
139
  },
140
140
  {
141
141
  "path": "harness-plan/protocols.md",
@@ -147,7 +147,7 @@
147
147
  },
148
148
  {
149
149
  "path": "harness-plan/SKILL.md",
150
- "sha256": "9d0610ad09c0fc29a5c8252334419a276e88c2b9a0f7c3ac88bf2e62bd977504"
150
+ "sha256": "306446d1779235f71bedd862d7baf17499c5df7058da5b3d3c11b230304a1301"
151
151
  },
152
152
  {
153
153
  "path": "harness-review/checklist.md",
@@ -163,11 +163,11 @@
163
163
  },
164
164
  {
165
165
  "path": "harness-review/SKILL.md",
166
- "sha256": "f531935841d7e971c0f050cd6746249b376a2d01bd6b50a58c7061209a2ef8a9"
166
+ "sha256": "027a7239c7ae3707542a8fe3088e901d82490f3df0bb7efb7e0257859fb7a7d2"
167
167
  },
168
168
  {
169
169
  "path": "harness-run/checklist.md",
170
- "sha256": "1bbfdf3d2a5ac7daa7155bfe0ac39c92e3527edf1b66bdf1ece232d63bd31dc3"
170
+ "sha256": "4a829a9a1521402d508f2b76ba16246f8d5b860cc5eeaa40faa96cbc874992c2"
171
171
  },
172
172
  {
173
173
  "path": "harness-run/protocols.md",
@@ -175,15 +175,15 @@
175
175
  },
176
176
  {
177
177
  "path": "harness-run/reference.md",
178
- "sha256": "011a7f75e49392df9c7cde0d7126ac9b6772f779b22807e3b09b49f32622e447"
178
+ "sha256": "9c0b34303310de06ab56ab0c38b35134dcd4b0d3bde10c9275313ff2962010f3"
179
179
  },
180
180
  {
181
181
  "path": "harness-run/SKILL.md",
182
- "sha256": "85a5023c5b7bfaf767a1d8d77da8ef1095d5c805acda5b2b33966d40190bb12c"
182
+ "sha256": "79aa66cd8c1b7e56f62078679f02815a689920a6b3704197ec2da0ae0e3b58f8"
183
183
  },
184
184
  {
185
185
  "path": "harness-submit/checklist.md",
186
- "sha256": "6b2343c6e8fdfc32b92b7dcd404487b9d25c404790a6e232a2292e5b996f90a2"
186
+ "sha256": "f57beb2da7e75a59320ba442de0625105a30e38e071a7308ea06fb024fda9aae"
187
187
  },
188
188
  {
189
189
  "path": "harness-submit/reference.md",
@@ -191,19 +191,23 @@
191
191
  },
192
192
  {
193
193
  "path": "harness-submit/SKILL.md",
194
- "sha256": "b141059d4b16a8e0e2f6b552bcb6214ba4a19a4e91f9bc8965c22fef6083a5d6"
194
+ "sha256": "4870e75fef288213a071615253eadde8c6f021ce7167c5930b9a2f329b0c2750"
195
195
  },
196
196
  {
197
197
  "path": "harness-sync/reference.md",
198
- "sha256": "1a1b817c8782b378d86d6282c19aea391a068f6384c2f0b2db3c6f8135922f0f"
198
+ "sha256": "6e8093c7d8d874e159d027b10dbb65f299bd51c48803c54b92db1a66c6d9c54d"
199
199
  },
200
200
  {
201
201
  "path": "harness-sync/SKILL.md",
202
- "sha256": "b61f384bbba952c51112e2931e6b1c561fc7753c4f51d19f8d3f21dcfe4d1730"
202
+ "sha256": "6007e8d08e95910fe672851a30f7c30e6d499a47bdb315298afff03d4b6404ec"
203
203
  },
204
204
  {
205
205
  "path": "harness-test/checklist.md",
206
- "sha256": "a8bd0424bfc64fc60f2a54927a381ce25c088bb267f01c88dce9c409d6b2f010"
206
+ "sha256": "66f96a4e5cc39ab7ec736994a23dac88e349c63845659d595737100b9584b84e"
207
+ },
208
+ {
209
+ "path": "harness-test/pitfalls-java.md",
210
+ "sha256": "85c5ab2a2706960093954382265b5fbdfa63f794d857868322d4cebc36936908"
207
211
  },
208
212
  {
209
213
  "path": "harness-test/pitfalls.md",
@@ -211,7 +215,7 @@
211
215
  },
212
216
  {
213
217
  "path": "harness-test/reference.md",
214
- "sha256": "b85b30256558a40113f0c2442d32aa9f28606cc975c32c72b7eedb0e655ea275"
218
+ "sha256": "37d781daf890ff86663e0fe8c0449c97e40ec512c3515a73923f7fb162e9c180"
215
219
  },
216
220
  {
217
221
  "path": "harness-test/scripts/runtime-helpers.mjs",
@@ -219,11 +223,11 @@
219
223
  },
220
224
  {
221
225
  "path": "harness-test/SKILL.md",
222
- "sha256": "c9a765926545dd9461c812ab4c57729493cb3c6d7c9e3c4cf4e2574668c73877"
226
+ "sha256": "f0ab0361522181a37075c6ebcf19ba7600c112b6e506d4ccd036a0f08928cf0b"
223
227
  },
224
228
  {
225
229
  "path": "protocols/archive-report-protocol.md",
226
- "sha256": "587047dfb6f308079d2bd9074f6b396570dfb11aecc401b0c63ae8edb5e806e4"
230
+ "sha256": "c6677d730908580dfc58f954df6c950327a4928e283290e24d9ad715a5e54ae5"
227
231
  },
228
232
  {
229
233
  "path": "protocols/evidence-based-reporting-protocol.md",
@@ -231,15 +235,15 @@
231
235
  },
232
236
  {
233
237
  "path": "protocols/ledger-protocol.md",
234
- "sha256": "6d47d884bc3858bf50c831ecb4c2db263680b41f6dcf2bc3f9b2100330ce9cac"
238
+ "sha256": "50f9deffcf71de009c56bd2cdd44fb05c7b18faf19ec56b00ff76e8ce897ecf7"
235
239
  },
236
240
  {
237
241
  "path": "protocols/powershell-protocol.md",
238
- "sha256": "04364d1f32290f454a23df1151bb9d71042c1dd3dc3312f746bb83090754813b"
242
+ "sha256": "f723f18eee08125e75f387e655f7e604eb603f636cd6809dd6b5948748f32d04"
239
243
  },
240
244
  {
241
245
  "path": "protocols/report-pipeline-protocol.md",
242
- "sha256": "2abfa402c006e2466514893e05d57ba7f71588f5af6b36b30a17abd3dfa8d710"
246
+ "sha256": "1a54a6a1540e9da41cf3466eee8a3810eb2b3ae732ab87f295d1832d135da6fb"
243
247
  },
244
248
  {
245
249
  "path": "protocols/sensitive-info-protocol.md",
@@ -247,7 +251,7 @@
247
251
  },
248
252
  {
249
253
  "path": "protocols/state-layout-protocol.md",
250
- "sha256": "73fcaa67efb89714fd62896a7ce6b4e2932ea24cfcbf5c4e1faea5a451c97076"
254
+ "sha256": "b92c062d145b6927bcf8b50cc962a04eb04604b845bae09309416574ba40f05f"
251
255
  },
252
256
  {
253
257
  "path": "protocols/submit-protocol.md",
@@ -263,11 +267,11 @@
263
267
  },
264
268
  {
265
269
  "path": "scripts/harness_archive.py",
266
- "sha256": "b48bea12431e4122bae5b3f776b518fe4b48b873ba85b1c4e09a29f15a046ad2"
270
+ "sha256": "52f3a7aef19cc84d4820f90d0fa320e7e963e7b7710f607954cd67608c67be55"
267
271
  },
268
272
  {
269
273
  "path": "scripts/harness_change.py",
270
- "sha256": "e15697ef34685c9cd55d21dac4e2de21815ff3d984605a47b4e9cac5b4829693"
274
+ "sha256": "87c4d8fac9d3768671dd46aaa55d068eb648ddf0af37ddb5426de8c745534fa3"
271
275
  },
272
276
  {
273
277
  "path": "scripts/harness_check_gate.py",
@@ -275,19 +279,27 @@
275
279
  },
276
280
  {
277
281
  "path": "scripts/harness_deploy.py",
278
- "sha256": "54f1bcdae1326588db65eec20cc650c41365b14ceb55655430ddde8343b60798"
282
+ "sha256": "6b43b03bf414834df348e89db4e4e32960ce8a730c4c4c8a0202a87842da1758"
279
283
  },
280
284
  {
281
285
  "path": "scripts/harness_events.py",
282
- "sha256": "5ebe48d649ed3040245c676ea38ecb2a443582228340c4631481da2e853cd9a0"
286
+ "sha256": "700ce2741ec80144c8880cdb85c8026dc9c7aec9bcbdee1c1d3ccb77aed58648"
283
287
  },
284
288
  {
285
289
  "path": "scripts/harness_gate.py",
286
- "sha256": "fdc596d51116e6fce58baad24673c94fc04b78b4af8781ee8afd7b2cdb3121eb"
290
+ "sha256": "5fdb48040a396403dc9584561316d6181b9b70c5234407d662093bad739cc3bc"
291
+ },
292
+ {
293
+ "path": "scripts/harness_integration.py",
294
+ "sha256": "a5e616ed1ba04b390d431132f6eeedef8789b87bee1e1512667e696f6a970471"
287
295
  },
288
296
  {
289
297
  "path": "scripts/harness_ledger.py",
290
- "sha256": "36a9921ff70e17b3c8946db1846bf447607822ad90e17351b88efab189d15b41"
298
+ "sha256": "79815b4a1fb6f5c43d63dcb64a4a9cde26ccd7f6206c86ba3d0c795854668ee5"
299
+ },
300
+ {
301
+ "path": "scripts/harness_paths.py",
302
+ "sha256": "75560c0141172b335811014320001a299846e4fba45dd0589cba86da058ab01a"
291
303
  },
292
304
  {
293
305
  "path": "scripts/harness_preflight.py",
@@ -295,7 +307,11 @@
295
307
  },
296
308
  {
297
309
  "path": "scripts/harness_profile.py",
298
- "sha256": "da31a79b128e4c186f17424ec2ad6feb7fb0aaec46fb79fba0c31098596751b4"
310
+ "sha256": "52c9fb0d7c22823f06a8fd49bc1b648b0bda974f0851e8a12b0959be7c1c4183"
311
+ },
312
+ {
313
+ "path": "scripts/harness_review.py",
314
+ "sha256": "78009e09b79867a13c66a8c71114b6cd04fe75c72054f5ec35d63c7be990bb04"
299
315
  },
300
316
  {
301
317
  "path": "scripts/harness_service.py",
@@ -305,9 +321,13 @@
305
321
  "path": "scripts/harness_state.py",
306
322
  "sha256": "27073a1d7b1ea6d54a75bf6e679eb250a3507c95311101b60a1c4d32e00f909e"
307
323
  },
324
+ {
325
+ "path": "scripts/harness_sync.py",
326
+ "sha256": "3ab54718ab8448f7bdac76119806a885e0f19cece05b0d8108128dc7d895d6e1"
327
+ },
308
328
  {
309
329
  "path": "scripts/harness_test_guard.py",
310
- "sha256": "ee3306a56a9ee7adf37ad4bcd26505c6d2c21fcdcb35b88cf5951c05a8f3b615"
330
+ "sha256": "76713c4af83486b513979f40ba8055fefd0ff10b487d31de9d7f9d9a4ee2dce0"
311
331
  },
312
332
  {
313
333
  "path": "scripts/harness_workflow_policy.py",