symfonic.services.shadow.cutover¶
cutover ¶
The cutover-criteria recorder.
Two kinds of capability reach cutover by two different roads, and the point of this recorder is that a capability cannot quietly take the wrong one.
- A capability whose extensions are all port-mediated may present shadow evidence: a comparison report from an effect-suppressed run.
- A capability that depends on an opaque tool, plugin, or contributed stage is non-shadowable. Its evidence must come through the non-shadow path โ parity suites, characterization, and live cutover criteria โ and filing shadow evidence for it is refused, not warned about.
Every port-mediated trust assignment is recorded here too, with its named human reviewer, because that is where the acceptance criterion says the approval must live.
CutoverCriteriaRecorder ¶
Files cutover evidence and enforces which path a capability may use.
Source code in src/symfonic/services/shadow/cutover.py
CutoverEvidence
dataclass
¶
CutoverEvidence(capability: str, path: CutoverPath, recorded_at: datetime, criteria: dict[str, Any] = dict(), opaque_dependencies: tuple[str, ...] = (), comparison: ComparisonReport | None = None)
One capability's cutover evidence, filed under exactly one path.
TrustApproval
dataclass
¶
TrustApproval(extension_id: str, capability: str, reviewer: str, approved_at: str, proof_method: str)
A port-mediated assignment, its reviewer, and its capability.