@hunter-harness/workflow-harness 0.2.18 → 0.2.19

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 (170) hide show
  1. package/harness/bundles/general/claude-code/.harness-build.json +1 -1
  2. package/harness/bundles/general/claude-code/harness-archive/SKILL.md +7 -1
  3. package/harness/bundles/general/claude-code/harness-archive/checklist.md +6 -0
  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 +1 -1
  8. package/harness/bundles/general/claude-code/harness-review/SKILL.md +1 -1
  9. package/harness/bundles/general/claude-code/harness-run/SKILL.md +1 -1
  10. package/harness/bundles/general/claude-code/harness-submit/SKILL.md +11 -2
  11. package/harness/bundles/general/claude-code/harness-submit/checklist.md +18 -2
  12. package/harness/bundles/general/claude-code/harness-sync/SKILL.md +1 -1
  13. package/harness/bundles/general/claude-code/harness-test/SKILL.md +1 -1
  14. package/harness/bundles/general/claude-code/protocols/report-pipeline-protocol.md +2 -0
  15. package/harness/bundles/general/claude-code/scripts/harness_archive.py +199 -30
  16. package/harness/bundles/general/claude-code/scripts/harness_events.py +5 -18
  17. package/harness/bundles/general/claude-code/scripts/harness_integration.py +153 -0
  18. package/harness/bundles/general/claude-code/scripts/harness_ledger.py +15 -2
  19. package/harness/bundles/general/claude-code/scripts/harness_paths.py +170 -1
  20. package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
  21. package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +7 -1
  22. package/harness/bundles/general/codebuddy/harness-archive/checklist.md +6 -0
  23. package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +1 -1
  24. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
  25. package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  26. package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +1 -1
  27. package/harness/bundles/general/codebuddy/harness-review/SKILL.md +1 -1
  28. package/harness/bundles/general/codebuddy/harness-run/SKILL.md +1 -1
  29. package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +11 -2
  30. package/harness/bundles/general/codebuddy/harness-submit/checklist.md +18 -2
  31. package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +1 -1
  32. package/harness/bundles/general/codebuddy/harness-test/SKILL.md +1 -1
  33. package/harness/bundles/general/codebuddy/protocols/report-pipeline-protocol.md +2 -0
  34. package/harness/bundles/general/codebuddy/scripts/harness_archive.py +199 -30
  35. package/harness/bundles/general/codebuddy/scripts/harness_events.py +5 -18
  36. package/harness/bundles/general/codebuddy/scripts/harness_integration.py +153 -0
  37. package/harness/bundles/general/codebuddy/scripts/harness_ledger.py +15 -2
  38. package/harness/bundles/general/codebuddy/scripts/harness_paths.py +170 -1
  39. package/harness/bundles/general/codex/.harness-build.json +1 -1
  40. package/harness/bundles/general/codex/harness-archive/SKILL.md +7 -1
  41. package/harness/bundles/general/codex/harness-archive/checklist.md +6 -0
  42. package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +1 -1
  43. package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +1 -1
  44. package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +1 -1
  45. package/harness/bundles/general/codex/harness-plan/SKILL.md +1 -1
  46. package/harness/bundles/general/codex/harness-review/SKILL.md +1 -1
  47. package/harness/bundles/general/codex/harness-run/SKILL.md +1 -1
  48. package/harness/bundles/general/codex/harness-submit/SKILL.md +11 -2
  49. package/harness/bundles/general/codex/harness-submit/checklist.md +18 -2
  50. package/harness/bundles/general/codex/harness-sync/SKILL.md +1 -1
  51. package/harness/bundles/general/codex/harness-test/SKILL.md +1 -1
  52. package/harness/bundles/general/codex/protocols/report-pipeline-protocol.md +2 -0
  53. package/harness/bundles/general/codex/scripts/harness_archive.py +199 -30
  54. package/harness/bundles/general/codex/scripts/harness_events.py +5 -18
  55. package/harness/bundles/general/codex/scripts/harness_integration.py +153 -0
  56. package/harness/bundles/general/codex/scripts/harness_ledger.py +15 -2
  57. package/harness/bundles/general/codex/scripts/harness_paths.py +170 -1
  58. package/harness/bundles/general/cursor/.harness-build.json +1 -1
  59. package/harness/bundles/general/cursor/harness-archive/SKILL.md +7 -1
  60. package/harness/bundles/general/cursor/harness-archive/checklist.md +6 -0
  61. package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +1 -1
  62. package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +1 -1
  63. package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +1 -1
  64. package/harness/bundles/general/cursor/harness-plan/SKILL.md +1 -1
  65. package/harness/bundles/general/cursor/harness-review/SKILL.md +1 -1
  66. package/harness/bundles/general/cursor/harness-run/SKILL.md +1 -1
  67. package/harness/bundles/general/cursor/harness-submit/SKILL.md +11 -2
  68. package/harness/bundles/general/cursor/harness-submit/checklist.md +18 -2
  69. package/harness/bundles/general/cursor/harness-sync/SKILL.md +1 -1
  70. package/harness/bundles/general/cursor/harness-test/SKILL.md +1 -1
  71. package/harness/bundles/general/cursor/protocols/report-pipeline-protocol.md +2 -0
  72. package/harness/bundles/general/cursor/scripts/harness_archive.py +199 -30
  73. package/harness/bundles/general/cursor/scripts/harness_events.py +5 -18
  74. package/harness/bundles/general/cursor/scripts/harness_integration.py +153 -0
  75. package/harness/bundles/general/cursor/scripts/harness_ledger.py +15 -2
  76. package/harness/bundles/general/cursor/scripts/harness_paths.py +170 -1
  77. package/harness/bundles/java/claude-code/.harness-build.json +1 -1
  78. package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +1 -1
  79. package/harness/bundles/java/claude-code/harness-archive/SKILL.md +7 -1
  80. package/harness/bundles/java/claude-code/harness-archive/checklist.md +6 -0
  81. package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +1 -1
  82. package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
  83. package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +1 -1
  84. package/harness/bundles/java/claude-code/harness-package/SKILL.md +1 -1
  85. package/harness/bundles/java/claude-code/harness-plan/SKILL.md +1 -1
  86. package/harness/bundles/java/claude-code/harness-review/SKILL.md +1 -1
  87. package/harness/bundles/java/claude-code/harness-run/SKILL.md +1 -1
  88. package/harness/bundles/java/claude-code/harness-submit/SKILL.md +11 -2
  89. package/harness/bundles/java/claude-code/harness-submit/checklist.md +18 -2
  90. package/harness/bundles/java/claude-code/harness-sync/SKILL.md +1 -1
  91. package/harness/bundles/java/claude-code/harness-test/SKILL.md +1 -1
  92. package/harness/bundles/java/claude-code/protocols/report-pipeline-protocol.md +2 -0
  93. package/harness/bundles/java/claude-code/scripts/harness_archive.py +199 -30
  94. package/harness/bundles/java/claude-code/scripts/harness_events.py +5 -18
  95. package/harness/bundles/java/claude-code/scripts/harness_integration.py +153 -0
  96. package/harness/bundles/java/claude-code/scripts/harness_ledger.py +15 -2
  97. package/harness/bundles/java/claude-code/scripts/harness_paths.py +170 -1
  98. package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
  99. package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +1 -1
  100. package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +7 -1
  101. package/harness/bundles/java/codebuddy/harness-archive/checklist.md +6 -0
  102. package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +1 -1
  103. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
  104. package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  105. package/harness/bundles/java/codebuddy/harness-package/SKILL.md +1 -1
  106. package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +1 -1
  107. package/harness/bundles/java/codebuddy/harness-review/SKILL.md +1 -1
  108. package/harness/bundles/java/codebuddy/harness-run/SKILL.md +1 -1
  109. package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +11 -2
  110. package/harness/bundles/java/codebuddy/harness-submit/checklist.md +18 -2
  111. package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +1 -1
  112. package/harness/bundles/java/codebuddy/harness-test/SKILL.md +1 -1
  113. package/harness/bundles/java/codebuddy/protocols/report-pipeline-protocol.md +2 -0
  114. package/harness/bundles/java/codebuddy/scripts/harness_archive.py +199 -30
  115. package/harness/bundles/java/codebuddy/scripts/harness_events.py +5 -18
  116. package/harness/bundles/java/codebuddy/scripts/harness_integration.py +153 -0
  117. package/harness/bundles/java/codebuddy/scripts/harness_ledger.py +15 -2
  118. package/harness/bundles/java/codebuddy/scripts/harness_paths.py +170 -1
  119. package/harness/bundles/java/codex/.harness-build.json +1 -1
  120. package/harness/bundles/java/codex/harness-apidoc/SKILL.md +1 -1
  121. package/harness/bundles/java/codex/harness-archive/SKILL.md +7 -1
  122. package/harness/bundles/java/codex/harness-archive/checklist.md +6 -0
  123. package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +1 -1
  124. package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +1 -1
  125. package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +1 -1
  126. package/harness/bundles/java/codex/harness-package/SKILL.md +1 -1
  127. package/harness/bundles/java/codex/harness-plan/SKILL.md +1 -1
  128. package/harness/bundles/java/codex/harness-review/SKILL.md +1 -1
  129. package/harness/bundles/java/codex/harness-run/SKILL.md +1 -1
  130. package/harness/bundles/java/codex/harness-submit/SKILL.md +11 -2
  131. package/harness/bundles/java/codex/harness-submit/checklist.md +18 -2
  132. package/harness/bundles/java/codex/harness-sync/SKILL.md +1 -1
  133. package/harness/bundles/java/codex/harness-test/SKILL.md +1 -1
  134. package/harness/bundles/java/codex/protocols/report-pipeline-protocol.md +2 -0
  135. package/harness/bundles/java/codex/scripts/harness_archive.py +199 -30
  136. package/harness/bundles/java/codex/scripts/harness_events.py +5 -18
  137. package/harness/bundles/java/codex/scripts/harness_integration.py +153 -0
  138. package/harness/bundles/java/codex/scripts/harness_ledger.py +15 -2
  139. package/harness/bundles/java/codex/scripts/harness_paths.py +170 -1
  140. package/harness/bundles/java/cursor/.harness-build.json +1 -1
  141. package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +1 -1
  142. package/harness/bundles/java/cursor/harness-archive/SKILL.md +7 -1
  143. package/harness/bundles/java/cursor/harness-archive/checklist.md +6 -0
  144. package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +1 -1
  145. package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +1 -1
  146. package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +1 -1
  147. package/harness/bundles/java/cursor/harness-package/SKILL.md +1 -1
  148. package/harness/bundles/java/cursor/harness-plan/SKILL.md +1 -1
  149. package/harness/bundles/java/cursor/harness-review/SKILL.md +1 -1
  150. package/harness/bundles/java/cursor/harness-run/SKILL.md +1 -1
  151. package/harness/bundles/java/cursor/harness-submit/SKILL.md +11 -2
  152. package/harness/bundles/java/cursor/harness-submit/checklist.md +18 -2
  153. package/harness/bundles/java/cursor/harness-sync/SKILL.md +1 -1
  154. package/harness/bundles/java/cursor/harness-test/SKILL.md +1 -1
  155. package/harness/bundles/java/cursor/protocols/report-pipeline-protocol.md +2 -0
  156. package/harness/bundles/java/cursor/scripts/harness_archive.py +199 -30
  157. package/harness/bundles/java/cursor/scripts/harness_events.py +5 -18
  158. package/harness/bundles/java/cursor/scripts/harness_integration.py +153 -0
  159. package/harness/bundles/java/cursor/scripts/harness_ledger.py +15 -2
  160. package/harness/bundles/java/cursor/scripts/harness_paths.py +170 -1
  161. package/harness/manifests/general/claude-code.json +19 -19
  162. package/harness/manifests/general/codebuddy.json +19 -19
  163. package/harness/manifests/general/codex.json +19 -19
  164. package/harness/manifests/general/cursor.json +19 -19
  165. package/harness/manifests/java/claude-code.json +21 -21
  166. package/harness/manifests/java/codebuddy.json +21 -21
  167. package/harness/manifests/java/codex.json +21 -21
  168. package/harness/manifests/java/cursor.json +21 -21
  169. package/hunter-workflow-family.json +1 -1
  170. package/package.json +1 -1
