@hunter-harness/workflow-harness 0.2.16 → 0.2.18

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 (282) 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-query/SKILL.md +4 -2
  9. package/harness/bundles/general/claude-code/harness-plan/SKILL.md +8 -4
  10. package/harness/bundles/general/claude-code/harness-plan/checklist.md +5 -5
  11. package/harness/bundles/general/claude-code/harness-plan/reference.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/checklist.md +1 -1
  14. package/harness/bundles/general/claude-code/harness-run/SKILL.md +7 -3
  15. package/harness/bundles/general/claude-code/harness-run/checklist.md +5 -5
  16. package/harness/bundles/general/claude-code/harness-run/reference.md +1 -1
  17. package/harness/bundles/general/claude-code/harness-submit/SKILL.md +6 -3
  18. package/harness/bundles/general/claude-code/harness-submit/checklist.md +11 -11
  19. package/harness/bundles/general/claude-code/harness-submit/reference.md +3 -3
  20. package/harness/bundles/general/claude-code/harness-sync/SKILL.md +4 -2
  21. package/harness/bundles/general/claude-code/harness-sync/reference.md +1 -1
  22. package/harness/bundles/general/claude-code/harness-test/SKILL.md +7 -4
  23. package/harness/bundles/general/claude-code/harness-test/checklist.md +8 -5
  24. package/harness/bundles/general/claude-code/harness-test/pitfalls.md +1 -1
  25. package/harness/bundles/general/claude-code/harness-test/reference.md +28 -13
  26. package/harness/bundles/general/claude-code/protocols/submit-protocol.md +1 -1
  27. package/harness/bundles/general/claude-code/scripts/harness_deploy.py +7 -0
  28. package/harness/bundles/general/claude-code/scripts/harness_integration.py +26 -2
  29. package/harness/bundles/general/claude-code/scripts/harness_plan_finalize.py +159 -7
  30. package/harness/bundles/general/claude-code/scripts/harness_profile.py +1 -0
  31. package/harness/bundles/general/claude-code/scripts/harness_runtime.py +4 -4
  32. package/harness/bundles/general/claude-code/scripts/harness_service.py +1 -0
  33. package/harness/bundles/general/claude-code/scripts/harness_test_cleanup.py +175 -0
  34. package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
  35. package/harness/bundles/general/codebuddy/CONTEXT.md +14 -1
  36. package/harness/bundles/general/codebuddy/README.md +1 -1
  37. package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +7 -4
  38. package/harness/bundles/general/codebuddy/harness-archive/reference.md +1 -1
  39. package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +4 -2
  40. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +4 -2
  41. package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +4 -2
  42. package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +8 -4
  43. package/harness/bundles/general/codebuddy/harness-plan/checklist.md +5 -5
  44. package/harness/bundles/general/codebuddy/harness-plan/reference.md +5 -5
  45. package/harness/bundles/general/codebuddy/harness-review/SKILL.md +5 -2
  46. package/harness/bundles/general/codebuddy/harness-review/checklist.md +1 -1
  47. package/harness/bundles/general/codebuddy/harness-run/SKILL.md +7 -3
  48. package/harness/bundles/general/codebuddy/harness-run/checklist.md +5 -5
  49. package/harness/bundles/general/codebuddy/harness-run/reference.md +1 -1
  50. package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +6 -3
  51. package/harness/bundles/general/codebuddy/harness-submit/checklist.md +11 -11
  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_integration.py +26 -2
  62. package/harness/bundles/general/codebuddy/scripts/harness_plan_finalize.py +159 -7
  63. package/harness/bundles/general/codebuddy/scripts/harness_profile.py +1 -0
  64. package/harness/bundles/general/codebuddy/scripts/harness_runtime.py +4 -4
  65. package/harness/bundles/general/codebuddy/scripts/harness_service.py +1 -0
  66. package/harness/bundles/general/codebuddy/scripts/harness_test_cleanup.py +175 -0
  67. package/harness/bundles/general/codex/.harness-build.json +1 -1
  68. package/harness/bundles/general/codex/CONTEXT.md +14 -1
  69. package/harness/bundles/general/codex/README.md +1 -1
  70. package/harness/bundles/general/codex/harness-archive/SKILL.md +7 -4
  71. package/harness/bundles/general/codex/harness-archive/reference.md +1 -1
  72. package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +4 -2
  73. package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +4 -2
  74. package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +4 -2
  75. package/harness/bundles/general/codex/harness-plan/SKILL.md +8 -4
  76. package/harness/bundles/general/codex/harness-plan/checklist.md +5 -5
  77. package/harness/bundles/general/codex/harness-plan/reference.md +5 -5
  78. package/harness/bundles/general/codex/harness-review/SKILL.md +5 -2
  79. package/harness/bundles/general/codex/harness-review/checklist.md +1 -1
  80. package/harness/bundles/general/codex/harness-run/SKILL.md +7 -3
  81. package/harness/bundles/general/codex/harness-run/checklist.md +5 -5
  82. package/harness/bundles/general/codex/harness-run/reference.md +1 -1
  83. package/harness/bundles/general/codex/harness-submit/SKILL.md +6 -3
  84. package/harness/bundles/general/codex/harness-submit/checklist.md +11 -11
  85. package/harness/bundles/general/codex/harness-submit/reference.md +3 -3
  86. package/harness/bundles/general/codex/harness-sync/SKILL.md +4 -2
  87. package/harness/bundles/general/codex/harness-sync/reference.md +1 -1
  88. package/harness/bundles/general/codex/harness-test/SKILL.md +7 -4
  89. package/harness/bundles/general/codex/harness-test/checklist.md +8 -5
  90. package/harness/bundles/general/codex/harness-test/pitfalls.md +1 -1
  91. package/harness/bundles/general/codex/harness-test/reference.md +28 -13
  92. package/harness/bundles/general/codex/protocols/submit-protocol.md +1 -1
  93. package/harness/bundles/general/codex/scripts/harness_deploy.py +7 -0
  94. package/harness/bundles/general/codex/scripts/harness_integration.py +26 -2
  95. package/harness/bundles/general/codex/scripts/harness_plan_finalize.py +159 -7
  96. package/harness/bundles/general/codex/scripts/harness_profile.py +1 -0
  97. package/harness/bundles/general/codex/scripts/harness_runtime.py +4 -4
  98. package/harness/bundles/general/codex/scripts/harness_service.py +1 -0
  99. package/harness/bundles/general/codex/scripts/harness_test_cleanup.py +175 -0
  100. package/harness/bundles/general/cursor/.harness-build.json +1 -1
  101. package/harness/bundles/general/cursor/CONTEXT.md +14 -1
  102. package/harness/bundles/general/cursor/README.md +1 -1
  103. package/harness/bundles/general/cursor/harness-archive/SKILL.md +7 -4
  104. package/harness/bundles/general/cursor/harness-archive/reference.md +1 -1
  105. package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +4 -2
  106. package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +4 -2
  107. package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +4 -2
  108. package/harness/bundles/general/cursor/harness-plan/SKILL.md +8 -4
  109. package/harness/bundles/general/cursor/harness-plan/checklist.md +5 -5
  110. package/harness/bundles/general/cursor/harness-plan/reference.md +5 -5
  111. package/harness/bundles/general/cursor/harness-review/SKILL.md +5 -2
  112. package/harness/bundles/general/cursor/harness-review/checklist.md +1 -1
  113. package/harness/bundles/general/cursor/harness-run/SKILL.md +7 -3
  114. package/harness/bundles/general/cursor/harness-run/checklist.md +5 -5
  115. package/harness/bundles/general/cursor/harness-run/reference.md +1 -1
  116. package/harness/bundles/general/cursor/harness-submit/SKILL.md +6 -3
  117. package/harness/bundles/general/cursor/harness-submit/checklist.md +11 -11
  118. package/harness/bundles/general/cursor/harness-submit/reference.md +3 -3
  119. package/harness/bundles/general/cursor/harness-sync/SKILL.md +4 -2
  120. package/harness/bundles/general/cursor/harness-sync/reference.md +1 -1
  121. package/harness/bundles/general/cursor/harness-test/SKILL.md +7 -4
  122. package/harness/bundles/general/cursor/harness-test/checklist.md +8 -5
  123. package/harness/bundles/general/cursor/harness-test/pitfalls.md +1 -1
  124. package/harness/bundles/general/cursor/harness-test/reference.md +28 -13
  125. package/harness/bundles/general/cursor/protocols/submit-protocol.md +1 -1
  126. package/harness/bundles/general/cursor/scripts/harness_deploy.py +7 -0
  127. package/harness/bundles/general/cursor/scripts/harness_integration.py +26 -2
  128. package/harness/bundles/general/cursor/scripts/harness_plan_finalize.py +159 -7
  129. package/harness/bundles/general/cursor/scripts/harness_profile.py +1 -0
  130. package/harness/bundles/general/cursor/scripts/harness_runtime.py +4 -4
  131. package/harness/bundles/general/cursor/scripts/harness_service.py +1 -0
  132. package/harness/bundles/general/cursor/scripts/harness_test_cleanup.py +175 -0
  133. package/harness/bundles/java/claude-code/.harness-build.json +1 -1
  134. package/harness/bundles/java/claude-code/CONTEXT.md +14 -1
  135. package/harness/bundles/java/claude-code/README.md +1 -1
  136. package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +5 -2
  137. package/harness/bundles/java/claude-code/harness-archive/SKILL.md +7 -4
  138. package/harness/bundles/java/claude-code/harness-archive/reference.md +1 -1
  139. package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +4 -2
  140. package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +4 -2
  141. package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +4 -2
  142. package/harness/bundles/java/claude-code/harness-package/SKILL.md +5 -2
  143. package/harness/bundles/java/claude-code/harness-package/checklist.md +5 -5
  144. package/harness/bundles/java/claude-code/harness-plan/SKILL.md +8 -4
  145. package/harness/bundles/java/claude-code/harness-plan/checklist.md +5 -5
  146. package/harness/bundles/java/claude-code/harness-plan/reference.md +5 -5
  147. package/harness/bundles/java/claude-code/harness-review/SKILL.md +5 -2
  148. package/harness/bundles/java/claude-code/harness-review/checklist.md +1 -1
  149. package/harness/bundles/java/claude-code/harness-run/SKILL.md +7 -3
  150. package/harness/bundles/java/claude-code/harness-run/checklist.md +6 -6
  151. package/harness/bundles/java/claude-code/harness-run/reference.md +352 -352
  152. package/harness/bundles/java/claude-code/harness-submit/SKILL.md +6 -3
  153. package/harness/bundles/java/claude-code/harness-submit/checklist.md +11 -11
  154. package/harness/bundles/java/claude-code/harness-submit/reference.md +3 -3
  155. package/harness/bundles/java/claude-code/harness-sync/SKILL.md +4 -2
  156. package/harness/bundles/java/claude-code/harness-sync/reference.md +1 -1
  157. package/harness/bundles/java/claude-code/harness-test/SKILL.md +8 -5
  158. package/harness/bundles/java/claude-code/harness-test/pitfalls.md +1 -1
  159. package/harness/bundles/java/claude-code/harness-test/reference.md +1 -1
  160. package/harness/bundles/java/claude-code/protocols/submit-protocol.md +1 -1
  161. package/harness/bundles/java/claude-code/scripts/harness_deploy.py +7 -0
  162. package/harness/bundles/java/claude-code/scripts/harness_integration.py +26 -2
  163. package/harness/bundles/java/claude-code/scripts/harness_plan_finalize.py +159 -7
  164. package/harness/bundles/java/claude-code/scripts/harness_profile.py +1 -0
  165. package/harness/bundles/java/claude-code/scripts/harness_runtime.py +4 -4
  166. package/harness/bundles/java/claude-code/scripts/harness_service.py +1 -0
  167. package/harness/bundles/java/claude-code/scripts/harness_test_cleanup.py +175 -0
  168. package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
  169. package/harness/bundles/java/codebuddy/CONTEXT.md +14 -1
  170. package/harness/bundles/java/codebuddy/README.md +1 -1
  171. package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +5 -2
  172. package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +7 -4
  173. package/harness/bundles/java/codebuddy/harness-archive/reference.md +1 -1
  174. package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +4 -2
  175. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +4 -2
  176. package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +4 -2
  177. package/harness/bundles/java/codebuddy/harness-package/SKILL.md +5 -2
  178. package/harness/bundles/java/codebuddy/harness-package/checklist.md +5 -5
  179. package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +8 -4
  180. package/harness/bundles/java/codebuddy/harness-plan/checklist.md +5 -5
  181. package/harness/bundles/java/codebuddy/harness-plan/reference.md +5 -5
  182. package/harness/bundles/java/codebuddy/harness-review/SKILL.md +5 -2
  183. package/harness/bundles/java/codebuddy/harness-review/checklist.md +1 -1
  184. package/harness/bundles/java/codebuddy/harness-run/SKILL.md +7 -3
  185. package/harness/bundles/java/codebuddy/harness-run/checklist.md +6 -6
  186. package/harness/bundles/java/codebuddy/harness-run/reference.md +352 -352
  187. package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +6 -3
  188. package/harness/bundles/java/codebuddy/harness-submit/checklist.md +11 -11
  189. package/harness/bundles/java/codebuddy/harness-submit/reference.md +3 -3
  190. package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +4 -2
  191. package/harness/bundles/java/codebuddy/harness-sync/reference.md +1 -1
  192. package/harness/bundles/java/codebuddy/harness-test/SKILL.md +8 -5
  193. package/harness/bundles/java/codebuddy/harness-test/pitfalls.md +1 -1
  194. package/harness/bundles/java/codebuddy/harness-test/reference.md +1 -1
  195. package/harness/bundles/java/codebuddy/protocols/submit-protocol.md +1 -1
  196. package/harness/bundles/java/codebuddy/scripts/harness_deploy.py +7 -0
  197. package/harness/bundles/java/codebuddy/scripts/harness_integration.py +26 -2
  198. package/harness/bundles/java/codebuddy/scripts/harness_plan_finalize.py +159 -7
  199. package/harness/bundles/java/codebuddy/scripts/harness_profile.py +1 -0
  200. package/harness/bundles/java/codebuddy/scripts/harness_runtime.py +4 -4
  201. package/harness/bundles/java/codebuddy/scripts/harness_service.py +1 -0
  202. package/harness/bundles/java/codebuddy/scripts/harness_test_cleanup.py +175 -0
  203. package/harness/bundles/java/codex/.harness-build.json +1 -1
  204. package/harness/bundles/java/codex/CONTEXT.md +14 -1
  205. package/harness/bundles/java/codex/README.md +1 -1
  206. package/harness/bundles/java/codex/harness-apidoc/SKILL.md +5 -2
  207. package/harness/bundles/java/codex/harness-archive/SKILL.md +7 -4
  208. package/harness/bundles/java/codex/harness-archive/reference.md +1 -1
  209. package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +4 -2
  210. package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +4 -2
  211. package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +4 -2
  212. package/harness/bundles/java/codex/harness-package/SKILL.md +5 -2
  213. package/harness/bundles/java/codex/harness-package/checklist.md +5 -5
  214. package/harness/bundles/java/codex/harness-plan/SKILL.md +8 -4
  215. package/harness/bundles/java/codex/harness-plan/checklist.md +5 -5
  216. package/harness/bundles/java/codex/harness-plan/reference.md +5 -5
  217. package/harness/bundles/java/codex/harness-review/SKILL.md +5 -2
  218. package/harness/bundles/java/codex/harness-review/checklist.md +1 -1
  219. package/harness/bundles/java/codex/harness-run/SKILL.md +7 -3
  220. package/harness/bundles/java/codex/harness-run/checklist.md +6 -6
  221. package/harness/bundles/java/codex/harness-run/reference.md +352 -352
  222. package/harness/bundles/java/codex/harness-submit/SKILL.md +6 -3
  223. package/harness/bundles/java/codex/harness-submit/checklist.md +11 -11
  224. package/harness/bundles/java/codex/harness-submit/reference.md +3 -3
  225. package/harness/bundles/java/codex/harness-sync/SKILL.md +4 -2
  226. package/harness/bundles/java/codex/harness-sync/reference.md +1 -1
  227. package/harness/bundles/java/codex/harness-test/SKILL.md +8 -5
  228. package/harness/bundles/java/codex/harness-test/pitfalls.md +1 -1
  229. package/harness/bundles/java/codex/harness-test/reference.md +1 -1
  230. package/harness/bundles/java/codex/protocols/submit-protocol.md +1 -1
  231. package/harness/bundles/java/codex/scripts/harness_deploy.py +7 -0
  232. package/harness/bundles/java/codex/scripts/harness_integration.py +26 -2
  233. package/harness/bundles/java/codex/scripts/harness_plan_finalize.py +159 -7
  234. package/harness/bundles/java/codex/scripts/harness_profile.py +1 -0
  235. package/harness/bundles/java/codex/scripts/harness_runtime.py +4 -4
  236. package/harness/bundles/java/codex/scripts/harness_service.py +1 -0
  237. package/harness/bundles/java/codex/scripts/harness_test_cleanup.py +175 -0
  238. package/harness/bundles/java/cursor/.harness-build.json +1 -1
  239. package/harness/bundles/java/cursor/CONTEXT.md +14 -1
  240. package/harness/bundles/java/cursor/README.md +1 -1
  241. package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +5 -2
  242. package/harness/bundles/java/cursor/harness-archive/SKILL.md +7 -4
  243. package/harness/bundles/java/cursor/harness-archive/reference.md +1 -1
  244. package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +4 -2
  245. package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +4 -2
  246. package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +4 -2
  247. package/harness/bundles/java/cursor/harness-package/SKILL.md +5 -2
  248. package/harness/bundles/java/cursor/harness-package/checklist.md +5 -5
  249. package/harness/bundles/java/cursor/harness-plan/SKILL.md +8 -4
  250. package/harness/bundles/java/cursor/harness-plan/checklist.md +5 -5
  251. package/harness/bundles/java/cursor/harness-plan/reference.md +5 -5
  252. package/harness/bundles/java/cursor/harness-review/SKILL.md +5 -2
  253. package/harness/bundles/java/cursor/harness-review/checklist.md +1 -1
  254. package/harness/bundles/java/cursor/harness-run/SKILL.md +7 -3
  255. package/harness/bundles/java/cursor/harness-run/checklist.md +6 -6
  256. package/harness/bundles/java/cursor/harness-run/reference.md +352 -352
  257. package/harness/bundles/java/cursor/harness-submit/SKILL.md +6 -3
  258. package/harness/bundles/java/cursor/harness-submit/checklist.md +11 -11
  259. package/harness/bundles/java/cursor/harness-submit/reference.md +3 -3
  260. package/harness/bundles/java/cursor/harness-sync/SKILL.md +4 -2
  261. package/harness/bundles/java/cursor/harness-sync/reference.md +1 -1
  262. package/harness/bundles/java/cursor/harness-test/SKILL.md +8 -5
  263. package/harness/bundles/java/cursor/harness-test/pitfalls.md +1 -1
  264. package/harness/bundles/java/cursor/harness-test/reference.md +1 -1
  265. package/harness/bundles/java/cursor/protocols/submit-protocol.md +1 -1
  266. package/harness/bundles/java/cursor/scripts/harness_deploy.py +7 -0
  267. package/harness/bundles/java/cursor/scripts/harness_integration.py +26 -2
  268. package/harness/bundles/java/cursor/scripts/harness_plan_finalize.py +159 -7
  269. package/harness/bundles/java/cursor/scripts/harness_profile.py +1 -0
  270. package/harness/bundles/java/cursor/scripts/harness_runtime.py +4 -4
  271. package/harness/bundles/java/cursor/scripts/harness_service.py +1 -0
  272. package/harness/bundles/java/cursor/scripts/harness_test_cleanup.py +175 -0
  273. package/harness/manifests/general/claude-code.json +37 -33
  274. package/harness/manifests/general/codebuddy.json +37 -33
  275. package/harness/manifests/general/codex.json +37 -33
  276. package/harness/manifests/general/cursor.json +37 -33
  277. package/harness/manifests/java/claude-code.json +39 -35
  278. package/harness/manifests/java/codebuddy.json +39 -35
  279. package/harness/manifests/java/codex.json +39 -35
  280. package/harness/manifests/java/cursor.json +39 -35
  281. package/hunter-workflow-family.json +2 -2
  282. package/package.json +1 -1
