Skip to content

feat(funnels): flag bar labels and a name-only step legend - #110551

Merged
trunk-io[bot] merged 6 commits into
masterfrom
posthog/funnel-steps-fit-width
Oct 2, 2026
Merged

trunk-io[bot] merged 6 commits into
masterfrom
posthog/funnel-steps-fit-width

Conversation

@sampennington

@sampennington sampennington commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Problem

  • A left-to-right funnel with many steps is too wide to read. Users must scroll sideways to see the later steps.
  • Each step always takes 240px, so an 11-step funnel needs about 2,700px, also on a dashboard card.
  • The legend under each step has four rows and a number chip. The step name gets about half of the step width and truncates early.
  • The drop-off row pairs two different things. The count is the drop-off from the previous step. The percentage is 100% minus the conversion rate.

Changes

Everything below is behind the funnel-steps-bar-labels feature flag. With the flag off, the chart renders as it does on master.

  • Each bar shows its conversion rate as a label on the bar, as a whole percent. The tooltip keeps two decimals.
  • The legend under each step shows only the step name, on a maximum of 2 lines, across the full step width.
  • A click on the step name opens the paths menu. The "⋯" button is gone.
  • The step number, the converted count, the drop-off row and the median time are removed from the legend. The bar tooltip already shows them, and a click on a bar or on its drop-off track still opens the persons list.
  • Steps shrink from 240px to 144px to fit the container. The chart scrolls only below 144px per step.
  • With a breakdown, the chart drops bar labels that would overlap. In the breakdown screenshot, about half of the bars keep a label.
  • Mechanical: the paths links moved out of FunnelStepMore into FunnelStepPathLinks, so the old and the new legend share them. FunnelChart in quill-charts gets a stepFooterAlign option that defaults to the current behavior.
Flag off (master) Flag on
11 steps funnel-11-steps-before funnel-11-steps-after
11 steps, breakdown funnel-breakdown-before funnel-breakdown-after

The screenshots use invented local demo data. They replace the four screenshots of the first commit, which showed the compact legend that no longer ships.

How did you test this code?

  • Loaded an 11-step funnel in the local app with a headless browser, with the flag off and on. Flag off: chart 2,704px wide with the original legend. Flag on: chart 1,648px wide, 11 bar labels, name-only legend.
  • Loaded 6-step and 11-step breakdown funnels with the flag on. Both render with no page errors.
  • Ran oxlint, oxfmt and stylelint on the changed files, and the existing funnelStepsBarTransforms Jest suite.
  • Not checked: a local typecheck, dark mode, the WebKit snapshots, and how the flag resolves on shared dashboards, embeds and image exports.

Test rationale: The new BarLabelsManySteps and BarLabelsBreakdown stories catch a regression in the flag-on layout: steps that scroll again, missing bar labels, or a legend that overlaps. The existing stories keep the flag off, so their snapshots must not change.

Release status

  • No feature flag controls this change
  • This change is behind a feature flag and is not available to users
  • This change makes a previously flagged feature available to everyone

Automatic notifications

  • Publish to changelog?

Docs update

None.

🤖 Agent context

Autonomy: Human-driven (agent-assisted)

Agent: PostHog Desktop (pi), claude-opus-5-5, and Claude Code, claude-opus-5-5

  • The first commit shrank the steps and added a compact form of the four-row legend. Review in the running app led to the redesign: the rate moved onto the bar and the legend became the step name only.
  • Two agent sessions edited the same working tree. One produced the name-only legend with the paths menu and the stepFooterAlign option. The other produced the bar labels and the feature flag.
  • The flag covers the whole redesign, so the first commit's compact legend no longer ships: StepLegend and its styles match master again.
  • An earlier revision had a "Bar labels" display option (percentage, count or both) and a schema field for it. Both are removed: the label is always the percentage.
  • Skills invoked: /writing-ui-components, /working-with-charts, /writing-pr-descriptions.
  • CodeRabbit CLI pass: not run for this update.
  • The sample data in the stories and screenshots is invented.

Created with PostHog Desktop

🤖 Generated with Claude Code

Left-to-right funnel steps now shrink from 240px to 144px to fit the container before the chart scrolls. Below 210px the step legend hides the aggregation noun and tightens padding, and legend rows wrap instead of overlapping the next step.

Generated-By: PostHog Desktop
Task-Id: 6af3b7d8-315c-4147-a368-e399df41ae82
@sampennington sampennington self-assigned this Oct 2, 2026
@trunk-io

trunk-io Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

😎 Merged successfully - details.

@github-actions

github-actions Bot commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

🤖 CI report

✅ Trunk lane — non-backend lane

This PR is assigned to the non-backend lane. It does not run backend Python tests and may merge in parallel with PRs in other lanes.

✅ Complexity (TypeScript) — clean

Cyclomatic complexity above the limit in changed typescript files (10 for production files, 15 for test files). Warn only: worth simplifying when you next touch these functions.

✅ Duplication (Python) — clean

New Python code duplication introduced by this branch. Fails at 70+ tokens in app code, or 150+ tokens when both copies live in test files. Advisory while the gate proves itself: extract a shared helper instead of copying.

✅ Duplication (TypeScript) — clean

New TypeScript code duplication introduced by this branch. Fails at 70+ tokens in app code, or 150+ tokens when both copies live in test files. Advisory while the gate proves itself: extract a shared helper instead of copying.

⚠️ Comment density — 5% of added code lines are comments (12 of 240)

This section warns when comments are more than 3% of the code lines a PR adds, and alerts above 6%. Before agent-assisted PRs, the typical share was about 2%. Only full-line comments count. Docstrings, generated files, snapshots, migrations, and workflow files are left out.

