@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
@@ -32,6 +32,7 @@ if str(SCRIPTS_DIR) not in sys.path:
32
32
  import harness_change as hc # noqa: E402
33
33
  import harness_events as he # noqa: E402
34
34
  import harness_ledger as hl # noqa: E402
35
+ import harness_paths as hp # noqa: E402
35
36
  import harness_workflow_policy as hwp # noqa: E402
36
37
  import harness_test_guard as htg # noqa: E402
37
38
 
@@ -149,7 +150,8 @@ def checkpoint_status(checkpoints: dict[str, Any] | None, checkpoint_id: str) ->
149
150
  def foundation_gate_blocks(task_number: int | None, change_dir: Path) -> dict[str, Any] | None:
150
151
  checkpoints = load_checkpoints(change_dir)
151
152
  status = checkpoint_status(checkpoints, "foundation-gate")
152
- if status == "approved":
153
+ # missing = checkpoint not enabled for this change (no file / no entry).
154
+ if status in {"approved", "missing"}:
153
155
  return None
154
156
  if task_number is None:
155
157
  return {
@@ -174,8 +176,25 @@ def foundation_gate_blocks(task_number: int | None, change_dir: Path) -> dict[st
174
176
  }
175
177
 
176
178
 
177
- def validate_ledger_entry_v2(entry: dict[str, Any], verification: str) -> list[str]:
179
+ def is_degraded_ledger_entry(entry: dict[str, Any]) -> bool:
180
+ """NOT_RUN + evidence starting with 'DEGRADED: <non-empty reason>'."""
181
+ if entry.get("status") != "NOT_RUN":
182
+ return False
183
+ evidence = str(entry.get("evidence") or "").strip()
184
+ if not evidence.startswith("DEGRADED:"):
185
+ return False
186
+ reason = evidence.split(":", 1)[1].strip()
187
+ return bool(reason)
188
+
189
+
190
+ def validate_ledger_entry_v2(entry: dict[str, Any], verification: str) -> tuple[list[str], bool]:
191
+ """Internal helper for ledger close validation (not a public API).
192
+
193
+ Returns ``(missing_fields, degraded_ok)`` where ``degraded_ok`` is True only when
194
+ the entry is a valid DEGRADED NOT_RUN record with no other missing fields.
195
+ """
178
196
  missing: list[str] = []
197
+ degraded = is_degraded_ledger_entry(entry)
179
198
  for field in LEDGER_V2_REQUIRED_ENTRY_FIELDS:
180
199
  value = entry.get(field)
181
200
  if field == "inputsFiles":
@@ -184,7 +203,7 @@ def validate_ledger_entry_v2(entry: dict[str, Any], verification: str) -> list[s
184
203
  elif verification == "unitTestFull" and not value:
185
204
  missing.append("inputsFiles(non-empty)")
186
205
  elif field == "status":
187
- if value != "OK":
206
+ if value != "OK" and not degraded:
188
207
  missing.append("status=OK")
189
208
  elif not (isinstance(value, str) and value.strip()):
190
209
  missing.append(field)
@@ -192,7 +211,7 @@ def validate_ledger_entry_v2(entry: dict[str, Any], verification: str) -> list[s
192
211
  missing.append("coverage(valid)")
193
212
  elif field == "algorithmVersion" and str(value).strip() != hl.LEDGER_VERSION:
194
213
  missing.append("algorithmVersion(harness-ledger-2)")
195
- return missing
214
+ return missing, degraded and not missing
196
215
 
197
216
 
198
217
  def validate_ledger_for_phase_close(
@@ -225,6 +244,7 @@ def validate_ledger_for_phase_close(
225
244
  }
226
245
 
227
246
  problems: list[dict[str, Any]] = []
247
+ degraded: list[str] = []
228
248
  for verification in required:
229
249
  entry = validations.get(verification)
230
250
  if not isinstance(entry, dict):
@@ -236,7 +256,7 @@ def validate_ledger_for_phase_close(
236
256
  }
237
257
  )
238
258
  continue
239
- missing = validate_ledger_entry_v2(entry, verification)
259
+ missing, is_degraded = validate_ledger_entry_v2(entry, verification)
240
260
  if missing:
241
261
  code = (
242
262
  "MISSING_V2_FIELDS"
@@ -258,6 +278,8 @@ def validate_ledger_for_phase_close(
258
278
  "code": code,
259
279
  }
260
280
  )
281
+ elif is_degraded:
282
+ degraded.append(verification)
261
283
 
262
284
  if problems:
263
285
  return {
@@ -269,6 +291,15 @@ def validate_ledger_for_phase_close(
269
291
  "ledgerPath": str(ledger_path) if ledger_path else None,
270
292
  "detail": "natural-language override is not permitted",
271
293
  }
294
+ if degraded:
295
+ return {
296
+ "ok": True,
297
+ "code": "LEDGER_OK_DEGRADED",
298
+ "phase": phase,
299
+ "validated": required,
300
+ "degraded": degraded,
301
+ "ledgerPath": str(ledger_path) if ledger_path else None,
302
+ }
272
303
  return {
273
304
  "ok": True,
274
305
  "code": "LEDGER_OK",
@@ -417,7 +448,11 @@ def change_code_root(change_dir: Path) -> Path:
417
448
  return project
418
449
 
419
450
 
420
- def classify_risk(change_dir: Path, stage: str) -> dict[str, Any]:
451
+ def classify_risk(
452
+ change_dir: Path,
453
+ stage: str,
454
+ workflow: dict[str, Any] | None = None,
455
+ ) -> dict[str, Any]:
421
456
  tier = "full"
422
457
  source = "default-full"
423
458
  plan_path = change_dir / "plans"
@@ -484,7 +519,31 @@ def classify_risk(change_dir: Path, stage: str) -> dict[str, Any]:
484
519
  tier = observed
485
520
  source = f"{source}+post-run"
486
521
  main_project = change_dir.parents[2]
487
- workflow = _load_workflow_policy(project=main_project)
522
+ if workflow is None:
523
+ workflow = _load_workflow_policy(project=main_project)
524
+ tier_policy = workflow["riskTiers"][tier]
525
+ unique_signals = sorted(set(signals))
526
+ payload = {
527
+ "ok": True,
528
+ "code": "CLASSIFIED",
529
+ "stage": stage,
530
+ "tier": tier,
531
+ "source": source,
532
+ "changeId": change_dir.name,
533
+ "signals": unique_signals,
534
+ "defaultPhases": list(tier_policy["defaultPhases"]),
535
+ "requiredValidations": list(tier_policy["requiredValidations"]),
536
+ "conditionalStages": list(tier_policy["conditionalStages"]),
537
+ "stageDecisions": _stage_decisions_for_tier(workflow, tier, unique_signals),
538
+ }
539
+ if stage == "post-run":
540
+ _write_json(change_dir / "meta" / "risk-classification.json", payload)
541
+ return payload
542
+
543
+
544
+ def _stage_decisions_for_tier(
545
+ workflow: dict[str, Any], tier: str, signals: list[str]
546
+ ) -> dict[str, dict[str, Any]]:
488
547
  tier_policy = workflow["riskTiers"][tier]
489
548
  unique_signals = sorted(set(signals))
490
549
  stage_decisions: dict[str, dict[str, Any]] = {}
@@ -501,22 +560,66 @@ def classify_risk(change_dir: Path, stage: str) -> dict[str, Any]:
501
560
  ),
502
561
  "matchedSignals": matched,
503
562
  }
504
- payload = {
563
+ return stage_decisions
564
+
565
+
566
+ def apply_tier_override(
567
+ payload: dict[str, Any],
568
+ workflow: dict[str, Any],
569
+ *,
570
+ tier: str,
571
+ override_by: str,
572
+ ) -> dict[str, Any]:
573
+ """Rebind payload to an explicit tier override (source=override)."""
574
+ tier_policy = workflow["riskTiers"][tier]
575
+ now = hc.now_iso()
576
+ signals = list(payload.get("signals") or [])
577
+ payload = dict(payload)
578
+ payload["tier"] = tier
579
+ payload["source"] = "override"
580
+ payload["defaultPhases"] = list(tier_policy["defaultPhases"])
581
+ payload["requiredValidations"] = list(tier_policy["requiredValidations"])
582
+ payload["conditionalStages"] = list(tier_policy["conditionalStages"])
583
+ payload["stageDecisions"] = _stage_decisions_for_tier(workflow, tier, signals)
584
+ payload["tierOverride"] = {"tier": tier, "by": override_by, "at": now}
585
+ return payload
586
+
587
+
588
+ def gate_policy_document(payload: dict[str, Any]) -> dict[str, Any]:
589
+ """Cross-change contract: meta/gate-policy.json (schemaVersion=1)."""
590
+ return {
591
+ "schemaVersion": 1,
592
+ "tier": payload["tier"],
593
+ "source": payload["source"],
594
+ "defaultPhases": list(payload.get("defaultPhases") or []),
595
+ "requiredValidations": list(payload.get("requiredValidations") or []),
596
+ "classifiedAt": payload.get("classifiedAt") or hc.now_iso(),
597
+ "tierOverride": payload.get("tierOverride"),
598
+ }
599
+
600
+
601
+ def classify_defaults(
602
+ workflow: dict[str, Any],
603
+ *,
604
+ change_id: str,
605
+ stage: str,
606
+ ) -> dict[str, Any]:
607
+ tier = "full"
608
+ source = "default-full"
609
+ tier_policy = workflow["riskTiers"][tier]
610
+ return {
505
611
  "ok": True,
506
612
  "code": "CLASSIFIED",
507
613
  "stage": stage,
508
614
  "tier": tier,
509
615
  "source": source,
510
- "changeId": change_dir.name,
511
- "signals": unique_signals,
616
+ "changeId": change_id,
617
+ "signals": [],
512
618
  "defaultPhases": list(tier_policy["defaultPhases"]),
513
619
  "requiredValidations": list(tier_policy["requiredValidations"]),
514
620
  "conditionalStages": list(tier_policy["conditionalStages"]),
515
- "stageDecisions": stage_decisions,
621
+ "stageDecisions": _stage_decisions_for_tier(workflow, tier, []),
516
622
  }
517
- if stage == "post-run":
518
- _write_json(change_dir / "meta" / "risk-classification.json", payload)
519
- return payload
520
623
 
521
624
 
522
625
  def lint_skill_tree(skills_root: Path) -> dict[str, Any]:
@@ -649,7 +752,7 @@ def append_phase_event(
649
752
  if key not in event and value is not None:
650
753
  event[key] = value
651
754
  line = json.dumps(event, ensure_ascii=False, separators=(",", ":"))
652
- lock_path = change_dir / "events.ndjson.lock"
755
+ lock_path = events_file.with_name(events_file.name + ".lock")
653
756
  with he.event_file_lock(lock_path):
654
757
  he.atomic_append_line(events_file, line)
655
758
  rendered = False
@@ -823,6 +926,14 @@ def cmd_close(args: argparse.Namespace) -> int:
823
926
  extra={k: v for k, v in ledger_result.items() if k not in {"ok", "message", "code"}},
824
927
  )
825
928
 
929
+ close_status = args.status
930
+ close_code = "PHASE_CLOSED"
931
+ if ledger_result.get("code") == "LEDGER_OK_DEGRADED":
932
+ close_code = "CLOSED_DEGRADED"
933
+ # Degraded close: phase.end status must not exceed WARN (OK → WARN).
934
+ if close_status == "OK":
935
+ close_status = "WARN"
936
+
826
937
  guard_result = None
827
938
  if args.phase in {"run", "test"}:
828
939
  project_root = args.project or str(project)
@@ -839,7 +950,7 @@ def cmd_close(args: argparse.Namespace) -> int:
839
950
  change_dir,
840
951
  phase=args.phase,
841
952
  type_="phase.end",
842
- status=args.status,
953
+ status=close_status,
843
954
  note=args.note or "",
844
955
  run_id=run_id,
845
956
  ) if not _phase_event_exists(change_dir, args.phase, "phase.end", run_id) else {
@@ -862,9 +973,9 @@ def cmd_close(args: argparse.Namespace) -> int:
862
973
 
863
974
  payload = {
864
975
  "ok": True,
865
- "code": "PHASE_CLOSED",
976
+ "code": close_code,
866
977
  "phase": args.phase,
867
- "status": args.status,
978
+ "status": close_status,
868
979
  "changeId": resolved["changeId"],
869
980
  "ledger": ledger_result,
870
981
  "testGuard": guard_result,
@@ -878,19 +989,56 @@ def cmd_close(args: argparse.Namespace) -> int:
878
989
  def cmd_classify(args: argparse.Namespace) -> int:
879
990
  as_json = bool(args.json)
880
991
  project = hc.resolve_main_project_root()
992
+ try:
993
+ workflow = _load_workflow_policy(project=project)
994
+ except (OSError, ValueError, hwp.PolicyValidationError) as exc:
995
+ return emit_error("POLICY_LOAD_FAILED", str(exc), as_json=as_json)
996
+
881
997
  resolved = hc.resolve_change(project, args.change)
882
- if not resolved.get("ok"):
883
- return emit_error(
884
- str(resolved.get("code", "RESOLVE_FAILED")),
885
- str(resolved.get("message", "change resolve failed")),
886
- as_json=as_json,
887
- extra={k: v for k, v in resolved.items() if k not in {"ok", "message"}},
998
+ change_dir: Path | None = None
999
+ change_id = str(args.change or "")
1000
+ if resolved.get("ok"):
1001
+ change_dir = Path(resolved["changeDir"])
1002
+ change_id = str(resolved.get("changeId") or change_dir.name)
1003
+ if not change_dir.is_dir():
1004
+ change_dir = None
1005
+
1006
+ if change_dir is not None:
1007
+ payload = classify_risk(change_dir, args.stage, workflow=workflow)
1008
+ else:
1009
+ payload = classify_defaults(workflow, change_id=change_id or "unknown", stage=args.stage)
1010
+ if not resolved.get("ok"):
1011
+ payload["resolveCode"] = resolved.get("code")
1012
+
1013
+ tier_override = getattr(args, "tier_override", None)
1014
+ if tier_override:
1015
+ payload = apply_tier_override(
1016
+ payload,
1017
+ workflow,
1018
+ tier=str(tier_override),
1019
+ override_by=str(getattr(args, "override_by", None) or "user"),
888
1020
  )
889
- payload = classify_risk(Path(resolved["changeDir"]), args.stage)
1021
+ else:
1022
+ payload.setdefault("tierOverride", None)
1023
+
1024
+ classified_at = hc.now_iso()
1025
+ payload["classifiedAt"] = classified_at
1026
+
1027
+ if change_dir is not None and change_dir.is_dir():
1028
+ policy_doc = gate_policy_document(payload)
1029
+ policy_path = change_dir / "meta" / "gate-policy.json"
1030
+ _write_json(policy_path, policy_doc)
1031
+ payload["policyPersisted"] = True
1032
+ payload["policyPath"] = str(policy_path)
1033
+ else:
1034
+ payload["policyPersisted"] = False
1035
+ payload["warning"] = (
1036
+ "change directory does not exist; gate-policy.json not written"
1037
+ )
1038
+
890
1039
  emit(payload, as_json=as_json)
891
1040
  return 0
892
1041
 
893
-
894
1042
  def cmd_checkpoint(args: argparse.Namespace) -> int:
895
1043
  as_json = bool(args.json)
896
1044
  project = hc.resolve_main_project_root()
@@ -934,11 +1082,31 @@ def cmd_checkpoint(args: argparse.Namespace) -> int:
934
1082
  as_json=as_json,
935
1083
  )
936
1084
  required_report = str(item.get("requiredReport") or "")
937
- report_path = change_dir / required_report
938
- if not required_report or not report_path.is_file() or report_path.stat().st_size == 0:
1085
+ report_rel = Path(required_report)
1086
+ if (
1087
+ not required_report
1088
+ or report_rel.is_absolute()
1089
+ or ".." in report_rel.parts
1090
+ ):
1091
+ return emit_error(
1092
+ "CHECKPOINT_REPORT_PATH_INVALID",
1093
+ f"required report path is invalid: {required_report or '<unset>'}",
1094
+ as_json=as_json,
1095
+ )
1096
+ state_dir = hp.resolve_state_dir_for_contract(change_dir, project)
1097
+ report_candidates = [state_dir / report_rel]
1098
+ if state_dir != change_dir:
1099
+ # Compatibility fallback for split-v1 changes created before dynamic
1100
+ # reports were routed to the state root.
1101
+ report_candidates.append(change_dir / report_rel)
1102
+ report_path = next(
1103
+ (candidate for candidate in report_candidates if candidate.is_file()),
1104
+ report_candidates[0],
1105
+ )
1106
+ if not report_path.is_file() or report_path.stat().st_size == 0:
939
1107
  return emit_error(
940
1108
  "CHECKPOINT_REPORT_MISSING",
941
- f"required report is missing: {required_report or '<unset>'}",
1109
+ f"required report is missing: {required_report}",
942
1110
  as_json=as_json,
943
1111
  )
944
1112
  report_text = report_path.read_text(encoding="utf-8", errors="replace")
@@ -1012,6 +1180,12 @@ def build_parser() -> argparse.ArgumentParser:
1012
1180
  p_classify = sub.add_parser("classify", parents=[shared])
1013
1181
  p_classify.add_argument("--change", default=None)
1014
1182
  p_classify.add_argument("--stage", required=True, choices=["plan", "post-run"])
1183
+ p_classify.add_argument(
1184
+ "--tier-override",
1185
+ default=None,
1186
+ choices=["fast", "standard", "full"],
1187
+ )
1188
+ p_classify.add_argument("--override-by", default="user")
1015
1189
  p_classify.set_defaults(func=cmd_classify)
1016
1190
 
1017
1191
  p_checkpoint = sub.add_parser("checkpoint", parents=[shared])