Force-release every pending-effect claim whose lease has expired, so the
entries become drainable again after their claimer died between claim and
complete. One CAS write per pass (all expired claims at once) with an
effectClaimReleased audit row per release; the ifRevisionId guard is
the sweeper election — concurrent sweepers or drainers race safely, the
loser re-reads (bounded, then fails loud). Release only: dispatching the
recovered entries is the next drainEffects call's job. To kill a stuck
entry WITHOUT redispatching, report it via
completeEffect({status: 'failed'}) instead.
A standalone export, NOT an Engine verb: like the guard-lifecycle
helpers, this is housekeeping for admin/ops tooling, not part of the
editor/runtime verb surface — a drain already self-recovers via takeover.
Force-release every pending-effect claim whose lease has expired, so the entries become drainable again after their claimer died between claim and complete. One CAS write per pass (all expired claims at once) with an
effectClaimReleasedaudit row per release; theifRevisionIdguard is the sweeper election — concurrent sweepers or drainers race safely, the loser re-reads (bounded, then fails loud). Release only: dispatching the recovered entries is the nextdrainEffectscall's job. To kill a stuck entry WITHOUT redispatching, report it viacompleteEffect({status: 'failed'})instead.A standalone export, NOT an
Engineverb: like the guard-lifecycle helpers, this is housekeeping for admin/ops tooling, not part of the editor/runtime verb surface — a drain already self-recovers via takeover.