Comments that restate the code, record how the change came about, or narrate the next line add noise for the next reader. Keep the comments that explain a reason the code cannot show, and remove the rest. See .agents/skills/writing-code-comments/SKILL.md for the house rules.

Files with the most added comment lines:

File Comment lines Added lines
packages/quill/packages/charts/src/charts/FunnelChart/FunnelChart.tsx 10 48
products/product_analytics/frontend/insights/funnels/FunnelStepsBarChart/FunnelStepsBarChart.stories.tsx 1 35
products/product_analytics/frontend/insights/funnels/FunnelStepsBarChart/StepNameLabel.tsx 1 51

This check does not block merging. It updates on every push and clears when the share drops.

✅ Bundle size — 🟢 -1.01 MiB (-1.4%)

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

Total: 69.76 MiB · 🟢 -1.01 MiB (-1.4%)

File Size Δ vs base
render-query/src/render-query/render-query.js 18.76 MiB 🟢 -1.47 MiB (-7.3%)
exporter/src/exporter/scenes/ExporterNotebookScene.js 3.88 MiB 🔺 +182.6 KiB (+4.8%)
posthog-app/src/scenes/saved-insights/SavedInsights.js 91.4 KiB 🔺 +79.6 KiB (+676.8%)
exporter/_parent/node_modules/.pnpm/@posthog+hedgehog-mode@0.0.60_prop-types@15.8.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/hedgehog-mode/dist/react-shadow.esm-B4-N-ucD.js 76.7 KiB 🔺 +76.7 KiB (new)
posthog-app/_parent/node_modules/.pnpm/@posthog+hedgehog-mode@0.0.60_prop-types@15.8.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/hedgehog-mode/dist/react-shadow.esm-B4-N-ucD.js 76.7 KiB 🔺 +76.7 KiB (new)
exporter/_parent/node_modules/.pnpm/@posthog+hedgehog-mode@0.0.57_prop-types@15.8.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/hedgehog-mode/dist/react-shadow.esm-CAbukJW8.js removed 🟢 -76.7 KiB (-100.0%)
posthog-app/_parent/node_modules/.pnpm/@posthog+hedgehog-mode@0.0.57_prop-types@15.8.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/hedgehog-mode/dist/react-shadow.esm-CAbukJW8.js removed 🟢 -76.7 KiB (-100.0%)
exporter/_parent/products/subscriptions/frontend/components/Subscriptions/SubscriptionsModal.js 74.3 KiB 🔺 +74.3 KiB (new)
posthog-app/src/scenes/project-homepage/ProjectHomepage.js 1.6 KiB 🟢 -56.7 KiB (-97.2%)
posthog-app/src/scenes/AuthenticatedShell.js 267.8 KiB 🟢 -52.5 KiB (-16.4%)
posthog-app/src/scenes/project-homepage/ai-first/AiFirstHomepage.js 43.4 KiB 🔺 +43.4 KiB (new)
posthog-app/src/layout/today/TodaySpacesPane.js 31.8 KiB 🔺 +31.8 KiB (new)
infrastructure-admin/_parent/products/tasks/frontend/infrastructure/infrastructure-admin.js 606.9 KiB 🔺 +28.6 KiB (+4.9%)
posthog-app/_parent/products/dashboards/frontend/widgets/AddWidgetModal.js 24.2 KiB 🔺 +24.2 KiB (new)
exporter/_parent/products/dashboards/frontend/widgets/AddWidgetModal.js 22.0 KiB 🔺 +22.0 KiB (new)
posthog-app/_parent/products/ai_observability/frontend/scoreDefinitions/AIObservabilityScorerScene.js 21.6 KiB 🔺 +21.6 KiB (new)
posthog-app/src/scenes/project-homepage/today/TodayReportPage.js 18.9 KiB 🔺 +18.9 KiB (new)
exporter/src/lib/components/TerraformExporter/TerraformExportModal.js 17.3 KiB 🔺 +17.3 KiB (new)
exporter/_parent/products/posthog_ai/frontend/scenes/TaskTracker/TaskTracker.js 87.7 KiB 🔺 +10.4 KiB (+13.4%)
posthog-app/src/scenes/project-homepage/today/TodayHome.js 10.3 KiB 🔺 +10.3 KiB (new)
posthog-app/src/scenes/project-homepage/today/TodayReportHoverCardChart.js 10.2 KiB 🔺 +10.2 KiB (new)
posthog-app/src/scenes/dashboard/addInsightToDashboardModal/AddInsightToDashboardModal.js 8.6 KiB 🔺 +8.6 KiB (new)
posthog-app/src/layout/today/TodayViewsSidebar.js 8.5 KiB 🔺 +8.5 KiB (new)
posthog-app/src/layout/today/TodaySessionHoverCard.js 8.2 KiB 🔺 +8.2 KiB (new)
posthog-app/_parent/products/posthog_ai/frontend/scenes/TaskTracker/TaskTracker.js 87.5 KiB 🔺 +7.9 KiB (+9.9%)
toolbar/_parent/node_modules/.pnpm/@posthog+hedgehog-mode@0.0.60_prop-types@15.8.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/hedgehog-mode/dist/chunk-react-shadow.esm-B4-N-ucD.js 7.8 KiB 🔺 +7.8 KiB (new)
toolbar/_parent/node_modules/.pnpm/@posthog+hedgehog-mode@0.0.57_prop-types@15.8.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/hedgehog-mode/dist/chunk-react-shadow.esm-CAbukJW8.js removed 🟢 -7.8 KiB (-100.0%)
posthog-app/_parent/products/ai_observability/frontend/scoreDefinitions/AIObservabilityScorersScene.js 13.6 KiB 🟢 -7.6 KiB (-35.9%)
posthog-app/_parent/products/posthog_ai/frontend/components/tool/widgets/SearchSessionRecordingsWidget.js 4.6 KiB 🟢 -7.6 KiB (-62.2%)
posthog-app/src/scenes/insights/InsightQuickStart/InsightQuickStart.js 9.3 KiB 🟢 -7.1 KiB (-43.5%)
posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyTemplatesScene/CustomerJourneyTemplatesScene.js 11.2 KiB 🟢 -7.0 KiB (-38.3%)
posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewRunScene.js 61.1 KiB 🔺 +6.9 KiB (+12.7%)
posthog-app/src/scenes/project-homepage/today/TodayReportHoverCard.js 6.8 KiB 🔺 +6.8 KiB (new)
exporter/src/scenes/dashboard/addInsightToDashboardModal/AddInsightToDashboardModal.js 6.7 KiB 🔺 +6.7 KiB (new)
posthog-app/src/layout/today/TodaySpaceHoverCard.js 6.6 KiB 🔺 +6.6 KiB (new)
posthog-app/src/scenes/activity/explore/EventDetails.js 6.5 KiB 🔺 +6.5 KiB (new)
posthog-app/src/lib/components/ActivityLog/describers.js 162.5 KiB 🟢 -5.7 KiB (-3.4%)
posthog-app/_parent/products/tasks/frontend/spaces/NewSpaceDialog.js 5.5 KiB 🔺 +5.5 KiB (new)
posthog-app/_parent/products/subscriptions/frontend/components/Subscriptions/SubscriptionsModal.js 5.0 KiB 🔺 +5.0 KiB (new)
posthog-app/src/scenes/project-homepage/today/TodayReportHoverCardMetric.js 4.9 KiB 🔺 +4.9 KiB (new)
posthog-app/src/lib/components/Sharing/SharingModal.js 3.8 KiB 🔺 +3.8 KiB (new)
posthog-app/_parent/products/business_knowledge/frontend/scenes/settings/BusinessKnowledgeSettingsScene.js 13.1 KiB 🟢 -3.6 KiB (-21.6%)
posthog-app/_parent/products/conversations/frontend/scenes/settings/SupportSettingsScene.js 12.3 KiB 🟢 -3.6 KiB (-22.7%)
posthog-app/src/scenes/settings/SettingsMap.js 12.2 KiB 🟢 -3.6 KiB (-22.8%)
posthog-app/src/scenes/settings/SettingsScene.js 15.8 KiB 🟢 -3.6 KiB (-18.6%)
exporter/src/scenes/activity/explore/EventDetails.js 3.6 KiB 🔺 +3.6 KiB (new)
posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsConfigurationScene/CustomerAnalyticsConfigurationScene.js 14.4 KiB 🟢 -3.6 KiB (-19.8%)
posthog-app/_parent/products/error_tracking/frontend/posthogAi/ErrorTrackingWidget.js 13.5 KiB 🟢 -3.5 KiB (-20.4%)
posthog-app/_parent/products/conversations/frontend/scenes/ticket/SupportTicketScene.js 70.3 KiB 🔺 +3.4 KiB (+5.2%)
posthog-app/_parent/products/signals/frontend/inbox/InboxScene.js 479.8 KiB 🟢 -3.4 KiB (-0.7%)
posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ScannerEditorScene.js 59.7 KiB 🟢 -3.4 KiB (-5.4%)
posthog-app/src/scenes/debug/hog/HogRepl.js 8.5 KiB 🟢 -3.1 KiB (-26.9%)
posthog-app/src/scenes/dashboard/Dashboard.js 11.4 KiB 🟢 -3.0 KiB (-20.6%)
posthog-app/src/scenes/dashboard/dashboards/Dashboards.js 38.7 KiB 🟢 -2.8 KiB (-6.7%)
posthog-app/src/scenes/notebooks/NotebookScene.js 34.7 KiB 🟢 -2.5 KiB (-6.8%)
exporter/src/lib/components/Sharing/SharingModal.js 2.3 KiB 🔺 +2.3 KiB (new)
posthog-app/_parent/products/conversations/frontend/components/ComposeTicket/ComposeTicketModal.js 3.5 KiB 🔺 +2.1 KiB (+153.2%)
posthog-app/src/layout/today/TodayToolsSidebar.js 2.1 KiB 🔺 +2.1 KiB (new)
posthog-app/src/queries/nodes/WebVitals/WebVitals.js 15.8 KiB 🟢 -2.0 KiB (-11.4%)
posthog-app/src/queries/Query/Query.js 9.5 KiB 🟢 -2.0 KiB (-17.5%)
posthog-app/src/layout/today/TodayChatHoverCard.js 2.0 KiB 🔺 +2.0 KiB (new)
posthog-app/src/scenes/web-analytics/SessionAttributionExplorer/SessionAttributionExplorerScene.js 15.4 KiB 🟢 -2.0 KiB (-11.5%)
posthog-app/_parent/products/posthog_ai/frontend/components/tool/widgets/CreateInsightWidget.js 10.3 KiB 🟢 -2.0 KiB (-16.3%)
posthog-app/_parent/products/posthog_ai/frontend/components/tool/widgets/QueryWidget.js 10.3 KiB 🟢 -2.0 KiB (-16.2%)
posthog-app/_parent/products/signals/frontend/inbox/components/detail/ReportAiPanel.js 13.2 KiB 🟢 -1.9 KiB (-12.4%)
posthog-app/src/layout/today/TodayLibrarySidebar.js 1.8 KiB 🔺 +1.8 KiB (new)
posthog-app/src/scenes/debug/DebugScene.js 28.3 KiB 🟢 -1.8 KiB (-6.1%)
posthog-app/_parent/products/autoresearch/frontend/AutoresearchPipelineScene.js 52.9 KiB 🟢 -1.8 KiB (-3.3%)
posthog-app/src/layout/panel-layout/navbar/tabs/NavTabChat.js 19.3 KiB 🟢 -1.8 KiB (-8.7%)
posthog-app/_parent/products/groups/frontend/pages/Groups.js 12.8 KiB 🟢 -1.8 KiB (-12.5%)
posthog-app/_parent/products/persons/frontend/pages/PersonsScene.js 15.0 KiB 🟢 -1.8 KiB (-10.8%)
posthog-app/src/scenes/activity/explore/SessionsScene.js 13.3 KiB 🟢 -1.8 KiB (-12.1%)
posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyBuilderScene/CustomerJourneyBuilderScene.js 11.0 KiB 🟢 -1.8 KiB (-14.0%)
exporter/_parent/products/posthog_ai/frontend/components/tool/widgets/SearchSessionRecordingsWidget.js 3.1 KiB 🟢 -1.8 KiB (-36.8%)
posthog-app/_parent/products/posthog_ai/frontend/scenes/TaskTracker/components/SidePanelRunnerImpl.js 15.8 KiB 🟢 -1.8 KiB (-10.0%)
posthog-app/_parent/products/posthog_ai/frontend/scenes/TaskTracker/components/EmbeddedTaskComposerImpl.js 11.0 KiB 🟢 -1.8 KiB (-13.8%)
posthog-app/src/scenes/cohorts/Cohort.js 44.0 KiB 🟢 -1.7 KiB (-3.8%)
posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScannersScene.js 99.8 KiB 🟢 -1.7 KiB (-1.7%)
posthog-app/_parent/products/endpoints/frontend/EndpointScene.js 61.3 KiB 🟢 -1.7 KiB (-2.7%)
posthog-app/src/scenes/experiments/SharedMetrics/SharedMetric.js 18.7 KiB 🟢 -1.7 KiB (-8.3%)
posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner.js 51.5 KiB 🟢 -1.7 KiB (-3.2%)
posthog-app/src/scenes/marketing-analytics/MarketingAnalyticsScene.js 135.4 KiB 🟢 -1.7 KiB (-1.2%)
posthog-app/_parent/products/ai_observability/frontend/tags/AIObservabilityTagScene.js 36.9 KiB 🟢 -1.7 KiB (-4.3%)
posthog-app/_parent/products/ai_observability/frontend/tags/AIObservabilityTagsScene.js 16.9 KiB 🟢 -1.6 KiB (-8.8%)
posthog-app/_parent/products/endpoints/frontend/EndpointsScene.js 37.2 KiB 🟢 -1.6 KiB (-4.1%)
posthog-app/src/scenes/product-tours/ProductTour.js 179.8 KiB 🟢 -1.6 KiB (-0.9%)
posthog-app/_parent/products/business_knowledge/frontend/scenes/playground/BusinessKnowledgePlaygroundScene.js 25.0 KiB 🟢 -1.6 KiB (-5.9%)
posthog-app/_parent/products/replay_vision/frontend/replay_scanners/components/ScannerScoutsTab.js 27.4 KiB 🟢 -1.5 KiB (-5.3%)
posthog-app/_parent/products/ai_observability/frontend/evaluations/EvaluationsScene.js 29.0 KiB 🟢 -1.5 KiB (-5.0%)
posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsAccountScene/CustomerAnalyticsAccountScene.js 56.4 KiB 🟢 -1.5 KiB (-2.6%)
posthog-app/src/scenes/activity/explore/EventsScene.js 12.8 KiB 🟢 -1.5 KiB (-10.4%)
posthog-app/_parent/products/customer_analytics/frontend/CustomerAnalyticsScene.js 11.6 KiB 🟢 -1.5 KiB (-11.5%)
posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingIssueScene/ErrorTrackingIssueScene.js 94.3 KiB 🔺 +1.5 KiB (+1.6%)
posthog-app/_parent/products/ai_observability/frontend/AIObservabilityScene.js 167.1 KiB 🟢 -1.4 KiB (-0.8%)
posthog-app/_parent/products/early_access_features/frontend/EarlyAccessFeature.js 10.9 KiB 🟢 -1.4 KiB (-11.4%)
posthog-app/_parent/products/tasks/frontend/spaces/SpaceScene.js 85.7 KiB 🟢 -1.3 KiB (-1.5%)
posthog-app/_parent/products/ai_observability/frontend/prompts/LLMPromptScene.js 52.5 KiB 🟢 -1.3 KiB (-2.4%)
posthog-app/_parent/products/logs/frontend/LogsScene.js 47.5 KiB 🟢 -1.3 KiB (-2.6%)
posthog-app/src/scenes/experiments/Experiment.js 295.7 KiB 🔺 +1.2 KiB (+0.4%)
posthog-app/_parent/products/actions/frontend/pages/Action.js 11.3 KiB 🟢 -1.2 KiB (-9.8%)
posthog-app/_parent/products/ai_observability/frontend/AIObservabilityTraceScene.js 178.2 KiB 🟢 -1.2 KiB (-0.7%)
exporter/_parent/node_modules/.pnpm/@posthog+hedgehog-mode@0.0.60_prop-types@15.8.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/hedgehog-mode/dist/dist.js 1.2 KiB 🔺 +1.2 KiB (new)
posthog-app/_parent/node_modules/.pnpm/@posthog+hedgehog-mode@0.0.60_prop-types@15.8.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/hedgehog-mode/dist/dist.js 1.2 KiB 🔺 +1.2 KiB (new)
toolbar/_parent/node_modules/.pnpm/@posthog+hedgehog-mode@0.0.60_prop-types@15.8.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/hedgehog-mode/dist/chunk-dist.js 1.2 KiB 🔺 +1.2 KiB (new)
posthog-app/src/scenes/hog-functions/HogFunctionScene.js 55.5 KiB 🟢 -1.1 KiB (-2.0%)
posthog-app/_parent/products/persons/frontend/pages/PersonScene.js 45.2 KiB 🔺 +1.1 KiB (+2.6%)
posthog-app/src/scenes/notebooks/NotebookCanvasScene.js 25.4 KiB 🔺 +1.1 KiB (+4.7%)
posthog-app/src/scenes/notebooks/NotebookPanel/NotebookPanel.js 27.1 KiB 🔺 +1.1 KiB (+4.3%)
posthog-app/_parent/products/groups/frontend/pages/Group.js 35.7 KiB 🔺 +1.1 KiB (+3.3%)
exporter/_parent/node_modules/.pnpm/@posthog+hedgehog-mode@0.0.57_prop-types@15.8.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/hedgehog-mode/dist/dist.js removed 🟢 -1.1 KiB (-100.0%)
posthog-app/_parent/node_modules/.pnpm/@posthog+hedgehog-mode@0.0.57_prop-types@15.8.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/hedgehog-mode/dist/dist.js removed 🟢 -1.1 KiB (-100.0%)
toolbar/_parent/node_modules/.pnpm/@posthog+hedgehog-mode@0.0.57_prop-types@15.8.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/hedgehog-mode/dist/chunk-dist.js removed 🟢 -1.1 KiB (-100.0%)
posthog-app/_parent/products/workflows/frontend/Broadcasts/BroadcastsScene.js 14.1 KiB 🟢 -1.1 KiB (-7.2%)
posthog-app/src/scenes/data-management/definition/DefinitionView.js 36.0 KiB 🟢 -1.1 KiB (-2.9%)
posthog-app/_parent/products/workflows/frontend/WorkflowsScene.js 25.4 KiB 🟢 -1.1 KiB (-4.0%)
posthog-app/src/scenes/session-recordings/kiosk/SessionRecordingsKiosk.js 24.5 KiB 🟢 -1.1 KiB (-4.2%)
posthog-app/src/scenes/session-recordings/player/modal/SessionPlayerModal.js 17.1 KiB 🟢 -1.1 KiB (-5.9%)
posthog-app/_parent/products/replay_vision/frontend/observations/ObservationRecording.js 16.2 KiB 🟢 -1.1 KiB (-6.1%)
posthog-app/src/scenes/session-recordings/detail/SessionRecordingDetail.js 16.5 KiB 🟢 -1.1 KiB (-6.1%)
posthog-app/_parent/products/workflows/frontend/Broadcasts/BroadcastScene.js 83.0 KiB 🟢 -1.1 KiB (-1.3%)
posthog-app/src/scenes/session-recordings/file-playback/SessionRecordingFilePlaybackScene.js 19.2 KiB 🟢 -1.1 KiB (-5.2%)
posthog-app/src/lib/components/TerraformExporter/TerraformExportModal.js 1.0 KiB 🔺 +1.0 KiB (new)
posthog-app/src/scenes/sessions/SessionProfileScene.js 29.4 KiB 🟢 -1.0 KiB (-3.4%)
posthog-app/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluation.js 88.5 KiB 🔺 +1.0 KiB (+1.2%)
posthog-app/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistScene.js 21.5 KiB 🟢 -1021 B (-4.4%)

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.63 MiB · 22 files 🔺 +12.0 KiB (+0.7%) █████████░ 88.7% of 1.84 MiB
logged-out boot: index + App + bootApp (preloaded by every page, including /login)
src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
3.72 MiB · 660 files 🔺 +143.6 KiB (+3.9%) █████████░ 92.3% of 4.03 MiB
authenticated shell (every logged-in page)
src/scenes/AuthenticatedShell.tsx
7.59 MiB · 2,407 files 🟢 -181.1 KiB (-2.3%) █████████░ 91.0% of 8.34 MiB
dashboard scene
src/scenes/dashboard/Dashboard.tsx
9.67 MiB · 3,391 files 🟢 -2.01 MiB (-17.2%) ███████░░░ 71.7% of 13.48 MiB
today home path
src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
7.60 MiB · 2,415 files (no base measurement) █████████░ 88.6% of 8.58 MiB
events scene
src/scenes/activity/explore/EventsScene.tsx
9.28 MiB · 3,243 files 🟢 -1.62 MiB (-14.9%) ███████░░░ 73.5% of 12.64 MiB
replay detail scene
src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
12.12 MiB · 4,129 files 🟢 -1.68 MiB (-12.2%) ████████░░ 77.1% of 15.72 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/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/layout/navigation-3000/navigationLogic.tsx stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/scenes/dashboard/dashboardLogic.tsx stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/lemon-ui/LemonMarkdown/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/components/RichContentEditor/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/components/CodeSnippet/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/taxonomy/core-filter-definitions-by-group.json stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 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
🟢 src/scenes/session-recordings/player/sessionRecordingPlayerLogic.ts 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
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
🟢 src/scenes/project-homepage/today/TodayReportPage.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.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/index.tsx
1.3 KiB src/RootErrorBoundary.tsx
912 B ../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js
854 B src/scenes/ChunkLoadErrorBoundary.tsx
Largest files eagerly shipped from src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
Size File
306.2 KiB ../node_modules/.pnpm/posthog-js@1.435.5_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
220.3 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
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
100.5 KiB src/lib/api.ts
92.5 KiB src/products.tsx
69.4 KiB src/lib/lemon-ui/icons/icons.tsx
40.1 KiB src/lib/utils/eventUsageLogic.ts
38.7 KiB ../node_modules/.pnpm/@dnd-kit+core@6.0.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@dnd-kit/core/dist/core.esm.js
33.9 KiB ../node_modules/.pnpm/kea@4.0.0-pre.6_patch_hash=139b8d1f1304f9d9da452a9a1244c94ea679dbcb85687d8999563146879fb6f5_react@18.3.1/node_modules/kea/lib/index.cjs.js
29.0 KiB ../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.js
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
Size File
306.2 KiB ../node_modules/.pnpm/posthog-js@1.435.5_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
279.9 KiB src/taxonomy/core-filter-definitions-by-group.json
220.3 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
153.7 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
110.0 KiB ../packages/quill/packages/quill/dist/index.js
100.5 KiB src/lib/api.ts
93.3 KiB ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js
92.5 KiB src/products.tsx
90.6 KiB ../node_modules/.pnpm/@tiptap+core@3.20.6_@tiptap+pm@3.20.6/node_modules/@tiptap/core/dist/index.js
Largest files eagerly shipped from src/scenes/dashboard/Dashboard.tsx
Size File
306.2 KiB ../node_modules/.pnpm/posthog-js@1.435.5_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
279.9 KiB src/taxonomy/core-filter-definitions-by-group.json
220.3 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
181.8 KiB src/queries/validators.js
153.7 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
110.0 KiB ../packages/quill/packages/quill/dist/index.js
100.5 KiB src/lib/api.ts
93.3 KiB ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js
92.5 KiB src/products.tsx
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
Size File
306.2 KiB ../node_modules/.pnpm/posthog-js@1.435.5_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
279.9 KiB src/taxonomy/core-filter-definitions-by-group.json
220.3 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
153.7 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
110.0 KiB ../packages/quill/packages/quill/dist/index.js
100.5 KiB src/lib/api.ts
93.3 KiB ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js
92.5 KiB src/products.tsx
90.6 KiB ../node_modules/.pnpm/@tiptap+core@3.20.6_@tiptap+pm@3.20.6/node_modules/@tiptap/core/dist/index.js
Largest files eagerly shipped from src/scenes/activity/explore/EventsScene.tsx
Size File
306.2 KiB ../node_modules/.pnpm/posthog-js@1.435.5_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
279.9 KiB src/taxonomy/core-filter-definitions-by-group.json
220.3 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
181.8 KiB src/queries/validators.js
153.7 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
110.0 KiB ../packages/quill/packages/quill/dist/index.js
100.5 KiB src/lib/api.ts
93.3 KiB ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js
92.5 KiB src/products.tsx
Largest files eagerly shipped from src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
Size File
315.5 KiB ../node_modules/.pnpm/posthog-js@1.435.5_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/rrweb.js
306.2 KiB ../node_modules/.pnpm/posthog-js@1.435.5_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
279.9 KiB src/taxonomy/core-filter-definitions-by-group.json
220.3 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
181.8 KiB src/queries/validators.js
153.7 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
110.0 KiB ../packages/quill/packages/quill/dist/index.js
100.5 KiB src/lib/api.ts
93.3 KiB ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/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

