Message Types
All message types and their semantics.
2P: Project Set
| Type | Description | Required Scope |
|---|---|---|
PROJECT_CREATE | Create a new project with name and visibility | SIGNING |
PROJECT_REMOVE | Remove a project (hides refs, commits, collaborators) | OWNER |
Conflict key: (project_id). A removed project retains its data — a subsequent PROJECT_CREATE referencing the same project ID restores it.
1P: Singleton
| Type | Description | Required Scope |
|---|---|---|
FORK | Fork an existing project at a specific commit | SIGNING |
Includes source_commit_hash anchoring the fork to a precise point. The forked project's ID is the BLAKE3 hash of the FORK message.
1P: LWW Register
| Type | Conflict Key | Required Scope |
|---|---|---|
PROJECT_METADATA | (project_id, field) | SIGNING |
ACCOUNT_DATA | (mid, field) | SIGNING |
1P: Append-only
| Type | Description | Required Scope |
|---|---|---|
COMMIT_BUNDLE | Declare a batch of new commit metadata + DA reference | AGENT |
Commits are ordered parent-first within a bundle. Each commit includes: hash, parent hashes, tree root hash, author MID, title, and message hash.
1P: State Transition
| Type | Description | Required Scope |
|---|---|---|
PROJECT_ARCHIVE | Make project read-only | OWNER |
2P: Ref Set (CAS-ordered)
| Type | Description | Required Scope |
|---|---|---|
REF_UPDATE | Move a ref to a new commit hash | AGENT |
REF_DELETE | Remove a ref | AGENT |
REF_UPDATE uses compare-and-swap: includes expected current hash (old_hash). If the ref has moved, the update is rejected. Updates must be fast-forward (the new commit must be a descendant of the current ref target) unless force = true.
2P: Collaborator Set
| Type | Description | Required Scope |
|---|---|---|
COLLABORATOR_ADD | Grant an account access to a project | SIGNING (admin) |
COLLABORATOR_REMOVE | Revoke access | SIGNING (admin) |
Permissions: READ, WRITE, ADMIN, OWNER.
1P: Relay-Injected
| Type | Description | Authorization |
|---|---|---|
KEY_ADD | Register an Ed25519 key with a scope | Relay-injected |
KEY_REMOVE | Revoke a key | Relay-injected |
OWNERSHIP_TRANSFER | Transfer MID ownership to a new wallet address | Relay-injected |
These messages are injected by validators relaying events from the onchain MakeRegistry contract. No Ed25519 scope check is performed — the onchain transaction was already validated. OWNERSHIP_TRANSFER includes previous_owner_address for defense-in-depth (must match current state).
2P: Verification Set
| Type | Description | Required Scope |
|---|---|---|
VERIFICATION_ADD | Prove ownership of an external address | SIGNING |
VERIFICATION_REMOVE | Revoke a verification | SIGNING |
Supported types: ETH_ADDRESS (Ethereum EOA), SOL_ADDRESS (Solana). The claim_signature must be a valid signature over the challenge message makechain:verify:<mid>. See Identity for signing details.