@@ -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.15",
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": "d1e1ee4711727013db2693d31573711e91b87080f36fa1442089b1c911c87774"
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": "9104b7b4bbc074301e29b8e270243770c96647222dd70fb60f6fd5def3bfaa3f"
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": "36517926819e5a197d8a02bab37ea0579c511faef6f70c74cb71e21a60689b3b"
70
+ "sha256": "ebfa5cc6ca087dddf001c7e951cfe40c9a47dd1ab15e69b696564bc9d35c4dd2"
71
71
  },
72
72
  {
73
73
  "path": "harness-codebase-map/templates/ARCHITECTURE.md",
@@ -131,15 +131,15 @@
131
131
  },
132
132
  {
133
133
  "path": "harness-knowledge-ingest/SKILL.md",
134
- "sha256": "088a51365d7bd7a918e415432cedc039c85a478f21a8894b5376dfe4b0c48f2e"
134
+ "sha256": "fb0e10981ec43a63fe89365edf12c4d65058050d593e612cbca05116f721a76f"
135
135
  },
136
136
  {
137
137
  "path": "harness-knowledge-query/SKILL.md",
138
- "sha256": "18f05a403ae56a9c7ad08c58e3bd67243de67a684df895596312584650f8b5f0"
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",
@@ -147,15 +147,15 @@
147
147
  },
