flagOutcome may be re-flagged before the first claim so the moderator can fix a typo'd or premature outcome "before any participant locks in the wrong distribution" (docs/DESIGN.md §4), and §4 states finality is "correctly tied to value movement" via the claimsStarted latch. On a good-faith CORRUPTED re-flag the whole pool (stake + bonus) is re-snapshotted as the named whitehat's bountyEntitlement.
sweepUnclaimedBonus() moves real contributed bonus out of the pool to recoveryAddress but intentionally does not set claimsStarted. When a SURVIVED outcome was flagged with riskWindowStart == 0 (the correctable mis-flag §4 exists for), the reserve calculation excludes the bonus, so a permissionless sweep drains the entire snapshotTotalBonus to recoveryAddress and zeroes totalBonus while the correction window stays open. The moderator's later re-flag to good-faith CORRUPTED then re-snapshots a depleted pool — bountyEntitlement collapses to principal-only — so the named whitehat permanently loses the entire bonus. §4's own "because" (finality is tied to value movement) is false here: value left, yet the re-flag is still honored and cannot restore the whitehat's entitlement.
Likelihood:
The moderator flags SURVIVED on a genuinely in-scope CORRUPTED agreement with riskWindowStart == 0 — exactly the premature/typo mis-flag the re-flag correction window exists to fix (not an "evil admin", the documented correction scenario).
A permissionless griefer calls sweepUnclaimedBonus() in that window, draining the whole bonus to recoveryAddress before the moderator re-flags the correct good-faith CORRUPTED.
Impact:
The named good-faith whitehat, who performed the in-scope breach, permanently loses the entire bonus pool — it is diverted to recoveryAddress (which the sponsor controls, so the sponsor can harvest it) instead of paid as the bounty.
The re-flag correction feature is rendered incomplete: the moderator can restore the correct CORRUPTED outcome but cannot restore the whitehat's bonus, because value already left through a path that did not latch finality.
Tie finality to this value movement too: when sweepUnclaimedBonus moves accounted bonus (not merely a post-flag donation), latch claimsStarted so a later re-flag cannot silently under-pay the whitehat; equivalently, block the sweep until the correction window is closed.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.