← All stories

BRANCH · ef-057-qr-codes-in-emails

QR codes in emails

EF-057Persona: Organizer + staffRoots in: event-setup

An organizer inserts a QR code block into an email, validates a sample render, and the guest receives both an inline QR image and plain-text fallback code that round-trips to event-day check-in.

Preconditions

Fixture event has credentialed guests, QR-capable email design, and one empty-audience segment.

Happy path

  1. Insert QR block.

    QR block includes alt text and a visible fallback code setting.

  2. Send sample.

    Validation samples a signed QR render before fan-out.

  3. Round-trip to check-in.

    Signed URL resolves to the event-day check-in credential.

Failure modes

Send blocked on validation failure

Trigger: QR block cannot render a credential.

Resolution: 400 blocks send and no email leaves.

Bounced recipient tracked and suppressed

Trigger: QR email bounces.

Resolution: email_events records bounce and suppression blocks future sends.

Scheduled-message edit window

Trigger: QR scheduled send is edited after cutoff.

Resolution: 409 PAST_EDIT_WINDOW.

Retry on transient failure

Trigger: provider 5xx.

Resolution: retry uses the same Idempotency-Key and sent_count is one.

Idempotency-key on test-send

Trigger: double-click Send test.

Resolution: one QR test email is sent.

Recipient resolution empty

Trigger: QR audience resolves to zero.

Resolution: 409 NO_RECIPIENTS and visible empty-audience copy.

Token rendering fallback

Trigger: guest name token near QR is missing.

Resolution: fallback copy renders and QR code still has alt text.

Cancel scheduled before send

Trigger: scheduled QR email is cancelled.

Resolution: queue drains and audit logs cancellation.

QR accessibility fallback

Trigger: email client blocks inline image.

Resolution: alt text and the same code as plain text are present.

Signed URL tamper

Trigger: QR URL signature is modified.

Resolution: check-in endpoint rejects with tampered physical scan result.

Deployed-runtime gap

Trigger: deployed run on 2026-04-29 observed QR mailing send 409 NO_RECIPIENTS, so QR render round-trip could not be exercised; the probe locks this in until the gap is closed.

Resolution: story expects the 409 until deployed QR send reaches a real recipient.

Stable test attributes

Visibility teeth. Each attribute must be effectively visible when active.

qr-email-pagePageQR email design
qr-email-editorEditorDesign body
qr-email-blockEditorQR block
qr-email-previewPreviewRendered QR
qr-email-alt-textPreviewAlt text
qr-email-fallback-codePreviewPlain code
qr-email-send-ctaToolbarSend
qr-email-warningPageValidation
qr-email-gap-panelPageRuntime gap

Agent test plan

- qr-email-renders
- qr-sample-render
- qr-round-trip
- deployed-runtime-gap