148
148
  {
149
149
  "path": "harness-plan/reference.md",
150
- "sha256": "5f3ee154ad79f4b5906efffbd09f14d26ca629540002fb06e35208c21bd5efa4"
150
+ "sha256": "1d252ecff35031bdc32692f52ee8d736d9d8570d5d8ab351ebaf81e85ffc56ea"
151
151
  },
152
152
  {
153
153
  "path": "harness-plan/SKILL.md",
154
- "sha256": "91b0e08f29cc598ac1e3ffea2465245354eea4ee5553afda58c34dae72afb58e"
154
+ "sha256": "83d1a6c96be57ea556d0c08c665ad62ccd7813bb9f7e5fed0354ab8f4cd3756c"
155
155
  },
156
156
  {
157
157
  "path": "harness-review/checklist.md",
158
- "sha256": "9bb5fcbd3cd407464c2f7c9b3feb5949410aa094b0fac95b39337ed30e3e885b"
158
+ "sha256": "5827ab101fd8d83c7f4616cb538b2dad0d5174e8f70e79d0af54871fb4d8a80f"
159
159
  },
160
160
  {
161
161
  "path": "harness-review/protocols.md",
@@ -167,11 +167,11 @@
167
167
  },
168
168
  {
169
169
  "path": "harness-review/SKILL.md",
170
- "sha256": "bb4f36751348697398d6b9de1601e5c1a3c9d8895b2533b834f930761334c7f0"
170
+ "sha256": "536fc0c4200bd8701991b2446d929c1fb3db6b06838227860eea81a8ea734cd1"
171
171
  },
