@hunter-harness/workflow-harness 0.2.22 → 0.2.24
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/README.md +2 -2
- package/harness/bundles/general/claude-code/agents/harness-evaluator.md +4 -4
- package/harness/bundles/general/claude-code/agents/harness-explorer.md +2 -2
- package/harness/bundles/general/claude-code/agents/harness-reviewer.md +2 -2
- package/harness/bundles/general/claude-code/harness-archive/SKILL.md +12 -3
- package/harness/bundles/general/claude-code/harness-archive/templates/summary-data-template.json +11 -0
- 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 +8 -4
- package/harness/bundles/general/claude-code/harness-plan/checklist.md +13 -17
- package/harness/bundles/general/claude-code/harness-plan/reference.md +24 -34
- package/harness/bundles/general/claude-code/harness-review/SKILL.md +3 -3
- package/harness/bundles/general/claude-code/harness-run/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-run/protocols.md +3 -3
- package/harness/bundles/general/claude-code/harness-submit/SKILL.md +3 -1
- package/harness/bundles/general/claude-code/harness-submit/checklist.md +9 -3
- 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 +574 -12
- package/harness/bundles/general/claude-code/scripts/harness_deploy.py +22 -3
- package/harness/bundles/general/claude-code/scripts/harness_integration.py +126 -14
- package/harness/bundles/general/claude-code/scripts/harness_ledger.py +30 -6
- package/harness/bundles/general/claude-code/scripts/harness_preflight.py +50 -29
- package/harness/bundles/general/claude-code/scripts/harness_profile.py +33 -0
- package/harness/bundles/general/claude-code/scripts/harness_test_guard.py +30 -8
- package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/general/codebuddy/README.md +2 -2
- package/harness/bundles/general/codebuddy/agents/harness-evaluator.md +5 -6
- package/harness/bundles/general/codebuddy/agents/harness-explorer.md +3 -3
- package/harness/bundles/general/codebuddy/agents/harness-reviewer.md +3 -5
- package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +12 -3
- package/harness/bundles/general/codebuddy/harness-archive/templates/summary-data-template.json +11 -0
- 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 +8 -4
- package/harness/bundles/general/codebuddy/harness-plan/checklist.md +13 -17
- package/harness/bundles/general/codebuddy/harness-plan/reference.md +24 -34
- package/harness/bundles/general/codebuddy/harness-review/SKILL.md +3 -3
- package/harness/bundles/general/codebuddy/harness-run/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-run/protocols.md +3 -3
- package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +3 -1
- package/harness/bundles/general/codebuddy/harness-submit/checklist.md +9 -3
- 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 +574 -12
- package/harness/bundles/general/codebuddy/scripts/harness_deploy.py +22 -3
- package/harness/bundles/general/codebuddy/scripts/harness_integration.py +126 -14
- package/harness/bundles/general/codebuddy/scripts/harness_ledger.py +30 -6
- package/harness/bundles/general/codebuddy/scripts/harness_preflight.py +50 -29
- package/harness/bundles/general/codebuddy/scripts/harness_profile.py +33 -0
- package/harness/bundles/general/codebuddy/scripts/harness_test_guard.py +30 -8
- package/harness/bundles/general/codex/.harness-build.json +1 -1
- package/harness/bundles/general/codex/README.md +2 -2
- package/harness/bundles/general/codex/harness-archive/SKILL.md +12 -3
- package/harness/bundles/general/codex/harness-archive/templates/summary-data-template.json +11 -0
- 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 +8 -5
- package/harness/bundles/general/codex/harness-plan/checklist.md +13 -17
- package/harness/bundles/general/codex/harness-plan/reference.md +24 -34
- package/harness/bundles/general/codex/harness-review/SKILL.md +2 -2
- package/harness/bundles/general/codex/harness-run/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-run/protocols.md +3 -3
- package/harness/bundles/general/codex/harness-submit/SKILL.md +3 -1
- package/harness/bundles/general/codex/harness-submit/checklist.md +9 -3
- 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 +574 -12
- package/harness/bundles/general/codex/scripts/harness_deploy.py +22 -3
- package/harness/bundles/general/codex/scripts/harness_integration.py +126 -14
- package/harness/bundles/general/codex/scripts/harness_ledger.py +30 -6
- package/harness/bundles/general/codex/scripts/harness_preflight.py +50 -29
- package/harness/bundles/general/codex/scripts/harness_profile.py +33 -0
- package/harness/bundles/general/codex/scripts/harness_test_guard.py +30 -8
- package/harness/bundles/general/cursor/.harness-build.json +1 -1
- package/harness/bundles/general/cursor/README.md +2 -2
- package/harness/bundles/general/cursor/harness-archive/SKILL.md +12 -3
- package/harness/bundles/general/cursor/harness-archive/templates/summary-data-template.json +11 -0
- 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 +8 -5
- package/harness/bundles/general/cursor/harness-plan/checklist.md +13 -17
- package/harness/bundles/general/cursor/harness-plan/reference.md +24 -34
- package/harness/bundles/general/cursor/harness-review/SKILL.md +2 -2
- package/harness/bundles/general/cursor/harness-run/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-run/protocols.md +3 -3
- package/harness/bundles/general/cursor/harness-submit/SKILL.md +3 -1
- package/harness/bundles/general/cursor/harness-submit/checklist.md +9 -3
- 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 +574 -12
- package/harness/bundles/general/cursor/scripts/harness_deploy.py +22 -3
- package/harness/bundles/general/cursor/scripts/harness_integration.py +126 -14
- package/harness/bundles/general/cursor/scripts/harness_ledger.py +30 -6
- package/harness/bundles/general/cursor/scripts/harness_preflight.py +50 -29
- package/harness/bundles/general/cursor/scripts/harness_profile.py +33 -0
- package/harness/bundles/general/cursor/scripts/harness_test_guard.py +30 -8
- package/harness/bundles/java/claude-code/.harness-build.json +1 -1
- package/harness/bundles/java/claude-code/README.md +2 -2
- package/harness/bundles/java/claude-code/agents/harness-evaluator.md +4 -4
- package/harness/bundles/java/claude-code/agents/harness-explorer.md +2 -2
- package/harness/bundles/java/claude-code/agents/harness-reviewer.md +2 -2
- package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-archive/SKILL.md +12 -3
- package/harness/bundles/java/claude-code/harness-archive/templates/summary-data-template.json +11 -0
- 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 +8 -4
- package/harness/bundles/java/claude-code/harness-plan/checklist.md +13 -17
- package/harness/bundles/java/claude-code/harness-plan/reference.md +24 -34
- package/harness/bundles/java/claude-code/harness-review/SKILL.md +3 -3
- package/harness/bundles/java/claude-code/harness-run/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-run/protocols.md +3 -3
- package/harness/bundles/java/claude-code/harness-submit/SKILL.md +3 -1
- package/harness/bundles/java/claude-code/harness-submit/checklist.md +9 -3
- 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 +574 -12
- package/harness/bundles/java/claude-code/scripts/harness_deploy.py +22 -3
- package/harness/bundles/java/claude-code/scripts/harness_integration.py +126 -14
- package/harness/bundles/java/claude-code/scripts/harness_ledger.py +30 -6
- package/harness/bundles/java/claude-code/scripts/harness_preflight.py +50 -29
- package/harness/bundles/java/claude-code/scripts/harness_profile.py +33 -0
- package/harness/bundles/java/claude-code/scripts/harness_test_guard.py +30 -8
- package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/java/codebuddy/README.md +2 -2
- package/harness/bundles/java/codebuddy/agents/harness-evaluator.md +5 -6
- package/harness/bundles/java/codebuddy/agents/harness-explorer.md +3 -3
- package/harness/bundles/java/codebuddy/agents/harness-reviewer.md +3 -5
- package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +12 -3
- package/harness/bundles/java/codebuddy/harness-archive/templates/summary-data-template.json +11 -0
- 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 +8 -4
- package/harness/bundles/java/codebuddy/harness-plan/checklist.md +13 -17
- package/harness/bundles/java/codebuddy/harness-plan/reference.md +24 -34
- package/harness/bundles/java/codebuddy/harness-review/SKILL.md +3 -3
- package/harness/bundles/java/codebuddy/harness-run/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-run/protocols.md +3 -3
- package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +3 -1
- package/harness/bundles/java/codebuddy/harness-submit/checklist.md +9 -3
- 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 +574 -12
- package/harness/bundles/java/codebuddy/scripts/harness_deploy.py +22 -3
- package/harness/bundles/java/codebuddy/scripts/harness_integration.py +126 -14
- package/harness/bundles/java/codebuddy/scripts/harness_ledger.py +30 -6
- package/harness/bundles/java/codebuddy/scripts/harness_preflight.py +50 -29
- package/harness/bundles/java/codebuddy/scripts/harness_profile.py +33 -0
- package/harness/bundles/java/codebuddy/scripts/harness_test_guard.py +30 -8
- package/harness/bundles/java/codex/.harness-build.json +1 -1
- package/harness/bundles/java/codex/README.md +2 -2
- package/harness/bundles/java/codex/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-archive/SKILL.md +12 -3
- package/harness/bundles/java/codex/harness-archive/templates/summary-data-template.json +11 -0
- 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 +8 -5
- package/harness/bundles/java/codex/harness-plan/checklist.md +13 -17
- package/harness/bundles/java/codex/harness-plan/reference.md +24 -34
- package/harness/bundles/java/codex/harness-review/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-run/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-run/protocols.md +3 -3
- package/harness/bundles/java/codex/harness-submit/SKILL.md +3 -1
- package/harness/bundles/java/codex/harness-submit/checklist.md +9 -3
- 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 +574 -12
- package/harness/bundles/java/codex/scripts/harness_deploy.py +22 -3
- package/harness/bundles/java/codex/scripts/harness_integration.py +126 -14
- package/harness/bundles/java/codex/scripts/harness_ledger.py +30 -6
- package/harness/bundles/java/codex/scripts/harness_preflight.py +50 -29
- package/harness/bundles/java/codex/scripts/harness_profile.py +33 -0
- package/harness/bundles/java/codex/scripts/harness_test_guard.py +30 -8
- package/harness/bundles/java/cursor/.harness-build.json +1 -1
- package/harness/bundles/java/cursor/README.md +2 -2
- package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-archive/SKILL.md +12 -3
- package/harness/bundles/java/cursor/harness-archive/templates/summary-data-template.json +11 -0
- 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 +8 -5
- package/harness/bundles/java/cursor/harness-plan/checklist.md +13 -17
- package/harness/bundles/java/cursor/harness-plan/reference.md +24 -34
- package/harness/bundles/java/cursor/harness-review/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-run/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-run/protocols.md +3 -3
- package/harness/bundles/java/cursor/harness-submit/SKILL.md +3 -1
- package/harness/bundles/java/cursor/harness-submit/checklist.md +9 -3
- 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 +574 -12
- package/harness/bundles/java/cursor/scripts/harness_deploy.py +22 -3
- package/harness/bundles/java/cursor/scripts/harness_integration.py +126 -14
- package/harness/bundles/java/cursor/scripts/harness_ledger.py +30 -6
- package/harness/bundles/java/cursor/scripts/harness_preflight.py +50 -29
- package/harness/bundles/java/cursor/scripts/harness_profile.py +33 -0
- package/harness/bundles/java/cursor/scripts/harness_test_guard.py +30 -8
- package/harness/manifests/general/claude-code.json +28 -28
- package/harness/manifests/general/codebuddy.json +28 -28
- package/harness/manifests/general/codex.json +25 -25
- package/harness/manifests/general/cursor.json +25 -25
- package/harness/manifests/java/claude-code.json +30 -30
- package/harness/manifests/java/codebuddy.json +30 -30
- package/harness/manifests/java/codex.json +27 -27
- package/harness/manifests/java/cursor.json +27 -27
- package/hunter-workflow-family.json +2 -2
- package/package.json +1 -1
|
@@ -260,7 +260,7 @@ harness-skills/
|
|
|
260
260
|
| 阶段 | 强制检查 |
|
|
261
261
|
|------|---------|
|
|
262
262
|
| **plan 阶段 0** | 检查工作区是否有未提交业务代码变更,已有则询问用户处理方式(继续/暂存/回滚/取消),不得假装"编码前规划" |
|
|
263
|
-
| **plan 阶段 3** |
|
|
263
|
+
| **plan 阶段 3** | 默认主会话 CodeGraph/Read inline 探索;仅高复杂度且准备委派固定 agent 时单次预检,失败或无效返回立即 inline,不 retry |
|
|
264
264
|
| **plan 阶段 4/6** | 原生规划协议必须记录风险/复用/替代方案/推荐方案/关键决策,以及任务拆分摘要 |
|
|
265
265
|
| **plan 阶段 5** | 设计文档自审结果必须展示给用户;测试场景表未覆盖维度必须标记为 ⚠️ 缺口,不得全部 ✅ |
|
|
266
266
|
| **run 步骤 0** | 任何代码修改前必须先向 `events.ndjson` 追加 `phase.start`;执行日志由阶段结束事件自动渲染 |
|
|
@@ -401,7 +401,7 @@ powershell.exe -Command "Copy-Item -Path 'harness-skills/harness-*' -Destination
|
|
|
401
401
|
powershell.exe -Command "Copy-Item -Path 'harness-skills/harness-test' -Destination '<目标项目>/.claude/skills/' -Recurse -Force"
|
|
402
402
|
```
|
|
403
403
|
|
|
404
|
-
|
|
404
|
+
Claude Code/CodeBuddy 可选复制 3 个隔离角色:`harness-explorer` 仅高复杂度探索、`harness-evaluator` 仅 `--adversarial`/高风险规划、`harness-reviewer` 仅发布候选/高风险审查。Codex/Cursor 默认使用主会话或宿主临时隔离任务,不安装固定角色,也不执行固定 agent 预检:
|
|
405
405
|
|
|
406
406
|
```powershell
|
|
407
407
|
powershell.exe -Command "Copy-Item -Path 'harness-skills/agents/*.md' -Destination '<目标项目>/.claude/agents/' -Recurse -Force"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: harness-evaluator
|
|
3
|
-
description: "
|
|
3
|
+
description: "高风险/显式 adversarial 计划对抗评审执行者:对设计文档+实施计划+测试场景表做只读隔离评审,返回 VERDICT(APPROVED/REVISE)+结构化问题清单。"
|
|
4
4
|
model: haiku
|
|
5
5
|
effort: medium
|
|
6
6
|
permissionMode: default
|
|
@@ -43,11 +43,11 @@ tools: [Read, Glob, Grep]
|
|
|
43
43
|
- **不阻塞**:评审为参考性,报告不得写"阻塞 submit / 必须修复",应写"建议优先处理 / 仅供参考,由用户决定是否修订"
|
|
44
44
|
- **敏感信息脱敏**:发现计划中明文 token/密码/密钥列入 RED,以 `<TOKEN_REDACTED>` 等占位符引用
|
|
45
45
|
|
|
46
|
-
## ⚠️
|
|
46
|
+
## ⚠️ 同宿主局限(诚实标注)
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
你通常与主会话处于同一宿主或模型家族。本评审的价值来自上下文隔离,**不等同于跨 provider 对抗**——回音壁风险仍在,对结构性盲点保持谦逊:
|
|
49
49
|
- 不确定的问题标 `TODO(不确定)` 而非强行下结论
|
|
50
|
-
-
|
|
50
|
+
- 如发现可能需要跨 provider 二次确认的高风险点,只提示主会话走显式 C2 升级口;你自身不启动外部 CLI
|
|
51
51
|
|
|
52
52
|
## 输出格式
|
|
53
53
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: harness-explorer
|
|
3
|
-
description: "
|
|
3
|
+
description: "高复杂度代码只读研究:harness-codebase-map 情报 + CodeGraph MCP 调用链 + 现有代码阅读。仅在 harness-plan 判定隔离探索有明确收益时委派,default 模式 + tools 白名单确保只读,返回结构化设计概要。"
|
|
4
4
|
model: haiku
|
|
5
5
|
effort: low
|
|
6
6
|
permissionMode: default
|
|
@@ -28,7 +28,7 @@ disallowedTools:
|
|
|
28
28
|
|
|
29
29
|
# harness-explorer — 代码探索 Subagent
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
你是一个专门执行高复杂度代码只读研究的子代理。仅在 harness-plan 判断多个独立模块、陌生大型代码库或并行调查确有隔离收益时委派,使用 default 模式 + tools 白名单确保只读。
|
|
32
32
|
|
|
33
33
|
## 你的职责
|
|
34
34
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: harness-reviewer
|
|
3
|
-
description: "6
|
|
3
|
+
description: "高风险6维度代码审查执行者:对发布候选或高风险 git diff 进行架构/安全/规范/兼容/测试/性能隔离审查,对照项目规则和测试场景表,返回分级报告(RED/YELLOW/OK)。"
|
|
4
4
|
model: sonnet
|
|
5
5
|
effort: high
|
|
6
6
|
permissionMode: default
|
|
@@ -28,7 +28,7 @@ disallowedTools:
|
|
|
28
28
|
|
|
29
29
|
# harness-reviewer — 6维度代码审查 Subagent
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
你是一个专门执行发布候选或高风险代码审查的子代理。由 harness-review 在风险门槛命中且宿主支持固定 agent 时委派,在隔离上下文对 git diff 进行6维度审查,default 模式 + tools 白名单确保只读,返回分级审查报告给主会话持久化。
|
|
32
32
|
|
|
33
33
|
## 你的职责
|
|
34
34
|
|
|
@@ -20,7 +20,7 @@ disallowed-tools:
|
|
|
20
20
|
- Bash(awk *)
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
---
|
|
23
|
-
<!-- generated by harness_deploy.py; core=
|
|
23
|
+
<!-- generated by harness_deploy.py; core=8fdeda6094f4f0a5; overlay=none; agent=claude-code; do not edit -->
|
|
24
24
|
# harness-archive — 变更归档
|
|
25
25
|
|
|
26
26
|
## Purpose
|
|
@@ -56,6 +56,11 @@ disallowed-tools:
|
|
|
56
56
|
- `evidence/verification-ledger.json`
|
|
57
57
|
- 至少一个 test 或 review 报告/证据
|
|
58
58
|
- 缺失任一项 → `archivable=false`;可从 `.harness/cache/change-snapshots/<change>/` 恢复正式层后再重试
|
|
59
|
+
- **产品候选验证**:
|
|
60
|
+
- 有远端 CI:保留 `product-candidate-ci.json` 兼容证据;归档会把有效的 legacy schema v1 证据迁移为 `remote-claimed` 的 schema v2 `product-candidate-verification.json`,不会冒充 `remote-attested`。
|
|
61
|
+
- `remote-attested` 必须同时带远端运行 URL 与 `verification.attestationDigest`;只有 URL、旧 JSON 哈希或 ledger 哈希只能达到 `remote-claimed`。
|
|
62
|
+
- 无 CI:先运行 `harness_archive.py certify-local --change-dir ... --project . --json`,只复用身份一致且完整的 `unitTestFull` ledger 证据,不重复执行测试。
|
|
63
|
+
- `release-candidate` 默认要求候选验证通过;仅封存未完成事实时显式使用 `--intent record-only`,归档结果必须为 `releaseEligible=false`,不得用于发布。
|
|
59
64
|
|
|
60
65
|
## Inputs
|
|
61
66
|
|
|
@@ -109,9 +114,9 @@ blocking user confirmation 让用户确认归档操作。**用户拒绝 → 终
|
|
|
109
114
|
|
|
110
115
|
### Phase 3:执行归档
|
|
111
116
|
|
|
112
|
-
1. 运行 `python <skills-root>/scripts/harness_archive.py status --change-dir ".harness/changes/<change-name>" --json`
|
|
117
|
+
1. 运行 `python <skills-root>/scripts/harness_archive.py status --change-dir ".harness/changes/<change-name>" --intent release-candidate --json` 前置检查。无 CI 项目若已有完整全量 ledger,先运行 `certify-local`;若用户明确只封存事实,则 status/finalize 均使用 `--intent record-only`。
|
|
113
118
|
2. `meta/archive-meta.md` **由 `harness_archive.py finalize` 自动生成**(与 summary-data `finalStatus` 同源);**禁止 agent 手写**该文件,手写视为数据丢失。维护者结论写入 events(decision/issue)即可,finalize 会汇总到 summary / archive-meta。
|
|
114
|
-
3. 运行 `python <skills-root>/scripts/harness_archive.py finalize --change-dir ".harness/changes/<change-name>" --archive-root ".harness/archive" --json`;读 JSON(cleanup、事件、移动、collect、render、validate、manifest 比对、archive-meta)。finalize 内部负责且仅负责一次 `phase.start` / `phase.end`,调用者不得重复追加。**finalize 不再同步执行知识维护**(§8.2):它写一个 `pending` maintenance-outbox 项即返回,`knowledgeMaintenance=QUEUED`;写 outbox 失败时 `NOT_QUEUED`(warning,不回滚 archive,总状态 CONDITIONAL)。后续由 `harness-sync` / `harness_knowledge.py maintain` 异步推进 outbox。**finalize 失败或 validate 报错时不删除原目录**。
|
|
119
|
+
3. 运行 `python <skills-root>/scripts/harness_archive.py finalize --change-dir ".harness/changes/<change-name>" --archive-root ".harness/archive" --intent <release-candidate|record-only> --json`;读 JSON(cleanup、事件、移动、collect、render、validate、manifest 比对、archive-meta)。finalize 内部负责且仅负责一次 `phase.start` / `phase.end`,调用者不得重复追加。**finalize 不再同步执行知识维护**(§8.2):它写一个 `pending` maintenance-outbox 项即返回,`knowledgeMaintenance=QUEUED`;写 outbox 失败时 `NOT_QUEUED`(warning,不回滚 archive,总状态 CONDITIONAL)。后续由 `harness-sync` / `harness_knowledge.py maintain` 异步推进 outbox。**finalize 失败或 validate 报错时不删除原目录**。
|
|
115
120
|
|
|
116
121
|
- **Read `reference.md`** — finalize 输出字段、archive-meta 格式、CONDITIONAL_OK 规则
|
|
117
122
|
- **Read `templates/summary-data-template.json`** — summary-data 数据结构
|
|
@@ -187,6 +192,10 @@ finalize 内部负责且仅负责一次 `phase.start` / `phase.end`,并在移
|
|
|
187
192
|
|
|
188
193
|
git 命令通过 `powershell.exe -Command "..."` 执行;archive-meta.md 和 final-summary.html 不得含明文 token/密码/密钥;归档报告必须区分 ✅真实成功 / 🟡跳过·静态验证 / ❌失败。
|
|
189
194
|
|
|
195
|
+
### 十三、归档完整性与发布资格分离
|
|
196
|
+
|
|
197
|
+
`archiveIntegrity` 表示归档内容是否完整;`candidateVerification` 表示候选验证证据及保证级别;`releaseEligible` 只有两者均满足发布策略时才为 true。`record-only` 允许保留证据不足的历史事实,但绝不等价于 CI 绿灯或可发布。
|
|
198
|
+
|
|
190
199
|
## Output Format
|
|
191
200
|
|
|
192
201
|
> 归档元数据格式见 `reference.md` 的 archive-meta 模板;最终报告由 `templates/summary-data-template.json` 数据结构 + `templates/render-summary.mjs` 固定脚本渲染。
|
package/harness/bundles/general/claude-code/harness-archive/templates/summary-data-template.json
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
"changeName": "<change-name>",
|
|
4
4
|
"businessGoal": "本次变更为了做什么",
|
|
5
5
|
"finalStatus": "OK | WARN | CONDITIONAL_OK | FAIL",
|
|
6
|
+
"archiveIntent": "release-candidate | record-only",
|
|
7
|
+
"archiveIntegrity": {
|
|
8
|
+
"ok": true
|
|
9
|
+
},
|
|
10
|
+
"candidateVerification": {
|
|
11
|
+
"ok": false,
|
|
12
|
+
"code": "PRODUCT_CANDIDATE_VERIFIED | PRODUCT_CANDIDATE_NOT_VERIFIED | PRODUCT_CI_GREEN | PRODUCT_CI_NOT_GREEN",
|
|
13
|
+
"assurance": "local-reproducible | remote-claimed | remote-attested",
|
|
14
|
+
"message": ""
|
|
15
|
+
},
|
|
16
|
+
"releaseEligible": false,
|
|
6
17
|
"finalCommit": "<commit-hash>",
|
|
7
18
|
"finalCommitBranch": "<origin/branch>",
|
|
8
19
|
"baseCommit": "<base-commit-hash>",
|
|
@@ -20,7 +20,7 @@ disallowed-tools:
|
|
|
20
20
|
- Bash(awk *)
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
---
|
|
23
|
-
<!-- generated by harness_deploy.py; core=
|
|
23
|
+
<!-- generated by harness_deploy.py; core=8fdeda6094f4f0a5; overlay=none; agent=claude-code; do not edit -->
|
|
24
24
|
# harness-codebase-map — 代码库地图
|
|
25
25
|
|
|
26
26
|
## Purpose
|
|
@@ -20,7 +20,7 @@ disallowed-tools:
|
|
|
20
20
|
- Bash(awk *)
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
---
|
|
23
|
-
<!-- generated by harness_deploy.py; core=
|
|
23
|
+
<!-- generated by harness_deploy.py; core=8fdeda6094f4f0a5; overlay=none; agent=claude-code; do not edit -->
|
|
24
24
|
# harness-knowledge-ingest
|
|
25
25
|
|
|
26
26
|
从 `.harness/archive/**/reports/final/summary-data.json` 抽取项目知识,生成并维护本地 `.harness/knowledge/` 索引。
|
|
@@ -20,7 +20,7 @@ disallowed-tools:
|
|
|
20
20
|
- Bash(awk *)
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
---
|
|
23
|
-
<!-- generated by harness_deploy.py; core=
|
|
23
|
+
<!-- generated by harness_deploy.py; core=8fdeda6094f4f0a5; overlay=none; agent=claude-code; do not edit -->
|
|
24
24
|
# harness-knowledge-query
|
|
25
25
|
|
|
26
26
|
并行 change 中查询必须传 `--change <change-id>`;成功后以该 change 的 `meta/knowledge-context.json` 为稳定指针。全局 `context-packs/latest.json` 仅向后兼容,不得用于判断多个 active change 的上下文归属。
|
|
@@ -20,7 +20,7 @@ disallowed-tools:
|
|
|
20
20
|
- Bash(awk *)
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
---
|
|
23
|
-
<!-- generated by harness_deploy.py; core=
|
|
23
|
+
<!-- generated by harness_deploy.py; core=8fdeda6094f4f0a5; overlay=none; agent=claude-code; do not edit -->
|
|
24
24
|
# harness-plan — 需求规划
|
|
25
25
|
|
|
26
26
|
## Purpose
|
|
@@ -69,10 +69,13 @@ disallowed-tools:
|
|
|
69
69
|
|
|
70
70
|
内化为 `protocols.md`:`clarification-protocol`、`decision-grilling-protocol`、`implementation-planning-protocol`。不运行时调用 Superpowers/grill-me。
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
<!-- @section-id plan.delegate -->
|
|
73
|
+
## 执行路由(inline 优先)
|
|
73
74
|
|
|
74
|
-
- **阶段 3
|
|
75
|
-
-
|
|
75
|
+
- **阶段 3 探索默认 inline**:主会话直接使用 CodeGraph/Read,简单修复和常规跨文件变更不得为“隔离上下文”额外启动 agent。
|
|
76
|
+
- **仅高复杂度探索考虑委派**:涉及多个独立模块、陌生大型代码库或可并行的独立调查时,才执行一次 `python <skills-root>/scripts/harness_preflight.py check-agents --skills-root <skills-root> --agent harness-explorer --json`。只有 `executionMode=delegated` 才委派;`executionMode=inline` 是正常路径,静默继续;`unavailable` 只记录安装问题后 inline。
|
|
77
|
+
- **阶段 7.5 evaluator**:仅 `--adversarial` 或 auth/支付/迁移/并发等高风险规划启用;需要固定 agent 时才预检。无论预检 inline、spawn 失败、空返回或只有元数据,都立即由主会话完成同一对抗检查,`fallbackPolicy=inline-no-retry`。
|
|
78
|
+
- 日志记录 `executionMode=inline|delegated`;只有真实定义损坏或 spawn 失败才记 issue。正常 inline 不得显示“subagent 不可用”告警。
|
|
76
79
|
|
|
77
80
|
## Workflow 概要
|
|
78
81
|
|
|
@@ -109,6 +112,7 @@ change-name 范围变更 → 提示重命名或记 🟡WARN(→ `reference.md`
|
|
|
109
112
|
| 歧义优先检查 | 否定、对比、动作对象或范围存在多种合理解释时,最小取证后先给推荐理解并一次一问;确认前不深挖错误方向 |
|
|
110
113
|
| 简单修复探索预算 | 预计不超过 2 个代码文件、且不涉及认证/安全/迁移/并发/API 契约重设时,最多 1 次合并 CodeGraph 查询 + 1 次定向补查、1 个用户澄清问题;无关发现只记非阻断说明 |
|
|
111
114
|
| 精简产物 | 简单修复只保留实现所需的设计、任务、边界和测试;禁止在 spec/plan/detail/scenarios 中重复同一背景和结论 |
|
|
115
|
+
| 测试执行成本 | 场景表必须设计快速反馈层级、预计时长、资源预算、超时和可复用证据;默认先跑受影响测试,再跑模块门禁,候选验证只复用身份一致的全量证据 |
|
|
112
116
|
| state snapshot | 读取 `state-snapshot.json`(`harness_state.py` / state-layout-protocol §state-snapshot.json)了解 project/worktree root、HEAD/base、profile/rules/map/knowledge 指纹;失效由脚本刷新,**不得仅凭缓存跳过代码探索或验证门禁**(design §3.6) |
|
|
113
117
|
| 协议 | sensitive-info / evidence-based-reporting / state-layout |
|
|
114
118
|
|
|
@@ -37,21 +37,16 @@ description: harness-plan 的阶段检查清单和覆盖检查列表。仅在执
|
|
|
37
37
|
阶段 3 执行完成后,确认以下事项:
|
|
38
38
|
|
|
39
39
|
```
|
|
40
|
-
□
|
|
41
|
-
□
|
|
42
|
-
□
|
|
43
|
-
□ `
|
|
44
|
-
□
|
|
45
|
-
□
|
|
46
|
-
- 是否成功调用
|
|
47
|
-
- 使用的 agent 名称
|
|
48
|
-
- 是否只读
|
|
49
|
-
- 子代理实际 tool uses 计数
|
|
50
|
-
- 返回的核心结论
|
|
40
|
+
□ 已按复杂度选择 `executionMode=inline|delegated`;默认 inline
|
|
41
|
+
□ inline 时主会话直接使用 CodeGraph/Read,并返回结构化设计概要
|
|
42
|
+
□ 仅高复杂度且准备委派固定 agent 时,才运行一次 `check-agents --agent harness-explorer`
|
|
43
|
+
□ 只有预检 `executionMode=delegated` 才委派;`inline` 静默继续,不显示不可用告警
|
|
44
|
+
□ spawn 失败、空返回、0 tool uses、仅 "Done"/元数据 → 主会话探索,**不 retry 委派**
|
|
45
|
+
□ 执行日志记录 executionMode、委派原因(如有)、只读约束和核心结论
|
|
51
46
|
```
|
|
52
47
|
|
|
53
|
-
>
|
|
54
|
-
> -
|
|
48
|
+
> 正常 inline 只记 `decision`,不是降级或故障。如果已尝试委派但未返回有效输出(0 tool uses / 空返回 / 仅 "Done"),必须:
|
|
49
|
+
> - 追加一次 `issue` 事件并在 note 写明:子代理未返回有效输出,改为主会话只读探索
|
|
55
50
|
> - 主会话直接使用 codegraph MCP 工具(`mcp__codegraph__codegraph_explore`)和 Read 探索代码(只读,不执行写操作)
|
|
56
51
|
> - 不得在主会话中执行任何写操作
|
|
57
52
|
> - CodeGraph 如通过 MCP 调用,必须优先用 MCP 工具,不允许通过普通 Bash 调 codegraph 命令
|
|
@@ -156,10 +151,10 @@ source: harness-plan
|
|
|
156
151
|
```
|
|
157
152
|
□ 已用 **设计审批包** 一次 blocking user confirmation(设计 + 场景表摘要 + worktree + change-name)
|
|
158
153
|
□ **未**单独询问 worktree 或对抗评审(对抗评审仅 `--adversarial`)
|
|
159
|
-
□
|
|
160
|
-
□
|
|
161
|
-
□
|
|
162
|
-
□
|
|
154
|
+
□ 已按宿主能力选择隔离 evaluator 或主会话对抗自审;正常 inline 不记故障
|
|
155
|
+
□ 若委派,已使用隔离上下文且校验 tool uses > 0
|
|
156
|
+
□ 若委派返回 0/空/Done/元数据,已立即 inline 自审且未 retry
|
|
157
|
+
□ 已产出 VERDICT(APPROVED/REVISE) + 结构化问题清单(RED/YELLOW)
|
|
163
158
|
□ 评审报告已写入 .harness/changes/<change-name>/reports/plan-review/plan-review-YYYYMMDD-HHmm.md
|
|
164
159
|
□ VERDICT 和问题清单已展示给用户(不得仅记"已评审")
|
|
165
160
|
□ REVISE 时已询问用户是否修订;修订后可选再审
|
|
@@ -198,6 +193,7 @@ source: harness-plan
|
|
|
198
193
|
□ 已生成基础任务列表,并用 artifact 事件 note 记录任务拆分摘要
|
|
199
194
|
□ 已叠加项目层序依赖(数据/契约→业务层→接口层)
|
|
200
195
|
□ 已生成 4 维度场景表(单元/接口/数据兼容/集成)
|
|
196
|
+
□ 每个自动化场景均标注执行层级、预计时长、资源预算、超时、可复用证据;快速反馈不默认扫描全仓库
|
|
201
197
|
□ 已确定变更名(kebab-case)
|
|
202
198
|
□ 产物已写入 .harness/changes/<change-name>/plans/:
|
|
203
199
|
- <change-name>-plan.md(简洁任务表)
|
|
@@ -228,34 +228,36 @@ status: approved
|
|
|
228
228
|
|
|
229
229
|
#### 1.1 <类名.方法名>
|
|
230
230
|
|
|
231
|
-
| # | 分类 | 场景描述 | 输入 | 预期 |
|
|
232
|
-
|
|
233
|
-
| UT-001 | 正常 | ... | ... | ... |
|
|
234
|
-
| UT-002 | 异常 | ... | ... | 抛 xxxException |
|
|
235
|
-
| UT-003 | 边界 | ... | ... | ... |
|
|
231
|
+
| # | 分类 | 场景描述 | 输入 | 预期 | 执行层级 | 预计时长 | 资源预算 | 超时 | 可复用证据 |
|
|
232
|
+
|:--:|:----:|----------|------|------|----------|----------|----------|------|------------|
|
|
233
|
+
| UT-001 | 正常 | ... | ... | ... | affected | ≤10s | 1 worker / ≤512MB | 30s | inputsHash + command |
|
|
234
|
+
| UT-002 | 异常 | ... | ... | 抛 xxxException | affected | ≤10s | 1 worker / ≤512MB | 30s | inputsHash + command |
|
|
235
|
+
| UT-003 | 边界 | ... | ... | ... | module | ≤60s | ≤50% CPU / ≤1GB | 120s | ledger identity |
|
|
236
236
|
|
|
237
237
|
### 二、接口测试场景
|
|
238
238
|
|
|
239
239
|
#### 2.1 POST /xxx
|
|
240
240
|
|
|
241
|
-
| # | 分类 | 场景描述 | 关键字段 | HTTP | code | message |
|
|
242
|
-
|
|
243
|
-
| API-001 | 正常 | ... | ... | 200 | 0 | 成功 |
|
|
244
|
-
| API-002 | 校验 | ... | ... | 200 | xxx | ... |
|
|
241
|
+
| # | 分类 | 场景描述 | 关键字段 | HTTP | code | message | 执行层级 | 预计时长 | 资源预算 | 超时 | 可复用证据 |
|
|
242
|
+
|:--:|:----:|----------|----------|:----:|:----:|--------|----------|----------|----------|------|------------|
|
|
243
|
+
| API-001 | 正常 | ... | ... | 200 | 0 | 成功 | module | ≤60s | 1 service / ≤1GB | 120s | environmentHash + ledger |
|
|
244
|
+
| API-002 | 校验 | ... | ... | 200 | xxx | ... | affected | ≤20s | 1 service / ≤1GB | 60s | environmentHash + ledger |
|
|
245
245
|
|
|
246
246
|
### 三、数据兼容场景
|
|
247
247
|
|
|
248
|
-
| # | 分类 | 场景描述 | 操作 | 数据特征 | 预期 |
|
|
249
|
-
|
|
250
|
-
| COM-001 | 旧数据 | ... | ... | ... | ... |
|
|
248
|
+
| # | 分类 | 场景描述 | 操作 | 数据特征 | 预期 | 执行层级 | 预计时长 | 资源预算 | 超时 | 可复用证据 |
|
|
249
|
+
|:--:|:----:|----------|:----:|----------|------|----------|----------|----------|------|------------|
|
|
250
|
+
| COM-001 | 旧数据 | ... | ... | ... | ... | module | ≤60s | isolated DB / ≤1GB | 120s | dbSchemaHash + ledger |
|
|
251
251
|
|
|
252
252
|
### 四、集成场景
|
|
253
253
|
|
|
254
|
-
| # | 分类 | 场景描述 | 前置条件 | 步骤 | 预期 |
|
|
255
|
-
|
|
256
|
-
| INT-001 | 端到端 | ... | ... | N 步操作 | ... |
|
|
254
|
+
| # | 分类 | 场景描述 | 前置条件 | 步骤 | 预期 | 执行层级 | 预计时长 | 资源预算 | 超时 | 可复用证据 |
|
|
255
|
+
|:--:|:----:|----------|----------|------|------|----------|----------|----------|------|------------|
|
|
256
|
+
| INT-001 | 端到端 | ... | ... | N 步操作 | ... | candidate | ≤10m | ≤50% CPU / ≤2GB | 15m | verification identity |
|
|
257
257
|
```
|
|
258
258
|
|
|
259
|
+
执行层级固定为 `affected`(快速反馈)、`module`(变更模块门禁)、`candidate`(产品候选)。禁止所有场景默认跑全仓库;无法给出预算或超时时必须说明原因,并拆分或隔离高成本场景。只有 command、inputs/toolchain/environment 身份一致的成功 ledger 证据可以复用。
|
|
260
|
+
|
|
259
261
|
## 产物保存规则(跨阶段:阶段0.5/4/6/8)
|
|
260
262
|
|
|
261
263
|
1. **自动确定变更名**:基于需求描述自动生成变更名(kebab-case),无需用户确认
|
|
@@ -343,25 +345,13 @@ status: approved
|
|
|
343
345
|
- 最终输出只提示产出物路径和下一步 `/harness-run`
|
|
344
346
|
- `docs/superpowers/` 不得作为最终产物路径出现在输出中
|
|
345
347
|
|
|
346
|
-
## C2
|
|
347
|
-
|
|
348
|
-
阶段 7.5 的 harness-evaluator 是同 provider(Claude)评审,基于"上下文隔离 + 档位差异"。如需真正跨 provider 对抗(高风险构建:auth/支付/数据迁移/并发),可在 evaluator 返回 REVISE 后,可选调 Codex CLI 做二次确认。
|
|
348
|
+
## C2 升级口:跨 provider 评审(显式、非默认)
|
|
349
349
|
|
|
350
|
-
|
|
351
|
-
- Codex CLI ≥ 0.130:`npm install -g @openai/codex@latest`(现 0.142.3)
|
|
352
|
-
- Codex 已登录:`codex login`(ChatGPT 账号即可)
|
|
353
|
-
- Windows + bridge 环境未实测,TODO(review)
|
|
354
|
-
|
|
355
|
-
### 执行(示例)
|
|
356
|
-
```powershell
|
|
357
|
-
powershell.exe -NoProfile -Command "codex exec -s read-only '$(Get-Content .harness/changes/<cn>/spec/<cn>-design.md -Raw)'"
|
|
358
|
-
```
|
|
350
|
+
阶段 7.5 默认只做主会话对抗自审或宿主原生隔离任务,不自动启动第二个 CLI/provider。高风险构建确需跨 provider 二次确认时,由用户显式要求并提供可用宿主能力;该升级不属于正常 harness-plan 路径,也不得因外部工具不可用而 retry。
|
|
359
351
|
|
|
360
|
-
### 安全线
|
|
361
|
-
- 首次 `codex exec -s read-only` 强制只读沙箱
|
|
362
|
-
- resume 必须加 `-c sandbox_mode="read-only"`(`resume` 不接受 `-s`,漏写会继承 config 默认,可能 `danger-full-access`)——这是最关键安全线
|
|
363
|
-
- Codex 全程只读,从不写文件
|
|
364
|
-
- 不 pin `-m` 模型(ChatGPT 账号鉴权会拒 `gpt-5.x-codex` 变体并 400 报错)
|
|
352
|
+
### 安全线
|
|
365
353
|
|
|
366
|
-
|
|
367
|
-
|
|
354
|
+
- 外部评审必须只读,输入只包含已脱敏的设计/计划/场景表
|
|
355
|
+
- 不继承未确认的生产凭证、写权限或危险沙箱设置
|
|
356
|
+
- 一次失败即返回主会话,不自动安装 CLI、不自动登录、不循环 resume
|
|
357
|
+
- 报告必须标注 provider、执行模式和证据边界
|
|
@@ -21,7 +21,7 @@ disallowed-tools:
|
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
- Bash(codegraph *)
|
|
23
23
|
---
|
|
24
|
-
<!-- generated by harness_deploy.py; core=
|
|
24
|
+
<!-- generated by harness_deploy.py; core=8fdeda6094f4f0a5; overlay=none; agent=claude-code; do not edit -->
|
|
25
25
|
# harness-review — 代码审查
|
|
26
26
|
|
|
27
27
|
## Purpose
|
|
@@ -69,9 +69,9 @@ disallowed-tools:
|
|
|
69
69
|
0. **启动准备** — 确定变更名(Glob `.harness/changes/*/plans/*-plan.md`,排除 `.harness/archive/*/`,读 frontmatter 提取 change-name);**append `phase.start` 事件**(不得等审查完成才补)
|
|
70
70
|
1. **读取 worktree 状态(门禁检查)** — 读 `.harness/changes/<change-name>/meta/worktree.json`:`requested=true` 但 worktree 不存在 → 停止并提示先修复 `harness-run`,不得静默回主目录(否则 git diff 为空);`requested=true` 且 worktree 已创建 → spawned agent 用该 worktree 路径执行 `git diff`(确保审查 worktree 变更而非主目录);`requested=false` → 审查主目录变更
|
|
71
71
|
<!-- @section-id review.delegate -->
|
|
72
|
-
### 2.
|
|
72
|
+
### 2. 审查执行(风险分级、inline 优先)
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
默认由主会话按同一 6 维度检查清单审查。仅发布候选,或变更命中权限/安全、支付、数据迁移、并发幂等、公共契约、跨模块核心路径时,才考虑隔离 reviewer;需要固定 `harness-reviewer` 时执行一次 `python <skills-root>/scripts/harness_preflight.py check-agents --skills-root <skills-root> --agent harness-reviewer --json`。只有 `executionMode=delegated` 才委派;`executionMode=inline` 静默由主会话审查,不显示缺失告警。定义损坏、spawn 失败、空返回或只有元数据 → 记录一次 issue 后直接主会话审查,`fallbackPolicy=inline-no-retry`。
|
|
75
75
|
|
|
76
76
|
3. **持久化报告与事实 sidecar(强制,主会话)** — Agent 返回后主会话 Write 到 `reports/review/review-report-*.md`,并把同一批发现写成临时 JSON 后调用 `python <skills-root>/scripts/harness_review.py write-findings --change-dir <change-dir> --input <findings.json>`。权威计数来自 `reports/review/review-findings.json`,不是 Markdown。任一写入缺失 → 🟡WARN,不得宣称 review 完成。
|
|
77
77
|
4. **生成修复反馈(原生协议)** — 若报告存在 RED/YELLOW 问题,执行 `protocols.md` 的 `review-fixback-protocol`,将问题转化为结构化 fixback 清单并落盘到 `.harness/changes/<change-name>/reports/review/fixback-YYYYMMDD-HHmm.md`;随后把 disposition 临时 JSON 交给 `python <skills-root>/scripts/harness_review.py write-dispositions --change-dir <change-dir> --input <dispositions.json>`,权威状态写入 `reports/review/fixback-dispositions.json`。若无 RED/YELLOW,也必须写空 findings sidecar,并记录 `review-fixback-protocol: skipped(no findings)`。不调用 Superpowers `receiving-code-review`,也不记录外部 skill 降级。
|
|
@@ -21,7 +21,7 @@ disallowed-tools:
|
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
- Bash(codegraph *)
|
|
23
23
|
---
|
|
24
|
-
<!-- generated by harness_deploy.py; core=
|
|
24
|
+
<!-- generated by harness_deploy.py; core=8fdeda6094f4f0a5; overlay=none; agent=claude-code; do not edit -->
|
|
25
25
|
# harness-run — 需求编码
|
|
26
26
|
|
|
27
27
|
## Purpose
|
|
@@ -49,13 +49,13 @@ REFACTOR 只允许不改变行为的整理。若重构改变行为,必须回
|
|
|
49
49
|
满足**全部**条件时启用:
|
|
50
50
|
|
|
51
51
|
- 变更簇命中高风险(数据迁移、权限、安全、并发、幂等、核心契约变更、缺真实测试证据等,见原触发列表任一)
|
|
52
|
-
-
|
|
52
|
+
- 当前宿主已显式提供隔离 reviewer 能力;需要固定 reviewer 时,单次 `check-agents` 返回 `executionMode=delegated`
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
未满足时记录“跳过变更簇隔离审查:低风险 / 正常 inline / 后续 harness-review 覆盖”,不得视为降级或显示不可用告警。
|
|
55
55
|
|
|
56
56
|
### 审查方式
|
|
57
57
|
|
|
58
|
-
`
|
|
58
|
+
`executionMode=delegated` 时委派只读 `harness-reviewer` 审查当前变更簇 diff。**不 retry**;spawn 失败或无效返回 → 主会话 checklist 自审,记一次 `issue` 事件。
|
|
59
59
|
|
|
60
60
|
审查范围只限当前变更簇:
|
|
61
61
|
|
|
@@ -20,7 +20,7 @@ disallowed-tools:
|
|
|
20
20
|
- Bash(awk *)
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
---
|
|
23
|
-
<!-- generated by harness_deploy.py; core=
|
|
23
|
+
<!-- generated by harness_deploy.py; core=8fdeda6094f4f0a5; overlay=none; agent=claude-code; do not edit -->
|
|
24
24
|
# harness-submit — 最终提交(含 worktree 合并)
|
|
25
25
|
|
|
26
26
|
## Purpose
|
|
@@ -77,6 +77,8 @@ worktree 合并前必须运行 `harness_change.py integration-lock acquire --run
|
|
|
77
77
|
0. **启动准备** — `harness_change.py resolve` 确定变更名;**`harness_gate.py begin --phase submit --change <id>`**;读 ledger,以 `harness_ledger.py diff-hash --repo . --base <baseCommit> --change-dir ".harness/changes/<change-name>" --json` 计算 diffHash + post-test 7 类分类(禁止手写 ledger / 手工 phase.end)
|
|
78
78
|
1. **合并最新代码** — 主目录与 worktree 均**不在业务工作区 stash/pull**;远端同步由合并段 integration transaction 在隔离 integration worktree 内完成(见「worktree 合并流程」);**正常路径禁止 `git stash` / `stash pop`**
|
|
79
79
|
2. **最终验证** — ledger 复用优先;**提交前最终门禁只调 `can-reuse`**(删除与 coverage 冲突的二次全量门禁):`harness_ledger.py can-reuse --verification unitTestFull --scope module --project . --profile-input unitTestFull --command <resolved commands.unitTestFull.command>`。`--command` **按 profile key resolve**:读 `build-profile.json` 的 `commands.unitTestFull.command`(v2),或 `harness_profile.py resolve --project . --key unitTestFull --json` 取 resolved command,**不复制示例模块名**(文档示例只展示 key)。`--profile-input unitTestFull` 从 `verificationInputs.unitTestFull`(v2 由 `commands.unitTestFull.inputs` 派生)展开依赖闭包,**禁止用仅含 staged 文件的 `--files` 快捷方式**冒充全量闭包。`reuse=true` → 不再执行二次全量测试;仅 `reuse=false` 时执行**同一 resolved verification**(profile `unitTestFull` 命令),成功后用同一文件集、command、`scope=module` 经 **`harness_ledger.py record`** 写回 ledger `unitTestFull` 项。增量 `unitTest` 永远不能冒充 `unitTestFull` 门禁。
|
|
80
|
+
- 无远端 CI 且 gate-policy 未强制 remote provider 时,验证通过/复用后运行 `harness_archive.py certify-local --change-dir ... --project . --json`,从同一 ledger 生成 `local-reproducible` 产品候选收据;该命令不执行测试。
|
|
81
|
+
- gate-policy 要求 `remote-attested` 时不得降级成本地收据,等待远端 attestation。
|
|
80
82
|
3. **.gitignore + 精确暂存** ⚠️ — 检查 `.harness/` 在 `.gitignore`;**禁止 `git add -A`**。若存在 `evidence/test-tracking.json`,先执行 `python <skills-root>/scripts/harness_test_guard.py stage --project . --change-dir ".harness/changes/<change-name>" --json`;失败即硬停止。无 manifest 时不使用 `-f`。manifest 之外的文件按精确业务路径正常暂存,**禁止全局 force-add**。
|
|
81
83
|
4. **提交方式** — 主目录:blocking user confirmation 三选项(commit+push / 仅本地 / 取消);**worktree:固定仅本地 commit**
|
|
82
84
|
5. **commit-message.txt** ⚠️ — 展示 staged、diff stat、完整中文 message;用户确认
|
|
@@ -367,15 +367,21 @@ python harness/scripts/harness_integration.py verify --change <change-name> --ru
|
|
|
367
367
|
|
|
368
368
|
任一命令非零退出 → step FAILED,不进入 push。
|
|
369
369
|
|
|
370
|
-
|
|
370
|
+
**产品候选证据门槛**:
|
|
371
|
+
|
|
372
|
+
- 项目存在远端 CI:本地 push 只运行有界静态门槛,push 后必须取得当前候选 commit 的 CI 绿灯,才能归档或发布。
|
|
373
|
+
- 项目没有远端 CI:在候选 commit 对应的同一棵 tree 上完整执行 resolved check;成功后写本地候选收据。收据必须同时匹配时间、命令和 tree hash,不接受口头声明或旧提交结果。
|
|
374
|
+
- 不得在 pre-push 中无条件重复全量测试;失败后不自动重跑,先报告失败阶段与残留进程。
|
|
375
|
+
|
|
376
|
+
**写 check-ok marker**(`npm run check` exit 0 后强制;无 CI 项目以此作为产品候选绿灯证据):
|
|
371
377
|
|
|
372
378
|
```powershell
|
|
373
|
-
|
|
379
|
+
node scripts/check-gate.mjs --write
|
|
374
380
|
```
|
|
375
381
|
|
|
376
382
|
### 步骤 M5:push
|
|
377
383
|
|
|
378
|
-
**硬门槛(eslint × feature worktree)**:integration / 主仓 `pre-push`
|
|
384
|
+
**硬门槛(eslint × feature worktree)**:integration / 主仓 `pre-push` 跑有界 `check:push` 时,eslint 不得把 sibling `.worktrees/<change>/` 当成第二工程根(双 `tsconfigRootDir`)。本仓以 `eslint.config.mjs` 的 `.worktrees/**` ignore 为准;若自定义 eslint 未 ignore,须先 `move_agent_to_root(<projectRoot>)` 再清 feature worktree,再 push。
|
|
379
385
|
|
|
380
386
|
```powershell
|
|
381
387
|
python harness/scripts/harness_integration.py push --change <change-name> --run-id <run-id> --feature-branch harness/<change-name> --target-branch <主分支> --temp-root <task-temp>
|
|
@@ -19,7 +19,7 @@ disallowed-tools:
|
|
|
19
19
|
- Bash(awk *)
|
|
20
20
|
- Bash(curl *)
|
|
21
21
|
---
|
|
22
|
-
<!-- generated by harness_deploy.py; core=
|
|
22
|
+
<!-- generated by harness_deploy.py; core=8fdeda6094f4f0a5; overlay=none; agent=claude-code; do not edit -->
|
|
23
23
|
# harness-sync — 元数据同步
|
|
24
24
|
|
|
25
25
|
## Purpose
|
|
@@ -22,7 +22,7 @@ disallowed-tools:
|
|
|
22
22
|
- Bash(node *)
|
|
23
23
|
- Bash(codegraph *)
|
|
24
24
|
---
|
|
25
|
-
<!-- generated by harness_deploy.py; core=
|
|
25
|
+
<!-- generated by harness_deploy.py; core=8fdeda6094f4f0a5; overlay=none; agent=claude-code; do not edit -->
|
|
26
26
|
# harness-test — 测试执行
|
|
27
27
|
|
|
28
28
|
## Purpose
|