✅ Toolbar bundle — eager 2.20 MiB within budget

What the toolbar ships to customer pages, measured from the esbuild output (minified, post-tree-shake). The eager set is the entry plus everything statically imported from it — fetched before any feature runs; deferred chunks load lazily. The eager guardrail is 5.72 MiB. Each output file must also stay below 10 MB, where CloudFront stops compressing it. The module boundary is enforced separately by check-toolbar-graph.

Metric Size Δ vs base Budget
Eager (shipped)
entry + static imports
2.20 MiB · 19 files 🔺 +1.6 KiB (+0.1%) ████░░░░░░ 38.4% of 5.72 MiB
Deferred (lazy) 2.11 MiB · 44 files 🔺 +9.6 KiB (+0.4%) n/a — loads on demand
Loader dist/toolbar.js 1.2 KiB no change █░░░░░░░░░ 6.0% of 19.5 KiB
Largest eagerly-shipped chunks
Size File
834.2 KiB dist/toolbar/toolbar-app-LXAUZCP3.css
657.5 KiB dist/toolbar/chunk-chunk-D5QRL7HG.js
259.4 KiB dist/toolbar/chunk-chunk-EXS5VGKQ.js
138.2 KiB dist/toolbar/chunk-chunk-4DV5ZX65.js
131.8 KiB dist/toolbar/chunk-chunk-FDH2IBXT.js
75.2 KiB dist/toolbar/toolbar-app-VVJVN46F.js
69.0 KiB dist/toolbar/chunk-chunk-TSAL54PB.js
35.6 KiB dist/toolbar/chunk-chunk-E7J4IONH.js
21.0 KiB dist/toolbar/chunk-chunk-YVKST5AB.js
6.8 KiB dist/toolbar/chunk-chunk-DV7IWQNF.js