172
172
  {
173
173
  "path": "harness-run/checklist.md",
174
- "sha256": "091bde8a02224f8da1078c7022bb431c2ea696779efef5a8b9129b2e51522505"
174
+ "sha256": "8f8be29c43b2a37885d0ef729ca4a1cb748869d65de0498b0e38f3e1cc7f317a"
175
175
  },
176
176
  {
177
177
  "path": "harness-run/protocols.md",
@@ -179,35 +179,35 @@
179
179
  },
180
180
  {
181
181
  "path": "harness-run/reference.md",
182
- "sha256": "0c47bca05013669fb1f1a6d6d232aa7771657a5b9727f666811bc2d9e640850c"
182
+ "sha256": "00d13333bc9e398842155bc4f9e59792be3666b15b471e093c8f50fe8aa0abf6"
183
183
  },
184
184
  {
185
185
  "path": "harness-run/SKILL.md",
186
- "sha256": "35947fa05b0f366585e4e6eaa7d5421685cdbf07f0bbd248173e66d191e65e5b"
186
+ "sha256": "89cfccb7a8bae365a56614bf4e6b21749e83abb894f3af18ee6430fe23cafeff"
187
187
  },
188
188
  {
189
189
  "path": "harness-submit/checklist.md",
190
- "sha256": "297a6a235ef03cd49ef1c3bd13180040f8ce25354b2ced82373d4a7a5f0dc181"
190
+ "sha256": "63d7979d4d96f24d012922e0b18e8d9c29f36ad2a14fe794c227bce0e0c6e038"
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": "5fe0ea4267aabdf6527aea9589f1a0f2d7d13726af355c127e2b5cfb198b12ea"
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": "afd9ca9af1b69fcf4a32564a1d70e975e73bedcd61d0f662175a8f53887d4fc1"
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": "fe3dae58e7f9537f71d793d5390d5f73f1d5066682b4f79b2a5b6cc58ca6e247"
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",
@@ -295,7 +295,7 @@
295
295
  },