@@ -20,7 +20,7 @@ import re
20
20
  import subprocess
21
21
  import sys
22
22
  from pathlib import Path
23
- from typing import Any
23
+ from typing import Any, Sequence
24
24
 
25
25
  SCRIPTS_DIR = Path(__file__).resolve().parent
26
26
  if str(SCRIPTS_DIR) not in sys.path:
@@ -289,6 +289,175 @@ def assert_path_within(
289
289
  return resolved
290
290
 
291
291
 
292
+ class CleanupTopologyError(ValueError):
293
+ """Raised when cleanup would delete or traverse into state/archive roots."""
294
+
295
+ code = "CLEANUP_TOPOLOGY_REFUSED"
296
+
297
+
298
+ # Skip descending into these when scanning for junction/symlink escapes.
299
+ # Matches integration HEAVY_WORKTREE_ROOTS plus .git (topology scan only).
300
+ CLEANUP_WALK_SKIP_DIRS = frozenset(
301
+ {
302
+ "node_modules",
303
+ ".venv",
304
+ "venv",
305
+ "build",
306
+ "dist",
307
+ "target",
308
+ ".cache",
309
+ "__pycache__",
310
+ ".git",
311
+ }
312
+ )
313
+
314
+
315
+ def assert_cleanup_safe(
316
+ cleanup_root: Path,
317
+ state_roots: Sequence[Path] | None = None,
318
+ archive_roots: Sequence[Path] | None = None,
319
+ ) -> Path:
320
+ """Refuse cleanup when state/archive roots resolve inside the cleanup tree.
321
+
322
+ Also refuses when a junction/symlink under ``cleanup_root`` resolves into a
323
+ protected state/archive root (Windows junction / symlink escape).
324
+ """
325
+ cleanup = Path(cleanup_root).resolve()
326
+ protected: list[Path] = []
327
+ for raw in [*(state_roots or ()), *(archive_roots or ())]:
328
+ try:
329
+ protected.append(Path(raw).resolve())
330
+ except OSError as exc:
331
+ raise CleanupTopologyError(
332
+ f"CLEANUP_TOPOLOGY_REFUSED: cannot resolve protected path {raw}: {exc}"
333
+ ) from exc
334
+
335
+ for prot in protected:
336
+ if prot == cleanup or prot.is_relative_to(cleanup):
337
+ raise CleanupTopologyError(
338
+ "CLEANUP_TOPOLOGY_REFUSED: protected path "
339
+ f"{prot} is inside cleanup root {cleanup}"
340
+ )
341
+
342
+ if cleanup.is_dir():
343
+ for dirpath, dirnames, filenames in os.walk(cleanup, followlinks=False):
344
+ # Inspect this level (including heavy names) for link escapes, then
345
+ # prune descent so we do not walk install/cache trees.
346
+ entries = [*dirnames, *filenames]
347
+ dirnames[:] = [d for d in dirnames if d not in CLEANUP_WALK_SKIP_DIRS]
348
+ for name in entries:
349
+ child = Path(dirpath) / name
350
+ try:
351
+ is_link = child.is_symlink()
352
+ except OSError:
353
+ continue
354
+ # Junctions often report as directories; resolve and compare.
355
+ try:
356
+ resolved_child = child.resolve()
357
+ except OSError:
358
+ continue
359
+ escaped = not (
360
+ resolved_child == cleanup or resolved_child.is_relative_to(cleanup)
361
+ )
362
+ if not (is_link or escaped):
363
+ continue
364
+ for prot in protected:
365
+ if (
366
+ resolved_child == prot
367
+ or resolved_child.is_relative_to(prot)
368
+ or prot.is_relative_to(resolved_child)
369
+ ):
370
+ raise CleanupTopologyError(
371
+ "CLEANUP_TOPOLOGY_REFUSED: cleanup path "
372
+ f"{child} resolves to protected {resolved_child}"
373
+ )
374
+ return cleanup
375
+
376
+
377
+ _FORMAL_SNAPSHOT_DIRS = ("plans", "spec", "evidence", "reports", "meta")
378
+ _FORMAL_SNAPSHOT_FILES = ("events.ndjson",)
379
+
380
+
381
+ def snapshot_change_formal_layer(
382
+ project_root: Path,
383
+ change_id: str,
384
+ *,
385
+ change_dir: Path | None = None,
386
+ ) -> dict[str, Any]:
387
+ """Copy change formal layer into ``.harness/cache/change-snapshots/<change>/``.
388
+
389
+ Destination is always under the main project / common harness root — never
390
+ under a feature worktree path alone.
391
+ """
392
+ import shutil
393
+
394
+ project = resolve_main_project_root(Path(project_root))
395
+ src = Path(change_dir).resolve() if change_dir is not None else (
396
+ project / ".harness" / "changes" / change_id
397
+ ).resolve()
398
+ if not src.is_dir():
399
+ raise FileNotFoundError(f"change dir not found for snapshot: {src}")
400
+
401
+ dest = (project / ".harness" / "cache" / "change-snapshots" / change_id).resolve()
402
+ # Hard guard: never write the snapshot inside the source tree itself.
403
+ if dest == src or dest.is_relative_to(src):
404
+ raise ValueError(
405
+ f"snapshot destination must not be inside change dir: {dest}"
406
+ )
407
+ dest.mkdir(parents=True, exist_ok=True)
408
+
409
+ copied: list[str] = []
410
+ for name in _FORMAL_SNAPSHOT_DIRS:
411
+ source_dir = src / name
412
+ if not source_dir.is_dir():
413
+ continue
414
+ target_dir = dest / name
415
+ shutil.copytree(source_dir, target_dir, dirs_exist_ok=True)
416
+ copied.append(name + "/")
417
+ for name in _FORMAL_SNAPSHOT_FILES:
418
+ source_file = src / name
419
+ if not source_file.is_file():
420
+ continue
421
+ shutil.copy2(source_file, dest / name)
422
+ copied.append(name)
423
+
424
+ file_hashes: dict[str, str] = {}
425
+ for path in sorted(dest.rglob("*")):
426
+ if not path.is_file():
427
+ continue
428
+ rel = path.relative_to(dest).as_posix()
429
+ if rel == "manifest.json":
430
+ continue
431
+ digest = hashlib.sha256(path.read_bytes()).hexdigest()
432
+ file_hashes[rel] = "sha256:" + digest
433
+
434
+ manifest = {
435
+ "schemaVersion": 1,
436
+ "changeId": change_id,
437
+ "source": str(src),
438
+ "destination": str(dest),
439
+ "projectRoot": str(project),
440
+ "copied": copied,
441
+ "files": file_hashes,
442
+ "fileCount": len(file_hashes),
443
+ }
444
+ manifest_path = dest / "manifest.json"
445
+ manifest_path.write_text(
446
+ json.dumps(manifest, ensure_ascii=False, indent=2) + "\n",
447
+ encoding="utf-8",
448
+ newline="\n",
449
+ )
450
+ return {
451
+ "ok": True,
452
+ "code": "CHANGE_SNAPSHOT_WRITTEN",
453
+ "changeId": change_id,
454
+ "destination": str(dest),
455
+ "fileCount": len(file_hashes),
456
+ "copied": copied,
457
+ "manifestPath": str(manifest_path),
458
+ }
459
+
460
+
292
461
  def cmd_resolve_layout(args: argparse.Namespace) -> int:
293
462
  layout = resolve_change_layout(Path.cwd(), args.change)
294
463
  sys.stdout.write(json.dumps(layout, ensure_ascii=False, indent=2) + "\n")
@@ -7,7 +7,7 @@
7
7
  "files": [
8
8
  {
9
9
  "path": ".harness-build.json",
10
- "sha256": "f8d05b3cde1a30f216ab0d3ba26ec45796f533686a003c4c656a36aed077634b"
10
+ "sha256": "a7fd6e4e51c881e477be82f244cc3ab7ee32936d272b04bb0adc89b7b40d3e81"
11
11
  },
12
12
  {
13
13
  "path": "agents/harness-evaluator.md",
@@ -35,7 +35,7 @@
35
35
  },
36
36
  {
37
37
  "path": "harness-archive/checklist.md",
38
- "sha256": "0329561202acf39646f08c861a2859ffe68164df05b95526af86c5b1842d2009"
38
+ "sha256": "c996b57c4f90a9a5285e59c7391e0628e9627974f030b2629bb477c36ad77aa5"
39
39
  },
40
40
  {
41
41
  "path": "harness-archive/reference.md",
@@ -47,7 +47,7 @@
47
47
  },
48
48
  {
49
49
  "path": "harness-archive/SKILL.md",
50
- "sha256": "1081a1913e62f86ada5b5b43eed866e0de0aca1e9900883aa9c3a328168e0128"
50
+ "sha256": "de28ac18baac77b3ab0881ead2a5aa2caae5cfccd5405104ec5f7b47331cc8c0"
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": "ebfa5cc6ca087dddf001c7e951cfe40c9a47dd1ab15e69b696564bc9d35c4dd2"
70
+ "sha256": "81fd2ec9fee4da20d650e6dc48ab4ab741f12245c281d853f7a00936c7eb9e0b"
71
71
  },
72
72
  {
73
73
  "path": "harness-codebase-map/templates/ARCHITECTURE.md",
@@ -131,11 +131,11 @@
131
131
  },
132
132
  {
133
133
  "path": "harness-knowledge-ingest/SKILL.md",
134
- "sha256": "fb0e10981ec43a63fe89365edf12c4d65058050d593e612cbca05116f721a76f"
134
+ "sha256": "ab3a09a404d69852376aaba528abbe44b831aca48f9763783af71fb0efcacf9b"
135
135
  },
136
136
  {
137
137
  "path": "harness-knowledge-query/SKILL.md",
138
- "sha256": "4825b36103b11eb1b2759167638af9234d6612b16ea2024c87f0c4dadf740e46"
138
+ "sha256": "7e9fb5f54f07bf2b2394e14be136fe771835c082e40fe7f61206fc11a22bae4e"
139
139
  },
140
140
  {
141
141
  "path": "harness-plan/checklist.md",
@@ -151,7 +151,7 @@
151
151
  },
152
152
  {
153
153
  "path": "harness-plan/SKILL.md",
154
- "sha256": "83d1a6c96be57ea556d0c08c665ad62ccd7813bb9f7e5fed0354ab8f4cd3756c"
154
+ "sha256": "34df4f0e7e0fa656800b0546e3a724c86c95c96ebf990f145a93154a88dda70e"
155
155
  },
156
156
  {
157
157
  "path": "harness-review/checklist.md",
@@ -167,7 +167,7 @@
167
167
  },
168
168
  {
169
169
  "path": "harness-review/SKILL.md",
170
- "sha256": "536fc0c4200bd8701991b2446d929c1fb3db6b06838227860eea81a8ea734cd1"
170
+ "sha256": "ce103208e022e238bdd0b6e501c4faf9194b95ed2d736c52816b004eda4812b0"
171
171
  },
172
172
  {
173
173
  "path": "harness-run/checklist.md",
@@ -183,11 +183,11 @@
183
183
  },
184
184
  {
185
185
  "path": "harness-run/SKILL.md",
186
- "sha256": "89cfccb7a8bae365a56614bf4e6b21749e83abb894f3af18ee6430fe23cafeff"
186
+ "sha256": "ee22d79c40fbf24d2ab7eba24448c7e89274bb2a81c7d6875fcc526cfd03e771"
187
187
  },
188
188
  {
189
189
  "path": "harness-submit/checklist.md",
190
- "sha256": "63d7979d4d96f24d012922e0b18e8d9c29f36ad2a14fe794c227bce0e0c6e038"
190
+ "sha256": "54230792cd9716c663ba3e7f569846910f67d0f0955bf38bafb653062111357c"
191
191
  },
192
192
  {
193
193
  "path": "harness-submit/reference.md",
@@ -195,7 +195,7 @@
195
195
  },
196
196
  {
197
197
  "path": "harness-submit/SKILL.md",
198
- "sha256": "d0ff4a5569685e018fef7bdc02a17d9a5889b269505dd0b0d31dbe66d75301f9"
198
+ "sha256": "3d32ae7ee46dbad5fac6f1363f67e16c6fd9ec0cbdddff926a8ce37b95349c82"
199
199
  },
200
200
  {
201
201
  "path": "harness-sync/reference.md",
@@ -203,7 +203,7 @@
203
203
  },
204
204
  {
205
205
  "path": "harness-sync/SKILL.md",
206
- "sha256": "1544c88eb25a2902df8e0789e2b7f4bb0ba6b5da8baf01293d745f42e3c514d3"
206
+ "sha256": "02f0b36925dc6e7da64a5674b15e2395c40c4eb91d17ae169c4d557882156dff"
207
207
  },
208
208
  {
209
209
  "path": "harness-test/checklist.md",
@@ -227,7 +227,7 @@
227
227
  },
228
228
  {
229
229
  "path": "harness-test/SKILL.md",
230
- "sha256": "cc698eebaa77cb448ef9aba98e8b0e0c43ee7530557e2df9d33645539bbc7b37"
230
+ "sha256": "f4a9e2b2d3724d3df2bc0a98784c8dd0cd56c99cd726ecba9669e3d10639694e"
231
231
  },
232
232
  {
233
233
  "path": "protocols/archive-report-protocol.md",
@@ -247,7 +247,7 @@
247
247
  },
248
248
  {
249
249
  "path": "protocols/report-pipeline-protocol.md",
250
- "sha256": "1a54a6a1540e9da41cf3466eee8a3810eb2b3ae732ab87f295d1832d135da6fb"
250
+ "sha256": "46ade8806083f2b83b41099976555291f01c44990977fc7eb968007dee5a653d"
251
251
  },
252
252
  {
253
253
  "path": "protocols/sensitive-info-protocol.md",
@@ -271,7 +271,7 @@
271
271
  },
272
272
  {
273
273
  "path": "scripts/harness_archive.py",
274
- "sha256": "3e4802a07b2f798243bdcfe4733830b59ea4a387a751189e23017a4dc2ebc80b"
274
+ "sha256": "739671addbac6096860342910dd046178db04d130b34df129667ddd3523449cb"
275
275
  },
276
276
  {
277
277
  "path": "scripts/harness_change.py",
@@ -287,7 +287,7 @@
287
287
  },
288
288
  {
289
289
  "path": "scripts/harness_events.py",
290
- "sha256": "a44614a8bb497820619feaf2531569942a7a61de2dfe4d3f0646aece23636f62"
290
+ "sha256": "dcc4c1e4c2967ec7a07c103890f45f2903fc2784adebe3d6c5ae8e92037efd4f"
291
291
  },
292
292
  {
293
293
  "path": "scripts/harness_gate.py",
@@ -295,15 +295,15 @@
295
295
  },
296
296
  {
297
297
  "path": "scripts/harness_integration.py",
298
- "sha256": "777c8d0bd07b026645d5c6938da64699c123ab13870f04963fa0b09a900b095d"
298
+ "sha256": "ab963ef60b554118858124a6a8ed3af09bdc0bf78a873251825aee225ad77ad4"
299
299
  },
300
300
  {
301
301
  "path": "scripts/harness_ledger.py",
302
- "sha256": "60a6cdff5c3c81abf5606f7914c299828c4ed2b21d19e9acbb27b001a03fcaa5"
302
+ "sha256": "6d6b5fd9626178d5c10d0fd878f5a31c137b8b292e6a65838f6f06e0991e7576"
303
303
  },
304
304
  {
305
305
  "path": "scripts/harness_paths.py",
306
- "sha256": "c60d272e61aa98fc84a89c24db81c1ff8cbf2dac16b88fddbcd18fcc5d6199a5"
306
+ "sha256": "4042a0ee0521a3ff26448d63415eaf63dd45161d71d8c54a2b72665a1263e02b"
307
307
  },
308
308
  {
309
309
  "path": "scripts/harness_phase.py",
@@ -7,7 +7,7 @@
7
7
  "files": [
8
8
  {
9
9
  "path": ".harness-build.json",
10
- "sha256": "5424c14201baa7eae777b1929753efeeb3ccfd8622d27c750385c9d8b940eadf"
10
+ "sha256": "ba0b0fced31b46fda93feb03a5a13da070ebe1fd908533e72653167652b51387"
11
11
  },
12
12
  {
13
13
  "path": "agents/harness-evaluator.md",
@@ -35,7 +35,7 @@
35
35
  },
36
36
  {
37
37
  "path": "harness-archive/checklist.md",
38
- "sha256": "0329561202acf39646f08c861a2859ffe68164df05b95526af86c5b1842d2009"
38
+ "sha256": "c996b57c4f90a9a5285e59c7391e0628e9627974f030b2629bb477c36ad77aa5"
39
39
  },
40
40
  {
41
41
  "path": "harness-archive/reference.md",
@@ -47,7 +47,7 @@
47
47
  },
48
48
  {
49
49
  "path": "harness-archive/SKILL.md",
50
- "sha256": "a5acfae19e391b550948a0162d60c022924150e059540b40ef6f2faefb4df8e8"
50
+ "sha256": "1a341e5577d13e452cf0c104589c7715b6daa839fbf69a8e1a85d508452f6364"
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": "e3b335cd792e7f6aebc5b1871c3b6a77c1f27dc71ba4293c3e23565ccbe3c3b9"
70
+ "sha256": "f510002d2e2c049c2b00e46c513adb0f4106bb8b30f9dba8d4a076e513f513c3"
71
71
  },
72
72
  {
73
73
  "path": "harness-codebase-map/templates/ARCHITECTURE.md",
@@ -131,11 +131,11 @@
131
131
  },
132
132
  {
133
133
  "path": "harness-knowledge-ingest/SKILL.md",
134
- "sha256": "e72ae7507f4ec2fe1bb26c4b14ebcbbf020771570ffe1d338c5e66a444b5a7fc"
134
+ "sha256": "d7fba15d9471c14b9721796e537102c74e8005c80871b919a6ae55e1786802a1"
135
135
  },
136
136
  {
137
137
  "path": "harness-knowledge-query/SKILL.md",
138
- "sha256": "324c4922afd4f3c227c307956a6fc10da63d35ee0a28dfa7a8340799d63391f0"
138
+ "sha256": "b78584a590e87fdc2457b9468e0768730e0dc6a0dc542532274172658ba19c0b"
139
139
  },
140
140
  {
141
141
  "path": "harness-plan/checklist.md",
@@ -151,7 +151,7 @@
151
151
  },
152
152
  {
153
153
  "path": "harness-plan/SKILL.md",
154
- "sha256": "02edd4c33691b23f267856178595d47f82679121ca05d79bb12015968e293b43"
154
+ "sha256": "5554c4cc48ab2b05bb89a738156f58354d87c2c0cf2397d2fc388912541293e2"
155
155
  },
156
156
  {
157
157
  "path": "harness-review/checklist.md",
@@ -167,7 +167,7 @@
167
167
  },
168
168
  {
169
169
  "path": "harness-review/SKILL.md",
170
- "sha256": "625d66d7cf03c514c93f7a85babe16f3f0af76edfe04ba42232e7691ef377881"
170
+ "sha256": "eba3f0acc790a926d9cc7067e4fba4049948d2f1ca68c928cdcf4324a271796f"
171
171
  },
172
172
  {
173
173
  "path": "harness-run/checklist.md",
@@ -183,11 +183,11 @@
183
183
  },
184
184
  {
185
185
  "path": "harness-run/SKILL.md",
186
- "sha256": "1f2ba724823e30da0d0cde2ae92a21f6682be2ebabc30ddd3076550a03c6e69d"
186
+ "sha256": "1b2ecf9d1563faa27b0b38aa610655165992bf482d4a2d458b6ba52fb756bf04"
187
187
  },
188
188
  {
189
189
  "path": "harness-submit/checklist.md",
190
- "sha256": "63d7979d4d96f24d012922e0b18e8d9c29f36ad2a14fe794c227bce0e0c6e038"
190
+ "sha256": "54230792cd9716c663ba3e7f569846910f67d0f0955bf38bafb653062111357c"
191
191
  },
192
192
  {
193
193
  "path": "harness-submit/reference.md",
@@ -195,7 +195,7 @@
195
195
  },
196
196
  {
197
197
  "path": "harness-submit/SKILL.md",
198
- "sha256": "1919f2fd42a5e54a7820a2fc9466aef8ba5e1a3967245d62289e2b27b5327c40"
198
+ "sha256": "017cc1b8d658143e65978806aee18c795b02304c60e01c77a6503ba93869cc07"
199
199
  },
200
200
  {
201
201
  "path": "harness-sync/reference.md",
@@ -203,7 +203,7 @@
203
203
  },
204
204
  {
205
205
  "path": "harness-sync/SKILL.md",
206
- "sha256": "1eabe1c4083601dee1bf5013ef60d0e60c4bdd6fe3a74f123966b8a5eb681806"
206
+ "sha256": "fab6d711894235a0a43c8bda499dda135454ce13f3cf7511183b756091863180"
207
207
  },
208
208
  {
209
209
  "path": "harness-test/checklist.md",
@@ -227,7 +227,7 @@
227
227
  },
228
228
  {
229
229
  "path": "harness-test/SKILL.md",
230
- "sha256": "bbc89856c31502a4dff11d3a218c60ad661865dc663d54b35bada838c5a00884"
230
+ "sha256": "e9ab2bf7fb5f6501700d48e943cf15f7a1fdb7f9fdb994e8cd90d61b13d0fcd2"
231
231
  },
232
232
  {
233
233
  "path": "protocols/archive-report-protocol.md",
@@ -247,7 +247,7 @@
247
247
  },
248
248
  {
249
249
  "path": "protocols/report-pipeline-protocol.md",
250
- "sha256": "1a54a6a1540e9da41cf3466eee8a3810eb2b3ae732ab87f295d1832d135da6fb"
250
+ "sha256": "46ade8806083f2b83b41099976555291f01c44990977fc7eb968007dee5a653d"
251
251
  },
252
252
  {
253
253
  "path": "protocols/sensitive-info-protocol.md",
@@ -271,7 +271,7 @@
271
271
  },
272
272
  {
273
273
  "path": "scripts/harness_archive.py",
274
- "sha256": "3e4802a07b2f798243bdcfe4733830b59ea4a387a751189e23017a4dc2ebc80b"
274
+ "sha256": "739671addbac6096860342910dd046178db04d130b34df129667ddd3523449cb"
275
275
  },
276
276
  {
277
277
  "path": "scripts/harness_change.py",
@@ -287,7 +287,7 @@
287
287
  },
288
288
  {
289
289
  "path": "scripts/harness_events.py",
290
- "sha256": "a44614a8bb497820619feaf2531569942a7a61de2dfe4d3f0646aece23636f62"
290
+ "sha256": "dcc4c1e4c2967ec7a07c103890f45f2903fc2784adebe3d6c5ae8e92037efd4f"
291
291
  },
292
292
  {
293
293
  "path": "scripts/harness_gate.py",
@@ -295,15 +295,15 @@
295
295
  },
296
296
  {
297
297
  "path": "scripts/harness_integration.py",
298
- "sha256": "777c8d0bd07b026645d5c6938da64699c123ab13870f04963fa0b09a900b095d"
298
+ "sha256": "ab963ef60b554118858124a6a8ed3af09bdc0bf78a873251825aee225ad77ad4"
299
299
  },
300
300
  {
301
301
  "path": "scripts/harness_ledger.py",
302
- "sha256": "60a6cdff5c3c81abf5606f7914c299828c4ed2b21d19e9acbb27b001a03fcaa5"
302
+ "sha256": "6d6b5fd9626178d5c10d0fd878f5a31c137b8b292e6a65838f6f06e0991e7576"
303
303
  },
304
304
  {
305
305
  "path": "scripts/harness_paths.py",
306
- "sha256": "c60d272e61aa98fc84a89c24db81c1ff8cbf2dac16b88fddbcd18fcc5d6199a5"
306
+ "sha256": "4042a0ee0521a3ff26448d63415eaf63dd45161d71d8c54a2b72665a1263e02b"
307
307
  },
308
308
  {
309
309
  "path": "scripts/harness_phase.py",
@@ -7,7 +7,7 @@
7
7
  "files": [
8
8
  {
9
9
  "path": ".harness-build.json",
10
- "sha256": "c3f8c30ddabbd7cd411124e58c8c946b1646b4342cc488d0b0582bbdda512f15"
10
+ "sha256": "52cbf5f48f6ff848c919e06bd2a616c67165868c7b3985f1dc6722ecb5866e04"
11
11
  },
12
12
  {
13
13
  "path": "CONTEXT.md",
@@ -23,7 +23,7 @@
23
23
  },
24
24
  {
25
25
  "path": "harness-archive/checklist.md",
26
- "sha256": "0329561202acf39646f08c861a2859ffe68164df05b95526af86c5b1842d2009"
26
+ "sha256": "c996b57c4f90a9a5285e59c7391e0628e9627974f030b2629bb477c36ad77aa5"
27
27
  },
28
28
  {
29
29
  "path": "harness-archive/reference.md",
@@ -35,7 +35,7 @@
35
35
  },
36
36
  {
37
37
  "path": "harness-archive/SKILL.md",
38
- "sha256": "46656c9be92fb90813f472904721638126209791f64a3644977885c47bb37455"
38
+ "sha256": "ff182c430076732e9437713a5ff315a743ca7fc25c1944aa6d7206bdf7e36158"
39
39
  },
40
40
  {
41
41
  "path": "harness-archive/templates/render-summary.mjs",
@@ -55,7 +55,7 @@
55
55
  },
56
56
  {
57
57
  "path": "harness-codebase-map/SKILL.md",
58
- "sha256": "02b631cb3c1a2ee2c9942283656522ad6f0c3f56f29a4d2a8c695d2a41f0f340"
58
+ "sha256": "0cf5e715893f8f056ee99eb529071be35bd69a454523ac14ef8b1df183499dcf"
59
59
  },
60
60
  {
61
61
  "path": "harness-codebase-map/templates/ARCHITECTURE.md",
@@ -119,11 +119,11 @@
119
119
  },
120
120
  {
121
121
  "path": "harness-knowledge-ingest/SKILL.md",
122
- "sha256": "a54505300b04a98f9577c8f24f0467bf564e52e9449a3254ed4954e40f0dd579"
122
+ "sha256": "e0f9fb3ec08d74985f2eba19b4bc4c6827251f2bb4d7eb9082b2d677489379ee"
123
123
  },
124
124
  {
125
125
  "path": "harness-knowledge-query/SKILL.md",
126
- "sha256": "9fbf99905a873353475ba75d2b7993d5d13955d0de88b108e6f5f27b16478aa3"
126
+ "sha256": "f3c024d3f41090bea50b44e96524ff57c5fedbb5aeddded11aa07eefbbab3350"
127
127
  },
128
128
  {
129
129
  "path": "harness-plan/checklist.md",
@@ -139,7 +139,7 @@
139
139
  },
140
140
  {
141
141
  "path": "harness-plan/SKILL.md",
142
- "sha256": "b12c48af74cfc17e504a34764a0679f01187d6ef18da55c554d4602bb48a1098"
142
+ "sha256": "19051852756f719ae7ca24af46a2189bc98419d2111b6cfc388fb02d663122a7"
143
143
  },
144
144
  {
145
145
  "path": "harness-review/checklist.md",
@@ -155,7 +155,7 @@
155
155
  },
156
156
  {
157
157
  "path": "harness-review/SKILL.md",
158
- "sha256": "e001fb40a23e52ee9aeb19a6be1001619d9b189ec330d26523c4114e63bcbf60"
158
+ "sha256": "8a1bec3db8727f960012f13b0aad234a2b40c63b45047432f701acc27f4e7dcb"
159
159
  },
160
160
  {
161
161
  "path": "harness-run/checklist.md",
@@ -171,11 +171,11 @@
171
171
  },
172
172
  {
173
173
  "path": "harness-run/SKILL.md",
174
- "sha256": "ee7db34e7c0258a07d6ca78c85ccd9c7b89e121b16b9d2f034968548f8d2c432"
174
+ "sha256": "30e61e3385e755f5a560fb19af2224f441b3799b6d5fae695ec0cb7c9b837801"
175
175
  },
176
176
  {
177
177
  "path": "harness-submit/checklist.md",
178
- "sha256": "63d7979d4d96f24d012922e0b18e8d9c29f36ad2a14fe794c227bce0e0c6e038"
178
+ "sha256": "54230792cd9716c663ba3e7f569846910f67d0f0955bf38bafb653062111357c"
179
179
  },
180
180
  {
181
181
  "path": "harness-submit/reference.md",
@@ -183,7 +183,7 @@
183
183
  },
184
184
  {
185
185
  "path": "harness-submit/SKILL.md",
186
- "sha256": "bf695b3f0077fce152ba982496279a0a3da6b953ac926b3ef2f941d1bf9a28b0"
186
+ "sha256": "beacfb608371d20a9f7d73fa1897690e0bea45d664c88c18b403dd38d694048c"
187
187
  },
188
188
  {
189
189
  "path": "harness-sync/reference.md",
@@ -191,7 +191,7 @@
191
191
  },
192
192
  {
193
193
  "path": "harness-sync/SKILL.md",
194
- "sha256": "b358823414db78a9c6468f7defdebfa8287e922459b774216c9a14015da6f516"
194
+ "sha256": "0e59973990c04d2568fcf894abf949260df32497dbb1ef86f0638472ac5f248e"
195
195
  },
196
196
  {
197
197
  "path": "harness-test/checklist.md",
@@ -215,7 +215,7 @@
215
215
  },
216
216
  {
217
217
  "path": "harness-test/SKILL.md",
218
- "sha256": "a56ec23787fdfdc5e217c60713998f382bc110af40b28377fbfab1b9332bf9b4"
218
+ "sha256": "4467b660c0b8aecc79fe2f5044913b6e612a9acb5bbd6e02030719cdd8e87ef3"
219
219
  },
220
220
  {
221
221
  "path": "protocols/archive-report-protocol.md",
@@ -235,7 +235,7 @@
235
235
  },
236
236
  {
237
237
  "path": "protocols/report-pipeline-protocol.md",
238
- "sha256": "1a54a6a1540e9da41cf3466eee8a3810eb2b3ae732ab87f295d1832d135da6fb"
238
+ "sha256": "46ade8806083f2b83b41099976555291f01c44990977fc7eb968007dee5a653d"
239
239
  },
240
240
  {
241
241
  "path": "protocols/sensitive-info-protocol.md",
@@ -259,7 +259,7 @@
259
259
  },
260
260
  {
261
261
  "path": "scripts/harness_archive.py",
262
- "sha256": "3e4802a07b2f798243bdcfe4733830b59ea4a387a751189e23017a4dc2ebc80b"
262
+ "sha256": "739671addbac6096860342910dd046178db04d130b34df129667ddd3523449cb"
263
263
  },
264
264
  {
265
265
  "path": "scripts/harness_change.py",
@@ -275,7 +275,7 @@
275
275
  },
276
276
  {
277
277
  "path": "scripts/harness_events.py",
278
- "sha256": "a44614a8bb497820619feaf2531569942a7a61de2dfe4d3f0646aece23636f62"
278
+ "sha256": "dcc4c1e4c2967ec7a07c103890f45f2903fc2784adebe3d6c5ae8e92037efd4f"
279
279
  },
280
280
  {
281
281
  "path": "scripts/harness_gate.py",
@@ -283,15 +283,15 @@
283
283
  },
284
284
  {
285
285
  "path": "scripts/harness_integration.py",
286
- "sha256": "777c8d0bd07b026645d5c6938da64699c123ab13870f04963fa0b09a900b095d"
286
+ "sha256": "ab963ef60b554118858124a6a8ed3af09bdc0bf78a873251825aee225ad77ad4"
287
287
  },
288
288
  {
289
289
  "path": "scripts/harness_ledger.py",
290
- "sha256": "60a6cdff5c3c81abf5606f7914c299828c4ed2b21d19e9acbb27b001a03fcaa5"
290
+ "sha256": "6d6b5fd9626178d5c10d0fd878f5a31c137b8b292e6a65838f6f06e0991e7576"
291
291
  },
292
292
  {
293
293
  "path": "scripts/harness_paths.py",
294
- "sha256": "c60d272e61aa98fc84a89c24db81c1ff8cbf2dac16b88fddbcd18fcc5d6199a5"
294
+ "sha256": "4042a0ee0521a3ff26448d63415eaf63dd45161d71d8c54a2b72665a1263e02b"
295
295
  },
296
296
  {
297
297
  "path": "scripts/harness_phase.py",