The biggest change in this release is a full audit of how conversion events are named and counted. A new subscription was triggering four separate Slack alerts and two Purchase events — one from the Stripe webhook, one from the success page. The success-page fire is gone; the webhook is the authoritative path. A plan upgrade event was also firing on the initial incomplete → active status transition, so first-time subscribers were getting logged as upgraders. That's corrected now.
Event names are standardized to PascalCase across every platform. "Complete Registration" (with a space) had been landing as a silent custom event in Ads Manager instead of the standard signup funnel — that's fixed. Credit top-ups now fire as CreditTopup rather than Purchase, keeping existing-customer revenue out of your new-subscription funnel. Homepage agent creation fires as AgentCreated. If you have Loops automations or PostHog dashboards keyed on the old event names (new_user_signed_up, subscription_purchased, user_subscribed_to_<plan>), those need to be rebound to CompleteRegistration and Purchase.
The demo form lead and the homepage scan are now separate Meta events. The demo form — which captures email and phone — fires the standard Lead event. Anonymous URL submissions from the homepage fire as OnboardingStarted, a custom event. They were previously both Lead, which muddied Ads Manager's optimization signal. To make OnboardingStarted optimizable, add a Custom Conversion entry for it in Meta Events Manager.
Slack alert ordering is also cleaned up in two places. Checkout Slack messages were arriving after payment webhook alerts because Vercel serverless was letting the promises queue until the next request thawed the function. The scan-complete alert could arrive after the report-page "first viewed" alert for the same reason. Both now use after() blocks or consolidated steps to ensure the sequence matches reality.