296
296
  {
297
297
  "path": "scripts/harness_integration.py",
298
- "sha256": "613440b92d14cef920647e61eb524eb8f539add5b7fd68e7a263fd541f99316a"
298
+ "sha256": "777c8d0bd07b026645d5c6938da64699c123ab13870f04963fa0b09a900b095d"
299
299
  },
300
300
  {
301
301
  "path": "scripts/harness_ledger.py",
@@ -311,7 +311,7 @@
311
311
  },
312
312
  {
313
313
  "path": "scripts/harness_plan_finalize.py",
314
- "sha256": "6fd97c6d91d180fa0ce2b73ac16c13ee741ef8a78f8a78b0af6e061d2b9eb7da"
314
+ "sha256": "e5152dda3380b1c1acdd219f8af0117b0c1670f0998ea62340f89e27a09f7585"
315
315
  },
316
316
  {
317
317
  "path": "scripts/harness_preflight.py",
@@ -319,7 +319,7 @@
319
319
  },
320
320
  {
321
321
  "path": "scripts/harness_profile.py",
322
- "sha256": "e242f79d36d7a38bdf3927cd2f65d1c7bb687a4119b07e41a59fec6989d5e253"
322
+ "sha256": "366575a5d201da2730f1c28acbbf4a4ef76dbdacb38d222a555671c93a06b8e0"
323
323
  },
