← StrategyJourney 9 campaign brief
Journey 9, Engineering briefPack version: 15 Oct 2026, 10:40 (London)
Leave feedback
The Engineering brief

What Journey 9 needs, and who owns it: flags and sync extensions, none gating wave 1

🔧 Open the marketing to engineering board
The board is the system of record: live rows, owners, status, and each row's today-vs-to-be.
The hard rules: two touches per wave, once per wave per customer, no re-send within a season. An unseen email-only inbox is never re-knocked; waves stand down for any live journey episode, an active trip and the travel day; power users and organic returners are hard-excluded (the minus 11.8 percent precedent); and the unengaged tail gets one sunset email, ever, then removal from every marketing audience.
1The requirements

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.

Events, feeds and data points

The flags the governance rides. Each row is the contract: what it carries, who reads it, what exists today.

The data pointWhat exists todayThe workWhat it must carryPhase · status · depends on
D4The ownership flag at the freeze
journey_state, campaign-written, wave-readable
Make 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 conventionSuppression 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 flag
active_trip, at the freeze
Plumb the trip state to wave segments.
EXISTS, NO ROUTE TO BRAZE
The state exists; wave segments cannot read it.
Attribute plumbingNo wave lands on a travel day: service states own the slot.
Used where: The freeze suppression
PHASE 1
ships now
Queued
Nothing.
▸ The 5 computed traits this journey reads: Analytics builds them, no engineering hours; and what is not listed, and why

Computed traits this journey reads · Analytics builds, no engineering hours

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 traitWhat exists todayThe workWhat it must carryPhase · status · depends on
D1The lifecycle band
lifecycle_band, daily
The tier spine for both wave audiences, on the standing pattern.
BUILDABLE TODAY
Derivable; wave 1 ran on Braze-native recency as the interim.
Computed traitProspect 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 flag
never_bid_completed, daily
The prospect fence: enforce the never-transacted boundary with the never-transacted journey.
DOES NOT EXIST YET
Not built.
Computed traitDefines 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 figures
route_from_price · walkup, nightly computed
Compute nightly on the standing pattern so every claim names a real number.
DOES NOT EXIST YET
Not built for the wave routes.
Computed traitsThe 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 flags
power_user · organic_returner
Sync 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 extensionBlanket 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 band
txn_frequency_band, daily
The strongest single discriminator of who reactivates: phase 2 tier refinement.
DOES NOT EXIST YET
Not built.
Computed traitRefines 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.

2Three delivery fixes

One governance build carries the headline change: the shared episode flag, written by every owning journey and read at the wave freeze.

The delivery fixThe fix we are asking forWho does itPhase
The journey ownership flag (journey_state): the shared buildBuild 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 ENGPHASE 1
ships now
▸ The problem today, and why it sits here
The 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 freezePlumb the active-trip flag to where wave segments can filter on it.BACKEND ENGPHASE 1
ships now
▸ The problem today, and why it sits here
The 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 leisureExtend the daily sync on the standing pattern; Analytics compute and pipe from their side.BACKEND ENGPHASE 2
gated
▸ The problem today, and why it sits here
The 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.
3One defect in the app itself

One shared instrumentation gap; it blocks the window card's direct read, not the wave.

The defectThe fix we are asking for
Content-card impressions and clicks do not registerFix the shared content-card instrumentation so impressions and clicks register.
▸ The problem today, and why it matters here
The 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.

Working detailPack version: 15 Oct 2026, 10:40 (London)