fix(paycraft): production hardening — lifetime entitlement + billing observability + Next.js security - #114
Conversation
#113) tsconfig.tsbuildinfo (TS build cache), infra/deploy/.state/* (deploy phase markers + last-promoted-sha), and infra/deploy/.deploy-ledger.jsonl are all machine-local, auto-regenerated files that were committed before their .gitignore patterns existed. git rm --cached untracks them (kept on disk); adds .deploy-ledger.jsonl to infra/deploy/.gitignore. Stops per-machine churn. Co-authored-by: Mobile Byte Labs <mobilebytelabs@gmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…bservability, Next.js security - stripe-webhook: grant entitlement on mode=payment + async_payment_succeeded (one-time/lifetime purchases were silently dropped); reuses subscription-handler upsert path (email/current_period_end), ~100yr period for lifetime. - PayCraftBillingManager: replace 3 silent catches with PayCraftLogger.onError (transferToDevice, revokeCurrentDevice, applyPremiumResult); add 11 unit tests covering premium/cache application, logout reset, OAuth error, OTP decisioning, transfer abort guard. - dashboard: bump Next.js 14.2.15 -> 14.2.35 (resolves the 2025-12-11 critical CVE). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ❌ Deployment failed View logs |
paycraft-docs | 4442429 | Jul 11 2026, 08:14 AM |
…e-existing UI files) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Summary
Production-hardening for PayCraft. Deploying to
maintriggersdeploy-cloud.yml(Vercel dashboard + Supabase edge functions).Changes
stripe-webhooknow grants onmode=payment+async_payment_succeeded— one-time/lifetime purchases were silently dropped. Reuses the existingsubscription-handlerupsert path (sameemail/current_period_endcolumns as working subscriptions); ~100yr period for lifetime (matches UPI precedent;is_premiumhas no null-means-forever path).PayCraftBillingManager(transferToDevice / revokeCurrentDevice / applyPremiumResult) now log viaPayCraftLogger.onError; +11 unit tests on the previously-untested 588-line core (all pass locally: premium/cache, logout reset, OAuth error, OTP decisioning, transfer abort).14.2.15 → 14.2.35(resolves the 2025-12-11 critical CVE); build clean (77 pages).Verified locally
:cmp-paycraft:jvmTestCurrencyResolver 10/10 + BillingManager 11/11 passnpm run buildclean; local stack (Supabase + dashboard) smooth/configReview flags
mode=paymentcheckout as lifetime (fine if payment-mode = lifetime-only).🤖 Generated with Claude Code