Workshop output · Onboarding story map
Onboarding story map: honest cards, real chips, working Wave
A single-map workshop output that turns the onboarding optimization report into a slice plan. Nine backbone columns in Mia's voice, a falsifiable outcome, fourteen ranked assumptions, and a NOW / NEXT / LATER cut sequenced around Jordan's March 15 to May 15 code freeze. Jordan Reyes (admissions) and Maya Chen (product) participated as stakeholders. Mia Hernandez is the user of the map.
Dated: 2026-05-17 · Reader: PM · Eng · Design · Anchored to Onboarding optimization report
Outcome statement
By May 1, Mia has at least one sustained thread (three or more turns over forty-eight hours or more) with a peer or institution-vetted ambassador at each of her admit schools, so she's deciding with someone she can picture eating lunch with, not just a brochure.
The outcome is falsifiable on three axes. The threshold is sustained thread (not a sent Wave, not a read receipt, but turns + duration + both-parties-sent). Measured across all admits per user, not only the school she ultimately deposits at. And correlated to deposit rate against a geo-stratified holdout cohort matched on territory, admit-decision date, and admit-school selectivity tier. Maya owns the spec. Jordan owns the holdout design. If the slice ships and reply behavior doesn't move on a pre-registered floor (18% templated-Wave reply, 22% sustained-thread), the slice is wrong, not the metric.
Story map at a glance
Activities along the top backbone (the nine things Mia does, in her voice). The tasks she does today sit directly underneath, and the to-be stories are grouped into NOW-A / NOW-B / NEXT / LATER release slices. Scroll horizontally to traverse the backbone. Each card has a fuller version in the columns below.
Hear about it from someone I actually know.
Check if it's legit before I install.
Get in without handing over my phone number for nothing.
Tell it the stuff it needs to know so it'll shut up and show me people.
Pick my schools, the ones I'm actually sorting between.
Check if anyone from my high school is already on here.
See real people at my schools, most-active-this-week, not the prettiest five.
Lurk. Screenshot to the group chat. Decide if this place is alive.
Wave at one, and get a reply back.
Color legend · Today = current behavior / workaround · NOW-A = pre-freeze silent infra · NOW-B = post-May-15 user-visible · NEXT / LATER = future slices. Dashed cells = no story in that slice for this activity.
Persona snapshot: Mia Hernandez
18, first-gen senior at Walnut Hills High in Modesto, Central Valley California. March 2026, 47 days from the May 1 deposit deadline, three admits in hand (UC Davis, Sac State, Chapman). Parents are proud and slightly outside the process. The deciding happens in group chats.
A representative Tuesday in March 2026. Out of AP Bio at 2:55, phone opens in the parking lot, first stop is the Davis Class of 2030 Discord because that one's alive. She screenshots a housing-draw thread to the AP Bio group chat, and three friends weigh in within an hour. She tries to install ZeeMee because the Davis admit email mentioned it. The SMS code times out twice, she gives up, opens the App Store reviews, scrolls to the most recent one-star, and decides the app is probably fine but she'll do it later. Later doesn't happen that night.
“I'm not even worried about classes. I'm worried about who am I eating lunch with on the first day.”
“I joined the Class of 2030 server for, like, five schools. Most of them are dead. The Davis one is kind of popping off though.”
“If their last post is from last semester they don't live there anymore. I want someone whose Tuesday looks like my Tuesday.”
“If I commit and then I don't have a roommate by July I'm literally going to lose it.”
Current workarounds: what she does instead of using ZeeMee
- Reddit. legit-check any school-branded app before installing
- App Store. scroll the most-recent reviews, not the marketing copy
- AP Bio group chat. exchange Instagram and Discord handles, the "notarized affidavit" channel
- Instagram geotag stalking. see who's actually posting from the campus this month
- Class of 2030 Discords. five servers, only the alive ones get repeat visits
- Screenshots-to-group-chat-for-collective-decide. the load-bearing workflow her phone is built around
The map: 9 backbone columns
In Mia's voice. In-slice (4–7) = redesigned in NOW-B. Measured (9)= signal we track but don't redesign in NOW. Context-only (1, 2, 3, 8)= mapped so we don't break it, not touched in this slice.
Hear about it from someone I actually know.
CONTEXT-ONLYTasks today
- [Outside] sees ZeeMee mentioned in Davis admit email
- [Outside] asks AP Bio chat "is this app real?"
To-be tasks
- LATERReferral-from-counselor flow surface (no change in NOW)
Source · FINDINGS F02 (trust priors set before install). Not in NEW_FLOW
Check if it's legit before I install.
CONTEXT-ONLYTasks today
- [Outside] scrolls recent App Store reviews
- [Outside] Reddit search "zeemee legit"
To-be tasks
- No change in NOW
- Cross-cutting: 4.7★ App Store rating guard is a NOW-ship-gate (NET-NEW)
Source · Cross-cutting constraint. Not addressed by report
Get in without handing over my phone number for nothing.
CONTEXT-ONLYTasks today
- [ZeeMee] phone-number auth → SMS code (two-attempt timeout in Mia's walk)
To-be tasks
- LATERApple/Google auth (Mia's "single biggest fix-in-Next, please". Deferred behind measurement work, see Conversation Notes)
Source · NEW_FLOW #5 in report (proposed for early sprint). Demoted to LATER here
Tell it the stuff it needs to know so it'll shut up and show me people.
IN-SLICETasks today
- [ZeeMee] long Welcome screen
- 7-screen Vibe-card sequence
- Generic Topics picker
To-be tasks
- NOW-B"You" card (single condensed welcome)
- NOW-BTile-staged disclosure
- NOW-Bdeciding_schools[] micro-prompt (Admitted/Committed only, derived filter on schools_of_interest)
- NEXTTopics picker rebuild (categories, 2-up tiles, "Popular at your schools," gradient chips)
- NEXTVibe-card 7→1 collapse
Source · NEW_FLOW #1 + #3 (expanded). deciding_schools[] is NET-NEW (Maya's correction: derived, not parallel field)
Pick my schools, the ones I'm actually sorting between.
IN-SLICETasks today
- [ZeeMee] schools_of_interest multi-select with no decision-stage signal
To-be tasks
- NOW-BChip schools (admit-decision stage visible)
- NOW-BNear-you pre-fill seeded from device geo (geo-correct, Modesto, not Cincinnati)
Source · NEW_FLOW #3 (chips). Geo-pre-fill is NET-NEW
Check if anyone from my high school is already on here.
IN-SLICEpartialTasks today
- Not surfaced anywhere in current product
To-be tasks
- NEXTSame-admit-school cohort row, "also going to [School]" (no HS data, no minor-to-minor cross-school). NET-NEW from Phase 4b
- LATERFull HS cohort row with consent flow, reciprocal visibility, age-gate, name-display policy, block/report, audit log, undecided-peers-preferred ranking, no-competitor-commits-to-my-admits rule, partner-side row-composition view
Source · NET-NEW from Phase 3 (Jordan's biggest yield lever). Split across Next/Later per T&S sequencing
See real people at my schools, most-active-this-week, not the prettiest five.
IN-SLICETasks today
- [ZeeMee] "Meet your people" surfaces a static curated set with no recency signal
To-be tasks
- NOW-BMeet-your-people composition: 2 recency-ranked peers + 1 honest-labeled ambassador
- NOW-BSmell-test acceptance gates enforced
- NOW-BLast-actual-post preview (the load-bearing gate per Mia)
- NOW-BHonest-degrade ladder (week → month → quarter → relax-topic → hometown-fallback → suppress, client-side in NOW-B)
- NEXTCandidate-pool service goes live. Degrade ladder enforced server-side
- NEXTRecency rank live
- NEXTTrending carousel IFF promoted-content policy lands
Source · NEW_FLOW #3 (expanded + recomposed). Smell-test gates + honest-degrade ladder are NET-NEW
Lurk. Screenshot to the group chat. Decide if this place is alive.
CONTEXT-ONLYTasks today
- [Outside] screenshots-to-AP-Bio-chat
- [Outside] cross-checks Davis Discord
To-be tasks
- No change. This is the workaround we're competing with, not replacing
- LATERShareable polaroid / photo filters that respect the screenshot habit
Source · FINDINGS F07. Not in NEW_FLOW
Wave at one, and get a reply back.
MEASUREDTasks today
- [ZeeMee] Wave button exists, no recipient-side wiring, no reply nudge
To-be tasks
- NOW-BTemplated Wave (allowlisted body for v1)
- NOW-BRecipient-side push (silent infra in NOW-A → user-visible in NOW-B)
- NOW-BDeep-link to thread
- NOW-BOne-tap reply
- NOW-BPrivacy guardrails (shared-school-context-only, mute control on push, 5/day-1/recipient-ever rate limit, under-18 fallback to in-app badge if legal can't sign off)
- NEXT"Went dark" trigger list (admits who completed C4–C5 but never Waved by day 7, Jordan's DM trigger)
Source · NEW_FLOW #4 (expanded). Recipient-side wiring + message_type dimension + rate-limits + mute + under-18 fallback are NET-NEW
Assumption log: ranked by impact × uncertainty
Fourteen assumptions. The top eight are marked , highest impact × uncertainty. Each row is paired with the condition that would falsify it.
- A01
Last-actual-post preview is the load-bearing gate that converts a curated card from "marketing radar trip" into "real human."
Mia, Phase 3.
Falsified by: C7 cards rendered without it perform within ±2pp of cards with it on Wave-sent rate.
Status: NOW-B.
- A02
Templated Wave will clear the 18% reply floor.
Maya pre-registered.
Falsified by: Templated-Wave reply rate <18% at 14d post-onboarding.
Status: NOW measurement, pre-registered.
- A03
Recipient-side push wiring lands before the May 15 freeze.
Jordan + Maya, sequencing.
Falsified by: Push UX not signed off by May 12.
Status: NOW-A plumbing → NOW-B UI. Freeze-violation risk if NOW-A slips.
- A04
Mia tolerates one honest-labeled ambassador in a 2+1 composition without flagging the surface as fake.
Jordan vs. Mia, unresolved.
Falsified by: Ambassador presence reduces Wave-sent rate by >10% vs. peer-only control.
Status: NOW-B, A/B in the slice.
- A05
Same-admit-school row delivers buddy-system yield without HS data.
Jordan + Maya compromise.
Falsified by: Row clicks <peer-card click-rate or row drives no measurable lift in sustained-thread rate.
Status: NEXT.
- A06
HS cohort row T&S deferral is right, not just cautious.
Maya.
Falsified by: Next ships and Jordan's territory data shows admits explicitly asking for HS-mate surfacing in churn interviews.
Status: LATER (revisit if signal appears).
- A07
Kill-switch + 4.7★ guard catch the failure modes we can't predict.
Falsified by: A mute-rate spike happens, kill-switch fires too slow, rating drops below 4.7.
Status: Cross-cutting, NOW.
- A08
Dual-threshold (floor + target) survives the room when results land between them.
Maya vs. Jordan, productive disagreement preserved.
Falsified by: Result lands at 19% / 23% (between floor and target) and the team can't agree what to do.
Status: NOW, pre-registered before launch.
- A09
deciding_schools[] as a derived filter on schools_of_interest is the right schema choice (not a parallel field).
Maya correction.
Falsified by: The derivation produces empty sets for >5% of Admitted/Committed users.
Status: NOW-A.
- A10
Apple/Google auth deferral doesn't cost us a top-3 friction in C3.
Mia vs. Maya, deferred disagreement.
Falsified by: NOW measurement shows C3 abandonment is a top-3 drop-off.
Status: LATER, revisit after NOW.
- A11
Ambassador supply (roster + training + 24h-removal back-channel + student opt-in) is ready by NOW-B ship date.
Jordan owns.
Falsified by: Fewer than 3 trained ambassadors per top-50 admit school by ship.
Status: NOW-A.
- A12
Geo-stratified holdout matched on territory + admit-decision date + admit-school selectivity tier is sufficient for attribution.
Jordan spec.
Falsified by: RISE dashboard reviewers reject the attribution as confounded.
Status: NOW measurement design.
- A13
Under-18 in-app-badge fallback is acceptable to legal if push-to-minors gets blocked.
Falsified by: Legal blocks both.
Status: NOW-A, legal sign-off gate.
- A14
Promoted-content policy will land in time for Next.
Maya, optimistic.
Falsified by: Policy slips, trending carousel moves to LATER indefinite.
Status: NEXT (conditional).
Slice summary: NOW / NEXT / LATER
Splittable across Jordan's March 15 to May 15 code freeze. NOW-A is silent infra that ships pre-freeze. NOW-B is the user-visible cut that ships after May 15.
Honest cards, real chips, working Wave
- Schema: deciding_schools[] as DERIVED filter on schools_of_interest
- Event: Wave message_type dimension (templated / typed) on wave_sent
- Candidate-pool service prep (server scaffolding for C7)
- Push plumbing only (silent infra, no user-visible push)
- Ambassador supply: roster tool, training, 24h-removal back-channel, student opt-in
- Derived metric: sustained_thread (2–3 days data eng)
- Under-18 legal sign-off on push (or in-app-badge fallback approval)
- "You" card + tile-staged disclosure + chip schools + Near-you geo-pre-fill
- deciding_schools[] micro-prompt (Admitted/Committed only)
- Meet-your-people: 2 recency-ranked peers + 1 honest-labeled ambassador, smell-test gates enforced, honest-degrade ladder, last-actual-post preview
- Templated Wave (allowlisted body) + recipient-side wiring (push, deep-link, one-tap reply, decomposable per Maya's degrade ladder)
- Privacy guardrails: shared-school-context-only, mute control on push, 5/day-1/recipient-ever rate-limit, under-18 fallback
User-behavior metric (Maya's RISE format)
- Event
wave_sentwhererecipient.school_id ∈ user.deciding_schools[]ANDrecipient.role ∈ {student, ambassador}, dimensioned bymessage_type ∈ {templated, typed}- Cohort
- Users completing C4–C5 between ship date and freeze start; segmented Exploring vs Admitted/Committed
- Window
- 14 days post-onboarding
- Counter-metric
reply_sentfrom recipient within 48h- Pre-registered thresholds
- Floor 18% templated-Wave reply / 22% sustained-thread. Target 25% / 35%. Hold both before declaring win.
Why this slice first · Jordan
“This is the smallest cut that produces a per-school deposit-attribution number I can show at renewal.”
Why this slice first · Maya
“Topics is the sprint, not a sprint. Pushing it to Next lets us prove the reply mechanism works before we rebuild the picker on top of it.”
Walking-skeleton check
Mia opens the app → SMS auth (unchanged) → “You” card → chips her three admits (Davis/Sac State/Chapman) → Admitted/Committed micro-prompt fires for Davis → Meet-your-people surfaces 2 recency-ranked Davis peers + 1 honest-labeled Davis ambassador, each with last-actual-post preview → she taps Wave on the peer whose Tuesday looks like her Tuesday → templated body sends → recipient gets push → one-tap reply lands in Mia's thread within the same study session. Skeleton holds.
Open questions
- Does the honest-labeled ambassador slot survive Mia's marketing radar at 2+1, or does she clock it as fake regardless?
- Does push-to-minors get legal sign-off, or does NOW-B ship with in-app-badge fallback only?
- Is the 5/day-1/recipient-ever rate-limit right, or does it suppress legitimate same-school cohort behavior?
Divergence from report's “What to build first”
- Report step 1 (visual-only pass) → DEMOTED to byproduct of chip work
- Report step 2 (topics picker) → DEFERRED to Next ("it's the sprint, not a sprint")
- Report step 3 (Welcome → Meet your people) → EXPANDED + RECOMPOSED into NOW-B with 2+1 composition, smell-test gates, honest-degrade, recipient-side wiring (which the report doesn't mention)
- Report step 4 (flow compression to 11 screens) → NOT in NOW. Vibe-card 7→1 collapse moves to Next
- Report step 5 (Apple/Google) → DEFERRED to Later behind measurement work
- NET-NEW (not in report): deciding_schools[] schema, Wave message_type dimension, recipient-side push + reply nudge, smell-test acceptance gates, honest-degrade ladder, per-surface kill-switch, 4.7★ rating guard, same-admit-school cohort row (Next), per-school deposit-attribution view in RISE
Real topics, real recency, narrower targeting
What ships
- Topics picker rebuild (categories, 2-up tiles, "Popular at your schools," gradient chips)
- C7 recency rank live with candidate-pool service (honest-degrade enforced server-side)
- "Went dark" trigger list (admits who completed C4–C5 but never Waved by day 7, Jordan's DM trigger)
- Partner-side view of which ambassadors surfaced to which admits (Jordan's #1 missing item)
- Trending carousel, PROMOTED IFF policy lands (no paid placement, real volume strings, partner-conflict rule)
- Same-admit-school cohort row, "also going to [School]" (no HS data, minor-to-minor cross-school suppressed)
User-behavior metric
- Event
wave_sentfrom same-admit-school row, dimensioned by row source- Cohort
- Admitted/Committed users in same school with both onboarded post-NEXT ship
- Window
- 14 days post-row-impression
- Counter-metric
reply_sentwithin 48h- Pre-registered thresholds
- Row-sourced Wave reply rate ≥ NOW-B baseline + 5pp
Why this slice next · Jordan
“Same-admit-school row is the lever I've been asking for, scoped down to what T&S can clear in one quarter.”
Why this slice next · Maya
“Topics rebuild rides the chip work and lifts everything downstream. We don't ship it until the reply mechanism has earned its keep.”
Walking-skeleton check
Holds on top of NOW-B. The same-admit-school row is an additional card in C7's stack, not a replacement.
Open questions
- Does promoted-content policy actually land? If not, trending carousel slips indefinite.
Divergence:Report's “what next” was vague. This slice picks the same-admit-school row over the full HS row deliberately.
Full HS cohort, properly scoped
What ships
- Full C6 build with consent flow (opt-in defaulted off, plain English), reciprocal visibility, age-gate, name-display policy, block/report, audit log, undecided-peers-preferred ranking, no-competitor-commits-to-my-admits rule, partner-side row-composition view
- Trending carousel (if policy never lands, indefinite)
- Shareable polaroid / photo filters
- Apple/Google auth
User-behavior metric
Per-cohort-row Wave reply lift vs. NEXT baseline. HS-cohort opt-in rate. HS-cohort-sourced sustained-thread rate.
Why this slice later · Maya
“HS cohort row is the biggest yield lever Jordan named but it carries the most T&S overhead. We want NOW + NEXT signal before we spend that quarter. Apple/Google sits behind measurement so we can size the C3 friction with data, not vibes.”
Divergence:Report had Apple/Google in early steps. Mia wants it sooner (“single biggest fix-in-Next, please”). Preserved as productive disagreement.
Cross-slice constraints
- Code freeze March 15 – May 15. Forces the NOW-A / NOW-B split. Anything user-visible ships after May 15.
- Per-surface kill-switch. Auto-degrade on mute-rate threshold (Maya's #E) on every NOW-B surface.
- 4.7★ App Store rating guard. Monday review monitoring. Surface gets dark-rolled if rating drops below 4.7.
- Dual-threshold pre-registration. Floor + target signed off before NOW-B ships.
- Geo-stratified 10% holdout. Matched on territory + admit-decision date + admit-school selectivity tier (Jordan's spec).
- Per-school deposit-attribution view in RISE. "X% of this year's deposits had a sustained thread on ZeeMee within 14 days of admit." This is the renewal sentence.
Conversation notes, by column
What each stakeholder said about each column, and what got left unresolved.
Hear about it from someone I actually know.
- Mia said
- Davis admit email mentioned ZeeMee. AP Bio chat decided whether to install before she did. "I joined the Class of 2030 server for, like, five schools. Most of them are dead. The Davis one is kind of popping off though."
- Jordan said
- Referral-from-counselor is real and underused, but counselor capacity is the constraint, not the surface.
- Maya said
- Out of scope for this slice. LATER candidate, not NOW.
- Unresolved / deferred
- Whether counselor-side seeding belongs to a separate map.
Check if it's legit before I install.
- Mia said
- Reddit and App Store reviews are her trust filter. The marketing copy isn't.
- Jordan said
- Partners send admits to the app directly. Review-score regression hurts every territory at once.
- Maya said
- 4.7★ guard is the cross-cutting gate. This column isn't redesigned but it constrains every NOW-B surface.
- Unresolved / deferred
- Whether to invest in seeded recent-review nudges (LATER).
Get in without handing over my phone number for nothing.
- Mia said
- SMS code timed out twice in the walk. This is the biggest fix-in-Next she'd ask for. "If I don't get the code on the first try I just close the app."
- Jordan said
- SMS is also her re-engagement channel. Can't lose it.
- Maya said
- Apple/Google sits behind NOW measurement. If C3 abandonment is top-3, it moves up.
- Unresolved / deferred
- Apple/Google placement, preserved as productive disagreement.
Tell it the stuff it needs to know so it'll shut up and show me people.
- Mia said
- 7 Vibe cards is too many. She'd rather pick from tiles. The "tell us about you" framing is condescending.
- Jordan said
- Decision-stage signal (deciding_schools[]) is what makes ambassador targeting work.
- Maya said
- deciding_schools[] is a derived filter on schools_of_interest, not a parallel field. Schema correction.
- Unresolved / deferred
- Whether the Topics rebuild belongs in NOW or NEXT. Settled NEXT, but Jordan wanted it sooner.
Pick my schools, the ones I'm actually sorting between.
- Mia said
- Chips with admit-stage visible match how she actually thinks about it. Geo pre-fill should be Modesto, not the placeholder.
- Jordan said
- Chip data is what powers per-school attribution downstream.
- Maya said
- Geo pre-fill is one-line work but a credibility multiplier on Near-you.
- Unresolved / deferred
- None.
Check if anyone from my high school is already on here.
- Mia said
- This is the question she's actually asking the AP Bio chat anyway.
- Jordan said
- HS cohort row is the single biggest yield lever. She fought for it in NEXT.
- Maya said
- Full HS row needs T&S work that doesn't fit one quarter. Same-admit-school row is the scoped compromise that ships in NEXT.
- Unresolved / deferred
- Same-admit-school vs full HS, preserved as deferred disagreement. Jordan still wants the full row. Maya still wants the T&S work first.
See real people at my schools, most-active-this-week, not the prettiest five.
- Mia said
- "If their last post is from last semester they don't live there anymore. I want someone whose Tuesday looks like my Tuesday." Last-actual-post preview is the gate.
- Jordan said
- Without an ambassador slot, partners don't get measurable surface. With too much ambassador, Mia clocks it as fake.
- Maya said
- 2 + 1 with honest labeling is the compromise. Smell-test gates enforce the rest.
- Unresolved / deferred
- Curation vs. marketing-radar, preserved as productive disagreement. The 2+1 is a resolution attempt, not a clean win.
Lurk. Screenshot to the group chat. Decide if this place is alive.
- Mia said
- This is the workflow her phone is built around. She's not giving it up.
- Jordan said
- Shareable polaroid in LATER respects the habit.
- Maya said
- We compete with the screenshot, not replace it.
- Unresolved / deferred
- Whether to instrument screenshot events as a positive signal.
Wave at one, and get a reply back.
- Mia said
- A Wave with no reply is worse than no Wave. The reply is the whole point.
- Jordan said
- "Went dark" trigger list (NEXT) is how Admissions follows up when Wave doesn't fire.
- Maya said
- Templated Wave with message_type dimension is how we attribute reply lift. Sustained-thread is the real metric.
- Unresolved / deferred
- Dual-threshold vs single-bar, preserved as productive disagreement. Both shipped. What to do if result lands between floor and target is the next conversation.
Workshop-level disagreements preserved (not resolved)
These are productive disagreements, not bugs. Preserving them is the forcing function for the next review.
- D1
Curation vs. marketing-radar
Jordan ↔ Mia, Phase 1 + 3
Jordan wants ambassadors surfaced because that's where Admissions yield comes from. Mia clocks any curated card as fake. Resolution attempt: 2 recency-ranked peers + 1 honestly-labeled ambassador with smell-test gates. Not a clean win for either side. The NOW-B A/B is what settles it.
- D2
Apple/Google placement
Mia ↔ Jordan ↔ Maya
Mia wants it in NOW (phone auth still nearly kills her). Jordan needs SMS as a re-engagement channel. Maya sequences it LATER behind measurement work. The right answer depends on whether NOW's metrics show C3 abandonment to be a top-3 friction.
- D3
Same-admit-school row in NEXT vs. HS cohort in LATER
Jordan ↔ Maya
Jordan fought for any HS-adjacent shipping in NEXT. Maya held the full HS row at LATER for T&S sequencing. Compromise = same-admit-school row (no HS data) ships in NEXT. Recorded here as deferred, not resolved. The full HS cohort row is still Jordan's biggest yield lever.
- D4
Single 35% bar vs. dual floor/target threshold
Jordan ↔ Maya
Jordan wants vibes-killed by baseline. Maya wants both floor and target pre-registered. Both shipped together. The disagreement is preserved as a forcing function for the next review.
Workshop facilitated by the Story Mapping Strategist persona. All persona reactions were simulated by agents operating from their persona files. The map is the conversation, not the spec.