324
324
  {
325
325
  "path": "scripts/harness_review.py",
@@ -327,11 +327,11 @@
327
327
  },
328
328
  {
329
329
  "path": "scripts/harness_runtime.py",
330
- "sha256": "8959e8702bf703380dc2de92bf33aef3f9520d66ffd790c2295ce6cae1c28cab"
330
+ "sha256": "0cc27b7622922fa1c998973979d4970c5c993efe42545fa64dd0e64993030fce"
331
331
  },
332
332
  {
333
333
  "path": "scripts/harness_service.py",
334
- "sha256": "17c26b40ed3e7d110b74ef61e627fa0ad1bc84718a1721a066e6d72ee0e37649"
334
+ "sha256": "af0eb7c93d5f856c5ed5a977e3f9a12dc0ced5baca571f7023f6b04ece46baf6"
335
335
  },
336
336
  {
337
337
  "path": "scripts/harness_state.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"
@@ -2,12 +2,12 @@
2
2
  "schema_version": 2,
3
3
  "profile": "general",
4
4
  "adapter": "codebuddy",
5
- "bundle_version": "0.2.15",
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": "aa29547d866c54cf8055520573df09c6aa77fd32fb7d97b6384c0bf99517472a"
10
+ "sha256": "5424c14201baa7eae777b1929753efeeb3ccfd8622d27c750385c9d8b940eadf"
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": "42f8602eb3c43293836480a6c33d2d122db473cfad7d36b3f4be1f9b5653ea40"
50
+ "sha256": "a5acfae19e391b550948a0162d60c022924150e059540b40ef6f2faefb4df8e8"
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": "646ce714f08461e5cd7d0b38b5d8a7bdfb823133b14df4c895557465617713be"
70
+ "sha256": "e3b335cd792e7f6aebc5b1871c3b6a77c1f27dc71ba4293c3e23565ccbe3c3b9"
71
71
  },
