ERC-8312: Bounded Agent Actions

Once a registry implements IContestableEnvelope, Contested isn’t merely descriptive. Section 2.3 rejects advanceCursor on any stored status other than Active, and isActive is true only for Active, so entering Contested suspends further cursor advancement. An integrator can adopt what looks like a review flag and inherit a de facto freeze of the envelope. It’s the same non-dispositive versus dispositive line you drew in your ERC-8319 comment, pointed back at this one.

That’s the piece I’d put into the fix you flagged in #55, where the Rationale overstates the Specification. Say in the Specification that Contested is operationally suspensive, and keep a purely informational review signal off lifecycle status altogether so it changes neither isActive nor advanceCursor. The enum stays for compatibility, and the concerns in #18 and #22 get an answer without anything being removed.

One liveness edge remains. Contested -> Active and Contested -> Revoked both run through resolver-restricted resolve, and there is no stored Contested -> Expired transition. Since expiresAt may be zero, resolver silence can leave a non-expiring envelope contested indefinitely. For an expiring envelope, consumers must treat it as inactive after the timestamp, but the state machine still defines no stored transition out of Contested. The principal’s explicit Active -> Revoked route is also no longer available unless the registry makes the principal a resolver. A bonded challenger doesn’t necessarily have to win; resolution stalling may be enough.

The reservation interaction should be pinned too. Where an implementation models an advance as a reservation, Section 2.3 blocks new advances after contest, but the Specification doesn’t say whether already-open reservations may still be confirmed or cancelled while the stored status is non-Active. Reservation Binding only pins who may perform those operations. Whether those reservations remain locked, settle, or release changes the pooled headroom other venues rely on, so an IContestableEnvelope implementation should be required to define that behavior.