Skip to content

feat(insights): capture insight date picker opened event - #70980

Merged
sampennington merged 5 commits into
masterfrom
posthog-code/insight-date-picker-abandonment-event
Jul 16, 2026
Merged

feat(insights): capture insight date picker opened event#70980
sampennington merged 5 commits into
masterfrom
posthog-code/insight-date-picker-abandonment-event

Conversation

@sampennington

Copy link
Copy Markdown
Contributor

Problem

The New insight date picker experiment wants an abandonment metric — users who open the date picker but leave without selecting a range. We capture the selection (insight date range changed) but nothing for the open, so abandonment can't be measured.

Changes

Add an insight date picker opened event (property query_kind), fired when the date filter dropdown opens, on both arms so control and test are comparable:

  • Legacy filter (control) — the shared DateFilter gains an optional onOpenChange(open) callback, driven off its existing isVisible state. No behavior change for any existing caller that doesn't pass it.
  • New quill picker (test) — reports on the Popover open transition.

The abandonment metric is then a funnel insight date picker opened → insight date range changed; the drop-off is the abandonment rate, comparable across variants.

How did you test this code?

No new automated tests — this is event instrumentation. I (Claude) did not run the app manually. The change is additive and the new event flows through the existing eventUsageLogic capture path. Kea typegen for the new reportInsightDatePickerOpened action is generated in CI before the typecheck.

Automatic notifications

  • Publish to changelog?
  • Alert Sales and Marketing teams?

Docs update

None — internal experiment instrumentation.

🤖 Agent context

Autonomy: Human-driven (agent-assisted)

Sam asked for an abandonment metric ("opened without selecting") on the date picker experiment. I (Claude, PostHog Code) added the missing "opened" event on both picker variants so the funnel can be built. The experiment's flag-read gating shipped separately in #70961.

Decision: added an optional onOpenChange to the shared DateFilter rather than a bespoke wrapper, so the control arm reports opens with a minimal, opt-in surface change. Both arms are instrumented so the abandonment rate is a fair A/B comparison rather than test-only.


Created with PostHog Code

Add an `insight date picker opened` event (with `query_kind`), fired when the insight date filter dropdown opens, on both the legacy filter (control) and the new quill picker (test). Pairs with the existing `insight date range changed` event so the date picker experiment can measure abandonment: opened → changed, where the drop-off is users who opened the picker without selecting a range.

The shared `DateFilter` gains an optional `onOpenChange` callback (no behavior change when unused) so the legacy picker can report opens.

Generated-By: PostHog Code
Task-Id: ed51c241-10a9-4bc5-b4a4-23d4be02f837
@sampennington sampennington self-assigned this Jul 15, 2026
@github-actions

github-actions Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

🤖 CI report

⚠️ Bundle size — 🔺 +727 B (+0.0%)

Uncompressed size of every built .js bundle, compared against the base branch.

Total: 64.77 MiB · 🔺 +727 B (+0.0%)

No file changed by more than 1000 B.

Posted automatically by build-bundle-size-report · uncompressed bytes from dist-report

Eager graph — within budget

How much code each root ships on the eager path — downloaded and parsed before the surface is interactive. Measured from the esbuild output chunks (post-tree-shake, static imports only); lazy import() / React.lazy chunks are not counted.

Root Eager (shipped) Δ vs base Budget
entry (logged-out pages, app bootstrap)
src/index.tsx
1.22 MiB · 22 files no change ███░░░░░░░ 28.4% of 4.29 MiB
authenticated shell (every logged-in page)
src/scenes/AuthenticatedShell.tsx
8.13 MiB · 2,978 files 🔺 +331 B (+0.0%) █████████░ 87.9% of 9.25 MiB

🟢 node_modules/monaco-editor/ stays out of src/index.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/index.tsx
🟢 [object Object] stays out of src/index.tsx
🟢 [object Object] stays out of src/index.tsx
🟢 node_modules/monaco-editor/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx

