@hunter-harness/workflow-harness 0.2.82 → 0.2.84
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/harness-archive/SKILL.md +32 -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 +1 -1
- package/harness/bundles/general/claude-code/harness-pull/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-push/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-run/SKILL.md +22 -2
- package/harness/bundles/general/claude-code/harness-run/protocols.md +60 -0
- package/harness/bundles/general/claude-code/harness-run/reference.md +1 -1
- 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 +1 -1
- package/harness/bundles/general/claude-code/scripts/harness_archive.py +273 -3
- package/harness/bundles/general/claude-code/scripts/harness_fixback.py +451 -37
- package/harness/bundles/general/claude-code/scripts/harness_gate.py +88 -3
- package/harness/bundles/general/claude-code/scripts/harness_integration.py +156 -39
- package/harness/bundles/general/claude-code/scripts/harness_review.py +43 -5
- package/harness/bundles/general/claude-code/scripts/harness_runtime.py +125 -10
- package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +32 -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 +1 -1
- package/harness/bundles/general/codebuddy/harness-pull/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-push/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-run/SKILL.md +22 -2
- package/harness/bundles/general/codebuddy/harness-run/protocols.md +60 -0
- package/harness/bundles/general/codebuddy/harness-run/reference.md +1 -1
- 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 +1 -1
- package/harness/bundles/general/codebuddy/scripts/harness_archive.py +273 -3
- package/harness/bundles/general/codebuddy/scripts/harness_fixback.py +451 -37
- package/harness/bundles/general/codebuddy/scripts/harness_gate.py +88 -3
- package/harness/bundles/general/codebuddy/scripts/harness_integration.py +156 -39
- package/harness/bundles/general/codebuddy/scripts/harness_review.py +43 -5
- package/harness/bundles/general/codebuddy/scripts/harness_runtime.py +125 -10
- package/harness/bundles/general/codex/.harness-build.json +1 -1
- package/harness/bundles/general/codex/harness-archive/SKILL.md +32 -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 +1 -1
- package/harness/bundles/general/codex/harness-pull/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-push/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-run/SKILL.md +22 -2
- package/harness/bundles/general/codex/harness-run/protocols.md +60 -0
- package/harness/bundles/general/codex/harness-run/reference.md +1 -1
- 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 +1 -1
- package/harness/bundles/general/codex/scripts/harness_archive.py +273 -3
- package/harness/bundles/general/codex/scripts/harness_fixback.py +451 -37
- package/harness/bundles/general/codex/scripts/harness_gate.py +88 -3
- package/harness/bundles/general/codex/scripts/harness_integration.py +156 -39
- package/harness/bundles/general/codex/scripts/harness_review.py +43 -5
- package/harness/bundles/general/codex/scripts/harness_runtime.py +125 -10
- package/harness/bundles/general/cursor/.harness-build.json +1 -1
- package/harness/bundles/general/cursor/harness-archive/SKILL.md +32 -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 +1 -1
- package/harness/bundles/general/cursor/harness-pull/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-push/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-run/SKILL.md +22 -2
- package/harness/bundles/general/cursor/harness-run/protocols.md +60 -0
- package/harness/bundles/general/cursor/harness-run/reference.md +1 -1
- 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 +1 -1
- package/harness/bundles/general/cursor/scripts/harness_archive.py +273 -3
- package/harness/bundles/general/cursor/scripts/harness_fixback.py +451 -37
- package/harness/bundles/general/cursor/scripts/harness_gate.py +88 -3
- package/harness/bundles/general/cursor/scripts/harness_integration.py +156 -39
- package/harness/bundles/general/cursor/scripts/harness_review.py +43 -5
- package/harness/bundles/general/cursor/scripts/harness_runtime.py +125 -10
- package/harness/bundles/java/claude-code/.harness-build.json +1 -1
- package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-archive/SKILL.md +32 -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 +1 -1
- package/harness/bundles/java/claude-code/harness-pull/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-push/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-run/SKILL.md +22 -2
- package/harness/bundles/java/claude-code/harness-run/protocols.md +60 -0
- 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 +1 -1
- package/harness/bundles/java/claude-code/scripts/harness_archive.py +273 -3
- package/harness/bundles/java/claude-code/scripts/harness_fixback.py +451 -37
- package/harness/bundles/java/claude-code/scripts/harness_gate.py +88 -3
- package/harness/bundles/java/claude-code/scripts/harness_integration.py +156 -39
- package/harness/bundles/java/claude-code/scripts/harness_review.py +43 -5
- package/harness/bundles/java/claude-code/scripts/harness_runtime.py +125 -10
- package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +32 -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 +1 -1
- package/harness/bundles/java/codebuddy/harness-pull/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-push/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-run/SKILL.md +22 -2
- package/harness/bundles/java/codebuddy/harness-run/protocols.md +60 -0
- 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 +1 -1
- package/harness/bundles/java/codebuddy/scripts/harness_archive.py +273 -3
- package/harness/bundles/java/codebuddy/scripts/harness_fixback.py +451 -37
- package/harness/bundles/java/codebuddy/scripts/harness_gate.py +88 -3
- package/harness/bundles/java/codebuddy/scripts/harness_integration.py +156 -39
- package/harness/bundles/java/codebuddy/scripts/harness_review.py +43 -5
- package/harness/bundles/java/codebuddy/scripts/harness_runtime.py +125 -10
- package/harness/bundles/java/codex/.harness-build.json +1 -1
- package/harness/bundles/java/codex/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-archive/SKILL.md +32 -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 +1 -1
- package/harness/bundles/java/codex/harness-pull/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-push/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-run/SKILL.md +22 -2
- package/harness/bundles/java/codex/harness-run/protocols.md +60 -0
- 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 +1 -1
- package/harness/bundles/java/codex/scripts/harness_archive.py +273 -3
- package/harness/bundles/java/codex/scripts/harness_fixback.py +451 -37
- package/harness/bundles/java/codex/scripts/harness_gate.py +88 -3
- package/harness/bundles/java/codex/scripts/harness_integration.py +156 -39
- package/harness/bundles/java/codex/scripts/harness_review.py +43 -5
- package/harness/bundles/java/codex/scripts/harness_runtime.py +125 -10
- package/harness/bundles/java/cursor/.harness-build.json +1 -1
- package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-archive/SKILL.md +32 -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 +1 -1
- package/harness/bundles/java/cursor/harness-pull/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-push/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-run/SKILL.md +22 -2
- package/harness/bundles/java/cursor/harness-run/protocols.md +60 -0
- 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 +1 -1
- package/harness/bundles/java/cursor/scripts/harness_archive.py +273 -3
- package/harness/bundles/java/cursor/scripts/harness_fixback.py +451 -37
- package/harness/bundles/java/cursor/scripts/harness_gate.py +88 -3
- package/harness/bundles/java/cursor/scripts/harness_integration.py +156 -39
- package/harness/bundles/java/cursor/scripts/harness_review.py +43 -5
- package/harness/bundles/java/cursor/scripts/harness_runtime.py +125 -10
- package/harness/manifests/general/claude-code.json +23 -23
- package/harness/manifests/general/codebuddy.json +23 -23
- package/harness/manifests/general/codex.json +23 -23
- package/harness/manifests/general/cursor.json +23 -23
- package/harness/manifests/java/claude-code.json +24 -24
- package/harness/manifests/java/codebuddy.json +24 -24
- package/harness/manifests/java/codex.json +24 -24
- package/harness/manifests/java/cursor.json +24 -24
- package/hunter-workflow-family.json +5 -5
- package/package.json +1 -1
|
@@ -18,6 +18,8 @@ import threading
|
|
|
18
18
|
import time
|
|
19
19
|
import uuid
|
|
20
20
|
from pathlib import Path
|
|
21
|
+
import fnmatch
|
|
22
|
+
from collections.abc import Sequence
|
|
21
23
|
from typing import Any, Callable
|
|
22
24
|
|
|
23
25
|
SCRIPTS_DIR = Path(__file__).resolve().parent
|
|
@@ -35,6 +37,11 @@ RUN_TERMINAL_STATUSES = {"OK", "FAIL", "INCOMPLETE", "CANCELLED"}
|
|
|
35
37
|
_CHANGE_ID = re.compile(r"^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$")
|
|
36
38
|
SECRET_SCAN_RULES_VERSION = "secret-scan-v2"
|
|
37
39
|
SECRET_SCAN_RECEIPT_REL = Path("meta") / "secret-scan-receipt.json"
|
|
40
|
+
# 变更目录里只有一部分内容会被发布:归档包成员是 reports/final/summary-data.json、
|
|
41
|
+
# spec/**.md、plans/**.md、candidates/knowledge.json、meta/archive-meta.md、
|
|
42
|
+
# meta/change-context.json。runtime/ 是各阶段的草稿(review 的 diff、临时校验
|
|
43
|
+
# 脚本、命令输出重定向),从不入包——拿它挡发布,挡的是永远不会离开本机的字节。
|
|
44
|
+
PUBLICATION_EXCLUDED_DIRS: tuple[str, ...] = ("runtime",)
|
|
38
45
|
_SENSITIVE_ASSIGNMENT = re.compile(
|
|
39
46
|
rb"(?i)[\"']?(?:password|passwd|token|secret|cookie|database[_-]?url)"
|
|
40
47
|
rb"[\"']?\s*[:=]\s*[\"']?(?P<value>[^\s\"']{4,})"
|
|
@@ -126,7 +133,15 @@ def _sha256_json(value: Any) -> str:
|
|
|
126
133
|
return "sha256:" + hashlib.sha256(encoded).hexdigest()
|
|
127
134
|
|
|
128
135
|
|
|
129
|
-
def
|
|
136
|
+
def _is_excluded(relative: str, exclude_dirs: Sequence[str]) -> bool:
|
|
137
|
+
"""Path is inside one of the excluded top-level directories."""
|
|
138
|
+
head = relative.split("/", 1)[0]
|
|
139
|
+
return head in exclude_dirs
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def _publishable_tree_digest(
|
|
143
|
+
root: Path, *, exclude_dirs: Sequence[str] = ()
|
|
144
|
+
) -> str:
|
|
130
145
|
"""Hash publishable bytes while excluding the self-referential scan receipt."""
|
|
131
146
|
root = root.expanduser().resolve()
|
|
132
147
|
digest = hashlib.sha256()
|
|
@@ -136,6 +151,10 @@ def _publishable_tree_digest(root: Path) -> str:
|
|
|
136
151
|
for path in sorted(root.rglob("*")):
|
|
137
152
|
if not path.is_file() or path.resolve() == receipt:
|
|
138
153
|
continue
|
|
154
|
+
if exclude_dirs and _is_excluded(
|
|
155
|
+
path.relative_to(root).as_posix(), exclude_dirs
|
|
156
|
+
):
|
|
157
|
+
continue
|
|
139
158
|
relative = path.relative_to(root).as_posix()
|
|
140
159
|
data = path.read_bytes()
|
|
141
160
|
digest.update(relative.encode("utf-8"))
|
|
@@ -215,8 +234,73 @@ def _secure_private_path(path: Path, *, directory: bool) -> str:
|
|
|
215
234
|
return "WINDOWS_ACL_UNVERIFIED"
|
|
216
235
|
|
|
217
236
|
|
|
218
|
-
|
|
219
|
-
|
|
237
|
+
# runtime/ 下哪些是**过程草稿**。白名单式判断:只删明确列举的形态,
|
|
238
|
+
# 其余一律保留——门禁、租约、恢复和证据都住在这棵树里,宁可留垃圾也不能误删。
|
|
239
|
+
SCRATCH_PATTERNS: tuple[str, ...] = (
|
|
240
|
+
"*.patch",
|
|
241
|
+
"*.diff",
|
|
242
|
+
"*-input.json",
|
|
243
|
+
"*-input[0-9].json",
|
|
244
|
+
"findings-rereview.json",
|
|
245
|
+
"archive-out*.json",
|
|
246
|
+
"fixback-*-check.*",
|
|
247
|
+
)
|
|
248
|
+
# 即便命中上面的形态也必须留下的名字:它们是运行态,不是草稿。
|
|
249
|
+
SCRATCH_KEEP: frozenset[str] = frozenset({
|
|
250
|
+
"context-lease.json",
|
|
251
|
+
"fixback-session.json",
|
|
252
|
+
"preflight.json",
|
|
253
|
+
})
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
def sweep_scratch(change_root: Path, *, dry_run: bool = False) -> dict[str, Any]:
|
|
257
|
+
"""清掉 runtime/ 顶层的过程草稿,保留运行态、会话、证据与报告。
|
|
258
|
+
|
|
259
|
+
一轮流程下来 runtime/ 会堆满 diff、临时校验脚本和命令输出重定向。没人清,
|
|
260
|
+
而且它们会被其他门禁读到——2026-08-19 那次,review 自己生成的两个 diff
|
|
261
|
+
直接把归档挡住了。
|
|
262
|
+
|
|
263
|
+
只扫 runtime/ 顶层文件:run-sessions/ 等子目录是托管会话证据,不进扫描。
|
|
264
|
+
"""
|
|
265
|
+
change_root = change_root.expanduser().resolve()
|
|
266
|
+
runtime_dir = change_root / "runtime"
|
|
267
|
+
removed: list[str] = []
|
|
268
|
+
if not runtime_dir.is_dir():
|
|
269
|
+
return {"ok": True, "code": "SCRATCH_SWEPT", "removed": [], "dryRun": dry_run}
|
|
270
|
+
errors: list[dict[str, str]] = []
|
|
271
|
+
for path in sorted(runtime_dir.iterdir()):
|
|
272
|
+
if not path.is_file() or path.name in SCRATCH_KEEP:
|
|
273
|
+
continue
|
|
274
|
+
if not any(fnmatch.fnmatch(path.name, pattern) for pattern in SCRATCH_PATTERNS):
|
|
275
|
+
continue
|
|
276
|
+
relative = path.relative_to(change_root).as_posix()
|
|
277
|
+
if dry_run:
|
|
278
|
+
removed.append(relative)
|
|
279
|
+
continue
|
|
280
|
+
try:
|
|
281
|
+
path.unlink()
|
|
282
|
+
except OSError as exc:
|
|
283
|
+
errors.append({"path": relative, "error": str(exc)})
|
|
284
|
+
continue
|
|
285
|
+
removed.append(relative)
|
|
286
|
+
return {
|
|
287
|
+
"ok": not errors,
|
|
288
|
+
"code": "SCRATCH_SWEPT" if not errors else "SCRATCH_SWEEP_PARTIAL",
|
|
289
|
+
"removed": removed,
|
|
290
|
+
"errors": errors,
|
|
291
|
+
"dryRun": dry_run,
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
def _sensitive_candidates(
|
|
296
|
+
root: Path, *, exclude_dirs: Sequence[str] = ()
|
|
297
|
+
) -> list[dict[str, Any]]:
|
|
298
|
+
"""Find high-confidence plaintext assignments without treating prose as a secret.
|
|
299
|
+
|
|
300
|
+
``exclude_dirs`` scopes the scan to what a caller actually publishes. The
|
|
301
|
+
default stays whole-tree: the quarantine flow depends on seeing legacy
|
|
302
|
+
plaintext anywhere under the change, including scratch directories.
|
|
303
|
+
"""
|
|
220
304
|
# Compare by relative path, not by resolve() per file: this loop covers the
|
|
221
305
|
# whole change tree, and on Windows each resolve() is a realpath syscall.
|
|
222
306
|
receipt_rel = SECRET_SCAN_RECEIPT_REL.as_posix()
|
|
@@ -224,7 +308,10 @@ def _sensitive_candidates(root: Path) -> list[dict[str, Any]]:
|
|
|
224
308
|
for path in sorted(root.rglob("*")):
|
|
225
309
|
if not path.is_file():
|
|
226
310
|
continue
|
|
227
|
-
|
|
311
|
+
relative = path.relative_to(root).as_posix()
|
|
312
|
+
if relative == receipt_rel:
|
|
313
|
+
continue
|
|
314
|
+
if exclude_dirs and _is_excluded(relative, exclude_dirs):
|
|
228
315
|
continue
|
|
229
316
|
try:
|
|
230
317
|
raw = path.read_bytes()
|
|
@@ -263,17 +350,21 @@ def _is_sensitive_placeholder(value: bytes) -> bool:
|
|
|
263
350
|
)
|
|
264
351
|
|
|
265
352
|
|
|
266
|
-
def publishable_tree_digest(
|
|
353
|
+
def publishable_tree_digest(
|
|
354
|
+
root: Path, *, exclude_dirs: Sequence[str] = ()
|
|
355
|
+
) -> str:
|
|
267
356
|
"""Public digest helper shared by the archive publication gate."""
|
|
268
|
-
return _publishable_tree_digest(root)
|
|
357
|
+
return _publishable_tree_digest(root, exclude_dirs=exclude_dirs)
|
|
269
358
|
|
|
270
359
|
|
|
271
360
|
def sensitive_evidence_receipt_path(change_root: Path) -> Path:
|
|
272
361
|
return _sensitive_evidence_receipt_path(change_root)
|
|
273
362
|
|
|
274
363
|
|
|
275
|
-
def sensitive_evidence_candidates(
|
|
276
|
-
|
|
364
|
+
def sensitive_evidence_candidates(
|
|
365
|
+
root: Path, *, exclude_dirs: Sequence[str] = ()
|
|
366
|
+
) -> list[dict[str, Any]]:
|
|
367
|
+
return _sensitive_candidates(root, exclude_dirs=exclude_dirs)
|
|
277
368
|
|
|
278
369
|
|
|
279
370
|
def _build_sensitive_scan_receipt(
|
|
@@ -282,6 +373,7 @@ def _build_sensitive_scan_receipt(
|
|
|
282
373
|
entries: list[dict[str, Any]],
|
|
283
374
|
unresolved: list[dict[str, Any]],
|
|
284
375
|
status: str,
|
|
376
|
+
exclude_dirs: Sequence[str] = (),
|
|
285
377
|
) -> dict[str, Any]:
|
|
286
378
|
change_root = change_root.expanduser().resolve()
|
|
287
379
|
return {
|
|
@@ -291,7 +383,12 @@ def _build_sensitive_scan_receipt(
|
|
|
291
383
|
"status": status,
|
|
292
384
|
"unresolvedFailures": unresolved,
|
|
293
385
|
"entries": entries,
|
|
294
|
-
"publishableTreeDigest": _publishable_tree_digest(
|
|
386
|
+
"publishableTreeDigest": _publishable_tree_digest(
|
|
387
|
+
change_root, exclude_dirs=exclude_dirs
|
|
388
|
+
),
|
|
389
|
+
# 收据自述扫描范围:复算摘要的一方据此排除同样的目录,
|
|
390
|
+
# 否则两侧口径不同会误报 digest 漂移。
|
|
391
|
+
"publicationExcludedDirs": list(exclude_dirs),
|
|
295
392
|
"publicationExcluded": True,
|
|
296
393
|
"recordedAt": now_iso(),
|
|
297
394
|
}
|
|
@@ -303,6 +400,7 @@ def _write_sensitive_scan_receipt(
|
|
|
303
400
|
entries: list[dict[str, Any]],
|
|
304
401
|
unresolved: list[dict[str, Any]],
|
|
305
402
|
status: str,
|
|
403
|
+
exclude_dirs: Sequence[str] = (),
|
|
306
404
|
) -> dict[str, Any]:
|
|
307
405
|
change_root = change_root.expanduser().resolve()
|
|
308
406
|
receipt = _build_sensitive_scan_receipt(
|
|
@@ -310,6 +408,7 @@ def _write_sensitive_scan_receipt(
|
|
|
310
408
|
entries=entries,
|
|
311
409
|
unresolved=unresolved,
|
|
312
410
|
status=status,
|
|
411
|
+
exclude_dirs=exclude_dirs,
|
|
313
412
|
)
|
|
314
413
|
atomic_write_json(_sensitive_evidence_receipt_path(change_root), receipt)
|
|
315
414
|
return receipt
|
|
@@ -463,6 +562,7 @@ def refresh_sensitive_evidence_scan_receipt(
|
|
|
463
562
|
change_root: Path,
|
|
464
563
|
*,
|
|
465
564
|
persist: bool = True,
|
|
565
|
+
exclude_dirs: Sequence[str] = (),
|
|
466
566
|
) -> dict[str, Any]:
|
|
467
567
|
"""Rescan current bytes while preserving valid quarantine audit entries."""
|
|
468
568
|
change_root = change_root.expanduser().resolve()
|
|
@@ -508,7 +608,7 @@ def refresh_sensitive_evidence_scan_receipt(
|
|
|
508
608
|
}
|
|
509
609
|
entries = list(prior_entries)
|
|
510
610
|
|
|
511
|
-
unresolved = _sensitive_candidates(change_root)
|
|
611
|
+
unresolved = _sensitive_candidates(change_root, exclude_dirs=exclude_dirs)
|
|
512
612
|
status = "FAIL" if unresolved else "QUARANTINED" if entries else "OK"
|
|
513
613
|
if persist:
|
|
514
614
|
try:
|
|
@@ -517,6 +617,7 @@ def refresh_sensitive_evidence_scan_receipt(
|
|
|
517
617
|
entries=entries,
|
|
518
618
|
unresolved=unresolved,
|
|
519
619
|
status=status,
|
|
620
|
+
exclude_dirs=exclude_dirs,
|
|
520
621
|
)
|
|
521
622
|
except OSError as exc:
|
|
522
623
|
return {
|
|
@@ -531,6 +632,7 @@ def refresh_sensitive_evidence_scan_receipt(
|
|
|
531
632
|
entries=entries,
|
|
532
633
|
unresolved=unresolved,
|
|
533
634
|
status=status,
|
|
635
|
+
exclude_dirs=exclude_dirs,
|
|
534
636
|
)
|
|
535
637
|
return {
|
|
536
638
|
"ok": not unresolved,
|
|
@@ -2019,6 +2121,15 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
2019
2121
|
help="override the private root; must be outside the project root and on its drive",
|
|
2020
2122
|
)
|
|
2021
2123
|
p_quarantine.add_argument("--json", action="store_true")
|
|
2124
|
+
p_sweep = sub.add_parser(
|
|
2125
|
+
"sweep-scratch",
|
|
2126
|
+
help="删除 runtime/ 顶层的过程草稿(diff、临时输入、命令输出)",
|
|
2127
|
+
)
|
|
2128
|
+
p_sweep.add_argument("--change-dir", required=True)
|
|
2129
|
+
p_sweep.add_argument(
|
|
2130
|
+
"--dry-run", action="store_true", help="只列出会删什么,不真删"
|
|
2131
|
+
)
|
|
2132
|
+
p_sweep.add_argument("--json", action="store_true")
|
|
2022
2133
|
p_adapter = sub.add_parser("adapter")
|
|
2023
2134
|
p_adapter.add_argument("--agent", choices=sorted(_ADAPTERS), required=True)
|
|
2024
2135
|
p_adapter.add_argument("--change", required=True)
|
|
@@ -2069,6 +2180,10 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
2069
2180
|
result = doctor(Path(args.project), Path(args.change_dir), agent=args.agent)
|
|
2070
2181
|
elif args.command == "quarantine-evidence":
|
|
2071
2182
|
result = cmd_quarantine_evidence(args)
|
|
2183
|
+
elif args.command == "sweep-scratch":
|
|
2184
|
+
result = sweep_scratch(
|
|
2185
|
+
Path(args.change_dir), dry_run=bool(args.dry_run)
|
|
2186
|
+
)
|
|
2072
2187
|
elif args.command == "adapter":
|
|
2073
2188
|
result = {"ok": True, "action": "adapter", **adapter_worktree(args.agent, args.change)}
|
|
2074
2189
|
elif args.command == "_worker":
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"schema_version": 2,
|
|
3
3
|
"profile": "general",
|
|
4
4
|
"adapter": "claude-code",
|
|
5
|
-
"bundle_version": "0.2.
|
|
5
|
+
"bundle_version": "0.2.73",
|
|
6
6
|
"requires": {
|
|
7
|
-
"minimumCliVersion": "0.2.
|
|
7
|
+
"minimumCliVersion": "0.2.90",
|
|
8
8
|
"capabilities": [
|
|
9
9
|
"sync@2",
|
|
10
10
|
"rules-sync@1",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"files": [
|
|
26
26
|
{
|
|
27
27
|
"path": ".harness-build.json",
|
|
28
|
-
"sha256": "
|
|
28
|
+
"sha256": "3358db4087b290afedd83a8f3147b34ec4c37e7ac71f073498a74784328c588a"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
"path": "agents/harness-evaluator.md",
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
},
|
|
98
98
|
{
|
|
99
99
|
"path": "harness-archive/SKILL.md",
|
|
100
|
-
"sha256": "
|
|
100
|
+
"sha256": "85d7a0ae2f8ecd8cc0011d774cf3716d8fc630a698e98bbd9b1a09bac739b2e2"
|
|
101
101
|
},
|
|
102
102
|
{
|
|
103
103
|
"path": "harness-archive/templates/summary-data-template.json",
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
115
|
"path": "harness-codebase-map/SKILL.md",
|
|
116
|
-
"sha256": "
|
|
116
|
+
"sha256": "5e35f6d514ead2540217097112cf9785ee0ca57ed1022efd6195a349a20b6a41"
|
|
117
117
|
},
|
|
118
118
|
{
|
|
119
119
|
"path": "harness-codebase-map/templates/ARCHITECTURE.md",
|
|
@@ -153,11 +153,11 @@
|
|
|
153
153
|
},
|
|
154
154
|
{
|
|
155
155
|
"path": "harness-knowledge-ingest/SKILL.md",
|
|
156
|
-
"sha256": "
|
|
156
|
+
"sha256": "10f12aea83581006e00347c3564a94a5949dac1461d61cd1dff585739256c01b"
|
|
157
157
|
},
|
|
158
158
|
{
|
|
159
159
|
"path": "harness-knowledge-query/SKILL.md",
|
|
160
|
-
"sha256": "
|
|
160
|
+
"sha256": "d6a68f05edc6b06c76ddecae75d9feb294ecd805a3fd3b6fbf9b545f20837f0b"
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
163
|
"path": "harness-plan/checklist.md",
|
|
@@ -173,15 +173,15 @@
|
|
|
173
173
|
},
|
|
174
174
|
{
|
|
175
175
|
"path": "harness-plan/SKILL.md",
|
|
176
|
-
"sha256": "
|
|
176
|
+
"sha256": "77f6b5dcd6f743244e726ed51477cf5f01f0790da31bfefb931ec45ae51333ec"
|
|
177
177
|
},
|
|
178
178
|
{
|
|
179
179
|
"path": "harness-pull/SKILL.md",
|
|
180
|
-
"sha256": "
|
|
180
|
+
"sha256": "7450bdc98d30e3212bfcf3e74cc060c5d794f99f880c24a2550edee662fbb983"
|
|
181
181
|
},
|
|
182
182
|
{
|
|
183
183
|
"path": "harness-push/SKILL.md",
|
|
184
|
-
"sha256": "
|
|
184
|
+
"sha256": "0730d1d656edbbbed2672202a0d262b4a781a04252214468a34cd2d91a6d9301"
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
"path": "harness-review/checklist.md",
|
|
@@ -197,7 +197,7 @@
|
|
|
197
197
|
},
|
|
198
198
|
{
|
|
199
199
|
"path": "harness-review/SKILL.md",
|
|
200
|
-
"sha256": "
|
|
200
|
+
"sha256": "a445e9b0dacb41942216766bf49d5811c168955567d5ab6860c8e4a4b7ff24c7"
|
|
201
201
|
},
|
|
202
202
|
{
|
|
203
203
|
"path": "harness-run/checklist.md",
|
|
@@ -205,15 +205,15 @@
|
|
|
205
205
|
},
|
|
206
206
|
{
|
|
207
207
|
"path": "harness-run/protocols.md",
|
|
208
|
-
"sha256": "
|
|
208
|
+
"sha256": "0f68e5cf0be33203d6c1399147e6a6e46c9b3f21493644778a30cd929dbf60ab"
|
|
209
209
|
},
|
|
210
210
|
{
|
|
211
211
|
"path": "harness-run/reference.md",
|
|
212
|
-
"sha256": "
|
|
212
|
+
"sha256": "0028be7ce9ccfe46c287cdaefa6545697f4012760d41b0e0d40a32c4b5cec9ac"
|
|
213
213
|
},
|
|
214
214
|
{
|
|
215
215
|
"path": "harness-run/SKILL.md",
|
|
216
|
-
"sha256": "
|
|
216
|
+
"sha256": "177462dc33d595d12450d461d057f8a146efe84697d2625d58b6cc947dff6142"
|
|
217
217
|
},
|
|
218
218
|
{
|
|
219
219
|
"path": "harness-submit/checklist.md",
|
|
@@ -225,7 +225,7 @@
|
|
|
225
225
|
},
|
|
226
226
|
{
|
|
227
227
|
"path": "harness-submit/SKILL.md",
|
|
228
|
-
"sha256": "
|
|
228
|
+
"sha256": "2d15400f3ae5408acc716ce693a8ae30c672c8beac6a7a01f7de6643ce2d5ef9"
|
|
229
229
|
},
|
|
230
230
|
{
|
|
231
231
|
"path": "harness-sync/reference.md",
|
|
@@ -233,7 +233,7 @@
|
|
|
233
233
|
},
|
|
234
234
|
{
|
|
235
235
|
"path": "harness-sync/SKILL.md",
|
|
236
|
-
"sha256": "
|
|
236
|
+
"sha256": "936f74582d488a03f0d6849e5a1450e3f58bb51bab5dee396d79e459a4040f95"
|
|
237
237
|
},
|
|
238
238
|
{
|
|
239
239
|
"path": "harness-test/checklist.md",
|
|
@@ -257,7 +257,7 @@
|
|
|
257
257
|
},
|
|
258
258
|
{
|
|
259
259
|
"path": "harness-test/SKILL.md",
|
|
260
|
-
"sha256": "
|
|
260
|
+
"sha256": "adc8d2245953eb150159cf15b755a56ec4c93d990ec2fdadb33bcf2e896362bf"
|
|
261
261
|
},
|
|
262
262
|
{
|
|
263
263
|
"path": "protocols/archive-report-protocol.md",
|
|
@@ -329,7 +329,7 @@
|
|
|
329
329
|
},
|
|
330
330
|
{
|
|
331
331
|
"path": "scripts/harness_archive.py",
|
|
332
|
-
"sha256": "
|
|
332
|
+
"sha256": "7af276128925b6bf10323dbe477e6f98b81e899221c923138ddd03ec8106cd8e"
|
|
333
333
|
},
|
|
334
334
|
{
|
|
335
335
|
"path": "scripts/harness_change.py",
|
|
@@ -369,11 +369,11 @@
|
|
|
369
369
|
},
|
|
370
370
|
{
|
|
371
371
|
"path": "scripts/harness_fixback.py",
|
|
372
|
-
"sha256": "
|
|
372
|
+
"sha256": "56a961a8654dd78d31b5e6f875fd15651419266ea9cab7b81fe0106f2d8a2420"
|
|
373
373
|
},
|
|
374
374
|
{
|
|
375
375
|
"path": "scripts/harness_gate.py",
|
|
376
|
-
"sha256": "
|
|
376
|
+
"sha256": "aa8527c794ac974e2c2a6d55f72021c67e80f56e919b670f02c268d6048f5908"
|
|
377
377
|
},
|
|
378
378
|
{
|
|
379
379
|
"path": "scripts/harness_headless.py",
|
|
@@ -381,7 +381,7 @@
|
|
|
381
381
|
},
|
|
382
382
|
{
|
|
383
383
|
"path": "scripts/harness_integration.py",
|
|
384
|
-
"sha256": "
|
|
384
|
+
"sha256": "6835fa1ae86d15c4777f1a0453f2ff18091530f34b142a8194d71127d308fd8e"
|
|
385
385
|
},
|
|
386
386
|
{
|
|
387
387
|
"path": "scripts/harness_knowledge_candidates.py",
|
|
@@ -437,11 +437,11 @@
|
|
|
437
437
|
},
|
|
438
438
|
{
|
|
439
439
|
"path": "scripts/harness_review.py",
|
|
440
|
-
"sha256": "
|
|
440
|
+
"sha256": "3e14be966ffc0f2e0261f471390d1ed308f2272e1df7e0cb30d7c9ba5e33f858"
|
|
441
441
|
},
|
|
442
442
|
{
|
|
443
443
|
"path": "scripts/harness_runtime.py",
|
|
444
|
-
"sha256": "
|
|
444
|
+
"sha256": "31ada912c61d73d4349781dd0ccd2d656be9bdb0d28cb95c35e76498836a7c02"
|
|
445
445
|
},
|
|
446
446
|
{
|
|
447
447
|
"path": "scripts/harness_service.py",
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"schema_version": 2,
|
|
3
3
|
"profile": "general",
|
|
4
4
|
"adapter": "codebuddy",
|
|
5
|
-
"bundle_version": "0.2.
|
|
5
|
+
"bundle_version": "0.2.73",
|
|
6
6
|
"requires": {
|
|
7
|
-
"minimumCliVersion": "0.2.
|
|
7
|
+
"minimumCliVersion": "0.2.90",
|
|
8
8
|
"capabilities": [
|
|
9
9
|
"sync@2",
|
|
10
10
|
"rules-sync@1",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"files": [
|
|
26
26
|
{
|
|
27
27
|
"path": ".harness-build.json",
|
|
28
|
-
"sha256": "
|
|
28
|
+
"sha256": "2d636df20eaa57762efebbabea4cfddfb548ff3bf2b82f4ddfd896f5722835ae"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
"path": "agents/harness-evaluator.md",
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
},
|
|
98
98
|
{
|
|
99
99
|
"path": "harness-archive/SKILL.md",
|
|
100
|
-
"sha256": "
|
|
100
|
+
"sha256": "24d7ca0e9650702928859cd3441d6573fbaa202b6ad81e402dc4c87d814267cf"
|
|
101
101
|
},
|
|
102
102
|
{
|
|
103
103
|
"path": "harness-archive/templates/summary-data-template.json",
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
115
|
"path": "harness-codebase-map/SKILL.md",
|
|
116
|
-
"sha256": "
|
|
116
|
+
"sha256": "bf51af0cadfcb7e9d2571027fc0028c5bb80edff7610b5eca0a48195bdf49faf"
|
|
117
117
|
},
|
|
118
118
|
{
|
|
119
119
|
"path": "harness-codebase-map/templates/ARCHITECTURE.md",
|
|
@@ -153,11 +153,11 @@
|
|
|
153
153
|
},
|
|
154
154
|
{
|
|
155
155
|
"path": "harness-knowledge-ingest/SKILL.md",
|
|
156
|
-
"sha256": "
|
|
156
|
+
"sha256": "a18c82a102f7522fc63250ac2383dcd078cd7dfe80d68e79084e47b7cf918d32"
|
|
157
157
|
},
|
|
158
158
|
{
|
|
159
159
|
"path": "harness-knowledge-query/SKILL.md",
|
|
160
|
-
"sha256": "
|
|
160
|
+
"sha256": "939ff6a89b540f29e6616b8d9acf3fc4e42c5e2173f1ef4c34c2fd3b009d7a3a"
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
163
|
"path": "harness-plan/checklist.md",
|
|
@@ -173,15 +173,15 @@
|
|
|
173
173
|
},
|
|
174
174
|
{
|
|
175
175
|
"path": "harness-plan/SKILL.md",
|
|
176
|
-
"sha256": "
|
|
176
|
+
"sha256": "46bd34bc2fae3f87b91e09b91e8374c2f214600452c72c8b143df4ec3ede763f"
|
|
177
177
|
},
|
|
178
178
|
{
|
|
179
179
|
"path": "harness-pull/SKILL.md",
|
|
180
|
-
"sha256": "
|
|
180
|
+
"sha256": "481f1f0217474c6ed8e3202019f115f7f41f7b38a1a41e3eea80a2acef02864b"
|
|
181
181
|
},
|
|
182
182
|
{
|
|
183
183
|
"path": "harness-push/SKILL.md",
|
|
184
|
-
"sha256": "
|
|
184
|
+
"sha256": "f555b8df475c400c48bd448d849b2af6ab25440f81e336a6659ce7bca49bdfba"
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
"path": "harness-review/checklist.md",
|
|
@@ -197,7 +197,7 @@
|
|
|
197
197
|
},
|
|
198
198
|
{
|
|
199
199
|
"path": "harness-review/SKILL.md",
|
|
200
|
-
"sha256": "
|
|
200
|
+
"sha256": "90f2edc1c3da4ccd626cb55ad96b852b1b079017adf1cc4816a4fcba31846e37"
|
|
201
201
|
},
|
|
202
202
|
{
|
|
203
203
|
"path": "harness-run/checklist.md",
|
|
@@ -205,15 +205,15 @@
|
|
|
205
205
|
},
|
|
206
206
|
{
|
|
207
207
|
"path": "harness-run/protocols.md",
|
|
208
|
-
"sha256": "
|
|
208
|
+
"sha256": "0f68e5cf0be33203d6c1399147e6a6e46c9b3f21493644778a30cd929dbf60ab"
|
|
209
209
|
},
|
|
210
210
|
{
|
|
211
211
|
"path": "harness-run/reference.md",
|
|
212
|
-
"sha256": "
|
|
212
|
+
"sha256": "0028be7ce9ccfe46c287cdaefa6545697f4012760d41b0e0d40a32c4b5cec9ac"
|
|
213
213
|
},
|
|
214
214
|
{
|
|
215
215
|
"path": "harness-run/SKILL.md",
|
|
216
|
-
"sha256": "
|
|
216
|
+
"sha256": "800cf316b1181cbacd82a2dab8c6541b450e878215bc5a245e34017c409d69a9"
|
|
217
217
|
},
|
|
218
218
|
{
|
|
219
219
|
"path": "harness-submit/checklist.md",
|
|
@@ -225,7 +225,7 @@
|
|
|
225
225
|
},
|
|
226
226
|
{
|
|
227
227
|
"path": "harness-submit/SKILL.md",
|
|
228
|
-
"sha256": "
|
|
228
|
+
"sha256": "0901b37d54189a1d5eca1e25b5c2234ef951d3f668c4c1a91797a14f73e62f45"
|
|
229
229
|
},
|
|
230
230
|
{
|
|
231
231
|
"path": "harness-sync/reference.md",
|
|
@@ -233,7 +233,7 @@
|
|
|
233
233
|
},
|
|
234
234
|
{
|
|
235
235
|
"path": "harness-sync/SKILL.md",
|
|
236
|
-
"sha256": "
|
|
236
|
+
"sha256": "03d3049e6d242f2d04cd9fb256b2d8a65f3693af3e091703e0d10b77e8d85c9e"
|
|
237
237
|
},
|
|
238
238
|
{
|
|
239
239
|
"path": "harness-test/checklist.md",
|
|
@@ -257,7 +257,7 @@
|
|
|
257
257
|
},
|
|
258
258
|
{
|
|
259
259
|
"path": "harness-test/SKILL.md",
|
|
260
|
-
"sha256": "
|
|
260
|
+
"sha256": "b51d4053213ae340efeaed85514fe88e11a69c8d23ac8da92e5ec30fcb5c90f3"
|
|
261
261
|
},
|
|
262
262
|
{
|
|
263
263
|
"path": "protocols/archive-report-protocol.md",
|
|
@@ -329,7 +329,7 @@
|
|
|
329
329
|
},
|
|
330
330
|
{
|
|
331
331
|
"path": "scripts/harness_archive.py",
|
|
332
|
-
"sha256": "
|
|
332
|
+
"sha256": "7af276128925b6bf10323dbe477e6f98b81e899221c923138ddd03ec8106cd8e"
|
|
333
333
|
},
|
|
334
334
|
{
|
|
335
335
|
"path": "scripts/harness_change.py",
|
|
@@ -369,11 +369,11 @@
|
|
|
369
369
|
},
|
|
370
370
|
{
|
|
371
371
|
"path": "scripts/harness_fixback.py",
|
|
372
|
-
"sha256": "
|
|
372
|
+
"sha256": "56a961a8654dd78d31b5e6f875fd15651419266ea9cab7b81fe0106f2d8a2420"
|
|
373
373
|
},
|
|
374
374
|
{
|
|
375
375
|
"path": "scripts/harness_gate.py",
|
|
376
|
-
"sha256": "
|
|
376
|
+
"sha256": "aa8527c794ac974e2c2a6d55f72021c67e80f56e919b670f02c268d6048f5908"
|
|
377
377
|
},
|
|
378
378
|
{
|
|
379
379
|
"path": "scripts/harness_headless.py",
|
|
@@ -381,7 +381,7 @@
|
|
|
381
381
|
},
|
|
382
382
|
{
|
|
383
383
|
"path": "scripts/harness_integration.py",
|
|
384
|
-
"sha256": "
|
|
384
|
+
"sha256": "6835fa1ae86d15c4777f1a0453f2ff18091530f34b142a8194d71127d308fd8e"
|
|
385
385
|
},
|
|
386
386
|
{
|
|
387
387
|
"path": "scripts/harness_knowledge_candidates.py",
|
|
@@ -437,11 +437,11 @@
|
|
|
437
437
|
},
|
|
438
438
|
{
|
|
439
439
|
"path": "scripts/harness_review.py",
|
|
440
|
-
"sha256": "
|
|
440
|
+
"sha256": "3e14be966ffc0f2e0261f471390d1ed308f2272e1df7e0cb30d7c9ba5e33f858"
|
|
441
441
|
},
|
|
442
442
|
{
|
|
443
443
|
"path": "scripts/harness_runtime.py",
|
|
444
|
-
"sha256": "
|
|
444
|
+
"sha256": "31ada912c61d73d4349781dd0ccd2d656be9bdb0d28cb95c35e76498836a7c02"
|
|
445
445
|
},
|
|
446
446
|
{
|
|
447
447
|
"path": "scripts/harness_service.py",
|