@hunter-harness/workflow-harness 0.2.15 → 0.2.17

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 (290) hide show
  1. package/harness/bundles/general/claude-code/.harness-build.json +1 -1
  2. package/harness/bundles/general/claude-code/CONTEXT.md +14 -1
  3. package/harness/bundles/general/claude-code/README.md +1 -1
  4. package/harness/bundles/general/claude-code/harness-archive/SKILL.md +7 -4
  5. package/harness/bundles/general/claude-code/harness-archive/reference.md +1 -1
  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 +4 -2
  8. package/harness/bundles/general/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py +16 -1
  9. package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +4 -2
  10. package/harness/bundles/general/claude-code/harness-plan/SKILL.md +8 -4
  11. package/harness/bundles/general/claude-code/harness-plan/checklist.md +5 -5
  12. package/harness/bundles/general/claude-code/harness-review/SKILL.md +5 -2
  13. package/harness/bundles/general/claude-code/harness-review/reference.md +13 -0
  14. package/harness/bundles/general/claude-code/harness-run/SKILL.md +7 -3
  15. package/harness/bundles/general/claude-code/harness-run/checklist.md +4 -4
  16. package/harness/bundles/general/claude-code/harness-submit/SKILL.md +6 -3
  17. package/harness/bundles/general/claude-code/harness-submit/checklist.md +5 -5
  18. package/harness/bundles/general/claude-code/harness-submit/reference.md +3 -3
  19. package/harness/bundles/general/claude-code/harness-sync/SKILL.md +4 -2
  20. package/harness/bundles/general/claude-code/harness-sync/reference.md +1 -1
  21. package/harness/bundles/general/claude-code/harness-test/SKILL.md +7 -4
  22. package/harness/bundles/general/claude-code/harness-test/checklist.md +8 -5
  23. package/harness/bundles/general/claude-code/harness-test/pitfalls.md +1 -1
  24. package/harness/bundles/general/claude-code/harness-test/reference.md +28 -13
  25. package/harness/bundles/general/claude-code/protocols/submit-protocol.md +1 -1
  26. package/harness/bundles/general/claude-code/scripts/harness_deploy.py +7 -0
  27. package/harness/bundles/general/claude-code/scripts/harness_gate.py +75 -0
  28. package/harness/bundles/general/claude-code/scripts/harness_integration.py +64 -2
  29. package/harness/bundles/general/claude-code/scripts/harness_ledger.py +70 -3
  30. package/harness/bundles/general/claude-code/scripts/harness_paths.py +17 -0
  31. package/harness/bundles/general/claude-code/scripts/harness_plan_finalize.py +306 -7
  32. package/harness/bundles/general/claude-code/scripts/harness_profile.py +58 -7
  33. package/harness/bundles/general/claude-code/scripts/harness_review.py +107 -0
  34. package/harness/bundles/general/claude-code/scripts/harness_test_cleanup.py +175 -0
  35. package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
  36. package/harness/bundles/general/codebuddy/CONTEXT.md +14 -1
  37. package/harness/bundles/general/codebuddy/README.md +1 -1
  38. package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +7 -4
  39. package/harness/bundles/general/codebuddy/harness-archive/reference.md +1 -1
  40. package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +4 -2
  41. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +4 -2
  42. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge.py +16 -1
  43. package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +4 -2
  44. package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +8 -4
  45. package/harness/bundles/general/codebuddy/harness-plan/checklist.md +5 -5
  46. package/harness/bundles/general/codebuddy/harness-review/SKILL.md +5 -2
  47. package/harness/bundles/general/codebuddy/harness-review/reference.md +13 -0
  48. package/harness/bundles/general/codebuddy/harness-run/SKILL.md +7 -3
  49. package/harness/bundles/general/codebuddy/harness-run/checklist.md +4 -4
  50. package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +6 -3
  51. package/harness/bundles/general/codebuddy/harness-submit/checklist.md +5 -5
  52. package/harness/bundles/general/codebuddy/harness-submit/reference.md +3 -3
  53. package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +4 -2
  54. package/harness/bundles/general/codebuddy/harness-sync/reference.md +1 -1
  55. package/harness/bundles/general/codebuddy/harness-test/SKILL.md +7 -4
  56. package/harness/bundles/general/codebuddy/harness-test/checklist.md +8 -5
  57. package/harness/bundles/general/codebuddy/harness-test/pitfalls.md +1 -1
  58. package/harness/bundles/general/codebuddy/harness-test/reference.md +28 -13
  59. package/harness/bundles/general/codebuddy/protocols/submit-protocol.md +1 -1
  60. package/harness/bundles/general/codebuddy/scripts/harness_deploy.py +7 -0
  61. package/harness/bundles/general/codebuddy/scripts/harness_gate.py +75 -0
  62. package/harness/bundles/general/codebuddy/scripts/harness_integration.py +64 -2
  63. package/harness/bundles/general/codebuddy/scripts/harness_ledger.py +70 -3
  64. package/harness/bundles/general/codebuddy/scripts/harness_paths.py +17 -0
  65. package/harness/bundles/general/codebuddy/scripts/harness_plan_finalize.py +306 -7
  66. package/harness/bundles/general/codebuddy/scripts/harness_profile.py +58 -7
  67. package/harness/bundles/general/codebuddy/scripts/harness_review.py +107 -0
  68. package/harness/bundles/general/codebuddy/scripts/harness_test_cleanup.py +175 -0
  69. package/harness/bundles/general/codex/.harness-build.json +1 -1
  70. package/harness/bundles/general/codex/CONTEXT.md +14 -1
  71. package/harness/bundles/general/codex/README.md +1 -1
  72. package/harness/bundles/general/codex/harness-archive/SKILL.md +7 -4
  73. package/harness/bundles/general/codex/harness-archive/reference.md +1 -1
  74. package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +4 -2
  75. package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +4 -2
  76. package/harness/bundles/general/codex/harness-knowledge-ingest/scripts/harness_knowledge.py +16 -1
  77. package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +4 -2
  78. package/harness/bundles/general/codex/harness-plan/SKILL.md +8 -4
  79. package/harness/bundles/general/codex/harness-plan/checklist.md +5 -5
  80. package/harness/bundles/general/codex/harness-review/SKILL.md +5 -2
  81. package/harness/bundles/general/codex/harness-review/reference.md +13 -0
  82. package/harness/bundles/general/codex/harness-run/SKILL.md +7 -3
  83. package/harness/bundles/general/codex/harness-run/checklist.md +4 -4
  84. package/harness/bundles/general/codex/harness-submit/SKILL.md +6 -3
  85. package/harness/bundles/general/codex/harness-submit/checklist.md +5 -5
  86. package/harness/bundles/general/codex/harness-submit/reference.md +3 -3
  87. package/harness/bundles/general/codex/harness-sync/SKILL.md +4 -2
  88. package/harness/bundles/general/codex/harness-sync/reference.md +1 -1
  89. package/harness/bundles/general/codex/harness-test/SKILL.md +7 -4
  90. package/harness/bundles/general/codex/harness-test/checklist.md +8 -5
  91. package/harness/bundles/general/codex/harness-test/pitfalls.md +1 -1
  92. package/harness/bundles/general/codex/harness-test/reference.md +28 -13
  93. package/harness/bundles/general/codex/protocols/submit-protocol.md +1 -1
  94. package/harness/bundles/general/codex/scripts/harness_deploy.py +7 -0
  95. package/harness/bundles/general/codex/scripts/harness_gate.py +75 -0
  96. package/harness/bundles/general/codex/scripts/harness_integration.py +64 -2
  97. package/harness/bundles/general/codex/scripts/harness_ledger.py +70 -3
  98. package/harness/bundles/general/codex/scripts/harness_paths.py +17 -0
  99. package/harness/bundles/general/codex/scripts/harness_plan_finalize.py +306 -7
  100. package/harness/bundles/general/codex/scripts/harness_profile.py +58 -7
  101. package/harness/bundles/general/codex/scripts/harness_review.py +107 -0
  102. package/harness/bundles/general/codex/scripts/harness_test_cleanup.py +175 -0
  103. package/harness/bundles/general/cursor/.harness-build.json +1 -1
  104. package/harness/bundles/general/cursor/CONTEXT.md +14 -1
  105. package/harness/bundles/general/cursor/README.md +1 -1
  106. package/harness/bundles/general/cursor/harness-archive/SKILL.md +7 -4
  107. package/harness/bundles/general/cursor/harness-archive/reference.md +1 -1
  108. package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +4 -2
  109. package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +4 -2
  110. package/harness/bundles/general/cursor/harness-knowledge-ingest/scripts/harness_knowledge.py +16 -1
  111. package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +4 -2
  112. package/harness/bundles/general/cursor/harness-plan/SKILL.md +8 -4
  113. package/harness/bundles/general/cursor/harness-plan/checklist.md +5 -5
  114. package/harness/bundles/general/cursor/harness-review/SKILL.md +5 -2
  115. package/harness/bundles/general/cursor/harness-review/reference.md +13 -0
  116. package/harness/bundles/general/cursor/harness-run/SKILL.md +7 -3
  117. package/harness/bundles/general/cursor/harness-run/checklist.md +4 -4
  118. package/harness/bundles/general/cursor/harness-submit/SKILL.md +6 -3
  119. package/harness/bundles/general/cursor/harness-submit/checklist.md +5 -5
  120. package/harness/bundles/general/cursor/harness-submit/reference.md +3 -3
  121. package/harness/bundles/general/cursor/harness-sync/SKILL.md +4 -2
  122. package/harness/bundles/general/cursor/harness-sync/reference.md +1 -1
  123. package/harness/bundles/general/cursor/harness-test/SKILL.md +7 -4
  124. package/harness/bundles/general/cursor/harness-test/checklist.md +8 -5
  125. package/harness/bundles/general/cursor/harness-test/pitfalls.md +1 -1
  126. package/harness/bundles/general/cursor/harness-test/reference.md +28 -13
  127. package/harness/bundles/general/cursor/protocols/submit-protocol.md +1 -1
  128. package/harness/bundles/general/cursor/scripts/harness_deploy.py +7 -0
  129. package/harness/bundles/general/cursor/scripts/harness_gate.py +75 -0
  130. package/harness/bundles/general/cursor/scripts/harness_integration.py +64 -2
  131. package/harness/bundles/general/cursor/scripts/harness_ledger.py +70 -3
  132. package/harness/bundles/general/cursor/scripts/harness_paths.py +17 -0
  133. package/harness/bundles/general/cursor/scripts/harness_plan_finalize.py +306 -7
  134. package/harness/bundles/general/cursor/scripts/harness_profile.py +58 -7
  135. package/harness/bundles/general/cursor/scripts/harness_review.py +107 -0
  136. package/harness/bundles/general/cursor/scripts/harness_test_cleanup.py +175 -0
  137. package/harness/bundles/java/claude-code/.harness-build.json +1 -1
  138. package/harness/bundles/java/claude-code/CONTEXT.md +14 -1
  139. package/harness/bundles/java/claude-code/README.md +1 -1
  140. package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +5 -2
  141. package/harness/bundles/java/claude-code/harness-archive/SKILL.md +7 -4
  142. package/harness/bundles/java/claude-code/harness-archive/reference.md +1 -1
  143. package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +4 -2
  144. package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +4 -2
  145. package/harness/bundles/java/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py +16 -1
  146. package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +4 -2
  147. package/harness/bundles/java/claude-code/harness-package/SKILL.md +5 -2
  148. package/harness/bundles/java/claude-code/harness-package/checklist.md +4 -4
  149. package/harness/bundles/java/claude-code/harness-plan/SKILL.md +8 -4
  150. package/harness/bundles/java/claude-code/harness-plan/checklist.md +5 -5
  151. package/harness/bundles/java/claude-code/harness-review/SKILL.md +5 -2
  152. package/harness/bundles/java/claude-code/harness-review/reference.md +13 -0
  153. package/harness/bundles/java/claude-code/harness-run/SKILL.md +7 -3
  154. package/harness/bundles/java/claude-code/harness-run/checklist.md +4 -4
  155. package/harness/bundles/java/claude-code/harness-submit/SKILL.md +6 -3
  156. package/harness/bundles/java/claude-code/harness-submit/checklist.md +5 -5
  157. package/harness/bundles/java/claude-code/harness-submit/reference.md +3 -3
  158. package/harness/bundles/java/claude-code/harness-sync/SKILL.md +4 -2
  159. package/harness/bundles/java/claude-code/harness-sync/reference.md +1 -1
  160. package/harness/bundles/java/claude-code/harness-test/SKILL.md +8 -5
  161. package/harness/bundles/java/claude-code/harness-test/pitfalls.md +1 -1
  162. package/harness/bundles/java/claude-code/harness-test/reference.md +1 -1
  163. package/harness/bundles/java/claude-code/protocols/submit-protocol.md +1 -1
  164. package/harness/bundles/java/claude-code/scripts/harness_deploy.py +7 -0
  165. package/harness/bundles/java/claude-code/scripts/harness_gate.py +75 -0
  166. package/harness/bundles/java/claude-code/scripts/harness_integration.py +64 -2
  167. package/harness/bundles/java/claude-code/scripts/harness_ledger.py +70 -3
  168. package/harness/bundles/java/claude-code/scripts/harness_paths.py +17 -0
  169. package/harness/bundles/java/claude-code/scripts/harness_plan_finalize.py +306 -7
  170. package/harness/bundles/java/claude-code/scripts/harness_profile.py +58 -7
  171. package/harness/bundles/java/claude-code/scripts/harness_review.py +107 -0
  172. package/harness/bundles/java/claude-code/scripts/harness_test_cleanup.py +175 -0
  173. package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
  174. package/harness/bundles/java/codebuddy/CONTEXT.md +14 -1
  175. package/harness/bundles/java/codebuddy/README.md +1 -1
  176. package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +5 -2
  177. package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +7 -4
  178. package/harness/bundles/java/codebuddy/harness-archive/reference.md +1 -1
  179. package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +4 -2
  180. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +4 -2
  181. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge.py +16 -1
  182. package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +4 -2
  183. package/harness/bundles/java/codebuddy/harness-package/SKILL.md +5 -2
  184. package/harness/bundles/java/codebuddy/harness-package/checklist.md +4 -4
  185. package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +8 -4
  186. package/harness/bundles/java/codebuddy/harness-plan/checklist.md +5 -5
  187. package/harness/bundles/java/codebuddy/harness-review/SKILL.md +5 -2
  188. package/harness/bundles/java/codebuddy/harness-review/reference.md +13 -0
  189. package/harness/bundles/java/codebuddy/harness-run/SKILL.md +7 -3
  190. package/harness/bundles/java/codebuddy/harness-run/checklist.md +4 -4
  191. package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +6 -3
  192. package/harness/bundles/java/codebuddy/harness-submit/checklist.md +5 -5
  193. package/harness/bundles/java/codebuddy/harness-submit/reference.md +3 -3
  194. package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +4 -2
  195. package/harness/bundles/java/codebuddy/harness-sync/reference.md +1 -1
  196. package/harness/bundles/java/codebuddy/harness-test/SKILL.md +8 -5
  197. package/harness/bundles/java/codebuddy/harness-test/pitfalls.md +1 -1
  198. package/harness/bundles/java/codebuddy/harness-test/reference.md +1 -1
  199. package/harness/bundles/java/codebuddy/protocols/submit-protocol.md +1 -1
  200. package/harness/bundles/java/codebuddy/scripts/harness_deploy.py +7 -0
  201. package/harness/bundles/java/codebuddy/scripts/harness_gate.py +75 -0
  202. package/harness/bundles/java/codebuddy/scripts/harness_integration.py +64 -2
  203. package/harness/bundles/java/codebuddy/scripts/harness_ledger.py +70 -3
  204. package/harness/bundles/java/codebuddy/scripts/harness_paths.py +17 -0
  205. package/harness/bundles/java/codebuddy/scripts/harness_plan_finalize.py +306 -7
  206. package/harness/bundles/java/codebuddy/scripts/harness_profile.py +58 -7
  207. package/harness/bundles/java/codebuddy/scripts/harness_review.py +107 -0
  208. package/harness/bundles/java/codebuddy/scripts/harness_test_cleanup.py +175 -0
  209. package/harness/bundles/java/codex/.harness-build.json +1 -1
  210. package/harness/bundles/java/codex/CONTEXT.md +14 -1
  211. package/harness/bundles/java/codex/README.md +1 -1
  212. package/harness/bundles/java/codex/harness-apidoc/SKILL.md +5 -2
  213. package/harness/bundles/java/codex/harness-archive/SKILL.md +7 -4
  214. package/harness/bundles/java/codex/harness-archive/reference.md +1 -1
  215. package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +4 -2
  216. package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +4 -2
  217. package/harness/bundles/java/codex/harness-knowledge-ingest/scripts/harness_knowledge.py +16 -1
  218. package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +4 -2
  219. package/harness/bundles/java/codex/harness-package/SKILL.md +5 -2
  220. package/harness/bundles/java/codex/harness-package/checklist.md +4 -4
  221. package/harness/bundles/java/codex/harness-plan/SKILL.md +8 -4
  222. package/harness/bundles/java/codex/harness-plan/checklist.md +5 -5
  223. package/harness/bundles/java/codex/harness-review/SKILL.md +5 -2
  224. package/harness/bundles/java/codex/harness-review/reference.md +13 -0
  225. package/harness/bundles/java/codex/harness-run/SKILL.md +7 -3
  226. package/harness/bundles/java/codex/harness-run/checklist.md +4 -4
  227. package/harness/bundles/java/codex/harness-submit/SKILL.md +6 -3
  228. package/harness/bundles/java/codex/harness-submit/checklist.md +5 -5
  229. package/harness/bundles/java/codex/harness-submit/reference.md +3 -3
  230. package/harness/bundles/java/codex/harness-sync/SKILL.md +4 -2
  231. package/harness/bundles/java/codex/harness-sync/reference.md +1 -1
  232. package/harness/bundles/java/codex/harness-test/SKILL.md +8 -5
  233. package/harness/bundles/java/codex/harness-test/pitfalls.md +1 -1
  234. package/harness/bundles/java/codex/harness-test/reference.md +1 -1
  235. package/harness/bundles/java/codex/protocols/submit-protocol.md +1 -1
  236. package/harness/bundles/java/codex/scripts/harness_deploy.py +7 -0
  237. package/harness/bundles/java/codex/scripts/harness_gate.py +75 -0
  238. package/harness/bundles/java/codex/scripts/harness_integration.py +64 -2
  239. package/harness/bundles/java/codex/scripts/harness_ledger.py +70 -3
  240. package/harness/bundles/java/codex/scripts/harness_paths.py +17 -0
  241. package/harness/bundles/java/codex/scripts/harness_plan_finalize.py +306 -7
  242. package/harness/bundles/java/codex/scripts/harness_profile.py +58 -7
  243. package/harness/bundles/java/codex/scripts/harness_review.py +107 -0
  244. package/harness/bundles/java/codex/scripts/harness_test_cleanup.py +175 -0
  245. package/harness/bundles/java/cursor/.harness-build.json +1 -1
  246. package/harness/bundles/java/cursor/CONTEXT.md +14 -1
  247. package/harness/bundles/java/cursor/README.md +1 -1
  248. package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +5 -2
  249. package/harness/bundles/java/cursor/harness-archive/SKILL.md +7 -4
  250. package/harness/bundles/java/cursor/harness-archive/reference.md +1 -1
  251. package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +4 -2
  252. package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +4 -2
  253. package/harness/bundles/java/cursor/harness-knowledge-ingest/scripts/harness_knowledge.py +16 -1
  254. package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +4 -2
  255. package/harness/bundles/java/cursor/harness-package/SKILL.md +5 -2
  256. package/harness/bundles/java/cursor/harness-package/checklist.md +4 -4
  257. package/harness/bundles/java/cursor/harness-plan/SKILL.md +8 -4
  258. package/harness/bundles/java/cursor/harness-plan/checklist.md +5 -5
  259. package/harness/bundles/java/cursor/harness-review/SKILL.md +5 -2
  260. package/harness/bundles/java/cursor/harness-review/reference.md +13 -0
  261. package/harness/bundles/java/cursor/harness-run/SKILL.md +7 -3
  262. package/harness/bundles/java/cursor/harness-run/checklist.md +4 -4
  263. package/harness/bundles/java/cursor/harness-submit/SKILL.md +6 -3
  264. package/harness/bundles/java/cursor/harness-submit/checklist.md +5 -5
  265. package/harness/bundles/java/cursor/harness-submit/reference.md +3 -3
  266. package/harness/bundles/java/cursor/harness-sync/SKILL.md +4 -2
  267. package/harness/bundles/java/cursor/harness-sync/reference.md +1 -1
  268. package/harness/bundles/java/cursor/harness-test/SKILL.md +8 -5
  269. package/harness/bundles/java/cursor/harness-test/pitfalls.md +1 -1
  270. package/harness/bundles/java/cursor/harness-test/reference.md +1 -1
  271. package/harness/bundles/java/cursor/protocols/submit-protocol.md +1 -1
  272. package/harness/bundles/java/cursor/scripts/harness_deploy.py +7 -0
  273. package/harness/bundles/java/cursor/scripts/harness_gate.py +75 -0
  274. package/harness/bundles/java/cursor/scripts/harness_integration.py +64 -2
  275. package/harness/bundles/java/cursor/scripts/harness_ledger.py +70 -3
  276. package/harness/bundles/java/cursor/scripts/harness_paths.py +17 -0
  277. package/harness/bundles/java/cursor/scripts/harness_plan_finalize.py +306 -7
  278. package/harness/bundles/java/cursor/scripts/harness_profile.py +58 -7
  279. package/harness/bundles/java/cursor/scripts/harness_review.py +107 -0
  280. package/harness/bundles/java/cursor/scripts/harness_test_cleanup.py +175 -0
  281. package/harness/manifests/general/claude-code.json +38 -34
  282. package/harness/manifests/general/codebuddy.json +38 -34
  283. package/harness/manifests/general/codex.json +38 -34
  284. package/harness/manifests/general/cursor.json +38 -34
  285. package/harness/manifests/java/claude-code.json +40 -36
  286. package/harness/manifests/java/codebuddy.json +40 -36
  287. package/harness/manifests/java/codex.json +40 -36
  288. package/harness/manifests/java/cursor.json +40 -36
  289. package/hunter-workflow-family.json +2 -2
  290. package/package.json +1 -1
