İçeriğe atla
ÖzelliklerFiyatlandırmaİş OrtaklığıBlogYardımHakkımızdaİletişim
BaşlaGiriş Yap
Bloga Dön
industry2026-05-2413 dk okuma

Diamond'a yükseldim ama dashboard Pro feature-gated — tier drift D1 vs Supabase (PR #626 GGG F1)

Diyarbakir Sur da 47 yaslarinda "Diyarbakir Mutfak Evi" sahibi Hatice, 14 ay thMenu Pro tier (60-cover restoran + ust katta 12 odali pansiyon). Tarihi Sur konum + "Sur Pansiyon" hotel rebrand icin thMenu Diamond a yukseldi (room service icin). Pazartesi Stripe Customer Portal upgrade $99 odeme alindi confirmation email. Sali sabahi dashboard Rooms sekmesi **grayed out** "Diamond tier required, upgrade now" badge. Subscriptions sayfasi: "Current plan: Pro $29/mo." Stripe Customer Portal: "Current plan: Diamond $99/mo." **Drift**. Hatice support a yazdi. Engineering trace: 10:14:23 Hatice upgrade, 10:14:24 webhook fired + signature verified + idempotency claim, 10:14:25 Supabase user_profiles.tier = "diamond" ✓, 10:14:25 syncD1Tier() fetch fired with 5sn timeout (PR #661 XI F5), 10:14:30 AbortSignal.timeout(5000) fired never resolved, 10:14:30 catch branch swallowed AbortError webhook returned 200. **Stripe webhook 200-successful AMA D1 cache-purge timeout**. D1_MENU.restaurants.tier hala "pro". Customer-facing menu + admin nav (STARTER_AVAILABLE/REQUIRES_PLATINUM/REQUIRES_DIAMOND gates) D1 read → "Pro features only" badge. ~3 saat sonra edge POP rotation self-refresh edebilir (TTL 4h), ama Hatice region POP cold cache 18 saat. **23 affected restaurant pattern**: 14 Supabase Diamond/D1 Pro (upgrade fail), 6 Supabase Platinum/D1 Pro, **2 Supabase Pro/D1 Platinum** (downgrade fail = stale entitlement, customer hala Platinum-only feature erisim — revenue leak), 1 Supabase Diamond/D1 Diamond ama Stripe canceled (PR #519 EE cascadeTierDowngrade missed). Wrong theory: "syncD1Tier i sync (await) yapalim, fail ise webhook 5xx + Stripe retry" — kritik path 5sn blocking, Stripe 30sn budget dar; webhook handler Supabase + D1 + audit log + Resend + journal entry (PR #485 N) yapiyor. Async fire-and-forget canonical dogru. **PR #626 batch GGG F1** 3-katmanli fix: **Layer 1 daily tier-audit cron** cloudflare/src/cron-jobs/tier-audit.ts daily 04:45 UTC slot — paginated walk Supabase source-of-truth (500 row/page) + batch-lookup D1 + diff via normalizeTier() + reconcile D1 UPDATE FROM Supabase. **Layer 2 Sentry alert rule** [BEACON:tier_drift_reconciled] tag 5+ events/hour threshold PagerDuty ops team — sustained drift upstream Stripe webhook delivery problem. **Layer 3 backfill scripted** 23 affected restaurant proactive email + Hatice e 24 saat response + 1-month free Pro tier credit. **Stale entitlement detection**: 2 case (Supabase Pro D1 Platinum) manuel handle "no retroactive billing for our system error" — hediye olarak handle edildi. Synaltix policy "stale entitlement detect notice + 1-week grace + next billing downgrade enforced" compassionate. Pattern: **cross-database state sync webhook-driven oldugunda webhook silent-fail veya partial-success drift birakir. Daily audit-reconcile cron source-of-truth tan cache i refresh etmeli + drift count Sentry beacon + PagerDuty alert observable.** Implementation checklist: (1) source-of-truth + cache(s) identify; (2) webhook fire-and-forget kritik-path budget; (3) daily audit cron paginated walk + batch lookup + diff + reconcile; (4) normalizeTier() helper false-positive drift onler; (5) audit log + Sentry beacon per reconcile; (6) PagerDuty alert sustained drift; (7) stale entitlement compassionate policy; (8) backfill script first-run. Konstantinos Athens Plaka Taverna Plaka 14-room boutique guesthouse Plaka Guesthouse rebrand ayni flow.

th

thMenu Ekibi

thmenu.com

Faydalı buldunuz mu? Paylaşın.