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: 6 data points and 3 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 events and attributes the journey's reads and states ride. Each row is the contract: what fires, what it carries, who reads it.
| The data point | What exists today | The work | What it must carry | Phase · status · depends on |
|---|---|---|---|---|
D4Practice-completion and real-bid-placed eventspractice_completed · bid_placed, real timeBuild the practice event; the bid event exists. Without the pair the onramp cannot be read at all. | DOES NOT EXIST YET The bid event is live; the practice event does not exist. | New app event | The headline test reads first real bid conversion among never-bid customers; the practice tile's effect is invisible without its completion event. Used where: The onramp read | PHASE 2 gated Queued behind the copy arm's ship Nothing: the tile ships first, the event makes it readable. |
D6The comparison fare at the decisionwalk-up comparison, at renderServe a real comparison fare where the buy-now box shows one, substantiated at the moment it shows. | DOES NOT EXIST YET No substantiated anchor exists at the decision. | Product lookup at render | Never cheaper, never guaranteed: an anchor that cannot be substantiated at fire time does not render. Used where: The buy-now box lead | PHASE 2 gated Queued The fare source Product owns. |
D8Marketing subscription apart from device permissionmarketing_layer · device_permission, queryableHold the two consent layers apart and current: the ladder targets the marketing layer. | EXISTS, PIPELINE STALE The sender holds current state; the split is not cleanly queryable. | Attribute plumbing | The two layers are different facts (93 percent against 68 percent) and the estate conflates them; the warehouse copy is stale. Used where: The ladder's targeting and the win boundary's ask | PHASE 1 ships now Configuration and plumbing at build Nothing. |
D3The journey-ownership flagjourney_state, campaign-writtenNothing to build for entry; the shared key stops this journey and the funnel-abandon journey chasing one customer. | DOES NOT EXIST YET Campaign-written at build. | Braze configuration | One owner per customer per window: the outbound layer silences during any owned recovery episode. Used where: Every outbound row's suppression | PHASE 1 ships now Wiring at build The same stand-down wiring the other journeys use. |
D7The shared decline counterladder_declines, journey-writtenNothing to build outside the canvas: the counter is journey-written, and every ask surface reads it. | CAMPAIGN-OWNED Written by the canvas at build. | Canvas build | One decline quiets every ask for 30 days; never more than two asks in any 30 days, counted across the card, the interrupt and the system prompt. Used where: Every permission ask, including the win boundary's | PHASE 1 ships now Canvas build; the ladder's master record gates it The signed master record. |
D9The practice-auction deep linkdeep link → the practice auction, from email and pushA route that lands the customer straight in the practice auction from an email or push tap (Sheran, 6 Sep 2026, J5-09). Consumers: the welcome, the day-one how-to email, the day-7 check-in and Journey 1's practice arc. Board row: ACTIVATE · Deep link into the practice auction (recNMfDBOT8FzhfMN); the AppsFlyer email fix is a prerequisite for email taps. | DOES NOT EXIST YET The practice round can only be reached by finding it in the app. | New app route, iOS and Android | The practice invitation becomes one tap Used where: Rows 1, 1b, 3 and 9 | PHASE 2 gated Ruled 6 Sep 2026 (J5-09) The AppsFlyer OneLink fix (boarded). |
Named here so the full picture is one table. The contract is the row: what each trait computes, what reaches the sender today, and what remains to build.
| The computed trait | What exists today | The work | What it must carry | Phase · status · depends on |
|---|---|---|---|---|
D1Bid state and transacted type at renderbid_behaviour · transacted_type, nightlyCompute nightly and add to the daily sync on the standing pattern. | DOES NOT EXIST YET Not in the sync payload. | One computed trait set | The session slot sequences on it; the practice tile shows only to the never-bid; the education message excludes bidders. Used where: Session start and the decision screens | PHASE 1 ships now With Analytics The CDI payload extension. |
D2The never-won flag at the winnever_won, nightlyCompute nightly so the win surfaces can branch on a first win. | BUILDABLE TODAY Derivable from transaction history; not synced. | One computed trait | Selects the beginner's-luck message; a stale flag mislabels a second win as a first, so the fallback is the generic confirmation. Used where: The first-win celebration | PHASE 1 ships now With Analytics The CDI payload extension. |
D5Engagement tier and contactability per wave poolengagement_tier · contactable, per channelBuild the tier model behind the wave, and the canonical pool definition first. | BUILDABLE TODAY Three pool figures circulate; no tier model exists. | Computed traits, Analytics-owned | The wave's tiering, the deliverability line, and the holdout that separates journey lift from targeting lift. Used where: The wave, and the unengaged suppression | PHASE 1 ships now With Analytics, due before the wave calendar freezes The pool-definition ask. |
Not listed because there is nothing to build: the first-transaction event set (auction won, instant win, auto-win, buy-now confirmation) is live and real time; the shared decline counter and journey-ownership flag are canvas-written.
Six 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.
Two plumbing questions, neither a new surface: the bid-state attribute on the standing Braze CDI pattern, and the loss flags in the hand-back payload.
| 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 silences the outbound layer during a recovery episode and carries the permission ladder's shared budget. |
| The bid-state attribute at render | Compute never-bid against made-bid nightly (Analytics) and add it to the daily sync on the standing Braze CDI pattern; Engineering only if the CDI mapping needs registering. | BACKEND ENG | PHASE 1 ships now ▸ The problem today, and why it sits hereThe problem today The session slot and the practice tile both select on whether the customer has ever bid; nothing reads it today.Why it sits in this journey State-sequencing at session start and the practice tile's state fix both ride it. |
| Loss-history flags in the day-14 hand-back | Carry first-loss, why-it-ended and the route in the hand-back payload, so the return surface can read them. | BACKEND ENG | PHASE 2 gated ▸ The problem today, and why it sits hereThe problem today The live-auction journey closes its loss arc at day 14 and hands the customer back; no flags travel with them.Why it sits in this journey The loss-aware return is phase 2 on exactly this. |
| The marketing-layer subscription state, held apart | Expose the marketing subscription state beside the device permission, queryable at trigger time from the sender's own record. | BACKEND ENG | PHASE 1 ships now ▸ The problem today, and why it sits hereThe problem today 93 percent grant the device permission but only 68 percent the marketing layer; the estate conflates the two, and the warehouse copy is stale.Why it sits in this journey The ladder targets the layer that actually gates communication. |
Two live gaps. Neither blocks phase 1; both block reads the journey needs.
| The defect | The fix we are asking for |
|---|---|
| Content-card impressions and clicks do not register | Fix the shared content-card instrumentation so impressions and clicks register.▸ The problem today, and why it matters hereThe problem today The estate-wide instrumentation gap: the standing education and opt-in cards run blind.Why it matters here Two of this journey's surfaces are unreadable until it lands. |
| The practice prompt holds the wrong state | Fix the state read in the same change as the onramp copy.▸ The problem today, and why it matters hereThe problem today Meant for customers who have never bid, it persists after a bid is placed.Why it matters here A post-bid practice prompt contradicts the live auction the customer is already in. |
Source: the 20 Aug 2026 data-availability sweep in the journey spec, the pins record, and the comms estate record. Nothing lands on the sprint board from this pack; the board rows are raised from these contracts once sized.