@@ -14,6 +14,7 @@ Python 3.10+, stdlib only.
14
14
  from __future__ import annotations
15
15
 
16
16
  import argparse
17
+ import datetime as dt
17
18
  import hashlib
18
19
  import json
19
20
  import os
@@ -270,6 +271,112 @@ def _emit(payload: Any, *, as_json: bool) -> int:
270
271
  return 0 if payload.get("ok") else 1
271
272
 
272
273
 
274
+ def dispatch_review(
275
+ *,
276
+ change_dir: Path,
277
+ run_id: str,
278
+ budget_seconds: int = 300,
279
+ ) -> dict[str, Any]:
280
+ """C11: dispatch a bounded review task.
281
+
282
+ Returns reviewTaskId / deadline / heartbeatAt. The caller is expected to
283
+ poll the review subagent and collect partial findings on timeout.
284
+ """
285
+ now = dt.datetime.now(dt.timezone.utc).astimezone()
286
+ task_id = f"review-{uuid.uuid4().hex}"
287
+ deadline = now + dt.timedelta(seconds=budget_seconds)
288
+ # heartbeat at midpoint of the budget
289
+ heartbeat = now + dt.timedelta(seconds=budget_seconds // 2)
290
+ return {
291
+ "ok": True,
292
+ "code": "DISPATCHED",
293
+ "reviewTaskId": task_id,
294
+ "runId": run_id,
295
+ "deadline": deadline.isoformat(timespec="milliseconds"),
296
+ "heartbeatAt": heartbeat.isoformat(timespec="milliseconds"),
297
+ "budgetSeconds": budget_seconds,
298
+ }
299
+
300
+
301
+ def collect_partial_findings(
302
+ *,
303
+ change_dir: Path,
304
+ run_id: str,
305
+ completed_dimensions: list[str],
306
+ pending_dimensions: list[str],
307
+ ) -> dict[str, Any]:
308
+ """C11: collect partial findings after timeout — completed dimensions only.
309
+
310
+ Applies the degradation matrix to decide the fallback path.
311
+ """
312
+ matrix = degradation_matrix(
313
+ subagent_timed_out=bool(pending_dimensions),
314
+ main_session_available=True,
315
+ )
316
+ return {
317
+ "ok": True,
318
+ "code": "PARTIAL_FINDINGS",
319
+ "runId": run_id,
320
+ "completedDimensions": list(completed_dimensions),
321
+ "pendingDimensions": list(pending_dimensions),
322
+ "degradationMatrix": matrix,
323
+ }
324
+
325
+
326
+ def degradation_matrix(
327
+ *,
328
+ subagent_timed_out: bool,
329
+ main_session_available: bool,
330
+ ) -> dict[str, Any]:
331
+ """C11: degradation matrix — subagent timeout → main session; main fail → ADVISORY."""
332
+ if not subagent_timed_out:
333
+ return {"fallback": "none", "status": "OK"}
334
+ if main_session_available:
335
+ return {"fallback": "main-session", "status": "DEGRADED"}
336
+ return {"fallback": "advisory", "status": "ADVISORY"}
337
+
338
+
339
+ def validate_codegraph_identity(
340
+ *,
341
+ response: dict[str, Any],
342
+ expected_repository_id: str,
343
+ expected_head: str,
344
+ ) -> dict[str, Any]:
345
+ """C12: validate CodeGraph identity — repositoryId/indexedHead must match.
346
+
347
+ On mismatch, signal CODEGRAPH_IDENTITY_MISMATCH with fallback to Grep/Glob + Read.
348
+ """
349
+ repo_id = response.get("repositoryId")
350
+ indexed_head = response.get("indexedHead")
351
+ indexed_at = response.get("indexedAt")
352
+ if (
353
+ repo_id == expected_repository_id
354
+ and indexed_head == expected_head
355
+ and indexed_at
356
+ ):
357
+ return {
358
+ "ok": True,
359
+ "code": "IDENTITY_OK",
360
+ "repositoryId": repo_id,
361
+ "indexedHead": indexed_head,
362
+ "indexedAt": indexed_at,
363
+ }
364
+ return {
365
+ "ok": False,
366
+ "code": "CODEGRAPH_IDENTITY_MISMATCH",
367
+ "expected": {
368
+ "repositoryId": expected_repository_id,
369
+ "indexedHead": expected_head,
370
+ },
371
+ "actual": {
372
+ "repositoryId": repo_id,
373
+ "indexedHead": indexed_head,
374
+ "indexedAt": indexed_at,
375
+ },
376
+ "fallback": "grep-glob-read",
377
+ }
378
+
379
+
273
380
  def cmd_validate_findings(args: argparse.Namespace) -> int:
274
381
  doc = _read_json(Path(args.input))
275
382
  problems = validate_findings(doc)
@@ -0,0 +1,175 @@
1
+ #!/usr/bin/env python3
2
+ """Controlled cleanup helper for test fixtures (retro §5.23).
3
+
4
+ Provides a host-policy-friendly entry point for removing gitignored test
5
+ fixtures (e.g. .pytest_data) within an execution root. Performs realpath
6
+ containment, rejects symlink/reparse escapes, lists exact counts before
7
+ deletion, and outputs a structured receipt.
8
+ """
9
+ from __future__ import annotations
10
+
11
+ import argparse
12
+ import json
13
+ import os
14
+ import shutil
15
+ import sys
16
+ from pathlib import Path
17
+ from typing import Any
18
+
19
+ if hasattr(sys.stdout, "reconfigure"):
20
+ sys.stdout.reconfigure(encoding="utf-8")
21
+ if hasattr(sys.stderr, "reconfigure"):
22
+ sys.stderr.reconfigure(encoding="utf-8")
23
+
24
+
25
+ def _resolve_within(execution_root: Path, rel: str) -> Path | None:
26
+ """Resolve rel under execution_root, rejecting escapes and symlinks."""
27
+ if not rel or rel.startswith("/"):
28
+ return None
29
+ # Reject absolute paths (Windows drive letter or POSIX).
30
+ if len(rel) >= 2 and rel[1] == ":":
31
+ return None
32
+ parts = rel.replace("\\", "/").split("/")
33
+ if ".." in parts:
34
+ return None
35
+ candidate = (execution_root / rel).resolve(strict=False)
36
+ # Containment check: candidate must be under execution_root.
37
+ try:
38
+ candidate.relative_to(execution_root.resolve(strict=False))
39
+ except ValueError:
40
+ return None
41
+ # Reject symlink/reparse escape: if the path is a symlink, check its target.
42
+ if candidate.is_symlink():
43
+ target = Path(os.readlink(candidate)).resolve(strict=False)
44
+ try:
45
+ target.relative_to(execution_root.resolve(strict=False))
46
+ except ValueError:
47
+ return None
48
+ # Even if target is inside, a symlinked cleanup root is suspicious;
49
+ # reject to avoid following links into unexpected locations.
50
+ return None
51
+ return candidate
52
+
53
+
54
+ def _count_files(root: Path) -> tuple[int, int]:
55
+ """Count files and total bytes under root."""
56
+ count = 0
57
+ total = 0
58
+ for dirpath, _dirs, files in os.walk(root):
59
+ for name in files:
60
+ fp = Path(dirpath) / name
61
+ try:
62
+ total += fp.stat().st_size
63
+ count += 1
64
+ except OSError:
65
+ continue
66
+ return count, total
67
+
68
+
69
+ def cleanup(execution_root: Path, cleanup_roots: list[str]) -> dict[str, Any]:
70
+ """Remove allowlisted cleanup roots within execution_root.
71
+
72
+ Returns a structured receipt. Any path escape, symlink escape, or
73
+ unallowed root results in ok=false with zero files removed.
74
+ """
75
+ execution_root = Path(execution_root).resolve(strict=False)
76
+ if not execution_root.is_dir():
77
+ return {
78
+ "ok": False,
79
+ "code": "EXECUTION_ROOT_MISSING",
80
+ "executionRoot": str(execution_root),
81
+ "removedFiles": 0,
82
+ "removedBytes": 0,
83
+ "rejectedEscapes": [],
84
+ }
85
+
86
+ rejected: list[dict[str, str]] = []
87
+ removed_files = 0
88
+ removed_bytes = 0
89
+ cleaned: list[str] = []
90
+
91
+ for rel in cleanup_roots:
92
+ target = _resolve_within(execution_root, rel)
93
+ if target is None:
94
+ rejected.append({"path": rel, "reason": "PATH_ESCAPE_REJECTED"})
95
+ continue
96
+ if not target.exists():
97
+ # Already absent — idempotent reentry.
98
+ continue
99
+ # Re-check symlink after resolution (the parent might be a symlink).
100
+ if target.is_symlink():
101
+ rejected.append({"path": rel, "reason": "SYMLINK_ESCAPE_REJECTED"})
102
+ continue
103
+ # Count before deletion for the receipt.
104
+ try:
105
+ count, total = _count_files(target)
106
+ except OSError:
107
+ count, total = 0, 0
108
+ # Delete.
109
+ try:
110
+ shutil.rmtree(target)
111
+ except OSError as exc:
112
+ rejected.append({"path": rel, "reason": f"DELETE_FAILED: {exc}"})
113
+ continue
114
+ removed_files += count
115
+ removed_bytes += total
116
+ cleaned.append(rel)
117
+
118
+ if rejected:
119
+ return {
120
+ "ok": False,
121
+ "code": rejected[0]["reason"],
122
+ "executionRoot": str(execution_root),
123
+ "removedFiles": removed_files,
124
+ "removedBytes": removed_bytes,
125
+ "rejectedEscapes": rejected,
126
+ "cleaned": cleaned,
127
+ }
128
+
129
+ if removed_files == 0 and not cleaned:
130
+ return {
131
+ "ok": True,
132
+ "code": "ALREADY_ABSENT",
133
+ "executionRoot": str(execution_root),
134
+ "removedFiles": 0,
135
+ "removedBytes": 0,
136
+ "rejectedEscapes": [],
137
+ "cleaned": [],
138
+ }
139
+
140
+ return {
141
+ "ok": True,
142
+ "code": "CLEANUP_COMPLETE",
143
+ "executionRoot": str(execution_root),
144
+ "removedFiles": removed_files,
145
+ "removedBytes": removed_bytes,
146
+ "rejectedEscapes": [],
147
+ "cleaned": cleaned,
148
+ }
149
+
150
+
151
+ def main(argv: list[str] | None = None) -> int:
152
+ parser = argparse.ArgumentParser(description=__doc__)
153
+ sub = parser.add_subparsers(dest="action", required=True)
154
+ clean_parser = sub.add_parser("cleanup")
155
+ clean_parser.add_argument("--execution-root", required=True)
156
+ clean_parser.add_argument("--cleanup-roots", required=True, help="JSON array of relative paths")
157
+ clean_parser.add_argument("--json", action="store_true")
158
+ args = parser.parse_args(argv)
159
+
160
+ try:
161
+ roots = json.loads(args.cleanup_roots)
162
+ if not isinstance(roots, list):
163
+ raise ValueError("cleanup-roots must be a JSON array")
164
+ except (json.JSONDecodeError, ValueError) as exc:
165
+ result = {"ok": False, "code": "INVALID_CLEANUP_ROOTS", "error": str(exc)}
166
+ print(json.dumps(result, ensure_ascii=False, indent=2))
167
+ return 1
168
+
169
+ result = cleanup(Path(args.execution_root), roots)
170
+ print(json.dumps(result, ensure_ascii=False, indent=2 if args.json else None))
171
+ return 0 if result["ok"] else 1
172
+
173
+
174
+ if __name__ == "__main__":
175
+ raise SystemExit(main())
@@ -2,12 +2,12 @@
2
2
  "schema_version": 2,
3
3
  "profile": "general",
4
4
  "adapter": "claude-code",
5
- "bundle_version": "0.2.14",
5
+ "bundle_version": "0.2.16",
6
6
  "generator": "harness_deploy.py",
7
7
  "files": [
8
8
  {
9
9
  "path": ".harness-build.json",
10
- "sha256": "f7e5fcab41c868a1acf53d59f58cad0ca69f7da5dca394b3081de73b6e530074"
10
+ "sha256": "f8d05b3cde1a30f216ab0d3ba26ec45796f533686a003c4c656a36aed077634b"
11
11
  },
12
12
  {
13
13
  "path": "agents/harness-evaluator.md",
@@ -23,7 +23,7 @@
23
23
  },
24
24
  {
25
25
  "path": "CONTEXT.md",
26
- "sha256": "19c75b493f6f760d0e607a88bd355acdd232fcb66660887ef94d10425f39507b"
26
+ "sha256": "2318aba4ff5ae4db0a0bff6380d1e9f4ed697caf9a4b2c1458ad2cdda1acb9e8"
27
27
  },
28
28
  {
29
29
  "path": "contracts/ci-metrics.schema.json",
@@ -39,7 +39,7 @@
39
39
  },
40
40
  {
41
41
  "path": "harness-archive/reference.md",
42
- "sha256": "a956c4474df338c35934933c131a3fefb84e6b296a961c4f731526a4aff4f32f"
42
+ "sha256": "9a76b0d880e3951ca2d24e56573a4144fdfe3d7abb4a8a44dda4a19d4dce4ec1"
43
43
  },
44
44
  {
45
45
  "path": "harness-archive/scripts/gen-manifest.ps1",
@@ -47,7 +47,7 @@
47
47
  },
48
48
  {
49
49
  "path": "harness-archive/SKILL.md",
50
- "sha256": "55d393fc6b7accab0802115fc6628c68545e1069cbc1aa0e16c412d6a8edfa5a"
50
+ "sha256": "1081a1913e62f86ada5b5b43eed866e0de0aca1e9900883aa9c3a328168e0128"
51
51
  },
52
52
  {
53
53
  "path": "harness-archive/templates/render-summary.mjs",
@@ -67,7 +67,7 @@
67
67
  },
68
68
  {
69
69
  "path": "harness-codebase-map/SKILL.md",
70
- "sha256": "8901d29948bd75933d22dea87d15b9b47eeab660063af3e4c13718e7e5fdc4a4"
70
+ "sha256": "ebfa5cc6ca087dddf001c7e951cfe40c9a47dd1ab15e69b696564bc9d35c4dd2"
71
71
  },
72
72
  {
73
73
  "path": "harness-codebase-map/templates/ARCHITECTURE.md",
@@ -127,19 +127,19 @@
127
127
  },
128
128
  {
129
129
  "path": "harness-knowledge-ingest/scripts/harness_knowledge.py",
130
- "sha256": "48620b3aa57da3cbc39c556b73006108e0ae4e40d7b662709869dfc1877158ee"
130
+ "sha256": "062115a524d5bd4aec27e40e2b57cf4e7ed6e0509d4a8e6e78a79a62ee32e2c5"
131
131
  },
132
132
  {
133
133
  "path": "harness-knowledge-ingest/SKILL.md",
134
- "sha256": "013252318d6a27d6c62bcf5247e0e3a2f78187fe7758950edf93e44340943fd9"
134
+ "sha256": "fb0e10981ec43a63fe89365edf12c4d65058050d593e612cbca05116f721a76f"
135
135
  },
136
136
  {
137
137
  "path": "harness-knowledge-query/SKILL.md",
138
- "sha256": "5e0d111527aa23bc2ecd60e9808a8d65e23f21344920447c247aa8592ad176fd"
138
+ "sha256": "4825b36103b11eb1b2759167638af9234d6612b16ea2024c87f0c4dadf740e46"
139
139
  },
140
140
  {
141
141
  "path": "harness-plan/checklist.md",
142
- "sha256": "897649058dea86440bcbf4fcb7f2323a6c361318da48737ca69b282f7a9b1870"
142
+ "sha256": "cd990f8557f92ca0b2259d0ed4aab51c25ecf977fe8cddc9a689e0d05b334a2b"
143
143
  },
144
144
  {
145
145
  "path": "harness-plan/protocols.md",
@@ -151,7 +151,7 @@
151
151
  },
152
152
  {
153
153
  "path": "harness-plan/SKILL.md",
154
- "sha256": "c73337d7896b89c67ecdbc623145ee1ffad679302b72eeb054b7d1508dee4a86"
154
+ "sha256": "83d1a6c96be57ea556d0c08c665ad62ccd7813bb9f7e5fed0354ab8f4cd3756c"
155
155
  },
156
156
  {
157
157
  "path": "harness-review/checklist.md",
@@ -163,15 +163,15 @@
163
163
  },
164
164
  {
165
165
  "path": "harness-review/reference.md",
166
- "sha256": "0644a39417d51f1222905567dca80a433661a2411e2d4dd1b94644bc1cda596d"
166
+ "sha256": "5e43f753b2189bc8256c04905c079016a31694dad2aa1ad841aceae3670dd6c6"
167
167
  },
168
168
  {
169
169
  "path": "harness-review/SKILL.md",
170
- "sha256": "ec00e56acc221f34ab5b2717a560473670a897c8bf75039bae290a6d875c17df"
170
+ "sha256": "536fc0c4200bd8701991b2446d929c1fb3db6b06838227860eea81a8ea734cd1"
171
171
  },
172
172
  {
173
173
  "path": "harness-run/checklist.md",
174
- "sha256": "091bde8a02224f8da1078c7022bb431c2ea696779efef5a8b9129b2e51522505"
174
+ "sha256": "9b7578d1697772c6c545d1a65c0d232b7f0848185aa4b47ee254ee7b3fbbcb81"
175
175
  },
176
176
  {
177
177
  "path": "harness-run/protocols.md",
@@ -183,31 +183,31 @@
183
183
  },
184
184
  {
185
185
  "path": "harness-run/SKILL.md",
186
- "sha256": "9b3b608914a7bbf698c3a28a45e5d4cd6a8156bd49c9a780da5e1adbbde02408"
186
+ "sha256": "89cfccb7a8bae365a56614bf4e6b21749e83abb894f3af18ee6430fe23cafeff"
187
187
  },
188
188
  {
189
189
  "path": "harness-submit/checklist.md",
190
- "sha256": "297a6a235ef03cd49ef1c3bd13180040f8ce25354b2ced82373d4a7a5f0dc181"
190
+ "sha256": "9748c5cb4fb33919490d2cc7757b35fd191090ed02af6eacce8aa97e19666328"
191
191
  },
192
192
  {
193
193
  "path": "harness-submit/reference.md",
194
- "sha256": "39de14a56303ef2389beeab9be163aab2596fe45b262b45393f1321d18d0511a"
194
+ "sha256": "03a0f92ad85b94610d724333bdc4b0b1063f2065e7ec4ab518363adeef7c7303"
195
195
  },
196
196
  {
197
197
  "path": "harness-submit/SKILL.md",
198
- "sha256": "279bb2546f41d617fe4402caa5cad7db788643407ba47b5cfe0dae00b1c18e72"
198
+ "sha256": "d0ff4a5569685e018fef7bdc02a17d9a5889b269505dd0b0d31dbe66d75301f9"
199
199
  },
200
200
  {
201
201
  "path": "harness-sync/reference.md",
202
- "sha256": "86a1cee8298bbc2c68db60956530fa40b92ef82e4e0e122498352459e9157141"
202
+ "sha256": "695d7ffea45f50008277851eefb815c1979e0c47f7184919ee2a7eee6a363988"
203
203
  },
204
204
  {
205
205
  "path": "harness-sync/SKILL.md",
206
- "sha256": "6dc61858ea0293876a79be8130de7c3f7699f1f8510a50fac6a6da01d62b4673"
206
+ "sha256": "1544c88eb25a2902df8e0789e2b7f4bb0ba6b5da8baf01293d745f42e3c514d3"
207
207
  },
208
208
  {
209
209
  "path": "harness-test/checklist.md",
210
- "sha256": "66f96a4e5cc39ab7ec736994a23dac88e349c63845659d595737100b9584b84e"
210
+ "sha256": "5d7a734ba1832690bc9a405e062f83ae81a56b2c2d86d23e381c841b74c68ba1"
211
211
  },
212
212
  {
213
213
  "path": "harness-test/pitfalls-java.md",
@@ -215,11 +215,11 @@
215
215
  },
216
216
  {
217
217
  "path": "harness-test/pitfalls.md",
218
- "sha256": "074ee0b2fb710840b6a323c4d677f14ac89e5cc77c36466bc89f9772a8443842"
218
+ "sha256": "c96afa8739598a2a5977ed2e734e42d1b330901528df4651f33ec20c0295ec42"
219
219
  },
220
220
  {
221
221
  "path": "harness-test/reference.md",
222
- "sha256": "37d781daf890ff86663e0fe8c0449c97e40ec512c3515a73923f7fb162e9c180"
222
+ "sha256": "1b705db0a2f075d7c7aa48a9130719557daf1d5cddc0271ea68d4e75a3f827b2"
223
223
  },
224
224
  {
225
225
  "path": "harness-test/scripts/runtime-helpers.mjs",
@@ -227,7 +227,7 @@
227
227
  },
228
228
  {
229
229
  "path": "harness-test/SKILL.md",
230
- "sha256": "a7c8d010c05c216c17ba353525ce06e3c8d39f5ec9182be29b4420f567fe36a7"
230
+ "sha256": "cc698eebaa77cb448ef9aba98e8b0e0c43ee7530557e2df9d33645539bbc7b37"
231
231
  },
232
232
  {
233
233
  "path": "protocols/archive-report-protocol.md",
@@ -259,11 +259,11 @@
259
259
  },
260
260
  {
261
261
  "path": "protocols/submit-protocol.md",
262
- "sha256": "b0fb07830c3b25b06bba3b8af3f831a5dde9b7329d8b1ee19386a59040cfc481"
262
+ "sha256": "01465556bd00fe01f91f315fd3eb365099eb3dd2e111331ba70c103a37794543"
263
263
  },
264
264
  {
265
265
  "path": "README.md",
266
- "sha256": "57ae38357a7bf4118f91c4404b8133a81aced923c836c498b04ff18461eae665"
266
+ "sha256": "9edb4d313701f7317805dedb1b1e7e61aa986bed1e5e4266b257eb880abb33e0"
267
267
  },
268
268
  {
269
269
  "path": "scripts/harness_apidoc.py",
@@ -283,7 +283,7 @@
283
283
  },
284
284
  {
285
285
  "path": "scripts/harness_deploy.py",
286
- "sha256": "4a0a4ccfd6ded25596266d7f07cc5e740b4d7224dfba610cd9f7f041d23948e9"
286
+ "sha256": "48a95b696cd4df411cc206b80b16b436018e7648bd2daa55f110ceee2e403271"
287
287
  },
288
288
  {
289
289
  "path": "scripts/harness_events.py",
@@ -291,19 +291,19 @@
291
291
  },
292
292
  {
293
293
  "path": "scripts/harness_gate.py",
294
- "sha256": "f83e9d33816052553e2ae8e5514fae318c5b5bc48ba2aded67d88fc9f0b51a98"
294
+ "sha256": "c5762a90f0361496d1f6a64670ee4cc84dd5075924fec08c3846530393c0b2ff"
295
295
  },
296
296
  {
297
297
  "path": "scripts/harness_integration.py",
298
- "sha256": "6b078d7d1d053e4c46bc320496fab3060d883b256d517a56f0b078eec2fa0ce0"
298
+ "sha256": "777c8d0bd07b026645d5c6938da64699c123ab13870f04963fa0b09a900b095d"
299
299
  },
300
300
  {
301
301
  "path": "scripts/harness_ledger.py",
302
- "sha256": "5141168aa1c566327e421d6ab6de876dfe0cf6ae3e97d336fcce6dc7fc4bfb56"
302
+ "sha256": "60a6cdff5c3c81abf5606f7914c299828c4ed2b21d19e9acbb27b001a03fcaa5"
303
303
  },
304
304
  {
305
305
  "path": "scripts/harness_paths.py",
306
- "sha256": "75560c0141172b335811014320001a299846e4fba45dd0589cba86da058ab01a"
306
+ "sha256": "c60d272e61aa98fc84a89c24db81c1ff8cbf2dac16b88fddbcd18fcc5d6199a5"
307
307
  },
308
308
  {
309
309
  "path": "scripts/harness_phase.py",
@@ -311,7 +311,7 @@
311
311
  },
312
312
  {
313
313
  "path": "scripts/harness_plan_finalize.py",
314
- "sha256": "5534eb277e29e3473149a0f113ea107dc17b6cade742d7de920befb87e46fdfa"
314
+ "sha256": "e5152dda3380b1c1acdd219f8af0117b0c1670f0998ea62340f89e27a09f7585"
315
315
  },
316
316
  {
317
317
  "path": "scripts/harness_preflight.py",
@@ -319,11 +319,11 @@
319
319
  },
320
320
  {
321
321
  "path": "scripts/harness_profile.py",
322
- "sha256": "7c02010be79352e552d028ac7a5884f273b832af304cb2336824d41a4371a800"
322
+ "sha256": "e242f79d36d7a38bdf3927cd2f65d1c7bb687a4119b07e41a59fec6989d5e253"
323
323
  },
324
324
  {
325
325
  "path": "scripts/harness_review.py",
326
- "sha256": "78009e09b79867a13c66a8c71114b6cd04fe75c72054f5ec35d63c7be990bb04"
326
+ "sha256": "a741a63f62993d72889e78f540feb57a95e713b4d7a98fa61ff208b2ce914ca7"
327
327
  },
328
328
  {
329
329
  "path": "scripts/harness_runtime.py",
@@ -341,6 +341,10 @@
341
341
  "path": "scripts/harness_sync.py",
342
342
  "sha256": "3ab54718ab8448f7bdac76119806a885e0f19cece05b0d8108128dc7d895d6e1"
343
343
  },
344
+ {
345
+ "path": "scripts/harness_test_cleanup.py",
346
+ "sha256": "5b60d6f5f057885f25d33906db69ce834193654024a7bf5ce1a09dc49808eff3"
347
+ },
344
348
  {
345
349
  "path": "scripts/harness_test_guard.py",
346
350
  "sha256": "36d0ae0776c75fb2f5a233500aa8dd1647a17880676cb07e441e2896e402e67c"