@hunter-harness/workflow-harness 0.2.86 → 0.3.1
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/contracts/workflow-policy.json +46 -17
- package/harness/bundles/general/claude-code/harness-archive/SKILL.md +2 -2
- package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +2 -2
- package/harness/bundles/general/claude-code/harness-execute/SKILL.md +189 -0
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +2 -2
- package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +2 -2
- package/harness/bundles/general/claude-code/harness-plan/SKILL.md +10 -10
- package/harness/bundles/general/claude-code/harness-plan/checklist.md +2 -13
- package/harness/bundles/general/claude-code/harness-plan/reference.md +43 -81
- 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 +3 -3
- package/harness/bundles/general/claude-code/harness-review/protocols.md +1 -1
- package/harness/bundles/general/claude-code/harness-run/SKILL.md +8 -2
- package/harness/bundles/general/claude-code/harness-submit/SKILL.md +2 -2
- package/harness/bundles/general/claude-code/harness-submit/checklist.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 +11 -2
- package/harness/bundles/general/claude-code/scripts/harness_adoption_metrics.py +391 -0
- package/harness/bundles/general/claude-code/scripts/harness_archive.py +46 -15
- package/harness/bundles/general/claude-code/scripts/harness_context.py +94 -43
- package/harness/bundles/general/claude-code/scripts/harness_events.py +1 -1
- package/harness/bundles/general/claude-code/scripts/harness_events_sync.py +1 -0
- package/harness/bundles/general/claude-code/scripts/harness_fixback.py +10 -10
- package/harness/bundles/general/claude-code/scripts/harness_gate.py +92 -25
- package/harness/bundles/general/claude-code/scripts/harness_ledger.py +4 -2
- package/harness/bundles/general/claude-code/scripts/harness_paths.py +120 -5
- package/harness/bundles/general/claude-code/scripts/harness_phase.py +41 -17
- package/harness/bundles/general/claude-code/scripts/harness_plan_finalize.py +16 -873
- package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/general/codebuddy/contracts/workflow-policy.json +46 -17
- package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +2 -2
- package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +2 -2
- package/harness/bundles/general/codebuddy/harness-execute/SKILL.md +170 -0
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +2 -2
- package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +2 -2
- package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +10 -10
- package/harness/bundles/general/codebuddy/harness-plan/checklist.md +2 -13
- package/harness/bundles/general/codebuddy/harness-plan/reference.md +43 -81
- 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 +3 -3
- package/harness/bundles/general/codebuddy/harness-review/protocols.md +1 -1
- package/harness/bundles/general/codebuddy/harness-run/SKILL.md +8 -2
- package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +2 -2
- package/harness/bundles/general/codebuddy/harness-submit/checklist.md +1 -1
- package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-test/SKILL.md +11 -2
- package/harness/bundles/general/codebuddy/scripts/harness_adoption_metrics.py +391 -0
- package/harness/bundles/general/codebuddy/scripts/harness_archive.py +46 -15
- package/harness/bundles/general/codebuddy/scripts/harness_context.py +94 -43
- package/harness/bundles/general/codebuddy/scripts/harness_events.py +1 -1
- package/harness/bundles/general/codebuddy/scripts/harness_events_sync.py +1 -0
- package/harness/bundles/general/codebuddy/scripts/harness_fixback.py +10 -10
- package/harness/bundles/general/codebuddy/scripts/harness_gate.py +92 -25
- package/harness/bundles/general/codebuddy/scripts/harness_ledger.py +4 -2
- package/harness/bundles/general/codebuddy/scripts/harness_paths.py +120 -5
- package/harness/bundles/general/codebuddy/scripts/harness_phase.py +41 -17
- package/harness/bundles/general/codebuddy/scripts/harness_plan_finalize.py +16 -873
- package/harness/bundles/general/codex/.harness-build.json +1 -1
- package/harness/bundles/general/codex/contracts/workflow-policy.json +46 -17
- package/harness/bundles/general/codex/harness-archive/SKILL.md +2 -2
- package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +2 -2
- package/harness/bundles/general/codex/harness-execute/SKILL.md +170 -0
- package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +2 -2
- package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +2 -2
- package/harness/bundles/general/codex/harness-plan/SKILL.md +10 -10
- package/harness/bundles/general/codex/harness-plan/checklist.md +2 -13
- package/harness/bundles/general/codex/harness-plan/reference.md +43 -81
- 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 +3 -3
- package/harness/bundles/general/codex/harness-review/protocols.md +1 -1
- package/harness/bundles/general/codex/harness-run/SKILL.md +8 -2
- package/harness/bundles/general/codex/harness-submit/SKILL.md +2 -2
- package/harness/bundles/general/codex/harness-submit/checklist.md +1 -1
- package/harness/bundles/general/codex/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-test/SKILL.md +11 -2
- package/harness/bundles/general/codex/scripts/harness_adoption_metrics.py +391 -0
- package/harness/bundles/general/codex/scripts/harness_archive.py +46 -15
- package/harness/bundles/general/codex/scripts/harness_context.py +94 -43
- package/harness/bundles/general/codex/scripts/harness_events.py +1 -1
- package/harness/bundles/general/codex/scripts/harness_events_sync.py +1 -0
- package/harness/bundles/general/codex/scripts/harness_fixback.py +10 -10
- package/harness/bundles/general/codex/scripts/harness_gate.py +92 -25
- package/harness/bundles/general/codex/scripts/harness_ledger.py +4 -2
- package/harness/bundles/general/codex/scripts/harness_paths.py +120 -5
- package/harness/bundles/general/codex/scripts/harness_phase.py +41 -17
- package/harness/bundles/general/codex/scripts/harness_plan_finalize.py +16 -873
- package/harness/bundles/general/cursor/.harness-build.json +1 -1
- package/harness/bundles/general/cursor/contracts/workflow-policy.json +46 -17
- package/harness/bundles/general/cursor/harness-archive/SKILL.md +2 -2
- package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +2 -2
- package/harness/bundles/general/cursor/harness-execute/SKILL.md +170 -0
- package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +2 -2
- package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +2 -2
- package/harness/bundles/general/cursor/harness-plan/SKILL.md +10 -10
- package/harness/bundles/general/cursor/harness-plan/checklist.md +2 -13
- package/harness/bundles/general/cursor/harness-plan/reference.md +43 -81
- 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 +3 -3
- package/harness/bundles/general/cursor/harness-review/protocols.md +1 -1
- package/harness/bundles/general/cursor/harness-run/SKILL.md +8 -2
- package/harness/bundles/general/cursor/harness-submit/SKILL.md +2 -2
- package/harness/bundles/general/cursor/harness-submit/checklist.md +1 -1
- package/harness/bundles/general/cursor/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-test/SKILL.md +11 -2
- package/harness/bundles/general/cursor/scripts/harness_adoption_metrics.py +391 -0
- package/harness/bundles/general/cursor/scripts/harness_archive.py +46 -15
- package/harness/bundles/general/cursor/scripts/harness_context.py +94 -43
- package/harness/bundles/general/cursor/scripts/harness_events.py +1 -1
- package/harness/bundles/general/cursor/scripts/harness_events_sync.py +1 -0
- package/harness/bundles/general/cursor/scripts/harness_fixback.py +10 -10
- package/harness/bundles/general/cursor/scripts/harness_gate.py +92 -25
- package/harness/bundles/general/cursor/scripts/harness_ledger.py +4 -2
- package/harness/bundles/general/cursor/scripts/harness_paths.py +120 -5
- package/harness/bundles/general/cursor/scripts/harness_phase.py +41 -17
- package/harness/bundles/general/cursor/scripts/harness_plan_finalize.py +16 -873
- package/harness/bundles/java/claude-code/.harness-build.json +1 -1
- package/harness/bundles/java/claude-code/contracts/workflow-policy.json +46 -17
- package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-archive/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-execute/SKILL.md +189 -0
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-package/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-plan/SKILL.md +10 -10
- package/harness/bundles/java/claude-code/harness-plan/checklist.md +2 -13
- package/harness/bundles/java/claude-code/harness-plan/reference.md +43 -81
- 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 +3 -3
- package/harness/bundles/java/claude-code/harness-review/protocols.md +1 -1
- package/harness/bundles/java/claude-code/harness-run/SKILL.md +8 -2
- package/harness/bundles/java/claude-code/harness-submit/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-submit/checklist.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 +11 -2
- package/harness/bundles/java/claude-code/scripts/harness_adoption_metrics.py +391 -0
- package/harness/bundles/java/claude-code/scripts/harness_archive.py +46 -15
- package/harness/bundles/java/claude-code/scripts/harness_context.py +94 -43
- package/harness/bundles/java/claude-code/scripts/harness_events.py +1 -1
- package/harness/bundles/java/claude-code/scripts/harness_events_sync.py +1 -0
- package/harness/bundles/java/claude-code/scripts/harness_fixback.py +10 -10
- package/harness/bundles/java/claude-code/scripts/harness_gate.py +92 -25
- package/harness/bundles/java/claude-code/scripts/harness_ledger.py +4 -2
- package/harness/bundles/java/claude-code/scripts/harness_paths.py +120 -5
- package/harness/bundles/java/claude-code/scripts/harness_phase.py +41 -17
- package/harness/bundles/java/claude-code/scripts/harness_plan_finalize.py +16 -873
- package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/java/codebuddy/contracts/workflow-policy.json +46 -17
- package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-execute/SKILL.md +170 -0
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-package/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +10 -10
- package/harness/bundles/java/codebuddy/harness-plan/checklist.md +2 -13
- package/harness/bundles/java/codebuddy/harness-plan/reference.md +43 -81
- 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 +3 -3
- package/harness/bundles/java/codebuddy/harness-review/protocols.md +1 -1
- package/harness/bundles/java/codebuddy/harness-run/SKILL.md +8 -2
- package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-submit/checklist.md +1 -1
- package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-test/SKILL.md +11 -2
- package/harness/bundles/java/codebuddy/scripts/harness_adoption_metrics.py +391 -0
- package/harness/bundles/java/codebuddy/scripts/harness_archive.py +46 -15
- package/harness/bundles/java/codebuddy/scripts/harness_context.py +94 -43
- package/harness/bundles/java/codebuddy/scripts/harness_events.py +1 -1
- package/harness/bundles/java/codebuddy/scripts/harness_events_sync.py +1 -0
- package/harness/bundles/java/codebuddy/scripts/harness_fixback.py +10 -10
- package/harness/bundles/java/codebuddy/scripts/harness_gate.py +92 -25
- package/harness/bundles/java/codebuddy/scripts/harness_ledger.py +4 -2
- package/harness/bundles/java/codebuddy/scripts/harness_paths.py +120 -5
- package/harness/bundles/java/codebuddy/scripts/harness_phase.py +41 -17
- package/harness/bundles/java/codebuddy/scripts/harness_plan_finalize.py +16 -873
- package/harness/bundles/java/codex/.harness-build.json +1 -1
- package/harness/bundles/java/codex/contracts/workflow-policy.json +46 -17
- package/harness/bundles/java/codex/harness-apidoc/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-archive/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-execute/SKILL.md +170 -0
- package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-package/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-plan/SKILL.md +10 -10
- package/harness/bundles/java/codex/harness-plan/checklist.md +2 -13
- package/harness/bundles/java/codex/harness-plan/reference.md +43 -81
- 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 +3 -3
- package/harness/bundles/java/codex/harness-review/protocols.md +1 -1
- package/harness/bundles/java/codex/harness-run/SKILL.md +8 -2
- package/harness/bundles/java/codex/harness-submit/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-submit/checklist.md +1 -1
- package/harness/bundles/java/codex/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-test/SKILL.md +11 -2
- package/harness/bundles/java/codex/scripts/harness_adoption_metrics.py +391 -0
- package/harness/bundles/java/codex/scripts/harness_archive.py +46 -15
- package/harness/bundles/java/codex/scripts/harness_context.py +94 -43
- package/harness/bundles/java/codex/scripts/harness_events.py +1 -1
- package/harness/bundles/java/codex/scripts/harness_events_sync.py +1 -0
- package/harness/bundles/java/codex/scripts/harness_fixback.py +10 -10
- package/harness/bundles/java/codex/scripts/harness_gate.py +92 -25
- package/harness/bundles/java/codex/scripts/harness_ledger.py +4 -2
- package/harness/bundles/java/codex/scripts/harness_paths.py +120 -5
- package/harness/bundles/java/codex/scripts/harness_phase.py +41 -17
- package/harness/bundles/java/codex/scripts/harness_plan_finalize.py +16 -873
- package/harness/bundles/java/cursor/.harness-build.json +1 -1
- package/harness/bundles/java/cursor/contracts/workflow-policy.json +46 -17
- package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-archive/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-execute/SKILL.md +170 -0
- package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-package/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-plan/SKILL.md +10 -10
- package/harness/bundles/java/cursor/harness-plan/checklist.md +2 -13
- package/harness/bundles/java/cursor/harness-plan/reference.md +43 -81
- 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 +3 -3
- package/harness/bundles/java/cursor/harness-review/protocols.md +1 -1
- package/harness/bundles/java/cursor/harness-run/SKILL.md +8 -2
- package/harness/bundles/java/cursor/harness-submit/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-submit/checklist.md +1 -1
- package/harness/bundles/java/cursor/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-test/SKILL.md +11 -2
- package/harness/bundles/java/cursor/scripts/harness_adoption_metrics.py +391 -0
- package/harness/bundles/java/cursor/scripts/harness_archive.py +46 -15
- package/harness/bundles/java/cursor/scripts/harness_context.py +94 -43
- package/harness/bundles/java/cursor/scripts/harness_events.py +1 -1
- package/harness/bundles/java/cursor/scripts/harness_events_sync.py +1 -0
- package/harness/bundles/java/cursor/scripts/harness_fixback.py +10 -10
- package/harness/bundles/java/cursor/scripts/harness_gate.py +92 -25
- package/harness/bundles/java/cursor/scripts/harness_ledger.py +4 -2
- package/harness/bundles/java/cursor/scripts/harness_paths.py +120 -5
- package/harness/bundles/java/cursor/scripts/harness_phase.py +41 -17
- package/harness/bundles/java/cursor/scripts/harness_plan_finalize.py +16 -873
- package/harness/manifests/general/claude-code.json +36 -28
- package/harness/manifests/general/codebuddy.json +36 -28
- package/harness/manifests/general/codex.json +36 -28
- package/harness/manifests/general/cursor.json +36 -28
- package/harness/manifests/java/claude-code.json +38 -30
- package/harness/manifests/java/codebuddy.json +38 -30
- package/harness/manifests/java/codex.json +38 -30
- package/harness/manifests/java/cursor.json +38 -30
- package/hunter-workflow-family.json +2 -2
- package/package.json +1 -1
|
@@ -6,7 +6,7 @@ description: harness-plan 的需求提取模板、任务拆分规则、测试场
|
|
|
6
6
|
|
|
7
7
|
## Worktree 决策文件模板
|
|
8
8
|
|
|
9
|
-
阶段 4 设计审批包确认后必须生成 `.harness/changes/<change-name>/meta/worktree.json`。这是后续 `/harness-
|
|
9
|
+
阶段 4 设计审批包确认后必须生成 `.harness/changes/<change-name>/meta/worktree.json`。这是后续 `/harness-execute` 是否创建/切换 worktree 的唯一机器可读依据。
|
|
10
10
|
|
|
11
11
|
### 使用 Worktree
|
|
12
12
|
|
|
@@ -21,7 +21,7 @@ description: harness-plan 的需求提取模板、任务拆分规则、测试场
|
|
|
21
21
|
"branch": "harness/<change-name>",
|
|
22
22
|
"decisionBy": "user",
|
|
23
23
|
"decisionAt": "YYYY-MM-DD HH:mm",
|
|
24
|
-
"ownerSkill": "harness-
|
|
24
|
+
"ownerSkill": "harness-execute"
|
|
25
25
|
}
|
|
26
26
|
```
|
|
27
27
|
|
|
@@ -43,7 +43,7 @@ description: harness-plan 的需求提取模板、任务拆分规则、测试场
|
|
|
43
43
|
|
|
44
44
|
`path` 与 `branch` 必须来自 `harness_runtime.py adapter`/`meta/runtime.json`。所有 agent 共享统一路径 `.worktrees/<change-name>` 与统一分支前缀 `harness/`;`agent` 字段仅作创建者元数据,不再决定路径。
|
|
45
45
|
|
|
46
|
-
`用户选择使用 Worktree;决策文件为 meta/worktree.json;requested=true, created=false;创建责任为 harness-
|
|
46
|
+
`用户选择使用 Worktree;决策文件为 meta/worktree.json;requested=true, created=false;创建责任为 harness-execute。`
|
|
47
47
|
|
|
48
48
|
## 参考 — 详细格式
|
|
49
49
|
|
|
@@ -108,12 +108,13 @@ description: harness-plan 的需求提取模板、任务拆分规则、测试场
|
|
|
108
108
|
|
|
109
109
|
| 路径 | 审批内容去哪 | 设计文档 |
|
|
110
110
|
|------|------------|---------|
|
|
111
|
-
| **v2
|
|
112
|
-
|
|
111
|
+
| **v2**(唯一路径) | `meta/plan-evidence-input.json` 的 `approval.content` + `approver_id` | `plans/<change-name>-design.md`,由 finalize 从审批内容派生——**不要手写**,手写的会被派生渲染覆盖 |
|
|
112
|
+
|
|
113
|
+
> 历史 change 的 `spec/<change-name>-design.md`(legacy 产物)保持可读,归档与 read-protocol 照常消费。
|
|
113
114
|
|
|
114
115
|
**设计文档路径规则**:禁止保存到 `docs/superpowers/specs/` 作为正式产物;`/harness-plan` 不运行时调用 Superpowers。同一 change 不得同时存在 `plans/` 与 `spec/` 两份设计——v2 发布的那份才受完整性门禁保护。
|
|
115
116
|
|
|
116
|
-
### 设计文档模板(
|
|
117
|
+
### 设计文档模板(v2 由 finalize 派生;此模板仅作内容清单参考)
|
|
117
118
|
|
|
118
119
|
```markdown
|
|
119
120
|
---
|
|
@@ -189,8 +190,8 @@ source: harness-plan
|
|
|
189
190
|
```
|
|
190
191
|
.harness/changes/<change-name>/plans/
|
|
191
192
|
├── <change-name>-design.md # 设计(v2 由 finalize 派生)
|
|
192
|
-
├── <change-name>-plan.md # harness 简洁任务表,
|
|
193
|
-
├── <change-name>-implementation-detail.md # 原生自适应详细执行参考,
|
|
193
|
+
├── <change-name>-plan.md # harness 简洁任务表,execute 默认读取
|
|
194
|
+
├── <change-name>-implementation-detail.md # 原生自适应详细执行参考,execute 补充读取
|
|
194
195
|
└── <change-name>-test-scenarios.md # 测试场景表
|
|
195
196
|
```
|
|
196
197
|
|
|
@@ -293,55 +294,21 @@ status: approved
|
|
|
293
294
|
.harness/changes/<change-name>/backups/
|
|
294
295
|
```
|
|
295
296
|
|
|
296
|
-
3.
|
|
297
|
-
|
|
298
|
-
`plans/<change-name>-design.md` 由 finalize 派生(frontmatter 也由渲染器写)
|
|
299
|
-
- **legacy**:保存到 `.harness/changes/<change-name>/spec/<change-name>-design.md`
|
|
300
|
-
|
|
301
|
-
legacy 设计文档 frontmatter 格式:
|
|
302
|
-
```yaml
|
|
303
|
-
---
|
|
304
|
-
change-name: <change-name>
|
|
305
|
-
created: YYYY-MM-DD HH:mm
|
|
306
|
-
status: approved
|
|
307
|
-
source: harness-plan
|
|
308
|
-
---
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
> 如果 frontmatter 缺失,后续 run/test/review/submit/archive 不得依赖模型猜测 change-name。
|
|
297
|
+
3. **保存设计文档**:不手写文档;把审批内容填进 `meta/plan-evidence-input.json` 的
|
|
298
|
+
`approval.content`,`plans/<change-name>-design.md` 由 finalize 派生(frontmatter 也由渲染器写)。
|
|
312
299
|
|
|
313
300
|
4. **初始化结构化事件**:由阶段 0.5 的 `harness_context.py bootstrap-plan` 一次完成——它生成合规的 `<plan-run-id>`(`plan_<uuid>` 形状,必须小写字母开头:v2 identity 规则,裸 UUID 有 10/16 概率数字开头被拒)、`<attempt>`(首次为 `1`)并追加 `phase.start`,重跑复用同一身份不重复写事件。finalizer 必须复用引导返回的 `runId`/`attempt`,否则 verify 会按生命周期身份 fail-closed。同一次 plan 尝试内不得改变身份。执行日志在 `phase.end` 时由完整事件流渲染,任何阶段都不得直接用 Write/Edit 维护该投影。
|
|
314
301
|
|
|
315
|
-
5.
|
|
316
|
-
|
|
317
|
-
`plans/` 下四份 Markdown 全部由 finalize 派生
|
|
318
|
-
- **legacy**:手写并保存到(含 YAML frontmatter,含 change-name)
|
|
319
|
-
- `.harness/changes/<change-name>/plans/<change-name>-plan.md`(简洁任务表)
|
|
320
|
-
- `.harness/changes/<change-name>/plans/<change-name>-implementation-detail.md`(自适应详细执行参考)
|
|
321
|
-
- `.harness/changes/<change-name>/plans/<change-name>-test-scenarios.md`(测试场景表)
|
|
322
|
-
|
|
323
|
-
legacy 计划文件 frontmatter 格式:
|
|
324
|
-
```yaml
|
|
325
|
-
---
|
|
326
|
-
change-name: <change-name>
|
|
327
|
-
plan-name: <change-name>
|
|
328
|
-
created: YYYY-MM-DD HH:mm
|
|
329
|
-
source-spec: ../spec/<change-name>-design.md
|
|
330
|
-
implementation-detail: ./<change-name>-implementation-detail.md
|
|
331
|
-
test-scenarios: ./<change-name>-test-scenarios.md
|
|
332
|
-
status: approved
|
|
333
|
-
---
|
|
334
|
-
```
|
|
335
|
-
|
|
336
|
-
> 如果 frontmatter 缺失,后续 run 不得依赖模型猜测 change-name 或关联文件路径。
|
|
302
|
+
5. **保存计划文件**:不手写;任务填 `structured_input.tasks`、场景填 `structured_input.scenarios`,
|
|
303
|
+
`plans/` 下四份 Markdown 全部由 finalize 派生。
|
|
337
304
|
|
|
338
|
-
6. **等待用户确认后**,提示下一步:运行 `/harness-
|
|
305
|
+
6. **等待用户确认后**,提示下一步:运行 `/harness-execute`
|
|
339
306
|
|
|
340
|
-
> 后续 skill(
|
|
307
|
+
> 后续 skill(execute/review)启动时,会扫描 `.harness/changes/*/plans/`(排除 `.harness/archive/*/`)自动定位变更名目录,无需手动指定路径。同一时间最多一个未归档变更。
|
|
341
308
|
|
|
342
309
|
## 阶段 8:结束前产物完整性检查 ⚠️ 强制
|
|
343
310
|
|
|
344
|
-
> **缺任一文件 → ❌FAIL,不得宣称 plan
|
|
311
|
+
> **缺任一文件 → ❌FAIL,不得宣称 plan 完成。新 change 只走 v2;legacy 列仅用于读历史 change(0.3.0 起不再写入)。**
|
|
345
312
|
|
|
346
313
|
| 文件 | v2 | legacy |
|
|
347
314
|
|------|:---:|:---:|
|
|
@@ -358,11 +325,11 @@ status: approved
|
|
|
358
325
|
| `.harness/changes/<change>/meta/scenario-manifest.json` | ✅ | ✅ |
|
|
359
326
|
| `.harness/changes/<change>/meta/publication-journals/<op>.json`(committed) | ✅ | — |
|
|
360
327
|
| `.harness/changes/<change>/meta/plan-events.ndjson` | ✅ | — |
|
|
361
|
-
| `.harness/changes/<change>/meta/plan-finalization.json` | — |
|
|
362
|
-
| `.harness/changes/<change>/logs/execution-log.md` | — |
|
|
328
|
+
| `.harness/changes/<change>/meta/plan-finalization.json` | — | ✅(只读) |
|
|
329
|
+
| `.harness/changes/<change>/logs/execution-log.md` | — | ✅(只读) |
|
|
363
330
|
| `.harness/changes/<change>/events.ndjson` | ✅ | ✅ |
|
|
364
331
|
|
|
365
|
-
|
|
332
|
+
历史 change 的 legacy `plan-finalization.json.files` 必须完整列出 design、plan、implementation-detail、test-scenarios、gate-policy、worktree 六项标准输入。`harness_plan_finalize.py verify`(唯一保留子命令)对缺项、重复项、越界路径以及 symlink/junction/reparse point 一律 fail-closed;不得通过删减收据文件集后重算哈希来绕过完整性检查。
|
|
366
333
|
|
|
367
334
|
### 两套分类模型的边界(别把它们当同一件事)
|
|
368
335
|
|
|
@@ -371,15 +338,17 @@ legacy 的 `plan-finalization.json.files` 必须完整列出 design、plan、imp
|
|
|
371
338
|
| 取值 | `fast` / `standard` / `full` | `quick` / `standard` / `assurance` |
|
|
372
339
|
| 写到哪 | `meta/gate-policy.json`(`schemaVersion:1`,camelCase) | `meta/plan-profile.json`(artifact 包装体,snake_case) |
|
|
373
340
|
| 谁写 | `harness_gate.py classify`(阶段 0.5 由 bootstrap-plan 调起) | `hunter-harness plan finalize`(阶段 8 发布) |
|
|
374
|
-
| 地位 |
|
|
375
|
-
| 输入 | 计划文档的「风险等级」正则 + capabilityGates 信号 |
|
|
341
|
+
| 地位 | **classify 工作副本**:0.5 分类 + 0.6 阶段计划落盘处;未发布的 change 由它驱动门禁 | **门禁权威**:发布时把工作副本的门禁字段(DAG/validations/tier/source)并入 content 并哈希绑定;`harness_paths.load_change_gate_policy` v2 优先、工作副本回退 |
|
|
342
|
+
| 输入 | 计划文档的「风险等级」正则 + capabilityGates 信号 | `risk_signals`(手填与命令推断取并集)+ 真实仓库 capabilities |
|
|
376
343
|
|
|
377
|
-
**两者不共用文件名。** v2 发布对 `binding.ownership_paths` 逐个原子覆盖,若派生视图占用 `meta/gate-policy.json`,阶段 8 会把 classify 写的那份换成包装体,之后 `gate begin --phase
|
|
344
|
+
**两者不共用文件名。** v2 发布对 `binding.ownership_paths` 逐个原子覆盖,若派生视图占用 `meta/gate-policy.json`,阶段 8 会把 classify 写的那份换成包装体,之后 `gate begin --phase execute` 直接 `POLICY_LOAD_FAILED`——`harness_gate.effective_workflow_policy` 读 `schemaVersion` 拿不到就 raise。
|
|
378
345
|
|
|
379
|
-
|
|
346
|
+
**派生视图的两条前置缺陷已接通**(2026-08,接通 ≠ 门禁权威切换,权威仍是 Python gate-policy):
|
|
380
347
|
|
|
381
|
-
1. `plan evidence-pack`
|
|
382
|
-
2.
|
|
348
|
+
1. `risk_signals` 不再是纯手填。`plan evidence-pack` 按 `structured_input.tasks[].affected_paths`(主源)与 `git status --porcelain --untracked-files=all`(次源)经 marker 表推断信号(与 `harness_gate.py` classify 同一张表),**与手填取并集**——推断是安全地板,手填不能删除推断项;逐条信号在 `pack.context.signal_provenance` 标注 `declared / inferred / declared+inferred`。
|
|
349
|
+
2. `capabilities` 由命令真实探测:`is_git`(`rev-parse --is-inside-work-tree`)、`has_remote`(`git remote` 非空)、`uses_worktree`(`--git-dir` ≠ `--git-common-dir`,或 `machine.worktree_policy=required`);探针不可用(非 git 目录/无 git)则全 false 并标注 `provenance: "unavailable"`。阶段 0.6 `configure-plan` 落的 `meta/gate-policy.json` `plannedPhases` 也会被读取(顶层 `plannedPhases` 为字符串数组才视为权威形状,v2 包装体/坏 JSON 一律回退派生),可选阶段照它取舍,required 阶段缺失时保留并在 stdout 告警 `phase_set_required_retained`,来源标注 `phase_set_source: gate-policy | derived`。
|
|
350
|
+
|
|
351
|
+
**权威已切换(2026-08)**:`meta/plan-profile.json` 是门禁权威。发布时 `plan evidence-pack` 把工作副本的 `requiredGateDag`/`requiredValidationsByPhase`/`tier`/`source` 并入 v2 gate_policy content(白名单键,哈希绑定),`harness_paths.load_change_gate_policy` 在 gate/context/phase/archive 各处统一 v2 优先:快照完整(含 `mode`/`planned_phases`/`required_gate_dag`/`required_validations_by_phase`)即以它为准;0.2.92-era 的不完整快照与未发布的 change 回退工作副本。两者并存且 `plannedPhases`(canonical 去重后)不一致 → drift 报告,以 v2 为准——发布后改写工作副本本身就是异常。provenance 标注只进 stdout 与 `pack.context`,不进任何哈希身份字段。
|
|
383
352
|
|
|
384
353
|
`meta/implementation-checkpoints.json` 的情况不同:v2 包装体里的 `content.foundation_gate` 信息是够的,所以门禁在**只读侧**解包(`checkpoint_status` 同时认 `checkpoints[]`、顶层 `foundationGate` 与 v2 包装体三种形状),不改文件名。注意写回路径(`gate checkpoint approve`)仍然操作原始文档——用归一化结构覆盖会破坏 v2 产物的哈希绑定。
|
|
385
354
|
|
|
@@ -412,7 +381,7 @@ npx hunter-harness plan finalize --input .harness/changes/<cn>/meta/plan-evidenc
|
|
|
412
381
|
| `change_key` | `replace-with-change-name` | 真实 change-name(kebab-case:`^[a-z0-9]+(-[a-z0-9]+)*$`) |
|
|
413
382
|
| `context.run_id` | `plan_replace-with-your-plan-run-id` | 阶段 0.5 生成、`phase.start` 已用的**同一个** plan-run-id |
|
|
414
383
|
| `evidence_sources[].content_hash` | `sha256:deadbeef…` | 证据源内容的真实 sha256(校验器显式拒绝全 0) |
|
|
415
|
-
| `risk_signals` | `["production_code"]` |
|
|
384
|
+
| `risk_signals` | `["production_code"]` | 可留空数组:命令按 affected_paths 与 git status 推断并与手填取并集;手填只增不减 |
|
|
416
385
|
|
|
417
386
|
**容易踩的硬约束**(违反时命令会给 `field_path`,不必再猜):
|
|
418
387
|
|
|
@@ -462,36 +431,29 @@ npx hunter-harness plan finalize --input .harness/changes/<cn>/meta/plan-evidenc
|
|
|
462
431
|
- **证据包**(`plan-evidence.json`)是命令推导的产物(trusted/publication/context/baseline),不得手改;任何字段变化必须改自然输入后重跑 evidence-pack。
|
|
463
432
|
- **成功语义**:finalize exit 0 且 `code:"PLAN_FINALIZED"`。落盘事实 = 八 target(plans/*.md ×4 + meta/*.json ×4)+ `meta/publication-journals/<op>.json`(状态 committed)+ `meta/plan-events.ndjson`(artifact_published/phase_ended)。确定性门失败 exit 1 且 `code:"PLAN_FINALIZE_DETERMINISTIC_FAILED"` 附 findings——此时必须回到对应阶段修正规划内容,**不得**手改证据包或 staged 内容绕过。
|
|
464
433
|
- **验证**:journal `state==="committed"` + 八 target 存在 + plan-events.ndjson 含两类终态事件;不得手工补写任何一项。
|
|
465
|
-
- **legacy
|
|
466
|
-
- **回退**:v2 自然输入不完整(如缺真实审批记录)时才允许走 Python finalizer(legacy 路径);同一次发布不得两条路径混用。
|
|
467
|
-
|
|
468
|
-
### 发布后修订计划(republish)
|
|
469
|
-
|
|
470
|
-
计划发布后又要改产物,是**正常且高频**的情况——用户看完计划补一个回归场景、修正一条任务、调整验收标准。这时不要与哈希守卫搏斗:
|
|
434
|
+
- **legacy 收据**:v2 路径不写 `plan-finalization.json`;消费方若读历史 legacy receipt,`harness_plan_finalize.py verify` 保持可读。0.3.0 起 v2 无 legacy 回退——自然输入不完整先补齐(例如补真实审批记录),不得走已删除的 Python finalizer。
|
|
471
435
|
|
|
472
|
-
|
|
473
|
-
python <skills-root>/scripts/harness_plan_finalize.py republish \
|
|
474
|
-
--change-dir ".harness/changes/<cn>" --staging-dir ".harness/changes/<cn>/runtime/plan-staging" \
|
|
475
|
-
--change <cn> --run-id "plan_$(uuidgen)" --reason "<为什么要改>" --json
|
|
476
|
-
```
|
|
436
|
+
### 发布后修订计划(v2 重跑流)
|
|
477
437
|
|
|
478
|
-
|
|
438
|
+
计划发布后又要改产物,是**正常且高频**的情况——用户看完计划补一个回归场景、修正一条任务、调整验收标准。这时不要与哈希守卫搏斗,按三步重跑修订流:
|
|
479
439
|
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
440
|
+
1. 改 `meta/plan-evidence-input.json`(自然输入是唯一可编辑面)。
|
|
441
|
+
2. 重跑 `npx hunter-harness plan evidence-pack --input <input> --output <pack>`:
|
|
442
|
+
- `context.attempt` 递增(1→2→…);
|
|
443
|
+
- `expected_baseline` 置 `present`,带上次发布的 `manifest_hash` 与 `generation`
|
|
444
|
+
(读 `meta/plan-finalization-transactions/` 最新事务的对应字段)。
|
|
445
|
+
3. 再跑 `npx hunter-harness plan finalize --input <pack>`。
|
|
486
446
|
|
|
487
|
-
|
|
447
|
+
新 attempt + 换收据 + 重新派生 `scenario-manifest.json` 与 `implementation-checkpoints.json`
|
|
448
|
+
一次完成;事务链天然保留历史(每次 finalize 一条事务记录),修订全程可审计。
|
|
449
|
+
(0.3.0 前 legacy change 用的 `republish` 子命令已删除;历史收据只读。)
|
|
488
450
|
|
|
489
|
-
|
|
451
|
+
⚠️ **绝对不要手改 `meta/scenario-manifest.json`**。它是 finalizer 从 `test-scenarios.md` 派生的产物,手改会造成真实漂移:`verify` 报 `ARTIFACT_HASH_DRIFT`,execute 阶段 `validate_plan_handoff` 也会记 WARN。重跑修订流会重新派生它,这才是唯一正确入口。
|
|
490
452
|
|
|
491
453
|
### Plan 结束行为规则
|
|
492
454
|
|
|
493
|
-
- **禁止询问执行模式**:Subagent-Driven / Inline Execution 属于 /harness-
|
|
494
|
-
- 最终输出只提示产出物路径和下一步 `/harness-
|
|
455
|
+
- **禁止询问执行模式**:Subagent-Driven / Inline Execution 属于 /harness-execute 阶段
|
|
456
|
+
- 最终输出只提示产出物路径和下一步 `/harness-execute`
|
|
495
457
|
- `docs/superpowers/` 不得作为最终产物路径出现在输出中
|
|
496
458
|
|
|
497
459
|
## C2 升级口:跨 provider 评审(显式、非默认)
|
|
@@ -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=f371fd8f594f8477; overlay=java; agent=codebuddy; 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=f371fd8f594f8477; overlay=java; agent=codebuddy; 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=f371fd8f594f8477; overlay=java; agent=codebuddy; do not edit -->
|
|
8
8
|
# harness-review — 代码审查
|
|
9
9
|
|
|
10
10
|
## Purpose
|
|
@@ -15,7 +15,7 @@ description: 6维度代码审查(架构/安全/规范/兼容/测试/性能)
|
|
|
15
15
|
|
|
16
16
|
仅当用户显式调用 `/harness-review` 时执行。test 阶段结束后**不自动**进入本阶段;用户口头提到"审查/review"而未调用本 skill 时,先确认是否走 Harness 审查阶段。
|
|
17
17
|
|
|
18
|
-
**单阶段原则**:review 关门(报告 + fixback 产出)后必须停止并交还用户,仅提示下一步可执行 `/harness-
|
|
18
|
+
**单阶段原则**:review 关门(报告 + fixback 产出)后必须停止并交还用户,仅提示下一步可执行 `/harness-execute --fixback`(有待修项)或 `/harness-submit`;禁止自动接续执行。
|
|
19
19
|
|
|
20
20
|
## Inputs
|
|
21
21
|
|
|
@@ -169,7 +169,7 @@ python <skills-root>/scripts/harness_events.py append --change-dir ".harness/cha
|
|
|
169
169
|
|
|
170
170
|
> **Task 4 §6.1 写入契约**:普通 `append` = 加锁 -> 追加一行 -> fsync -> 解锁,**不 load 历史、不渲染**(O(1),跨进程锁 `events.ndjson.lock`,UUID 用完整 `uuid4().hex` 无需去重扫描)。仅 `--type phase.end` append 在追加成功后渲染一次 `execution-log.md`;显式 `harness_events.py render` 随时从完整 events 重建;`harness_archive.py finalize` 在 collect 前强制 render 一次。高频 command append 期间 log 可能滞后,phase 边界保持最新。
|
|
171
171
|
|
|
172
|
-
每个阶段的 `phase.start` 与对应 `phase.end` 必须复用同一 `--run-id` / `--attempt`;阶段结束必须写 `--status OK|WARN|FAIL|BLOCKED`。重试同一阶段时生成新的 run-id 并增加 `--attempt <n>`,不得覆盖或伪装成一次执行。**`attempt` 按 phase 全局递增,不是按 run-id**:一个 run-id 只绑定一个 attempt,重试必须「新 run-id + 下一个 attempt」两者同时换,只换其一会撞 `EVENT_ATTEMPT_CONFLICT` 或 `PHASE_ALREADY_CLOSED
|
|
172
|
+
每个阶段的 `phase.start` 与对应 `phase.end` 必须复用同一 `--run-id` / `--attempt`;阶段结束必须写 `--status OK|WARN|FAIL|BLOCKED`。重试同一阶段时生成新的 run-id 并增加 `--attempt <n>`,不得覆盖或伪装成一次执行。**`attempt` 按 phase 全局递增,不是按 run-id**:一个 run-id 只绑定一个 attempt,重试必须「新 run-id + 下一个 attempt」两者同时换,只换其一会撞 `EVENT_ATTEMPT_CONFLICT` 或 `PHASE_ALREADY_CLOSED`。已发布 plan 的修订通过重跑 `plan evidence-pack` + `plan finalize` 分配新 attempt(`harness_plan_finalize.py republish` 已于 0.3.0 移除)。
|
|
173
173
|
|
|
174
174
|
阶段跑得久(plan/run 常见)时用 `harness_context.py renew --project . --change <cn> --executor <tool>` 续租;租约到期本身不再阻断 `close`(同一 owner 的过期租约不构成冲突,收据里记 `leaseLapsed`),但续租能让 `view` 的状态如实反映在跑。跨工具继续执行时写 `--executor-tool <codex|claude-code|codebuddy|cursor>`,并在接棒事件写 `--handoff-from-tool` / `--handoff-reason`;也可由 `HUNTER_HARNESS_TOOL/AGENT/MODEL/RUN_ID` 环境变量统一注入。
|
|
175
175
|
> 片段:logging · phase=`review` · 事件:phase/decision/verification/issue/artifact
|
|
@@ -34,7 +34,7 @@ description: harness-review 的原生修复反馈协议。内化 receiving-code-
|
|
|
34
34
|
| 风险说明 | 说明为什么值得处理 |
|
|
35
35
|
| 推荐修复 | 可执行的修复方向,不写空泛建议 |
|
|
36
36
|
| 验证方式 | 构建、测试、场景编号或人工确认方式 |
|
|
37
|
-
| 修复动作 | `code` / `manual` / `workflow`;只有 `code` 会进入 `/harness-
|
|
37
|
+
| 修复动作 | `code` / `manual` / `workflow`;只有 `code` 会进入 `/harness-execute --fixback` |
|
|
38
38
|
| submit 影响 | 默认 advisory;仅 strict-review-gate=true 时标记阻塞 |
|
|
39
39
|
|
|
40
40
|
如果没有 RED/YELLOW,必须明确写:
|
|
@@ -3,9 +3,15 @@ name: harness-run
|
|
|
3
3
|
description: 按变更簇执行 TDD 编码循环(RED→GREEN→REFACTOR→编译验证),逐变更簇实现计划中的任务。仅当用户显式调用
|
|
4
4
|
/harness-run 时使用;不得因用户提到编码/实现就自动触发,也不得被其他阶段 skill 自动接续。
|
|
5
5
|
---
|
|
6
|
-
<!-- generated by harness_deploy.py; core=
|
|
6
|
+
<!-- generated by harness_deploy.py; core=f371fd8f594f8477; overlay=java; agent=codebuddy; do not edit -->
|
|
7
7
|
# harness-run — 需求编码
|
|
8
8
|
|
|
9
|
+
> **2026-08 阶段合并**:原 `run`(编码)与 `test`(验证)合并为单一 `execute` 阶段,
|
|
10
|
+
> 统一入口为 **`/harness-execute`**(`harness/harness-execute/SKILL.md`)。本 skill 作为
|
|
11
|
+
> 别名保留,frontmatter `name` 不变、内容照旧可用;门禁入参 `--phase run` 经
|
|
12
|
+
> `LEGACY_PHASE_ALIASES` 归一为 execute。别名至少保留一个 minor 版本,退役时间见
|
|
13
|
+
> `docs/harness-improvement-roadmap/`。下文出现的阶段名 `run`/`test` 均按别名解析。
|
|
14
|
+
|
|
9
15
|
## Purpose
|
|
10
16
|
|
|
11
17
|
基于 plan + test-scenarios,按**变更簇**执行 TDD(RED→GREEN→REFACTOR→构建验证),写入 verification-ledger。负责 worktree 创建/切换(见 worktree-gate)。
|
|
@@ -194,7 +200,7 @@ python <skills-root>/scripts/harness_events.py append --change-dir ".harness/cha
|
|
|
194
200
|
|
|
195
201
|
> **Task 4 §6.1 写入契约**:普通 `append` = 加锁 -> 追加一行 -> fsync -> 解锁,**不 load 历史、不渲染**(O(1),跨进程锁 `events.ndjson.lock`,UUID 用完整 `uuid4().hex` 无需去重扫描)。仅 `--type phase.end` append 在追加成功后渲染一次 `execution-log.md`;显式 `harness_events.py render` 随时从完整 events 重建;`harness_archive.py finalize` 在 collect 前强制 render 一次。高频 command append 期间 log 可能滞后,phase 边界保持最新。
|
|
196
202
|
|
|
197
|
-
每个阶段的 `phase.start` 与对应 `phase.end` 必须复用同一 `--run-id` / `--attempt`;阶段结束必须写 `--status OK|WARN|FAIL|BLOCKED`。重试同一阶段时生成新的 run-id 并增加 `--attempt <n>`,不得覆盖或伪装成一次执行。**`attempt` 按 phase 全局递增,不是按 run-id**:一个 run-id 只绑定一个 attempt,重试必须「新 run-id + 下一个 attempt」两者同时换,只换其一会撞 `EVENT_ATTEMPT_CONFLICT` 或 `PHASE_ALREADY_CLOSED
|
|
203
|
+
每个阶段的 `phase.start` 与对应 `phase.end` 必须复用同一 `--run-id` / `--attempt`;阶段结束必须写 `--status OK|WARN|FAIL|BLOCKED`。重试同一阶段时生成新的 run-id 并增加 `--attempt <n>`,不得覆盖或伪装成一次执行。**`attempt` 按 phase 全局递增,不是按 run-id**:一个 run-id 只绑定一个 attempt,重试必须「新 run-id + 下一个 attempt」两者同时换,只换其一会撞 `EVENT_ATTEMPT_CONFLICT` 或 `PHASE_ALREADY_CLOSED`。已发布 plan 的修订通过重跑 `plan evidence-pack` + `plan finalize` 分配新 attempt(`harness_plan_finalize.py republish` 已于 0.3.0 移除)。
|
|
198
204
|
|
|
199
205
|
阶段跑得久(plan/run 常见)时用 `harness_context.py renew --project . --change <cn> --executor <tool>` 续租;租约到期本身不再阻断 `close`(同一 owner 的过期租约不构成冲突,收据里记 `leaseLapsed`),但续租能让 `view` 的状态如实反映在跑。跨工具继续执行时写 `--executor-tool <codex|claude-code|codebuddy|cursor>`,并在接棒事件写 `--handoff-from-tool` / `--handoff-reason`;也可由 `HUNTER_HARNESS_TOOL/AGENT/MODEL/RUN_ID` 环境变量统一注入。
|
|
200
206
|
> 片段:logging · phase=`run`
|
|
@@ -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=f371fd8f594f8477; overlay=java; agent=codebuddy; do not edit -->
|
|
7
7
|
# harness-submit — 最终提交(含 worktree 合并)
|
|
8
8
|
|
|
9
9
|
## Purpose
|
|
@@ -183,7 +183,7 @@ python <skills-root>/scripts/harness_events.py append --change-dir ".harness/cha
|
|
|
183
183
|
|
|
184
184
|
> **Task 4 §6.1 写入契约**:普通 `append` = 加锁 -> 追加一行 -> fsync -> 解锁,**不 load 历史、不渲染**(O(1),跨进程锁 `events.ndjson.lock`,UUID 用完整 `uuid4().hex` 无需去重扫描)。仅 `--type phase.end` append 在追加成功后渲染一次 `execution-log.md`;显式 `harness_events.py render` 随时从完整 events 重建;`harness_archive.py finalize` 在 collect 前强制 render 一次。高频 command append 期间 log 可能滞后,phase 边界保持最新。
|
|
185
185
|
|
|
186
|
-
每个阶段的 `phase.start` 与对应 `phase.end` 必须复用同一 `--run-id` / `--attempt`;阶段结束必须写 `--status OK|WARN|FAIL|BLOCKED`。重试同一阶段时生成新的 run-id 并增加 `--attempt <n>`,不得覆盖或伪装成一次执行。**`attempt` 按 phase 全局递增,不是按 run-id**:一个 run-id 只绑定一个 attempt,重试必须「新 run-id + 下一个 attempt」两者同时换,只换其一会撞 `EVENT_ATTEMPT_CONFLICT` 或 `PHASE_ALREADY_CLOSED
|
|
186
|
+
每个阶段的 `phase.start` 与对应 `phase.end` 必须复用同一 `--run-id` / `--attempt`;阶段结束必须写 `--status OK|WARN|FAIL|BLOCKED`。重试同一阶段时生成新的 run-id 并增加 `--attempt <n>`,不得覆盖或伪装成一次执行。**`attempt` 按 phase 全局递增,不是按 run-id**:一个 run-id 只绑定一个 attempt,重试必须「新 run-id + 下一个 attempt」两者同时换,只换其一会撞 `EVENT_ATTEMPT_CONFLICT` 或 `PHASE_ALREADY_CLOSED`。已发布 plan 的修订通过重跑 `plan evidence-pack` + `plan finalize` 分配新 attempt(`harness_plan_finalize.py republish` 已于 0.3.0 移除)。
|
|
187
187
|
|
|
188
188
|
阶段跑得久(plan/run 常见)时用 `harness_context.py renew --project . --change <cn> --executor <tool>` 续租;租约到期本身不再阻断 `close`(同一 owner 的过期租约不构成冲突,收据里记 `leaseLapsed`),但续租能让 `view` 的状态如实反映在跑。跨工具继续执行时写 `--executor-tool <codex|claude-code|codebuddy|cursor>`,并在接棒事件写 `--handoff-from-tool` / `--handoff-reason`;也可由 `HUNTER_HARNESS_TOOL/AGENT/MODEL/RUN_ID` 环境变量统一注入。
|
|
189
189
|
> 片段:logging · phase=`submit`/`merge`
|
|
@@ -117,7 +117,7 @@ python <skills-root>/scripts/harness_ledger.py can-reuse `
|
|
|
117
117
|
|
|
118
118
|
**review 报告**(参考性):如果 `.harness/changes/<change-name>/reports/review/review-report-*.md` 存在(旧路径 `reviews/` 兼容),可读取并展示摘要(如“review 报告:RED 高风险建议 N 个,YELLOW 中低风险建议 M 个,仅供参考”),但不得因 review 结果阻塞提交。
|
|
119
119
|
|
|
120
|
-
**review fixback**(参考性):如果 `.harness/changes/<change-name>/reports/review/fixback-*.md` 存在,展示最新 fixback 摘要并提示“可回到 `/harness-
|
|
120
|
+
**review fixback**(参考性):如果 `.harness/changes/<change-name>/reports/review/fixback-*.md` 存在,展示最新 fixback 摘要并提示“可回到 `/harness-execute --fixback` 处理”;除非 `review.strict-review-gate=true` 且存在 RED,否则不得阻塞提交。
|
|
121
121
|
|
|
122
122
|
## 步骤 3:.gitignore 检查 + 暂存业务文件 ⚠️ 强制阻断
|
|
123
123
|
|
|
@@ -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=f371fd8f594f8477; overlay=java; agent=codebuddy; do not edit -->
|
|
8
8
|
# harness-sync
|
|
9
9
|
|
|
10
10
|
## Purpose
|
|
@@ -3,9 +3,18 @@ name: harness-test
|
|
|
3
3
|
description: 测试执行:读取场景表,执行单元测试+API接口测试+数据兼容验证,输出测试报告。仅当用户显式调用 /harness-test
|
|
4
4
|
时使用;不得在 run 结束后自动接续执行。
|
|
5
5
|
---
|
|
6
|
-
<!-- generated by harness_deploy.py; core=
|
|
6
|
+
<!-- generated by harness_deploy.py; core=f371fd8f594f8477; overlay=java; agent=codebuddy; do not edit -->
|
|
7
7
|
# harness-test — 测试执行
|
|
8
8
|
|
|
9
|
+
> **2026-08 阶段合并**:原 `run`(编码)与 `test`(验证)合并为单一 `execute` 阶段,
|
|
10
|
+
> 统一入口为 **`/harness-execute`**(`harness/harness-execute/SKILL.md`)。本 skill 作为
|
|
11
|
+
> 别名保留,frontmatter `name` 不变、内容照旧可用;门禁入参 `--phase test` 经
|
|
12
|
+
> `LEGACY_PHASE_ALIASES` 归一为 execute。别名至少保留一个 minor 版本,退役时间见
|
|
13
|
+
> `docs/harness-improvement-roadmap/`。下文出现的阶段名 `run`/`test` 均按别名解析。
|
|
14
|
+
>
|
|
15
|
+
> 合并语义注意:execute 关门时 C9 场景覆盖要求全部 `ownerPhase=execute` 场景有通过
|
|
16
|
+
> receipt(包括本属 test 的接口/兼容场景);`ownerPhase=review`/`submit` 仍按计划顺延。
|
|
17
|
+
|
|
9
18
|
## Purpose
|
|
10
19
|
|
|
11
20
|
读取测试场景表,逐条执行单元测试和接口测试,验证代码变更的正确性,输出测试报告。
|
|
@@ -249,7 +258,7 @@ python <skills-root>/scripts/harness_events.py append --change-dir ".harness/cha
|
|
|
249
258
|
|
|
250
259
|
> **Task 4 §6.1 写入契约**:普通 `append` = 加锁 -> 追加一行 -> fsync -> 解锁,**不 load 历史、不渲染**(O(1),跨进程锁 `events.ndjson.lock`,UUID 用完整 `uuid4().hex` 无需去重扫描)。仅 `--type phase.end` append 在追加成功后渲染一次 `execution-log.md`;显式 `harness_events.py render` 随时从完整 events 重建;`harness_archive.py finalize` 在 collect 前强制 render 一次。高频 command append 期间 log 可能滞后,phase 边界保持最新。
|
|
251
260
|
|
|
252
|
-
每个阶段的 `phase.start` 与对应 `phase.end` 必须复用同一 `--run-id` / `--attempt`;阶段结束必须写 `--status OK|WARN|FAIL|BLOCKED`。重试同一阶段时生成新的 run-id 并增加 `--attempt <n>`,不得覆盖或伪装成一次执行。**`attempt` 按 phase 全局递增,不是按 run-id**:一个 run-id 只绑定一个 attempt,重试必须「新 run-id + 下一个 attempt」两者同时换,只换其一会撞 `EVENT_ATTEMPT_CONFLICT` 或 `PHASE_ALREADY_CLOSED
|
|
261
|
+
每个阶段的 `phase.start` 与对应 `phase.end` 必须复用同一 `--run-id` / `--attempt`;阶段结束必须写 `--status OK|WARN|FAIL|BLOCKED`。重试同一阶段时生成新的 run-id 并增加 `--attempt <n>`,不得覆盖或伪装成一次执行。**`attempt` 按 phase 全局递增,不是按 run-id**:一个 run-id 只绑定一个 attempt,重试必须「新 run-id + 下一个 attempt」两者同时换,只换其一会撞 `EVENT_ATTEMPT_CONFLICT` 或 `PHASE_ALREADY_CLOSED`。已发布 plan 的修订通过重跑 `plan evidence-pack` + `plan finalize` 分配新 attempt(`harness_plan_finalize.py republish` 已于 0.3.0 移除)。
|
|
253
262
|
|
|
254
263
|
阶段跑得久(plan/run 常见)时用 `harness_context.py renew --project . --change <cn> --executor <tool>` 续租;租约到期本身不再阻断 `close`(同一 owner 的过期租约不构成冲突,收据里记 `leaseLapsed`),但续租能让 `view` 的状态如实反映在跑。跨工具继续执行时写 `--executor-tool <codex|claude-code|codebuddy|cursor>`,并在接棒事件写 `--handoff-from-tool` / `--handoff-reason`;也可由 `HUNTER_HARNESS_TOOL/AGENT/MODEL/RUN_ID` 环境变量统一注入。
|
|
255
264
|
> 片段:logging · phase=`test` · 事件:phase/command/verification/decision/issue/artifact
|