README.md lists the moderator's abilities as flagging the pool outcome "SURVIVED / CORRUPTED / EXPIRED via flagOutcome", and protocol-readme.md separately (correctly) documents that EXPIRED is reached mechanically via claimExpired() after expiry. The two authoritative docs disagree about how EXPIRED is set.
In the code, flagOutcome only accepts SURVIVED and CORRUPTED; every other outcome (including EXPIRED) hits the trailing else and reverts InvalidOutcome. EXPIRED is only ever set mechanically inside claimExpired(). A moderator following README.md and calling flagOutcome(EXPIRED, ...) gets a hard revert; there is no on-chain path for the moderator to resolve EXPIRED.
Likelihood:
A moderator relying on README.md (which lists EXPIRED among the outcomes flagged via flagOutcome) attempts to resolve a pool as EXPIRED through flagOutcome.
protocol-readme.md and the interface docs describe the actual (mechanical claimExpired) path, so the two documents are internally inconsistent for any reader.
Impact:
No funds are at risk. The impact is a documentation/spec defect: the README overstates the moderator's flagOutcome capability, so a moderator following it calls a function that always reverts, and an auditor/integrator reading the two docs gets contradictory models of the resolution state machine.
Align the docs with the code — remove EXPIRED from the flagOutcome capability in README.md and state that EXPIRED is resolved mechanically via claimExpired() after expiry, matching protocol-readme.md.
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.