@hunter-harness/workflow-harness 0.4.11 → 0.4.12
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 +1 -1
- package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-execute/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-submit/SKILL.md +2 -2
- package/harness/bundles/general/claude-code/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/scripts/harness_archive.py +18 -11
- package/harness/bundles/general/claude-code/scripts/harness_gate.py +69 -1
- package/harness/bundles/general/claude-code/scripts/harness_ledger.py +27 -3
- package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-execute/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-submit/SKILL.md +2 -2
- package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/scripts/harness_archive.py +18 -11
- package/harness/bundles/general/codebuddy/scripts/harness_gate.py +69 -1
- package/harness/bundles/general/codebuddy/scripts/harness_ledger.py +27 -3
- package/harness/bundles/general/codex/.harness-build.json +1 -1
- package/harness/bundles/general/codex/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-execute/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-submit/SKILL.md +2 -2
- package/harness/bundles/general/codex/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/codex/scripts/harness_archive.py +18 -11
- package/harness/bundles/general/codex/scripts/harness_gate.py +69 -1
- package/harness/bundles/general/codex/scripts/harness_ledger.py +27 -3
- package/harness/bundles/general/cursor/.harness-build.json +1 -1
- package/harness/bundles/general/cursor/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-execute/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-submit/SKILL.md +2 -2
- package/harness/bundles/general/cursor/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/cursor/scripts/harness_archive.py +18 -11
- package/harness/bundles/general/cursor/scripts/harness_gate.py +69 -1
- package/harness/bundles/general/cursor/scripts/harness_ledger.py +27 -3
- package/harness/bundles/general/pi/.harness-build.json +1 -1
- package/harness/bundles/general/pi/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/pi/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/pi/harness-execute/SKILL.md +1 -1
- package/harness/bundles/general/pi/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/general/pi/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/general/pi/harness-plan/SKILL.md +1 -1
- package/harness/bundles/general/pi/harness-pull/SKILL.md +1 -1
- package/harness/bundles/general/pi/harness-push/SKILL.md +1 -1
- package/harness/bundles/general/pi/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/pi/harness-submit/SKILL.md +2 -2
- package/harness/bundles/general/pi/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/pi/scripts/harness_archive.py +18 -11
- package/harness/bundles/general/pi/scripts/harness_gate.py +69 -1
- package/harness/bundles/general/pi/scripts/harness_ledger.py +27 -3
- 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 +1 -1
- package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-execute/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-submit/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/scripts/harness_archive.py +18 -11
- package/harness/bundles/java/claude-code/scripts/harness_gate.py +69 -1
- package/harness/bundles/java/claude-code/scripts/harness_ledger.py +27 -3
- 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 +1 -1
- package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-execute/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-submit/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/scripts/harness_archive.py +18 -11
- package/harness/bundles/java/codebuddy/scripts/harness_gate.py +69 -1
- package/harness/bundles/java/codebuddy/scripts/harness_ledger.py +27 -3
- 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 +1 -1
- package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-execute/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-submit/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/codex/scripts/harness_archive.py +18 -11
- package/harness/bundles/java/codex/scripts/harness_gate.py +69 -1
- package/harness/bundles/java/codex/scripts/harness_ledger.py +27 -3
- 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 +1 -1
- package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-execute/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-submit/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/cursor/scripts/harness_archive.py +18 -11
- package/harness/bundles/java/cursor/scripts/harness_gate.py +69 -1
- package/harness/bundles/java/cursor/scripts/harness_ledger.py +27 -3
- package/harness/bundles/java/pi/.harness-build.json +1 -1
- package/harness/bundles/java/pi/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/pi/harness-archive/SKILL.md +1 -1
- package/harness/bundles/java/pi/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/pi/harness-execute/SKILL.md +1 -1
- package/harness/bundles/java/pi/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/java/pi/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/java/pi/harness-package/SKILL.md +1 -1
- package/harness/bundles/java/pi/harness-plan/SKILL.md +1 -1
- package/harness/bundles/java/pi/harness-pull/SKILL.md +1 -1
- package/harness/bundles/java/pi/harness-push/SKILL.md +1 -1
- package/harness/bundles/java/pi/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/pi/harness-submit/SKILL.md +2 -2
- package/harness/bundles/java/pi/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/pi/scripts/harness_archive.py +18 -11
- package/harness/bundles/java/pi/scripts/harness_gate.py +69 -1
- package/harness/bundles/java/pi/scripts/harness_ledger.py +27 -3
- package/harness/manifests/general/claude-code.json +15 -15
- package/harness/manifests/general/codebuddy.json +15 -15
- package/harness/manifests/general/codex.json +15 -15
- package/harness/manifests/general/cursor.json +15 -15
- package/harness/manifests/general/pi.json +15 -15
- package/harness/manifests/java/claude-code.json +17 -17
- package/harness/manifests/java/codebuddy.json +17 -17
- package/harness/manifests/java/codex.json +17 -17
- package/harness/manifests/java/cursor.json +17 -17
- package/harness/manifests/java/pi.json +17 -17
- package/hunter-workflow-family.json +2 -2
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: harness-knowledge-ingest
|
|
3
3
|
description: 确认归档 ZIP 已上传并由 Hunter Platform 在服务端解包、校验和入库。客户端不再构建或维护本地知识索引。
|
|
4
4
|
---
|
|
5
|
-
<!-- generated by harness_deploy.py; core=
|
|
5
|
+
<!-- generated by harness_deploy.py; core=065c60ddeaf0324b; overlay=java; agent=pi; do not edit -->
|
|
6
6
|
# harness-knowledge-ingest
|
|
7
7
|
|
|
8
8
|
知识 ingest 完全由 Hunter Platform 负责。归档完成时,客户端生成一个确定性 ZIP;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: harness-knowledge-query
|
|
3
3
|
description: 在规划、实现或排查前,通过 hunter-harness CLI 查询远端项目知识库。远端不可用时直接报告不可用,不建立本地索引或离线回退。
|
|
4
4
|
---
|
|
5
|
-
<!-- generated by harness_deploy.py; core=
|
|
5
|
+
<!-- generated by harness_deploy.py; core=065c60ddeaf0324b; overlay=java; agent=pi; do not edit -->
|
|
6
6
|
# harness-knowledge-query
|
|
7
7
|
|
|
8
8
|
项目知识以 Hunter Platform 的服务端索引为唯一真源。客户端只提交查询并消费结果:
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: harness-package
|
|
3
3
|
description: 增量模块打包:拉取最新→编译验证→mvn package→汇总 jar/war。仅当用户显式调用 /harness-package 时使用,不得自动触发。
|
|
4
4
|
---
|
|
5
|
-
<!-- generated by harness_deploy.py; core=
|
|
5
|
+
<!-- generated by harness_deploy.py; core=065c60ddeaf0324b; overlay=java; agent=pi; do not edit -->
|
|
6
6
|
# harness-package — 增量模块打包(Java overlay)
|
|
7
7
|
|
|
8
8
|
## Purpose
|
|
@@ -3,7 +3,7 @@ name: harness-plan
|
|
|
3
3
|
description: 将需求转化为设计文档+实施计划+完整测试场景表,必须在编码前完成。仅当用户显式调用 /harness-plan 或明确要求进入
|
|
4
4
|
Harness 规划阶段时使用;不得因用户描述需求就自动触发。
|
|
5
5
|
---
|
|
6
|
-
<!-- generated by harness_deploy.py; core=
|
|
6
|
+
<!-- generated by harness_deploy.py; core=065c60ddeaf0324b; overlay=java; agent=pi; do not edit -->
|
|
7
7
|
# harness-plan — 需求规划
|
|
8
8
|
|
|
9
9
|
## Purpose
|
|
@@ -3,7 +3,7 @@ name: harness-pull
|
|
|
3
3
|
description: 从 Hunter Platform 下拉配置/规则/架构/指令(及显式来源分支的分支文件恢复)。仅当用户显式调用
|
|
4
4
|
/harness-pull 或明确说'从平台拉取/恢复'时使用;不得自动触发。
|
|
5
5
|
---
|
|
6
|
-
<!-- generated by harness_deploy.py; core=
|
|
6
|
+
<!-- generated by harness_deploy.py; core=065c60ddeaf0324b; overlay=java; agent=pi; do not edit -->
|
|
7
7
|
# harness-pull — 从 Hunter Platform 下拉与恢复
|
|
8
8
|
|
|
9
9
|
## Purpose
|
|
@@ -3,7 +3,7 @@ name: harness-push
|
|
|
3
3
|
description: 上传本地配置/规则/架构/指令(及显式归档)到 Hunter Platform。仅当用户显式调用 /harness-push
|
|
4
4
|
或明确说'上传到平台'时使用;不得因存在本地修改就自动触发。
|
|
5
5
|
---
|
|
6
|
-
<!-- generated by harness_deploy.py; core=
|
|
6
|
+
<!-- generated by harness_deploy.py; core=065c60ddeaf0324b; overlay=java; agent=pi; do not edit -->
|
|
7
7
|
# harness-push — 上传到 Hunter Platform
|
|
8
8
|
|
|
9
9
|
## Purpose
|
|
@@ -4,7 +4,7 @@ description: 6维度代码审查(架构/安全/规范/兼容/测试/性能)
|
|
|
4
4
|
.harness/context-index.json)和测试场景表,在隔离上下文运行。仅当用户显式调用 /harness-review 时使用;不得在
|
|
5
5
|
test 结束后自动接续执行。
|
|
6
6
|
---
|
|
7
|
-
<!-- generated by harness_deploy.py; core=
|
|
7
|
+
<!-- generated by harness_deploy.py; core=065c60ddeaf0324b; overlay=java; agent=pi; do not edit -->
|
|
8
8
|
# harness-review — 代码审查
|
|
9
9
|
|
|
10
10
|
## Purpose
|
|
@@ -3,7 +3,7 @@ name: harness-submit
|
|
|
3
3
|
description: 最终提交封装:验证→中文 commit→提交/推送;worktree 模式含 --no-ff 合并回主分支。仅当用户显式调用
|
|
4
4
|
/harness-submit(或 /harness-merge 重入合并段)时使用;用户口头说'提交/commit/push'时必须先确认,不得自动触发。
|
|
5
5
|
---
|
|
6
|
-
<!-- generated by harness_deploy.py; core=
|
|
6
|
+
<!-- generated by harness_deploy.py; core=065c60ddeaf0324b; overlay=java; agent=pi; do not edit -->
|
|
7
7
|
# harness-submit — 最终提交(含 worktree 合并)
|
|
8
8
|
|
|
9
9
|
## Purpose
|
|
@@ -65,7 +65,7 @@ worktree 合并前必须运行 `harness_change.py integration-lock acquire --run
|
|
|
65
65
|
4. **提交方式** — 主目录:blocking user confirmation 三选项(commit+push / 仅本地 / 取消);**worktree:固定仅本地 commit**
|
|
66
66
|
5. **commit-message.txt** ⚠️ — 展示 staged、diff stat、完整中文 message;用户确认
|
|
67
67
|
6. **commit / push** — `git commit -F`;主目录按选项 push(push 前 fetch 检查远端);无 upstream 时允许仅本地 commit。commit 后立即重新运行 `harness_archive.py certify-local`:若验证输入未变化,脚本把候选从提交前身份安全重绑定到最终 commit,不得重跑测试或手工复制账本;**worktree:只 commit,记录 local hash**
|
|
68
|
-
7. **收尾** — `harness_gate.py close --phase submit --status ... --to-phase <实际计划后继>`;通常后继为 Archive,但不得显示“等待 merge”或固定写死。主目录停止并提示真实下一阶段;worktree 才接续下方同一 Submit
|
|
68
|
+
7. **收尾** — `harness_gate.py close --phase submit --status ... --to-phase <实际计划后继>`;通常后继为 Archive,但不得显示“等待 merge”或固定写死。主目录停止并提示真实下一阶段;worktree 才接续下方同一 Submit 内的合并流程。`--json` 的 stdout 只含 JSON;关门摘要横幅在 stderr——管道给 `jq` 时**不要** `2>&1` 合并(stderr 不缓冲会先写,合并后横幅会混进 JSON 流)。
|
|
69
69
|
|
|
70
70
|
详细步骤见 `checklist.md`。
|
|
71
71
|
|
|
@@ -4,7 +4,7 @@ description: Use when the user asks to synchronize, refresh, or validate Harness
|
|
|
4
4
|
metadata, adapters, remote knowledge ownership, instruction entrypoints,
|
|
5
5
|
config origins, or CodeGraph status.
|
|
6
6
|
---
|
|
7
|
-
<!-- generated by harness_deploy.py; core=
|
|
7
|
+
<!-- generated by harness_deploy.py; core=065c60ddeaf0324b; overlay=java; agent=pi; do not edit -->
|
|
8
8
|
# harness-sync
|
|
9
9
|
|
|
10
10
|
## Purpose
|
|
@@ -3010,8 +3010,12 @@ def check_status(
|
|
|
3010
3010
|
if archive_intent == "record-only"
|
|
3011
3011
|
else str(ci_gate.get("code") or "PRODUCT_CANDIDATE_NOT_VERIFIED")
|
|
3012
3012
|
),
|
|
3013
|
-
"message":
|
|
3014
|
-
|
|
3013
|
+
"message": (
|
|
3014
|
+
# A-2:record-only 豁免阻断,但原文透传授权要求会误读成阻断指引
|
|
3015
|
+
"record-only 归档不要求发布授权,本项仅记录:"
|
|
3016
|
+
+ str(ci_gate.get("message") or "product candidate not verified")
|
|
3017
|
+
if archive_intent == "record-only"
|
|
3018
|
+
else str(ci_gate.get("message") or "product candidate not verified")
|
|
3015
3019
|
),
|
|
3016
3020
|
}
|
|
3017
3021
|
if archive_intent == "record-only":
|
|
@@ -3104,15 +3108,18 @@ def check_status(
|
|
|
3104
3108
|
code = str(issue.get("code") or "REPORT_ADEQUACY_FAILED")
|
|
3105
3109
|
if any(item.get("code") == code for item in blockers):
|
|
3106
3110
|
continue
|
|
3107
|
-
|
|
3108
|
-
|
|
3109
|
-
|
|
3110
|
-
|
|
3111
|
-
|
|
3112
|
-
|
|
3113
|
-
|
|
3114
|
-
|
|
3115
|
-
)
|
|
3111
|
+
blocker: dict[str, Any] = {
|
|
3112
|
+
"code": code,
|
|
3113
|
+
"message": adequacy_messages_zh.get(
|
|
3114
|
+
code,
|
|
3115
|
+
str(issue.get("message") or "归档报告不完整"),
|
|
3116
|
+
),
|
|
3117
|
+
}
|
|
3118
|
+
# A-3:出路必须随阻断项下发(对齐 SKILL 二·A 表),不再让使用者翻文档
|
|
3119
|
+
next_action = issue.get("nextAction")
|
|
3120
|
+
if isinstance(next_action, str) and next_action.strip():
|
|
3121
|
+
blocker["recoveryAction"] = next_action.strip()
|
|
3122
|
+
blockers.append(blocker)
|
|
3116
3123
|
for issue in report_adequacy.get("issues") or []:
|
|
3117
3124
|
if not isinstance(issue, dict) or issue.get("severity") != "warning":
|
|
3118
3125
|
continue
|
|
@@ -2085,6 +2085,52 @@ def _terminal_matches_context_session(
|
|
|
2085
2085
|
)
|
|
2086
2086
|
|
|
2087
2087
|
|
|
2088
|
+
def _repair_handoff_missing_lease(
|
|
2089
|
+
project: Path,
|
|
2090
|
+
change_id: str,
|
|
2091
|
+
args: argparse.Namespace,
|
|
2092
|
+
*,
|
|
2093
|
+
status: str,
|
|
2094
|
+
handoff: dict[str, Any],
|
|
2095
|
+
) -> dict[str, Any] | None:
|
|
2096
|
+
"""S-1:交接因 context 租约缺失失败时自愈一次。
|
|
2097
|
+
|
|
2098
|
+
阶段租约仍持有但 context 租约已被消费/缺失时,close_transition 只能报
|
|
2099
|
+
CONTEXT_LEASE_REQUIRED——原样重跑永远撞同一错误(2026-08-31 submit 实测,
|
|
2100
|
+
recoveryAction 声称“会重试”但重试无自愈能力)。这里补齐缺口:
|
|
2101
|
+
prepare_context 幂等重建本阶段 context 租约后重试一次交接,与
|
|
2102
|
+
`harness_context.py handoff` 命令同源(同 prepare→close 顺序)。
|
|
2103
|
+
"""
|
|
2104
|
+
if handoff.get("code") != "CONTEXT_LEASE_REQUIRED":
|
|
2105
|
+
return None
|
|
2106
|
+
executor = getattr(args, "executor", None)
|
|
2107
|
+
if not executor:
|
|
2108
|
+
view = hctx.context_view(project, change_id)
|
|
2109
|
+
current = view.get("current") if isinstance(view, dict) else None
|
|
2110
|
+
executor = (
|
|
2111
|
+
str(current.get("executor"))
|
|
2112
|
+
if isinstance(current, dict) and current.get("executor")
|
|
2113
|
+
else None
|
|
2114
|
+
)
|
|
2115
|
+
if not executor:
|
|
2116
|
+
return None
|
|
2117
|
+
try:
|
|
2118
|
+
prepared = hctx.prepare_context(
|
|
2119
|
+
project,
|
|
2120
|
+
change=change_id,
|
|
2121
|
+
phase=args.phase,
|
|
2122
|
+
executor=executor,
|
|
2123
|
+
)
|
|
2124
|
+
except Exception:
|
|
2125
|
+
return None
|
|
2126
|
+
if not prepared.get("ok"):
|
|
2127
|
+
return None
|
|
2128
|
+
repaired = _close_context_handoff(project, change_id, args, status=status)
|
|
2129
|
+
if isinstance(repaired, dict):
|
|
2130
|
+
repaired = {**repaired, "leaseRepaired": True}
|
|
2131
|
+
return repaired
|
|
2132
|
+
|
|
2133
|
+
|
|
2088
2134
|
def _close_context_handoff(
|
|
2089
2135
|
project: Path,
|
|
2090
2136
|
change_id: str,
|
|
@@ -3154,6 +3200,14 @@ def _resume_closed_phase(
|
|
|
3154
3200
|
status=close_status,
|
|
3155
3201
|
)
|
|
3156
3202
|
monitor = _sync_after_phase_close(project, change_dir)
|
|
3203
|
+
if isinstance(handoff, dict) and not handoff.get("ok"):
|
|
3204
|
+
# S-1:续跑路径同样的自愈
|
|
3205
|
+
repaired = _repair_handoff_missing_lease(
|
|
3206
|
+
project, change_id, args,
|
|
3207
|
+
status=close_status, handoff=handoff,
|
|
3208
|
+
)
|
|
3209
|
+
if repaired is not None:
|
|
3210
|
+
handoff = repaired
|
|
3157
3211
|
if isinstance(handoff, dict) and not handoff.get("ok"):
|
|
3158
3212
|
return emit_error(
|
|
3159
3213
|
"PHASE_HANDOFF_PENDING",
|
|
@@ -3737,6 +3791,15 @@ def cmd_close(args: argparse.Namespace) -> int:
|
|
|
3737
3791
|
status=close_status,
|
|
3738
3792
|
)
|
|
3739
3793
|
platform_monitor = _sync_after_phase_close(project, change_dir)
|
|
3794
|
+
if isinstance(context_handoff, dict) and not context_handoff.get("ok"):
|
|
3795
|
+
# S-1:context 租约缺失时自愈一次(prepare 幂等重建 + 重试交接),
|
|
3796
|
+
# 修复前“原样重跑”永远撞同一个 CONTEXT_LEASE_REQUIRED
|
|
3797
|
+
repaired = _repair_handoff_missing_lease(
|
|
3798
|
+
project, str(resolved["changeId"]), args,
|
|
3799
|
+
status=close_status, handoff=context_handoff,
|
|
3800
|
+
)
|
|
3801
|
+
if repaired is not None:
|
|
3802
|
+
context_handoff = repaired
|
|
3740
3803
|
if isinstance(context_handoff, dict) and not context_handoff.get("ok"):
|
|
3741
3804
|
record_gate_blocked(
|
|
3742
3805
|
change_dir,
|
|
@@ -3759,7 +3822,12 @@ def cmd_close(args: argparse.Namespace) -> int:
|
|
|
3759
3822
|
"platformMonitor": platform_monitor,
|
|
3760
3823
|
"recoveryAction": (
|
|
3761
3824
|
"租约仍持有,无需重新 claim——原样重跑同一 close 命令即可幂等续跑"
|
|
3762
|
-
"(phase.end 已落会跳过,handoff
|
|
3825
|
+
"(phase.end 已落会跳过,handoff 会重试;context 租约缺失时会自动"
|
|
3826
|
+
"补建)。仍失败时用一条命令补齐交接:"
|
|
3827
|
+
"harness_context.py handoff --project . "
|
|
3828
|
+
f"--change {resolved['changeId']} --to-phase "
|
|
3829
|
+
f"{getattr(args, 'to_phase', None) or '<后继阶段>'} "
|
|
3830
|
+
"--executor <tool> --json"
|
|
3763
3831
|
),
|
|
3764
3832
|
},
|
|
3765
3833
|
)
|
|
@@ -2565,6 +2565,20 @@ def cmd_can_reuse(args: argparse.Namespace) -> int:
|
|
|
2565
2565
|
return 0
|
|
2566
2566
|
|
|
2567
2567
|
|
|
2568
|
+
def _profile_input_missing_warning(
|
|
2569
|
+
verification: str, target: Any, profile_input: str | None
|
|
2570
|
+
) -> str | None:
|
|
2571
|
+
"""S-4:profile 声明了 target 却没带 --profile-input 时提前预警。"""
|
|
2572
|
+
if profile_input or not isinstance(target, dict):
|
|
2573
|
+
return None
|
|
2574
|
+
return (
|
|
2575
|
+
"PROFILE_INPUT_MISSING: 未传 --profile-input,本条记录缺少 profile 推导的"
|
|
2576
|
+
" scope/coverage/inputsHash 身份字段,can-reuse 将无法复用。建议重跑:"
|
|
2577
|
+
f"record --verification {verification} --profile-input <key> --project . "
|
|
2578
|
+
"(key 见 build-profile.json verificationInputs)"
|
|
2579
|
+
)
|
|
2580
|
+
|
|
2581
|
+
|
|
2568
2582
|
def cmd_record(args: argparse.Namespace) -> int:
|
|
2569
2583
|
as_json = bool(args.json)
|
|
2570
2584
|
verbose = bool(getattr(args, "verbose", False))
|
|
@@ -2612,6 +2626,11 @@ def cmd_record(args: argparse.Namespace) -> int:
|
|
|
2612
2626
|
"verificationGraph.targets",
|
|
2613
2627
|
as_json=as_json,
|
|
2614
2628
|
)
|
|
2629
|
+
# S-4:profile 声明了 target 却没带 --profile-input,条目缺身份字段,
|
|
2630
|
+
# can-reuse 事后才报 MISSING_FIELDS——只能重跑一遍(2026-08-31 实测)。
|
|
2631
|
+
profile_input_missing_warn = _profile_input_missing_warning(
|
|
2632
|
+
verification, target, profile_input
|
|
2633
|
+
)
|
|
2615
2634
|
if profile_input:
|
|
2616
2635
|
resolved_files, err = expand_profile_input_files(project_root, profile_input)
|
|
2617
2636
|
if err:
|
|
@@ -3068,9 +3087,14 @@ def cmd_record(args: argparse.Namespace) -> int:
|
|
|
3068
3087
|
zero_warn = _zero_tests_with_selector_warning(
|
|
3069
3088
|
str(args.command), args.evidence, project_root
|
|
3070
3089
|
)
|
|
3071
|
-
|
|
3072
|
-
|
|
3073
|
-
|
|
3090
|
+
record_warnings = [
|
|
3091
|
+
warning for warning in (zero_warn, profile_input_missing_warn)
|
|
3092
|
+
if warning is not None
|
|
3093
|
+
]
|
|
3094
|
+
if record_warnings:
|
|
3095
|
+
payload["warnings"] = record_warnings
|
|
3096
|
+
for warning in record_warnings:
|
|
3097
|
+
print(f"[harness-ledger] WARNING {warning}", file=sys.stderr)
|
|
3074
3098
|
emit_compact_or_verbose(
|
|
3075
3099
|
payload, as_json=as_json, verbose=verbose,
|
|
3076
3100
|
compact_fn=_compact_record_payload,
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"files": [
|
|
26
26
|
{
|
|
27
27
|
"path": ".harness-build.json",
|
|
28
|
-
"sha256": "
|
|
28
|
+
"sha256": "75eb17eacc8e61e6acd5b4427fa689e7086500edef11c4b658c1a550c7de7b0c"
|
|
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": "d8ec2b3996c6598156ce9c4aa46e02d761d584412e758af2e381555506fd7a9c"
|
|
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": "5dfbefe5497e4e0e7f52fe4fdb90ecb645dd9499a13e59e33a774d868e8938ad"
|
|
117
117
|
},
|
|
118
118
|
{
|
|
119
119
|
"path": "harness-codebase-map/templates/ARCHITECTURE.md",
|
|
@@ -169,7 +169,7 @@
|
|
|
169
169
|
},
|
|
170
170
|
{
|
|
171
171
|
"path": "harness-execute/SKILL.md",
|
|
172
|
-
"sha256": "
|
|
172
|
+
"sha256": "9a0291c31d5617749aa1b8b3900a546ed4647be9b6dad0aafd41591440920dc3"
|
|
173
173
|
},
|
|
174
174
|
{
|
|
175
175
|
"path": "harness-execute/testing-checklist.md",
|
|
@@ -189,11 +189,11 @@
|
|
|
189
189
|
},
|
|
190
190
|
{
|
|
191
191
|
"path": "harness-knowledge-ingest/SKILL.md",
|
|
192
|
-
"sha256": "
|
|
192
|
+
"sha256": "df6134843154c9684c07f13fbc3611c115b710d69ce078408aa48da6d9e99b5b"
|
|
193
193
|
},
|
|
194
194
|
{
|
|
195
195
|
"path": "harness-knowledge-query/SKILL.md",
|
|
196
|
-
"sha256": "
|
|
196
|
+
"sha256": "926fb8eaca8b5834ba174abb5366a30112f02ca58e1832a670c93f8fa413a9bf"
|
|
197
197
|
},
|
|
198
198
|
{
|
|
199
199
|
"path": "harness-plan/checklist.md",
|
|
@@ -209,15 +209,15 @@
|
|
|
209
209
|
},
|
|
210
210
|
{
|
|
211
211
|
"path": "harness-plan/SKILL.md",
|
|
212
|
-
"sha256": "
|
|
212
|
+
"sha256": "085385a73653424e6465405a4f7e7a2bcbf92fc072a0f335b6801f9762b0ae91"
|
|
213
213
|
},
|
|
214
214
|
{
|
|
215
215
|
"path": "harness-pull/SKILL.md",
|
|
216
|
-
"sha256": "
|
|
216
|
+
"sha256": "bdda9b7a2c2a6dcdbbd702d8ef4c510d1973197b00c0c0e9781d1f7e8759d937"
|
|
217
217
|
},
|
|
218
218
|
{
|
|
219
219
|
"path": "harness-push/SKILL.md",
|
|
220
|
-
"sha256": "
|
|
220
|
+
"sha256": "63d1c8f21351f43e129a20b0a9754ef1337eefabe6a139b81b07d297197a7c23"
|
|
221
221
|
},
|
|
222
222
|
{
|
|
223
223
|
"path": "harness-review/checklist.md",
|
|
@@ -233,7 +233,7 @@
|
|
|
233
233
|
},
|
|
234
234
|
{
|
|
235
235
|
"path": "harness-review/SKILL.md",
|
|
236
|
-
"sha256": "
|
|
236
|
+
"sha256": "38ca3ab56809dc204da3e0bea57a74018e8f7eafe727048435b05249229419c8"
|
|
237
237
|
},
|
|
238
238
|
{
|
|
239
239
|
"path": "harness-submit/checklist.md",
|
|
@@ -245,7 +245,7 @@
|
|
|
245
245
|
},
|
|
246
246
|
{
|
|
247
247
|
"path": "harness-submit/SKILL.md",
|
|
248
|
-
"sha256": "
|
|
248
|
+
"sha256": "342e5aa1107899249303e9a4585707539d3b32a73ab7aa86a7b2b07213cc7be3"
|
|
249
249
|
},
|
|
250
250
|
{
|
|
251
251
|
"path": "harness-sync/reference.md",
|
|
@@ -253,7 +253,7 @@
|
|
|
253
253
|
},
|
|
254
254
|
{
|
|
255
255
|
"path": "harness-sync/SKILL.md",
|
|
256
|
-
"sha256": "
|
|
256
|
+
"sha256": "aa98d7a3261f19ace179c3b5a687922cdd3e5b796288790918dcd4f730a86a02"
|
|
257
257
|
},
|
|
258
258
|
{
|
|
259
259
|
"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": "ae67346ff61dfc980d30a42ec85e038e23c577f8c9cf54ab8cf0a6d8c950e623"
|
|
333
333
|
},
|
|
334
334
|
{
|
|
335
335
|
"path": "scripts/harness_change.py",
|
|
@@ -373,7 +373,7 @@
|
|
|
373
373
|
},
|
|
374
374
|
{
|
|
375
375
|
"path": "scripts/harness_gate.py",
|
|
376
|
-
"sha256": "
|
|
376
|
+
"sha256": "8938d4dcc9bc52afdc445f31471ed458d5c49598185a230ccbfa0c690c2a2d67"
|
|
377
377
|
},
|
|
378
378
|
{
|
|
379
379
|
"path": "scripts/harness_headless.py",
|
|
@@ -389,7 +389,7 @@
|
|
|
389
389
|
},
|
|
390
390
|
{
|
|
391
391
|
"path": "scripts/harness_ledger.py",
|
|
392
|
-
"sha256": "
|
|
392
|
+
"sha256": "56334c4da39825e88d382dcba68dd0dca5b45849c1a2214e006a14ccf7540149"
|
|
393
393
|
},
|
|
394
394
|
{
|
|
395
395
|
"path": "scripts/harness_migration_head.py",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"files": [
|
|
26
26
|
{
|
|
27
27
|
"path": ".harness-build.json",
|
|
28
|
-
"sha256": "
|
|
28
|
+
"sha256": "7bcaee5e9db99a90cf05d1f268d45f825b67bcc988eb3052543dad7595febebf"
|
|
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": "7b1ba5748520e3e1f599c6da23903d9d3d2e47a070e67b9aa160ad35cfdc2c7d"
|
|
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": "3d7a7d658f2f4ba387d2c189209b55d43c5fda04c8501c2c175d6f20c36bdc26"
|
|
117
117
|
},
|
|
118
118
|
{
|
|
119
119
|
"path": "harness-codebase-map/templates/ARCHITECTURE.md",
|
|
@@ -169,7 +169,7 @@
|
|
|
169
169
|
},
|
|
170
170
|
{
|
|
171
171
|
"path": "harness-execute/SKILL.md",
|
|
172
|
-
"sha256": "
|
|
172
|
+
"sha256": "11be6d4c3d2189cb6c596be7a764c12ab8b88cff9d9cc56974f195cd4eec8c41"
|
|
173
173
|
},
|
|
174
174
|
{
|
|
175
175
|
"path": "harness-execute/testing-checklist.md",
|
|
@@ -189,11 +189,11 @@
|
|
|
189
189
|
},
|
|
190
190
|
{
|
|
191
191
|
"path": "harness-knowledge-ingest/SKILL.md",
|
|
192
|
-
"sha256": "
|
|
192
|
+
"sha256": "ae9f55e14d1ca0d49c10e557a18b8262f9e3cce6f7a88382bc4ec916af7f4d38"
|
|
193
193
|
},
|
|
194
194
|
{
|
|
195
195
|
"path": "harness-knowledge-query/SKILL.md",
|
|
196
|
-
"sha256": "
|
|
196
|
+
"sha256": "2c9610659e859747d371aa829c3aac8b65d9ec900706e708bb55498aefaebbf2"
|
|
197
197
|
},
|
|
198
198
|
{
|
|
199
199
|
"path": "harness-plan/checklist.md",
|
|
@@ -209,15 +209,15 @@
|
|
|
209
209
|
},
|
|
210
210
|
{
|
|
211
211
|
"path": "harness-plan/SKILL.md",
|
|
212
|
-
"sha256": "
|
|
212
|
+
"sha256": "26d5d6cdb37d18d907c3e192402d30427d6e8b0d8f77a2f2979bb525b0e8e19e"
|
|
213
213
|
},
|
|
214
214
|
{
|
|
215
215
|
"path": "harness-pull/SKILL.md",
|
|
216
|
-
"sha256": "
|
|
216
|
+
"sha256": "d001f8cf75fbf6c89135512342809bd334635843755181ccc4ee68cb8eb04dc7"
|
|
217
217
|
},
|
|
218
218
|
{
|
|
219
219
|
"path": "harness-push/SKILL.md",
|
|
220
|
-
"sha256": "
|
|
220
|
+
"sha256": "f2b787baabf6d08a0102fabd4effd347256b3948a616e090974a76231025254b"
|
|
221
221
|
},
|
|
222
222
|
{
|
|
223
223
|
"path": "harness-review/checklist.md",
|
|
@@ -233,7 +233,7 @@
|
|
|
233
233
|
},
|
|
234
234
|
{
|
|
235
235
|
"path": "harness-review/SKILL.md",
|
|
236
|
-
"sha256": "
|
|
236
|
+
"sha256": "a5ffe90935b098de14e4e29ab63c16b5c6b7286ea6f9801d1c294b3e1fdb6993"
|
|
237
237
|
},
|
|
238
238
|
{
|
|
239
239
|
"path": "harness-submit/checklist.md",
|
|
@@ -245,7 +245,7 @@
|
|
|
245
245
|
},
|
|
246
246
|
{
|
|
247
247
|
"path": "harness-submit/SKILL.md",
|
|
248
|
-
"sha256": "
|
|
248
|
+
"sha256": "cd4c2da17b6cb6a19127b7835d2ab644938082de0a6f01562ca61f040445a075"
|
|
249
249
|
},
|
|
250
250
|
{
|
|
251
251
|
"path": "harness-sync/reference.md",
|
|
@@ -253,7 +253,7 @@
|
|
|
253
253
|
},
|
|
254
254
|
{
|
|
255
255
|
"path": "harness-sync/SKILL.md",
|
|
256
|
-
"sha256": "
|
|
256
|
+
"sha256": "6f7250025bb28530a2d844502cb3ac9e0f97bad15c676269715d37ced31436cf"
|
|
257
257
|
},
|
|
258
258
|
{
|
|
259
259
|
"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": "ae67346ff61dfc980d30a42ec85e038e23c577f8c9cf54ab8cf0a6d8c950e623"
|
|
333
333
|
},
|
|
334
334
|
{
|
|
335
335
|
"path": "scripts/harness_change.py",
|
|
@@ -373,7 +373,7 @@
|
|
|
373
373
|
},
|
|
374
374
|
{
|
|
375
375
|
"path": "scripts/harness_gate.py",
|
|
376
|
-
"sha256": "
|
|
376
|
+
"sha256": "8938d4dcc9bc52afdc445f31471ed458d5c49598185a230ccbfa0c690c2a2d67"
|
|
377
377
|
},
|
|
378
378
|
{
|
|
379
379
|
"path": "scripts/harness_headless.py",
|
|
@@ -389,7 +389,7 @@
|
|
|
389
389
|
},
|
|
390
390
|
{
|
|
391
391
|
"path": "scripts/harness_ledger.py",
|
|
392
|
-
"sha256": "
|
|
392
|
+
"sha256": "56334c4da39825e88d382dcba68dd0dca5b45849c1a2214e006a14ccf7540149"
|
|
393
393
|
},
|
|
394
394
|
{
|
|
395
395
|
"path": "scripts/harness_migration_head.py",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"files": [
|
|
26
26
|
{
|
|
27
27
|
"path": ".harness-build.json",
|
|
28
|
-
"sha256": "
|
|
28
|
+
"sha256": "9c884374087d19dfc7cadad6765a1bdb4a93b0db115d0c771b16e7e11bb76803"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
"path": "CONTEXT.md",
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
},
|
|
86
86
|
{
|
|
87
87
|
"path": "harness-archive/SKILL.md",
|
|
88
|
-
"sha256": "
|
|
88
|
+
"sha256": "12a469afa62bef15e5825578e5e1f7e350ee0c3e86db5b436243261bb6977576"
|
|
89
89
|
},
|
|
90
90
|
{
|
|
91
91
|
"path": "harness-archive/templates/summary-data-template.json",
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
},
|
|
102
102
|
{
|
|
103
103
|
"path": "harness-codebase-map/SKILL.md",
|
|
104
|
-
"sha256": "
|
|
104
|
+
"sha256": "396eaf050927c1d20c6bf2da3341154f746f0577b88173e298e2b2b178e5c705"
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
107
|
"path": "harness-codebase-map/templates/ARCHITECTURE.md",
|
|
@@ -157,7 +157,7 @@
|
|
|
157
157
|
},
|
|
158
158
|
{
|
|
159
159
|
"path": "harness-execute/SKILL.md",
|
|
160
|
-
"sha256": "
|
|
160
|
+
"sha256": "d336878a72a2d6d7390ea86f300b47f6ad3de4fa555c7953ec49bcb19b4ff97d"
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
163
|
"path": "harness-execute/testing-checklist.md",
|
|
@@ -177,11 +177,11 @@
|
|
|
177
177
|
},
|
|
178
178
|
{
|
|
179
179
|
"path": "harness-knowledge-ingest/SKILL.md",
|
|
180
|
-
"sha256": "
|
|
180
|
+
"sha256": "086bb481f9e841925b02385735d3bc6dcce1ced86ab893113b3f1bf290d9c763"
|
|
181
181
|
},
|
|
182
182
|
{
|
|
183
183
|
"path": "harness-knowledge-query/SKILL.md",
|
|
184
|
-
"sha256": "
|
|
184
|
+
"sha256": "e6b123b7bc836745cdd0d065bdaef52f55bdc5d03879209d85a697a1fa49f12f"
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
"path": "harness-plan/checklist.md",
|
|
@@ -197,15 +197,15 @@
|
|
|
197
197
|
},
|
|
198
198
|
{
|
|
199
199
|
"path": "harness-plan/SKILL.md",
|
|
200
|
-
"sha256": "
|
|
200
|
+
"sha256": "7a3a2f896126887a7e96e67c499ff8f5717283f4aa7a8aeb34823ce99690726f"
|
|
201
201
|
},
|
|
202
202
|
{
|
|
203
203
|
"path": "harness-pull/SKILL.md",
|
|
204
|
-
"sha256": "
|
|
204
|
+
"sha256": "2f83aa5a9ebfd19c365fa8f7242e160e62c0d77b09d77013141a1db39d2fd7b7"
|
|
205
205
|
},
|
|
206
206
|
{
|
|
207
207
|
"path": "harness-push/SKILL.md",
|
|
208
|
-
"sha256": "
|
|
208
|
+
"sha256": "e12d38c37ea1d2b0a8cfeba230decd7c51f8225592e4dc91d6f7a2fbe3b1d3cd"
|
|
209
209
|
},
|
|
210
210
|
{
|
|
211
211
|
"path": "harness-review/checklist.md",
|
|
@@ -221,7 +221,7 @@
|
|
|
221
221
|
},
|
|
222
222
|
{
|
|
223
223
|
"path": "harness-review/SKILL.md",
|
|
224
|
-
"sha256": "
|
|
224
|
+
"sha256": "3680a249b56696c23491c46329177ce1e9d9a7ed36883fbbdc83bbda2f143a00"
|
|
225
225
|
},
|
|
226
226
|
{
|
|
227
227
|
"path": "harness-submit/checklist.md",
|
|
@@ -233,7 +233,7 @@
|
|
|
233
233
|
},
|
|
234
234
|
{
|
|
235
235
|
"path": "harness-submit/SKILL.md",
|
|
236
|
-
"sha256": "
|
|
236
|
+
"sha256": "fd761fa9840fceed248dc7ae1341f02e124a9f470781112c4c16f4a70de00439"
|
|
237
237
|
},
|
|
238
238
|
{
|
|
239
239
|
"path": "harness-sync/reference.md",
|
|
@@ -241,7 +241,7 @@
|
|
|
241
241
|
},
|
|
242
242
|
{
|
|
243
243
|
"path": "harness-sync/SKILL.md",
|
|
244
|
-
"sha256": "
|
|
244
|
+
"sha256": "a3dda2c22d15092efa888451957bdfdad5fe29f52ce475ccea7eb244539d59d4"
|
|
245
245
|
},
|
|
246
246
|
{
|
|
247
247
|
"path": "protocols/archive-report-protocol.md",
|
|
@@ -317,7 +317,7 @@
|
|
|
317
317
|
},
|
|
318
318
|
{
|
|
319
319
|
"path": "scripts/harness_archive.py",
|
|
320
|
-
"sha256": "
|
|
320
|
+
"sha256": "ae67346ff61dfc980d30a42ec85e038e23c577f8c9cf54ab8cf0a6d8c950e623"
|
|
321
321
|
},
|
|
322
322
|
{
|
|
323
323
|
"path": "scripts/harness_change.py",
|
|
@@ -361,7 +361,7 @@
|
|
|
361
361
|
},
|
|
362
362
|
{
|
|
363
363
|
"path": "scripts/harness_gate.py",
|
|
364
|
-
"sha256": "
|
|
364
|
+
"sha256": "8938d4dcc9bc52afdc445f31471ed458d5c49598185a230ccbfa0c690c2a2d67"
|
|
365
365
|
},
|
|
366
366
|
{
|
|
367
367
|
"path": "scripts/harness_headless.py",
|
|
@@ -377,7 +377,7 @@
|
|
|
377
377
|
},
|
|
378
378
|
{
|
|
379
379
|
"path": "scripts/harness_ledger.py",
|
|
380
|
-
"sha256": "
|
|
380
|
+
"sha256": "56334c4da39825e88d382dcba68dd0dca5b45849c1a2214e006a14ccf7540149"
|
|
381
381
|
},
|
|
382
382
|
{
|
|
383
383
|
"path": "scripts/harness_migration_head.py",
|