You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Recently we've been plagued with unwind/re-org issues (e.g. #20169, #20995, #21515, #21681, #22399), so we clearly need to improve our integration tests to catch them earlier. In particular, we need to tests re-orgs with pruning interfering (see #21824).
Status (updated 2026-07-07)
Every root-cause fix behind the incidents above was revert-tested against the integration suite to find which failure classes the tests actually catch. Coverage landed in two PRs:
Randomized reorg fuzzing (nightly QA job): random schedules of extend / reorg / bounce / restart / prune / invalid-block-inject against the StateChurn trackedSum per-block oracle — the hand-written scenarios keep missing exactly the interleavings a generator would enumerate.
For the classes that revert-testing proved unreachable from outside on current main (the cleared-markers ordering has no producer — the FCU unwinds before rewriting markers in one atomic tx; the no-op-unwind overlay-prune branch is shielded by FCU-tx rollback plus a fresh SharedDomains per FCU), the stage-level tests remain the guards. To keep future refactors honest:
Tighten TestDomain_DeletedKeyNotResurrectedByFiles: it does not go red on the getLatestFromDb tombstone-as-miss revert it is named for (the invariant is actually pinned by TestDomain_UnwindRestoresDeletionMarker and the multi-step unwind test).
Optional: a reverting-CREATE clause in the StateChurn contract to bring the journal code-size revert class (execution: revert CodeSizePath in codeChange journal entry #20039, EXTCODESIZE after a reverted CREATE) in-house; currently guarded only by the EEST suite in CI.
Known, accepted limitation
The #20483 write side (an unwind losing deletion tombstones) is not observable at any integration-test scale: unmerged snapshot-file layers retain deletion markers, so the loss self-heals (verified by instrumentation — hundreds of skipped tombstone restores with no observable effect, even with file freezing forced). The production resurrection required mainnet-scale compaction. TestDomain_UnwindRestoresDeletionMarker remains its guard.
Recently we've been plagued with unwind/re-org issues (e.g. #20169, #20995, #21515, #21681, #22399), so we clearly need to improve our integration tests to catch them earlier. In particular, we need to tests re-orgs with pruning interfering (see #21824).
Status (updated 2026-07-07)
Every root-cause fix behind the incidents above was revert-tested against the integration suite to find which failure classes the tests actually catch. Coverage landed in two PRs:
Bugs surfaced by writing these tests
Each comes with a ready-made red test described in the issue:
churnAndAssertso the suite guards this)SeekCommitmentand wedges block productionRemaining test work
trackedSumper-block oracle — the hand-written scenarios keep missing exactly the interleavings a generator would enumerate.Production hardening
For the classes that revert-testing proved unreachable from outside on current main (the cleared-markers ordering has no producer — the FCU unwinds before rewriting markers in one atomic tx; the no-op-unwind overlay-prune branch is shielded by FCU-tx rollback plus a fresh SharedDomains per FCU), the stage-level tests remain the guards. To keep future refactors honest:
unwindExec3fail loudly instead of silently no-op'ing when execution progress says blocks were executed but no diffsets are found for any of them — permanently converts the Gas used mismatch after reorg unwind on v3.4.1/v3.4.2 — state leak in unwindExec3 (PR #21157 incomplete fix) #21515 silent-corruption mode into an error.Smaller items
TestDomain_DeletedKeyNotResurrectedByFiles: it does not go red on thegetLatestFromDbtombstone-as-miss revert it is named for (the invariant is actually pinned byTestDomain_UnwindRestoresDeletionMarkerand the multi-step unwind test).Known, accepted limitation
The #20483 write side (an unwind losing deletion tombstones) is not observable at any integration-test scale: unmerged snapshot-file layers retain deletion markers, so the loss self-heals (verified by instrumentation — hundreds of skipped tombstone restores with no observable effect, even with file freezing forced). The production resurrection required mainnet-scale compaction.
TestDomain_UnwindRestoresDeletionMarkerremains its guard.