Incident, oracle drift / staleness
Trigger: plinth.oracle.disagreement.count > 5/hour, or any OracleStaleError on Plinth.
Response (in order)
- Verify the alert is real. Open
loadtest.useatrium.me. If both Chainlink and Pyth show fresh prices, the alert is a false positive, silence and document. - Identify the disagreeing instrument. Look at the most recent
OracleDisagreementevent on Plinth. - Compare with public oracle dashboards.
- Chainlink: https://data.chain.link/
- Pyth: https://pyth.network/price-feeds
- Choose response:
- If only one feed is wrong: Praetor multisig pauses that instrument via
Plinth.set_instrument_risk(..., is_active: false). - If both feeds disagree with consensus markets: pause global Plinth via
Plinth.pause("oracle disagreement"). - If both feeds are fine but the alert keeps firing: tune
oracle_tolerance_bpsvia Praetor timelock (48h).
- Communicate. Post a banner on
lantern.useatrium.me. Tweet the status. Pin a Mirror post. - Resume. When alignment returns, Praetor unpauses via 48h timelock (instant unpause is multisig-only emergency path; only used for clear false positives).
- Post-mortem. Within 7 days, file
/incidents/YYYYMMDD-oracle-drift.mdwith root cause + preventive action + a regression test that would catch it.