Bug storici risolti
Catalogo dei bug significativi WooshPayment risolti in passato. Trasparenza tecnica per merchant che valutano stabilità.
TLDR: trasparenza tecnica. Sotto la lista dei bug significativi risolti dal lancio (Q2 2026). Per il merchant: nessuno di questi è oggi attivo. Per chi valuta WooshPayment: ecco come trattiamo le incident.
2026-05 — Security hardening sprint + UX consistency fixes
Ondata di fix tecnici e UX:
Sicurezza (14-fix sprint OWASP)
- Mass-assignment: tutti i body Zod marcati
.strict()per rifiutare campi non whitelisted - Encryption at rest: AES-256-GCM su
whopApiKey,accessTokenShopify,wooConsumerSecret - Timing-equalize login: bcrypt compare contro dummy hash quando l'email non esiste → no email enumeration
- Rate limit: 10 login / 5 register per IP ogni 15 min
- Body limit: 1MB con error handler 413/400/403 in un unico middleware
- CORS apex-of-subdomain: regola che riconosce l'apex del subdomain custom verificato (es.
tuostore.comsecheckout.tuostore.comè verified) - JWT signing: claim ridotto a
{ merchantId, shopDomain }, niente PII extra
Connessione Whop
- Switch da
/api/v2/mea/v5/company: il vecchio endpoint era per user-token; con Company API key ritornava 401. Ora usiamo/v5/companyche funziona con qualsiasi Company key con ruolo Proprietario. Documentato in Setup Whop.
UX consistency
- Sidebar/Settings sync dopo OAuth: dopo OAuth Shopify, la dashboard mostrava ancora "Non connesso" perché il merchant in localStorage era stale. Risolto con
refreshMerchant()chiamato al mount del segment/dashboard/*che rifetcha/api/merchant/mee aggiorna lo store Zustand. - Apex domain → auto-prepend
checkout.: il campo dominio custom ora ha prefissocheckout.fisso visivo; se incolli un apex il backend lo trasforma in subdomaincheckout.X. Vedi Dominio custom. - Bonifico rimosso dall'onboarding: feature dismessa per semplificare il setup. Solo Whop + COD ora come metodi al checkout.
Vecchio sprint Audit (riferimento storico — Q2 2026)
Audit interno post-lancio. Categorie:
Sicurezza (CRITICAL — fix immediato)
- BUG-C1: API keys marketing ritornate in plaintext da endpoint pubblici → fix: allowlist sanitization, crittografia at-rest
- BUG-C2: XSS via
custom_scriptscheckout → fix: Zod strict allowlist + 10k char cap - BUG-C3: footer GDPR link rotti (href="#") → fix: link a
/privacy,/terms,/refund - BUG-C4: signup → onboarding skippava verify email → fix:
/verify-email-pendingpolling gate - BUG-C5: ExpressCheckoutBlock localizable strings hardcoded → fix: i18n props threading
HIGH (UX / data integrity)
- BUG-H1: admin JWT in localStorage (XSS-stealable) → fix: httpOnly cookie su
.wooshpayment.com - BUG-H2:
accessTokenaveva fallback plaintext → fix: nullable + warn log su decryption failure - BUG-H3: CORS regex Vercel preview ngrok wildcards in prod → fix: gated NODE_ENV !== production
- BUG-H4: impersonation token in URL (CSRF/log leak) → fix: model
ImpersonationToken+ single-use updateMany + JSON body - BUG-H5: reset/verify token usando
cuid(low-entropy) → fix:randomBytes(24).toString('base64url') - BUG-H6: Pay button ignorava
brandColor→ fix: classe CSS.sp-pay-ctala onora - BUG-H7: blank white loading checkout → fix: skeleton animate-pulse
- BUG-H8: onboarding step "Procedi al lancio" cliccabile senza preview → fix: gate su state
- BUG-H10: log API emettevano email full → fix: helper
redactEmail()ovunque - BUG-H12 / PERF-1: API region iad1 (us-east) → fix: pinned cdg1 (Paris). p95 1500ms → 180ms
MEDIUM (qualità / a11y)
- 18 fix vari: empty catch silenziosi, dialog
confirm()nativo non a11y, Permissions-Policy mancante per Apple Pay iframe Whop,next/imagemigration (LCP), empty states con CTA, stepper a11y.
LOW (polish)
- Touch target 44px, contrast WCAG AA, sanitization CSS custom, schema drift root vs apps.
Vedi work/context/bugs-known.md per la lista completa con line:column reference.
2026-04 — Webhook duplicati Whop
Incident: tra 5 e 8 aprile 2026, alcuni ordini venivano marcati PAID due volte → email conferma cliente partita twice, evento pixel Purchase doppio.
Causa: Whop in casi rari (~0.1%) reinvia webhook senza change in idempotencyKey. La nostra logica di deduplica usava whopPaymentId + status invece di webhookDeliveryId.
Fix (deploy dpl_K2x...): introduzione WebhookDelivery model con unique index su provider + deliveryId. Idempotenza vera. Backfill manuale dei 12 ordini doppio-sparati.
Impatto: 12 merchant interessati, notificati via mail + credit €5 piano successivo.
2026-04 — Apple Pay non si apriva iOS 17.4+
Incident: utenti iPhone con iOS 17.4 vedevano bottone Apple Pay grigio.
Causa: iOS 17.4 ha cambiato la default Permissions-Policy → richiede header esplicito Permissions-Policy: payment=(self "https://whop.com") sulla pagina embed.
Fix (BUG-M5): aggiunto header in apps/web/next.config.js:33. Deploy 24h dopo report.
Impatto: ~40% degli utenti iOS in quei 3 giorni vedevano Apple Pay broken → fallback su carta digitata. Conversion mobile iOS scesa 15% temporaneamente. Recuperata post-fix.
2026-03 — RESEND_API_KEY mancante in prod
Incident: per 6 ore email transazionali non partivano. Cliente non riceveva conferma ordine.
Causa: durante setup iniziale env variables, RESEND_API_KEY non era stata aggiunta su Vercel API project.
Fix: configurato via Resend Auto-Configure API direttamente, bypassando UI GoDaddy che bloccava per wildcard CNAME conflict. Vedi work/context/bugs-known.md per dettaglio.
Impatto: ~30 ordini senza email conferma in quel finestra. Riinvio manuale eseguito a tutti.
2026-02 — Volume fee Whop sbagliato ($10 vs $15.99)
Incident: alcuni clienti pagavano $10 invece di $15.99 al checkout per un access pass test.
Causa: Whop sandbox vs prod product ID mismatch. Test product Whop aveva quote prezzo $10.
Fix: validation pre-checkout che incrocia merchant.whopProductId con il catalogo Whop reale. Refuse checkout se mismatch. Vedi changelog 2026-02.
Impatto: ~5 ordini mispriced. Risolti con charge supplementare consensuale (5/5 cliente OK).
2026-02 — Whop webhook ritardi/missing
Issue ongoing: Whop webhook delivery è best-effort. Vediamo ritardi minuti / missing 0.5-1% volume.
Mitigation (sempre attiva):
/refresh-statusendpoint polla Whop API direttamente quando return page detecta stale PROCESSING- Admin panel "Verifica pagamento" forza backfill manuale
- Return page polla ogni 3s per 45s post-redirect
Real fix proposto: monitoring delivery + auto-replay via Whop "resend webhook" API. Roadmap Q3.
Storia trasparenza
Post-mortem completi: scrivi a noreply@wooshpayment.com con subject [POSTMORTEM] + data incident. Inviamo PDF dettagliato.
Come trattiamo i bug
-
Severity SLA:
- CRITICAL (data loss, security) → fix entro 4h
- HIGH (broken core feature) → fix entro 24h
- MEDIUM (bug parziale o workaround) → fix entro 7gg
- LOW (polish) → next sprint
-
Comunicazione:
- CRITICAL → mail tutti i merchant + banner dashboard
- HIGH → mail merchant impattati
- MEDIUM/LOW → changelog mensile
-
Compensation:
- Bug ha causato perdita ordini? → credit piano successivo proporzionale
- Bug ha causato leak dati? → notifica GDPR + supporto compliance