invitation: record_invite_opened — track opens #10

Closed
opened 2026-02-28 08:39:58 +00:00 by ash · 0 comments
Owner

🔵 State-Change Slice

Stream: invite-{email-hash}
Command: RecordInviteOpened{Email}
Event: InviteOpened{Email, OpenedAt}

Invariants

  • Invite must exist (InviteSent)
  • Multiple opens allowed (not idempotent — each open is tracked)

Tests

TestRecordInviteOpened_Happy
TestRecordInviteOpened_NoInvite → error
TestRecordInviteOpened_MultipleOpens → all recorded

Agent assignment: builder-invite

## 🔵 State-Change Slice **Stream:** `invite-{email-hash}` **Command:** `RecordInviteOpened{Email}` **Event:** `InviteOpened{Email, OpenedAt}` ### Invariants - Invite must exist (InviteSent) - Multiple opens allowed (not idempotent — each open is tracked) ### Tests ``` TestRecordInviteOpened_Happy TestRecordInviteOpened_NoInvite → error TestRecordInviteOpened_MultipleOpens → all recorded ``` **Agent assignment:** builder-invite
ash closed this issue 2026-02-28 08:50:36 +00: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
ash/waitlist#10
No description provided.