Outcome
An adapter may resubmit the exact previously admitted external-action settlement after an acknowledgement loss. Echo returns the original admitted settlement without appending history or granting effect authority. A different settlement for the same request and attempt obstructs as conflicting.
Evidence
cargo test -p warp-core --test external_action_protocol_tests duplicate_settlement_is_a_recovery_obstruction -- --exact passes on c684ddbb6ebb83edb4658ae590192e1eee83721e because the current protocol classifies an identical duplicate as DuplicateSettlement.
ExternalActionCoordinatorV1::claim_grant correctly refuses to recreate adapter execution authority after settlement. The missing surface is a no-effect reconciliation path for a retained settlement candidate.
Acceptance
- exact retries return the original
AdmittedExternalActionSettlementV1 and original settlement commit digest;
- exact retries append no WAL frame or commit;
- differing request, attempt, adapter, kind, schema, basis, canonical result, or evidence obstructs as
ConflictingSettlement;
- retry reconciliation cannot return a claim grant or execute an adapter;
- recovered settled history supports the same exact-retry result after restart;
- malformed candidates fail existing schema and digest validation before comparison;
- fixed-seed mutation cases and bounded repeated retries preserve one settlement commit;
- the provider/compiler seam and application vocabulary remain unchanged.
Consumer
Blocks flyingrobots/hello-echo#10.
Outcome
An adapter may resubmit the exact previously admitted external-action settlement after an acknowledgement loss. Echo returns the original admitted settlement without appending history or granting effect authority. A different settlement for the same request and attempt obstructs as conflicting.
Evidence
cargo test -p warp-core --test external_action_protocol_tests duplicate_settlement_is_a_recovery_obstruction -- --exactpasses onc684ddbb6ebb83edb4658ae590192e1eee83721ebecause the current protocol classifies an identical duplicate asDuplicateSettlement.ExternalActionCoordinatorV1::claim_grantcorrectly refuses to recreate adapter execution authority after settlement. The missing surface is a no-effect reconciliation path for a retained settlement candidate.Acceptance
AdmittedExternalActionSettlementV1and original settlement commit digest;ConflictingSettlement;Consumer
Blocks flyingrobots/hello-echo#10.