72
72
  {
73
73
  "path": "harness-codebase-map/templates/ARCHITECTURE.md",
@@ -131,15 +131,15 @@
131
131
  },
132
132
  {
133
133
  "path": "harness-knowledge-ingest/SKILL.md",
134
- "sha256": "69c89c79d7a560bf6e77b016002d6ce4779e23ff0c7ec854dc33f49cab36f94b"
134
+ "sha256": "e72ae7507f4ec2fe1bb26c4b14ebcbbf020771570ffe1d338c5e66a444b5a7fc"
135
135
  },
136
136
  {
137
137
  "path": "harness-knowledge-query/SKILL.md",
138
- "sha256": "7b559733829797676c97953c1f68da03f41b8a5368ba1d8a0ba3bab40bf9db09"
138
+ "sha256": "324c4922afd4f3c227c307956a6fc10da63d35ee0a28dfa7a8340799d63391f0"
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",
@@ -147,15 +147,15 @@
147
147
  },
148
148
  {
149
149
  "path": "harness-plan/reference.md",
150
- "sha256": "5f3ee154ad79f4b5906efffbd09f14d26ca629540002fb06e35208c21bd5efa4"
150
+ "sha256": "1d252ecff35031bdc32692f52ee8d736d9d8570d5d8ab351ebaf81e85ffc56ea"
151
151
  },
152
152
  {
153
153
  "path": "harness-plan/SKILL.md",
154
- "sha256": "23e2734a9e5cabb83f3afceeff5e7008c85d6da26a2cbc112ce7fb2bd0d7cdcc"
154
+ "sha256": "02edd4c33691b23f267856178595d47f82679121ca05d79bb12015968e293b43"
155
155
  },
156
156
  {
157
157
  "path": "harness-review/checklist.md",
158
- "sha256": "9bb5fcbd3cd407464c2f7c9b3feb5949410aa094b0fac95b39337ed30e3e885b"
158
+ "sha256": "5827ab101fd8d83c7f4616cb538b2dad0d5174e8f70e79d0af54871fb4d8a80f"
159
159
  },
160
160
  {
161
161
  "path": "harness-review/protocols.md",
@@ -167,11 +167,11 @@
167
167
  },
168
168
  {
169
169
  "path": "harness-review/SKILL.md",
170
- "sha256": "6d9800047e79f5ec88fdb08a5720d34a67525b4e67dcb4039bf5c567dbd1f3a2"
170
+ "sha256": "625d66d7cf03c514c93f7a85babe16f3f0af76edfe04ba42232e7691ef377881"
171
171
  },