Posted automatically by check-toolbar-size · sizes are toolbar output bytes (shipped, post-tree-shake) from the esbuild metafile

✅ Dist folder size — 🟢 -6.90 MiB (-0.7%)

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

Total: 959.88 MiB · 🟢 -6.90 MiB (-0.7%)

ℹ️ MCP UI apps size — 33 app(s), 17633.6 KB JS

Built size of each MCP UI app (main.js + styles.css).

App JS CSS
debug 597.9 KB 199.4 KB
action 454.1 KB 199.4 KB
action-list 564.2 KB 199.4 KB
cohort 453.1 KB 199.4 KB
cohort-list 563.2 KB 199.4 KB
email-template 452.9 KB 199.4 KB
error-details 469.6 KB 199.4 KB
error-issue 454.5 KB 199.4 KB
error-issue-list 564.8 KB 199.4 KB
experiment 561.3 KB 199.4 KB
experiment-list 564.9 KB 199.4 KB
experiment-results 566.3 KB 199.4 KB
feature-flag 566.8 KB 199.4 KB
feature-flag-list 570.5 KB 199.4 KB
feature-flag-testing 457.3 KB 199.4 KB
inline-scan 453.6 KB 199.4 KB
insight-actors 562.3 KB 199.4 KB
invite-email-preview 452.3 KB 199.4 KB
llm-costs 559.3 KB 199.4 KB
session-recording 455.3 KB 199.4 KB
survey 454.7 KB 199.4 KB
survey-global-stats 561.9 KB 199.4 KB
survey-list 564.9 KB 199.4 KB
survey-stats 561.9 KB 199.4 KB
trace-span 453.5 KB 199.4 KB
trace-span-list 564.1 KB 199.4 KB
vision-observation-list 563.3 KB 199.4 KB
workflow 453.4 KB 199.4 KB
workflow-list 563.5 KB 199.4 KB
loops-review 457.8 KB 199.4 KB
query-results 774.3 KB 199.4 KB
render-ui 858.4 KB 199.4 KB
visual-review-snapshots 457.9 KB 199.4 KB
⚠️ Playwright — 1 flaky

