Skip to content

Commit 758e8c1

Browse files
authored
Merge pull request #302 from LeXwDeX/docs/review-reconcile
docs: reconcile harness review with landed implementation
2 parents 773330b + 9543c5d commit 758e8c1

1 file changed

Lines changed: 27 additions & 5 deletions

File tree

docs/harness-review-2026-08-16.md

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,10 @@ review 带 REJECT 完成(checkpoint 候选,`report_to_parent` 默认 true)
5252
`ReviewGateError`(HTTP 处理器 `server/routes/instance/httpapi/handlers/dag.ts:22` 也识别它)。
5353
只改 loop 不够。守卫有正当用途:拦 agent 用 `control(complete)` 抹平未接受的 review。
5454

55-
**方向**:把守卫从 `dag.complete` 上移到工具层(`tool/workflow.ts``control(complete)` 分支)。
56-
自然完成放行,agent 抄近路仍被拦。守卫语义是「谁在调用」而非「图的状态」。
55+
**方向**:自然完成放行,显式抄近路(agent 的 `control(complete)` 与 HTTP complete)仍被拦。
56+
守卫语义是「谁在调用」而非「图的状态」。
57+
**落地实况(#300**:守卫保留在 `dag.complete` 内,新增 `skipReviewGate` 选项仅由调度循环
58+
的自然完成路径传入。与「上移工具层」语义等价,且同时守住 HTTP 显式完成面。
5759

5860
### A-2 变体:completed vs paused(A1 vs A4)
5961

@@ -167,9 +169,9 @@ phase boundaries(continue / clear / handoff / subagent / compact)是现成
167169

168170
## 七、落地顺序(按解锁关系排序)
169171

170-
1. **恢复 REJECT 可达性**(本仓库,最小)。守卫从 `dag.complete` 移到 `tool/workflow.ts`
171-
`control(complete)``loop.ts:328-334` 不再 `dag.fail`。验收:REJECT 图断言 `completed`
172-
reopen-extend 被接受。单独可验证,立刻第一次看到检查点后的 replan。
172+
1. **恢复 REJECT 可达性**(本仓库,最小)。守卫安排见 A-1 落地实况(`dag.complete` 保留守卫 +
173+
`skipReviewGate` 自然路径放行)`loop.ts:328-334` 不再 `dag.fail`。验收:REJECT 图断言
174+
`completed`reopen-extend 被接受。单独可验证,立刻第一次看到检查点后的 replan。
173175
2. **决定要不要 A4**。第 1 步跑通后凭真实 loop 手感判断「只能 extend」够不够。唯一应等经验数据的选择。
174176
3. **并行写集**(本仓库,原子改动):B-1 解序列化 + B-2 汇聚节点替代 canonical writer + B3-a
175177
汇聚点指纹 + B-4 `changed_files` 重叠检测。拆开编译失败。
@@ -276,10 +278,15 @@ config 仓库。按 `runtime-compat.json` 策略运行时先合并,同一 PR
276278
`input_mapping`——「supplied」并不存在。修复:把聚合/canonical 节点的
277279
`changed_files`+`fingerprint` 绑进 verify 的 `input_mapping`(verify 已依赖该节点,
278280
数据依赖与图依赖一致)。
281+
**落地实况(#299**:绑定只落在被聚合器改写的 verify 上。canonical 链式路线的 verify
282+
刻意不绑——绑了会破坏「链式 routes 字节级不变」这一更强的验收项;两条文档主张冲突时
283+
字节级不变优先,空头支票在并行路线上已兑现、链式路线留档为已知残余。
279284
2. **verify FAIL 的终态表现混乱。** verify FAIL → review 被条件跳过(`condition_false`)→
280285
required review 的 skip 不算 failure → 工作流最终死于
281286
「unresolved review outcome(s)」(`loop.ts:328-334`)——原因串误导。属 Direction A
282287
的 REJECT 通路改造的邻域,一并考虑。
288+
**落地实况(#300**:已修复——此类图在检查点自然 completed(不再 fail),
289+
`workflow(action="status")``unresolved_reviews` 字段显式列出未解决 verdict。
283290

284291
## A5 改动清单(原子)与波及面
285292

@@ -303,3 +310,18 @@ config 仓库。按 `runtime-compat.json` 策略运行时先合并,同一 PR
303310
事后机械检测覆盖了大部分场景;声明字段是积木 DSL 的 schema 变更,等真实踩坑再加。
304311
- 为什么保留链式 canonical:最小差异原则——当前能编译的链式图编译结果完全不变,
305312
行为变化只发生在「曾经被强行串行」与「曾经编译失败」两类图上。
313+
314+
## 附篇 B:落地对照(2026-08-16 review 回填)
315+
316+
| 文档决策 | 落地载体 | 状态与偏差 |
317+
|---|---|---|
318+
| A-1 守卫安排 | PR #300(merge 6221fdf71) | 机制与 A-1 落地实况一致;语义等价 |
319+
| A-3 status 显式化 | PR #300 | `unresolved_reviews` 字段已实现 |
320+
| A2 并行两模式 + 聚合器 | PR #299(merge ebc5ad089)+ ADR-0002 | 按 A2 全部落地;运行时六文件零改动物证:#299 diff 不触及 runtime/review-lifecycle/dag.ts |
321+
| A4.1 verify 绑定 | PR #299 | 仅聚合路线兑现;链式路线为保字节级不变刻意留白(见 A4 落地实况) |
322+
| A4.2 verify FAIL 终态 | PR #300 | 已修复 |
323+
| B-1~B-4 | PR #299 | 全部落地(重叠门禁为聚合器节点级失败,非编译期检测) |
324+
| B-6 config 仓库 | opencode-dag-config PR #9 | 措辞 + 原生交付 + SHA→ebc5ad089 |
325+
| C-1/C-2 | PR #301(merge 773330b14) | 分类表与 tier 显式化按票 #296 原文落地 |
326+
| D-1/D-2 || 刻意未排期,保持结构性缺口记录 |
327+
| (新增)qwen union 双重编码 | PR #298(merge e3e9d76f1)、issue #297 | 调研中新发现的运行时缺陷,不在本文档原始范围 |

0 commit comments

Comments
 (0)