Largest files eagerly shipped from src/index.tsx
Size File
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
24.6 KiB ../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js
6.3 KiB ../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js
4.5 KiB ../node_modules/.pnpm/@jspm+core@2.1.0/node_modules/@jspm/core/nodelibs/browser/process.js
3.9 KiB ../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js
1.4 KiB ../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js
1.3 KiB src/RootErrorBoundary.tsx
912 B ../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js
789 B src/scenes/ChunkLoadErrorBoundary.tsx
762 B src/index.tsx
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
Size File
281.3 KiB ../node_modules/.pnpm/posthog-js@1.402.3/node_modules/posthog-js/dist/rrweb.js
267.7 KiB ../node_modules/.pnpm/@posthog+icons@0.38.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
235.5 KiB src/taxonomy/core-filter-definitions-by-group.json
222.9 KiB ../node_modules/.pnpm/posthog-js@1.402.3/node_modules/posthog-js/dist/module.js
164.0 KiB src/queries/validators.js
154.3 KiB ../node_modules/.pnpm/re2js@0.4.1/node_modules/re2js/build/index.esm.js
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
105.8 KiB src/lib/api.ts
93.3 KiB ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js
92.7 KiB ../packages/quill/packages/quill/dist/index.js

Posted automatically by check-eager-graph · sizes are eager output bytes (shipped, post-tree-shake) from the esbuild metafile · part of #32479

Dist folder size — 🔺 +10.5 KiB (+0.0%)

Total size of the built frontend/dist folder (all assets), compared against the base branch.

Total: 1312.66 MiB · 🔺 +10.5 KiB (+0.0%)

Playwright — all passed

All tests passed.

View test results →

@trunk-io

trunk-io Bot commented Jul 15, 2026

Copy link
Copy Markdown

Static BadgeStatic BadgeStatic BadgeStatic Badge

View Full Report ↗︎Docs

Generated-By: PostHog Code
Task-Id: ed51c241-10a9-4bc5-b4a4-23d4be02f837
@github-actions

github-actions Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

🦔 Hogbox preview · ✅ ready

▶ Open the preview

🔑 Login test@posthog.com / 12345678 (demo data)
🧩 Running this PR's backend and frontend, on the PostHog :master base
🔗 Link stable across rebuilds — a re-push swaps the box underneath, the URL stays
🔒 Access tailnet only (PostHog VPN)
🛠️ Admin inspect & debug state in hogland
💤 Idle sleeps after ~30 min idle (snapshot to S3, zero node cost) and wakes on your next visit in ~30s, behind a brief "waking up" screen

commit f13fc83 · box box-043ab6f83331 · ready in 725s (push → usable) · build log · rebuilds on every push, torn down on close

@pr-assigner-resolver-posthog
pr-assigner-resolver-posthog Bot requested a review from a team July 15, 2026 10:27
@greptile-apps

greptile-apps Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Reviews (1): Last reviewed commit: "chore(insights): satisfy oxfmt on date p..." | Re-trigger Greptile

Comment thread frontend/src/lib/components/DateFilter/DateFilter.tsx Outdated
@sampennington
sampennington removed the request for review from a team July 15, 2026 10:37
Address a code-review note: the visibility effect had `onOpenChange` in its deps, and callers pass an inline function, so it re-ran every render (the guard kept behavior correct, but the runs were wasted). Hold the callback in a ref so the effect depends only on `isVisible`.

Generated-By: PostHog Code
Task-Id: ed51c241-10a9-4bc5-b4a4-23d4be02f837

@stamphog stamphog Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additive, low-risk frontend analytics instrumentation matching the PR description exactly; no behavior change for existing callers, and the diff already implements the ref-based fix Graphite's resolved comment suggested.

  • Author wrote 75% of the modified lines and has 11 merged PRs in these paths (familiarity STRONG).
  • 👍 on the PR from greptile-apps[bot], hex-security-app[bot].
Gate mechanics and policy version
Gate Result
prerequisites all clear
deny-list no deny categories matched
size 46L, 4F substantive — within ceiling
tier T1-agent / T1b-small (46L, 4F, single-area, feat)
stamphog 2.0.0b3 .stamphog/policy.yml @ dfd7925 · reviewed head b3262d0

@sampennington
sampennington enabled auto-merge (squash) July 15, 2026 10:52
@sampennington
sampennington merged commit 03c8383 into master Jul 16, 2026
197 checks passed
@sampennington
sampennington deleted the posthog-code/insight-date-picker-abandonment-event branch July 16, 2026 07:28
@deployment-status-posthog

deployment-status-posthog Bot commented Jul 16, 2026

Copy link
Copy Markdown

Deploy status

Environment Status Deployed At Workflow
dev ✅ Deployed 2026-07-16 07:57 UTC Run
prod-us ✅ Deployed 2026-07-16 08:10 UTC Run
prod-eu ✅ Deployed 2026-07-16 08:11 UTC Run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stamphog Request AI approval (no full review)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant