Spec: add posta.room/v1 action=leave (membership opt-out) #3

Closed
opened 2026-05-13 18:45:04 +02:00 by arne · 0 comments
Owner

What to build

Define a second action under `posta.room/v1`: `action: "leave"`. Carries no other fields. Semantically: "remove the sender's URL from the room's subscriber set."

```json
{ "kind": "posta.room/v1", "action": "leave" }
```

Effect (local-policy guidance, since §14 leaves membership management to the implementation):

  • The room removes the sender from its subscriber set.
  • The message is not archived as content and not fanned out.
  • Receiver returns `204` like any other accepted envelope.

This is the first "control" action under `posta.room/v1`. Future actions (`join`, `kick`, `ban`, `pin`, …) follow the same pattern.

Includes spec text addition in the §14 (or a new §13.4) describing the action, plus a conformance vector for "posting a leave succeeds, and a follow-up post from the same sender to a room with `leave`-tracking semantics re-adds them per the room's local policy."

Per-category versioning consequence already noted in posta/spec#2 applies here too: incompatible changes to any `posta.room/v1` action bump the whole kind.

Acceptance criteria

  • SPEC.md describes `posta.room/v1` `action: "leave"`, its single-purpose semantics, and that the payload carries no other fields
  • A conformance vector demonstrates a valid leave envelope (encoded + signed) and the expected receiver behaviour
  • pkg/posta wrapper helpers (if any) recognise the action; existing tests still pass

Blocked by

## What to build Define a second action under \`posta.room/v1\`: \`action: \"leave\"\`. Carries no other fields. Semantically: \"remove the sender's URL from the room's subscriber set.\" \`\`\`json { \"kind\": \"posta.room/v1\", \"action\": \"leave\" } \`\`\` Effect (local-policy guidance, since §14 leaves membership management to the implementation): - The room removes the sender from its subscriber set. - The message is not archived as content and not fanned out. - Receiver returns \`204\` like any other accepted envelope. This is the first \"control\" action under \`posta.room/v1\`. Future actions (\`join\`, \`kick\`, \`ban\`, \`pin\`, …) follow the same pattern. Includes spec text addition in the §14 (or a new §13.4) describing the action, plus a conformance vector for \"posting a leave succeeds, and a follow-up post from the same sender to a room with \`leave\`-tracking semantics re-adds them per the room's local policy.\" Per-category versioning consequence already noted in posta/spec#2 applies here too: incompatible changes to any \`posta.room/v1\` action bump the whole kind. ## Acceptance criteria - [ ] SPEC.md describes \`posta.room/v1\` \`action: \"leave\"\`, its single-purpose semantics, and that the payload carries no other fields - [ ] A conformance vector demonstrates a valid leave envelope (encoded + signed) and the expected receiver behaviour - [ ] pkg/posta wrapper helpers (if any) recognise the action; existing tests still pass ## Blocked by - posta/spec#2 (needs \`posta.room/v1\` kind defined)
arne closed this issue 2026-05-13 21:32:21 +02:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
posta/spec#3
No description provided.