Message types

The address-native message set. Every committed message is user-submitted and carries a valid Ed25519 envelope. Validators do not inject Tempo events into blocks. The canonical reference is protocol/SPECIFICATION.md (AccountKeychain custody, ERC-1271 removal, chain wipe).

Projects

TypeDescriptionBase scope
PROJECT_CREATECreate a projectSIGNING
PROJECT_METADATAUpdate project metadataSIGNING
PROJECT_ARCHIVEArchive a projectSIGNING
FORKFork an existing projectSIGNING
PROJECT_REMOVERemove a projectSIGNING

Project ownership is keyed by owner_address.

Refs and commits

TypeDescriptionBase scope
REF_UPDATEMove a ref to a new hashAGENT
REF_DELETEDelete a refAGENT
COMMIT_BUNDLEAppend commit metadataAGENT

CommitMeta uses author_address.

Collaborators and account metadata

TypeDescriptionBase scope
COLLABORATOR_ADDAdd a collaboratorSIGNING
COLLABORATOR_REMOVERemove a collaboratorSIGNING
ACCOUNT_DATAUpdate account metadataSIGNING

Collaborator targets are address-native:

  • CollaboratorAddBody.target_owner_address
  • CollaboratorRemoveBody.target_owner_address

Merge requests

TypeDescriptionBase scope
MERGE_REQUEST_ADDOpen a merge request from a fork descendant into a target projectSIGNING
MERGE_REQUEST_REMOVEWithdraw or close a merge requestSIGNING

MERGE_REQUEST_ADD binds source_project_id, source_ref, source_commit_hash, and a suggested target_ref into a content-addressed request_id. The source project must be in the target project's retained fork lineage within MAX_FORK_LINEAGE_DEPTH = 256 hops. source_project_id must not equal project_id. No target-project membership is required for public projects; private targets require READ+ access. source_ref must resolve exactly to source_commit_hash at execution time.

MERGE_REQUEST_REMOVE closes an active merge request through dual authorization — the original requester may withdraw without any target-project membership, or a target project owner or collaborator with WRITE+ may close it. Merge request state is stored under the target project's namespace at prefix 0x1B with a requester reverse index at 0x1C. Closure attribution is available only from finalized message history, not from canonical state.

Verification and storage

TypeDescriptionBase scope
VERIFICATION_ADDProve an external addressSIGNING
VERIFICATION_REMOVERemove a verificationSIGNING
STORAGE_CLAIMClaim raw storage unitsnone

STORAGE_CLAIM is the only Tempo-backed storage ingress path in Makechain. It funds raw storage only and does not assign usernames.

It still requires finalized settlement verification. First successful application does not require delegated-key authorization, and duplicate replay remains marker-idempotent after settlement verification.

VERIFICATION_ADD carries a self-describing claim signature. ETH claims support secp256k1, P256, and WebAuthn P256 signatures over the EIP-712 VerificationClaim typed-data hash; consensus verifies them locally. ERC-1271 verification is not supported.

Username management

TypeDescriptionBase scope
USERNAME_CREATEClaim the first canonical username for an accountSIGNING
USERNAME_UPDATEReplace the current canonical usernameSIGNING

USERNAME_CREATE requires active storage (at least one accepted STORAGE_CLAIM) and that no username is currently assigned.

USERNAME_UPDATE requires an active username and active storage.

Username-bearing quota requires both active storage and an active username.

TypeDescriptionBase scope
LINK_ADDAdd a linkSIGNING
LINK_REMOVERemove a linkSIGNING
REACTION_ADDAdd a reactionSIGNING
REACTION_REMOVERemove a reactionSIGNING

FOLLOW links use target_owner_address.

STAR links use target_project_id.

Reactions remain project-and-commit scoped, but the reacting account is identified by owner_address.

Signer management

TypeDescriptionAuthorization
SIGNER_ADDAdd an Ed25519 delegated keycustody-backed
SIGNER_REMOVERemove an Ed25519 delegated keycustody-backed
KEYCHAIN_AUTHORIZEAdd an AccountKeychain custody keykeychain-admin
KEYCHAIN_REVOKERevoke an AccountKeychain custody keykeychain-admin

SIGNER_ADD includes:

  • request_owner_address
  • request_signature
  • allowed_projects

Signer-management signatures are self-describing AccountKeychain signatures. SIGNER_ADD and SIGNER_REMOVE do not carry key-type or validation-block fields. (KEYCHAIN_AUTHORIZE is different: it stores an explicit signature_type and public_key for the custody key being added, and checks key_id against that public key.)

Disabled families

These message families are disabled in Makechain and must not appear at ingress, replay, or commit time:

  • KEY_ADD
  • OWNERSHIP_TRANSFER
  • STORAGE_RENT
  • RELAY_SIGNER_ADD
  • RELAY_SIGNER_REMOVE