Merge remote-tracking branch 'gitea/main' into codex/github-backup-missing-targets-20260627

This commit is contained in:
Your Name
2026-06-27 19:38:22 +08:00
12 changed files with 324 additions and 116 deletions

View File

@@ -2273,9 +2273,9 @@ def test_awooop_status_chain_does_not_treat_audit_ops_as_repair() -> None:
)
assert chain["repair_state"] == "diagnostic_or_audit_recorded"
assert chain["next_step"] == "manual_review_or_collect_repair_evidence"
assert chain["needs_human"] is True
assert chain["operator_outcome"]["state"] == "diagnostic_only_manual_review"
assert chain["next_step"] == "auto_generate_repair_candidate_from_diagnostic_evidence"
assert chain["needs_human"] is False
assert chain["operator_outcome"]["state"] == "diagnostic_only_ai_repair_required"
assert chain["operator_outcome"]["notification"]["mode"] == "action_required"
assert chain["evidence"]["operation_records"] == 1
assert chain["evidence"]["auto_repair_records"] == 0

View File

@@ -40,7 +40,7 @@ def test_operator_outcome_normalizes_missing_evidence_blockers() -> None:
assert "learning_recorded" not in outcome["blockers"]
def test_operator_outcome_marks_diagnostic_only_as_manual_action_required() -> None:
def test_operator_outcome_marks_diagnostic_only_as_ai_repair_required() -> None:
outcome = build_operator_outcome(
truth_status={
"current_stage": "execution_succeeded",
@@ -64,13 +64,17 @@ def test_operator_outcome_marks_diagnostic_only_as_manual_action_required() -> N
)
assert outcome["schema_version"] == "operator_outcome_v1"
assert outcome["state"] == "diagnostic_only_manual_review"
assert outcome["needs_human"] is True
assert outcome["state"] == "diagnostic_only_ai_repair_required"
assert outcome["needs_human"] is False
assert outcome["notification"]["mode"] == "action_required"
assert "telegram_sre_war_room" in outcome["notification"]["channels"]
assert outcome["next_action"] == "manual_review_or_collect_repair_evidence"
assert outcome["execution_result"]["completion_status"] == "completed_no_repair"
assert outcome["execution_result"]["repair_status"] == "not_executed"
assert outcome["next_action"] == "auto_generate_repair_candidate_from_diagnostic_evidence"
assert outcome["execution_result"]["completion_status"] == (
"diagnostic_completed_ai_repair_queued"
)
assert outcome["execution_result"]["repair_status"] == (
"playbook_or_transport_repair_required"
)
assert outcome["execution_result"]["failure_status"] == "no_command_failed"
@@ -326,8 +330,8 @@ def test_execution_result_message_does_not_call_diagnostic_success_repair_done()
),
)
assert "已記錄診斷,尚未證明修復" in text
assert "completed_no_repair" in text
assert "只完成診斷/觀察AI 已排入修復候選補齊" in text
assert "diagnostic_completed_ai_repair_queued" in text
assert "no_command_failed" in text
assert "執行成功" not in text
assert "修復完成" not in text

View File

@@ -743,10 +743,10 @@ def test_awooop_status_chain_lines_do_not_treat_audit_ops_as_repair() -> None:
joined = "\n".join(lines)
assert "diagnostic_or_audit_recorded" in joined
assert "manual_review_or_collect_repair_evidence" in joined
assert "auto_generate_repair_candidate_from_diagnostic_evidence" in joined
assert "executed_pending_verification" not in joined
assert "處置結論" in joined
assert "只完成診斷/觀察,尚未證明修復" in joined
assert "只完成診斷/觀察AI 已排入 PlayBook / transport / verifier 修復候選" in joined
assert "通知:<code>telegram_sre_war_room,awooop_operator_console</code>" in joined