Audit batch 5: I-9, I-12, I-14, N-1..N-12, single-task wire single-transaction

This commit is contained in:
host committed 2026-11-04 18:02:23 +00:00
1 parent cdac8039b3
commit 2adc605373
7 files changed
+1349 -440

No files matched your search

+39 -38
View File
@@ -224,6 +224,28 @@ def _validate_gate_results(gate_results):
raise ValueError("gate_results must map gate name to bool")
def _escalate(task_id, prev_round, passed_gates, criteria, reason,
regression=(), missing_gates=(), weakened=()):
"""升级决策 dict(审计批 5,N-8:纯结构整理,行为不变)。
evaluate() 内四处 escalate 返回原来各写一遍同样的 dict
骨架(new_state + decision/round/packet/reason + 三个清单),
只有 passed_gates / criteria / reason / 清单内容不同;抽成
助手后各处只传不同项。new_state 的 round 恒为 prev_round
(升级不推进轮次)、last_decision 恒为 escalate。
"""
new_state = LoopState(
task_id, round=prev_round, passed_gates=sorted(passed_gates),
criteria=criteria, last_decision="escalate")
return {
"decision": "escalate", "round": prev_round, "packet": None,
"new_state": new_state, "reason": reason,
"regression": list(regression),
"missing_gates": list(missing_gates),
"weakened": list(weakened),
}
def evaluate(state, task_id, gate_results, findings=None, fixed=None):
"""纯函数:一轮审计的决策。
@@ -269,17 +291,10 @@ def evaluate(state, task_id, gate_results, findings=None, fixed=None):
# 全量回归:上一轮通过的门本轮必须重跑,缺跑即升级。
missing_gates = sorted(g for g in prev_passed if g not in gate_results)
if missing_gates:
new_state = LoopState(
task_id, round=prev_round,
passed_gates=sorted(
g for g, v in gate_results.items() if v),
criteria=prev_criteria, last_decision="escalate")
return {
"decision": "escalate", "round": prev_round, "packet": None,
"new_state": new_state, "reason": "gate_missing",
"regression": [], "missing_gates": missing_gates,
"weakened": [],
}
return _escalate(
task_id, prev_round,
(g for g, v in gate_results.items() if v),
prev_criteria, "gate_missing", missing_gates=missing_gates)
passed_now = {g for g, v in gate_results.items() if v}
failed_now = {g for g, v in gate_results.items() if not v}
@@ -310,15 +325,11 @@ def evaluate(state, task_id, gate_results, findings=None, fixed=None):
else:
weakened.append(fid)
if weakened:
new_state = LoopState(
task_id, round=prev_round, passed_gates=sorted(passed_now),
criteria=prev_criteria, last_decision="escalate")
return {
"decision": "escalate", "round": prev_round, "packet": None,
"new_state": new_state, "reason": "standards_weakened",
"regression": [f.to_dict() for f in regression],
"missing_gates": [], "weakened": sorted(weakened),
}
return _escalate(
task_id, prev_round, passed_now, prev_criteria,
"standards_weakened",
regression=[f.to_dict() for f in regression],
weakened=sorted(weakened))
# 新标准 = 未解决的旧标准 + 本轮新 finding(含回归)。
for finding in all_findings:
@@ -348,26 +359,16 @@ def evaluate(state, task_id, gate_results, findings=None, fixed=None):
# 转 escalate),新行为后看到的是 gate_failed_without_
# finding 升级——原因更精确,不是行为倒退。
if failed_now and not all_findings:
new_state = LoopState(
task_id, round=prev_round, passed_gates=sorted(passed_now),
criteria=new_criteria, last_decision="escalate")
return {
"decision": "escalate", "round": prev_round, "packet": None,
"new_state": new_state, "reason": "gate_failed_without_finding",
"regression": [f.to_dict() for f in regression],
"missing_gates": [], "weakened": [],
}
return _escalate(
task_id, prev_round, passed_now, new_criteria,
"gate_failed_without_finding",
regression=[f.to_dict() for f in regression])
if prev_round >= MAX_PUSHBACKS:
new_state = LoopState(
task_id, round=prev_round, passed_gates=sorted(passed_now),
criteria=new_criteria, last_decision="escalate")
return {
"decision": "escalate", "round": prev_round, "packet": None,
"new_state": new_state, "reason": "max_rounds_exceeded",
"regression": [f.to_dict() for f in regression],
"missing_gates": [], "weakened": [],
}
return _escalate(
task_id, prev_round, passed_now, new_criteria,
"max_rounds_exceeded",
regression=[f.to_dict() for f in regression])
new_round = prev_round + 1
packet = PushbackPacket(task_id, new_round, all_findings, new_criteria)