@hunter-harness/workflow-harness 0.2.60 → 0.2.61

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/README.md +7 -7
  3. package/harness/bundles/general/claude-code/harness-archive/SKILL.md +35 -35
  4. package/harness/bundles/general/claude-code/harness-archive/checklist.md +5 -2
  5. package/harness/bundles/general/claude-code/harness-archive/reference.md +23 -7
  6. package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +1 -1
  7. package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
  8. package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +1 -1
  9. package/harness/bundles/general/claude-code/harness-plan/SKILL.md +4 -4
  10. package/harness/bundles/general/claude-code/harness-review/SKILL.md +2 -2
  11. package/harness/bundles/general/claude-code/harness-run/SKILL.md +2 -2
  12. package/harness/bundles/general/claude-code/harness-submit/SKILL.md +2 -2
  13. package/harness/bundles/general/claude-code/harness-sync/SKILL.md +1 -1
  14. package/harness/bundles/general/claude-code/harness-test/SKILL.md +2 -2
  15. package/harness/bundles/general/claude-code/protocols/archive-report-protocol.md +7 -3
  16. package/harness/bundles/general/claude-code/protocols/ledger-protocol.md +1 -1
  17. package/harness/bundles/general/claude-code/protocols/report-pipeline-protocol.md +6 -4
  18. package/harness/bundles/general/claude-code/protocols/state-layout-protocol.md +3 -2
  19. package/harness/bundles/general/claude-code/scripts/harness_archive.py +829 -68
  20. package/harness/bundles/general/claude-code/scripts/harness_context.py +8 -2
  21. package/harness/bundles/general/claude-code/scripts/harness_events.py +5 -0
  22. package/harness/bundles/general/claude-code/scripts/harness_ledger.py +79 -2
  23. package/harness/bundles/general/claude-code/scripts/harness_profile.py +7 -0
  24. package/harness/bundles/general/claude-code/scripts/harness_state.py +22 -3
  25. package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
  26. package/harness/bundles/general/codebuddy/README.md +7 -7
  27. package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +35 -35
  28. package/harness/bundles/general/codebuddy/harness-archive/checklist.md +5 -2
  29. package/harness/bundles/general/codebuddy/harness-archive/reference.md +23 -7
  30. package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +1 -1
  31. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
  32. package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  33. package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +4 -4
  34. package/harness/bundles/general/codebuddy/harness-review/SKILL.md +2 -2
  35. package/harness/bundles/general/codebuddy/harness-run/SKILL.md +2 -2
  36. package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +2 -2
  37. package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +1 -1
  38. package/harness/bundles/general/codebuddy/harness-test/SKILL.md +2 -2
  39. package/harness/bundles/general/codebuddy/protocols/archive-report-protocol.md +7 -3
  40. package/harness/bundles/general/codebuddy/protocols/ledger-protocol.md +1 -1
  41. package/harness/bundles/general/codebuddy/protocols/report-pipeline-protocol.md +6 -4
  42. package/harness/bundles/general/codebuddy/protocols/state-layout-protocol.md +3 -2
  43. package/harness/bundles/general/codebuddy/scripts/harness_archive.py +829 -68
  44. package/harness/bundles/general/codebuddy/scripts/harness_context.py +8 -2
  45. package/harness/bundles/general/codebuddy/scripts/harness_events.py +5 -0
  46. package/harness/bundles/general/codebuddy/scripts/harness_ledger.py +79 -2
  47. package/harness/bundles/general/codebuddy/scripts/harness_profile.py +7 -0
  48. package/harness/bundles/general/codebuddy/scripts/harness_state.py +22 -3
  49. package/harness/bundles/general/codex/.harness-build.json +1 -1
  50. package/harness/bundles/general/codex/README.md +7 -7
  51. package/harness/bundles/general/codex/harness-archive/SKILL.md +35 -35
  52. package/harness/bundles/general/codex/harness-archive/checklist.md +5 -2
  53. package/harness/bundles/general/codex/harness-archive/reference.md +23 -7
  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 -4
  58. package/harness/bundles/general/codex/harness-review/SKILL.md +2 -2
  59. package/harness/bundles/general/codex/harness-run/SKILL.md +2 -2
  60. package/harness/bundles/general/codex/harness-submit/SKILL.md +2 -2
  61. package/harness/bundles/general/codex/harness-sync/SKILL.md +1 -1
  62. package/harness/bundles/general/codex/harness-test/SKILL.md +2 -2
  63. package/harness/bundles/general/codex/protocols/archive-report-protocol.md +7 -3
  64. package/harness/bundles/general/codex/protocols/ledger-protocol.md +1 -1
  65. package/harness/bundles/general/codex/protocols/report-pipeline-protocol.md +6 -4
  66. package/harness/bundles/general/codex/protocols/state-layout-protocol.md +3 -2
  67. package/harness/bundles/general/codex/scripts/harness_archive.py +829 -68
  68. package/harness/bundles/general/codex/scripts/harness_context.py +8 -2
  69. package/harness/bundles/general/codex/scripts/harness_events.py +5 -0
  70. package/harness/bundles/general/codex/scripts/harness_ledger.py +79 -2
  71. package/harness/bundles/general/codex/scripts/harness_profile.py +7 -0
  72. package/harness/bundles/general/codex/scripts/harness_state.py +22 -3
  73. package/harness/bundles/general/cursor/.harness-build.json +1 -1
  74. package/harness/bundles/general/cursor/README.md +7 -7
  75. package/harness/bundles/general/cursor/harness-archive/SKILL.md +35 -35
  76. package/harness/bundles/general/cursor/harness-archive/checklist.md +5 -2
  77. package/harness/bundles/general/cursor/harness-archive/reference.md +23 -7
  78. package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +1 -1
  79. package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +1 -1
  80. package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +1 -1
  81. package/harness/bundles/general/cursor/harness-plan/SKILL.md +4 -4
  82. package/harness/bundles/general/cursor/harness-review/SKILL.md +2 -2
  83. package/harness/bundles/general/cursor/harness-run/SKILL.md +2 -2
  84. package/harness/bundles/general/cursor/harness-submit/SKILL.md +2 -2
  85. package/harness/bundles/general/cursor/harness-sync/SKILL.md +1 -1
  86. package/harness/bundles/general/cursor/harness-test/SKILL.md +2 -2
  87. package/harness/bundles/general/cursor/protocols/archive-report-protocol.md +7 -3
  88. package/harness/bundles/general/cursor/protocols/ledger-protocol.md +1 -1
  89. package/harness/bundles/general/cursor/protocols/report-pipeline-protocol.md +6 -4
  90. package/harness/bundles/general/cursor/protocols/state-layout-protocol.md +3 -2
  91. package/harness/bundles/general/cursor/scripts/harness_archive.py +829 -68
  92. package/harness/bundles/general/cursor/scripts/harness_context.py +8 -2
  93. package/harness/bundles/general/cursor/scripts/harness_events.py +5 -0
  94. package/harness/bundles/general/cursor/scripts/harness_ledger.py +79 -2
  95. package/harness/bundles/general/cursor/scripts/harness_profile.py +7 -0
  96. package/harness/bundles/general/cursor/scripts/harness_state.py +22 -3
  97. package/harness/bundles/java/claude-code/.harness-build.json +1 -1
  98. package/harness/bundles/java/claude-code/README.md +7 -7
  99. package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +2 -2
  100. package/harness/bundles/java/claude-code/harness-archive/SKILL.md +35 -35
  101. package/harness/bundles/java/claude-code/harness-archive/checklist.md +5 -2
  102. package/harness/bundles/java/claude-code/harness-archive/reference.md +23 -7
  103. package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +1 -1
  104. package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
  105. package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +1 -1
  106. package/harness/bundles/java/claude-code/harness-package/SKILL.md +2 -2
  107. package/harness/bundles/java/claude-code/harness-plan/SKILL.md +4 -4
  108. package/harness/bundles/java/claude-code/harness-review/SKILL.md +2 -2
  109. package/harness/bundles/java/claude-code/harness-run/SKILL.md +2 -2
  110. package/harness/bundles/java/claude-code/harness-submit/SKILL.md +2 -2
  111. package/harness/bundles/java/claude-code/harness-sync/SKILL.md +1 -1
  112. package/harness/bundles/java/claude-code/harness-test/SKILL.md +2 -2
  113. package/harness/bundles/java/claude-code/protocols/archive-report-protocol.md +7 -3
  114. package/harness/bundles/java/claude-code/protocols/ledger-protocol.md +1 -1
  115. package/harness/bundles/java/claude-code/protocols/report-pipeline-protocol.md +6 -4
  116. package/harness/bundles/java/claude-code/protocols/state-layout-protocol.md +3 -2
  117. package/harness/bundles/java/claude-code/scripts/harness_archive.py +829 -68
  118. package/harness/bundles/java/claude-code/scripts/harness_context.py +8 -2
  119. package/harness/bundles/java/claude-code/scripts/harness_events.py +5 -0
  120. package/harness/bundles/java/claude-code/scripts/harness_ledger.py +79 -2
  121. package/harness/bundles/java/claude-code/scripts/harness_profile.py +7 -0
  122. package/harness/bundles/java/claude-code/scripts/harness_state.py +22 -3
  123. package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
  124. package/harness/bundles/java/codebuddy/README.md +7 -7
  125. package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +2 -2
  126. package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +35 -35
  127. package/harness/bundles/java/codebuddy/harness-archive/checklist.md +5 -2
  128. package/harness/bundles/java/codebuddy/harness-archive/reference.md +23 -7
  129. package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +1 -1
  130. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
  131. package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  132. package/harness/bundles/java/codebuddy/harness-package/SKILL.md +2 -2
  133. package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +4 -4
  134. package/harness/bundles/java/codebuddy/harness-review/SKILL.md +2 -2
  135. package/harness/bundles/java/codebuddy/harness-run/SKILL.md +2 -2
  136. package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +2 -2
  137. package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +1 -1
  138. package/harness/bundles/java/codebuddy/harness-test/SKILL.md +2 -2
  139. package/harness/bundles/java/codebuddy/protocols/archive-report-protocol.md +7 -3
  140. package/harness/bundles/java/codebuddy/protocols/ledger-protocol.md +1 -1
  141. package/harness/bundles/java/codebuddy/protocols/report-pipeline-protocol.md +6 -4
  142. package/harness/bundles/java/codebuddy/protocols/state-layout-protocol.md +3 -2
  143. package/harness/bundles/java/codebuddy/scripts/harness_archive.py +829 -68
  144. package/harness/bundles/java/codebuddy/scripts/harness_context.py +8 -2
  145. package/harness/bundles/java/codebuddy/scripts/harness_events.py +5 -0
  146. package/harness/bundles/java/codebuddy/scripts/harness_ledger.py +79 -2
  147. package/harness/bundles/java/codebuddy/scripts/harness_profile.py +7 -0
  148. package/harness/bundles/java/codebuddy/scripts/harness_state.py +22 -3
  149. package/harness/bundles/java/codex/.harness-build.json +1 -1
  150. package/harness/bundles/java/codex/README.md +7 -7
  151. package/harness/bundles/java/codex/harness-apidoc/SKILL.md +2 -2
  152. package/harness/bundles/java/codex/harness-archive/SKILL.md +35 -35
  153. package/harness/bundles/java/codex/harness-archive/checklist.md +5 -2
  154. package/harness/bundles/java/codex/harness-archive/reference.md +23 -7
  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 +2 -2
  159. package/harness/bundles/java/codex/harness-plan/SKILL.md +4 -4
  160. package/harness/bundles/java/codex/harness-review/SKILL.md +2 -2
  161. package/harness/bundles/java/codex/harness-run/SKILL.md +2 -2
  162. package/harness/bundles/java/codex/harness-submit/SKILL.md +2 -2
  163. package/harness/bundles/java/codex/harness-sync/SKILL.md +1 -1
  164. package/harness/bundles/java/codex/harness-test/SKILL.md +2 -2
  165. package/harness/bundles/java/codex/protocols/archive-report-protocol.md +7 -3
  166. package/harness/bundles/java/codex/protocols/ledger-protocol.md +1 -1
  167. package/harness/bundles/java/codex/protocols/report-pipeline-protocol.md +6 -4
  168. package/harness/bundles/java/codex/protocols/state-layout-protocol.md +3 -2
  169. package/harness/bundles/java/codex/scripts/harness_archive.py +829 -68
  170. package/harness/bundles/java/codex/scripts/harness_context.py +8 -2
  171. package/harness/bundles/java/codex/scripts/harness_events.py +5 -0
  172. package/harness/bundles/java/codex/scripts/harness_ledger.py +79 -2
  173. package/harness/bundles/java/codex/scripts/harness_profile.py +7 -0
  174. package/harness/bundles/java/codex/scripts/harness_state.py +22 -3
  175. package/harness/bundles/java/cursor/.harness-build.json +1 -1
  176. package/harness/bundles/java/cursor/README.md +7 -7
  177. package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +2 -2
  178. package/harness/bundles/java/cursor/harness-archive/SKILL.md +35 -35
  179. package/harness/bundles/java/cursor/harness-archive/checklist.md +5 -2
  180. package/harness/bundles/java/cursor/harness-archive/reference.md +23 -7
  181. package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +1 -1
  182. package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +1 -1
  183. package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +1 -1
  184. package/harness/bundles/java/cursor/harness-package/SKILL.md +2 -2
  185. package/harness/bundles/java/cursor/harness-plan/SKILL.md +4 -4
  186. package/harness/bundles/java/cursor/harness-review/SKILL.md +2 -2
  187. package/harness/bundles/java/cursor/harness-run/SKILL.md +2 -2
  188. package/harness/bundles/java/cursor/harness-submit/SKILL.md +2 -2
  189. package/harness/bundles/java/cursor/harness-sync/SKILL.md +1 -1
  190. package/harness/bundles/java/cursor/harness-test/SKILL.md +2 -2
  191. package/harness/bundles/java/cursor/protocols/archive-report-protocol.md +7 -3
  192. package/harness/bundles/java/cursor/protocols/ledger-protocol.md +1 -1
  193. package/harness/bundles/java/cursor/protocols/report-pipeline-protocol.md +6 -4
  194. package/harness/bundles/java/cursor/protocols/state-layout-protocol.md +3 -2
  195. package/harness/bundles/java/cursor/scripts/harness_archive.py +829 -68
  196. package/harness/bundles/java/cursor/scripts/harness_context.py +8 -2
  197. package/harness/bundles/java/cursor/scripts/harness_events.py +5 -0
  198. package/harness/bundles/java/cursor/scripts/harness_ledger.py +79 -2
  199. package/harness/bundles/java/cursor/scripts/harness_profile.py +7 -0
  200. package/harness/bundles/java/cursor/scripts/harness_state.py +22 -3
  201. package/harness/manifests/general/claude-code.json +26 -26
  202. package/harness/manifests/general/codebuddy.json +26 -26
  203. package/harness/manifests/general/codex.json +26 -26
  204. package/harness/manifests/general/cursor.json +26 -26
  205. package/harness/manifests/java/claude-code.json +28 -28
  206. package/harness/manifests/java/codebuddy.json +28 -28
  207. package/harness/manifests/java/codex.json +28 -28
  208. package/harness/manifests/java/cursor.json +28 -28
  209. package/hunter-workflow-family.json +5 -5
  210. package/package.json +1 -1
