← Journey 9 front page
Journey 9, Engineering briefPack version: 2 Sep 2026, 22:58 (London)
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 new events and feeds, 0 sends moving into Braze, and 5 computed traits (Analytics builds, no engineering hours). The D badge is the walkthrough pin number, coloured by what exists today: BUILDABLE TODAY EXISTS, NOT USABLE YET DOES NOT EXIST YET. Delivery fixes and app defects follow in their own sections.

New events, feeds and close data

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

The data pointThe 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.
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.PHASE 1
ships now
The engine's first governance build
The owning journeys' canvas builds.
▸ What exists today, and where it is used
What exists today
DOES NOT EXIST YET
Does not exist; each journey writes its own at build.
Used where
The wave freeze, every wave
D9The active-trip flag
active_trip, at the freeze
Plumb the trip state to wave segments.
Attribute plumbingNo wave lands on a travel day: service states own the slot.PHASE 1
ships now
Queued
Nothing.
▸ What exists today, and where it is used
What exists today
EXISTS, NO ROUTE TO BRAZE
The state exists; wave segments cannot read it.
Used where
The freeze suppression

The engineering work to move native sends into Braze

No new data in this band: logic, integration and release work.

The changeThe workPhase · status · depends on
▸ 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 traitThe workPhase · status · depends on
D1The lifecycle band
lifecycle_band, daily
The tier spine for both wave audiences, on the standing pattern.
Computed traitPHASE 1
ships now
With Analytics
The sync extension.
▸ The contract
What it must carry
Prospect against lapsed against churned: the register picker.
What exists today
BUILDABLE TODAY
Derivable; wave 1 ran on Braze-native recency as the interim.
Used where
Every wave's tiers
D6The zero-completed-bids flag
never_bid_completed, daily
The prospect fence: enforce the never-transacted boundary with the never-transacted journey.
Computed traitPHASE 1
ships now
With Analytics
The sync extension.
▸ The contract
What it must carry
Defines the prospect audience; the never-transacted journey's waves and this engine share one fence.
What exists today
DOES NOT EXIST YET
Not built.
Used where
The prospect tier
D8Per-route comparison figures
route_from_price · walkup, nightly computed
Compute nightly on the standing pattern so every claim names a real number.
Computed traitsPHASE 1
ships now
With Analytics
The sync extension.
▸ The contract
What it must carry
The real-number rule: a claim that cannot be substantiated does not render.
What exists today
DOES NOT EXIST YET
Not built for the wave routes.
Used where
Every wave send and the window card
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.
Sync payload extensionPHASE 1
ships now
With Analytics
The sync extension.
▸ The contract
What it must carry
Blanket contact of this group measured minus 11.8 percent on the estate's one historic holdout.
What exists today
EXISTS, NOT IN BRAZE
The model exists; the flags do not reach wave segments cleanly.
Used where
Every freeze
D11The transaction-frequency band
txn_frequency_band, daily
The strongest single discriminator of who reactivates: phase 2 tier refinement.
Computed traitPHASE 2
gated
Queued
The sync extension.
▸ The contract
What it must carry
Refines the tiers once the engine runs; never a wave 1 gate.
What exists today
DOES NOT EXIST YET
Not built.
Used where
Tier refinement, phase 2

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 shared episode flag, readable at the wave freezeOne shared journey_state convention: every owning journey's canvas writes it; wave segments read it at the freeze.BACKEND ENGPHASE 1
ships now
▸ The problem today, and why it sits here
The problem today
Waves must stand down for any live journey episode; the flag does not exist, and it is already a launch gate on the first-slip journey.
Why it sits in this journey
The engine's first governance build, and the headline change of the whole 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 detail
Leave feedbackThis pack is a proposal, and part of the journey is live. Wave 1 is in market with its holdout; the guardrail ruling and the York read gate the series. Say what is wrong with the engine, or what it is missing.
Pack version: 2 Sep 2026, 22:58 (London)