@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.
- package/harness/bundles/general/claude-code/.harness-build.json +1 -1
- package/harness/bundles/general/claude-code/contracts/workflow-policy.json +401 -88
- package/harness/bundles/general/claude-code/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-plan/SKILL.md +4 -2
- package/harness/bundles/general/claude-code/harness-plan/reference.md +32 -2
- package/harness/bundles/general/claude-code/harness-pull/SKILL.md +73 -0
- package/harness/bundles/general/claude-code/harness-push/SKILL.md +73 -0
- package/harness/bundles/general/claude-code/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-run/SKILL.md +3 -1
- package/harness/bundles/general/claude-code/harness-run/reference.md +20 -0
- package/harness/bundles/general/claude-code/harness-submit/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-test/SKILL.md +3 -1
- package/harness/bundles/general/claude-code/harness-test/pitfalls.md +34 -3
- package/harness/bundles/general/claude-code/harness-test/reference.md +9 -0
- package/harness/bundles/general/claude-code/scripts/harness_context.py +27 -7
- package/harness/bundles/general/claude-code/scripts/harness_events.py +12 -3
- package/harness/bundles/general/claude-code/scripts/harness_gate.py +127 -11
- package/harness/bundles/general/claude-code/scripts/harness_ledger.py +244 -5
- package/harness/bundles/general/claude-code/scripts/harness_plan_finalize.py +373 -19
- package/harness/bundles/general/claude-code/scripts/harness_service.py +69 -15
- package/harness/bundles/general/claude-code/scripts/harness_test_guard.py +48 -1
- package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/general/codebuddy/contracts/workflow-policy.json +401 -88
- package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +4 -2
- package/harness/bundles/general/codebuddy/harness-plan/reference.md +32 -2
- package/harness/bundles/general/codebuddy/harness-pull/SKILL.md +55 -0
- package/harness/bundles/general/codebuddy/harness-push/SKILL.md +55 -0
- package/harness/bundles/general/codebuddy/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-run/SKILL.md +3 -1
- package/harness/bundles/general/codebuddy/harness-run/reference.md +20 -0
- package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-test/SKILL.md +3 -1
- package/harness/bundles/general/codebuddy/harness-test/pitfalls.md +34 -3
- package/harness/bundles/general/codebuddy/harness-test/reference.md +9 -0
- package/harness/bundles/general/codebuddy/scripts/harness_context.py +27 -7
- package/harness/bundles/general/codebuddy/scripts/harness_events.py +12 -3
- package/harness/bundles/general/codebuddy/scripts/harness_gate.py +127 -11
- package/harness/bundles/general/codebuddy/scripts/harness_ledger.py +244 -5
- package/harness/bundles/general/codebuddy/scripts/harness_plan_finalize.py +373 -19
- package/harness/bundles/general/codebuddy/scripts/harness_service.py +69 -15
- package/harness/bundles/general/codebuddy/scripts/harness_test_guard.py +48 -1
- package/harness/bundles/general/codex/.harness-build.json +1 -1
- package/harness/bundles/general/codex/contracts/workflow-policy.json +401 -88
- package/harness/bundles/general/codex/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-plan/SKILL.md +4 -2
- package/harness/bundles/general/codex/harness-plan/reference.md +32 -2
- package/harness/bundles/general/codex/harness-pull/SKILL.md +55 -0
- package/harness/bundles/general/codex/harness-push/SKILL.md +55 -0
- package/harness/bundles/general/codex/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-run/SKILL.md +3 -1
- package/harness/bundles/general/codex/harness-run/reference.md +20 -0
- package/harness/bundles/general/codex/harness-submit/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-test/SKILL.md +3 -1
- package/harness/bundles/general/codex/harness-test/pitfalls.md +34 -3
- package/harness/bundles/general/codex/harness-test/reference.md +9 -0
- package/harness/bundles/general/codex/scripts/harness_context.py +27 -7
- package/harness/bundles/general/codex/scripts/harness_events.py +12 -3
- package/harness/bundles/general/codex/scripts/harness_gate.py +127 -11
- package/harness/bundles/general/codex/scripts/harness_ledger.py +244 -5
- package/harness/bundles/general/codex/scripts/harness_plan_finalize.py +373 -19
- package/harness/bundles/general/codex/scripts/harness_service.py +69 -15
- package/harness/bundles/general/codex/scripts/harness_test_guard.py +48 -1
- package/harness/bundles/general/cursor/.harness-build.json +1 -1
- package/harness/bundles/general/cursor/contracts/workflow-policy.json +401 -88
- package/harness/bundles/general/cursor/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-plan/SKILL.md +4 -2
- package/harness/bundles/general/cursor/harness-plan/reference.md +32 -2
- package/harness/bundles/general/cursor/harness-pull/SKILL.md +55 -0
- package/harness/bundles/general/cursor/harness-push/SKILL.md +55 -0
- package/harness/bundles/general/cursor/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-run/SKILL.md +3 -1
- package/harness/bundles/general/cursor/harness-run/reference.md +20 -0
- package/harness/bundles/general/cursor/harness-submit/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-test/SKILL.md +3 -1
- package/harness/bundles/general/cursor/harness-test/pitfalls.md +34 -3
- package/harness/bundles/general/cursor/harness-test/reference.md +9 -0
- package/harness/bundles/general/cursor/scripts/harness_context.py +27 -7
- package/harness/bundles/general/cursor/scripts/harness_events.py +12 -3
- package/harness/bundles/general/cursor/scripts/harness_gate.py +127 -11
- package/harness/bundles/general/cursor/scripts/harness_ledger.py +244 -5
- package/harness/bundles/general/cursor/scripts/harness_plan_finalize.py +373 -19
- package/harness/bundles/general/cursor/scripts/harness_service.py +69 -15
- package/harness/bundles/general/cursor/scripts/harness_test_guard.py +48 -1
- package/harness/bundles/java/claude-code/.harness-build.json +1 -1
- package/harness/bundles/java/claude-code/contracts/workflow-policy.json +401 -88
- package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-archive/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-package/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-plan/SKILL.md +4 -2
- package/harness/bundles/java/claude-code/harness-plan/reference.md +32 -2
- package/harness/bundles/java/claude-code/harness-pull/SKILL.md +73 -0
- package/harness/bundles/java/claude-code/harness-push/SKILL.md +73 -0
- package/harness/bundles/java/claude-code/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-run/SKILL.md +3 -1
- package/harness/bundles/java/claude-code/harness-submit/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-test/SKILL.md +3 -1
- package/harness/bundles/java/claude-code/harness-test/pitfalls.md +34 -3
- package/harness/bundles/java/claude-code/scripts/harness_context.py +27 -7
- package/harness/bundles/java/claude-code/scripts/harness_events.py +12 -3
- package/harness/bundles/java/claude-code/scripts/harness_gate.py +127 -11
- package/harness/bundles/java/claude-code/scripts/harness_ledger.py +244 -5
- package/harness/bundles/java/claude-code/scripts/harness_plan_finalize.py +373 -19
- package/harness/bundles/java/claude-code/scripts/harness_service.py +69 -15
- package/harness/bundles/java/claude-code/scripts/harness_test_guard.py +48 -1
- package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/java/codebuddy/contracts/workflow-policy.json +401 -88
- package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-package/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +4 -2
- package/harness/bundles/java/codebuddy/harness-plan/reference.md +32 -2
- package/harness/bundles/java/codebuddy/harness-pull/SKILL.md +55 -0
- package/harness/bundles/java/codebuddy/harness-push/SKILL.md +55 -0
- package/harness/bundles/java/codebuddy/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-run/SKILL.md +3 -1
- package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-test/SKILL.md +3 -1
- package/harness/bundles/java/codebuddy/harness-test/pitfalls.md +34 -3
- package/harness/bundles/java/codebuddy/scripts/harness_context.py +27 -7
- package/harness/bundles/java/codebuddy/scripts/harness_events.py +12 -3
- package/harness/bundles/java/codebuddy/scripts/harness_gate.py +127 -11
- package/harness/bundles/java/codebuddy/scripts/harness_ledger.py +244 -5
- package/harness/bundles/java/codebuddy/scripts/harness_plan_finalize.py +373 -19
- package/harness/bundles/java/codebuddy/scripts/harness_service.py +69 -15
- package/harness/bundles/java/codebuddy/scripts/harness_test_guard.py +48 -1
- package/harness/bundles/java/codex/.harness-build.json +1 -1
- package/harness/bundles/java/codex/contracts/workflow-policy.json +401 -88
- package/harness/bundles/java/codex/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-archive/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-package/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-plan/SKILL.md +4 -2
- package/harness/bundles/java/codex/harness-plan/reference.md +32 -2
- package/harness/bundles/java/codex/harness-pull/SKILL.md +55 -0
- package/harness/bundles/java/codex/harness-push/SKILL.md +55 -0
- package/harness/bundles/java/codex/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-run/SKILL.md +3 -1
- package/harness/bundles/java/codex/harness-submit/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-test/SKILL.md +3 -1
- package/harness/bundles/java/codex/harness-test/pitfalls.md +34 -3
- package/harness/bundles/java/codex/scripts/harness_context.py +27 -7
- package/harness/bundles/java/codex/scripts/harness_events.py +12 -3
- package/harness/bundles/java/codex/scripts/harness_gate.py +127 -11
- package/harness/bundles/java/codex/scripts/harness_ledger.py +244 -5
- package/harness/bundles/java/codex/scripts/harness_plan_finalize.py +373 -19
- package/harness/bundles/java/codex/scripts/harness_service.py +69 -15
- package/harness/bundles/java/codex/scripts/harness_test_guard.py +48 -1
- package/harness/bundles/java/cursor/.harness-build.json +1 -1
- package/harness/bundles/java/cursor/contracts/workflow-policy.json +401 -88
- package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-archive/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-package/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-plan/SKILL.md +4 -2
- package/harness/bundles/java/cursor/harness-plan/reference.md +32 -2
- package/harness/bundles/java/cursor/harness-pull/SKILL.md +55 -0
- package/harness/bundles/java/cursor/harness-push/SKILL.md +55 -0
- package/harness/bundles/java/cursor/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-run/SKILL.md +3 -1
- package/harness/bundles/java/cursor/harness-submit/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-test/SKILL.md +3 -1
- package/harness/bundles/java/cursor/harness-test/pitfalls.md +34 -3
- package/harness/bundles/java/cursor/scripts/harness_context.py +27 -7
- package/harness/bundles/java/cursor/scripts/harness_events.py +12 -3
- package/harness/bundles/java/cursor/scripts/harness_gate.py +127 -11
- package/harness/bundles/java/cursor/scripts/harness_ledger.py +244 -5
- package/harness/bundles/java/cursor/scripts/harness_plan_finalize.py +373 -19
- package/harness/bundles/java/cursor/scripts/harness_service.py +69 -15
- package/harness/bundles/java/cursor/scripts/harness_test_guard.py +48 -1
- package/harness/manifests/general/claude-code.json +36 -26
- package/harness/manifests/general/codebuddy.json +36 -26
- package/harness/manifests/general/codex.json +36 -26
- package/harness/manifests/general/cursor.json +36 -26
- package/harness/manifests/java/claude-code.json +36 -26
- package/harness/manifests/java/codebuddy.json +36 -26
- package/harness/manifests/java/codex.json +36 -26
- package/harness/manifests/java/cursor.json +36 -26
- package/hunter-workflow-family.json +11 -7
- 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
|
-
|
|
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", [])
|