@hunter-harness/workflow-harness 0.2.67 → 0.2.70

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 (210) 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 +401 -88
  3. package/harness/bundles/general/claude-code/harness-archive/SKILL.md +1 -1
  4. package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +1 -1
  5. package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
  6. package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +1 -1
  7. package/harness/bundles/general/claude-code/harness-plan/SKILL.md +4 -2
  8. package/harness/bundles/general/claude-code/harness-plan/reference.md +32 -2
  9. package/harness/bundles/general/claude-code/harness-pull/SKILL.md +73 -0
  10. package/harness/bundles/general/claude-code/harness-push/SKILL.md +73 -0
  11. package/harness/bundles/general/claude-code/harness-review/SKILL.md +1 -1
  12. package/harness/bundles/general/claude-code/harness-run/SKILL.md +3 -1
  13. package/harness/bundles/general/claude-code/harness-run/reference.md +20 -0
  14. package/harness/bundles/general/claude-code/harness-submit/SKILL.md +1 -1
  15. package/harness/bundles/general/claude-code/harness-sync/SKILL.md +1 -1
  16. package/harness/bundles/general/claude-code/harness-test/SKILL.md +3 -1
  17. package/harness/bundles/general/claude-code/harness-test/pitfalls.md +34 -3
  18. package/harness/bundles/general/claude-code/harness-test/reference.md +9 -0
  19. package/harness/bundles/general/claude-code/scripts/harness_context.py +27 -7
  20. package/harness/bundles/general/claude-code/scripts/harness_events.py +12 -3
  21. package/harness/bundles/general/claude-code/scripts/harness_gate.py +127 -11
  22. package/harness/bundles/general/claude-code/scripts/harness_ledger.py +244 -5
  23. package/harness/bundles/general/claude-code/scripts/harness_plan_finalize.py +373 -19
  24. package/harness/bundles/general/claude-code/scripts/harness_service.py +69 -15
  25. package/harness/bundles/general/claude-code/scripts/harness_test_guard.py +48 -1
  26. package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
  27. package/harness/bundles/general/codebuddy/contracts/workflow-policy.json +401 -88
  28. package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +1 -1
  29. package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +1 -1
  30. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
  31. package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  32. package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +4 -2
  33. package/harness/bundles/general/codebuddy/harness-plan/reference.md +32 -2
  34. package/harness/bundles/general/codebuddy/harness-pull/SKILL.md +55 -0
  35. package/harness/bundles/general/codebuddy/harness-push/SKILL.md +55 -0
  36. package/harness/bundles/general/codebuddy/harness-review/SKILL.md +1 -1
  37. package/harness/bundles/general/codebuddy/harness-run/SKILL.md +3 -1
  38. package/harness/bundles/general/codebuddy/harness-run/reference.md +20 -0
  39. package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +1 -1
  40. package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +1 -1
  41. package/harness/bundles/general/codebuddy/harness-test/SKILL.md +3 -1
  42. package/harness/bundles/general/codebuddy/harness-test/pitfalls.md +34 -3
  43. package/harness/bundles/general/codebuddy/harness-test/reference.md +9 -0
  44. package/harness/bundles/general/codebuddy/scripts/harness_context.py +27 -7
  45. package/harness/bundles/general/codebuddy/scripts/harness_events.py +12 -3
  46. package/harness/bundles/general/codebuddy/scripts/harness_gate.py +127 -11
  47. package/harness/bundles/general/codebuddy/scripts/harness_ledger.py +244 -5
  48. package/harness/bundles/general/codebuddy/scripts/harness_plan_finalize.py +373 -19
  49. package/harness/bundles/general/codebuddy/scripts/harness_service.py +69 -15
  50. package/harness/bundles/general/codebuddy/scripts/harness_test_guard.py +48 -1
  51. package/harness/bundles/general/codex/.harness-build.json +1 -1
  52. package/harness/bundles/general/codex/contracts/workflow-policy.json +401 -88
  53. package/harness/bundles/general/codex/harness-archive/SKILL.md +1 -1
  54. package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +1 -1
  55. package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +1 -1
  56. package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +1 -1
  57. package/harness/bundles/general/codex/harness-plan/SKILL.md +4 -2
  58. package/harness/bundles/general/codex/harness-plan/reference.md +32 -2
  59. package/harness/bundles/general/codex/harness-pull/SKILL.md +55 -0
  60. package/harness/bundles/general/codex/harness-push/SKILL.md +55 -0
  61. package/harness/bundles/general/codex/harness-review/SKILL.md +1 -1
  62. package/harness/bundles/general/codex/harness-run/SKILL.md +3 -1
  63. package/harness/bundles/general/codex/harness-run/reference.md +20 -0
  64. package/harness/bundles/general/codex/harness-submit/SKILL.md +1 -1
  65. package/harness/bundles/general/codex/harness-sync/SKILL.md +1 -1
  66. package/harness/bundles/general/codex/harness-test/SKILL.md +3 -1
  67. package/harness/bundles/general/codex/harness-test/pitfalls.md +34 -3
  68. package/harness/bundles/general/codex/harness-test/reference.md +9 -0
  69. package/harness/bundles/general/codex/scripts/harness_context.py +27 -7
  70. package/harness/bundles/general/codex/scripts/harness_events.py +12 -3
  71. package/harness/bundles/general/codex/scripts/harness_gate.py +127 -11
  72. package/harness/bundles/general/codex/scripts/harness_ledger.py +244 -5
  73. package/harness/bundles/general/codex/scripts/harness_plan_finalize.py +373 -19
  74. package/harness/bundles/general/codex/scripts/harness_service.py +69 -15
  75. package/harness/bundles/general/codex/scripts/harness_test_guard.py +48 -1
  76. package/harness/bundles/general/cursor/.harness-build.json +1 -1
  77. package/harness/bundles/general/cursor/contracts/workflow-policy.json +401 -88
  78. package/harness/bundles/general/cursor/harness-archive/SKILL.md +1 -1
  79. package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +1 -1
  80. package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +1 -1
  81. package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +1 -1
  82. package/harness/bundles/general/cursor/harness-plan/SKILL.md +4 -2
  83. package/harness/bundles/general/cursor/harness-plan/reference.md +32 -2
  84. package/harness/bundles/general/cursor/harness-pull/SKILL.md +55 -0
  85. package/harness/bundles/general/cursor/harness-push/SKILL.md +55 -0
  86. package/harness/bundles/general/cursor/harness-review/SKILL.md +1 -1
  87. package/harness/bundles/general/cursor/harness-run/SKILL.md +3 -1
  88. package/harness/bundles/general/cursor/harness-run/reference.md +20 -0
  89. package/harness/bundles/general/cursor/harness-submit/SKILL.md +1 -1
  90. package/harness/bundles/general/cursor/harness-sync/SKILL.md +1 -1
  91. package/harness/bundles/general/cursor/harness-test/SKILL.md +3 -1
  92. package/harness/bundles/general/cursor/harness-test/pitfalls.md +34 -3
  93. package/harness/bundles/general/cursor/harness-test/reference.md +9 -0
  94. package/harness/bundles/general/cursor/scripts/harness_context.py +27 -7
  95. package/harness/bundles/general/cursor/scripts/harness_events.py +12 -3
  96. package/harness/bundles/general/cursor/scripts/harness_gate.py +127 -11
  97. package/harness/bundles/general/cursor/scripts/harness_ledger.py +244 -5
  98. package/harness/bundles/general/cursor/scripts/harness_plan_finalize.py +373 -19
  99. package/harness/bundles/general/cursor/scripts/harness_service.py +69 -15
  100. package/harness/bundles/general/cursor/scripts/harness_test_guard.py +48 -1
  101. package/harness/bundles/java/claude-code/.harness-build.json +1 -1
  102. package/harness/bundles/java/claude-code/contracts/workflow-policy.json +401 -88
  103. package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +1 -1
  104. package/harness/bundles/java/claude-code/harness-archive/SKILL.md +1 -1
  105. package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +1 -1
  106. package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
  107. package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +1 -1
  108. package/harness/bundles/java/claude-code/harness-package/SKILL.md +1 -1
  109. package/harness/bundles/java/claude-code/harness-plan/SKILL.md +4 -2
  110. package/harness/bundles/java/claude-code/harness-plan/reference.md +32 -2
  111. package/harness/bundles/java/claude-code/harness-pull/SKILL.md +73 -0
  112. package/harness/bundles/java/claude-code/harness-push/SKILL.md +73 -0
  113. package/harness/bundles/java/claude-code/harness-review/SKILL.md +1 -1
  114. package/harness/bundles/java/claude-code/harness-run/SKILL.md +3 -1
  115. package/harness/bundles/java/claude-code/harness-submit/SKILL.md +1 -1
  116. package/harness/bundles/java/claude-code/harness-sync/SKILL.md +1 -1
  117. package/harness/bundles/java/claude-code/harness-test/SKILL.md +3 -1
  118. package/harness/bundles/java/claude-code/harness-test/pitfalls.md +34 -3
  119. package/harness/bundles/java/claude-code/scripts/harness_context.py +27 -7
  120. package/harness/bundles/java/claude-code/scripts/harness_events.py +12 -3
  121. package/harness/bundles/java/claude-code/scripts/harness_gate.py +127 -11
  122. package/harness/bundles/java/claude-code/scripts/harness_ledger.py +244 -5
  123. package/harness/bundles/java/claude-code/scripts/harness_plan_finalize.py +373 -19
  124. package/harness/bundles/java/claude-code/scripts/harness_service.py +69 -15
  125. package/harness/bundles/java/claude-code/scripts/harness_test_guard.py +48 -1
  126. package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
  127. package/harness/bundles/java/codebuddy/contracts/workflow-policy.json +401 -88
  128. package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +1 -1
  129. package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +1 -1
  130. package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +1 -1
  131. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
  132. package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  133. package/harness/bundles/java/codebuddy/harness-package/SKILL.md +1 -1
  134. package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +4 -2
  135. package/harness/bundles/java/codebuddy/harness-plan/reference.md +32 -2
  136. package/harness/bundles/java/codebuddy/harness-pull/SKILL.md +55 -0
  137. package/harness/bundles/java/codebuddy/harness-push/SKILL.md +55 -0
  138. package/harness/bundles/java/codebuddy/harness-review/SKILL.md +1 -1
  139. package/harness/bundles/java/codebuddy/harness-run/SKILL.md +3 -1
  140. package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +1 -1
  141. package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +1 -1
  142. package/harness/bundles/java/codebuddy/harness-test/SKILL.md +3 -1
  143. package/harness/bundles/java/codebuddy/harness-test/pitfalls.md +34 -3
  144. package/harness/bundles/java/codebuddy/scripts/harness_context.py +27 -7
  145. package/harness/bundles/java/codebuddy/scripts/harness_events.py +12 -3
  146. package/harness/bundles/java/codebuddy/scripts/harness_gate.py +127 -11
  147. package/harness/bundles/java/codebuddy/scripts/harness_ledger.py +244 -5
  148. package/harness/bundles/java/codebuddy/scripts/harness_plan_finalize.py +373 -19
  149. package/harness/bundles/java/codebuddy/scripts/harness_service.py +69 -15
  150. package/harness/bundles/java/codebuddy/scripts/harness_test_guard.py +48 -1
  151. package/harness/bundles/java/codex/.harness-build.json +1 -1
  152. package/harness/bundles/java/codex/contracts/workflow-policy.json +401 -88
  153. package/harness/bundles/java/codex/harness-apidoc/SKILL.md +1 -1
  154. package/harness/bundles/java/codex/harness-archive/SKILL.md +1 -1
  155. package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +1 -1
  156. package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +1 -1
  157. package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +1 -1
  158. package/harness/bundles/java/codex/harness-package/SKILL.md +1 -1
  159. package/harness/bundles/java/codex/harness-plan/SKILL.md +4 -2
  160. package/harness/bundles/java/codex/harness-plan/reference.md +32 -2
  161. package/harness/bundles/java/codex/harness-pull/SKILL.md +55 -0
  162. package/harness/bundles/java/codex/harness-push/SKILL.md +55 -0
  163. package/harness/bundles/java/codex/harness-review/SKILL.md +1 -1
  164. package/harness/bundles/java/codex/harness-run/SKILL.md +3 -1
  165. package/harness/bundles/java/codex/harness-submit/SKILL.md +1 -1
  166. package/harness/bundles/java/codex/harness-sync/SKILL.md +1 -1
  167. package/harness/bundles/java/codex/harness-test/SKILL.md +3 -1
  168. package/harness/bundles/java/codex/harness-test/pitfalls.md +34 -3
  169. package/harness/bundles/java/codex/scripts/harness_context.py +27 -7
  170. package/harness/bundles/java/codex/scripts/harness_events.py +12 -3
  171. package/harness/bundles/java/codex/scripts/harness_gate.py +127 -11
  172. package/harness/bundles/java/codex/scripts/harness_ledger.py +244 -5
  173. package/harness/bundles/java/codex/scripts/harness_plan_finalize.py +373 -19
  174. package/harness/bundles/java/codex/scripts/harness_service.py +69 -15
  175. package/harness/bundles/java/codex/scripts/harness_test_guard.py +48 -1
  176. package/harness/bundles/java/cursor/.harness-build.json +1 -1
  177. package/harness/bundles/java/cursor/contracts/workflow-policy.json +401 -88
  178. package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +1 -1
  179. package/harness/bundles/java/cursor/harness-archive/SKILL.md +1 -1
  180. package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +1 -1
  181. package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +1 -1
  182. package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +1 -1
  183. package/harness/bundles/java/cursor/harness-package/SKILL.md +1 -1
  184. package/harness/bundles/java/cursor/harness-plan/SKILL.md +4 -2
  185. package/harness/bundles/java/cursor/harness-plan/reference.md +32 -2
  186. package/harness/bundles/java/cursor/harness-pull/SKILL.md +55 -0
  187. package/harness/bundles/java/cursor/harness-push/SKILL.md +55 -0
  188. package/harness/bundles/java/cursor/harness-review/SKILL.md +1 -1
  189. package/harness/bundles/java/cursor/harness-run/SKILL.md +3 -1
  190. package/harness/bundles/java/cursor/harness-submit/SKILL.md +1 -1
  191. package/harness/bundles/java/cursor/harness-sync/SKILL.md +1 -1
  192. package/harness/bundles/java/cursor/harness-test/SKILL.md +3 -1
  193. package/harness/bundles/java/cursor/harness-test/pitfalls.md +34 -3
  194. package/harness/bundles/java/cursor/scripts/harness_context.py +27 -7
  195. package/harness/bundles/java/cursor/scripts/harness_events.py +12 -3
  196. package/harness/bundles/java/cursor/scripts/harness_gate.py +127 -11
  197. package/harness/bundles/java/cursor/scripts/harness_ledger.py +244 -5
  198. package/harness/bundles/java/cursor/scripts/harness_plan_finalize.py +373 -19
  199. package/harness/bundles/java/cursor/scripts/harness_service.py +69 -15
  200. package/harness/bundles/java/cursor/scripts/harness_test_guard.py +48 -1
  201. package/harness/manifests/general/claude-code.json +36 -26
  202. package/harness/manifests/general/codebuddy.json +36 -26
  203. package/harness/manifests/general/codex.json +36 -26
  204. package/harness/manifests/general/cursor.json +36 -26
  205. package/harness/manifests/java/claude-code.json +36 -26
  206. package/harness/manifests/java/codebuddy.json +36 -26
  207. package/harness/manifests/java/codex.json +36 -26
  208. package/harness/manifests/java/cursor.json +36 -26
  209. package/hunter-workflow-family.json +11 -7
  210. package/package.json +1 -1
