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
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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user