@hunter-harness/workflow-harness 0.2.0 → 0.2.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/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +35 -21
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/reference.md +53 -7
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py +47 -3
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +2 -2
- package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-plan/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-run/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-submit/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-sync/SKILL.md +2 -2
- package/harness/bundles/general/claude-code/harness-test/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +35 -21
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/reference.md +53 -7
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge.py +47 -3
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +2 -2
- package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-run/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +2 -2
- package/harness/bundles/general/codebuddy/harness-test/SKILL.md +1 -1
- package/harness/bundles/general/codex/.harness-build.json +1 -1
- package/harness/bundles/general/codex/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +35 -21
- package/harness/bundles/general/codex/harness-knowledge-ingest/reference.md +53 -7
- package/harness/bundles/general/codex/harness-knowledge-ingest/scripts/harness_knowledge.py +47 -3
- package/harness/bundles/general/codex/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +2 -2
- package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-plan/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-run/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-submit/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-sync/SKILL.md +2 -2
- package/harness/bundles/general/codex/harness-test/SKILL.md +1 -1
- package/harness/bundles/general/cursor/.harness-build.json +1 -1
- package/harness/bundles/general/cursor/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +35 -21
- package/harness/bundles/general/cursor/harness-knowledge-ingest/reference.md +53 -7
- package/harness/bundles/general/cursor/harness-knowledge-ingest/scripts/harness_knowledge.py +47 -3
- package/harness/bundles/general/cursor/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +2 -2
- package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-plan/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-run/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-submit/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-sync/SKILL.md +2 -2
- package/harness/bundles/general/cursor/harness-test/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/.harness-build.json +1 -1
- package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-archive/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +35 -21
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/reference.md +53 -7
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py +47 -3
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +2 -2
- package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-package/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-plan/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-run/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-submit/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-sync/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-test/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +35 -21
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/reference.md +53 -7
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge.py +47 -3
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +2 -2
- package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-package/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-run/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-test/SKILL.md +1 -1
- package/harness/bundles/java/codex/.harness-build.json +1 -1
- package/harness/bundles/java/codex/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-archive/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +35 -21
- package/harness/bundles/java/codex/harness-knowledge-ingest/reference.md +53 -7
- package/harness/bundles/java/codex/harness-knowledge-ingest/scripts/harness_knowledge.py +47 -3
- package/harness/bundles/java/codex/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +2 -2
- package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-package/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-plan/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-run/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-submit/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-sync/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-test/SKILL.md +1 -1
- package/harness/bundles/java/cursor/.harness-build.json +1 -1
- package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-archive/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +35 -21
- package/harness/bundles/java/cursor/harness-knowledge-ingest/reference.md +53 -7
- package/harness/bundles/java/cursor/harness-knowledge-ingest/scripts/harness_knowledge.py +47 -3
- package/harness/bundles/java/cursor/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +2 -2
- package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-package/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-plan/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-run/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-submit/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-sync/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-test/SKILL.md +1 -1
- package/harness/manifests/general/claude-code.json +15 -15
- package/harness/manifests/general/codebuddy.json +15 -15
- package/harness/manifests/general/codex.json +15 -15
- package/harness/manifests/general/cursor.json +15 -15
- package/harness/manifests/java/claude-code.json +17 -17
- package/harness/manifests/java/codebuddy.json +17 -17
- package/harness/manifests/java/codex.json +17 -17
- package/harness/manifests/java/cursor.json +17 -17
- package/hunter-workflow-family.json +1 -1
- package/package.json +1 -1
|
@@ -20,7 +20,7 @@ disallowed-tools:
|
|
|
20
20
|
- Bash(awk *)
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
---
|
|
23
|
-
<!-- generated by harness_deploy.py; core=
|
|
23
|
+
<!-- generated by harness_deploy.py; core=781daf01a900c012; overlay=none; agent=claude-code; do not edit -->
|
|
24
24
|
# harness-archive — 变更归档
|
|
25
25
|
|
|
26
26
|
## Purpose
|
|
@@ -20,7 +20,7 @@ disallowed-tools:
|
|
|
20
20
|
- Bash(awk *)
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
---
|
|
23
|
-
<!-- generated by harness_deploy.py; core=
|
|
23
|
+
<!-- generated by harness_deploy.py; core=781daf01a900c012; overlay=none; agent=claude-code; do not edit -->
|
|
24
24
|
# harness-codebase-map — 代码库地图
|
|
25
25
|
|
|
26
26
|
## Purpose
|
|
@@ -20,7 +20,7 @@ disallowed-tools:
|
|
|
20
20
|
- Bash(awk *)
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
---
|
|
23
|
-
<!-- generated by harness_deploy.py; core=
|
|
23
|
+
<!-- generated by harness_deploy.py; core=781daf01a900c012; overlay=none; agent=claude-code; do not edit -->
|
|
24
24
|
# harness-knowledge-ingest
|
|
25
25
|
|
|
26
26
|
从 `.harness/archive/**/reports/final/summary-data.json` 抽取项目知识,生成并维护本地 `.harness/knowledge/` 索引。
|
|
@@ -51,7 +51,7 @@ disallowed-tools:
|
|
|
51
51
|
解决两个问题:
|
|
52
52
|
|
|
53
53
|
1. **整理知识库内容**:把归档里的 `businessGoal`、`changedFiles`、`maintenanceNotes`、`knownRisks`、`manualActions`、`verification`、`reviewSummary` 抽成知识条目。
|
|
54
|
-
2. **维护知识生命周期**:检查索引是否过期,保留 active
|
|
54
|
+
2. **维护知识生命周期**:检查索引是否过期,保留 active 条目;高置信 candidate 由 `autoPromote` 自动提升;其余 candidate/conflicted 由 **Agent judge** 闭环裁决,不再默认输出人工待办清单。
|
|
55
55
|
|
|
56
56
|
## Outputs
|
|
57
57
|
|
|
@@ -84,11 +84,11 @@ disallowed-tools:
|
|
|
84
84
|
|
|
85
85
|
| 命令 | 用途 |
|
|
86
86
|
|---|---|
|
|
87
|
-
| `auto` | 一键防腐:首建 config、sync --update
|
|
87
|
+
| `auto` | 一键防腐:首建 config、sync --update、**默认**写回 validator 建议、verify、audit;随后由 **Agent** 执行 judge 闭环 |
|
|
88
88
|
| `ingest` | 重建/刷新知识索引,抽取 candidate;`--no-incremental` 强制全量重抽取 |
|
|
89
89
|
| `sync` | 检查 index 与 archive/HEAD 一致性;`--update` 自动刷新 |
|
|
90
|
-
| `promote` | candidate→active
|
|
91
|
-
| `demote` | active→stale/candidate
|
|
90
|
+
| `promote` | candidate→active(显式 promote 或 autoPromote / judge 触发) |
|
|
91
|
+
| `demote` | active→stale/candidate(显式 demote 或自动降级策略触发) |
|
|
92
92
|
| `audit` | 生成 Candidate/Stale/Superseded/Conflict/Active Review 报告 |
|
|
93
93
|
| `verify` | 执行 entry validators,刷新 lifecycle.validation,生成 verification-report |
|
|
94
94
|
| `suggest-validators` | 生成 file_exists/file_contains validator 建议;`--apply` 写回 entry |
|
|
@@ -120,29 +120,40 @@ powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge.py' inges
|
|
|
120
120
|
- `views/`:Obsidian 友好的浏览视图。
|
|
121
121
|
- `reports/`:本次 ingest 报告。
|
|
122
122
|
|
|
123
|
-
### Phase 2
|
|
123
|
+
### Phase 2:一键 auto(推荐入口)
|
|
124
124
|
|
|
125
125
|
```powershell
|
|
126
|
-
powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge.py'
|
|
126
|
+
powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge.py' auto --project '<project-root>'"
|
|
127
127
|
```
|
|
128
128
|
|
|
129
|
-
|
|
129
|
+
`auto` 默认会写回确定性 validator 建议(`--no-apply-suggestions` 可关闭)。JSON 返回含 `lifecycle` 摘要(validatorsApplied、autoPromote、pendingAgentJudge 等)。
|
|
130
|
+
|
|
131
|
+
### Phase 3:Agent judge 闭环(auto 之后必须执行)
|
|
132
|
+
|
|
133
|
+
当 `lifecycle.pendingAgentJudge > 0`、存在 `pending-judge` outbox,或 `judge export` 的 `counts.pending > 0` 时:
|
|
134
|
+
|
|
135
|
+
1. `judge export`(或读 maintain 产出的 pending judgements)
|
|
136
|
+
2. Agent 读取 export JSON,按 `reference.md`「Agent judge 启发式」批量写 `reports/judge-decisions-<ts>.json`
|
|
137
|
+
3. `judge apply --apply <decisions.json>`(`knowledge.manualReview=true` 时需用户显式 `--force`)
|
|
138
|
+
4. 向用户输出 **已处理报告**(promoted/dropped/superseded/kept/skipped 计数 + 报告路径)
|
|
139
|
+
|
|
140
|
+
**禁止**默认输出「请人工确认 N 条 candidate」类五步待办清单。拿不准的 candidate 保持 `candidate` 状态留待下轮,记入 `skippedCandidates` 即可。
|
|
130
141
|
|
|
131
|
-
|
|
142
|
+
裁决体量:`config.judge.maxCandidatesPerRun`(默认 100);conflicted 优先全量裁决。
|
|
132
143
|
|
|
133
|
-
|
|
144
|
+
### Phase 4:同步检查(可选)
|
|
145
|
+
|
|
146
|
+
```powershell
|
|
147
|
+
powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge.py' sync --project '<project-root>'"
|
|
148
|
+
```
|
|
134
149
|
|
|
135
|
-
|
|
150
|
+
当 `upToDate=false` 时,运行 `sync --update` 或重新 `auto`,再交给 `harness-knowledge-query` 查询。
|
|
136
151
|
|
|
137
|
-
|
|
138
|
-
- 架构决策
|
|
139
|
-
- API contract
|
|
140
|
-
- 反复踩坑点
|
|
141
|
-
- 测试或发布前置条件
|
|
152
|
+
### Phase 5:显式 promote/demote(例外路径)
|
|
142
153
|
|
|
143
|
-
|
|
154
|
+
仅在用户点名单条、或 `manualReview=true` 需人工确认时使用 `promote` / `demote`。日常归档后不要逐条人工复核。
|
|
144
155
|
|
|
145
|
-
### Phase
|
|
156
|
+
### Phase 6:解释同步结果
|
|
146
157
|
|
|
147
158
|
回复用户或交给后续 skill 前,应说明:
|
|
148
159
|
|
|
@@ -163,8 +174,8 @@ active 条目适合保存:
|
|
|
163
174
|
|
|
164
175
|
## Lifecycle rules
|
|
165
176
|
|
|
166
|
-
- `candidate
|
|
167
|
-
- `active
|
|
177
|
+
- `candidate`:自动抽取;高置信 + 白名单类型可由 autoPromote 提升;其余由 Agent judge 裁决或保持 candidate。
|
|
178
|
+
- `active`:autoPromote、judge promote,或显式 promote 后可用。
|
|
168
179
|
- `stale`:来源 commit 缺失、来源 commit 后相关文件变化,或当前代码无法证明旧结论仍有效。
|
|
169
180
|
- `superseded`:被后续归档/决策取代。
|
|
170
181
|
- `conflicted`:与另一条 active/candidate 知识冲突。
|
|
@@ -186,6 +197,7 @@ active 条目适合保存:
|
|
|
186
197
|
- write_active_knowledge_after_manual_confirmation
|
|
187
198
|
- write_confidence_scores
|
|
188
199
|
- auto_promote_high_confidence_knowledge_when_configured
|
|
200
|
+
- agent_judge_knowledge_lifecycle
|
|
189
201
|
- write_knowledge_index
|
|
190
202
|
- write_obsidian_views
|
|
191
203
|
|
|
@@ -223,7 +235,9 @@ powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge.py' sync
|
|
|
223
235
|
- `upToDate` 及 `reasons`(sync)或新增/覆盖条目数(ingest/promote)。
|
|
224
236
|
- 当前 `active` / `candidate` / `stale` 数量统计。
|
|
225
237
|
- 产物路径(`index.json`、`index.sqlite`、`views/`、`reports/`)。
|
|
226
|
-
-
|
|
238
|
+
- `lifecycle` 摘要:`validatorsApplied`、`candidateAutoPromoted`、`pendingAgentJudge` 等。
|
|
239
|
+
- **已处理报告**(auto + judge 后):promoted/dropped/superseded/kept/skipped 计数与 `reports/judge-decisions-*.json`、`judgements-*.json` 路径。
|
|
240
|
+
- 仅当 `upToDate=false` 时建议 `sync --update`;查询历史 → `/harness-knowledge-query`。**禁止**默认列出「请人工确认 N 条 candidate」待办。
|
|
227
241
|
|
|
228
242
|
## 渐进披露
|
|
229
243
|
|
|
@@ -10,16 +10,36 @@ description: harness-knowledge-ingest 的命令详细示例、config.json 配置
|
|
|
10
10
|
|
|
11
11
|
### Auto maintenance
|
|
12
12
|
|
|
13
|
-
如果只是想让 skill 自己完成常规知识库防腐,优先跑 `auto
|
|
13
|
+
如果只是想让 skill 自己完成常规知识库防腐,优先跑 `auto`,再执行 **Agent judge 闭环**(见下文):
|
|
14
14
|
|
|
15
15
|
```powershell
|
|
16
16
|
powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge.py' auto --project '<project-root>'"
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
`auto` 会按默认维护顺序执行:首建 `config.json`(若缺失)、`sync --update
|
|
19
|
+
`auto` 会按默认维护顺序执行:首建 `config.json`(若缺失)、`sync --update`、**默认写回** validator 建议、`verify`、`audit`。首次发现 `.harness/knowledge/config.json` 不存在时,会写入启用版 `autoPromote` + `activeLifecycle.autoDemote` + `knowledgeValidation.autoDemoteActive` + `judge.maxCandidatesPerRun` 配置。
|
|
20
|
+
|
|
21
|
+
关闭 validator 写回:
|
|
22
|
+
|
|
23
|
+
```powershell
|
|
24
|
+
powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge.py' auto --project '<project-root>' --no-apply-suggestions"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Agent judge 闭环(auto 之后)
|
|
28
|
+
|
|
29
|
+
1. `judge export`(或 maintain 产出的 pending judgements)
|
|
30
|
+
2. Agent 读 export,写 `reports/judge-decisions-<ts>.json`(schema 对齐 `judge apply`)
|
|
31
|
+
3. `judge apply --apply <decisions.json>`
|
|
32
|
+
4. 输出已处理报告,不列人工待办
|
|
33
|
+
|
|
34
|
+
**启发式**(Agent 侧,非脚本硬编码):
|
|
35
|
+
|
|
36
|
+
- **conflicted**:优先 `supersede` 较旧/较弱证据方;对称难判 → `keep-conflict` + reason
|
|
37
|
+
- **candidate**:`decision|api-contract|requirement|pitfall` 且 confidence 高 → `promote`;`implementation|test-evidence` 倾向 `drop` 或保持 candidate
|
|
38
|
+
- 超过 `judge.maxCandidatesPerRun`(默认 100)的低分 candidate:跳过,记入 `skippedCandidates`
|
|
20
39
|
|
|
21
40
|
```powershell
|
|
22
|
-
powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge.py'
|
|
41
|
+
powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge.py' judge --project '<project-root>' --export '<export.json>'"
|
|
42
|
+
powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge.py' judge --project '<project-root>' --apply '<decisions.json>'"
|
|
23
43
|
```
|
|
24
44
|
|
|
25
45
|
常用参数:
|
|
@@ -147,20 +167,25 @@ powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge.py' demot
|
|
|
147
167
|
|
|
148
168
|
`demote` 只处理人工确认后的 `active` 条目,可降级到 `stale` 或 `candidate`。降级到 `stale` 时会写入 `manual demotion` stale reason,并在后续 ingest 中保留该人工维护条目。
|
|
149
169
|
|
|
150
|
-
###
|
|
170
|
+
### activeLifecycle 与 validator auto-demotion
|
|
151
171
|
|
|
152
|
-
|
|
172
|
+
`auto` 首建的 `config.json` **默认已启用** `activeLifecycle.autoDemote` 与 `knowledgeValidation.autoDemoteActive`。已有项目不会强制覆盖。手动启用示例:
|
|
153
173
|
|
|
154
174
|
```json
|
|
155
175
|
{
|
|
156
176
|
"activeLifecycle": {
|
|
157
177
|
"autoDemote": true,
|
|
158
178
|
"targetStatus": "stale"
|
|
179
|
+
},
|
|
180
|
+
"knowledgeValidation": {
|
|
181
|
+
"enabled": true,
|
|
182
|
+
"autoDemoteActive": true,
|
|
183
|
+
"defaultTargetStatus": "stale"
|
|
159
184
|
}
|
|
160
185
|
}
|
|
161
186
|
```
|
|
162
187
|
|
|
163
|
-
启用后,ingest
|
|
188
|
+
启用后,ingest/verify 会把需复核或 validator 失败的 active 自动降级,并写入 `lifecycle` 审计字段。
|
|
164
189
|
|
|
165
190
|
### Optional confidence scoring and autoPromote
|
|
166
191
|
|
|
@@ -199,13 +224,27 @@ confidence 不是“绝对正确率”,只表示当前证据强弱。分数会
|
|
|
199
224
|
"validatorFailPenalty": 0.5,
|
|
200
225
|
"supersededPenalty": 0.8,
|
|
201
226
|
"conflictPenalty": 0.8
|
|
227
|
+
},
|
|
228
|
+
"activeLifecycle": {
|
|
229
|
+
"autoDemote": true,
|
|
230
|
+
"targetStatus": "stale"
|
|
231
|
+
},
|
|
232
|
+
"knowledgeValidation": {
|
|
233
|
+
"enabled": true,
|
|
234
|
+
"autoDemoteActive": true,
|
|
235
|
+
"defaultTargetStatus": "stale",
|
|
236
|
+
"allowCommandValidators": false,
|
|
237
|
+
"commandTimeoutSeconds": 60
|
|
238
|
+
},
|
|
239
|
+
"judge": {
|
|
240
|
+
"maxCandidatesPerRun": 100
|
|
202
241
|
}
|
|
203
242
|
}
|
|
204
243
|
```
|
|
205
244
|
|
|
206
245
|
自动提升只处理配置允许的类型,默认排除 stale/conflicted/superseded,且会写入 `lifecycle.autoPromoted=true`、`promotionNote` 和 `promotedAt`。一次性实现细节、测试证据、风险提醒仍不应自动提升为长期事实。
|
|
207
246
|
|
|
208
|
-
### Optional validator auto-demotion
|
|
247
|
+
### Optional validator auto-demotion(旧文档兼容)
|
|
209
248
|
|
|
210
249
|
默认不会因为 validator 失败自动改写 `active`。如明确希望确定性 validator 失败时自动降级 active,可在 `.harness/knowledge/config.json` 中启用:
|
|
211
250
|
|
|
@@ -307,3 +346,10 @@ powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge_mcp.py'"
|
|
|
307
346
|
- `auto` JSON 输出新增 `config` 摘要:`path`、`created`、`autoPromoteEnabled`、`appliedBy`、`candidateAutoPromoted`。
|
|
308
347
|
- `ingest` 单独命令仍不首建 config;项目策略的自动首建只发生在 `auto` 维护入口。
|
|
309
348
|
- 单测扩展到 35 个,覆盖“已有最新 index 但缺 config 时,auto 首建启用配置并立即提升”的路径。
|
|
349
|
+
|
|
350
|
+
## v1.14 补充能力(knowledge-auto-close-loop)
|
|
351
|
+
|
|
352
|
+
- `auto` **默认写回** validator 建议(`--no-apply-suggestions` 可关闭);JSON 新增 `lifecycle` 摘要。
|
|
353
|
+
- 首建 `config.json` 默认含 `activeLifecycle.autoDemote`、`knowledgeValidation.autoDemoteActive`、`judge.maxCandidatesPerRun=100`。
|
|
354
|
+
- SKILL 工作流:`auto` 后由 **Agent** 执行 `judge export` → 裁决 → `judge apply`;禁止默认输出人工待办清单。
|
|
355
|
+
- `harness-sync` 明确知识闭环主入口为 `/harness-knowledge-ingest auto`。
|
package/harness/bundles/general/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py
CHANGED
|
@@ -58,6 +58,20 @@ DEFAULT_AUTO_KNOWLEDGE_CONFIG = {
|
|
|
58
58
|
"supersededPenalty": 0.8,
|
|
59
59
|
"conflictPenalty": 0.8,
|
|
60
60
|
},
|
|
61
|
+
"activeLifecycle": {
|
|
62
|
+
"autoDemote": True,
|
|
63
|
+
"targetStatus": "stale",
|
|
64
|
+
},
|
|
65
|
+
"knowledgeValidation": {
|
|
66
|
+
"enabled": True,
|
|
67
|
+
"autoDemoteActive": True,
|
|
68
|
+
"defaultTargetStatus": "stale",
|
|
69
|
+
"allowCommandValidators": False,
|
|
70
|
+
"commandTimeoutSeconds": 60,
|
|
71
|
+
},
|
|
72
|
+
"judge": {
|
|
73
|
+
"maxCandidatesPerRun": 100,
|
|
74
|
+
},
|
|
61
75
|
}
|
|
62
76
|
|
|
63
77
|
|
|
@@ -106,6 +120,9 @@ def ensure_auto_knowledge_config(knowledge: Path) -> dict[str, Any]:
|
|
|
106
120
|
"path": str(config_path),
|
|
107
121
|
"created": False,
|
|
108
122
|
"autoPromoteEnabled": auto_promote_config(config)["enabled"],
|
|
123
|
+
"autoDemoteEnabled": active_lifecycle_config(config)["autoDemote"],
|
|
124
|
+
"autoDemoteActiveEnabled": knowledge_validation_config(config)["autoDemoteActive"],
|
|
125
|
+
"maxCandidatesPerRun": judge_config(config)["maxCandidatesPerRun"],
|
|
109
126
|
"appliedBy": "existing",
|
|
110
127
|
"candidateAutoPromoted": None,
|
|
111
128
|
}
|
|
@@ -115,6 +132,9 @@ def ensure_auto_knowledge_config(knowledge: Path) -> dict[str, Any]:
|
|
|
115
132
|
"path": str(config_path),
|
|
116
133
|
"created": True,
|
|
117
134
|
"autoPromoteEnabled": True,
|
|
135
|
+
"autoDemoteEnabled": True,
|
|
136
|
+
"autoDemoteActiveEnabled": True,
|
|
137
|
+
"maxCandidatesPerRun": judge_config(config)["maxCandidatesPerRun"],
|
|
118
138
|
"appliedBy": None,
|
|
119
139
|
"candidateAutoPromoted": None,
|
|
120
140
|
}
|
|
@@ -185,6 +205,16 @@ def auto_promote_config(config: dict[str, Any]) -> dict[str, Any]:
|
|
|
185
205
|
}
|
|
186
206
|
|
|
187
207
|
|
|
208
|
+
def judge_config(config: dict[str, Any]) -> dict[str, Any]:
|
|
209
|
+
raw = config.get("judge")
|
|
210
|
+
if not isinstance(raw, dict):
|
|
211
|
+
raw = {}
|
|
212
|
+
max_candidates = int(raw.get("maxCandidatesPerRun") or 100)
|
|
213
|
+
return {
|
|
214
|
+
"maxCandidatesPerRun": max(1, max_candidates),
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
|
|
188
218
|
def sha256_file(path: Path) -> str:
|
|
189
219
|
h = hashlib.sha256()
|
|
190
220
|
with path.open("rb") as f:
|
|
@@ -2513,7 +2543,7 @@ def auto_knowledge(
|
|
|
2513
2543
|
*,
|
|
2514
2544
|
limit: int = 20,
|
|
2515
2545
|
suggest_statuses: list[str] | None = None,
|
|
2516
|
-
apply_suggestions: bool =
|
|
2546
|
+
apply_suggestions: bool = True,
|
|
2517
2547
|
incremental: bool = True,
|
|
2518
2548
|
audit_limit: int = 10,
|
|
2519
2549
|
) -> dict[str, Any]:
|
|
@@ -2539,6 +2569,7 @@ def auto_knowledge(
|
|
|
2539
2569
|
)
|
|
2540
2570
|
verification = verify_knowledge(project)
|
|
2541
2571
|
audit = audit_entries(project, limit=audit_limit)
|
|
2572
|
+
ingest_mode = sync.get("index", {}).get("ingestMode", {}) if isinstance(sync.get("index"), dict) else {}
|
|
2542
2573
|
return {
|
|
2543
2574
|
"project": str(project),
|
|
2544
2575
|
"generatedAt": now_iso(),
|
|
@@ -2578,6 +2609,15 @@ def auto_knowledge(
|
|
|
2578
2609
|
"conflictReview": len(audit["conflictReview"]),
|
|
2579
2610
|
"activeReview": len(audit["activeReview"]),
|
|
2580
2611
|
},
|
|
2612
|
+
"lifecycle": {
|
|
2613
|
+
"validatorsApplied": suggestions["applied"],
|
|
2614
|
+
"candidateAutoPromoted": ingest_mode.get(
|
|
2615
|
+
"candidateAutoPromoted", config_summary.get("candidateAutoPromoted") or 0
|
|
2616
|
+
),
|
|
2617
|
+
"activeAutoDemoted": ingest_mode.get("activeAutoDemoted", 0),
|
|
2618
|
+
"validationAutoDemoted": ingest_mode.get("validationAutoDemoted", verification["autoDemoted"]),
|
|
2619
|
+
"pendingAgentJudge": len(audit["conflictReview"]) + len(audit["candidateReview"]),
|
|
2620
|
+
},
|
|
2581
2621
|
}
|
|
2582
2622
|
|
|
2583
2623
|
|
|
@@ -3902,7 +3942,11 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
3902
3942
|
default=[],
|
|
3903
3943
|
help="Only suggest validators for this lifecycle status",
|
|
3904
3944
|
)
|
|
3905
|
-
auto.add_argument(
|
|
3945
|
+
auto.add_argument(
|
|
3946
|
+
"--no-apply-suggestions",
|
|
3947
|
+
action="store_true",
|
|
3948
|
+
help="Do not write validator suggestions into entry JSON files (default applies them)",
|
|
3949
|
+
)
|
|
3906
3950
|
auto.add_argument("--no-incremental", action="store_true", help="Refresh without reusing the archive entry cache")
|
|
3907
3951
|
|
|
3908
3952
|
audit = sub.add_parser("audit", help="Generate review lists for candidate, stale, and superseded entries")
|
|
@@ -3999,7 +4043,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
3999
4043
|
Path(args.project),
|
|
4000
4044
|
limit=args.limit,
|
|
4001
4045
|
suggest_statuses=args.suggest_statuses,
|
|
4002
|
-
apply_suggestions=args.
|
|
4046
|
+
apply_suggestions=not args.no_apply_suggestions,
|
|
4003
4047
|
incremental=not args.no_incremental,
|
|
4004
4048
|
audit_limit=args.audit_limit,
|
|
4005
4049
|
)
|
|
@@ -52,7 +52,7 @@ TOOL_DESCRIPTIONS: list[dict[str, Any]] = [
|
|
|
52
52
|
"project": {"type": "string", "description": "Project root containing .harness/archive."},
|
|
53
53
|
"limit": {"type": "integer", "default": 20, "minimum": 1, "maximum": 100},
|
|
54
54
|
"suggest_statuses": {"type": "array", "items": {"type": "string"}, "default": []},
|
|
55
|
-
"apply_suggestions": {"type": "boolean", "default":
|
|
55
|
+
"apply_suggestions": {"type": "boolean", "default": True, "description": "Write validator suggestions into entry JSON files (default on)."},
|
|
56
56
|
"incremental": {"type": "boolean", "default": True, "description": "Reuse cached archive extraction results when refreshing."},
|
|
57
57
|
"audit_limit": {"type": "integer", "default": 10, "minimum": 1, "maximum": 100},
|
|
58
58
|
},
|
|
@@ -181,7 +181,7 @@ def create_server() -> Any:
|
|
|
181
181
|
project: str,
|
|
182
182
|
limit: int = 20,
|
|
183
183
|
suggest_statuses: list[str] | None = None,
|
|
184
|
-
apply_suggestions: bool =
|
|
184
|
+
apply_suggestions: bool = True,
|
|
185
185
|
incremental: bool = True,
|
|
186
186
|
audit_limit: int = 10,
|
|
187
187
|
) -> dict[str, Any]:
|
|
@@ -20,7 +20,7 @@ disallowed-tools:
|
|
|
20
20
|
- Bash(awk *)
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
---
|
|
23
|
-
<!-- generated by harness_deploy.py; core=
|
|
23
|
+
<!-- generated by harness_deploy.py; core=781daf01a900c012; overlay=none; agent=claude-code; do not edit -->
|
|
24
24
|
# harness-knowledge-query
|
|
25
25
|
|
|
26
26
|
根据用户的新需求或排查问题,从项目本地 `.harness/knowledge` 中检索历史需求、决策、实现、风险和测试证据,并生成 AI 可读的 context pack。
|
|
@@ -20,7 +20,7 @@ disallowed-tools:
|
|
|
20
20
|
- Bash(awk *)
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
---
|
|
23
|
-
<!-- generated by harness_deploy.py; core=
|
|
23
|
+
<!-- generated by harness_deploy.py; core=781daf01a900c012; overlay=none; agent=claude-code; do not edit -->
|
|
24
24
|
# harness-plan — 需求规划
|
|
25
25
|
|
|
26
26
|
## Purpose
|
|
@@ -21,7 +21,7 @@ disallowed-tools:
|
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
- Bash(codegraph *)
|
|
23
23
|
---
|
|
24
|
-
<!-- generated by harness_deploy.py; core=
|
|
24
|
+
<!-- generated by harness_deploy.py; core=781daf01a900c012; overlay=none; agent=claude-code; do not edit -->
|
|
25
25
|
# harness-review — 代码审查
|
|
26
26
|
|
|
27
27
|
## Purpose
|
|
@@ -21,7 +21,7 @@ disallowed-tools:
|
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
- Bash(codegraph *)
|
|
23
23
|
---
|
|
24
|
-
<!-- generated by harness_deploy.py; core=
|
|
24
|
+
<!-- generated by harness_deploy.py; core=781daf01a900c012; overlay=none; agent=claude-code; do not edit -->
|
|
25
25
|
# harness-run — 需求编码
|
|
26
26
|
|
|
27
27
|
## Purpose
|
|
@@ -20,7 +20,7 @@ disallowed-tools:
|
|
|
20
20
|
- Bash(awk *)
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
---
|
|
23
|
-
<!-- generated by harness_deploy.py; core=
|
|
23
|
+
<!-- generated by harness_deploy.py; core=781daf01a900c012; overlay=none; agent=claude-code; do not edit -->
|
|
24
24
|
# harness-submit — 最终提交(含 worktree 合并)
|
|
25
25
|
|
|
26
26
|
## Purpose
|
|
@@ -19,7 +19,7 @@ disallowed-tools:
|
|
|
19
19
|
- Bash(awk *)
|
|
20
20
|
- Bash(curl *)
|
|
21
21
|
---
|
|
22
|
-
<!-- generated by harness_deploy.py; core=
|
|
22
|
+
<!-- generated by harness_deploy.py; core=781daf01a900c012; overlay=none; agent=claude-code; do not edit -->
|
|
23
23
|
# harness-sync — 元数据同步
|
|
24
24
|
|
|
25
25
|
## Purpose
|
|
@@ -38,7 +38,7 @@ disallowed-tools:
|
|
|
38
38
|
| 1 | git log/diff 感知变更量 |
|
|
39
39
|
| 2 | CodeGraph 索引是否需重建 |
|
|
40
40
|
| 3 | `.harness/codebase/map/` 是否过期 → 报告建议 `/harness-codebase-map` |
|
|
41
|
-
| 3.5 | `harness_knowledge.py sync`;可 `sync --update
|
|
41
|
+
| 3.5 | `harness_knowledge.py sync`;可 `sync --update`;失败不得假装可用。**知识闭环主入口**是 `/harness-knowledge-ingest auto`(含 Agent judge),sync 不重复列人工知识待办 |
|
|
42
42
|
| 3.6 | 扫描 `.harness/knowledge/maintenance-outbox/{pending,failed}`;对每项运行 `harness_knowledge.py maintain --project . --archive-id <id> --json`(§8.2:archive close 只 enqueue,sync 异步推进 outbox 到 completed/completed_rules_pending_judge) |
|
|
43
43
|
| 4 | CLAUDE.md 完整性/行数 → 超限 AskUserQuestion 瘦身 |
|
|
44
44
|
| 5 | AGENTS.md 与 CLAUDE.md 一致 |
|
|
@@ -22,7 +22,7 @@ disallowed-tools:
|
|
|
22
22
|
- Bash(node *)
|
|
23
23
|
- Bash(codegraph *)
|
|
24
24
|
---
|
|
25
|
-
<!-- generated by harness_deploy.py; core=
|
|
25
|
+
<!-- generated by harness_deploy.py; core=781daf01a900c012; overlay=none; agent=claude-code; do not edit -->
|
|
26
26
|
# harness-test — 测试执行
|
|
27
27
|
|
|
28
28
|
## Purpose
|
|
@@ -3,7 +3,7 @@ name: harness-archive
|
|
|
3
3
|
description: 归档所有变更产出(计划/测试报告/审查/SQL/API文档)到
|
|
4
4
|
.harness/archive/,含归档元数据和可视化最终总结。使用场景:归档、完成归档、收尾、打包产出物
|
|
5
5
|
---
|
|
6
|
-
<!-- generated by harness_deploy.py; core=
|
|
6
|
+
<!-- generated by harness_deploy.py; core=781daf01a900c012; overlay=none; agent=codebuddy; do not edit -->
|
|
7
7
|
# harness-archive — 变更归档
|
|
8
8
|
|
|
9
9
|
## Purpose
|
|
@@ -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=781daf01a900c012; overlay=none; agent=codebuddy; do not edit -->
|
|
7
7
|
# harness-codebase-map — 代码库地图
|
|
8
8
|
|
|
9
9
|
## Purpose
|
|
@@ -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=781daf01a900c012; overlay=none; agent=codebuddy; do not edit -->
|
|
7
7
|
# harness-knowledge-ingest
|
|
8
8
|
|
|
9
9
|
从 `.harness/archive/**/reports/final/summary-data.json` 抽取项目知识,生成并维护本地 `.harness/knowledge/` 索引。
|
|
@@ -34,7 +34,7 @@ description: 从 .harness/archive 归档整理、同步和维护项目知识索
|
|
|
34
34
|
解决两个问题:
|
|
35
35
|
|
|
36
36
|
1. **整理知识库内容**:把归档里的 `businessGoal`、`changedFiles`、`maintenanceNotes`、`knownRisks`、`manualActions`、`verification`、`reviewSummary` 抽成知识条目。
|
|
37
|
-
2. **维护知识生命周期**:检查索引是否过期,保留 active
|
|
37
|
+
2. **维护知识生命周期**:检查索引是否过期,保留 active 条目;高置信 candidate 由 `autoPromote` 自动提升;其余 candidate/conflicted 由 **Agent judge** 闭环裁决,不再默认输出人工待办清单。
|
|
38
38
|
|
|
39
39
|
## Outputs
|
|
40
40
|
|
|
@@ -67,11 +67,11 @@ description: 从 .harness/archive 归档整理、同步和维护项目知识索
|
|
|
67
67
|
|
|
68
68
|
| 命令 | 用途 |
|
|
69
69
|
|---|---|
|
|
70
|
-
| `auto` | 一键防腐:首建 config、sync --update
|
|
70
|
+
| `auto` | 一键防腐:首建 config、sync --update、**默认**写回 validator 建议、verify、audit;随后由 **Agent** 执行 judge 闭环 |
|
|
71
71
|
| `ingest` | 重建/刷新知识索引,抽取 candidate;`--no-incremental` 强制全量重抽取 |
|
|
72
72
|
| `sync` | 检查 index 与 archive/HEAD 一致性;`--update` 自动刷新 |
|
|
73
|
-
| `promote` | candidate→active
|
|
74
|
-
| `demote` | active→stale/candidate
|
|
73
|
+
| `promote` | candidate→active(显式 promote 或 autoPromote / judge 触发) |
|
|
74
|
+
| `demote` | active→stale/candidate(显式 demote 或自动降级策略触发) |
|
|
75
75
|
| `audit` | 生成 Candidate/Stale/Superseded/Conflict/Active Review 报告 |
|
|
76
76
|
| `verify` | 执行 entry validators,刷新 lifecycle.validation,生成 verification-report |
|
|
77
77
|
| `suggest-validators` | 生成 file_exists/file_contains validator 建议;`--apply` 写回 entry |
|
|
@@ -103,29 +103,40 @@ powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge.py' inges
|
|
|
103
103
|
- `views/`:Obsidian 友好的浏览视图。
|
|
104
104
|
- `reports/`:本次 ingest 报告。
|
|
105
105
|
|
|
106
|
-
### Phase 2
|
|
106
|
+
### Phase 2:一键 auto(推荐入口)
|
|
107
107
|
|
|
108
108
|
```powershell
|
|
109
|
-
powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge.py'
|
|
109
|
+
powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge.py' auto --project '<project-root>'"
|
|
110
110
|
```
|
|
111
111
|
|
|
112
|
-
|
|
112
|
+
`auto` 默认会写回确定性 validator 建议(`--no-apply-suggestions` 可关闭)。JSON 返回含 `lifecycle` 摘要(validatorsApplied、autoPromote、pendingAgentJudge 等)。
|
|
113
|
+
|
|
114
|
+
### Phase 3:Agent judge 闭环(auto 之后必须执行)
|
|
115
|
+
|
|
116
|
+
当 `lifecycle.pendingAgentJudge > 0`、存在 `pending-judge` outbox,或 `judge export` 的 `counts.pending > 0` 时:
|
|
117
|
+
|
|
118
|
+
1. `judge export`(或读 maintain 产出的 pending judgements)
|
|
119
|
+
2. Agent 读取 export JSON,按 `reference.md`「Agent judge 启发式」批量写 `reports/judge-decisions-<ts>.json`
|
|
120
|
+
3. `judge apply --apply <decisions.json>`(`knowledge.manualReview=true` 时需用户显式 `--force`)
|
|
121
|
+
4. 向用户输出 **已处理报告**(promoted/dropped/superseded/kept/skipped 计数 + 报告路径)
|
|
122
|
+
|
|
123
|
+
**禁止**默认输出「请人工确认 N 条 candidate」类五步待办清单。拿不准的 candidate 保持 `candidate` 状态留待下轮,记入 `skippedCandidates` 即可。
|
|
113
124
|
|
|
114
|
-
|
|
125
|
+
裁决体量:`config.judge.maxCandidatesPerRun`(默认 100);conflicted 优先全量裁决。
|
|
115
126
|
|
|
116
|
-
|
|
127
|
+
### Phase 4:同步检查(可选)
|
|
128
|
+
|
|
129
|
+
```powershell
|
|
130
|
+
powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge.py' sync --project '<project-root>'"
|
|
131
|
+
```
|
|
117
132
|
|
|
118
|
-
|
|
133
|
+
当 `upToDate=false` 时,运行 `sync --update` 或重新 `auto`,再交给 `harness-knowledge-query` 查询。
|
|
119
134
|
|
|
120
|
-
|
|
121
|
-
- 架构决策
|
|
122
|
-
- API contract
|
|
123
|
-
- 反复踩坑点
|
|
124
|
-
- 测试或发布前置条件
|
|
135
|
+
### Phase 5:显式 promote/demote(例外路径)
|
|
125
136
|
|
|
126
|
-
|
|
137
|
+
仅在用户点名单条、或 `manualReview=true` 需人工确认时使用 `promote` / `demote`。日常归档后不要逐条人工复核。
|
|
127
138
|
|
|
128
|
-
### Phase
|
|
139
|
+
### Phase 6:解释同步结果
|
|
129
140
|
|
|
130
141
|
回复用户或交给后续 skill 前,应说明:
|
|
131
142
|
|
|
@@ -146,8 +157,8 @@ active 条目适合保存:
|
|
|
146
157
|
|
|
147
158
|
## Lifecycle rules
|
|
148
159
|
|
|
149
|
-
- `candidate
|
|
150
|
-
- `active
|
|
160
|
+
- `candidate`:自动抽取;高置信 + 白名单类型可由 autoPromote 提升;其余由 Agent judge 裁决或保持 candidate。
|
|
161
|
+
- `active`:autoPromote、judge promote,或显式 promote 后可用。
|
|
151
162
|
- `stale`:来源 commit 缺失、来源 commit 后相关文件变化,或当前代码无法证明旧结论仍有效。
|
|
152
163
|
- `superseded`:被后续归档/决策取代。
|
|
153
164
|
- `conflicted`:与另一条 active/candidate 知识冲突。
|
|
@@ -169,6 +180,7 @@ active 条目适合保存:
|
|
|
169
180
|
- write_active_knowledge_after_manual_confirmation
|
|
170
181
|
- write_confidence_scores
|
|
171
182
|
- auto_promote_high_confidence_knowledge_when_configured
|
|
183
|
+
- agent_judge_knowledge_lifecycle
|
|
172
184
|
- write_knowledge_index
|
|
173
185
|
- write_obsidian_views
|
|
174
186
|
|
|
@@ -206,7 +218,9 @@ powershell.exe -Command "python '<skill-dir>\scripts\harness_knowledge.py' sync
|
|
|
206
218
|
- `upToDate` 及 `reasons`(sync)或新增/覆盖条目数(ingest/promote)。
|
|
207
219
|
- 当前 `active` / `candidate` / `stale` 数量统计。
|
|
208
220
|
- 产物路径(`index.json`、`index.sqlite`、`views/`、`reports/`)。
|
|
209
|
-
-
|
|
221
|
+
- `lifecycle` 摘要:`validatorsApplied`、`candidateAutoPromoted`、`pendingAgentJudge` 等。
|
|
222
|
+
- **已处理报告**(auto + judge 后):promoted/dropped/superseded/kept/skipped 计数与 `reports/judge-decisions-*.json`、`judgements-*.json` 路径。
|
|
223
|
+
- 仅当 `upToDate=false` 时建议 `sync --update`;查询历史 → `/harness-knowledge-query`。**禁止**默认列出「请人工确认 N 条 candidate」待办。
|
|
210
224
|
|
|
211
225
|
## 渐进披露
|
|
212
226
|
|