fix(automation): enforce durable alert closure
All checks were successful
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m32s
CD Pipeline / build-and-deploy (push) Successful in 8m2s
CD Pipeline / post-deploy-checks (push) Successful in 2m22s

Restore D037 durable incident readback without weakening database failure semantics.

Fence Agent99 dispatch and terminal learning to canonical identities, durable leases, verifier receipts, and reconciler-owned checkpoints.

Drain backup and restore legacy receipts in bounded cohorts with strict transport, claim, projection, and no-false-green controls.

Keep SSH service refusal visible while separating it from broker network-policy reachability.
This commit is contained in:
ogt
2026-07-14 09:40:53 +08:00
parent 72a167a322
commit 6cf8429d17
56 changed files with 15100 additions and 227 deletions

View File

@@ -25,7 +25,7 @@ from typing import Any, Protocol, runtime_checkable
import structlog
from src.core.redis_client import get_redis
from src.models.incident import Incident
from src.models.incident import Incident, parse_signal_source
from src.services.graph_rag import BlastRadiusResult, topology_graph
from src.services.incident_memory import get_incident_memory
from src.utils.incident_converter import brain_to_local
@@ -215,7 +215,11 @@ class IncidentEngineAdapter:
async def process_signal(self, signal_data: dict[str, Any]) -> Incident | None:
"""處理 Signal返回 LocalIncident (brain 輸出轉換)"""
brain_incident = await self._engine.process_signal(signal_data)
normalized_signal = dict(signal_data)
normalized_signal["source"] = parse_signal_source(
normalized_signal.get("source")
)
brain_incident = await self._engine.process_signal(normalized_signal)
if brain_incident is None:
return None
return brain_to_local(brain_incident)