fix: 测试全通过时跳过Reviewer审查(防止LLM幻觉reject)

根因:Reviewer对已通过测试的代码产生幻觉(编造不存在的函数),
导致正确结果被reject+回滚,bench全军覆没。
修复:tests_passed == tests_total时直接确认成功,不走Reviewer。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Val-sss
2026-05-07 10:37:35 +08:00
parent 4fb5d5d4c1
commit 5d170c5a37

View File

@@ -674,14 +674,21 @@ class PipelineOrchestrator:
ab_candidate_name, ab_used_new: bool, elapsed: float,
checkpoint, on_status) -> dict:
"""Record success: memory, registry, trajectory, AB, value, milestone, reflection."""
# Reviewer: 需求对齐审查 — 不对齐返回None让调用方重试
review_result = self._do_review(ctx, on_status)
if review_result and not review_result.get("aligned") and review_result.get("confidence", 0) >= 0.7:
gap = review_result.get("gap", "")
self._emit(on_status, "review_reject", f"审查不通过:{gap}")
ctx.retry_hint = f"改错了:{gap}"
ctx.locator_output = None # 强制重新定位修复
return None # 返回None信号给retry loop
# Reviewer: 需求对齐审查 — 测试全部通过时跳过测试是最终裁判Reviewer会幻觉
v = ctx.verifier_output or {}
tests_passed = v.get("tests_passed", 0)
tests_total = v.get("tests_total", 0)
all_tests_pass = tests_total > 0 and tests_passed == tests_total
if not all_tests_pass:
# 测试没全通过才需要Reviewer审查
review_result = self._do_review(ctx, on_status)
if review_result and not review_result.get("aligned") and review_result.get("confidence", 0) >= 0.7:
gap = review_result.get("gap", "")
self._emit(on_status, "review_reject", f"审查不通过:{gap}")
ctx.retry_hint = f"改错了:{gap}"
ctx.locator_output = None # 强制重新定位修复
return None # 返回None信号给retry loop
checkpoint.discard() # 审查通过才清理快照