Who it's for: the six owner groups (Analytics/Ivi, Eng/Data, Lisa/Braze estate, Product, Compliance, CS), commissioned by Sheran. Read alongside PORTFOLIO-STRATEGIC-ASSESSMENT.md, whose sequencing section sets the dates used here.
The one takeaway: three validations unblock most of the portfolio (the dormant-pool and baseline table DL-009, the content-card instrumentation fix DL-013, and the Journey 8 numbers bundle DL-031); commission those first, then work each owner's list in priority order, because every journey's build date is downstream of at least one item on this plan.
How to read: section 1 names the three highest-leverage validations. Section 2 sets the date anchors every needed-by refers to. Sections 3 to 8 are the owner worklists (Analytics, Eng/Data, Lisa/Braze, Product, Compliance, CS), each entry stating: what to validate, why it matters (which journey or decision leans on it), method, priority, needed-by, and what it unblocks. Section 9 holds two items outside the six groups (Design, Research). Journey numbers are the canonical hub numbers; DL-nnn ids cite the consolidated Decisions and Approvals Log (v2, post-council, 20 Jul; items are cited by id, not restated).
Status: agent-drafted DRAFT, 20 Jul 2026. Compiled from the REQUIRES VALIDATION sections of the ten COUNCIL-ASSESSMENT.md files plus the known figure reconciliations from the portfolio assessment. Per the standing constraint, NO live Snowflake queries were run to build this plan; the Snowflake items are specified below for Analytics to run. Figures keep the labels their sources carry.
All needed-by dates below refer to these anchors (source: the packs and the portfolio assessment; labels as stated there).
This is one commission, not thirteen requests. Items AN-1 to AN-4 are the sprint core; the rest sequence behind them. Where a Snowflake query is the method, the specification states population, filter, grain and output; run against SEATFROG_ANALYTICS (the read-only warehouse), and publish each result into one canonical table that every pack cites (the one-home-per-figure rule).
AN-1. The dormant-audience and baseline table (DL-009). Top-3 item 1 above.
Why: J5's denominator and metric, J7's entire economics (including the capped-yield ~£0.7M line, assumed), J9's funding read and power calculation; DL-102's denominator restatement rides it.
Method, four specified queries: (a) never-transacted marketable pool: count of distinct contactable users (any consented channel) with zero lifetime transactions, split by consent channel and recency tier, reconciling 820k / ~850k / 857.8k to one labelled figure per cohort cut; (b) churned-transacted pool: distinct users with 1+ lifetime transaction and no app activity or transaction inside the lapse window, on BOTH circulating window definitions, reporting each so the ~600k / 597,561 / ~317k contactable / 1,592,082 Churned figures resolve to labelled cohort cuts rather than one blended number; (c) trailing-12m organic reactivation rate on each pool definition from (b), reconciling 0.84% vs 0.24% and restating the 1.5% objective as band-level lift (DL-102); (d) the 23% pair: the DN 30-day new-user purchase rate recomputed on the current period (16.8% confirmed as stated) published as interim baseline with 23% as target (DL-087, closed as working assumption pending this pair). Also: addressable opt-in split of the 296.3k churned pool, and the 29.8% computed vs 32% briefed check on the 7,979 lapsed-power cohort.
Priority P1. Needed by A4. Unblocks: J5, J7, J9, the wave-1 freeze, the Summer Campaign read.
AN-2. The DL-031 bundle. Top-3 item 3 above. Method: warehouse run against the production churn model (the model exists in the warehouse; journey_state does not, so do not condition on it). Priority P1. Needed by A1 (thresholds) with the benchmark-cohort and unscored-group items trailing as non-blocking per the ruled priority order. Unblocks: J8 lock and the 31 Jul ship; the unscored-group count also prices the D2 fairness blind spot for J7.
AN-3. The restated organic-return rate on the pinned event set (DL-069). Why: J4's D+7 send volume, holdout power and expected £ all move ~2.5x between the 74-79% RW definition and the 37.1/41.5/57.8% by-tier Analytics definition (both confirmed on their own definitions); ship-blocking for the D+7 send.
Method: after Eng/Data pin the event set (item ED-3), one query: of users whose auction closed lost in the trailing 12m, share with any pinned-set return event within 7 days, split by RFM tier AND by first-time vs repeat loser; the v1 tracker's first-time rate was flagged unreliable (n=4), so the first-timer variant needs its own adequately sized read.
Priority P1. Needed by A7 (J4 build; the definition ratification lands at A5). Unblocks: J4's headline test (DL-074) and the whole loss-recovery economics.
AN-4. The lapse-threshold family (DL-010). Why: the REC-03 master placeholders point the wrong way (business SLOWER than leisure, confirmed empirically at ~26wk point-of-lapse); J7, J8 and J9 (BRZ-84's leisure 181/365d overlay) all read thresholds from this one decision.
Method: empirical inter-transaction gap distribution per persona and frequency band (median, 1.5x median, point-of-lapse percentiles), delivered as ONE decision input, not five; reconcile BRZ-84's windows against it.
Priority P1. Needed by A4 (BRZ-84 reconciliation is inside the wave-1 gate). Unblocks: J7 entry, J8 threshold confirmation, J9 wave grid.
AN-5. Journey 1 figure set (DL-042). The canonical 2nd-transaction KPI (portfolio "5% to 7.5%" vs T&L "M1 repeat-bid 7.03% to 8.8%", different definitions), the 108,821 entry-mix standardisation (confirmed, sizing ⑩), and the 2-8d vs 6wk median inter-transaction reconciliation. Method: define the KPI (numerator event, denominator cohort, window), then one query sizing baseline and target on the defined cut. Priority P1. Needed by A5 (the headline test DL-041 cannot be sized without it). Unblocks: J1 sign-off to build.
AN-6. Journey 6 denominators. 2nd-transaction cohort volume, eligible positive-trip volume out of 710,616 departures/yr (confirmed), baseline next-transaction-within-60d rate. Method: warehouse pull against the positive_trip DRAFT definition (Ivi signs the definition itself under DL-091). Priority P2. Needed by A7 (J6 build; its Gate-1 agenda can run without it but the holdout cannot be sized). Unblocks: J6's headline test (DL-097).
AN-7. Journey 3 funnel set. (a) Verify the step-drop composition 27.5k / 34.1k / 10.3k behind the confirmed ~72k/mo in Snowflake (Tableau derivations, unverified): distinct users per funnel step per month with drop at search-results, bid-add and confirm, trailing 6m; (b) dwell thresholds per screen and segment (hesitation vs reading) before Eng builds the dwell events; (c) dead-end search volumes, confirm-abandon rate, M29 opt-in baseline and not-opted in-lead volume; (d) the ACT-05 price-hesitation vs payment-friction diagnostic and recoverable-slice size (DL-067, with Product). Priority P2. Needed by A7 (J3 phase-1 build; the phasing and headline-test power lean on (a)). Unblocks: J3 phase split (DL-061) and headline test (DL-062).
AN-8. Journey 7 band work. Band sizes and REC-T01 power per band (underpowered-band risk pre-flagged); the consent-age split of the backfill (how much of the deep tail the 24-month floor removes, with the Legal read CO-1). Priority P2. Needed by A7 (J7 is gated on D2 either way). Unblocks: DL-104 band cut-offs, DL-105 offer sizing.
AN-9. Journey 9 residuals. The wave power calculation at a ~1% response ceiling (may show wave 1 underpowered before it is designed); the unengaged-tail threshold definition behind the sunset send. Priority P1 (power calc) / P2 (threshold). Needed by A4. Unblocks: DL-125 readiness gate.
AN-10. Journey 5 residuals. The ~70% guarantee-fires rule and eligibility flags (gates the Beginner's-Luck branch build; with Ben); M63 winner declaration or control fold-in (gates the REPLACE staging, DL-084). Priority P2. Needed by A7 (J5 build). Unblocks: DL-084 staging, the Beginner's-Luck branch.
AN-11. Journey 10 sizing, definition first. Define the primary KPI precisely (which bid/booking window counts against a returning session) BEFORE sizing; then journey volume and returning-Home surface traffic (E3), baseline re-book rate and Home-card CTR (E13, post DL-013 fix); the BRZ-83 persona-confidence distribution and the 1.7% unclassified confirmation. Priority P2. Needed by A3 (definition + 1.7% confirm at the scoping session; sizing after the DL-013 fix). Unblocks: DL-117 measurement frame.
AN-12. Journey 2 sizing set. The GRW-18 T-7-or-earlier lead-time slice (DL-048 go/no-go; if underpowered, pre-agreed leading indicators or a wider window, never a quietly unreadable test); anxiety-ticket deflection baselines per moment (pre-travel 1,753 / on-train 4,776 ticket themes; with CS item CS-1); the GRW-TD saved-£ anchor (~£38 walk-up) substantiation; the M31 offset validation and rollback floor X inputs (DL-054, before the headline A/B wires); per-beat volume derivation on the standardised 710,616/yr (confirmed). Priority P1 (DL-048, DL-054) / P2 (rest). Needed by A5 (DL-048 feeds the conditional approval) and A7. Unblocks: J2's headline test (DL-046).
AN-13. The small canonical-figures set (one pass, publish once). M0-to-M1 (20.15/7.47 brain-canonical vs 20.22/7.43 Tableau export variance; DL-100); accidental-bid tickets 3,009 vs 1,349 and auction-confusion reviews 225 vs 127 (with CS/CX); cohort-labelled non-contactable shares (18.0% of J2's cohort, ~26% of Active users, and the "~26 to 40%" J3 range are different cohorts and need cohort-labelled canonical values); M21_E rework holdout power at ~45 sends/wk (or name the leading indicators that replace a causal read); outbid volume and re-bid headroom, knocked_out volume (the DL-072 threshold) and iOS share of active bidders; the early-winner first-timer split and M29 opt-in baseline volume (shared with J1/J3). Priority P2. Needed by A7 per consuming journey. Unblocks: figure consistency portfolio-wide (the two-versions ban).
ED-1. The close-event contract audit (DL-001). What: (a) does instant_win emit auction_won; (b) does every termination path (instant win, buy-out, pre-close resolution, all five close reasons) emit auction_closed with readable close-reason metadata. Why: hard gate under the win-moment partition (J1, J5) and J4's entire outcome fork; a mislabelled path double-fires the loss journey or sends "you lost" to a winner. Method: one Eng/PMM event-taxonomy audit against the auction engine's termination paths, chased to a written answer. Priority P1. Needed by A5 (the win-surface contracts ratify on it) and A7 (J1/J4/J5 builds). Unblocks: DL-079/DL-081 enforcement, J4's fork, three journeys' entry triggers.
ED-2. Content-card instrumentation fix (DL-013). Top-3 item 2. Method: fix the Braze card impression/click event pipeline end-to-end; Analytics verifies fixed events land in the warehouse BEFORE any holdout starts. Priority P1. Needed by A3 (ruled launch-blocking there) and before every card-surface test. Unblocks: J1, J3, J5, J7, J10 reads.
ED-3. Pin the returned_within_7d event set (DL-069, with AN-3). What: the definitive list of events that count as "returned" after a loss. Why: J4's ship-blocking definition clash; the eligible cohort moves ~2.5x. Method: Data/Eng publish the pinned event set; Analytics restates the rate on it (AN-3). Priority P1. Needed by A5 (ratification) / A7 (build). Unblocks: J4's D+7 send and headline test.
ED-4. journey_state trait and batch exclusion segments (DL-012). What: the journey-written ownership trait live in Braze, and every recurring batch audience excluding journey-owned customers; note journey_state does NOT exist in the warehouse today, so the trait is a canvas write, not a warehouse read. Why: the launch precondition for every triggered journey; until it lands, week one of any go-live stacks on the legacy batch layer. Method: eng board item (already NOW); verify with a test audience pull per batch canvas. Priority P1. Needed by A6 at the latest (J8 ships on it). Unblocks: every launch.
ED-5. The positive_trip and savings trait family (DL-091 rides it). What: the positive_trip fire-time gate (does not exist today) and the substantiated-savings traits (per-trip £X, cumulative, lifetime_saving floor, disruption/declassification/dispute flags at fire time; savings feed already NOW on the eng board). Why: launch-blocking for J6; J2's GRW-TD figure line and J8's D4 read the same family. Method: Ivi signs the definitions, Eng/Data build the feed, one shared brief. Priority P1. Needed by A7 (J6 build). Unblocks: J6 entirely, J2's modal figure line.
ED-6. Trip-completion timing feasibility (DL-121 + the DL-040 proxy). What: (a) reliability of the departure timestamp at canvas-evaluation time (underwrites J1's travel-completion + 1 day proxy); (b) whether a schedule-derived arrival timestamp can time J6's T+90min reflection push (the real trip_completed event is a known dbt gap). Why: J1's floor and J6's entry both stand on it; J6 launches without the T+90min push if infeasible. Method: Eng feasibility check on the scheduling data path. Priority P2. Needed by A7 (J1/J6 builds). Unblocks: J1 floor, J6 entry.
ED-7. Travel-day payload and platform data. What: the interim platform/coach payload source and its freshness pre-Darwin. Why: a wrong platform number is the exact failure GRW-17 exists to prevent; nothing may assume Darwin. Method: Eng confirms source, update cadence and staleness behaviour in writing. Priority P1. Needed by A7 (J2 build). Unblocks: GRW-17 launch scope.
ED-8. Loss-close event behaviour. What: whether T2_E and T30_E both fire on one close event (decides the one-comm-or-two collapse inside DL-075); the payment-hold lifecycle (gap ⑦, a copy gate not a launch gate: every payment-reassurance clause stays suppressed until it lands). Method: event trace on a sample of closes (with Lisa's Braze-side audit, LB-4); payment-hold lifecycle documented by Eng. Priority P2. Needed by A7 (J4 build) / copy gate ongoing. Unblocks: DL-075 ratification detail, J4 copy.
ED-9. Survey and referral infrastructure. What: the M40E/M42E universal-link P0 fix; survey-completes instrumentation (D8); referral attribution backend scoped. Why: portfolio gap 5; GRW-29 cannot ship and GRW-28's k-factor is unmeasurable without it; J6's advocacy leg rests on the P0 fix. Method: bug fix + instrumentation to warehouse; attribution backend as a scoped brief, not a build commitment. Priority P1 (P0 fix) / P2 (attribution scoping). Needed by A7 (J6 build). Unblocks: J6 advocacy and review legs.
ED-10. Render-time and session-state confirms. What: (a) Braze render-time targeting of bid-history + transacted-type (DL-083; J5's T2/T3 stay blocked-not-buildable until confirmed); (b) session-scoped state for J3's one-nudge-per-session rule (DL-066's dependency). Method: Braze capability check with a working prototype segment. Priority P2. Needed by A7 (J3/J5 builds). Unblocks: J5 treatments, J3 session rule.
ED-11. The two new auction feeds. What: auction_close_time and is_currently_winning (neither exists in the warehouse today) as ONE brief powering three moments (J4's ACT-33, the Live Activity state, GRW-17). Method: eng board brief, already identified; confirm scope covers all three consumers. Priority P2. Needed by A7 (J4 build). Unblocks: ACT-33, LA state, GRW-17 enrichment.
LB-1. M22_P/M24_P entry-criteria audit. What: who the two abandonment pushes actually chase (entry criteria, suppressions, actual audience overlap with J3/J4 cohorts). Why: Sheran's recovery one-pass ruling (DL-003 + DL-004 + DL-060) explicitly waits on it; the estate's highest-attributed canvas cannot be ruled blind. Method: Braze canvas audit, documented entry logic + a sample audience pull. Priority P1. Needed by A5. Unblocks: the recovery ruling, J3 and J4 boundaries.
LB-2. M39_E trigger coverage. What: does M39_E fire on auction wins or BUN only. Why: decides whether the D+1 beat even exists for close-window winners; shapes the DL-002 confirm and J6's same-day collision sizing. Method: trigger audit (with Analytics for volume split). Priority P1. Needed by A5 (DL-002 rules at the sitting). Unblocks: J1 and J6 post-trip slots.
LB-3. Win-window estate verification. What: T21_P/T14_P trigger exclusivity (one push per win, or two; DL-043 closed as an audit task, the design is safe either way); X67/X76/X77-class variants verified not firing. Why: the win-window stack ban is enforced by design only if the legacy layer is actually quiet. Method: Braze audit + send logs. Priority P2. Needed by A7 (J1 build). Unblocks: win-moment surface QA.
LB-4. Loss-close and legacy send audits. What: the T2_E/T30_E one-event double-fire (Braze side of ED-8); M29's numbering collision and dead variants; M21_E current state ahead of the DL-076 rework. Method: canvas-by-canvas audit of the loss-close estate. Priority P2. Needed by A7 (J4 build, and the DL-075/DL-076 ratifications). Unblocks: loss-close estate verdicts.
LB-5. Referral and win-back estate live state. What: which of M16E/M17E/M18P still fire (referral); the M40-M42 WIN-BACK FINAL sequence's true live state (its £5 incentive contradicts the proposed wave-1 no-incentive posture, DL-108). Method: Braze audit. Priority P1 (M40-M42, before wave 1) / P2 (referral). Needed by A4 (M40-M42) / A7 (referral, J6 build). Unblocks: DL-108 ruling integrity, J6 referral leg.
LB-6. Live Activity token holder (DL-033). What: the Braze account manager's answer on who holds the push-to-start token. Why: gates the LA test cell for J8 (lock proceeds without it, cell held) and the shared LA build for J2/J4. Method: chase the AM answer to writing. Priority P2. Needed by A6 (to un-hold the J8 LA cell) / A7. Unblocks: the LA cell and the settle-once LA architecture.
PR-1. Scoping-session inputs (at A3). What: confirm what the render pipeline does today for a returning user (J10's AS-IS in-app state is unverified); the persona-confidence threshold behaviour question; the home-station exposure question (DL-118, with Data). Why: the scoping session rules DL-114 to DL-117 on these facts. Method: Product walkthrough of the current home render path, answered in-session. Priority P1. Needed by A3. Unblocks: the J10 re-scope ruling set.
PR-2. The two J3 demand-prevention answers. What: (a) can coverage and window state surface before search results so the dead-end never renders; (b) the GRO-1612 Place-Bid flow timeline, so ACT-02's slide-up is built as an interim that sunsets into the native flow. Why: two of J3's biggest moments are symptoms of product-surface defects; the pack's success condition includes making its own moments unnecessary. Method: Product roadmap answers in writing. Priority P2. Needed by A7 (J3 build shape). Unblocks: J3's target-state architecture.
PR-3. Trip-state surface consultations (J2). What: the persistent trip-state component decision input (reskin Trips view vs net-new, DL-055) and the travel-day modal; the at-fire-time disrupted-trip flag definition (with Eng). Why: J2's floor for the 18.0% non-contactable (127,649/yr, confirmed) is this surface. Method: the consultation the pack states has not yet been held. Priority P1. Needed by A5 (DL-055 is in J2's gate list). Unblocks: J2 build scope.
PR-4. J1/J5 win-surface inputs. What: the interim savings-modal anchor for BUN celebration-lite (J1, surface_status LOW CONFIDENCE); live BUN box copy and real anchor values (J5, a Gate-2 blocker; with Pricing); the celebration-screen commit-or-defer input (DL-044). Method: Product consultation + Pricing values. Priority P2. Needed by A7 / Gate-2. Unblocks: J1 and J5 creative gates.
CO-1. The consent-age Legal read (DL-122). What: whether email to customers with no engagement and no consent refresh in 24 months is defensible (consent and the PECR soft opt-in both decay with dormancy; 296.3k churned >240d, confirmed, sit in the backfill's path). Why: the 24-month floor is adopted as a working assumption; the Legal read confirms or moves it, and prices the deep tail before it is emailed. Method: commissioned legal read (Sheran commissions); Analytics sizes the split it removes (AN-8). Priority P1. Needed by A7 (J7/J9 deep-tail sends; before any backfill). Unblocks: J7 backfill, J9 sunset-send posture.
CO-2. The PECR classification cluster, DL-034 first. What: rule the T31 consent-forked CTA class (DL-034, ship-blocking for J1's receipt rework), then apply the precedent to the GRW-16 email leg for unconsented users (DL-045), J4's stripped-neutral L0 outcome class, and J5's capture-copy class. Why: one precedent, four inheritors; ruled wrong it propagates four ways (portfolio risk 6). Method: one legal classification read covering the four send classes, with Lisa. Priority P1. Needed by A5 (DL-034 is in J1's gate list) / A7 (the inheritors). Unblocks: J1, J2, J4, J5 consent architecture.
CO-3. Claims substantiation ownership and reads (DL-082). What: name the compliance owner for win-rate, price-comparison and consent-incentive claims (none exists today; ASA/CAP exposure, that is Advertising Standards Authority / Committee of Advertising Practice); substantiate the "up to 60%" market-level claim against walk-up First fares BEFORE any CRM secondary use (open campaign action, gates wave-1 creative); confirm the Beginner's-Luck denominator language stays on the completed-first-auction cut (68.6%, confirmed). Method: appoint owner; substantiation memo per claim. Priority P1. Needed by A4 (wave-1 creative is claim-gated). Unblocks: J5 and J9 claims, campaign creative.
CS-1. Deflection baselines and ticket tagging. What: per-moment anxiety-ticket baselines (pre-travel 1,753 / on-train 4,776 themes) pulled with Analytics, and a tagging scheme so the baselines stay readable after launch. Why: J2's primary KPI is unreadable without them, and the open question whether the existing state surface alone deflects most contacts stays unanswerable. Method: Zendesk theme pull + tagging change (with AN-12). Priority P1. Needed by A7 (J2 launch; tagging change before launch, baselines can trail). Unblocks: J2 measurement.
CS-2. Operational-volume reconciliation. What: refund/disruption volumes (4,836/4mo vs 17,416/12mo vs ~12,359 do not reconcile; DL-025), and the canonical accidental-bid ticket count (3,009 vs 1,349) and auction-confusion review count (225 vs 127) with CX/Analytics (AN-13). Why: J2's rollback floor X and M31 offset (DL-054) and J3's evidence base cite them. Method: source-system pull with definitions stated per figure. Priority P2. Needed by A5 (DL-054 must land before J2's headline A/B wires) / A7. Unblocks: J2 A/B wiring, J3 canonical evidence.
CS-3. The refunded-win hand-off script. What: the CS consultation on J1's refunded-win hand-off (stated in the pack as not yet held). Method: consult and script sign-off. Priority P2. Needed by A7 (J1 build). Unblocks: J1's refund state.
Standing constraints: no live Snowflake/Cortex connections are fired by agents (MFA push); every query above is specified for Analytics to run. One home per figure: each validated number publishes once (the canonical table or the log item) and every pack cites the home, never a copy. Results that change a pack's figures re-enter through the changes round, with labels travelling per the coherence rules in PORTFOLIO-STRATEGIC-ASSESSMENT.md section 5.