← All stories

BRANCH · ef-071-efx-sms-messaging

EFx SMS messaging

EF-071Roots in: efx-station-shellMatrix: Absent — ships as gap probe

In-event SMS messaging is absent. This branch defines the contract: provider adapter, checked-in audience filter, merge-token personalization, opt-out enforcement, delivery telemetry, and live station-safe orchestration.

Contract

  1. Organizer drafts an in-event SMS.

    Audience can be checked-in guests only, all registered guests, team members, or a saved segment.

  2. Merge tokens resolve before send.

    Unresolved personalization blocks the send and previews affected recipients.

  3. Provider sends and telemetry streams back.

    Queued, sent, delivered, failed, and opt-out states are visible without leaking across stations.

Failure modes

Gap probe remains visible

Until the provider adapter, audience resolver, personalization, delivery telemetry, and opt-out substrate exist, the runner expects a visible EF-071 gap panel.

Live runtime rubric

The absent feature still roots in the EFx station shell and carries all WebSocket resilience probes so the eventual messaging surface cannot bypass live-event isolation.

Stable test attributes

Visibility teeth. Active controls must be visible and interactive; hidden placeholders do not satisfy this contract.

data-testWherePurpose
efx-sms-gap-panelEFx messaging pageAbsent capability marker
efx-sms-composerEFx messaging pageMessage composer
efx-sms-audience-filterComposerAudience selector
efx-sms-checked-in-onlyComposerChecked-in filter
efx-sms-template-bodyComposerSMS body
efx-sms-send-ctaComposerSend action
efx-sms-previewComposerPersonalized preview
efx-sms-optout-panelComposerOpt-out controls
efx-sms-telemetry-tableMessaging reportDelivery rows
efx-sms-delivery-statusMessaging reportProvider state
efx-station-socket-statusStation runtimeConnection state
efx-station-active-stateStation runtimePause/closed state

Agent test plan

- sms-gap-panel-visible
- sms-composer-contract
- checked-in-audience-filter
- personalization-preview
- optout-honored
- provider-telemetry-visible
- all WebSocket rubric probes in JSON-LD