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.
7 rows: 2 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 flags the governance rides. Each row is the contract: what it carries, who reads it, what exists today.
| The data point | What exists today | The work | What it must carry | Phase · status · depends on |
|---|---|---|---|---|
D4The ownership flag at the freezejourney_state, campaign-written, wave-readableMake the campaign-written flag readable by wave segments: the stand-down's whole mechanism. | DOES NOT EXIST YET Does not exist; each journey writes its own at build. | Braze configuration and convention | Suppression in from the save and win-back journeys, hand-off out. A fresh win, an imminent trip, a loss recovery, a win-back or a save all outrank the wave. Used where: The wave freeze, every wave | PHASE 1 ships now The engine's first governance build The owning journeys' canvas builds. |
D9The active-trip flagactive_trip, at the freezePlumb the trip state to wave segments. | EXISTS, NO ROUTE TO BRAZE The state exists; wave segments cannot read it. | Attribute plumbing | No wave lands on a travel day: service states own the slot. Used where: The freeze suppression | PHASE 1 ships now Queued Nothing. |
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 |
|---|---|---|---|---|
D1The lifecycle bandlifecycle_band, dailyThe tier spine for both wave audiences, on the standing pattern. | BUILDABLE TODAY Derivable; wave 1 ran on Braze-native recency as the interim. | Computed trait | Prospect against lapsed against churned: the register picker. Used where: Every wave's tiers | PHASE 1 ships now With Analytics The sync extension. |
D6The zero-completed-bids flagnever_bid_completed, dailyThe prospect fence: enforce the never-transacted boundary with the never-transacted journey. | DOES NOT EXIST YET Not built. | Computed trait | Defines the prospect audience; the never-transacted journey's waves and this engine share one fence. Used where: The prospect tier | PHASE 1 ships now With Analytics The sync extension. |
D8Per-route comparison figuresroute_from_price · walkup, nightly computedCompute nightly on the standing pattern so every claim names a real number. | DOES NOT EXIST YET Not built for the wave routes. | Computed traits | The real-number rule: a claim that cannot be substantiated does not render. Used where: Every wave send and the window card | PHASE 1 ships now With Analytics The sync extension. |
D10The power and organic-return exclusion flagspower_user · organic_returnerSync the exclusion flags: the hard fence the minus 11.8 percent read demands. | EXISTS, NOT IN BRAZE The model exists; the flags do not reach wave segments cleanly. | Sync payload extension | Blanket contact of this group measured minus 11.8 percent on the estate's one historic holdout. Used where: Every freeze | PHASE 1 ships now With Analytics The sync extension. |
D11The transaction-frequency bandtxn_frequency_band, dailyThe strongest single discriminator of who reactivates: phase 2 tier refinement. | DOES NOT EXIST YET Not built. | Computed trait | Refines the tiers once the engine runs; never a wave 1 gate. Used where: Tier refinement, phase 2 | PHASE 2 gated Queued The sync extension. |
Not listed because there is nothing to build: the wave calendar and snapshot (Braze-native), open and click events (live), and the recency tiers wave 1 already ran on.
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 governance build carries the headline change: the shared episode flag, written by every owning journey and read at the wave freeze.
| 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 the wave freeze reads it: waves stand down for any live episode, the headline change of the journey. |
| The active-trip flag at the freeze | Plumb the active-trip flag to where wave segments can filter on it. | BACKEND ENG | PHASE 1 ships now ▸ The problem today, and why it sits hereThe problem today No wave lands on a travel day; the trip state is not readable by wave segments today.Why it sits in this journey The travel-day suppression is a standing estate rule; the wave engine is its biggest consumer. |
| The sync extensions: frequency band, anniversary date, business against leisure | Extend the daily sync on the standing pattern; Analytics compute and pipe from their side. | BACKEND ENG | PHASE 2 gated ▸ The problem today, and why it sits hereThe problem today The finer tiers and the yearly slot ride attributes the sync does not carry.Why it sits in this journey Phase 2 refinements: wave 1 ran without them and phase 1 continues to. |
One shared instrumentation gap; it blocks the window card's direct read, not the wave.
| 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 window card would run blind.Why it matters here The wave's in-app leg cannot be read directly until it lands. |
Source: the 20 Aug 2026 data-availability sweep in the journey spec, the pins record, and the wave 1 reads. Board rows are raised from these contracts once sized.