FREE STRIPE 2025-03-31.BASIL DIAGNOSTIC | ZERO LOGIN REQUIRED
Free Stripe 2025-03-31.basil Subscription Entitlement & Ghost-Usage Auditor
In Stripe API 2025-03-31.basil, top-level subscription.current_period_end is undefined (moved onto items.data[]), causing legacy sub.current_period_end * 1000 < Date.now() checks to evaluate to false and allow unpaid API consumption indefinitely.
1. Subscription Snapshot & Metered Cost Parameters
Test how naive webhook handlers compare against RevClamp's multi-item 2025-03-31.basil entitlement engine.
2. Entitlement Verdict & Signed Revoke Webhook Preview
Compares legacy sub.current_period_end logic against item-level has_more-aware reconciliation.
Click Run basil Entitlement Audit to compare legacy webhook behavior against deterministic
2025-03-31.basil evaluation.
Awaiting evaluation...
3. Stripe 2025-03-31.basil Entitlement Failure Modes & Deterministic Guards
Why B2B SaaS and AI platforms need customer-level subscription reconciliation and item-level period aggregation before revoking API access.
| Failure Mode | Stripe 2025-03-31.basil Payload Shape |
Naive Webhook Handler Bug | RevClamp Deterministic Guard |
|---|---|---|---|
| Top-Level Period Removal | sub.current_period_end === undefined |
undefined * 1000 < Date.now() is false (unpaid bleed) |
Aggregates max items.data[].current_period_end (fail-closed) |
| Multi-Subscription Customer | sub_old (canceled) + sub_new (active) |
Revokes API key on first subscription.deleted webhook |
Reconciles full customer subscription set before emitting revoke |
| Truncated List Pagination | items.has_more === true or subscriptionsHasMore === true |
Evaluates partial page-1 items and revokes active seats | Blocks revocation with INCOMPLETE_PAGINATION_SNAPSHOT |
| Active Bank Retry (Dunning) | status: "past_due", latest_invoice_failed_at < grace |
Locks out enterprise customer during 48h card retry | Honors configurable 0–14d dunningGracePeriodDays |
| Out-of-Order Webhook Replay | Delayed invoice.payment_failed arrives after renewal |
Overwrites paid subscription state back to past_due |
Enforces 72h event deduplication and transition-timestamp ordering |