@@ -810,10 +810,15 @@ def close_transition(
810
810
  artifact_entries: list[dict[str, Any]] = []
811
811
  for raw in artifacts or []:
812
812
  requested = Path(raw)
813
+ artifact_bases: list[Path] = []
814
+ for base in (project, contract_root, state_root):
815
+ resolved_base = base.resolve()
816
+ if resolved_base not in artifact_bases:
817
+ artifact_bases.append(resolved_base)
813
818
  candidates = (
814
819
  [requested]
815
820
  if requested.is_absolute()
816
- else [project / requested, contract_root / requested]
821
+ else [base / requested for base in artifact_bases]
817
822
  )
818
823
  valid: list[Path] = []
819
824
  for candidate in candidates:
@@ -838,10 +843,11 @@ def close_transition(
838
843
  "ok": False,
839
844
  "code": "TRANSITION_ARTIFACT_INVALID",
840
845
  "path": raw,
841
- "acceptedBases": [str(project), str(contract_root)],
846
+ "acceptedBases": [str(base) for base in artifact_bases],
842
847
  "examples": [
843
848
  str(contract_root / "meta" / "plan-finalization.json"),
844
849
  f".harness/changes/{change}/meta/plan-finalization.json",
850
+ f".harness/state/changes/{change}/evidence/verification-ledger.json",
845
851
  "meta/plan-finalization.json",
846
852
  ],
847
853
  }
@@ -1077,6 +1077,11 @@ def split_phase_attempts(phase_events: list[dict[str, Any]]) -> list[dict[str, A
1077
1077
  "external.wait",
1078
1078
  "issue",
1079
1079
  "ci.wait",
1080
+ # Preparation is intentionally outside the formal phase lifecycle.
1081
+ # A blocked preflight must remain visible in the raw timeline without
1082
+ # manufacturing an attempt or inflating the phase duration/count.
1083
+ "phase.prepare.start",
1084
+ "phase.prepare.end",
1080
1085
  }
1081
1086
  for event in phase_events:
1082
1087
  if event.get("type") == "phase.start":
@@ -1053,6 +1053,40 @@ def ledger_evidence_identity(ledger: dict[str, Any]) -> str:
1053
1053
  return "sha256:" + hashlib.sha256(canonical).hexdigest()
1054
1054
 
1055
1055
 
1056
+ def _immutable_change_base(
1057
+ change_dir: Path,
1058
+ project_root: Path,
1059
+ ) -> str:
1060
+ roots = [change_dir]
1061
+ try:
1062
+ state_root = harness_paths.resolve_state_dir_for_contract(
1063
+ change_dir,
1064
+ project_root,
1065
+ )
1066
+ if state_root.resolve() != change_dir.resolve():
1067
+ roots.insert(0, state_root)
1068
+ except (OSError, ValueError):
1069
+ pass
1070
+ for root in roots:
1071
+ for relative in (
1072
+ Path("meta") / "state-snapshot.json",
1073
+ Path("state-snapshot.json"),
1074
+ ):
1075
+ path = root / relative
1076
+ if not path.is_file():
1077
+ continue
1078
+ try:
1079
+ payload = json.loads(path.read_text(encoding="utf-8-sig"))
1080
+ except (OSError, json.JSONDecodeError, TypeError):
1081
+ continue
1082
+ if not isinstance(payload, dict):
1083
+ continue
1084
+ value = str(payload.get("changeBase") or "").strip()
1085
+ if value:
1086
+ return value
1087
+ return ""
1088
+
1089
+
1056
1090
  def migrate_ledger_for_write(
1057
1091
  change_dir: Path,
1058
1092
  ledger: dict[str, Any],
@@ -1089,6 +1123,15 @@ def migrate_ledger_for_write(
1089
1123
  if not _nonempty_str(resolved_base):
1090
1124
  resolved_base = ledger.get("baseCommit")
1091
1125
  if not _nonempty_str(resolved_base):
1126
+ resolved_base = _immutable_change_base(change_dir, repo_root)
1127
+ if not _nonempty_str(resolved_base):
1128
+ if record_migration:
1129
+ raise LedgerMigrationError(
1130
+ "immutable change base is missing; recapture the Plan boundary "
1131
+ "or pass an explicit --base-commit instead of using write-time HEAD"
1132
+ )
1133
+ # A genuinely new ledger establishes its identity at the first write.
1134
+ # Existing ledgers are handled above and may never take this fallback.
1092
1135
  resolved_base = current_head
1093
1136
  resolved_diff = diff_hash
1094
1137
  if not _nonempty_str(resolved_diff):
@@ -2795,9 +2838,43 @@ def cmd_diff_hash(args: argparse.Namespace) -> int:
2795
2838
  repo_raw = getattr(args, "repo", None)
2796
2839
  repo = Path(repo_raw).expanduser().resolve() if repo_raw else Path.cwd().resolve()
2797
2840
  base = getattr(args, "base", None)
2798
- change_dir = getattr(args, "change_dir", None)
2841
+ change_dir_raw = getattr(args, "change_dir", None)
2799
2842
  try:
2800
- diff_hash, meta = compute_diff_hash(repo, base=base, change_dir=change_dir)
2843
+ change_dir = resolve_path(change_dir_raw) if change_dir_raw else None
2844
+ if change_dir is not None and _contract_is_v2(change_dir):
2845
+ resolved_base = str(base or "").strip()
2846
+ if not resolved_base:
2847
+ existing, _ = load_ledger(change_dir)
2848
+ if isinstance(existing, dict):
2849
+ resolved_base = str(existing.get("baseCommit") or "").strip()
2850
+ if not resolved_base:
2851
+ resolved_base = _immutable_change_base(change_dir, repo)
2852
+ if not resolved_base:
2853
+ raise ValueError(
2854
+ "immutable change base is missing; capture the Plan boundary "
2855
+ "or pass --base"
2856
+ )
2857
+ detail = compute_ownership_diff(
2858
+ repo,
2859
+ base=resolved_base,
2860
+ change_dir=change_dir,
2861
+ )
2862
+ payload = {
2863
+ "ok": True,
2864
+ "action": "diff-hash",
2865
+ "identityScope": "change-ownership",
2866
+ "algorithmVersion": "ownership-content-changeset-1",
2867
+ "base": resolved_base,
2868
+ "head": _git_text(repo, "rev-parse", "--verify", "HEAD"),
2869
+ **detail,
2870
+ }
2871
+ emit_json(payload, as_json=as_json)
2872
+ return 0
2873
+ diff_hash, meta = compute_diff_hash(
2874
+ repo,
2875
+ base=base,
2876
+ change_dir=str(change_dir) if change_dir is not None else None,
2877
+ )
2801
2878
  except (OSError, RuntimeError, ValueError) as exc:
2802
2879
  return emit_error(str(exc), as_json=as_json)
2803
2880
  payload = {"ok": True, "action": "diff-hash", "diffHash": diff_hash}
@@ -838,13 +838,20 @@ def _node_commands(project: Path) -> dict[str, Any]:
838
838
  "src/**/*.tsx",
839
839
  "test/**/*.ts",
840
840
  "test/**/*.tsx",
841
+ "tests/**/*.ts",
842
+ "tests/**/*.tsx",
841
843
  "packages/*/src/**/*.ts",
842
844
  "packages/*/src/**/*.tsx",
843
845
  "packages/*/test/**/*.ts",
844
846
  "packages/*/test/**/*.tsx",
847
+ "packages/*/tests/**/*.ts",
848
+ "packages/*/tests/**/*.tsx",
845
849
  "apps/*/src/**/*.ts",
846
850
  "apps/*/src/**/*.tsx",
847
851
  "apps/*/test/**/*.ts",
852
+ "apps/*/test/**/*.tsx",
853
+ "apps/*/tests/**/*.ts",
854
+ "apps/*/tests/**/*.tsx",
848
855
  ]
849
856
  # harness dogfood: canonical Python + .mjs sources feed npm run check (vitest
850
857
  # imports harness-test/scripts; smoke:pack runs sync-harness.mjs).
@@ -119,6 +119,10 @@ def capture_snapshot(
119
119
  "schemaVersion": SNAPSHOT_SCHEMA_VERSION,
120
120
  "generatedAt": now_iso(),
121
121
  "changeName": change_name,
122
+ # The first captured Git boundary is the immutable identity of the
123
+ # change. Later phases may advance HEAD, but must never silently move
124
+ # the base and collapse the archive range.
125
+ "changeBase": base or "",
122
126
  "project": {"root": str(project.resolve())},
123
127
  "worktree": {"root": str(Path(worktree_root).resolve())},
124
128
  "git": {"base": base or "", "head": head or ""},
@@ -250,10 +254,25 @@ def capture_current_state(
250
254
  base: str = "",
251
255
  head: str = "HEAD",
252
256
  ) -> tuple[dict[str, Any], list[str]]:
253
- resolved_head = _git(project, "rev-parse", head) or head
254
- resolved_base = _git(project, "rev-parse", base) if base else ""
255
- files = discover_segment_files(project, change_dir, base=resolved_base, head=resolved_head)
257
+ git_head = _git(project, "rev-parse", head)
258
+ resolved_head = git_head or head
256
259
  previous = load_snapshot(change_dir)
260
+ previous_git = previous.get("git") if isinstance(previous, dict) else None
261
+ previous_base = (
262
+ str(previous.get("changeBase") or "").strip()
263
+ if isinstance(previous, dict)
264
+ else ""
265
+ )
266
+ if not previous_base and isinstance(previous_git, dict):
267
+ previous_base = str(
268
+ previous_git.get("base") or previous_git.get("baseCommit") or ""
269
+ ).strip()
270
+ requested_base = _git(project, "rev-parse", base) if base else ""
271
+ # First capture establishes the boundary. A later --base value is an
272
+ # observation hint only; changing the boundary requires the explicit
273
+ # archive range-adoption receipt.
274
+ resolved_base = previous_base or requested_base or git_head
275
+ files = discover_segment_files(project, change_dir, base=resolved_base, head=resolved_head)
257
276
  fresh = capture_snapshot(
258
277
  change_dir,
259
278
  change_name=change_name,
@@ -2,9 +2,9 @@
2
2
  "schema_version": 2,
3
3
  "profile": "general",
4
4
  "adapter": "claude-code",
5
- "bundle_version": "0.2.49",
5
+ "bundle_version": "0.2.50",
6
6
  "requires": {
7
- "minimumCliVersion": "0.2.66",
7
+ "minimumCliVersion": "0.2.67",
8
8
  "capabilities": [
9
9
  "sync@2",
10
10
  "rules-sync@1",
@@ -23,7 +23,7 @@
23
23
  "files": [
24
24
  {
25
25
  "path": ".harness-build.json",
26
- "sha256": "eaa445fc8683eb3c7b92a95f4daa346003f5dc32960a83019d3a84163a9647b1"
26
+ "sha256": "8b914d22f840a59a680468f1bdca127d7066fffc253321e55071e294c3bffa64"
27
27
  },
28
28
  {
29
29
  "path": "agents/harness-evaluator.md",
@@ -83,11 +83,11 @@
83
83
  },
84
84
  {
85
85
  "path": "harness-archive/checklist.md",
86
- "sha256": "b285e531406a11e2b63b291b888f18dff06033178b014419c97202a6484040f3"
86
+ "sha256": "4844dcfbe052fe0d95a8b41120502777b35ea538d9fcb63c86ca720368a7196d"
87
87
  },
88
88
  {
89
89
  "path": "harness-archive/reference.md",
90
- "sha256": "bad888106b12f37ea56a52f78c6c0d47c117a9bf0f664a7c9a95f4ea8fb39825"
90
+ "sha256": "a9f4ff879018d3e9ff7ad267396ae786ca30cee1239bbf0479a92880bbbcd89b"
91
91
  },
92
92
  {
93
93
  "path": "harness-archive/scripts/gen-manifest.ps1",
@@ -95,7 +95,7 @@
95
95
  },
96
96
  {
97
97
  "path": "harness-archive/SKILL.md",
98
- "sha256": "399d3ecbf1e005e9624a0337c4000f83421eef93bbc38889b0319e1306aa2e88"
98
+ "sha256": "cd0e297bc677caf07f74cf53b58280545c53c92d7373a01c7a52ffcb042a7969"
99
99
  },
100
100
  {
101
101
  "path": "harness-archive/templates/summary-data-template.json",
@@ -111,7 +111,7 @@
111
111
  },
112
112
  {
113
113
  "path": "harness-codebase-map/SKILL.md",
114
- "sha256": "ebf367fdff111a315f735cadf25ba3bdf8154e0208f8ad64e0990d5f5945e9dd"
114
+ "sha256": "df01a87236c743a80f654710bab97192c5c3c9fd3955ca3b8d6503442ab83309"
115
115
  },
116
116
  {
117
117
  "path": "harness-codebase-map/templates/ARCHITECTURE.md",
@@ -151,11 +151,11 @@
151
151
  },
152
152
  {
153
153
  "path": "harness-knowledge-ingest/SKILL.md",
154
- "sha256": "8869a4702f0b0c2597a3f76eaf5471331eb7c7e8d27d4a2b1d780b2f7d728af3"
154
+ "sha256": "c2bf251986d898bd01610f66f07ddd450f0a568207741119bf978d647b405ad3"
155
155
  },
156
156
  {
157
157
  "path": "harness-knowledge-query/SKILL.md",
158
- "sha256": "032faada16fb5a2b4f5043edcbcc9749c8c66ff61e6772e17aaeb38aaf88f978"
158
+ "sha256": "61af7d3dd7a65de6667b0366cd8ecc77dd3bf778ab6959faa0f6f28653c3522b"
159
159
  },
160
160
  {
161
161
  "path": "harness-plan/checklist.md",
@@ -171,7 +171,7 @@
171
171
  },
172
172
  {
173
173
  "path": "harness-plan/SKILL.md",
174
- "sha256": "e2c4db3d1422b828b8f3b39f8bc02b9f8780fd4030bea13fb07d35c9ae94fbdc"
174
+ "sha256": "d5970b58fc9b46755a145834c9045f122ea3777bf1ac5f402794a2a73ec6452f"
175
175
  },
176
176
  {
177
177
  "path": "harness-review/checklist.md",
@@ -187,7 +187,7 @@
187
187
  },
188
188
  {
189
189
  "path": "harness-review/SKILL.md",
190
- "sha256": "2e43c66aeeee4b3fe0f837526243b190abdb5bd20ccf5e017a1e220220eaa006"
190
+ "sha256": "4137a8aa990c1aaaa12660689b7dfad51c102cb578c779b956c1fc98e062ecad"
191
191
  },
192
192
  {
193
193
  "path": "harness-run/checklist.md",
@@ -203,7 +203,7 @@
203
203
  },
204
204
  {
205
205
  "path": "harness-run/SKILL.md",
206
- "sha256": "5ba74391dae1b0257cea98bd36e437df5226ec9764947992dac0b9a9ef15609e"
206
+ "sha256": "2a0050feba8f4e9e2257471b52cc7f5ef340b67e328c1979c0b630455f2530b7"
207
207
  },
208
208
  {
209
209
  "path": "harness-submit/checklist.md",
@@ -215,7 +215,7 @@
215
215
  },
216
216
  {
217
217
  "path": "harness-submit/SKILL.md",
218
- "sha256": "f643bb96f0fc19f46059b3ad910e17354ec9314b5ac440cc7661b9f9e4023cef"
218
+ "sha256": "b762b04506481dc8c177b70ed74c99c43b9b5d0cb0e59700301a526217f2e783"
219
219
  },
220
220
  {
221
221
  "path": "harness-sync/reference.md",
@@ -223,7 +223,7 @@
223
223
  },
224
224
  {
225
225
  "path": "harness-sync/SKILL.md",
226
- "sha256": "4f067519f1aae502055efa59f7a53d8b3106653b45893e234206c766924a53d3"
226
+ "sha256": "1c7a430e1a1d44da6b0e1efb590d0165169c3cac9dc5c6f8f8fb9ecdcce6fa5f"
227
227
  },
228
228
  {
229
229
  "path": "harness-test/checklist.md",
@@ -247,11 +247,11 @@
247
247
  },
248
248
  {
249
249
  "path": "harness-test/SKILL.md",
250
- "sha256": "36119f9dd3bf32ed92726e5d8e5a067b39c3c468cd2a9eb446b9f379695d2933"
250
+ "sha256": "24398adf6467864d5bb8534f91bfc6a51fa1320d97c5207ba91abd03c48b92d5"
251
251
  },
252
252
  {
253
253
  "path": "protocols/archive-report-protocol.md",
254
- "sha256": "5f4497efb7f2a75065e5bf712e21837f74dde670ff415d4208098102b063c016"
254
+ "sha256": "23add8a690289b5007bb9a38db55009b41866731f0c37c287ce9467392700652"
255
255
  },
256
256
  {
257
257
  "path": "protocols/ci-layering-protocol.md",
@@ -271,7 +271,7 @@
271
271
  },
272
272
  {
273
273
  "path": "protocols/ledger-protocol.md",
274
- "sha256": "c952dad5842ae50c18cdf0c71651a37f748fe569d1734ee65ca99420ff4c5f65"
274
+ "sha256": "c52d7e7d0ee1b21e761edcef2d0e853af3c381dcde3a323d3959b77d56e9818e"
275
275
  },
276
276
  {
277
277
  "path": "protocols/memory-closeout-protocol.md",
@@ -291,7 +291,7 @@
291
291
  },
292
292
  {
293
293
  "path": "protocols/report-pipeline-protocol.md",
294
- "sha256": "9ed52d4bfc15a47004c396f615bcb3ee9f9e453539fe4aa220fea8a41b1c9d30"
294
+ "sha256": "a755c54942c58262e9e3478021e4c9c5ac8255db625d6714f3fd9810eb1067f9"
295
295
  },
296
296
  {
297
297
  "path": "protocols/sensitive-info-protocol.md",
@@ -299,7 +299,7 @@
299
299
  },
300
300
  {
301
301
  "path": "protocols/state-layout-protocol.md",
302
- "sha256": "337e6e31219ce53316269199f256bfd2796941020cbe8ca14f9ae02bff917a54"
302
+ "sha256": "01ff757004a18913d5d5a8083071d0a6fc9d25ac7cf7db07a879f7bb1319445d"
303
303
  },
304
304
  {
305
305
  "path": "protocols/submit-protocol.md",
@@ -311,7 +311,7 @@
311
311
  },
312
312
  {
313
313
  "path": "README.md",
314
- "sha256": "108dbd779cb108a0628856c68dbff4bc60d63fc0b7f0c02005610d68be58256c"
314
+ "sha256": "0b236ce76b6cc58f431b8b6be441e42e3120359d24a8c8d63b060164a417a8a7"
315
315
  },
316
316
  {
317
317
  "path": "scripts/harness_apidoc.py",
@@ -319,7 +319,7 @@
319
319
  },
320
320
  {
321
321
  "path": "scripts/harness_archive.py",
322
- "sha256": "5b28014e37c34d344c3b85aad03ffc587b55cdde4092408d34e626534fb5cb75"
322
+ "sha256": "3c6fc709e5a2876fd4bad4ec60402b7b3933af1ea6d15bb6d16f269c7d65bf2f"
323
323
  },
324
324
  {
325
325
  "path": "scripts/harness_change.py",
@@ -331,7 +331,7 @@
331
331
  },
332
332
  {
333
333
  "path": "scripts/harness_context.py",
334
- "sha256": "d36bce0bdb0eb6afa57418353e15d87c5fc7823bfa5dbc3fce7d96cdb456878c"
334
+ "sha256": "5ef587edd57b0c819df1c37a448eda33f00a5b97b930c804290d1a83d9a4ad60"
335
335
  },
336
336
  {
337
337
  "path": "scripts/harness_deploy.py",
@@ -351,7 +351,7 @@
351
351
  },
352
352
  {
353
353
  "path": "scripts/harness_events.py",
354
- "sha256": "56858f5488255ed7af22dd38e2529c0287f3e4aa54e889b7a6d37666b4d73cb3"
354
+ "sha256": "f073ff0445a1de6d4e3030eb9b989e2f419ccdc9c36efcf060727ac4405b0804"
355
355
  },
356
356
  {
357
357
  "path": "scripts/harness_execution_contracts.py",
@@ -375,7 +375,7 @@
375
375
  },
376
376
  {
377
377
  "path": "scripts/harness_ledger.py",
378
- "sha256": "a18f3dde32c07593721c1ee03d8625be6217a5aeade902cc1b11778cbeea23dc"
378
+ "sha256": "5c33a09f3b073294afa21804697488dd5fa5601e79707be8b7db9f89be8e95f9"
379
379
  },
380
380
  {
381
381
  "path": "scripts/harness_migration_head.py",
@@ -411,7 +411,7 @@
411
411
  },
412
412
  {
413
413
  "path": "scripts/harness_profile.py",
414
- "sha256": "16b1aac01efc469a57a468fbcb20d72b4cd22a447ae76d0104a013bd3bd4aa0e"
414
+ "sha256": "9a10e62c52a7c84bf373bfb4aff18b2d51bfae6fd0ca75ef5ad7c87d22059e85"
415
415
  },
416
416
  {
417
417
  "path": "scripts/harness_report_model.py",
@@ -435,7 +435,7 @@
435
435
  },
436
436
  {
437
437
  "path": "scripts/harness_state.py",
438
- "sha256": "2a74c29c8c230d0780f23d079cb294597729141e9b988679a0dcc16caf209400"
438
+ "sha256": "cd08bcf0347a289180d121d079d0d2e638c6188f47b9f393cc70bac3564721c4"
439
439
  },
440
440
  {
441
441
  "path": "scripts/harness_sync.py",
@@ -2,9 +2,9 @@
2
2
  "schema_version": 2,
3
3
  "profile": "general",
4
4
  "adapter": "codebuddy",
5
- "bundle_version": "0.2.49",
5
+ "bundle_version": "0.2.50",
6
6
  "requires": {
7
- "minimumCliVersion": "0.2.66",
7
+ "minimumCliVersion": "0.2.67",
8
8
  "capabilities": [
9
9
  "sync@2",
10
10
  "rules-sync@1",
@@ -23,7 +23,7 @@
23
23
  "files": [
24
24
  {
25
25
  "path": ".harness-build.json",
26
- "sha256": "e72e7770f4e216c894a47de6098e47c76dec52a4f57251849bf5864764b63370"
26
+ "sha256": "1a5c32ccfd7843ea4946b268a0dfabc84c9ffdcb1ad25f3840f6117f926c9e93"
27
27
  },
28
28
  {
29
29
  "path": "agents/harness-evaluator.md",
@@ -83,11 +83,11 @@
83
83
  },
84
84
  {
85
85
  "path": "harness-archive/checklist.md",
86
- "sha256": "b285e531406a11e2b63b291b888f18dff06033178b014419c97202a6484040f3"
86
+ "sha256": "4844dcfbe052fe0d95a8b41120502777b35ea538d9fcb63c86ca720368a7196d"
87
87
  },
88
88
  {
89
89
  "path": "harness-archive/reference.md",
90
- "sha256": "bad888106b12f37ea56a52f78c6c0d47c117a9bf0f664a7c9a95f4ea8fb39825"
90
+ "sha256": "a9f4ff879018d3e9ff7ad267396ae786ca30cee1239bbf0479a92880bbbcd89b"
91
91
  },
92
92
  {
93
93
  "path": "harness-archive/scripts/gen-manifest.ps1",
@@ -95,7 +95,7 @@
95
95
  },
96
96
  {
97
97
  "path": "harness-archive/SKILL.md",
98
- "sha256": "c6cb5f9b6792d3589e9abc22a53bdbfa0e6704f48989544765871ab7f61d6711"
98
+ "sha256": "a5aa79c8bb081725d7ae3adac1870d4913e7c349da5ef14f8a06b2dd563fb392"
99
99
  },
100
100
  {
101
101
  "path": "harness-archive/templates/summary-data-template.json",
@@ -111,7 +111,7 @@
111
111
  },
112
112
  {
113
113
  "path": "harness-codebase-map/SKILL.md",
114
- "sha256": "05ea0c09ddb76def85db1b0334216d44c68dbc887f84aa7b0f33df12bed182ed"
114
+ "sha256": "ee941a5278c8b64ab39c546e395672ee5cf922c12ae53f022a60e271718d4fae"
115
115
  },
116
116
  {
117
117
  "path": "harness-codebase-map/templates/ARCHITECTURE.md",
@@ -151,11 +151,11 @@
151
151
  },
152
152
  {
153
153
  "path": "harness-knowledge-ingest/SKILL.md",
154
- "sha256": "3962a980e0f49858defe6859c4591fd7350f96735d2f2bbd2f5720dd2acb308e"
154
+ "sha256": "5bd687266e6c00ba3d5c76e825be317855cb29cb4bd0e75bec33ddbf570523f2"
155
155
  },
156
156
  {
157
157
  "path": "harness-knowledge-query/SKILL.md",
158
- "sha256": "e248d68442060ba0dad50d59d610438ad0b7cc5d9c59b9c75591c7a243e5877d"
158
+ "sha256": "baa65efbcfcd748edd133490a29d10b35498bb2a1608bc58baf213f3f97eeed1"
159
159
  },
160
160
  {
161
161
  "path": "harness-plan/checklist.md",
@@ -171,7 +171,7 @@
171
171
  },
172
172
  {
173
173
  "path": "harness-plan/SKILL.md",
174
- "sha256": "4a17445d0e89d4239454c52e7961d23bc20266ef0ebc7b2bc295d48c3639faef"
174
+ "sha256": "09877f19170202e178916b58b653073344cb80970af04ecc61d222e0ff3520d3"
175
175
  },
176
176
  {
177
177
  "path": "harness-review/checklist.md",
@@ -187,7 +187,7 @@
187
187
  },
188
188
  {
189
189
  "path": "harness-review/SKILL.md",
190
- "sha256": "a3a26cee3b30297af175349938178dccc30a905758390e4e51f2dfc39f026570"
190
+ "sha256": "51697c7b59a40fa8de33eb509b37c2d4cfe909691f27e882e5935c0e25e4f56c"
191
191
  },
192
192
  {
193
193
  "path": "harness-run/checklist.md",
@@ -203,7 +203,7 @@
203
203
  },
204
204
  {
205
205
  "path": "harness-run/SKILL.md",
206
- "sha256": "e59498fe527e50d6358c2c77cc0faaa49653151ca4d5c6d5b0783b803316c29b"
206
+ "sha256": "65213f59fc32480a8b62233bf42ef9529a6a9fbb26ede4002070161fc146a05a"
207
207
  },
208
208
  {
209
209
  "path": "harness-submit/checklist.md",
@@ -215,7 +215,7 @@
215
215
  },
216
216
  {
217
217
  "path": "harness-submit/SKILL.md",
218
- "sha256": "401c41b4ddef37cd3784b342bf556582704885758d3e7a42ead3e263297c84be"
218
+ "sha256": "9a25e2fd88e0a28fe1be5ed0299ea30f20f528f30950f422889de2d5284c67e0"
219
219
  },
220
220
  {
221
221
  "path": "harness-sync/reference.md",
@@ -223,7 +223,7 @@
223
223
  },
224
224
  {
225
225
  "path": "harness-sync/SKILL.md",
226
- "sha256": "8ffc5f630dc5b77d509d6086bfa815da9ce4a615d66c344e5dfeaba38325686f"
226
+ "sha256": "0ba6a2fc13121e2920d0bff90c0a432d047049c8f520a77ceba36ebffbd4e904"
227
227
  },
228
228
  {
229
229
  "path": "harness-test/checklist.md",
@@ -247,11 +247,11 @@
247
247
  },
248
248
  {
249
249
  "path": "harness-test/SKILL.md",
250
- "sha256": "a4a5b59a30109ad0b3e2755db649852d16f283414a6ba6c930086a6afef71d7f"
250
+ "sha256": "e10d4f140ce1a6d21605e90ea1e01815a5e96b619dfaffed3ff984da4533274c"
251
251
  },
252
252
  {
253
253
  "path": "protocols/archive-report-protocol.md",
254
- "sha256": "5f4497efb7f2a75065e5bf712e21837f74dde670ff415d4208098102b063c016"
254
+ "sha256": "23add8a690289b5007bb9a38db55009b41866731f0c37c287ce9467392700652"
255
255
  },
256
256
  {
257
257
  "path": "protocols/ci-layering-protocol.md",
@@ -271,7 +271,7 @@
271
271
  },
272
272
  {
273
273
  "path": "protocols/ledger-protocol.md",
274
- "sha256": "c952dad5842ae50c18cdf0c71651a37f748fe569d1734ee65ca99420ff4c5f65"
274
+ "sha256": "c52d7e7d0ee1b21e761edcef2d0e853af3c381dcde3a323d3959b77d56e9818e"
275
275
  },
276
276
  {
277
277
  "path": "protocols/memory-closeout-protocol.md",
@@ -291,7 +291,7 @@
291
291
  },
292
292
  {
293
293
  "path": "protocols/report-pipeline-protocol.md",
294
- "sha256": "9ed52d4bfc15a47004c396f615bcb3ee9f9e453539fe4aa220fea8a41b1c9d30"
294
+ "sha256": "a755c54942c58262e9e3478021e4c9c5ac8255db625d6714f3fd9810eb1067f9"
295
295
  },
296
296
  {
297
297
  "path": "protocols/sensitive-info-protocol.md",
@@ -299,7 +299,7 @@
299
299
  },
300
300
  {
301
301
  "path": "protocols/state-layout-protocol.md",
302
- "sha256": "337e6e31219ce53316269199f256bfd2796941020cbe8ca14f9ae02bff917a54"
302
+ "sha256": "01ff757004a18913d5d5a8083071d0a6fc9d25ac7cf7db07a879f7bb1319445d"
303
303
  },
304
304
  {
305
305
  "path": "protocols/submit-protocol.md",
@@ -311,7 +311,7 @@
311
311
  },
312
312
  {
313
313
  "path": "README.md",
314
- "sha256": "108dbd779cb108a0628856c68dbff4bc60d63fc0b7f0c02005610d68be58256c"
314
+ "sha256": "0b236ce76b6cc58f431b8b6be441e42e3120359d24a8c8d63b060164a417a8a7"
315
315
  },
316
316
  {
317
317
  "path": "scripts/harness_apidoc.py",
@@ -319,7 +319,7 @@
319
319
  },
320
320
  {
321
321
  "path": "scripts/harness_archive.py",
322
- "sha256": "5b28014e37c34d344c3b85aad03ffc587b55cdde4092408d34e626534fb5cb75"
322
+ "sha256": "3c6fc709e5a2876fd4bad4ec60402b7b3933af1ea6d15bb6d16f269c7d65bf2f"
323
323
  },
324
324
  {
325
325
  "path": "scripts/harness_change.py",
@@ -331,7 +331,7 @@
331
331
  },
332
332
  {
333
333
  "path": "scripts/harness_context.py",
334
- "sha256": "d36bce0bdb0eb6afa57418353e15d87c5fc7823bfa5dbc3fce7d96cdb456878c"
334
+ "sha256": "5ef587edd57b0c819df1c37a448eda33f00a5b97b930c804290d1a83d9a4ad60"
335
335
  },
336
336
  {
337
337
  "path": "scripts/harness_deploy.py",
@@ -351,7 +351,7 @@
351
351
  },
352
352
  {
353
353
  "path": "scripts/harness_events.py",
354
- "sha256": "56858f5488255ed7af22dd38e2529c0287f3e4aa54e889b7a6d37666b4d73cb3"
354
+ "sha256": "f073ff0445a1de6d4e3030eb9b989e2f419ccdc9c36efcf060727ac4405b0804"
355
355
  },
356
356
  {
357
357
  "path": "scripts/harness_execution_contracts.py",
@@ -375,7 +375,7 @@
375
375
  },
376
376
  {
377
377
  "path": "scripts/harness_ledger.py",
378
- "sha256": "a18f3dde32c07593721c1ee03d8625be6217a5aeade902cc1b11778cbeea23dc"
378
+ "sha256": "5c33a09f3b073294afa21804697488dd5fa5601e79707be8b7db9f89be8e95f9"
379
379
  },
380
380
  {
381
381
  "path": "scripts/harness_migration_head.py",
@@ -411,7 +411,7 @@
411
411
  },
412
412
  {
413
413
  "path": "scripts/harness_profile.py",
414
- "sha256": "16b1aac01efc469a57a468fbcb20d72b4cd22a447ae76d0104a013bd3bd4aa0e"
414
+ "sha256": "9a10e62c52a7c84bf373bfb4aff18b2d51bfae6fd0ca75ef5ad7c87d22059e85"
415
415
  },
416
416
  {
417
417
  "path": "scripts/harness_report_model.py",
@@ -435,7 +435,7 @@
435
435
  },
436
436
  {
437
437
  "path": "scripts/harness_state.py",
438
- "sha256": "2a74c29c8c230d0780f23d079cb294597729141e9b988679a0dcc16caf209400"
438
+ "sha256": "cd08bcf0347a289180d121d079d0d2e638c6188f47b9f393cc70bac3564721c4"
439
439
  },
440
440
  {
441
441
  "path": "scripts/harness_sync.py",