fix: coord audit-loop review B1 + I1-I3 (gate scope, merged alignment, single-tx pushback, store-failure escalate)

This commit is contained in:
host committed 2026-11-04 18:02:22 +00:00
1 parent 017f76010f
commit 2387c21f36
3 files changed
+503 -80

No files matched your search

+15 -7
View File
@@ -239,11 +239,19 @@ def evaluate_outcome(children, parts=None):
"""合流评价(纯函数):返回 (overall, failed_names,
tolerated_names)。
completed 计完成;未完成的项中,on_failure 为 tolerate
的分工计容忍、不拖垮整体,其余计失败。未知分工名按
fail 处理(fail-closed,绝不把查不到的分工当容忍)。
空 children 时 overall 为 failed(与旧 build_report 一致,
失败名为空——调用方按“无子任务”理解,不按名理解)。
completed 与 merged 都计完成:merged 表示工作已落地(PR
已合),是完成的更强形态,不是失败——与本模块的
COMPLETED_STATUSES({completed, merged})以及依赖满足、
pick_next 等处“merged 视同完成”的口径一致。协调员审计
循环复审 I1 的对齐点:此前 evaluate_outcome 只认
completed,审计门却把 merged 算完成,导致审计 pass、
包清掉、父任务却以 failed 终局;改成两边都认 merged
后,审计 pass 与父任务 completed 对齐。未完成的项中,
on_failure 为 tolerate 的分工计容忍、不拖垮整体,其余
计失败。未知分工名按 fail 处理(fail-closed,绝不把查
不到的分工当容忍)。空 children 时 overall 为 failed
(与旧 build_report 一致,失败名为空——调用方按“无子
任务”理解,不按名理解)。
"""
by_name = parts_by_name(parts)
has_parts = parts is not None
@@ -252,7 +260,7 @@ def evaluate_outcome(children, parts=None):
tolerated = []
for ch in children or []:
name = ch.get("name")
if ch.get("status") == "completed":
if ch.get("status") in ("completed", "merged"):
done += 1
continue
part = by_name.get(name) if has_parts else None
@@ -282,7 +290,7 @@ def build_report(children, parts=None):
done = 0
for ch in children:
st = ch.get("status") or "?"
if st == "completed":
if st in ("completed", "merged"):
done += 1
part = by_name.get(ch.get("name"))
chars = part.get("result_chars") if part is not None else \