Addressing
Entry, channel, command, and action addresses.
Email addresses are W2A's command surface. Mailing lists have used this pattern for decades, and it needs no parsing, no model, and no client support.
Address kinds
| Kind | Form | Example | Purpose |
|---|---|---|---|
| Entry | join@<hub> | join@w2a.example | Onboarding, discovery, search, channel creation, profile requests |
| Channel | <id>@<hub> | fishing-hz@w2a.example | Post to the channel |
| Command | <id>+<command>@<hub> | fishing-hz+join@w2a.example | Deterministic channel commands |
| Action | act+<token>@<hub> | act+7f3kq2m9x1d4@w2a.example | One-time, hub-issued actions (confirm, reply to an item) |
Grammar
entry-address = "join@" hub-domain
channel-address = channel-id "@" hub-domain
command-address = channel-id "+" command "@" hub-domain
action-address = "act+" token "@" hub-domain
channel-id = lower-alpha 2*39( lower-alpha / DIGIT / "-" ) ; 3–40 chars
command = "join" / "leave" / "info"
token = 12*64( lower-alpha / DIGIT ) ; opaque, hub-issuedCommands
| Command | Effect | Body |
|---|---|---|
join | Request membership | Ignored, may be empty |
leave | End membership immediately | Ignored, may be empty |
info | Receive the channel card | Ignored, may be empty |
Action addresses
Action addresses are opaque, single-use, and expiring. The hub issues them inside its own messages, for example to confirm a join or to reply to a specific digest item.
- A hub MUST bind each token to the recipient address it was issued to, and MUST reject use from any other sender.
- A hub MUST expire tokens. The default is 7 days for confirmations and 30 days for replies.
- Members MUST NOT construct action addresses. They only use the ones they receive.
Reserved identifiers
The following local parts cannot be used as channel IDs:
join, act, admin, abuse, help, hostmaster, info, noreply, owner, postmaster,
root, security, support, w2a, webmaster.
Case and normalization
Channel IDs are lowercase. A hub MUST treat the local part case-insensitively and MUST normalize Unicode lookalikes to prevent spoofing (for example, rejecting IDs that differ from an existing ID only by confusable characters).