Incident Postmortems¶
Docs-site note (2026-07-15): This is an index of Vexor's public bank-hash divergence postmortems. It exists because of the discipline described in Reliability & Conformance: every confirmed divergence gets a deterministic root cause, a named fix, and a permanent regression gate, and the write-up gets published rather than kept as an internal note. Internal operational detail (hostnames, file paths, credentials, timestamps down to the second, internal tooling names) is deliberately scrubbed from these pages; the technical mechanism, the affected slots, and the fix are not.
What gets published here¶
This index covers bank-hash divergences — cases where Vexor's testnet node computed a different bank hash than the rest of the cluster for a canonical block, which is the one class of bug that actually threatens the "independent client that stays in consensus" premise the whole project is built on. It does not cover routine downtime, planned maintenance, or non-consensus bugs; those aren't tracked as postmortems because they don't carry the same risk to network health.
Each entry below states plainly whether the underlying issue is fully resolved, resolved for the specific trigger with a known broader gap still open, or still in progress — see Roadmap for how open items are tracked more generally.
Index¶
| Date | Slot | Class | Summary | Status |
|---|---|---|---|---|
| 2026-07-13 | 421,724,293 | Execution — silent truncation on account-data growth | A third-party program's account-resize pattern hit two stacked bugs in Vexor's sBPF account-growth handling, silently truncating a write the program believed had succeeded. | Resolved |
| 2026-07-14 | 421,935,259 | Ingest — false slot-completion under repair load | Under heavy repair/catch-up load, the node accepted and voted a truncated copy of a block instead of the full canonical one, then could not self-recover onto the correct version. | Partially resolved — the specific trigger is fixed; general self-recovery from this class of divergence is a tracked follow-on |
| 2026-07-15 | 422,156,256 | Execution — one-ULP floating-point rounding gap at an epoch boundary | A general-purpose power function used in the epoch-boundary inflation-reward calculation rounded one ULP differently from the reference math library on that epoch's input, flipping the reward pool by one lamport and diverging the bank hash. | Resolved |
How to read a postmortem here¶
Each write-up follows the same shape:
- Symptom — what an operator would actually observe (the practical "how do I recognize this").
- What it was not — hypotheses that were checked and ruled out, so a future investigation doesn't re-walk the same dead ends.
- Root cause — the specific, named mechanism, traced to source.
- The fix — what changed, and how it was proven correct without regressing anything else.
- Status and residual risk — stated plainly, including any part of the problem class that isn't fully closed yet.
See also¶
- Reliability & Conformance — the gate battery, live detection, and the process that produces these write-ups.
- Parity & Fidelity Audit — the standing, continuously-updated parity scorecard.
- Roadmap — open work items, including any that trace back to a postmortem here.