← StrategyJourney 5 campaign brief
Journey 5, Engineering briefPack version: 15 Oct 2026, 11:47 (London)
Leave feedback
The Engineering brief

What Journey 5 needs, and who owns it: a small event set, none of it gating phase 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: one interrupt per session; permission on one shared budget; one journey or wave owns a customer per window. One decline anywhere on the permission ladder quiets every ask for 30 days, never more than two asks in any 30 days; the practice tile disappears the moment any bid is placed; the outbound layer goes silent during any owned recovery episode; and the genuinely unengaged are never contacted.
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.

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.

Events, feeds and data points

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 pointWhat exists todayThe workWhat it must carryPhase · status · depends on
D4Practice-completion and real-bid-placed events
practice_completed · bid_placed, real time
Build 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 eventThe 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 decision
walk-up comparison, at render
Serve 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 renderNever 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 permission
marketing_layer · device_permission, queryable
Hold 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 plumbingThe 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 flag
journey_state, campaign-written
Nothing 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 configurationOne 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 counter
ladder_declines, journey-written
Nothing 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 buildOne 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 link
deep link → the practice auction, from email and push
A 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 AndroidThe 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).
▸ The 3 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
D1Bid state and transacted type at render
bid_behaviour · transacted_type, nightly
Compute nightly and add to the daily sync on the standing pattern.
DOES NOT EXIST YET
Not in the sync payload.
One computed trait setThe 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 win
never_won, nightly
Compute nightly so the win surfaces can branch on a first win.
BUILDABLE TODAY
Derivable from transaction history; not synced.
One computed traitSelects 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 pool
engagement_tier · contactable, per channel
Build 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-ownedThe 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.

2Four delivery fixes

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 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 it silences the outbound layer during a recovery episode and carries the permission ladder's shared budget.
The bid-state attribute at renderCompute 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 ENGPHASE 1
ships now
▸ The problem today, and why it sits here
The 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-backCarry first-loss, why-it-ended and the route in the hand-back payload, so the return surface can read them.BACKEND ENGPHASE 2
gated
▸ The problem today, and why it sits here
The 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 apartExpose the marketing subscription state beside the device permission, queryable at trigger time from the sender's own record.BACKEND ENGPHASE 1
ships now
▸ The problem today, and why it sits here
The 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.
3Two defects in the app itself

Two live gaps. Neither blocks phase 1; both block reads the journey needs.

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 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 stateFix the state read in the same change as the onramp copy.
▸ The problem today, and why it matters here
The 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.

Working detailPack version: 15 Oct 2026, 11:47 (London)