@@ -178,6 +178,32 @@ def _state_project_root(project: Path) -> Path:
178
178
  return resolved.parent if resolved.name == ".git" else project
179
179
 
180
180
 
181
+ def _invalid_project_root(
182
+ action: str, project: Path | str, resolved: Path
183
+ ) -> dict[str, Any] | None:
184
+ """Reject a --project that is not an existing directory.
185
+
186
+ Passing the *project name* (``--project udp``) instead of its path used to
187
+ resolve to ``<cwd>/udp`` and then surface as SNAPSHOT_MISSING — an error
188
+ that points at the wrong thing entirely. Fail here with the resolved path
189
+ so the real mistake is visible.
190
+ """
191
+ if resolved.is_dir():
192
+ return None
193
+ return _result(
194
+ False,
195
+ action,
196
+ "PROJECT_ROOT_INVALID",
197
+ [],
198
+ project=str(project),
199
+ resolvedProject=str(resolved),
200
+ hint=(
201
+ "--project takes a filesystem path to the project root "
202
+ "(use '.' when running from it), not the project name"
203
+ ),
204
+ )
205
+
206
+
181
207
  def _change_dir(project: Path, change_dir: Path | str) -> Path | None:
182
208
  state_project = _state_project_root(project)
183
209
  candidate = Path(change_dir)
