Verification Loop V2
internal iteration v-harness-based verification behavior study · 13 cases · VDiff rubric当前要做的事
0-Project/20260701-vdiff-image2code-v2-harness-comparison/
Verification Loop V2 是我们的内部迭代线:它借用外部 v-harness 作为受控视觉工具环境, 但关注点不是复述上游 harness 本身,而是研究 verifier、gate feedback 和 agent-facing self-check tools 到底如何改变修复行为与最终质量。
当前页面直接呈现两层结果:一层是 13 个 VDiff image2html v2.2 cases 上的 L1/L2/L3 主线对比,
已经补齐 vdiff_rubric_v1 final metric;另一层是 L3 max6 消融:
native v-harness base、隐藏 gate feedback、移除 agent 可调用的 diff/align 自检工具。
v-harness 来源关系
source usage · not the internal project versionexecuted
V2 的 13-case L3 native、hidden gate feedback 与 no diff-align 等正式结果基于 image2code-v2.2@e2246107… 和对应校验 archive。
prepared_only
V2 注册并审计了 image2code-v2.3@e9c04d4b…,也预留了条件,但当前不把它表述为已完成的 V2 v2.3 运行。
入口
trajectory-first, comparison table as secondary view当前推荐先从 Viewer V0.4 总览和 Matrix 管理整个实验,再进入单个 Run 档案、selected epoch、 same-case comparison 与 raw-event replay;旧 comparison viewer 继续保留为 legacy fallback。
L1 / L2 / L3 方法梯子
method ladder, not all rows are completed result rows yet
L1_direct_api 用最少 loop/control 直接生成候选 HTML。
它主要回答:没有显式 verifier、没有 v-harness epoch gate、没有工具化视觉自检时,模型原生能力能到什么程度。
L2_native_claude_sdk、L2_v1_agent_verify 和
L2_v2_verify_everywhere 属于我们自己的 loop 设计空间:
控制 verifier 何时介入、反馈是否进入下一步,以及验证是否变成通用行为。
L3_vloop_base 把上游 v-harness 的 epoch runner、gate feedback 和
grep/inspect/align/diff/write/render/crop/snapshot/revert 工具作为实验基座。
当前完成的 V2 结果集中在 L3 的 gate feedback 与 self-check tools 消融。
读法:本页先看 L1/L2/L3 主线内部对比,再看 L3 自己的 max6 消融。
两层结果都以 vdiff_rubric_v1 作为主要数值口径,同时保留
offline_quality_v1 holistic 分数和 v-harness native gate 作为辅助信号。
Edit / Annotate
local-only notes · source artifacts remain unchanged表格里的实验结果仍然是静态 source of truth;这里的编辑和评论只保存在当前浏览器。 需要共享时可以导出 annotations JSON,后续再作为版本记录同步进 repo。
L1 / L2 / L3 + L3 消融总表
primary metric:vdiff_rubric_v1; auxiliary: offline_quality_v1 + native gate
这张总表把 L1/L2/L3 主线和 L3 max6 消融放在同一个阅读面里。L1/L2/L3 主线来自
mentor13-v2.2-claude48-full-20260701-02,我已经为它补齐 vdiff_rubric_v1;
L3 消融来自 2026-07-05 的 max6 runs。旧 raw condition alias 仍保留在 source/note 中,展示名采用当前规范。
| group | condition | source run | success / timeout | native gate | avg holistic | avg rubric | rubric >= 4 | 说明 |
|---|---|---|---|---|---|---|---|---|
| L1 | L1_direct_api |
full runL0_direct_api |
13/13 · 0 timeout | n/a | 3.85 | 3.79 | 8/13 | Direct single-pass baseline; no explicit verifier loop. |
| L2 | L2_native_claude_sdk |
full runL1_native_claude_sdk |
13/13 · 0 timeout | n/a | 3.92 | 4.20 | 11/13 | Native SDK agent without verifier feedback. |
| L2 | L2_v1_agent_verify |
full runL1_v1_agent_verify |
13/13 · 0 timeout | n/a | 4.69 | 4.26 | 12/13 | Main agent decides when to call verifier and can use feedback for repair. |
| L2 | L2_v2_verify_everywhere |
full runL2_v2_verify_everywhere |
13/13 · 0 timeout | n/a | 4.69 | 4.38 | 12/13 | Verification is pushed into key stages; verifier returns repair-local mismatch feedback. |
| L3 | L3_vloop_base |
full runL3_vloop_base |
1/13 · 12 timeout | 1/13 | 3.46 | 3.53 | 6/13 | Original full-run v-harness base; mostly budget-limited, but final artifacts were scored. |
| L3 ablation | L3_vloop_base_max6 |
max6 native reference | 13/13 · 0 timeout | 2/13 | 3.46 | 3.50 | 7/13 | Gate feedback exposed; diff/align exposed. |
| L3 ablation | L3_v1_hidden_gate_feedback_max6 |
max6 ablation | 13/13 · 0 timeout | 0/13 | 3.54 | 3.40 | 6/13 | Gate runs and logs detail, but detailed gate failure feedback is hidden from the next epoch prompt. |
| L3 ablation | L3_v2_no_self_check_tools_max6 |
max6 ablation | 13/13 · 0 timeout | 3/13 | 3.46 | 3.42 | 6/13 | Gate feedback remains exposed, but the agent cannot call diff or align. |
| L3 budget ref | L3_vloop_base_max10 |
max10 reference | 13/13 · 0 timeout | 2/13 | 3.77 | 3.75 | 7/13 | Longer-budget reference; useful for checking whether failures are epoch-budget limited. |
主表读法:按 rubric 平均分,full-run 主线里 L2_v2_verify_everywhere 最高,为 4.38;
L2 的两个 verifier 条件都高于 direct/native baseline。L3 max6 消融三行彼此接近,说明 gate feedback
和 diff/align 的作用需要继续看逐 case 与轨迹,而不是只看 aggregate。
逐 case:L1 / L2 / L3 内部对比
VDiff rubric score;* means run_status != success but final score exists
这张表展示 L1/L2/L3 主线的逐 case rubric 分数,格式是 score (passed/total)。
带 * 的 L3 行表示 v-loop run 没完整成功,但已经产出可评分 artifact。
| case | L1 direct | L2 native SDK | L2 v1 agent verify | L2 v2 verify everywhere | L3 vloop base | trajectory link |
|---|---|---|---|---|---|---|
| case1 | 4.58 (98/107) | 4.86 (104/107) | 4.67 (100/107) | 4.81 (103/107) | 4.39 (94/107)* | L3 max6 trace |
| case2 | 5.00 (72/72) | 4.72 (68/72) | 4.58 (66/72) | 5.00 (72/72) | 4.72 (68/72)* | L3 max6 trace |
| case3 | 4.42 (76/86) | 4.88 (84/86) | 4.48 (77/86) | 4.94 (85/86) | 4.53 (78/86)* | L3 max6 trace |
| case4 | 4.76 (99/104) | 4.90 (102/104) | 4.90 (102/104) | 5.00 (104/104) | 4.86 (101/104)* | L3 max6 trace |
| case5 | 3.00 (54/90) | 3.94 (71/90) | 4.06 (73/90) | 4.22 (76/90) | 3.39 (61/90)* | L3 max6 trace |
| case6 | 4.48 (103/115) | 4.65 (107/115) | 4.65 (107/115) | 4.57 (105/115) | 4.70 (108/115)* | L3 max6 trace |
| case7 | 4.33 (45/52) | 4.81 (50/52) | 4.90 (51/52) | 4.90 (51/52) | 3.75 (39/52)* | L3 max6 trace |
| case8 | 2.91 (39/67) | 4.18 (56/67) | 4.63 (62/67) | 4.70 (63/67) | 3.28 (44/67)* | L3 max6 trace |
| case9 | 4.62 (49/53) | 4.62 (49/53) | 4.91 (52/53) | 5.00 (53/53) | 4.81 (51/53)* | L3 max6 trace |
| case10 | 3.62 (47/65) | 4.46 (58/65) | 4.69 (61/65) | 4.62 (60/65) | 3.08 (40/65)* | L3 max6 trace |
| case11 | 3.31 (39/59) | 4.41 (52/59) | 4.58 (54/59) | 4.58 (54/59) | 2.71 (32/59)* | L3 max6 trace |
| case12 | 4.08 (62/76) | 4.01 (61/76) | 4.28 (65/76) | 4.47 (68/76) | 1.18 (18/76) | inspect |
| case13 | 0.22 (2/46) | 0.11 (1/46) | 0.11 (1/46) | 0.11 (1/46) | 0.43 (4/46)* | inspect |
逐 case:L3 消融对比
VDiff rubric score; max10 is a budget reference
这张表专门看 L3 内部:native max6、隐藏 gate feedback、禁用 agent-facing diff/align,
以及 max10 budget reference。它和上一张 L1/L2/L3 表使用同一套 rubric 分数口径。
| case | base max6 | hidden gate feedback max6 | no diff/align max6 | base max10 ref | trajectory link |
|---|---|---|---|---|---|
| case1 | 4.35 (93/107) | 4.30 (92/107) | 4.21 (90/107) | 4.35 (93/107) | trace |
| case2 | 4.79 (69/72) | 4.51 (65/72) | 3.61 (52/72) | 4.44 (64/72) | trace |
| case3 | 4.42 (76/86) | 4.48 (77/86) | 4.48 (77/86) | 4.48 (77/86) | trace |
| case4 | 4.71 (98/104) | 4.76 (99/104) | 4.81 (100/104) | 4.81 (100/104) | trace |
| case5 | 3.50 (63/90) | 3.72 (67/90) | 3.50 (63/90) | 3.33 (60/90) | trace |
| case6 | 4.65 (107/115) | 4.61 (106/115) | 4.74 (109/115) | 4.83 (111/115) | trace |
| case7 | 4.04 (42/52) | 3.37 (35/52) | 4.04 (42/52) | 4.04 (42/52) | trace |
| case8 | 3.36 (45/67) | 3.51 (47/67) | 3.06 (41/67) | 3.43 (46/67) | trace |
| case9 | 5.00 (53/53) | 4.81 (51/53) | 4.91 (52/53) | 5.00 (53/53) | trace |
| case10 | 2.54 (33/65) | 2.92 (38/65) | 3.08 (40/65) | 3.31 (43/65) | trace |
| case11 | 2.80 (33/59) | 3.05 (36/59) | 2.71 (32/59) | 2.88 (34/59) | trace |
| case12 | 1.18 (18/76) | 0.00 (0/76) | 0.99 (15/76) | 3.55 (54/76) | inspect |
| case13 | 0.11 (1/46) | 0.22 (2/46) | 0.33 (3/46) | 0.33 (3/46) | inspect |
当前结论读法
what to inspect next
在 full run 的 rubric 口径里,L2_v2_verify_everywhere 平均 4.38,
L2_v1_agent_verify 平均 4.26,二者都高于 direct/native baseline。
这说明“把 verifier 反馈纳入 repair”这一层比直接生成或原生 agent 更值得继续放大。
case12 是最明显例子:max6 和 max10 都能 native gate pass,
但 rubric 分数仍然偏低。这说明 v-harness gate 是过程边界,不应直接当成最终质量分。
max6 下 base、隐藏 gate feedback、移除 diff/align 的平均 rubric 分别是 3.50、3.40、3.42,
需要逐 case 看哪些问题是工具缺失造成,哪些是 gate feedback 或 budget 的交互造成。