Pay Phone · Logic Report · pre-build audit · 07/17/2026 · PM agent walk of every flow
119 findings. 10 decisions gate the build.
A PM agent walked every flow in the ledger, journey (S1–S31), policies, emails, admin, and prototypes, adversarially. The skeleton is sound — the cancel-policy matrix is airtight across seven artifacts, the money split math is right everywhere it's real, and the dispute machinery (join logs + recordings) is fully specified. The holes cluster in four places: the scheduling model (slot math contradicts itself across screens), undefined windows (join window is cited everywhere, defined nowhere), money edges (partial calls, chargebacks, the extension formula), and sample-data drift that managers would catch in one read. Section I is the queue: answer those ten and the product is build-ready.
A. Booking lifecycle state machine
1HANDLEDcreated→paid: capture at booking — ToS §3 "collected at booking and held until the call completes"; correct choice vs Stripe's 7-day auth limit for bookings weeks out.
2GAPpaid→confirmed for OFF-HOURS requests: is money captured at request or at celeb acceptance? Celeb-first C4 shows Accept/Decline with declines auto-refunding, implying capture-before-accept — charging a card for an unconfirmed booking is never stated as policy anywhere.
3GAPrequest-expiry state doesn't exist: no artifact says how long a celeb can sit on an off-hours request while the fan's money is held (24h? until slot start?). Fan money could be held indefinitely then refunded at T-0.
4HANDLEDconfirmed→reminded: T-15 SMS primary + E4 backstop (S16, E4); confirmation E3 with SMS twin.
5HANDLEDreminded→lobby: lobby opens 5 min early (S17 caption, E3).
6HANDLEDlobby→in-call→completed: fair timer both-in (S17/18, CP, HIW); completion triggers split (ledger, ADM "SPLIT PAID").
7HANDLEDextended: S19 + ToS §3 (separate purchase, saved card, tap to confirm) + ADM extension row "CAPTURED / on completion."
8GAPextension payment FAILURE state: saved card declines mid-call at 0:30 left — no defined behavior (call just ends? retry? celeb told?).
9HANDLEDno-show-fan: CP "booking is complete and not refunded"; celeb paid in full (ToS §6, ledger locked).
10HANDLEDno-show-celeb: auto-refund within minutes of window close (CP, E6, ADM event "Talent no-show window closed → AUTO-REFUND").
11GAPBOTH no-show: undefined. Fan forfeits per no-show rule AND celeb gets show-rate hit? Is celeb paid? No source covers it.
12HANDLEDcancelled-fan-early (≥24h): 100% auto refund (CP, E3, CO fine print).
13HANDLEDcancelled-fan-late (<24h): one reschedule within 30 days (CP, E3, HIW).
14GAPreschedule dead-end: "reschedule once to any open slot on that payphone within 30 days" — no open slots in 30 days, or payphone paused/suspended/celeb quits: does the credit convert to a refund? Undefined.
15GAPrescheduled-booking lifecycle: can the fan cancel the rescheduled booking ≥24h out for a refund (re-arming the full-refund rule and defeating the <24h penalty)? Can they reschedule again if the CELEB cancels the rescheduled slot? Undefined loop.
16HANDLEDcancelled-celeb (single booking): E2 "fan is refunded instantly and it counts against your pickup rate" + CP "100% refund the moment they cancel."
17HANDLEDconduct-killed: forfeit + ban, celeb paid in full (CP, ToS §6, ADM T&S policy buttons).
18GAPchargeback/dispute state: a fan disputing the card charge post-call appears nowhere — no state, no admin queue, no policy on whether celeb's already-instant-paid 80% is clawed back (which would break the "no clawbacks" promise, S6 caption).
19GAPpayment-failed at booking (3DS decline mid-Apple-Pay) and abandoned-checkout slot state: undefined whether a slot is held during checkout at all (see D4).
B. Timing edges
20GAPMulti-duration menu vs 10-minute slot grid: S12 grid is :00/:10/:20 spacing, but the menu sells 5/10/20-min calls. ADM shows Casey R. booking a "Tue 7:20p slot" for $180 (the 20-min service) — that call runs to 7:40 through the 7:30 grid slot. No artifact defines how a 20-min booking consumes/blocks grid slots, or whether each service gets its own grid.
21CONTRADICTIONExtension source-of-time vs back-to-back grid: "+5 min if the next slot is free" (S19) — but slots are contiguous 10-min blocks, so a 5-min extension orphans half the next slot and no artifact says whether the whole slot is consumed, split, or resellable.
22GAPSold-out session = zero extensions, by definition (next slot never free). The upsell (S19, HIW FAQ) silently disappears on the best nights; "sold out" session Jul 21 shows extensions impossible yet APV2 Jul 25 session shows "2 extensions" with 21 calls in a 2-hour block — capacity math doesn't close either way.
23GAP"Join window" is referenced everywhere (CP twice, E4, E6 "the moment his join window closed") and DEFINED NOWHERE — no number of minutes for fan or celeb anywhere in ledger, journey, policy, or admin.
24GAPLate-fan cap: fan joins 4 min late to a 5-min call — fair timer says they still get 5:00 (S23/APV2 "fan joined 22 sec late, timer held"), which pushes into the next paid slot. No rule caps a late joiner's entitlement at slot end.
25GAPCascade/queue mechanics: celeb joins 3 min late to a sold-out night → every subsequent fixed-time booking collides (fans were told "7:20 PM ET" in E3/SMS). No drift-queue, delay-notification, or "your call is running late" surface exists anywhere; S20's "Next caller starts in 0:12" after a 15-min extended call in a 10-min slot shows the collision drawn but unexplained.
26GAPCeleb wait obligation: how long must the celeb sit in the room for a no-show fan before "complete and paid" fires? Undefined (mirrors #23).
27HANDLEDLate-join logging exists: join log per call, second-by-second, dispute-settler (S23, ADM T&S case, ledger refocus #4).
28HANDLED24h rule anchor: "uses the slot's start time" (CP) and the exact deadline is rendered as a date+time (S30, E3) per Design Guide rule 7.1.
29GAPDST: a booking made before a DST shift for a slot after it — "Mon 7:20 PM ET" deadline and slot time can drift an hour against UTC; no artifact mentions DST handling.
30GAPTimezone display: fan sees own timezone at booking (S12, CP) — but nothing says what the CELEB's schedule anchors to when they travel across timezones (their standing "Tue 7–9 PM" is in whose zone?).
31GAPLobby/extension timing edge: extension sheet appears at 0:30 (S19); a tap at 0:02 with payment processing past 0:00 — call ends or bridges? Undefined.
32CONTRADICTIONS8 "Next call · in 4 minutes" = 7:45 PM, but the entire slot system is :00/:10/:20 aligned; 7:45 doesn't exist on the grid drawn in S12.
C. Money edges
33HANDLEDCore split 80/5/15 on completion only: ledger PM decisions, ADM event feed "80 / 5 / 15 SPLIT PAID," S6 caption.
34CONTRADICTIONExtension price formula: ledger says extensions are "at the celeb's rate"; S19 charges $50 for +5 min when Dre's 5-min menu price is $60 ($50 = prorated 10-min rate). ADM shows a $125 extension for @solrivera that maps to no stated formula. Two different implicit rules, neither written down.
35GAPExtension split: ToS §3 "same terms" implies 80/5/15, but never explicit; ADM extension row says "on completion" — completion of the extension or of the whole call?
36GAPConduct-kill mid-extension: fan buys +5, celeb kills the call for conduct at minute 12 — is the extension ALSO forfeited-and-paid-to-celeb? CP says extensions "follow this same policy," which is ambiguous for a purchase made mid-call that never fully ran.
37GAPStripe fee on refunds: ledger PM decision says "platform eats Stripe fee on refunds" but it appears in NO customer-facing or ops artifact (not CP, ToS, ADM, or E6) — an ops rule that exists only in a memo.
38GAPManager rev-share on drops vs hours: 5 pts stated once (ledger); no artifact distinguishes drops, hours, extensions, or (future) memberships — presumably identical, never stated. Manager cut on conduct-forfeit payouts also undefined.
39CONTRADICTION"Paid on completion" vs "on the way" phrasing: S9/APV2 show $1,340 "On the way to Chase" during an IN PROGRESS session — with instant payout ON, completed calls should read "landed"; the screen never distinguishes per-call payout from per-session payout. Needs one sentence of definition (per-call, at completion).
40CONTRADICTIONS20 payday screen: "15 min with Jordan M. · $250 · your 80%" → $200. Jordan's call everywhere else is $100 + $50 extension = $150 gross → $120 net (S21 receipt "$150 total"; S23 archive "+$120"). S20 is leftover $250/5-min sample pricing; its "$200" and "today so far: $1,540" (vs $1,340 in S9) both contradict the same night's data.
41CONTRADICTIONE1 "Fully booked week — $2,400 to you" and APV2 "Fully booked week: $2,400 to you": $2,400 is GROSS (24 calls × $100); "to you" at 80% is $1,920. The earnings-estimator hook — the single most important celeb-side number — overstates by 25%. S5 hedges ("Up to $2,400/week") but sits directly under "you keep 80%."
42CONTRADICTIONADM Today "Net revenue $3,090 after splits + fees" on GMV $18,400: platform's 15% = $2,760 max; $3,090 is impossible without unexplained revenue.
43CONTRADICTIONADM @dre drill-in "net to us $2,260" on GMV $18,700: 15% = $2,805; if the $545 delta is Stripe fees, that's never stated, and it doesn't match 2.9%+$0.30 on 187 calls (~$598) either.
44GAPPartial call / tech failure: the room dies at minute 6 of 10, or recording infra kills the call — no pro-rate, refund, make-good, or fault-attribution policy in ANY artifact. This is the most common real-world dispute and it's a total blank.
45GAPReschedule pricing: fan reschedules (<24h credit) into a slot after the celeb raised the 10-min price from $100 to $150 — honor original price, pay the difference, or refuse? Undefined; also unclear if reschedule must be same service/duration.
46GAPRefund destination edge: refund fires 3+ months later (reschedule chains, disputes) to an expired/cancelled card — no fallback stated.
47GAPConduct-forfeit ledger math: ADM says "forfeit to the platform; talent ALWAYS paid in full" — but the four T&S buttons include "Refund fan (not warranted)" with no rule for who funds a refund on a call where talent was already instant-paid (platform eats 80%+? clawback?).
48HANDLEDRefund timing consistency: "3–5 business days, your bank's speed" — CP and E6 match.
49HANDLEDAll-in pricing, no fees: CO "Fees — none," HIW step 2, ToS §3 all agree.
50GAPCeleb cancel after a fan bought a same-night extension chain: refund composition undefined (minor).
51GAPTaxes/1099: nothing anywhere on tax docs for celebs earning $10K+/mo (Stripe Connect handles mechanics, but the talent agreement referenced in ToS §7 doesn't exist).
D. Hours / drops / menu edges
52GAPCeleb edits hours with existing bookings inside the removed window: E1/S4 promise "change your menu or hours any time"; no artifact says existing bookings survive (they must — but is the celeb warned? blocked? auto-cancel with pickup-rate hit?).
53GAPCeleb deletes/re-prices a menu item with future bookings on it: booked price honored (presumably) — never stated; affects reschedule pricing (#45) and the "at your rate" extension formula (#34).
54GAPDrop overlapping standing hours: drops are "a separate feature" — but nothing prevents or defines a drop scheduled ON TOP of standing hours (double-sold time).
55GAPAuto-accept race: two fans complete Apple Pay for the same 7:20 slot within seconds — no slot-hold-at-checkout, lock, or loser-refund flow anywhere (CO has no reservation timer; S12 shows sold slots crossed out but no hold semantics).
56GAPManual-request expiry: see #3 — no TTL, no celeb-side SLA, no fan-side "pending" screen at all (the fan pending state is never drawn).
57GAP"Pause payphone" (ADM action; CP "can pause the payphone entirely"): effect on already-paid future bookings undefined — auto-refund all? honor and pause new sales?
58GAPSuspend (ADM, "requires a reason code"): same question, harsher — plus what the fan is told.
59HANDLEDAuto-accept inside hours / request outside: consistent in S5, APV2 Hours, E2, celeb-first C4.
60GAPSlot granularity rule: are slot start times generated from the menu's durations (5-min service on :05s?) or fixed 10-min grid regardless of service? Never specified; drives #20–22.
61GAPCeleb cancels a whole session (not one booking): E6 handles per-booking refund; bulk-cancel of a night (12+ refunds, list notification, make-good) has no flow.
E. Identity / account edges
62GAPFan changes phone number: ledger names email as the recovery layer, but no flow exists in any artifact (S31 "You" tab has no change-number row).
63GAPCeleb changes number: THE verified credential (OTP against manager-registered number, S3) — re-verification flow undefined; also what happens if the manager relationship ends (who "owns" the payphone?).
64GAPNumber recycling: carriers reassign numbers; new owner OTPs into the old owner's account — saved card, recordings, bookings. No mitigation mentioned (email-confirm on new device, dormancy check). Security hole inherent to number-as-account, unaddressed.
65GAPShared/family number: two people, one number = one account by design; never acknowledged.
66GAPWeb number A → app number B: S26's magic moment only works if numbers match; the mismatch case (booked with work number, signed into app with personal) has no merge/lookup path — fan sees an empty app and panics 10 minutes before a $100 call.
67GAPCeleb-as-fan: S24 caption says celebs download the consumer app too, 7c says role is decided by the signed-in number — those two statements conflict: if role is decided by number, how does a celeb reach fan surfaces to book another celeb? Mechanics undefined.
68GAPManager permissions matrix: E1 "your manager can co-manage," ADM "scoped to their roster," ADM action "Edit menu/hours (with consent)" — nowhere is it defined what a manager can DO (edit prices? cancel bookings? trigger payouts? see fan PII?). The B2B product's core object is unspecified.
69CONTRADICTIONNumber privacy vs audience export: S13/CO/S25 say flatly "Dre never sees your number," while S10 gives the celeb an exportable CSV of "12,483 people · every one gave a name, phone, and email." The ledger calls the list a disclosed exception "at signup" — but the checkout and sign-in copy state the absolute with no exception, and no disclosure exists at the list-join moment.
70GAPFan blocked/banned: numbers are cheap to rotate via VoIP; no device/card-fingerprint mention, and the banned fan's paid future bookings' disposition is undefined.
71GAPUnder-18 enforcement: ToS §2 requires 18+, App Store listing is 17+ (7c), and the web checkout collects no age attestation at all.
F. Call / recording edges
72GAPCeleb recording consent: fan consents at checkout — the celeb claim flow (S2–S7) never once mentions recording; their only consent is buried in ToS §5. For the side whose likeness is the product, there's no explicit consent moment in onboarding.
73PARTIALTwo-party-consent law: both parties notified (REC chip, checkout consent, ToS §5) which likely satisfies CA — but no legal note anywhere addresses state-by-state recording law; flag for counsel.
74GAPRecording failure: E5 promises the recording and S22 promises a forever-download; no policy for "call happened, recording lost" (partial refund? apology credit?). Also no policy when the recording is the dispute evidence and it's missing.
75CONTRADICTIONRetention: platform retains 90 days (S22, E5) vs celeb archive "312 calls · every recording is yours" with no expiry vs fan "download forever." If the archive streams from platform storage past 90 days, retention isn't 90 days; if not, the archive silently rots. Unresolved three ways.
76GAPModeration bot as third participant: the real-time moderation plan puts a server participant in every call; nothing reconciles this with the 1:1 framing or discloses "monitored" beyond one word in CP/HIW — counsel question.
77GAPCeleb-side extension consent: the +5 offer is fan-tap-only; nothing asks or pre-authorizes the CELEB to stay 5 more minutes. Undefined whether celeb can decline an extension.
78GAPReport-flow outcome for the FAN: report button exists in-call; what a fan-filed report does to payment (hold the split? freeze instant payout?) is undefined — instant payout on completion makes post-hoc fan-side remedies unfundable without clawbacks.
79HANDLEDJoin-log evidence chain: S23, ADM T&S case — the dispute machinery is well specified.
80GAPFan who objects to recording AFTER paying: no cancel-with-refund path defined for this reason (consent was at checkout; presumably standard cancel rules — never stated).
G. Cross-artifact consistency
81CONTRADICTIONS20 payday: $250/$200/$1,540 vs the same call being $150/$120/$1,340 everywhere else (S21, S23, S9, APV2) — see #40.
82CONTRADICTIONSlot counts: Tuesday = "7:00–9:00 PM · 12 slots" (S5, APV2 Hours) but "4 of 24 slots unsold" TONIGHT (S8/APV2 Today) and "24 slots open" Tuesday (S7d) and "13 of 18 calls done" tonight (S9/APV2 Earnings). Same night is 12, 18, and 24 slots across four screens.
83CONTRADICTIONSession capacity: "23 calls · sold out" and "21 calls · 2 extensions" in 2-hour sessions — 2 hours holds at most 12 ten-min or 24 five-min calls; 23 calls averaging ~$115 gross doesn't fit any menu×time combination.
84CONTRADICTIONTemporal impossibility: Today header 7:41 PM, session started 7:00 PM, yet "13 of 18 calls done" — max 4 calls could have run by 7:41.
85CONTRADICTIONADM drop event: "@solrivera · 24 slots · 12,483 texts" — 12,483 is DRE's list size; Sol's list is 44,210 in the same admin screen.
86CONTRADICTIONE2 vs ADM: Jordan M. booked Tue 7:20 PM $100 (E2, E3) while ADM shows Casey R. booking "Tue 7:20p slot @dre $180" — same slot, two fans, two prices across sample data.
87CONTRADICTIONE5 vs E6: both reference booking #PP-88214; E5 says the call ran 10:00 of 10:00, E6 says Dre no-showed the same booking. The four fan emails reuse one booking ID for mutually exclusive outcomes.
88CONTRADICTIONE5 "10:00 of 10:00" vs S21/S23 where the same Jordan/Dre call ran 15:00 with an extension.
89HANDLEDMath that IS right: Ava P. $60×80%=+$48 ✓; Sam T./Jordan $100+$50 ext=$150×80%=+$120 ✓; Marcus W. $180×80%=+$144 ✓; July MTD $10,825×80%=$8,660 ✓; E2 $100→$80 ✓; @dre GMV $18,700→celeb $14,960/manager $935 ✓; 4 hrs × $100/10-min = $2,400 gross ✓.
90CONTRADICTIONExtension "at the celeb's rate": ledger vs S19 ($50 ≠ $60 five-min menu price) vs ADM ($125 vs Sol's $150 floor) — three artifacts, three implicit formulas.
91HANDLEDCancel policy rules identical across CP, ToS §4, E3, CO fine print, S13, S30, HIW FAQ — the most consistent thing in the package.
92GAPConduct-forfeit at checkout: the moderation plan mandates "say so at checkout"; CO fine print covers recording + cancel policy but NOT conduct forfeiture (HIW FAQ and CP have it; the legally load-bearing surface doesn't).
93CONTRADICTIONLedger "follow is PAID" (the founder's revision, overriding free-watchlist) vs journey S28 "Watching is free because it's the ring" and S21/E5 free one-tap list joins. The journey builds the free model the ledger says the founder overrode.
94CONTRADICTION18+ (ToS §2) vs 17+ App Store rating (S7c).
95GAP"Captured at booking, split on completion," "platform eats Stripe fee on refunds," "manager 5 pts" appear ONLY in the ledger — no customer-facing or ops artifact carries them beyond ToS §3's one sentence.
96CONTRADICTIONDesign law vs artifacts: EMOJI BANNED but E2's subject leads with 💰 and ADM's sidebar uses emoji icons (👥 🛡 ⚙).
97GAPOld-vocab inventory ("line" where the locked word is "payphone"): site (all pages), ALL SIX EMAILS, ADM (section named "Lines"), app-proto, app-proto-v2, v4 mockups. Journey + design guide are the only swept artifacts.
98CONTRADICTIONHIW step 2 hard-codes "(5, 10, or 20 minutes)" as the platform's lengths — that's Dre's menu; the locked decision is celeb-set durations.
99HANDLEDFair timer, no-show rules, recording promises: CP, HIW guarantees, E3/E4, S17/18 captions align verbatim.
H. Missing entirely
100GAPFan refund/report screens — admitted undrawn, twice.
101GAPDrop night-of flow (fan-side drop→sellout→lobby night undrawn).
102GAPCeleb cancels-a-booking flow — E2 says "do it in the app"; no screen exists.
103GAPReschedule picker — S30 has the button; E3 has the link; no screen.
104GAPFan pending-request state for off-hours asks (celeb side drawn; fan side absent).
105GAPManager dashboard — the "real B2B product" per ledger; exists only as ADM's one-line note.
106GAPCeleb consent-to-recording moment in onboarding.
107GAPBanned-fan experience (what they see, outstanding bookings, appeal path).
108GAPWaitlist for sold-out sessions — a sell-out dead-ends with no capture ("text me if a slot frees").
109GAPAccount deletion / data rights (CCPA/GDPR delete vs recordings that are the OTHER party's evidence/keepsake).
110GAPCeleb rates/blocks a fan: S8 shows the fan's "★ 5.0 THEIR RATING," but no screen captures a celeb rating a fan, and celeb-blocks-fan doesn't exist.
111GAPWeb account surface for fans: cancel/reschedule links exist in E3, but no logged-in web "my bookings" page — the no-app promise breaks at the first cancel.
112GAPSupport surface: "a human answers" — no SLA, no in-product help beyond one row.
113GAPAndroid app — 7b says "Google Play, same link"; no Android artifact or plan.
114GAPPayment-failure and 3DS states in checkout; slot-hold timer during checkout.
115GAPMembership/paid-follow product: no checkout, no pricing, no take-rate, no screens — despite being a locked the founder revision and the "owned audience" monetization.
116GAPTalent agreement (ToS §7 references it) — document doesn't exist.
117GAPCeleb archive export at scale + what happens to the archive if the celeb leaves the platform.
118GAP"Open a payphone manually" (ADM Today button) — operation undefined.
119GAPMulti-celeb/manager bulk tooling (invite 50 clients, batch hours) — the 10-managers GTM has no artifact.
I. Top-10 priority queue (resolve before build)
1DECISIONScheduling model (#20–22, 25, 32, 82): pick one — recommend per-service slot generation with a built-in 5-min buffer every N calls, night runs on a drift queue ("times are approximate after a late start"), extension allowed iff ≥5 contiguous unsold minutes follow. This kills the 12/18/24 slot chaos too.
2DECISIONDefine the join window (#23, 24, 26): recommend — fan may join until 50% of slot elapsed (timer runs to min(full duration, slot end + buffer)); celeb no-show fires at 5:00 past start; both numbers printed in the cancel policy.
3DECISIONOff-hours request money handling (#2, 3, 56): recommend — Stripe auth (not capture) at request, celeb has 24h or until T-2h (whichever first) to accept, auto-release on expiry, fan sees a pending screen.
4DECISIONNumber privacy vs audience export (#69): recommend — keep the export, change the absolute copy to "never shown for calling — you're added to Dre's contact list (drops by text/email)" at checkout, one line.
5DECISIONPartial-call / tech-failure policy (#44, 74): recommend — platform-fault (infra/recording loss): fan 100% refunded, celeb paid in full, platform eats it; connection-fault: <50% delivered = free rebook.
6DECISIONRecording retention triangle (#75): recommend — fan file forever (their copy), platform hot storage 90 days, celeb archive persists in cold storage as a talent benefit — then say so in ToS §5.
7DECISIONPaid vs free follow (#93, 115): the ledger and the journey disagree on the product's second revenue line; recommend — ship free watch at launch (journey as drawn), per-celeb paid tier as the fast-follow, web-only checkout.
8DECISIONExtension formula + celeb consent (#34, 77): recommend — extension price = per-minute rate of the BOOKED service × 5, celeb pre-authorizes extensions via an Hours toggle (default on).
9DECISIONInstant-payout vs dispute reserve (#18, 47, 78): instant payout leaves zero remedy funds for chargebacks/fan reports; recommend — instant payout stands but a 5% rolling reserve on new payphones for 30 days, disclosed in the talent agreement.
10DECISIONSample-data sweep before anything ships to a manager (#40–43, 81–88, 96–98): one pass to fix S20's $250 relic, the slot counts, ADM's net-revenue math, the PP-88214 email reuse, and the "line"→"payphone" sweep — managers do the math.
How to use this page: Section I first — your ten calls, each with a recommended default; one word per row settles it. Then the CONTRADICTION rows (red) — those are fixable without you, queued as a sweep. GAP rows become the next mockup/policy round in priority order. Nothing here blocks reviewing the journey; everything here blocks writing production code.