No send in this journey is fired natively by the app itself, so there is no native-to-Braze migration roster here: everything that sends today already lives in the messaging platform or an external one, and each row’s call sits on the As-is tab.
9 rows: 4 data points and 5 computed traits (Analytics builds, no engineering hours). The D badge is the walkthrough pin number. Delivery fixes and app defects follow in their own sections.
The render-path data the phase 2 build needs. Each row is the contract; all of it is scoped at the Product session.
| The data point | What exists today | The work | What it must carry | Phase · status · depends on |
|---|---|---|---|---|
D6Live auction availability at renderroute_auction_live, at renderExpose the live-auction check so a deep link never lands on a dead auction. | DOES NOT EXIST YET Does not exist in the render path. | Render-path build | The card's deep link renders only on a confirmed live auction; without the check the card cannot link. Used where: The recognition card's deep link | PHASE 2 gated Scoped at the Product session The scoping session. |
D7Bid state at renderin_lead, at renderExpose whether the customer is in the lead on a live bid: a suppression input at render. | DOES NOT EXIST YET Not readable at render. | Render-path build | In-lead bidders see the live auction's state, never a recognition card. Used where: The card's eligibility | PHASE 2 gated Scoped at the Product session The scoping session. |
D8Card impression and click eventscard_impression · card_clickThe shared estate fix: make the surface measurable. | DOES NOT EXIST YET Zero recorded across 11 live cards. | Front-end instrumentation | Every read this journey proposes rides it. Used where: Reading anything on this surface | PHASE 1 ships now The shared fix, already on the estate record Nothing. |
D1The ownership flag at renderjourney_state, render-readableMake the shared episode flag readable by the home surface. | DOES NOT EXIST YET The flag convention exists across the journeys; render readability does not. | Braze configuration | The state model's arbitration: trip, then episode, then recognition. Used where: State resolution, every open | PHASE 1 ships now With the shared-flag build The owning journeys' canvas builds. |
Named here so the full picture is one table. The contract is the row.
| The computed trait | What exists today | The work | What it must carry | Phase · status · depends on |
|---|---|---|---|---|
D2The usual routeusual_route, nightlyThe standing pattern: most travelled over a year, ties broken by the most recent. | BUILDABLE TODAY Derivable; the same trait other journeys consume. | Computed trait | The card's anchor: their route, not a route. Used where: The recognition card | PHASE 1 ships now With Analytics The CDI payload extension. |
D3The persona classifierpersona_register, nightlySync the classifier; unclassified customers get neutral copy rather than a guess. | EXISTS, NOT IN BRAZE The model exists; it does not reach the sender. | Sync payload extension | The register picker: commuter, leisure, or the neutral no-guess register. Used where: The card's register | PHASE 1 ships now With Analytics The CDI payload extension. |
D4The transacted flag and lifecycle bandtransacted · lifecycle_band, dailyEligibility's spine: which recognition, and whether any. | DOES NOT EXIST YET Derivable; not in the render path. | Computed traits | Entry (previously transacted, Active or Reactivated) and the register. Used where: Eligibility at render | PHASE 1 ships now With Analytics The CDI payload extension. |
D5Booking history and home stationbooking_anchor, nightlyThe anchor that makes the card personal rather than generic. | EXISTS, NOT IN BRAZE Held in the warehouse; not synced. | Sync payload extension | The card's specifics: the trip, the station, the real figures. Used where: The recognition card | PHASE 1 ships now With Analytics The CDI payload extension. |
D9The savings percentilesavings_percentile, nightlyRank each customer’s upgrade savings in the last 12 months among customers who transacted in that window, nightly, and sync the percentile to Braze as an attribute. Journey 6’s anniversary tile shares it. | DOES NOT EXIST YET Not computed anywhere; the per-trip saving it ranks is Journey 6’s open requirement. | Computed trait | The power user’s standing card: top N percent of Seatfrog savers this year, with their saved total. It ranks savings, never bids, and names no other customer. Used where: The standing card on the tile rail (a test: card against no card) | PHASE 1 ships now On the board Journey 6’s savings figures; the sync payload extension. |
Not listed because there is nothing to build: session recency (Braze-native, the suppression's whole trigger) and the For-you carousel the phase 1 card ships in.
Four changes the customer never sees: what is broken today, the fix we are asking Engineering for, and why it belongs in this journey rather than a general engineering backlog. None is a comm and none needs a decision from Marketing. Each one either loses a message this journey depends on, or decides whether something else can be built at all.
One shared fix carries the journey's readability: card impression and click events, zero today across 11 live cards.
| The delivery fix | The fix we are asking for | Who does it | Phase |
|---|---|---|---|
| The journey ownership flag (journey_state): the shared build | Build journey_state once, estate-wide: one attribute carrying the owning journey, the episode id and the entry time. Every owning canvas writes it at entry and clears it at exit; every broadcast and wave segment excludes on it; it is mirrored nightly to the warehouse and readable at render by the home surface. The Braze developer wires the canvases and the exclusion segments, Engineering mirrors it to the warehouse and exposes the render read, Analytics keeps the state history. One board row carries it for all ten journeys. | BACKEND ENG | PHASE 1 ships now ▸ The problem today, and why it sits hereThe problem today Every journey's stand-down and hand-off assumes one owner per customer, and the flag those rules read is campaign-written today: invisible to broadcast segments, the warehouse and the app, so the rule cannot be enforced. Two live journeys can reach one customer in one week with clashing messages.Why it sits in this journey Here it is read at render: live trip, then open episode, then recognition, in that order. |
| Card impression and click events | Fix the shared content-card instrumentation so the surface becomes measurable. | BACKEND ENG | PHASE 1 ships now ▸ The problem today, and why it sits hereThe problem today Zero impressions or clicks are recorded across all 11 live content cards: nothing on the surface can be read.Why it sits in this journey The recognition card cannot be read, tested or ranked until this lands; it is the estate-wide fix this journey needs most. |
One live defect class: the surface is unreadable, and the slot is unfiltered.
| The defect | The fix we are asking for |
|---|---|
| The surface is unreadable | The shared instrumentation fix.▸ The problem today, and why it matters hereThe problem today Impression and click measurement registers zero across 11 live cards.Why it matters here Nothing on the home surface can be measured, ranked or tested until it lands. |
| The slot is unfiltered | The slot map at the scoping session; the recognition card ships with the cap and rotation the pile lacks.▸ The problem today, and why it matters hereThe problem today The live cards fire for anyone registered over 30 days: no segment filter, no frequency cap, no transaction-state read.Why it matters here A returning customer's first impression is an unfiltered cross-sell pile. |
Source: the 20 Aug 2026 evidence refresh, the pins record, and the estate instrumentation audit. Board rows are raised after the scoping session.