symfonic.services.effects.incident¶
incident ¶
Security-revert incident evidence.
The incident is the artifact a reviewer reads afterwards, so its rendering is
deliberately literal about the one thing that is easy to overstate. Per
invocation it prints either SUPPRESSED or EXPOSED — and EXPOSED
carries the reason inline, so "we reverted, everything is fine" cannot be read
out of a document that in fact contains an unfenced opaque extension or an
irreversible effect that had already left.
fencing_claim_withheld is derived, never assigned: any exposure, any
withheld per-invocation claim, or any degradation of the lease store takes it
true. There is no field an operator can set to make an incident look clean.
SecurityRevertIncident
dataclass
¶
SecurityRevertIncident(incident_id: str, bundle_id: str, reason: str, actor: str, linearized_at: float, fence: Fence, revoked_leases: tuple[str, ...] = (), stale_admissions: tuple[str, ...] = (), cancelled: tuple[str, ...] = (), affected_tickets: tuple[str, ...] = (), suppressed_commits: tuple[str, ...] = (), quarantined: tuple[str, ...] = (), exposures: tuple[ExposureRecord, ...] = (), compensations: tuple[CompensationOutcome, ...] = (), claims: tuple[FencingClaim, ...] = (), cutover_blocked: tuple[str, ...] = (), degraded: bool = False, degraded_reason: str = '', drain: DrainReport = (lambda: DrainReport(drained=(), contained=(), budget=0.0, elapsed=0.0))())
Every leg of one security revert, in one reviewable record.
fencing_claim_withheld
property
¶
Derived. Exposure, a withheld claim, or degradation all take it true.