🎭 Playwright report · View test results →

⚠️ 1 flaky test:

  • Creating a SQL insight with a variable and overriding it on a dashboard (chromium)

These issues are not necessarily caused by your changes.
Annoyed by this section? Help fix flakies and failures and it will go green!

@greptile-apps

greptile-apps Bot commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Retrigger

[Medium risk] Adds funnel chart labels and legend UI behind a feature flag.

The PR appears safe to merge; no new actionable issue was established.

Reviews (2) · Last reviewed commit: "feat(funnels): always label funnel bars ..."

@coderabbitai

coderabbitai Bot commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
🧰 Additional context used
📚 Code guidelines (2)
.agents/security.md — configured
.agents/skills/writing-code-comments/SKILL.md — configured

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: PostHog/posthog/.coderabbit.yaml

Review profile: QUIET

Plan: Enterprise

Run ID: da5a230d-de49-4b34-bd72-b78703090b5f

📥 Commits

Reviewing files that changed from the base of the PR and between 5275dd2 and da70524.

📒 Files selected for processing (1)
  • frontend/snapshots.yml

Limit details: You’ve used all 12 included reviews currently available.


📝 Walkthrough

Walkthrough

The funnel chart adds a feature-flagged layout with step-name footers, value labels, and responsive widths. Footer alignment can be configured as start or center, with start as the default. Step names can show optional-step indicators and path-link menus. The existing step menu now uses the shared path-link component. New stories cover many-step and breakdown funnels.

