@hunter-harness/workflow-harness 0.2.3 → 0.2.5
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 +12 -11
- package/harness/bundles/general/claude-code/harness-archive/SKILL.md +7 -9
- package/harness/bundles/general/claude-code/harness-archive/checklist.md +4 -4
- package/harness/bundles/general/claude-code/harness-archive/reference.md +3 -5
- package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +2 -2
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +2 -2
- package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +10 -16
- package/harness/bundles/general/claude-code/harness-plan/SKILL.md +14 -10
- package/harness/bundles/general/claude-code/harness-plan/checklist.md +28 -13
- package/harness/bundles/general/claude-code/harness-plan/protocols.md +10 -3
- package/harness/bundles/general/claude-code/harness-plan/reference.md +9 -23
- package/harness/bundles/general/claude-code/harness-review/SKILL.md +2 -2
- package/harness/bundles/general/claude-code/harness-run/SKILL.md +16 -4
- package/harness/bundles/general/claude-code/harness-run/checklist.md +7 -3
- package/harness/bundles/general/claude-code/harness-run/protocols.md +3 -2
- package/harness/bundles/general/claude-code/harness-run/reference.md +3 -9
- package/harness/bundles/general/claude-code/harness-submit/SKILL.md +6 -4
- package/harness/bundles/general/claude-code/harness-submit/checklist.md +10 -1
- package/harness/bundles/general/claude-code/harness-sync/SKILL.md +2 -2
- package/harness/bundles/general/claude-code/harness-test/SKILL.md +15 -3
- package/harness/bundles/general/claude-code/harness-test/checklist.md +4 -0
- package/harness/bundles/general/claude-code/harness-test/reference.md +4 -4
- package/harness/bundles/general/claude-code/protocols/archive-report-protocol.md +2 -4
- package/harness/bundles/general/claude-code/protocols/ledger-protocol.md +7 -15
- package/harness/bundles/general/claude-code/scripts/harness_ledger.py +111 -5
- package/harness/bundles/general/claude-code/scripts/harness_profile.py +29 -1
- package/harness/bundles/general/claude-code/scripts/harness_test_guard.py +502 -0
- package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/general/codebuddy/README.md +12 -11
- package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +7 -9
- package/harness/bundles/general/codebuddy/harness-archive/checklist.md +4 -4
- package/harness/bundles/general/codebuddy/harness-archive/reference.md +3 -5
- package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +2 -2
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +2 -2
- package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +10 -16
- package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +13 -9
- package/harness/bundles/general/codebuddy/harness-plan/checklist.md +28 -13
- package/harness/bundles/general/codebuddy/harness-plan/protocols.md +10 -3
- package/harness/bundles/general/codebuddy/harness-plan/reference.md +9 -23
- package/harness/bundles/general/codebuddy/harness-review/SKILL.md +2 -2
- package/harness/bundles/general/codebuddy/harness-run/SKILL.md +16 -4
- package/harness/bundles/general/codebuddy/harness-run/checklist.md +7 -3
- package/harness/bundles/general/codebuddy/harness-run/protocols.md +3 -2
- package/harness/bundles/general/codebuddy/harness-run/reference.md +3 -9
- package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +6 -4
- package/harness/bundles/general/codebuddy/harness-submit/checklist.md +10 -1
- package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +2 -2
- package/harness/bundles/general/codebuddy/harness-test/SKILL.md +15 -3
- package/harness/bundles/general/codebuddy/harness-test/checklist.md +4 -0
- package/harness/bundles/general/codebuddy/harness-test/reference.md +4 -4
- package/harness/bundles/general/codebuddy/protocols/archive-report-protocol.md +2 -4
- package/harness/bundles/general/codebuddy/protocols/ledger-protocol.md +7 -15
- package/harness/bundles/general/codebuddy/scripts/harness_ledger.py +111 -5
- package/harness/bundles/general/codebuddy/scripts/harness_profile.py +29 -1
- package/harness/bundles/general/codebuddy/scripts/harness_test_guard.py +502 -0
- package/harness/bundles/general/codex/.harness-build.json +1 -1
- package/harness/bundles/general/codex/README.md +12 -11
- package/harness/bundles/general/codex/harness-archive/SKILL.md +7 -9
- package/harness/bundles/general/codex/harness-archive/checklist.md +4 -4
- package/harness/bundles/general/codex/harness-archive/reference.md +3 -5
- package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +2 -2
- package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +2 -2
- package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +10 -16
- package/harness/bundles/general/codex/harness-plan/SKILL.md +13 -9
- package/harness/bundles/general/codex/harness-plan/checklist.md +28 -13
- package/harness/bundles/general/codex/harness-plan/protocols.md +10 -3
- package/harness/bundles/general/codex/harness-plan/reference.md +9 -23
- package/harness/bundles/general/codex/harness-review/SKILL.md +2 -2
- package/harness/bundles/general/codex/harness-run/SKILL.md +16 -4
- package/harness/bundles/general/codex/harness-run/checklist.md +7 -3
- package/harness/bundles/general/codex/harness-run/protocols.md +3 -2
- package/harness/bundles/general/codex/harness-run/reference.md +3 -9
- package/harness/bundles/general/codex/harness-submit/SKILL.md +6 -4
- package/harness/bundles/general/codex/harness-submit/checklist.md +10 -1
- package/harness/bundles/general/codex/harness-sync/SKILL.md +2 -2
- package/harness/bundles/general/codex/harness-test/SKILL.md +15 -3
- package/harness/bundles/general/codex/harness-test/checklist.md +4 -0
- package/harness/bundles/general/codex/harness-test/reference.md +4 -4
- package/harness/bundles/general/codex/protocols/archive-report-protocol.md +2 -4
- package/harness/bundles/general/codex/protocols/ledger-protocol.md +7 -15
- package/harness/bundles/general/codex/scripts/harness_ledger.py +111 -5
- package/harness/bundles/general/codex/scripts/harness_profile.py +29 -1
- package/harness/bundles/general/codex/scripts/harness_test_guard.py +502 -0
- package/harness/bundles/general/cursor/.harness-build.json +1 -1
- package/harness/bundles/general/cursor/README.md +12 -11
- package/harness/bundles/general/cursor/harness-archive/SKILL.md +7 -9
- package/harness/bundles/general/cursor/harness-archive/checklist.md +4 -4
- package/harness/bundles/general/cursor/harness-archive/reference.md +3 -5
- package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +2 -2
- package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +2 -2
- package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +10 -16
- package/harness/bundles/general/cursor/harness-plan/SKILL.md +13 -9
- package/harness/bundles/general/cursor/harness-plan/checklist.md +28 -13
- package/harness/bundles/general/cursor/harness-plan/protocols.md +10 -3
- package/harness/bundles/general/cursor/harness-plan/reference.md +9 -23
- package/harness/bundles/general/cursor/harness-review/SKILL.md +2 -2
- package/harness/bundles/general/cursor/harness-run/SKILL.md +16 -4
- package/harness/bundles/general/cursor/harness-run/checklist.md +7 -3
- package/harness/bundles/general/cursor/harness-run/protocols.md +3 -2
- package/harness/bundles/general/cursor/harness-run/reference.md +3 -9
- package/harness/bundles/general/cursor/harness-submit/SKILL.md +6 -4
- package/harness/bundles/general/cursor/harness-submit/checklist.md +10 -1
- package/harness/bundles/general/cursor/harness-sync/SKILL.md +2 -2
- package/harness/bundles/general/cursor/harness-test/SKILL.md +15 -3
- package/harness/bundles/general/cursor/harness-test/checklist.md +4 -0
- package/harness/bundles/general/cursor/harness-test/reference.md +4 -4
- package/harness/bundles/general/cursor/protocols/archive-report-protocol.md +2 -4
- package/harness/bundles/general/cursor/protocols/ledger-protocol.md +7 -15
- package/harness/bundles/general/cursor/scripts/harness_ledger.py +111 -5
- package/harness/bundles/general/cursor/scripts/harness_profile.py +29 -1
- package/harness/bundles/general/cursor/scripts/harness_test_guard.py +502 -0
- package/harness/bundles/java/claude-code/.harness-build.json +1 -1
- package/harness/bundles/java/claude-code/README.md +12 -11
- package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-archive/SKILL.md +7 -9
- package/harness/bundles/java/claude-code/harness-archive/checklist.md +4 -4
- package/harness/bundles/java/claude-code/harness-archive/reference.md +3 -5
- package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +10 -16
- package/harness/bundles/java/claude-code/harness-package/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-plan/SKILL.md +14 -10
- package/harness/bundles/java/claude-code/harness-plan/checklist.md +28 -13
- package/harness/bundles/java/claude-code/harness-plan/protocols.md +10 -3
- package/harness/bundles/java/claude-code/harness-plan/reference.md +9 -23
- package/harness/bundles/java/claude-code/harness-review/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-run/SKILL.md +19 -5
- package/harness/bundles/java/claude-code/harness-run/protocols.md +3 -2
- package/harness/bundles/java/claude-code/harness-submit/SKILL.md +6 -4
- package/harness/bundles/java/claude-code/harness-submit/checklist.md +10 -1
- package/harness/bundles/java/claude-code/harness-sync/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-test/SKILL.md +17 -3
- package/harness/bundles/java/claude-code/protocols/archive-report-protocol.md +2 -4
- package/harness/bundles/java/claude-code/protocols/ledger-protocol.md +7 -15
- package/harness/bundles/java/claude-code/scripts/harness_ledger.py +111 -5
- package/harness/bundles/java/claude-code/scripts/harness_profile.py +29 -1
- package/harness/bundles/java/claude-code/scripts/harness_test_guard.py +502 -0
- package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/java/codebuddy/README.md +12 -11
- package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +7 -9
- package/harness/bundles/java/codebuddy/harness-archive/checklist.md +4 -4
- package/harness/bundles/java/codebuddy/harness-archive/reference.md +3 -5
- package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +10 -16
- package/harness/bundles/java/codebuddy/harness-package/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +13 -9
- package/harness/bundles/java/codebuddy/harness-plan/checklist.md +28 -13
- package/harness/bundles/java/codebuddy/harness-plan/protocols.md +10 -3
- package/harness/bundles/java/codebuddy/harness-plan/reference.md +9 -23
- package/harness/bundles/java/codebuddy/harness-review/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-run/SKILL.md +19 -5
- package/harness/bundles/java/codebuddy/harness-run/protocols.md +3 -2
- package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +6 -4
- package/harness/bundles/java/codebuddy/harness-submit/checklist.md +10 -1
- package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-test/SKILL.md +17 -3
- package/harness/bundles/java/codebuddy/protocols/archive-report-protocol.md +2 -4
- package/harness/bundles/java/codebuddy/protocols/ledger-protocol.md +7 -15
- package/harness/bundles/java/codebuddy/scripts/harness_ledger.py +111 -5
- package/harness/bundles/java/codebuddy/scripts/harness_profile.py +29 -1
- package/harness/bundles/java/codebuddy/scripts/harness_test_guard.py +502 -0
- package/harness/bundles/java/codex/.harness-build.json +1 -1
- package/harness/bundles/java/codex/README.md +12 -11
- package/harness/bundles/java/codex/harness-apidoc/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-archive/SKILL.md +7 -9
- package/harness/bundles/java/codex/harness-archive/checklist.md +4 -4
- package/harness/bundles/java/codex/harness-archive/reference.md +3 -5
- package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +10 -16
- package/harness/bundles/java/codex/harness-package/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-plan/SKILL.md +13 -9
- package/harness/bundles/java/codex/harness-plan/checklist.md +28 -13
- package/harness/bundles/java/codex/harness-plan/protocols.md +10 -3
- package/harness/bundles/java/codex/harness-plan/reference.md +9 -23
- package/harness/bundles/java/codex/harness-review/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-run/SKILL.md +19 -5
- package/harness/bundles/java/codex/harness-run/protocols.md +3 -2
- package/harness/bundles/java/codex/harness-submit/SKILL.md +6 -4
- package/harness/bundles/java/codex/harness-submit/checklist.md +10 -1
- package/harness/bundles/java/codex/harness-sync/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-test/SKILL.md +17 -3
- package/harness/bundles/java/codex/protocols/archive-report-protocol.md +2 -4
- package/harness/bundles/java/codex/protocols/ledger-protocol.md +7 -15
- package/harness/bundles/java/codex/scripts/harness_ledger.py +111 -5
- package/harness/bundles/java/codex/scripts/harness_profile.py +29 -1
- package/harness/bundles/java/codex/scripts/harness_test_guard.py +502 -0
- package/harness/bundles/java/cursor/.harness-build.json +1 -1
- package/harness/bundles/java/cursor/README.md +12 -11
- package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-archive/SKILL.md +7 -9
- package/harness/bundles/java/cursor/harness-archive/checklist.md +4 -4
- package/harness/bundles/java/cursor/harness-archive/reference.md +3 -5
- package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +10 -16
- package/harness/bundles/java/cursor/harness-package/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-plan/SKILL.md +13 -9
- package/harness/bundles/java/cursor/harness-plan/checklist.md +28 -13
- package/harness/bundles/java/cursor/harness-plan/protocols.md +10 -3
- package/harness/bundles/java/cursor/harness-plan/reference.md +9 -23
- package/harness/bundles/java/cursor/harness-review/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-run/SKILL.md +19 -5
- package/harness/bundles/java/cursor/harness-run/protocols.md +3 -2
- package/harness/bundles/java/cursor/harness-submit/SKILL.md +6 -4
- package/harness/bundles/java/cursor/harness-submit/checklist.md +10 -1
- package/harness/bundles/java/cursor/harness-sync/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-test/SKILL.md +17 -3
- package/harness/bundles/java/cursor/protocols/archive-report-protocol.md +2 -4
- package/harness/bundles/java/cursor/protocols/ledger-protocol.md +7 -15
- package/harness/bundles/java/cursor/scripts/harness_ledger.py +111 -5
- package/harness/bundles/java/cursor/scripts/harness_profile.py +29 -1
- package/harness/bundles/java/cursor/scripts/harness_test_guard.py +502 -0
- package/harness/manifests/general/claude-code.json +32 -28
- package/harness/manifests/general/codebuddy.json +32 -28
- package/harness/manifests/general/codex.json +32 -28
- package/harness/manifests/general/cursor.json +32 -28
- package/harness/manifests/java/claude-code.json +30 -26
- package/harness/manifests/java/codebuddy.json +30 -26
- package/harness/manifests/java/codex.json +30 -26
- package/harness/manifests/java/cursor.json +30 -26
- package/hunter-workflow-family.json +2 -2
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@ name: harness-codebase-map
|
|
|
3
3
|
description: 分析现有代码库并生成 .harness/codebase/map/
|
|
4
4
|
下的结构化代码库地图。用于陌生项目理解、重大改造前梳理、harness-sync 提示 map 过期后的人工刷新。
|
|
5
5
|
---
|
|
6
|
-
<!-- generated by harness_deploy.py; core=
|
|
6
|
+
<!-- generated by harness_deploy.py; core=2df0efbebf1f603a; overlay=none; agent=codex; do not edit -->
|
|
7
7
|
# harness-codebase-map — 代码库地图
|
|
8
8
|
|
|
9
9
|
## Purpose
|
|
@@ -85,7 +85,7 @@ description: 分析现有代码库并生成 .harness/codebase/map/
|
|
|
85
85
|
|
|
86
86
|
## 执行日志
|
|
87
87
|
|
|
88
|
-
`events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py`
|
|
88
|
+
`events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止用 Write/Edit 直接维护**。直接修改的内容会在 `phase.end` 或 finalize 时被完整重建覆盖,属于数据丢失;需要保留的详情必须进入事件 `note`。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
|
|
89
89
|
|
|
90
90
|
```powershell
|
|
91
91
|
python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase <phase> --type phase.start --note "<触发指令>"
|
|
@@ -3,7 +3,7 @@ name: harness-knowledge-ingest
|
|
|
3
3
|
description: 从 .harness/archive 归档整理、同步和维护项目知识索引。适用场景:ingest knowledge、sync
|
|
4
4
|
knowledge、rebuild knowledge index、promote knowledge、确认知识条目、检查知识库是否过期。
|
|
5
5
|
---
|
|
6
|
-
<!-- generated by harness_deploy.py; core=
|
|
6
|
+
<!-- generated by harness_deploy.py; core=2df0efbebf1f603a; overlay=none; agent=codex; do not edit -->
|
|
7
7
|
# harness-knowledge-ingest
|
|
8
8
|
|
|
9
9
|
从 `.harness/archive/**/reports/final/summary-data.json` 抽取项目知识,生成并维护本地 `.harness/knowledge/` 索引。
|
|
@@ -232,7 +232,7 @@ powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge.py' sync
|
|
|
232
232
|
|
|
233
233
|
## 执行日志
|
|
234
234
|
|
|
235
|
-
`events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py`
|
|
235
|
+
`events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止用 Write/Edit 直接维护**。直接修改的内容会在 `phase.end` 或 finalize 时被完整重建覆盖,属于数据丢失;需要保留的详情必须进入事件 `note`。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
|
|
236
236
|
|
|
237
237
|
```powershell
|
|
238
238
|
python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase <phase> --type phase.start --note "<触发指令>"
|
|
@@ -3,7 +3,7 @@ name: harness-knowledge-query
|
|
|
3
3
|
description: 根据新需求、设计任务、代码修改请求或问题排查,在规划和编码前查询 .harness/knowledge
|
|
4
4
|
历史上下文。适用场景:query knowledge、查找历史需求、根据归档理解需求、继续之前类似开发、生成需求上下文包。
|
|
5
5
|
---
|
|
6
|
-
<!-- generated by harness_deploy.py; core=
|
|
6
|
+
<!-- generated by harness_deploy.py; core=2df0efbebf1f603a; overlay=none; agent=codex; do not edit -->
|
|
7
7
|
# harness-knowledge-query
|
|
8
8
|
|
|
9
9
|
根据用户的新需求或排查问题,从项目本地 `.harness/knowledge` 中检索历史需求、决策、实现、风险和测试证据,并生成 AI 可读的 context pack。
|
|
@@ -25,13 +25,7 @@ description: 根据新需求、设计任务、代码修改请求或问题排查
|
|
|
25
25
|
|
|
26
26
|
当用户提出新功能、改造、排查、设计方案、继续历史任务,且项目存在 `.harness/archive` 或 `.harness/knowledge` 时,AI 应主动运行本 skill,不需要等用户提醒。
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
```powershell
|
|
31
|
-
powershell.exe -Command "python '<ingest-skill-dir>\scripts\harness_knowledge.py' sync --project '<project-root>' --update"
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
然后再查询。
|
|
28
|
+
不在 query 前单独执行 sync。`query` 命令内部执行一次 ensure-current:建立一次当前快照,索引新鲜时无操作,过期或缺失时只构建一次,然后在同一调用内完成查询。
|
|
35
29
|
|
|
36
30
|
## Commands
|
|
37
31
|
|
|
@@ -59,12 +53,10 @@ powershell.exe -Command "python '<ingest-skill-dir>\scripts\harness_knowledge.py
|
|
|
59
53
|
## Workflow
|
|
60
54
|
|
|
61
55
|
1. 确认项目根目录。
|
|
62
|
-
2.
|
|
63
|
-
3.
|
|
64
|
-
4.
|
|
65
|
-
5.
|
|
66
|
-
6. 读取 JSON 输出中的 `contextPack`。
|
|
67
|
-
7. 在 `harness-plan`、设计、代码探索或实现前,把 context pack 当作必读输入。
|
|
56
|
+
2. 用用户原始需求执行一次 `query`;query 命令内部执行一次 ensure-current。
|
|
57
|
+
3. 如已知道相关文件,在同一次查询中追加 `--file` 过滤。
|
|
58
|
+
4. 读取 JSON 输出中的 `contextPack`。
|
|
59
|
+
5. 在 `harness-plan`、设计、代码探索或实现前,把 context pack 当作必读输入。
|
|
68
60
|
|
|
69
61
|
## Output Contract
|
|
70
62
|
|
|
@@ -96,6 +88,8 @@ powershell.exe -Command "python '<ingest-skill-dir>\scripts\harness_knowledge.py
|
|
|
96
88
|
## Forbidden Actions
|
|
97
89
|
|
|
98
90
|
- rebuild_index_without_need
|
|
91
|
+
- pre_sync_before_query
|
|
92
|
+
- query_then_sync_then_query_again
|
|
99
93
|
- treat_candidate_as_current_fact
|
|
100
94
|
- treat_stale_as_current_fact
|
|
101
95
|
- skip_context_pack_before_planning
|
|
@@ -124,7 +118,7 @@ powershell.exe -Command "python '<ingest-skill-dir>\scripts\harness_knowledge.py
|
|
|
124
118
|
- `matchCount` 与按状态分组的命中数(active/candidate/stale/superseded/conflicted)。
|
|
125
119
|
- `contextPack` 路径与 `latest.json` 指针。
|
|
126
120
|
- 命中 stale/superseded/conflicted 时显式提示风险。
|
|
127
|
-
- 下一步建议(context pack 已就绪 → 进入 `/harness-plan
|
|
121
|
+
- 下一步建议(context pack 已就绪 → 进入 `/harness-plan`;ensure-current 失败 → 报告具体 issue,不重复同步或查询)。
|
|
128
122
|
|
|
129
123
|
## 渐进披露
|
|
130
124
|
|
|
@@ -136,7 +130,7 @@ powershell.exe -Command "python '<ingest-skill-dir>\scripts\harness_knowledge.py
|
|
|
136
130
|
|
|
137
131
|
## 执行日志
|
|
138
132
|
|
|
139
|
-
`events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py`
|
|
133
|
+
`events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止用 Write/Edit 直接维护**。直接修改的内容会在 `phase.end` 或 finalize 时被完整重建覆盖,属于数据丢失;需要保留的详情必须进入事件 `note`。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
|
|
140
134
|
|
|
141
135
|
```powershell
|
|
142
136
|
python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase <phase> --type phase.start --note "<触发指令>"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: harness-plan
|
|
3
3
|
description: 将需求转化为设计文档+实施计划+完整测试场景表,必须在编码前完成。使用场景:需求分析、feature plan、技术方案设计、实现方案规划
|
|
4
4
|
---
|
|
5
|
-
<!-- generated by harness_deploy.py; core=
|
|
5
|
+
<!-- generated by harness_deploy.py; core=2df0efbebf1f603a; overlay=none; agent=codex; do not edit -->
|
|
6
6
|
# harness-plan — 需求规划
|
|
7
7
|
|
|
8
8
|
## Purpose
|
|
@@ -48,18 +48,19 @@ description: 将需求转化为设计文档+实施计划+完整测试场景表
|
|
|
48
48
|
|
|
49
49
|
## Subagent 委派
|
|
50
50
|
|
|
51
|
-
- **阶段 3
|
|
52
|
-
- **阶段 7.5**:仅 `--adversarial
|
|
51
|
+
- **阶段 3 探索**:先运行 `python <skills-root>/scripts/harness_preflight.py check-agents --skills-root <skills-root> --agent harness-explorer --json`;可用则委派,否则主会话探索;无效返回不 retry
|
|
52
|
+
- **阶段 7.5**:仅 `--adversarial`;先运行 `python <skills-root>/scripts/harness_preflight.py check-agents --skills-root <skills-root> --agent harness-evaluator --json`;可用才委派到 `reports/plan-review/`
|
|
53
53
|
|
|
54
54
|
## Workflow 概要
|
|
55
55
|
|
|
56
56
|
| 阶段 | 动作 |
|
|
57
57
|
|------|------|
|
|
58
58
|
| 0 | git status;脏工作区 → baseline 隔离 + `decision`,不询问 |
|
|
59
|
-
| 0.5 |
|
|
60
|
-
| 1 |
|
|
61
|
-
| 2
|
|
62
|
-
|
|
|
59
|
+
| 0.5 | 先初始化 change-name + `phase.start`,从第一条知识查询起保留事件证据 |
|
|
60
|
+
| 1 | `harness-knowledge-query` 单次 query(内部 ensure-current;失败记 `issue`) |
|
|
61
|
+
| 2 | 歧义优先检查 + 复杂度分级;先确认会改变实现方向的语义歧义 |
|
|
62
|
+
| 3 | 按复杂度执行有预算的代码探索;简单修复不得扩散到无关模块 |
|
|
63
|
+
| 4 | **设计审批包** AskUserQuestion;确认事件早于 approved 设计文档和 `meta/worktree.json` |
|
|
63
64
|
| 5–6 | plan + implementation-detail + test-scenarios → `plans/` |
|
|
64
65
|
| 7.5 | 仅 `--adversarial` 对抗评审 |
|
|
65
66
|
| 8 | 产物完整性必检 → `checklist.md` |
|
|
@@ -81,6 +82,9 @@ change-name 范围变更 → 提示重命名或记 🟡WARN(→ `reference.md`
|
|
|
81
82
|
| 阶段 8 | spec/plan/detail/scenarios/worktree.json/logs/events 缺一不可 → ❌FAIL |
|
|
82
83
|
| Plan 结束 | **禁止**询问执行模式;只提示 `/harness-run` |
|
|
83
84
|
| 知识查询 | 0.5 失败不得假装已读历史 |
|
|
85
|
+
| 歧义优先检查 | 否定、对比、动作对象或范围存在多种合理解释时,最小取证后先给推荐理解并一次一问;确认前不深挖错误方向 |
|
|
86
|
+
| 简单修复探索预算 | 预计不超过 2 个代码文件、且不涉及认证/安全/迁移/并发/API 契约重设时,最多 1 次合并 CodeGraph 查询 + 1 次定向补查、1 个用户澄清问题;无关发现只记非阻断说明 |
|
|
87
|
+
| 精简产物 | 简单修复只保留实现所需的设计、任务、边界和测试;禁止在 spec/plan/detail/scenarios 中重复同一背景和结论 |
|
|
84
88
|
| 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) |
|
|
85
89
|
| 协议 | sensitive-info / evidence-based-reporting / state-layout |
|
|
86
90
|
|
|
@@ -95,11 +99,11 @@ change-name 范围变更 → 提示重命名或记 🟡WARN(→ `reference.md`
|
|
|
95
99
|
## 交互白名单
|
|
96
100
|
|
|
97
101
|
1. **设计审批包**(阶段 4):设计 + 场景表 + worktree + change-name
|
|
98
|
-
2. **decision-grilling**(阶段 3
|
|
102
|
+
2. **decision-grilling**(阶段 2/3 澄清):语义歧义或高风险业务裁决(一次一问)
|
|
99
103
|
|
|
100
104
|
## 执行日志
|
|
101
105
|
|
|
102
|
-
`events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py`
|
|
106
|
+
`events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止用 Write/Edit 直接维护**。直接修改的内容会在 `phase.end` 或 finalize 时被完整重建覆盖,属于数据丢失;需要保留的详情必须进入事件 `note`。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
|
|
103
107
|
|
|
104
108
|
```powershell
|
|
105
109
|
python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase <phase> --type phase.start --note "<触发指令>"
|
|
@@ -12,9 +12,22 @@ description: harness-plan 的阶段检查清单和覆盖检查列表。仅在执
|
|
|
12
12
|
|
|
13
13
|
**判定**:stdout 为空 → ✅ 继续;stdout 非空 → baseline 隔离 + `decision`(note 含变更文件列表);Bash 被拒 → PowerShell 重试。
|
|
14
14
|
|
|
15
|
-
## 阶段
|
|
15
|
+
## 阶段 0.5:事件初始化与知识查询
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
- [ ] 先确定 change-name,并立即用 `harness_events.py append` 追加 `phase.start`
|
|
18
|
+
- [ ] 再执行一次 knowledge `query`;由 query 内部 ensure-current,不另跑前置 sync
|
|
19
|
+
- [ ] 查询失败追加 `issue`,不得重跑“sync + query”循环或假装已读取历史
|
|
20
|
+
|
|
21
|
+
## 阶段 2:歧义优先检查与复杂度分级
|
|
22
|
+
|
|
23
|
+
- [ ] 否定、对比、动作对象、范围或保留/删除关系不存在未确认的多义解释
|
|
24
|
+
- [ ] 若存在歧义,仅完成最小取证后一次一问,并给出推荐理解
|
|
25
|
+
- [ ] 简单修复探索预算:最多 1 次合并 CodeGraph 查询 + 1 次定向补查、1 个澄清问题
|
|
26
|
+
- [ ] 无关发现只记非阻断 `issue`,未扩展当前方案或问题列表
|
|
27
|
+
|
|
28
|
+
## 设计审批包字段:Worktree
|
|
29
|
+
|
|
30
|
+
> worktree 不再单独询问。阶段 4 **设计审批包** 一次 AskUserQuestion 含 worktree 选项(推荐值读 `harness.json` `defaultWorktree`)。确认后写入 `meta/worktree.json`。
|
|
18
31
|
|
|
19
32
|
- [ ] 审批包确认后写入 worktree.json(`requested` true/false)
|
|
20
33
|
- [ ] 阶段 8 检查 worktree.json 存在
|
|
@@ -26,7 +39,7 @@ description: harness-plan 的阶段检查清单和覆盖检查列表。仅在执
|
|
|
26
39
|
```
|
|
27
40
|
□ 是通过 Agent 工具委派 subagent 执行的(不是主会话直接调用 codegraph)
|
|
28
41
|
□ subagent 返回了结构化设计概要(涉及模块、接口变更、关键决策)
|
|
29
|
-
□ 委派前已运行 `harness_preflight.py check-agents --agent harness-explorer`
|
|
42
|
+
□ 委派前已运行 `python <skills-root>/scripts/harness_preflight.py check-agents --skills-root <skills-root> --agent harness-explorer --json`
|
|
30
43
|
□ `usable=false` 或未返回有效输出 → 主会话探索,**不 retry 委派**
|
|
31
44
|
□ 主会话未被代码探索的中间结果污染
|
|
32
45
|
□ 在执行日志中记录了 Agent 调用状态:
|
|
@@ -38,13 +51,13 @@ description: harness-plan 的阶段检查清单和覆盖检查列表。仅在执
|
|
|
38
51
|
```
|
|
39
52
|
|
|
40
53
|
> 如果 Agent 工具不可用,或子代理被委派但未返回有效输出(0 tool uses / 空返回 / 仅 "Done"),必须显式降级并记录:
|
|
41
|
-
> -
|
|
54
|
+
> - 追加 `issue` 事件并在 note 写明降级原因:Agent 不可用 / 子代理未返回有效输出,改为主会话只读探索
|
|
42
55
|
> - 主会话直接使用 codegraph MCP 工具(`mcp__codegraph__codegraph_explore`)和 Read 探索代码(只读,不执行写操作)
|
|
43
56
|
> - 不得在主会话中执行任何写操作
|
|
44
57
|
> - CodeGraph 如通过 MCP 调用,必须优先用 MCP 工具,不允许通过普通 Bash 调 codegraph 命令
|
|
45
58
|
> - 禁止把子代理未经工具验证的文本结论当作"详尽报告"或代码证据采纳
|
|
46
59
|
|
|
47
|
-
## 阶段
|
|
60
|
+
## 阶段 4:设计审批包 ⚠️ 强制阻断(一次 AskUserQuestion)
|
|
48
61
|
|
|
49
62
|
> 合并原「设计审核 + worktree + 场景表预览 + change-name」。推荐 worktree 读 `harness.json` `defaultWorktree`。
|
|
50
63
|
|
|
@@ -58,6 +71,8 @@ description: harness-plan 的阶段检查清单和覆盖检查列表。仅在执
|
|
|
58
71
|
|
|
59
72
|
确认后写入 `spec/<change>-design.md`(含 frontmatter)和 `meta/worktree.json`。
|
|
60
73
|
|
|
74
|
+
- [ ] 确认事件早于 approved 设计文档;未获确认时不得先落盘 `status: approved`
|
|
75
|
+
|
|
61
76
|
设计文档必须包含 frontmatter:
|
|
62
77
|
```yaml
|
|
63
78
|
---
|
|
@@ -155,11 +170,11 @@ source: harness-plan
|
|
|
155
170
|
|
|
156
171
|
```
|
|
157
172
|
□ 已读取 protocols.md,并按 clarification-protocol / decision-grilling-protocol 执行
|
|
158
|
-
□ 输入包含需求摘要 + 阶段
|
|
159
|
-
□
|
|
173
|
+
□ 输入包含需求摘要 + 阶段1 context pack(如有)+ 阶段3代码探索结果 + 项目架构约束
|
|
174
|
+
□ 已用 decision / issue 事件 note 记录五类输出:风险识别 / 复用机会 / 替代方案 / 推荐方案 / 关键决策
|
|
160
175
|
□ 已叠加项目架构约束(分层规范、数据模型、接口规范)
|
|
161
|
-
□
|
|
162
|
-
□
|
|
176
|
+
□ 需求澄清结论已追加到 events.ndjson,阶段结束后执行日志由渲染器生成
|
|
177
|
+
□ 用户问题未超预算:简单修复 0-1 问,普通需求 1-3 问,高风险需求 5-7 问;无必须裁决事项时 0 问
|
|
163
178
|
□ 提问遵循"一次一问、等答再继续";能由 context pack / 阶段3代码探索 / CodeGraph 自答的问题已自答,未打扰用户
|
|
164
179
|
□ 每个需要用户决策的问题,AI 先给出了推荐答案、理由和取舍,用户仅确认或修正
|
|
165
180
|
□ 高风险/业务语义决策(范围、权限、安全、支付、迁移、删除、API契约、用户可见行为)已显式等待用户确认
|
|
@@ -173,8 +188,8 @@ source: harness-plan
|
|
|
173
188
|
|
|
174
189
|
```
|
|
175
190
|
□ 已读取 protocols.md,并按 implementation-planning-protocol 执行
|
|
176
|
-
□ 输入为阶段
|
|
177
|
-
□
|
|
191
|
+
□ 输入为阶段4已审核设计文档
|
|
192
|
+
□ 已生成基础任务列表,并用 artifact 事件 note 记录任务拆分摘要
|
|
178
193
|
□ 已叠加项目层序依赖(数据/契约→业务层→接口层)
|
|
179
194
|
□ 已生成 4 维度场景表(单元/接口/数据兼容/集成)
|
|
180
195
|
□ 已确定变更名(kebab-case)
|
|
@@ -223,7 +238,7 @@ source: harness-plan
|
|
|
223
238
|
|
|
224
239
|
- **产物路径唯一性**:`.harness/changes/<change-name>/` 是唯一真相源,plan 产物必须直接写入此目录
|
|
225
240
|
- **原生规划协议**:阶段 4/6 使用 clarification、decision-grilling、implementation-planning 三段内置协议,不运行时依赖 Superpowers/grill-me/writing-plans
|
|
226
|
-
- **阶段
|
|
241
|
+
- **阶段 4 是强制阻断检查点**——展示设计审批包后必须停下来问用户,收到回复后才能写 approved 设计文档。不要跳过
|
|
227
242
|
- 代码探索只读不写——这个阶段的目标是理解,不是修改
|
|
228
243
|
- 场景表是后续所有步骤的真相源——宁可多花时间打磨,不要草草了事
|
|
229
244
|
- 如果需求不明确,优先提问而不是猜测后继续设计
|
|
@@ -233,7 +248,7 @@ source: harness-plan
|
|
|
233
248
|
## 事件记录(前置规则)
|
|
234
249
|
|
|
235
250
|
- [ ] 确定 change-name 后立即 append `phase.start` 事件;各阶段用 `harness_events.py append` 写入 `decision` / `issue` / `artifact`
|
|
236
|
-
- [ ] 阶段 0 在 change-name 确定前可不写事件;阶段
|
|
251
|
+
- [ ] 阶段 0 在 change-name 确定前可不写事件;阶段 0.5 确定 change-name 后必须开始记录
|
|
237
252
|
|
|
238
253
|
## 需求范围缩减后的 change-name 检查 ⚠️
|
|
239
254
|
|
|
@@ -12,7 +12,7 @@ description: harness-plan 的原生规划协议。吸收 brainstorming、grill-m
|
|
|
12
12
|
|
|
13
13
|
用于阶段 4,目标是把需求从“用户意图”收敛成可审核设计输入。
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
必须输出以下五类结论。用 `harness_events.py append` 追加 `decision` / `issue` 事件,完整的人类可读结论放进事件 `note`;执行日志仅由事件渲染器派生:
|
|
16
16
|
|
|
17
17
|
| 输出 | 要求 |
|
|
18
18
|
|------|------|
|
|
@@ -24,11 +24,13 @@ description: harness-plan 的原生规划协议。吸收 brainstorming、grill-m
|
|
|
24
24
|
|
|
25
25
|
执行纪律:
|
|
26
26
|
|
|
27
|
-
1. 先消费阶段
|
|
27
|
+
1. 先消费阶段 1 的 context pack、阶段 3 的代码探索结果和项目规则。
|
|
28
28
|
2. 能由代码、历史知识、配置、现有文档回答的问题,不问用户。
|
|
29
29
|
3. 需要用户裁决时,交给 `decision-grilling-protocol`。
|
|
30
30
|
4. 影响面检查必须覆盖用户未显式提到的参数、数据、接口、权限、兼容性、模块引用和测试影响。
|
|
31
31
|
5. 低风险工程判断可由 AI 推荐并记录后继续;高风险或业务语义判断必须等待用户确认。
|
|
32
|
+
6. **歧义优先检查**:否定、对比、动作对象、范围或保留/删除关系存在多种合理解释时,只做足以定位现状的最小取证,然后先给出推荐理解并确认;不得先沿某一种猜测深挖完整代码路径。
|
|
33
|
+
7. 探索中发现的无关问题仅以非阻断 `issue` 记录,不加入当前决策树,不扩展设计范围。
|
|
32
34
|
|
|
33
35
|
## 协议二:decision-grilling-protocol
|
|
34
36
|
|
|
@@ -39,11 +41,14 @@ description: harness-plan 的原生规划协议。吸收 brainstorming、grill-m
|
|
|
39
41
|
| 场景 | 用户问题上限 |
|
|
40
42
|
|------|:---:|
|
|
41
43
|
| 信息充分、无必须裁决的问题 | 0 |
|
|
44
|
+
| 简单修复 | 0-1 |
|
|
42
45
|
| 普通需求 | 1-3 |
|
|
43
46
|
| 高风险需求(auth、支付、数据迁移、并发、安全、不可逆删除、用户可见行为变化) | 5-7 |
|
|
44
47
|
|
|
45
48
|
超过预算仍无法收敛时,不要继续追问;必须输出“未决决策清单”,标记阻塞项,并请用户裁决是否缩小范围或暂停。
|
|
46
49
|
|
|
50
|
+
用户纠正了最初理解时,立即丢弃错误探索假设;简单修复最多再进行一次定向确认,不因旧探索结果追加连锁问题。
|
|
51
|
+
|
|
47
52
|
### 提问格式
|
|
48
53
|
|
|
49
54
|
每次只问一个问题,且必须包含推荐答案:
|
|
@@ -89,6 +94,8 @@ description: harness-plan 的原生规划协议。吸收 brainstorming、grill-m
|
|
|
89
94
|
|
|
90
95
|
`implementation-detail.md` 必须存在,但不再强制写成 2-5 分钟粒度、逐行代码片段或逐 commit 指令。简单任务可以短,复杂任务必须细。
|
|
91
96
|
|
|
97
|
+
简单修复的四份产物采用“单点事实、引用不复述”:设计写行为契约,plan 写任务与依赖,detail 写关键修改点与命令,scenarios 写可验证用例。不得复制同一段背景、风险或结论来增加篇幅。
|
|
98
|
+
|
|
92
99
|
### 计划质量门槛
|
|
93
100
|
|
|
94
101
|
任务拆分必须满足:
|
|
@@ -121,4 +128,4 @@ description: harness-plan 的原生规划协议。吸收 brainstorming、grill-m
|
|
|
121
128
|
- implementation-planning-protocol:plan 简表、implementation-detail、test-scenarios 三件套一致,无占位符
|
|
122
129
|
```
|
|
123
130
|
|
|
124
|
-
|
|
131
|
+
该自检作为 `verification` 事件的 `note` 追加;关键结论分别追加 `decision` / `issue` 事件。渲染器在 `phase.end` 后生成执行日志。
|
|
@@ -6,7 +6,7 @@ description: harness-plan 的需求提取模板、任务拆分规则、测试场
|
|
|
6
6
|
|
|
7
7
|
## Worktree 决策文件模板
|
|
8
8
|
|
|
9
|
-
阶段
|
|
9
|
+
阶段 4 设计审批包确认后必须生成 `.harness/changes/<change-name>/meta/worktree.json`。这是后续 `/harness-run` 是否创建/切换 worktree 的唯一机器可读依据。
|
|
10
10
|
|
|
11
11
|
### 使用 Worktree
|
|
12
12
|
|
|
@@ -36,15 +36,9 @@ description: harness-plan 的需求提取模板、任务拆分规则、测试场
|
|
|
36
36
|
}
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
###
|
|
39
|
+
### 决策事件 note 示例
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
## 阶段 2:Worktree 决策
|
|
43
|
-
- 用户选择:使用 Worktree
|
|
44
|
-
- 决策文件:.harness/changes/<change-name>/meta/worktree.json
|
|
45
|
-
- requested=true, created=false
|
|
46
|
-
- 创建责任:harness-run
|
|
47
|
-
```
|
|
41
|
+
`用户选择使用 Worktree;决策文件为 meta/worktree.json;requested=true, created=false;创建责任为 harness-run。`
|
|
48
42
|
|
|
49
43
|
## 参考 — 详细格式
|
|
50
44
|
|
|
@@ -99,11 +93,11 @@ description: harness-plan 的需求提取模板、任务拆分规则、测试场
|
|
|
99
93
|
- 决策2: 说明
|
|
100
94
|
```
|
|
101
95
|
|
|
102
|
-
## 阶段
|
|
96
|
+
## 阶段 4:设计审批与文档落盘 ⚠️ 用户审核
|
|
103
97
|
|
|
104
98
|
基于代码探索和需求澄清的结果,撰写设计文档并展示给用户审核。
|
|
105
99
|
|
|
106
|
-
> **本阶段是强制检查点。**
|
|
100
|
+
> **本阶段是强制检查点。** 先展示设计审批包,收到确认并追加 decision 事件后,才能落盘 `status: approved` 的设计文档并进入阶段 6(任务拆分)。设计方向正确后再细化任务,避免基于错误理解拆分无效任务。
|
|
107
101
|
|
|
108
102
|
**用户确认后必须立即写入** `.harness/changes/<change-name>/spec/<change-name>-design.md`。如果此文件不存在,harness-plan 不得进入阶段 6。
|
|
109
103
|
|
|
@@ -257,7 +251,7 @@ status: approved
|
|
|
257
251
|
| INT-001 | 端到端 | ... | ... | N 步操作 | ... |
|
|
258
252
|
```
|
|
259
253
|
|
|
260
|
-
## 产物保存规则(跨阶段:阶段
|
|
254
|
+
## 产物保存规则(跨阶段:阶段0.5/4/6/8)
|
|
261
255
|
|
|
262
256
|
1. **自动确定变更名**:基于需求描述自动生成变更名(kebab-case),无需用户确认
|
|
263
257
|
|
|
@@ -267,7 +261,7 @@ status: approved
|
|
|
267
261
|
- 示例:`contribution-module`、`fix-duplicate-submit`
|
|
268
262
|
- 变更名一旦确定即为最终值,后续所有 skill 自动引用
|
|
269
263
|
|
|
270
|
-
> **与 Worktree
|
|
264
|
+
> **与 Worktree 的关系**:阶段 4 用户确认是否使用 worktree;变更名已在阶段 0.5 生成,后续 worktree 直接复用该名称。
|
|
271
265
|
|
|
272
266
|
2. **创建产出目录**:用 Write 工具创建以下目录结构(Write 会自动创建中间目录):
|
|
273
267
|
```
|
|
@@ -283,7 +277,7 @@ status: approved
|
|
|
283
277
|
.harness/changes/<change-name>/backups/
|
|
284
278
|
```
|
|
285
279
|
|
|
286
|
-
3. **保存设计文档**:将阶段
|
|
280
|
+
3. **保存设计文档**:将阶段 4 已确认的设计文档保存到:
|
|
287
281
|
- `.harness/changes/<change-name>/spec/<change-name>-design.md`
|
|
288
282
|
|
|
289
283
|
设计文档 frontmatter 格式:
|
|
@@ -298,15 +292,7 @@ status: approved
|
|
|
298
292
|
|
|
299
293
|
> 如果 frontmatter 缺失,后续 run/test/review/submit/archive 不得依赖模型猜测 change-name。
|
|
300
294
|
|
|
301
|
-
4.
|
|
302
|
-
|
|
303
|
-
```markdown
|
|
304
|
-
# 执行日志 — <change-name>
|
|
305
|
-
|
|
306
|
-
> 变更创建时间:YYYY-MM-DD HH:MM | 变更名:<change-name>
|
|
307
|
-
|
|
308
|
-
---
|
|
309
|
-
```
|
|
295
|
+
4. **初始化结构化事件**:确定 change-name 后,立即运行 `harness_events.py append --type phase.start`。脚本负责建立父目录和 `events.ndjson`;执行日志在 `phase.end` 时由完整事件流渲染,任何阶段都不得直接用 Write/Edit 维护该投影。
|
|
310
296
|
|
|
311
297
|
5. **保存计划文件**:计划文件包含 YAML frontmatter(含 change-name),保存到:
|
|
312
298
|
- `.harness/changes/<change-name>/plans/<change-name>-plan.md`(简洁任务表)
|
|
@@ -3,7 +3,7 @@ name: harness-review
|
|
|
3
3
|
description: 6维度代码审查(架构/安全/规范/兼容/测试/性能),对照项目规则(见
|
|
4
4
|
.harness/context-index.json)和测试场景表,在隔离上下文运行。使用场景:代码审查、提交前检查、合并评审
|
|
5
5
|
---
|
|
6
|
-
<!-- generated by harness_deploy.py; core=
|
|
6
|
+
<!-- generated by harness_deploy.py; core=2df0efbebf1f603a; overlay=none; agent=codex; do not edit -->
|
|
7
7
|
# harness-review — 代码审查
|
|
8
8
|
|
|
9
9
|
## Purpose
|
|
@@ -130,7 +130,7 @@ review 读取 `state-snapshot.json`(`harness_state.py` / state-layout-protocol
|
|
|
130
130
|
|
|
131
131
|
## 执行日志
|
|
132
132
|
|
|
133
|
-
`events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py`
|
|
133
|
+
`events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止用 Write/Edit 直接维护**。直接修改的内容会在 `phase.end` 或 finalize 时被完整重建覆盖,属于数据丢失;需要保留的详情必须进入事件 `note`。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
|
|
134
134
|
|
|
135
135
|
```powershell
|
|
136
136
|
python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase <phase> --type phase.start --note "<触发指令>"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: harness-run
|
|
3
3
|
description: 按变更簇执行 TDD 编码循环(RED→GREEN→REFACTOR→编译验证),逐变更簇实现计划中的任务。使用场景:开始编码、实现功能、写代码、TDD 编码
|
|
4
4
|
---
|
|
5
|
-
<!-- generated by harness_deploy.py; core=
|
|
5
|
+
<!-- generated by harness_deploy.py; core=2df0efbebf1f603a; overlay=none; agent=codex; do not edit -->
|
|
6
6
|
# harness-run — 需求编码
|
|
7
7
|
|
|
8
8
|
## Purpose
|
|
@@ -56,7 +56,7 @@ description: 按变更簇执行 TDD 编码循环(RED→GREEN→REFACTOR→编
|
|
|
56
56
|
0. 加载上下文(change-name、spec/plan/detail/scenarios/ledger/run-task-status/worktree;`--fixback` 读 fixback)→ append `phase.start`
|
|
57
57
|
0.5. **测试基础设施探测**(先写 `CHECKING`,四项证据齐备后再结论)→ `reference.md` Step 0.5
|
|
58
58
|
1. **变更簇 TDD** — `protocols.md` `run-tdd-protocol`;批量 RED/GREEN;按需 `change-cluster-review-protocol`(高风险 + reviewer 预检可用)
|
|
59
|
-
2. 构建验证 + 写 ledger
|
|
59
|
+
2. 构建验证 + 写 ledger(`harness_ledger.py diff-hash --change-dir` 纳入 ignored tests,`reference.md` Step 2c)
|
|
60
60
|
3. **场景覆盖检查**(场景表映射,禁止用用例数冒充场景数)
|
|
61
61
|
4. **关门检查**(10 项)+ 计划状态持久化
|
|
62
62
|
|
|
@@ -78,12 +78,24 @@ description: 按变更簇执行 TDD 编码循环(RED→GREEN→REFACTOR→编
|
|
|
78
78
|
| **变更簇 TDD** | 一簇一次 RED/GREEN;低价值项豁免;新分支必须 RED |
|
|
79
79
|
| **RED/GREEN** | RED 须有效;静态验证 ≠ 测试通过;greenfield 大重写豁免见 reference |
|
|
80
80
|
| **Mapper/DB** | 纯 Mock 不得宣称 DB 验证通过;迁移脚本**永不自动执行** |
|
|
81
|
-
| **探测/ledger** | 基础设施先探测;每次构建/测试写 ledger
|
|
81
|
+
| **探测/ledger** | 基础设施先探测;每次构建/测试写 ledger;用 canonical `diff-hash --change-dir` |
|
|
82
82
|
| **预存变更** | 保留 → baseline 隔离;存在则最终 ≥ 🟡WARN |
|
|
83
83
|
| **关门/状态** | 10 项关门检查;持久化 run-task-status;P0 静态-only 不得建议 submit |
|
|
84
84
|
| **Worktree** | `requested=true` 时代码只写 worktree |
|
|
85
85
|
| **PowerShell** | 所有 git/构建经 `powershell.exe -NoProfile -Command` |
|
|
86
86
|
|
|
87
|
+
### 陈旧测试安全修复与精确跟踪
|
|
88
|
+
|
|
89
|
+
测试编译或 RED/GREEN 失败时,先区分当前实现缺陷、测试基础设施故障与陈旧测试。只有同时满足以下条件才允许自动修复陈旧测试:当前生产代码、已批准计划或可验证的历史变更能唯一确定新契约;修改范围仅限测试文件;修复后会立即重跑该测试及本变更目标测试。符合时以 `stale-test-repair` 记录:
|
|
90
|
+
|
|
91
|
+
```text
|
|
92
|
+
python <skills-root>/scripts/harness_test_guard.py record --project . --change-dir ".harness/changes/<change-name>" --files "<精确测试文件路径,逗号分隔>" --reason stale-test-repair --json
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
新建或正常更新测试分别使用 `tdd-created` / `test-updated`。若预期行为存在业务歧义,停止测试修复并记录 `BLOCKED_PREEXISTING`,不得猜测新断言。
|
|
96
|
+
|
|
97
|
+
**禁止临时排除测试**:不得将测试改名为 `.bak`、移出测试目录、删除、添加 `@Disabled`/`@Ignore`、修改 Surefire/Gradle exclude 或跳过测试来制造绿色结果;也不得仅为满足陈旧测试而修改生产代码。`.gitignore` 中的测试只能通过 manifest 的精确路径闭环处理,禁止全局放宽 ignore。
|
|
98
|
+
|
|
87
99
|
## Output Format
|
|
88
100
|
|
|
89
101
|
变更文件表 + 构建/测试证据 + 场景覆盖摘要 + 最终状态(✅OK / 🟡WARN / ❌FAIL)。→ `reference.md`
|
|
@@ -102,7 +114,7 @@ description: 按变更簇执行 TDD 编码循环(RED→GREEN→REFACTOR→编
|
|
|
102
114
|
|
|
103
115
|
## 执行日志
|
|
104
116
|
|
|
105
|
-
`events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py`
|
|
117
|
+
`events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止用 Write/Edit 直接维护**。直接修改的内容会在 `phase.end` 或 finalize 时被完整重建覆盖,属于数据丢失;需要保留的详情必须进入事件 `note`。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
|
|
106
118
|
|
|
107
119
|
```powershell
|
|
108
120
|
python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase <phase> --type phase.start --note "<触发指令>"
|
|
@@ -57,6 +57,9 @@ description: harness-run 的执行检查清单。仅在编码执行时读取。
|
|
|
57
57
|
- [ ] 探测 4:目标模块测试基础设施是否可用(按技术栈,如 Java 的 `mvn test-compile -pl <module> -o -q` 验证测试可编译,或测试枚举/秒级 smoke;**禁止完整模块测试**,spec §3.3)
|
|
58
58
|
- [ ] 四项证据收集完毕 → 写结论:✅ 测试基础设施可用 / 🟡 测试基础设施部分可用 / ❌ 测试基础设施不可用
|
|
59
59
|
- [ ] 如果 ❌ 不可用 → 记录 TDD 降级原因(必须引用具体证据,如"模块 X 无测试目录(如 Java 的 src/test/java)")
|
|
60
|
+
- [ ] 若探测失败来自具体陈旧测试,先执行「陈旧测试安全修复」判定:当前代码/批准计划/可验证历史唯一确定契约 + 仅改测试 + 立即重跑;满足才修复,否则记录 `BLOCKED_PREEXISTING`
|
|
61
|
+
- [ ] 修复/新增/更新的精确测试路径已用 `harness_test_guard.py record` 记录为 `stale-test-repair` / `tdd-created` / `test-updated`
|
|
62
|
+
- [ ] **禁止临时排除测试**:未使用 `.bak`/改名/移目录/删除/禁用注解/build exclude/skip-tests 绕过失败
|
|
60
63
|
|
|
61
64
|
## 步骤 0.2:预存变更检测与隔离
|
|
62
65
|
|
|
@@ -147,7 +150,7 @@ description: harness-run 的执行检查清单。仅在编码执行时读取。
|
|
|
147
150
|
- [ ] 判断是否需要全量测试:改了公共模块/数据访问层/数据库迁移/权限认证/接口层/数据契约,或用户要求 full-run-validation → 执行测试命令(按技术栈,如 Java 的 `mvn test -pl <module> -o`);否则跳过全量测试
|
|
148
151
|
- [ ] 构建失败 → 先分析错误类型(见 reference.md 构建失败策略表)
|
|
149
152
|
- [ ] **写入 verification-ledger.json**:`compile` 项必写(status/command/scope/evidence/时间戳/durationMs);若执行了测试命令则 `unitTest` 项必写(testsRun/failures/errors/skipped/evidence);未执行时标记 `NOT_RUN_BY_RUN`
|
|
150
|
-
- [ ] 顶层写入 `diffHash` / `currentHead` / `module` / `profile`;`diffHash`
|
|
153
|
+
- [ ] 顶层写入 `diffHash` / `currentHead` / `module` / `profile`;`diffHash` 必须执行 `harness_ledger.py diff-hash --repo . --base <baseCommit> --change-dir ".harness/changes/<change-name>" --json`,纳入 test-tracking manifest 中的 ignored tests;`currentHead`=`git rev-parse HEAD`
|
|
151
154
|
- [ ] test/submit/package 阶段如果 diffHash 一致,可复用 run 的 compile/unitTest 结果
|
|
152
155
|
|
|
153
156
|
## 步骤 3:场景覆盖检查
|
|
@@ -215,7 +218,8 @@ description: harness-run 的执行检查清单。仅在编码执行时读取。
|
|
|
215
218
|
- [ ] 生成变更摘要:`git diff --stat` + `git diff --stat --cached`
|
|
216
219
|
- [ ] 构建 commit message:`wip(<scope>): <change-name> 编码完成 — N任务/M文件变更`
|
|
217
220
|
- [ ] **⚠️ 强制阻断**:用 AskUserQuestion 展示变更列表 + commit message,等待用户确认
|
|
218
|
-
- [ ] 用户确认 →
|
|
221
|
+
- [ ] 用户确认 → 精确暂存业务文件;若存在 test-tracking manifest,先执行 `harness_test_guard.py stage --project . --change-dir ".harness/changes/<change-name>" --json`;禁止 `git add -A` 与目录级 force-add
|
|
222
|
+
- [ ] `git diff --cached --name-only` 包含 manifest 的全部精确测试路径后再 `git commit`(不用 --no-verify、--no-gpg-sign)
|
|
219
223
|
- [ ] 用户拒绝 → 记录 `❌用户拒绝`,继续后续流程
|
|
220
224
|
- [ ] 记录 checkpoint commit hash 到执行日志
|
|
221
225
|
|
|
@@ -250,7 +254,7 @@ description: harness-run 的执行检查清单。仅在编码执行时读取。
|
|
|
250
254
|
- [ ] 包含 currentHead/baseCommit/diffHash/module/profile
|
|
251
255
|
- [ ] 包含 validations.compile 与 validations.unitTest
|
|
252
256
|
- [ ] 缺字段时标记 `ledgerReusable=false`,后续阶段不得复用
|
|
253
|
-
- [ ] diffHash
|
|
257
|
+
- [ ] diffHash 必须由 `harness_ledger.py diff-hash --change-dir` 生成;manifest hash 漂移或路径越界时硬停止,禁止绕过后复用 ledger
|
|
254
258
|
|
|
255
259
|
## 新筛选参数非法值行为检查
|
|
256
260
|
|
|
@@ -34,8 +34,9 @@ REFACTOR 只允许不改变行为的整理。若重构改变行为,必须回
|
|
|
34
34
|
|
|
35
35
|
- `evidence/verification-ledger.json`:构建/测试命令、证据、diffHash、复用状态。
|
|
36
36
|
- `evidence/run-task-status.md`:任务状态、对应场景、未验证项。
|
|
37
|
-
- `
|
|
38
|
-
|
|
37
|
+
- `events.ndjson`:关键 command / verification / issue / artifact 事件;RED 类型、GREEN 结果、REFACTOR 结果和验证证据放入事件 `note`。
|
|
38
|
+
|
|
39
|
+
执行日志是上述事件在阶段边界生成的只读投影,不作为变更簇的直接输出目标。
|
|
39
40
|
|
|
40
41
|
禁止把静态验证写成“测试通过”。静态 RED/GREEN 的最终状态至少是 🟡WARN,除非后续真实验证已完成。
|
|
41
42
|
|
|
@@ -518,19 +518,13 @@ powershell.exe -Command "<测试命令> <模块定位参数>"
|
|
|
518
518
|
- 顶层写入 `diffHash` / `currentHead` / `baseCommit` / `module` / `profile`
|
|
519
519
|
- `baseCommit`:merge-base 或计划起点(worktree 分支从主分支分出点,由 harness-plan 写入、run 读取复用;缺失时用 `git merge-base HEAD <默认分支>` 兜底)
|
|
520
520
|
- `currentHead`:`git rev-parse HEAD`(步骤 2c 在 Step 5 checkpoint commit 之前执行,此时 HEAD==baseCommit;commit 后 HEAD 前移到 checkpoint commit,由 ledger-protocol reuse 规则 #2「currentHead 可前移」容忍,**不需为它改时序**)
|
|
521
|
-
- `diffHash
|
|
521
|
+
- `diffHash`:必须由 ledger v2 的 commit-invariant 内容变更集算法生成,并通过 `--change-dir` 纳入 test-tracking manifest 中被 `.gitignore` 忽略的测试;禁止自行拼接 Git 输出或仅使用某一段 diff:
|
|
522
522
|
|
|
523
523
|
```powershell
|
|
524
|
-
|
|
524
|
+
python <skills-root>/scripts/harness_ledger.py diff-hash --repo . --base <baseCommit> --change-dir ".harness/changes/<change-name>" --json
|
|
525
525
|
```
|
|
526
526
|
|
|
527
|
-
>
|
|
528
|
-
|
|
529
|
-
> ⚠️ **禁止任何单部分简化(堵字面空子)**:上述教训只点了"仅用未提交 diff"。实际还有两种等价违规简化,均**禁止**:
|
|
530
|
-
> - `git diff <base> HEAD --binary`(仅已提交部分):commit 后工作树 clean 时结果偶然与三部分合并一致,但 commit 前算会漏未提交+未跟踪,且方法本身违反"三部分合并"要求。
|
|
531
|
-
> - `node -e "...crypto.createHash('sha256')..."` 自算:绕过 PowerShell 三部分合并命令,且无法捕获未跟踪文件内容。
|
|
532
|
-
>
|
|
533
|
-
> 无论 commit 前后、无论工作树是否 clean,**必须**用三部分合并命令。"commit 后 clean 致单部分偶然等价"不得作为省略三部分的依据——时序或工作树状态一旦变化即复现复用链断裂。
|
|
527
|
+
> `content-changeset-2` 同时读取 tracked diff、标准 untracked 文件和 manifest 的精确测试路径。manifest 缺失时保持普通行为;manifest 存在但路径越界、内容 hash 漂移或结构非法时命令失败,ledger 不可复用。checkpoint commit 不改变各路径的工作树内容,因此提交前后 hash 保持一致。
|
|
534
528
|
|
|
535
529
|
> 这样 harness-test 的 Phase 1 可读取 ledger 判断是否复用 run 的 unitTest(diffHash commit-invariant + reuse 规则 #2 允许 HEAD 前移 → run 的 checkpoint commit 不破坏复用),submit 也可复用 compile 结果。详见 `../protocols/ledger-protocol.md`。
|
|
536
530
|
|
|
@@ -3,7 +3,7 @@ name: harness-submit
|
|
|
3
3
|
description: 最终提交封装:验证→中文 commit→提交/推送;worktree 模式含 --no-ff
|
|
4
4
|
合并回主分支。使用场景:提交代码、commit、push、合并分支、merge to main、完成开发
|
|
5
5
|
---
|
|
6
|
-
<!-- generated by harness_deploy.py; core=
|
|
6
|
+
<!-- generated by harness_deploy.py; core=2df0efbebf1f603a; overlay=none; agent=codex; do not edit -->
|
|
7
7
|
# harness-submit — 最终提交(含 worktree 合并)
|
|
8
8
|
|
|
9
9
|
## Purpose
|
|
@@ -53,10 +53,10 @@ description: 最终提交封装:验证→中文 commit→提交/推送;workt
|
|
|
53
53
|
|
|
54
54
|
### 提交流程(步骤 0–7)
|
|
55
55
|
|
|
56
|
-
0. **启动准备** — 确定变更名;读 ledger
|
|
56
|
+
0. **启动准备** — 确定变更名;读 ledger,以 `harness_ledger.py diff-hash --repo . --base <baseCommit> --change-dir ".harness/changes/<change-name>" --json` 计算 diffHash + post-test 7 类分类;append `phase.start`
|
|
57
57
|
1. **合并最新代码** — 主目录:`stash` → `pull --rebase` → `stash pop`;**worktree:N/A**(远端同步在合并段主分支完成)
|
|
58
58
|
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` 写回 ledger `unitTestFull` 项。增量 `unitTest` 永远不能冒充 `unitTestFull` 门禁。
|
|
59
|
-
3. **.gitignore +
|
|
59
|
+
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**。
|
|
60
60
|
4. **提交方式** — 主目录:AskUserQuestion 三选项(commit+push / 仅本地 / 取消);**worktree:固定仅本地 commit**
|
|
61
61
|
5. **commit-message.txt** ⚠️ — 展示 staged、diff stat、完整中文 message;用户确认
|
|
62
62
|
6. **commit / push** — `git commit -F`;主目录按选项 push(push 前 fetch 检查远端);**worktree:只 commit,记录 local hash**
|
|
@@ -98,6 +98,8 @@ commit+push / 仅本地 commit / 取消;**不调用 Superpowers 呈现 PR/丢
|
|
|
98
98
|
|
|
99
99
|
见 `checklist.md` 与 `../protocols/ledger-protocol.md`、`../protocols/submit-protocol.md`。
|
|
100
100
|
|
|
101
|
+
test-tracking manifest 是 ignored test 的唯一强制暂存授权:只允许 `harness_test_guard.py stage` 暂存 manifest 中已校验路径,禁止 `git add -f .`、目录级 `git add -f` 或全局修改 `.gitignore`。worktree commit 前须确认 manifest 路径全部进入 cached diff;合并回主分支后、删除 worktree 前须确认这些路径已由目标 commit 跟踪,否则停止清理。
|
|
102
|
+
|
|
101
103
|
### 四、worktree 合并硬规则
|
|
102
104
|
|
|
103
105
|
- **push 只在主分支**;worktree 分支不 push
|
|
@@ -131,7 +133,7 @@ git 经 PowerShell;commit/报告不得含明文密钥。遵循 `../protocols/s
|
|
|
131
133
|
|
|
132
134
|
## 执行日志
|
|
133
135
|
|
|
134
|
-
`events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py`
|
|
136
|
+
`events.ndjson` 为唯一事实源(schema_version 2,`note` 承载人类可读摘要);`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止用 Write/Edit 直接维护**。直接修改的内容会在 `phase.end` 或 finalize 时被完整重建覆盖,属于数据丢失;需要保留的详情必须进入事件 `note`。结构 → [[../protocols/report-pipeline-protocol.md|report-pipeline-protocol]]
|
|
135
137
|
|
|
136
138
|
```powershell
|
|
137
139
|
python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase <phase> --type phase.start --note "<触发指令>"
|