feat(insights): capture insight date picker opened event - #70980
Conversation
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
🤖 CI report
|
| 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%)
Generated-By: PostHog Code Task-Id: ed51c241-10a9-4bc5-b4a4-23d4be02f837
🦔 Hogbox preview · ✅ ready▶ Open the preview
commit |
|
Reviews (1): Last reviewed commit: "chore(insights): satisfy oxfmt on date p..." | Re-trigger Greptile |
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
There was a problem hiding this comment.
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 |
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 openedevent (propertyquery_kind), fired when the date filter dropdown opens, on both arms so control and test are comparable:DateFiltergains an optionalonOpenChange(open)callback, driven off its existingisVisiblestate. No behavior change for any existing caller that doesn't pass it.Popoveropen 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
eventUsageLogiccapture path. Kea typegen for the newreportInsightDatePickerOpenedaction is generated in CI before the typecheck.Automatic notifications
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
onOpenChangeto the sharedDateFilterrather 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