172
172
  {
173
173
  "path": "harness-run/checklist.md",
174
- "sha256": "091bde8a02224f8da1078c7022bb431c2ea696779efef5a8b9129b2e51522505"
174
+ "sha256": "8f8be29c43b2a37885d0ef729ca4a1cb748869d65de0498b0e38f3e1cc7f317a"
175
175
  },
176
176
  {
177
177
  "path": "harness-run/protocols.md",
@@ -179,35 +179,35 @@
179
179
  },
180
180
  {
181
181
  "path": "harness-run/reference.md",
182
- "sha256": "0c47bca05013669fb1f1a6d6d232aa7771657a5b9727f666811bc2d9e640850c"
182
+ "sha256": "00d13333bc9e398842155bc4f9e59792be3666b15b471e093c8f50fe8aa0abf6"
183
183
  },
184
184
  {
185
185
  "path": "harness-run/SKILL.md",
186
- "sha256": "5814f7dd7b7bd971976bc0dba7721a047f039b55ae4d6086d725416aa79f0928"
186
+ "sha256": "1f2ba724823e30da0d0cde2ae92a21f6682be2ebabc30ddd3076550a03c6e69d"
187
187
  },
188
188
  {
189
189
  "path": "harness-submit/checklist.md",
190
- "sha256": "297a6a235ef03cd49ef1c3bd13180040f8ce25354b2ced82373d4a7a5f0dc181"
190
+ "sha256": "63d7979d4d96f24d012922e0b18e8d9c29f36ad2a14fe794c227bce0e0c6e038"
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": "d0e68205368a5bec4cc2371ceb3fdc0b813c2ea6299c7552e86932d868ffe0f7"
198
+ "sha256": "1919f2fd42a5e54a7820a2fc9466aef8ba5e1a3967245d62289e2b27b5327c40"
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": "da23912af2f8fa7f8ef631316cf6b771554d1ab2ae6161403f4905dcdaf5e7d5"
206
+ "sha256": "1eabe1c4083601dee1bf5013ef60d0e60c4bdd6fe3a74f123966b8a5eb681806"
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": "a87cfa2f5467a236eb791e516ffc6ae2c7097f77d4beba62d0a44c078a802397"
230
+ "sha256": "bbc89856c31502a4dff11d3a218c60ad661865dc663d54b35bada838c5a00884"
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",
@@ -295,7 +295,7 @@
295
295
  },
296
296
  {
297
297
  "path": "scripts/harness_integration.py",
298
- "sha256": "613440b92d14cef920647e61eb524eb8f539add5b7fd68e7a263fd541f99316a"
298
+ "sha256": "777c8d0bd07b026645d5c6938da64699c123ab13870f04963fa0b09a900b095d"
299
299
  },
300
300
  {
301
301
  "path": "scripts/harness_ledger.py",
@@ -311,7 +311,7 @@
311
311
  },
312
312
  {
313
313
  "path": "scripts/harness_plan_finalize.py",
314
- "sha256": "6fd97c6d91d180fa0ce2b73ac16c13ee741ef8a78f8a78b0af6e061d2b9eb7da"
314
+ "sha256": "e5152dda3380b1c1acdd219f8af0117b0c1670f0998ea62340f89e27a09f7585"
315
315
  },
316
316
  {
317
317
  "path": "scripts/harness_preflight.py",
@@ -319,7 +319,7 @@
319
319
  },
320
320
  {
321
321
  "path": "scripts/harness_profile.py",
322
- "sha256": "e242f79d36d7a38bdf3927cd2f65d1c7bb687a4119b07e41a59fec6989d5e253"
322
+ "sha256": "366575a5d201da2730f1c28acbbf4a4ef76dbdacb38d222a555671c93a06b8e0"
323
323
  },
324
324
  {
325
325
  "path": "scripts/harness_review.py",
@@ -327,11 +327,11 @@
327
327
  },
328
328
  {
329
329
  "path": "scripts/harness_runtime.py",
330
- "sha256": "8959e8702bf703380dc2de92bf33aef3f9520d66ffd790c2295ce6cae1c28cab"
330
+ "sha256": "0cc27b7622922fa1c998973979d4970c5c993efe42545fa64dd0e64993030fce"
331
331
  },
332
332
  {
333
333
  "path": "scripts/harness_service.py",
334
- "sha256": "17c26b40ed3e7d110b74ef61e627fa0ad1bc84718a1721a066e6d72ee0e37649"
334
+ "sha256": "af0eb7c93d5f856c5ed5a977e3f9a12dc0ced5baca571f7023f6b04ece46baf6"
335
335
  },
336
336
  {
337
337
  "path": "scripts/harness_state.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"