@@ -556,6 +582,9 @@ def record(
556
582
  ) -> dict[str, Any]:
557
583
  action = "record"
558
584
  project_root = Path(project).resolve()
585
+ invalid_root = _invalid_project_root(action, project, project_root)
586
+ if invalid_root is not None:
587
+ return invalid_root
559
588
  if not files:
560
589
  return _result(False, action, "EMPTY_FILES", [])
561
590
  if reason not in REASONS:
@@ -1452,6 +1481,9 @@ def _reconcile_close_manifest(
1452
1481
  def begin(project: Path | str, change_dir: Path | str) -> dict[str, Any]:
1453
1482
  action = "begin"
1454
1483
  project_root = Path(project).resolve()
1484
+ invalid_root = _invalid_project_root(action, project, project_root)
1485
+ if invalid_root is not None:
1486
+ return invalid_root
1455
1487
  change_root = _change_dir(project_root, change_dir)
1456
1488
  if change_root is None:
1457
1489
  return _result(False, action, "CHANGE_DIR_OUTSIDE_PROJECT", [])
@@ -1545,12 +1577,24 @@ def begin(project: Path | str, change_dir: Path | str) -> dict[str, Any]:
1545
1577
  def close(project: Path | str, change_dir: Path | str) -> dict[str, Any]:
1546
1578
  action = "close"
1547
1579
  project_root = Path(project).resolve()
1580
+ invalid_root = _invalid_project_root(action, project, project_root)
1581
+ if invalid_root is not None:
1582
+ return invalid_root
1548
1583
  change_root = _change_dir(project_root, change_dir)
1549
1584
  if change_root is None:
1550
1585
  return _result(False, action, "CHANGE_DIR_OUTSIDE_PROJECT", [])
1551
1586
  snapshot_path = _state_root(change_root) / SNAPSHOT_REL
1552
1587
  if not snapshot_path.is_file():
1553
- return _result(False, action, "SNAPSHOT_MISSING", [])
1588
+ # Name the exact path: this snapshot is evidence/test-guard-snapshot.json,
1589
+ # not meta/state-snapshot.json, and the two are easy to confuse.
1590
+ return _result(
1591
+ False,
1592
+ action,
1593
+ "SNAPSHOT_MISSING",
1594
+ [],
1595
+ expectedSnapshot=str(snapshot_path),
1596
+ hint="run `harness_test_guard.py begin` for this change first",
1597
+ )
1554
1598
  try:
1555
1599
  snapshot = _read_json(snapshot_path)
1556
1600
  except (OSError, json.JSONDecodeError) as exc:
@@ -1752,6 +1796,9 @@ def mark(
1752
1796
  def stage(project: Path | str, change_dir: Path | str) -> dict[str, Any]:
1753
1797
  action = "stage"
1754
1798
  project_root = Path(project).resolve()
1799
+ invalid_root = _invalid_project_root(action, project, project_root)
1800
+ if invalid_root is not None:
1801
+ return invalid_root
1755
1802
  change_root = _change_dir(project_root, change_dir)
1756
1803
  if change_root is None:
1757
1804
  return _result(False, action, "CHANGE_DIR_OUTSIDE_PROJECT", [])
@@ -2,5 +2,5 @@
2
2
  "schemaVersion": 1,
3
3
  "overlay": "java",
4
4
  "agent": "cursor",
5
- "coreHash": "0fb3980d4eb27d4c"
5
+ "coreHash": "7dde6304bdb8878c"
6
6
  }