← All stories

BRANCH · ef-078-lead-retrieval

Lead Retrieval

EF-078 Persona: Sponsor staff Roots in: efx-station-shell Matrix: Partial - sponsor mobile app gap

Sponsor staff scan attendee QR/NFC badges, enrich captured leads with sponsor-specific custom fields, and export only their own leads. Voyage has lead capture substrate, but the sponsor-facing mobile app remains a gap.

Happy path

  1. Sponsor opens their scoped lead station.

    The station authenticates to the event namespace and loads sponsor scope, custom fields, and current capture count.

  2. Sponsor scans attendee QR/NFC.

    The attendee profile is resolved, sponsor custom fields are collected, and one lead row is written for attendee plus sponsor.

  3. Sponsor exports captured leads.

    Export includes only leads for the current sponsor and excludes other sponsor booths.

Failure modes

Socket reconnect resilience

Reconnect replays the current sponsor lead count and pending scan state without duplicating the last capture.

Out-of-order scan messages

Older scan acknowledgements are ignored or resynced by sequence number.

Concurrent sponsor scans

Many sponsor devices can scan at once without dropped acknowledgements or double rows.

Late join shows prior state

A second sponsor device joins and sees previously captured leads for that sponsor.

Organizer pause mid-flow

Organizer pause blocks new lead captures while preserving existing rows.

Export visible only after close

Final sponsor export stays unavailable until the capture window closes.

Idempotent lead capture

Scanning the same attendee twice updates the same sponsor lead, not a duplicate.

Cross-station isolation

Leads from sponsor A never appear in sponsor B counts or exports.

Custom field validation

Required sponsor fields block save inline and preserve scan identity.

Gap probe: sponsor mobile app missing

The visible gap panel remains until sponsor mobile capture is implemented and proven.

Stable test attributes

Visibility teeth. Each attribute must be effectively visible when active and must match the agent probes.

data-testWherePurpose
lead-retrieval-stationstation shellsponsor lead station
lead-retrieval-socket-statusstation shellsocket state
lead-retrieval-scan-ctacapture formscan trigger
lead-retrieval-attendee-cardcapture formresolved attendee
lead-retrieval-custom-fieldscapture formsponsor fields
lead-retrieval-save-ctacapture formsave lead
lead-retrieval-export-ctaexport panelsponsor export
lead-retrieval-gap-panelgap panelmobile app gap

Agent test plan

- lead-retrieval-opens
- lead-retrieval-captures
- socket-reconnect
- out-of-order-scan
- load-stable
- late-join
- organizer-pause
- export-after-close
- idempotent-capture
- cross-station-isolation
- custom-field-validation
- mobile-app-gap