Priority: ⬇️ Low

Merge Risk: 🔵 Low · up to da705

Long step names can hide the “(optional)” marker in the funnel legend, making optional steps less apparent. This is a localized presentation issue; no broader merge-blocking risk was identified.

Security Architecture Review

Security architecture risk: ⚪ Minimal · up to da705

The chart changes preserve existing defaults and navigation restrictions. The reviewed changes do not introduce greater data access or privileges, and disabling the feature restores the legacy presentation.

Retained concerns
No architecture-level concerns identified.

Security review details

Security Blast Radius

  • inferred — The inspected changes affect funnel presentation and discoverability of existing path navigation, rather than expanding tenant, service, or credential authority. This conclusion is bounded to the compared chart and navigation code, not a complete downstream authorization audit.

Trust Boundaries and Controls

  • observed — The new step-name menu requires PATHS_ADVANCED availability and excludes group aggregation. These match the legacy StepLegend and FunnelStepMore restrictions. They are preserved UI controls, not evidence of server-side authorization.
🚥 Pre-merge checks | ✅ 1
✅ Passed checks (1 passed)
Check name Status Explanation
Description check ✅ Passed The description follows the required structure and clearly documents the problem, user-visible changes, feature-flag release status, screenshots, testing performed, test rationale, untested areas, and…
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.

