Skene
Product
Pricing
Docs
Blog
About
Log In
ProductPricingDocsBlogAbout
Log In
Documentation

What Skene catches

Five ways instrumentation breaks. Using PostHog examples here, Skene flags each one on the PR before it merges.

Removed events

A coding agent refactors a checkout function and the posthog.capture call goes with it.

- posthog.capture('checkout_completed', { plan: planId, value: amount })
  router.push('/thanks')

Skene flags the missing call and names the event that used to fire.

Renamed events

The agent tidies your event names. checkout_completed becomes checkoutCompleted, or order_placed, or vanishes into a constant.

- posthog.capture('checkout_completed', { plan, value })
+ posthog.capture('checkoutCompleted', { plan, value })

The funnel now splits across two names. Dashboards keep drawing from a name that no longer exists. Skene flags the rename and shows the old vs. the new.

Moved events

The capture call gets moved out of a conditional, into a different code path, or behind a feature flag. It still exists in the code, but no longer fires under the same conditions.

- if (user.isFirstPurchase) {
-   posthog.capture('first_purchase')
- }
+ posthog.capture('first_purchase')  // moved out of the guard

Skene tracks where in the control flow each event lives, so a moved call shows up as a change even when the call itself looks intact.

Altered payloads

A property gets renamed, dropped, or silently changes type from string to number. PostHog keeps accepting it. Funnels break in subtle ways.

  posthog.capture('signup', {
-   plan: 'pro',
+   plan_tier: 'pro',
-   referrer_id: id,
  })

Skene compares payload shapes call by call. Type changes, key renames, dropped properties all surface.

Conditional firing changes

The if-block guarding the event changes. The event still fires, just not under the same conditions. A retention metric quietly misses a slice of users.

- if (user.isActive && user.daysSinceSignup > 7) {
+ if (user.isActive) {
    posthog.capture('week_one_active')
  }

The condition collapsed; the call now fires for users who should not be counted. Skene flags conditional changes that affect when an event fires, not just whether the call exists.

What is next

  • Install Skene: pick a surface and try it
  • Supported libraries: which call shapes Skene reads
  • Configuration: how to mark a change as accepted
Skene

Product

How it worksFeaturesArchitectureIntegrationsSecurityPricing

Resources

DocumentationGlossaryPlaybooksBlog

Company

AboutOpen sourceContactPrivacyTerms
© 2026 Skene. All rights reserved.
Privacy PolicyTerms of Service
Skene