Merge remote-tracking branch 'origin/main' into codex/p0-006-ai-log-triage-20260709

This commit is contained in:
ogt
2026-07-10 09:50:44 +08:00
9 changed files with 342 additions and 28 deletions

View File

@@ -91,6 +91,7 @@ _PUBLIC_MAINTENANCE_ROUTE_BLOCKERS = {
}
_PUBLIC_MAINTENANCE_EDGE_BLOCKERS = {
"edge_public_maintenance_live_config_drift",
"privileged_edge_apply_channel_unavailable",
}
_PUBLIC_MAINTENANCE_BLOCKERS = (
_PUBLIC_MAINTENANCE_ROUTE_BLOCKERS | _PUBLIC_MAINTENANCE_EDGE_BLOCKERS
@@ -2428,6 +2429,14 @@ def _build_public_maintenance_fallback_readback(value: Any) -> dict[str, Any]:
):
blockers.append("public_route_unreachable_without_external_l1_fallback")
edge_blockers = _strings(public_maintenance.get("edge_fallback_blockers"))
edge_fallback = _dict(public_maintenance.get("edge_fallback"))
if (
public_maintenance.get("edge_fallback_runtime_readback_present") is True
and public_maintenance.get("edge_fallback_ready") is not True
and edge_fallback.get("sudo_n_ready") is False
and "privileged_edge_apply_channel_unavailable" not in edge_blockers
):
edge_blockers.append("privileged_edge_apply_channel_unavailable")
for blocker in edge_blockers:
if blocker not in blockers:
blockers.append(blocker)
@@ -2441,7 +2450,7 @@ def _build_public_maintenance_fallback_readback(value: Any) -> dict[str, Any]:
public_maintenance.get("edge_fallback_runtime_readback_present") is True
),
"edge_fallback_ready": public_maintenance.get("edge_fallback_ready"),
"edge_fallback": _dict(public_maintenance.get("edge_fallback")),
"edge_fallback": edge_fallback,
"edge_fallback_blockers": edge_blockers,
"target_url_count": _int(public_maintenance.get("target_url_count")),
"route_count": _int(public_maintenance.get("route_count")),
@@ -3499,6 +3508,7 @@ def _reboot_sop_primary_blocker(active_blockers: list[str]) -> str:
"windows99_console_verify_output_truncated",
"public_route_raw_5xx_without_maintenance_fallback",
"public_route_unreachable_without_external_l1_fallback",
"privileged_edge_apply_channel_unavailable",
"edge_public_maintenance_live_config_drift",
"public_maintenance_fallback_runtime_readback_missing",
"post_start_blocked_not_zero",
@@ -3713,11 +3723,24 @@ def _active_blocker_action_row(
next_safe_action = (
"run_public_maintenance_fallback_probe_and_rerun_scorecard_no_reload"
)
controlled_apply_mode = "check_mode_then_separate_edge_or_nginx_apply"
if blocker == "privileged_edge_apply_channel_unavailable":
next_safe_action = (
"restore_privileged_edge_apply_channel_then_rerun_edge_fallback_"
"check_and_nginx_t_apply_package_no_app_restart"
)
controlled_apply_mode = (
"blocked_until_passwordless_privileged_edge_channel_readback"
)
elif blocker == "edge_public_maintenance_live_config_drift":
next_safe_action = (
"run_public_maintenance_edge_fallback_check_then_prepare_"
"privileged_nginx_t_apply_package_no_app_restart"
)
post_verifier = (
"python3 scripts/reboot-recovery/public-maintenance-fallback-probe.py"
)
evidence_inputs = ["public_maintenance_fallback"]
controlled_apply_mode = "check_mode_then_separate_edge_or_nginx_apply"
elif "stockplatform" in blocker or "product_data" in blocker:
category = "product_data_freshness"
owner_lane = "stockplatform_freshness_and_ingestion"