Usage-based review receipt

  • Mode: Continue automatically
  • Reviewed files: 1
  • Waived: $0.25 (charged $0.00)
  • View usage details

Note

This review exceeded your plan’s limits and used usage-based reviews—free during trial. After your trial, your Enterprise plan’s existing billing terms apply. Manage usage-based reviews.


Comment @coderabbitai help to get the list of available commands.

@trunk-io

trunk-io Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

Static Badge   Static Badge   Static Badge

Failed Test Failure Summary Logs
compareTopLevelSections() reports a modifiers change when the current query overrides the team default A TypeError occurred because the code attempted to access the 'add' property of an undefined object. Logs ↗︎

View Full Report ↗︎ ⋅ Docs

Behind the funnel-steps-bar-labels flag, the left-to-right funnel shows
the conversion rate as a label on each bar and only the step name under
it. The step name opens the paths menu. Steps shrink from 240px to
144px to fit the container before the chart scrolls.

A "Bar labels" display option picks percentage, count or both, stored
in the new funnelsFilter.stepBarLabels field.

With the flag off the chart renders as on master: StepLegend and its
styles are restored and the steps keep their fixed 240px width.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@sampennington sampennington changed the title feat(funnels): shrink steps to fit width with a compact legend feat(funnels): flag bar labels and a name-only step legend Oct 2, 2026
@hosthog

hosthog Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

HostHog preview — storybook-quill

The previews for this PR have been torn down and no longer serve.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Note

Quiet mode is enabled, so only the most important comments were posted inline. Other review comments are grouped below.

🟡 Other comments (1)
products/product_analytics/frontend/insights/funnels/FunnelStepsBarChart/StepNameLabel.tsx-34-34 (1)

34-34: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Keep the optional indicator outside the name clamp.

If a long step name fills two lines, .StepNameLabel__name hides the following (optional) text. The step then appears required. Clamp only the name, and render the optional indicator outside the clamped element.


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: PostHog/posthog/.coderabbit.yaml

