Submit pipeline
The V2 admission path is message-centric and fail-closed.
Admission steps
- verify the Ed25519 message envelope
- structurally validate
MessageDataand the selected body - apply the correct authorization rule for the message family
- run stateful validation
- admit to the mempool if all checks pass
Authorization split
Ordinary user messages require a delegated Ed25519 key registered to owner_address with sufficient scope.
Special cases:
SIGNER_ADDandSIGNER_REMOVEare custody-backedSTORAGE_CLAIMis settlement-verified and does not require delegated-key authorization on first successful application
All three message families still require Ed25519 envelopes for transport integrity.
SIGNER_ADDandSIGNER_REMOVEderive authority from custody proofs.STORAGE_CLAIMstill requires finalized settlement verification, but first successful application does not require a delegated key registered toowner_address.
Duplicate STORAGE_CLAIM replay stays marker-idempotent after settlement verification, so an already-consumed claim remains a no-op regardless of current delegated-key state.
Dual authorization
MERGE_REQUEST_REMOVE has a dual authorization path — the only message type with this pattern:
- Requester withdrawal — the original
owner_addressmay close their own merge request without any target-project membership - Maintainer closure — the target project owner or any collaborator with
WRITE+permission may close any merge request targeting that project
Both paths require a registered key with SIGNING scope.
Execution placement
Account-level messages execute first in serial order.
Project-level messages execute second, grouped by project_id in byte-lexicographic order.
There is no relay-era account pre-pass for injected system messages because V2 has no injected system messages.