Review profile: QUIET

Plan: Enterprise

Run ID: d8d86f72-befd-4486-ac83-17ae5dff897c

📥 Commits

Reviewing files that changed from the base of the PR and between cd8167b and 37bdad1.

📒 Files selected for processing (19)
  • frontend/src/lib/constants.tsx
  • frontend/src/queries/nodes/InsightViz/DisplayOptions.tsx
  • frontend/src/queries/nodes/InsightViz/insightDisplayOptions.tsx
  • frontend/src/queries/schema.json
  • frontend/src/queries/schema/schema-general.ts
  • frontend/src/scenes/insights/utils/queryUtils.ts
  • packages/quill/packages/charts/src/charts/FunnelChart/FunnelChart.tsx
  • packages/quill/packages/charts/src/docs/chart-types.md
  • posthog/schema.py
  • posthog/schema_enums.py
  • posthog/schema_helpers.py
  • products/product_analytics/frontend/insights/funnels/FunnelStepsBarChart/FunnelBarVertical.scss
  • products/product_analytics/frontend/insights/funnels/FunnelStepsBarChart/FunnelStepsBarChart.stories.tsx
  • products/product_analytics/frontend/insights/funnels/FunnelStepsBarChart/FunnelStepsBarChart.tsx
  • products/product_analytics/frontend/insights/funnels/FunnelStepsBarChart/StepNameLabel.tsx
  • products/product_analytics/frontend/insights/funnels/FunnelStepsBarChart/funnelStepsBarTransforms.ts
  • products/product_analytics/frontend/insights/funnels/filters/FunnelStepBarLabelsPicker.tsx
  • products/product_analytics/frontend/insights/funnels/shared/FunnelStepMore.tsx
  • products/product_analytics/frontend/insights/funnels/shared/FunnelStepPathLinks.tsx

Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 11 remain after this review.

sampennington and others added 2 commits October 2, 2026 14:44
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Remove the bar labels display option and the funnelsFilter.stepBarLabels field. The label is always the conversion rate as a whole percent.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@sampennington
sampennington marked this pull request as ready for review October 2, 2026 14:20
@parameterai

parameterai Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

Risk: No findings

A flag-gated (funnel-steps-bar-labels) redesign of the left-to-right funnel chart: conversion-rate labels on the bars, a name-only step legend, and steps that shrink to fit; the paths menu links are mechanically extracted into FunnelStepPathLinks, and FunnelChart in quill-charts gains a stepFooterAlign option. The change is frontend UI only, with no auth, query, injection, or external-request surface — the one moved trust boundary (the paths deep-links built from the user's own funnel query) is a faithful extraction of the existing code with its guards intact.

Sentinel reviewed 5275dd2 · Review settings

@github-actions

github-actions Bot commented Oct 2, 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 da70524 · box box-7e570c02733a · ready in 715s (push → usable) · build log · rebuilds on every push, torn down on close

@pr-assigner-resolver-posthog
pr-assigner-resolver-posthog Bot requested review from a team October 2, 2026 14:21

@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.

Not approved yet — waiting on the conditions below.

@greptile-apps[bot] still has a review in flight (👀) — not approving over an unfinished review. The review re-runs on the next push, or re-request one once the reviewer finishes.

  • 👍 on the PR from greptile-apps[bot].
Gate mechanics and policy version
Gate Result
prerequisites ✓ all clear
deny-list ✓ no deny categories matched
size ✓ 371L, 9F substantive, 373L/10F incl. docs/generated/snapshots — within ceiling
tier ✓ T1-agent / T1d-complex (373L, 10F, cross-cutting, feat)
stamphog 2.3.1 .stamphog/policy.yml @ 5275dd2 · reviewed head 5275dd2

@posthog

posthog Bot commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

✅ Visual changes approved by @sampennington — baseline updated in da70524.

View this run in PostHog

4 new.

Install the Visual Review Chrome extension to see visual review results at the top of your pull requests.

4 updated
Run: 42d9c275-8110-4980-90f3-034f5a85dce8

Co-authored-by: sampennington <56024559+sampennington@users.noreply.github.com>

@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.

Approved.

Frontend-only UI redesign behind a feature flag with flag-off behavior preserved. It touches no risky territory, and the symbols it imports exist.

  • Author wrote 33% of the modified lines and has 86 merged PRs in these paths (familiarity MODERATE).
  • 👍 on the PR from greptile-apps[bot].
  • Non-blocking: CodeRabbit noted that a long step name filling two lines can clamp away the '(optional)' marker in StepNameLabel. This is a minor cosmetic issue behind the flag.
Gate mechanics and policy version
Gate Result
prerequisites ✓ all clear
deny-list ✓ no deny categories matched
size ✓ 379L, 10F substantive, 381L/11F incl. docs/generated/snapshots — within ceiling
tier ✓ T1-agent / T1d-complex (381L, 11F, cross-cutting, feat)
stamphog 2.3.1 .stamphog/policy.yml @ da70524 · reviewed head da70524

@trunk-io
trunk-io Bot merged commit 634f58a into master Oct 2, 2026
226 checks passed
@trunk-io
trunk-io Bot deleted the posthog/funnel-steps-fit-width branch October 2, 2026 16:42
@deployment-status-posthog

deployment-status-posthog Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

Deploy status

Environment Status Deployed At Workflow
dev ✅ Deployed 2026-10-02 17:09 UTC Run
prod-us ✅ Deployed 2026-10-02 17:24 UTC Run
prod-eu ✅ Deployed 2026-10-02 17:21 UTC Run

This branch was successfully deployed

1 active deployment
preview-pr-110551 — da705242 Deployed Oct 2, 2026 by github-actions[bot]
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