Skip to content

feat(heatmaps): Add cohort filtering to heatmaps#59909

Merged
jordanm-posthog merged 1 commit into
masterfrom
jordanm-posthog/addCohortHeatmapsFilter
May 27, 2026
Merged

feat(heatmaps): Add cohort filtering to heatmaps#59909
jordanm-posthog merged 1 commit into
masterfrom
jordanm-posthog/addCohortHeatmapsFilter

Conversation

@jordanm-posthog
Copy link
Copy Markdown
Contributor

@jordanm-posthog jordanm-posthog commented May 25, 2026

Problem

Previously, it was impossible to filter heatmaps by cohort. This made it difficult to see how different groups interacted with your app

Changes

Adds a new cohort filter on the heatmaps page.

Screen.Recording.2026-05-25.at.9.49.38.AM.mov

How did you test this code?

Locally

👉 Stay up-to-date with PostHog coding conventions for a smoother review.

Publish to changelog?

No

Docs update

🤖 Agent context

@assign-reviewers-posthog assign-reviewers-posthog Bot requested a review from a team May 25, 2026 14:46
@github-actions
Copy link
Copy Markdown
Contributor

🎭 Playwright didn't run on this PR — your changes touch code that could affect E2E behavior, but Playwright is opt-in via label now to keep CI cost down.

Add the run-playwright label if you want an E2E sweep before merging — CI will pick it up automatically.

Most PRs don't need this. Real regressions still get caught on master and fix-forward.

@github-actions
Copy link
Copy Markdown
Contributor

Size Change: 0 B

Total Size: 79.9 MB

ℹ️ View Unchanged
Filename Size Change
frontend/dist-report/decompression-worker/src/scenes/session-recordings/player/snapshot-processing/decompressionWorker 2.85 kB 0 B
frontend/dist-report/exporter/_chunks/chunk 8.33 MB +141 B (0%)
frontend/dist-report/exporter/_parent/products/actions/frontend/pages/Action 24.9 kB 0 B
frontend/dist-report/exporter/_parent/products/actions/frontend/pages/Actions 1.3 kB 0 B
frontend/dist-report/exporter/_parent/products/business_knowledge/frontend/scenes/BusinessKnowledgeScene 19 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/Assignee/CyclotronJobInputAssignee 1.64 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/SlaBusinessHours/CyclotronJobInputBusinessHours 3.02 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/TicketTags/CyclotronJobInputTicketTags 1.02 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/settings/SupportSettingsScene 1.78 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/ticket/SupportTicketScene 33.9 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/tickets/SupportTicketsScene 1.04 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/CustomerAnalyticsScene 35.3 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsConfigurationScene/CustomerAnalyticsConfigurationScene 2.61 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyBuilderScene/CustomerJourneyBuilderScene 2.15 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyTemplatesScene/CustomerJourneyTemplatesScene 7.82 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/DataWarehouseScene 46.7 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/NewSourceScene/NewSourceScene 1.08 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SchemaScene/SchemaScene 24 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SourceScene/SourceScene 1.03 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SourcesScene/SourcesScene 6.27 kB 0 B
frontend/dist-report/exporter/_parent/products/deployments/frontend/Deployment 4.01 kB 0 B
frontend/dist-report/exporter/_parent/products/deployments/frontend/DeploymentProject 5.54 kB 0 B
frontend/dist-report/exporter/_parent/products/deployments/frontend/Deployments 9.27 kB 0 B
frontend/dist-report/exporter/_parent/products/early_access_features/frontend/EarlyAccessFeature 991 B 0 B
frontend/dist-report/exporter/_parent/products/early_access_features/frontend/EarlyAccessFeatures 3.2 kB 0 B
frontend/dist-report/exporter/_parent/products/endpoints/frontend/EndpointScene 40 kB 0 B
frontend/dist-report/exporter/_parent/products/endpoints/frontend/EndpointsScene 24 kB 0 B
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingFingerprintsScene/ErrorTrackingIssueFingerprintsScene 7.34 kB 0 B
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingIssueScene/ErrorTrackingIssueScene 101 kB 0 B
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingScene/ErrorTrackingScene 27.1 kB 0 B
frontend/dist-report/exporter/_parent/products/feature_flags/frontend/FeatureFlagTemplatesScene 7.34 kB 0 B
frontend/dist-report/exporter/_parent/products/games/368Hedgehogs/368Hedgehogs 5.58 kB 0 B
frontend/dist-report/exporter/_parent/products/games/FlappyHog/FlappyHog 6.09 kB 0 B
frontend/dist-report/exporter/_parent/products/legal_documents/frontend/scenes/LegalDocumentNewScene 59.7 kB 0 B
frontend/dist-report/exporter/_parent/products/legal_documents/frontend/scenes/LegalDocumentsScene 5.28 kB 0 B
frontend/dist-report/exporter/_parent/products/links/frontend/LinkScene 25.2 kB 0 B
frontend/dist-report/exporter/_parent/products/links/frontend/LinksScene 4.51 kB 0 B
frontend/dist-report/exporter/_parent/products/live_debugger/frontend/LiveDebugger 19.4 kB 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/clusters/LLMAnalyticsClusterScene 21.6 kB 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/clusters/LLMAnalyticsClustersScene 54.9 kB 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/datasets/LLMAnalyticsDatasetScene 20.9 kB 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/datasets/LLMAnalyticsDatasetsScene 3.59 kB 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/evaluations/EvaluationTemplates 881 B 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/evaluations/LLMAnalyticsEvaluation 59.8 kB 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/evaluations/LLMAnalyticsEvaluationsScene 28.1 kB 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/LLMAnalyticsScene 118 kB 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/LLMAnalyticsSessionScene 14.9 kB 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/LLMAnalyticsTraceScene 130 kB 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/LLMAnalyticsUsers 832 B 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/LLMASessionFeedbackDisplay 5.15 kB 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/playground/LLMAnalyticsPlaygroundScene 37.7 kB 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/prompts/LLMPromptScene 29.1 kB 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/prompts/LLMPromptsScene 4.79 kB 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/skills/LLMSkillScene 895 B 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/skills/LLMSkillsScene 912 B 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/tags/LLMAnalyticsTag 27.4 kB 0 B
frontend/dist-report/exporter/_parent/products/llm_analytics/frontend/tags/LLMAnalyticsTagsScene 7.26 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/LogsScene 17.9 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsAlertDetailScene/LogsAlertDetailScene 17.3 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsSamplingDetailScene/LogsSamplingDetailScene 5.27 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsSamplingNewScene/LogsSamplingNewScene 2.21 kB 0 B
frontend/dist-report/exporter/_parent/products/managed_migrations/frontend/ManagedMigration 14.9 kB 0 B
frontend/dist-report/exporter/_parent/products/mcp_analytics/frontend/MCPAnalyticsScene 38.4 kB 0 B
frontend/dist-report/exporter/_parent/products/mcp_analytics/frontend/MCPAnalyticsToolDetail 18.5 kB 0 B
frontend/dist-report/exporter/_parent/products/metrics/frontend/MetricsScene 1.15 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/StickinessLineChart/StickinessLineChart 4.89 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsBarChart/TrendsBarChart 6.87 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsLifecycleChart/TrendsLifecycleChart 4.07 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsLineChart/TrendsLineChart 4.46 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsPieChart/TrendsPieChart 4.31 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner 22.2 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ReplayScannersScene 12.4 kB 0 B
frontend/dist-report/exporter/_parent/products/revenue_analytics/frontend/RevenueAnalyticsScene 25.9 kB 0 B
frontend/dist-report/exporter/_parent/products/session_summaries/frontend/SessionGroupSummariesTable 5.01 kB 0 B
frontend/dist-report/exporter/_parent/products/session_summaries/frontend/SessionGroupSummaryScene 19.2 kB 0 B
frontend/dist-report/exporter/_parent/products/tasks/frontend/TaskDetailScene 23.5 kB 0 B
frontend/dist-report/exporter/_parent/products/tasks/frontend/TaskTracker 14.6 kB 0 B
frontend/dist-report/exporter/_parent/products/tracing/frontend/TracingScene 54 kB 0 B
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterview 6.81 kB 0 B
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterviewResponse 5.64 kB 0 B
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterviews 4.15 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewIndexScene 2.52 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewRunScene 44.6 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewRunsScene 7.28 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewSettingsScene 11.1 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotHistoryScene 13.9 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotOverviewScene 19.5 kB 0 B
frontend/dist-report/exporter/_parent/products/workflows/frontend/TemplateLibrary/MessageTemplate 16.6 kB 0 B
frontend/dist-report/exporter/_parent/products/workflows/frontend/Workflows/WorkflowScene 111 kB 0 B
frontend/dist-report/exporter/_parent/products/workflows/frontend/WorkflowsScene 60.1 kB 0 B
frontend/dist-report/exporter/src/exporter/exporter 19.1 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterDashboardScene 1.95 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterHeatmapScene 19.6 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterInsightScene 2.98 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterInterviewScene 309 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterNotebookScene 2.71 MB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterRecordingScene 1.1 kB 0 B
frontend/dist-report/exporter/src/exporterSharedChunkAnchors 1.19 kB 0 B
frontend/dist-report/exporter/src/lib/components/Cards/TextCard/TextCardMarkdownEditor 11.3 kB 0 B
frontend/dist-report/exporter/src/lib/components/MonacoDiffEditor 471 B 0 B
frontend/dist-report/exporter/src/lib/lemon-ui/LemonMarkdown/MermaidDiagram 2.22 kB 0 B
frontend/dist-report/exporter/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown 808 B 0 B
frontend/dist-report/exporter/src/lib/lemon-ui/Link/Link 359 B 0 B
frontend/dist-report/exporter/src/lib/monaco/CodeEditorInline 798 B 0 B
frontend/dist-report/exporter/src/lib/monaco/vimMode 211 kB 0 B
frontend/dist-report/exporter/src/lib/ui/Button/ButtonPrimitives 422 B 0 B
frontend/dist-report/exporter/src/queries/nodes/WebVitals/WebVitals 7.48 kB 0 B
frontend/dist-report/exporter/src/queries/nodes/WebVitals/WebVitalsPathBreakdown 3.96 kB 0 B
frontend/dist-report/exporter/src/queries/schema 723 kB 0 B
frontend/dist-report/exporter/src/scenes/approvals/changeRequestsLogic 850 B 0 B
frontend/dist-report/exporter/src/scenes/authentication/passkeyLogic 790 B 0 B
frontend/dist-report/exporter/src/scenes/data-pipelines/TransformationsScene 6.51 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/BoxPlot/BoxPlot 5.36 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/CalendarHeatMap/CalendarHeatMap 9.11 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/RegionMap/RegionMap 29.7 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/WorldMap/WorldMap 1.04 MB 0 B
frontend/dist-report/exporter/src/scenes/models/ModelsScene 19 kB 0 B
frontend/dist-report/exporter/src/scenes/models/NodeDetailScene 17 kB 0 B
frontend/dist-report/monaco-editor-worker/src/lib/monaco/workers/monacoEditorWorker 288 kB 0 B
frontend/dist-report/monaco-json-worker/src/lib/monaco/workers/monacoJsonWorker 419 kB 0 B
frontend/dist-report/monaco-typescript-worker/src/lib/monaco/workers/monacoTsWorker 7.02 MB 0 B
frontend/dist-report/posthog-app/_chunks/chunk 8.53 MB +141 B (0%)
frontend/dist-report/posthog-app/_parent/products/actions/frontend/pages/Action 25.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/actions/frontend/pages/Actions 1.36 kB 0 B
frontend/dist-report/posthog-app/_parent/products/business_knowledge/frontend/scenes/BusinessKnowledgeScene 19 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/Assignee/CyclotronJobInputAssignee 1.67 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/SlaBusinessHours/CyclotronJobInputBusinessHours 3.06 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/TicketTags/CyclotronJobInputTicketTags 1.06 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/settings/SupportSettingsScene 1.82 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/ticket/SupportTicketScene 26.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/tickets/SupportTicketsScene 1.07 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/CustomerAnalyticsScene 34 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsConfigurationScene/CustomerAnalyticsConfigurationScene 2.65 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyBuilderScene/CustomerJourneyBuilderScene 2.18 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyTemplatesScene/CustomerJourneyTemplatesScene 7.86 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/DataWarehouseScene 1.74 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/NewSourceScene/NewSourceScene 1.15 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SchemaScene/SchemaScene 24.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SourceScene/SourceScene 1.06 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SourcesScene/SourcesScene 6.31 kB 0 B
frontend/dist-report/posthog-app/_parent/products/deployments/frontend/Deployment 4.05 kB 0 B
frontend/dist-report/posthog-app/_parent/products/deployments/frontend/DeploymentProject 5.58 kB 0 B
frontend/dist-report/posthog-app/_parent/products/deployments/frontend/Deployments 9.31 kB 0 B
frontend/dist-report/posthog-app/_parent/products/early_access_features/frontend/EarlyAccessFeature 1.16 kB 0 B
frontend/dist-report/posthog-app/_parent/products/early_access_features/frontend/EarlyAccessFeatures 3.24 kB 0 B
frontend/dist-report/posthog-app/_parent/products/endpoints/frontend/EndpointScene 40.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/endpoints/frontend/EndpointsScene 21.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingFingerprintsScene/ErrorTrackingIssueFingerprintsScene 7.38 kB 0 B
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingIssueScene/ErrorTrackingIssueScene 101 kB 0 B
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingScene/ErrorTrackingScene 27.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/feature_flags/frontend/FeatureFlagTemplatesScene 7.38 kB 0 B
frontend/dist-report/posthog-app/_parent/products/games/368Hedgehogs/368Hedgehogs 5.61 kB 0 B
frontend/dist-report/posthog-app/_parent/products/games/FlappyHog/FlappyHog 6.12 kB 0 B
frontend/dist-report/posthog-app/_parent/products/legal_documents/frontend/scenes/LegalDocumentNewScene 59.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/legal_documents/frontend/scenes/LegalDocumentsScene 5.31 kB 0 B
frontend/dist-report/posthog-app/_parent/products/links/frontend/LinkScene 25.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/links/frontend/LinksScene 4.55 kB 0 B
frontend/dist-report/posthog-app/_parent/products/live_debugger/frontend/LiveDebugger 19.5 kB 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/clusters/LLMAnalyticsClusterScene 21.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/clusters/LLMAnalyticsClustersScene 55 kB 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/datasets/LLMAnalyticsDatasetScene 21 kB 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/datasets/LLMAnalyticsDatasetsScene 3.63 kB 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/evaluations/EvaluationTemplates 915 B 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/evaluations/LLMAnalyticsEvaluation 59.8 kB 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/evaluations/LLMAnalyticsEvaluationsScene 28.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/LLMAnalyticsScene 119 kB 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/LLMAnalyticsSessionScene 15 kB 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/LLMAnalyticsTraceScene 130 kB 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/LLMAnalyticsUsers 866 B 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/LLMASessionFeedbackDisplay 5.18 kB 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/playground/LLMAnalyticsPlaygroundScene 37.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/prompts/LLMPromptScene 29.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/prompts/LLMPromptsScene 4.82 kB 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/skills/LLMSkillScene 929 B 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/skills/LLMSkillsScene 946 B 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/tags/LLMAnalyticsTag 27.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/llm_analytics/frontend/tags/LLMAnalyticsTagsScene 7.29 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/LogsScene 17.8 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsAlertDetailScene/LogsAlertDetailScene 17.3 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsSamplingDetailScene/LogsSamplingDetailScene 5.31 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsSamplingNewScene/LogsSamplingNewScene 2.26 kB 0 B
frontend/dist-report/posthog-app/_parent/products/managed_migrations/frontend/ManagedMigration 14.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/mcp_analytics/frontend/MCPAnalyticsScene 38.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/mcp_analytics/frontend/MCPAnalyticsToolDetail 18.5 kB 0 B
frontend/dist-report/posthog-app/_parent/products/metrics/frontend/MetricsScene 1.18 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/StickinessLineChart/StickinessLineChart 4.93 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsBarChart/TrendsBarChart 6.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsLifecycleChart/TrendsLifecycleChart 4.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsLineChart/TrendsLineChart 4.49 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsPieChart/TrendsPieChart 4.35 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner 22.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScannersScene 12.5 kB 0 B
frontend/dist-report/posthog-app/_parent/products/revenue_analytics/frontend/RevenueAnalyticsScene 26 kB 0 B
frontend/dist-report/posthog-app/_parent/products/session_summaries/frontend/SessionGroupSummariesTable 5.05 kB 0 B
frontend/dist-report/posthog-app/_parent/products/session_summaries/frontend/SessionGroupSummaryScene 19.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/tasks/frontend/TaskDetailScene 23.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/tasks/frontend/TaskTracker 14.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/tracing/frontend/TracingScene 54.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterview 6.85 kB 0 B
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterviewResponse 5.68 kB 0 B
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterviews 4.19 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewIndexScene 2.56 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewRunScene 44.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewRunsScene 7.32 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewSettingsScene 11.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotHistoryScene 13.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotOverviewScene 19.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/workflows/frontend/TemplateLibrary/MessageTemplate 16.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/workflows/frontend/Workflows/WorkflowScene 104 kB 0 B
frontend/dist-report/posthog-app/_parent/products/workflows/frontend/WorkflowsScene 60.2 kB 0 B
frontend/dist-report/posthog-app/src/index 61 kB 0 B
frontend/dist-report/posthog-app/src/layout/panel-layout/ai-first/tabs/NavTabChat 6.85 kB 0 B
frontend/dist-report/posthog-app/src/lib/components/Cards/TextCard/TextCardMarkdownEditor 11.3 kB 0 B
frontend/dist-report/posthog-app/src/lib/components/MonacoDiffEditor 471 B 0 B
frontend/dist-report/posthog-app/src/lib/lemon-ui/LemonMarkdown/MermaidDiagram 2.25 kB 0 B
frontend/dist-report/posthog-app/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown 842 B 0 B
frontend/dist-report/posthog-app/src/lib/lemon-ui/Link/Link 359 B 0 B
frontend/dist-report/posthog-app/src/lib/monaco/CodeEditorInline 832 B 0 B
frontend/dist-report/posthog-app/src/lib/monaco/vimMode 211 kB 0 B
frontend/dist-report/posthog-app/src/lib/ui/Button/ButtonPrimitives 426 B 0 B
frontend/dist-report/posthog-app/src/queries/nodes/WebVitals/WebVitals 7.52 kB 0 B
frontend/dist-report/posthog-app/src/queries/nodes/WebVitals/WebVitalsPathBreakdown 4 kB 0 B
frontend/dist-report/posthog-app/src/queries/schema 723 kB 0 B
frontend/dist-report/posthog-app/src/scenes/activity/explore/EventsScene 3.28 kB 0 B
frontend/dist-report/posthog-app/src/scenes/activity/explore/SessionsScene 4.69 kB 0 B
frontend/dist-report/posthog-app/src/scenes/activity/live/LiveEventsTable 5.58 kB 0 B
frontend/dist-report/posthog-app/src/scenes/agentic/AgenticAuthorize 5.84 kB 0 B
frontend/dist-report/posthog-app/src/scenes/approvals/ApprovalDetail 16.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/approvals/changeRequestsLogic 884 B 0 B
frontend/dist-report/posthog-app/src/scenes/audit-logs/AdvancedActivityLogsScene 40 kB 0 B
frontend/dist-report/posthog-app/src/scenes/AuthenticatedShell 171 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/AccountConnected 3.33 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/AgenticAccountMismatch 2.73 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/CLIAuthorize 11.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/CLILive 4.37 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/credential-review/CredentialReview 3.9 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/EmailMFAVerify 3.36 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/InviteSignup 15.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/Login 10.2 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/Login2FA 4.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/passkeyLogic 824 B 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/PasswordReset 4.71 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/PasswordResetComplete 3.34 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/signup/SignupContainer 28.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/signup/verify-email/VerifyEmail 5.12 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/TwoFactorReset 4.37 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/VercelConnect 5.33 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/VercelLinkError 2.61 kB 0 B
frontend/dist-report/posthog-app/src/scenes/billing/AuthorizationStatus 1.07 kB 0 B
frontend/dist-report/posthog-app/src/scenes/billing/Billing 833 B 0 B
frontend/dist-report/posthog-app/src/scenes/billing/BillingSection 21.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/cohorts/Cohort 28.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/cohorts/CohortCalculationHistory 6.58 kB 0 B
frontend/dist-report/posthog-app/src/scenes/cohorts/Cohorts 9.78 kB 0 B
frontend/dist-report/posthog-app/src/scenes/coupons/Coupons 1.06 kB 0 B
frontend/dist-report/posthog-app/src/scenes/dashboard/Dashboard 1.62 kB 0 B
frontend/dist-report/posthog-app/src/scenes/dashboard/dashboards/Dashboards 19.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/dashboard/dashboards/templates/DashboardTemplateCopyScene 6.06 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/DataManagementScene 986 B 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/definition/DefinitionEdit 17.2 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/definition/DefinitionView 24.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/MaterializedColumns/MaterializedColumns 12 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/variables/SqlVariableEditScene 7.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/batch-exports/BatchExportScene 60.9 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/DataPipelinesNewScene 2.66 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/DestinationsScene 3.03 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/legacy-plugins/LegacyPluginScene 21 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/TransformationsScene 2.27 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/WebScriptsScene 2.89 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-warehouse/DataWarehouseScene 1.69 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-warehouse/editor/EditorScene 1.48 kB 0 B
frontend/dist-report/posthog-app/src/scenes/debug/DebugScene 20.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/debug/hog/HogRepl 7.72 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/Experiment 206 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/Experiments 20.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/SharedMetrics/SharedMetric 6.41 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/SharedMetrics/SharedMetrics 889 B 0 B
frontend/dist-report/posthog-app/src/scenes/exports/ExportsScene 4.33 kB 0 B
frontend/dist-report/posthog-app/src/scenes/feature-flags/FeatureFlag 146 kB 0 B
frontend/dist-report/posthog-app/src/scenes/feature-flags/FeatureFlags 1.08 kB 0 B
frontend/dist-report/posthog-app/src/scenes/groups/Group 15.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/groups/Groups 4.26 kB 0 B
frontend/dist-report/posthog-app/src/scenes/groups/GroupsNew 7.69 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health/categoryDetail/HealthCategoryDetailScene 7.59 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health/HealthScene 12.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health/pipelineStatus/PipelineStatusScene 9.45 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapNewScene 5.38 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapRecordingScene 4.27 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapScene 6.9 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmaps/HeatmapsScene 4.23 kB 0 B
frontend/dist-report/posthog-app/src/scenes/hog-functions/HogFunctionScene 59.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/inbox/InboxScene 63.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/InsightQuickStart/InsightQuickStart 5.77 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/InsightScene 34.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/views/BoxPlot/BoxPlot 5.39 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/views/CalendarHeatMap/CalendarHeatMap 5.14 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/views/RegionMap/RegionMap 29.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/views/WorldMap/WorldMap 5.13 kB 0 B
frontend/dist-report/posthog-app/src/scenes/instance/AsyncMigrations/AsyncMigrations 13.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/instance/DeadLetterQueue/DeadLetterQueue 5.74 kB 0 B
frontend/dist-report/posthog-app/src/scenes/instance/QueryPerformance/QueryPerformance 8.97 kB 0 B
frontend/dist-report/posthog-app/src/scenes/instance/SystemStatus/SystemStatus 17.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/IntegrationsRedirect/IntegrationsRedirect 1.08 kB 0 B
frontend/dist-report/posthog-app/src/scenes/marketing-analytics/MarketingAnalyticsScene 40.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/max/Max 990 B 0 B
frontend/dist-report/posthog-app/src/scenes/models/ModelsScene 19 kB 0 B
frontend/dist-report/posthog-app/src/scenes/models/NodeDetailScene 17 kB 0 B
frontend/dist-report/posthog-app/src/scenes/moveToPostHogCloud/MoveToPostHogCloud 4.81 kB 0 B
frontend/dist-report/posthog-app/src/scenes/new-tab/NewTabScene 1.82 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookCanvasScene 3.82 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookPanel/NotebookPanel 5.79 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookScene 9.03 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebooksScene 7.95 kB 0 B
frontend/dist-report/posthog-app/src/scenes/oauth/OAuthAuthorize 980 B 0 B
frontend/dist-report/posthog-app/src/scenes/onboarding/coupon/OnboardingCouponRedemption 1.55 kB 0 B
frontend/dist-report/posthog-app/src/scenes/onboarding/Onboarding 790 kB 0 B
frontend/dist-report/posthog-app/src/scenes/onboarding/sdks/SdkDoctorScene 9.77 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/ConfirmOrganization/ConfirmOrganization 4.87 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/Create/Create 1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/Deactivated 1.48 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/PendingDeletion 2.45 kB 0 B
frontend/dist-report/posthog-app/src/scenes/persons/PersonScene 19 kB 0 B
frontend/dist-report/posthog-app/src/scenes/persons/PersonsScene 6.09 kB 0 B
frontend/dist-report/posthog-app/src/scenes/PreflightCheck/PreflightCheck 5.91 kB 0 B
frontend/dist-report/posthog-app/src/scenes/product-tours/ProductTour 275 kB 0 B
frontend/dist-report/posthog-app/src/scenes/product-tours/ProductTours 5.03 kB 0 B
frontend/dist-report/posthog-app/src/scenes/project-homepage/ProjectHomepage 18.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/project/Create/Create 1.18 kB 0 B
frontend/dist-report/posthog-app/src/scenes/resource-transfer/ResourceTransfer 9.53 kB 0 B
frontend/dist-report/posthog-app/src/scenes/saved-insights/SavedInsights 1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/detail/SessionRecordingDetail 2.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/file-playback/SessionRecordingFilePlaybackScene 4.82 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/kiosk/SessionRecordingsKiosk 10.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/player/snapshot-processing/DecompressionWorkerManager 329 B 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistScene 5.45 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/SessionRecordings 1.12 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/settings/SessionRecordingsSettingsScene 2.31 kB 0 B
frontend/dist-report/posthog-app/src/scenes/sessions/SessionProfileScene 15.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/settings/SettingsScene 3.9 kB 0 B
frontend/dist-report/posthog-app/src/scenes/sites/Site 1.53 kB 0 B
frontend/dist-report/posthog-app/src/scenes/startups/StartupProgram 21.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/StripeConfirmInstall/StripeConfirmInstall 3.88 kB 0 B
frontend/dist-report/posthog-app/src/scenes/subscriptions/SubscriptionScene 14.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/subscriptions/SubscriptionsScene 5.53 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/forms/SurveyFormBuilder 1.89 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/Survey 1.36 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/Surveys 26.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/wizard/SurveyWizard 72.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/themes/CustomCssScene 3.91 kB 0 B
frontend/dist-report/posthog-app/src/scenes/toolbar-launch/ToolbarLaunch 2.82 kB 0 B
frontend/dist-report/posthog-app/src/scenes/Unsubscribe/Unsubscribe 2 kB 0 B
frontend/dist-report/posthog-app/src/scenes/web-analytics/SessionAttributionExplorer/SessionAttributionExplorerScene 6.97 kB 0 B
frontend/dist-report/posthog-app/src/scenes/web-analytics/WebAnalyticsScene 10.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/wizard/Wizard 4.8 kB 0 B
frontend/dist-report/posthog-app/src/sharedChunkAnchors 1.19 kB 0 B
frontend/dist-report/render-query/src/render-query/render-query 27.2 MB +189 B (0%)
frontend/dist-report/toolbar/src/toolbar/toolbar 15.6 MB +189 B (0%)

compressed-size-action

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 25, 2026

Prompt To Fix All With AI
Fix the following 3 code review issues. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 3
frontend/src/lib/components/heatmaps/heatmapDataLogic.ts:190
**Cohort IDs serialisation mismatch with backend**

`cohort_ids` is passed to `encodeParams` as a raw `number[]`, but the backend `validate_cohort_ids` deserialises it with `json.loads(value)`, which expects a JSON-encoded string like `"[1,2]"`. `encodeParams` (from kea-router) serialises arrays as repeated query-string entries (`?cohort_ids=1&cohort_ids=2`), and Django's `CharField` serialiser receives only one of those values; `loads("1")` produces an integer, which immediately fails the `isinstance(cohort_ids, list)` check. Notice that `points` on the same call is explicitly wrapped in `JSON.stringify``cohort_ids` needs the same treatment. The same issue applies to all three call sites in this file.

### Issue 2 of 3
products/web_analytics/backend/api/heatmaps_api.py:389-398
**Multiple cohorts are ANDed, not ORed**

Each cohort ID appends its own predicate to `predicate_expressions`, and the entire list is later combined with `ast.And(exprs=exprs)`. Selecting two cohorts therefore requires a visitor to be in *both* cohorts simultaneously. If the intent is to show data for visitors belonging to *any* of the selected cohorts, the per-cohort sub-queries should be combined with OR and the result ANDed into the outer list as a single expression: `ast.Or(exprs=[...per-cohort-exprs...])`. Even if AND semantics are intentional, this is worth documenting so future reviewers don't assume OR.

### Issue 3 of 3
products/web_analytics/backend/api/heatmaps_api.py:292-295
**Feature-flag gate silently drops cohort filter instead of rejecting the request**

When the flag is off, `cohort_ids` is popped and the query runs without the filter, so the caller receives unfiltered results with no indication the filter was ignored. A caller (or a UI bug) that sends cohort IDs while the flag is disabled will silently get wrong data. Returning a 403 or a validation error would make the boundary explicit. The same pattern repeats in the `events` action.

Reviews (1): Last reviewed commit: "Add cohort filtering to heatmaps" | Re-trigger Greptile

viewport_width_max: values.viewportRange.max,
aggregation,
filter_test_accounts,
cohort_ids: cohort_ids && cohort_ids.length > 0 ? cohort_ids : undefined,
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.

P1 Cohort IDs serialisation mismatch with backend

cohort_ids is passed to encodeParams as a raw number[], but the backend validate_cohort_ids deserialises it with json.loads(value), which expects a JSON-encoded string like "[1,2]". encodeParams (from kea-router) serialises arrays as repeated query-string entries (?cohort_ids=1&cohort_ids=2), and Django's CharField serialiser receives only one of those values; loads("1") produces an integer, which immediately fails the isinstance(cohort_ids, list) check. Notice that points on the same call is explicitly wrapped in JSON.stringifycohort_ids needs the same treatment. The same issue applies to all three call sites in this file.

Prompt To Fix With AI
This is a comment left during a code review.
Path: frontend/src/lib/components/heatmaps/heatmapDataLogic.ts
Line: 190

Comment:
**Cohort IDs serialisation mismatch with backend**

`cohort_ids` is passed to `encodeParams` as a raw `number[]`, but the backend `validate_cohort_ids` deserialises it with `json.loads(value)`, which expects a JSON-encoded string like `"[1,2]"`. `encodeParams` (from kea-router) serialises arrays as repeated query-string entries (`?cohort_ids=1&cohort_ids=2`), and Django's `CharField` serialiser receives only one of those values; `loads("1")` produces an integer, which immediately fails the `isinstance(cohort_ids, list)` check. Notice that `points` on the same call is explicitly wrapped in `JSON.stringify``cohort_ids` needs the same treatment. The same issue applies to all three call sites in this file.

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +389 to +398
cohort_ids_expr = placeholders.get("cohort_ids")
if isinstance(cohort_ids_expr, ast.Array):
for cohort_id_expr in cohort_ids_expr.exprs:
predicate_expressions.append(
parse_expr(
"distinct_id IN (SELECT distinct_id FROM person_distinct_ids "
"WHERE person_id IN COHORT {cohort_id})",
{"cohort_id": cohort_id_expr},
)
)
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.

P1 Multiple cohorts are ANDed, not ORed

Each cohort ID appends its own predicate to predicate_expressions, and the entire list is later combined with ast.And(exprs=exprs). Selecting two cohorts therefore requires a visitor to be in both cohorts simultaneously. If the intent is to show data for visitors belonging to any of the selected cohorts, the per-cohort sub-queries should be combined with OR and the result ANDed into the outer list as a single expression: ast.Or(exprs=[...per-cohort-exprs...]). Even if AND semantics are intentional, this is worth documenting so future reviewers don't assume OR.

Prompt To Fix With AI
This is a comment left during a code review.
Path: products/web_analytics/backend/api/heatmaps_api.py
Line: 389-398

Comment:
**Multiple cohorts are ANDed, not ORed**

Each cohort ID appends its own predicate to `predicate_expressions`, and the entire list is later combined with `ast.And(exprs=exprs)`. Selecting two cohorts therefore requires a visitor to be in *both* cohorts simultaneously. If the intent is to show data for visitors belonging to *any* of the selected cohorts, the per-cohort sub-queries should be combined with OR and the result ANDed into the outer list as a single expression: `ast.Or(exprs=[...per-cohort-exprs...])`. Even if AND semantics are intentional, this is worth documenting so future reviewers don't assume OR.

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +292 to +295
if request_serializer.validated_data.get("cohort_ids") and not _heatmaps_cohort_filter_enabled(
cast(User, request.user), self.team
):
request_serializer.validated_data.pop("cohort_ids")
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.

P2 Feature-flag gate silently drops cohort filter instead of rejecting the request

When the flag is off, cohort_ids is popped and the query runs without the filter, so the caller receives unfiltered results with no indication the filter was ignored. A caller (or a UI bug) that sends cohort IDs while the flag is disabled will silently get wrong data. Returning a 403 or a validation error would make the boundary explicit. The same pattern repeats in the events action.

Prompt To Fix With AI
This is a comment left during a code review.
Path: products/web_analytics/backend/api/heatmaps_api.py
Line: 292-295

Comment:
**Feature-flag gate silently drops cohort filter instead of rejecting the request**

When the flag is off, `cohort_ids` is popped and the query runs without the filter, so the caller receives unfiltered results with no indication the filter was ignored. A caller (or a UI bug) that sends cohort IDs while the flag is disabled will silently get wrong data. Returning a 403 or a validation error would make the boundary explicit. The same pattern repeats in the `events` action.

How can I resolve this? If you propose a fix, please make it concise.

@github-actions
Copy link
Copy Markdown
Contributor

ClickHouse migration SQL per cloud environment

No ClickHouse migrations changed in this PR.

Copy link
Copy Markdown
Contributor

@arthurdedeus arthurdedeus left a comment

Choose a reason for hiding this comment

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

Nice! Love the videos

@jordanm-posthog jordanm-posthog merged commit 81265f3 into master May 27, 2026
239 checks passed
@jordanm-posthog jordanm-posthog deleted the jordanm-posthog/addCohortHeatmapsFilter branch May 27, 2026 16:29
@inkeep
Copy link
Copy Markdown
Contributor

inkeep Bot commented May 27, 2026

👋 I analyzed this PR for documentation updates, but the cohort filtering feature is gated behind the HEATMAPS_COHORT_FILTER feature flag.

I'll hold off on creating documentation until the flag is removed and the feature is publicly available. Once that happens, the heatmaps documentation will need to be updated to cover the new cohort filtering capability.

@deployment-status-posthog
Copy link
Copy Markdown

deployment-status-posthog Bot commented May 27, 2026

Deploy status

Environment Status Deployed At Workflow
dev ✅ Deployed 2026-05-27 17:05 UTC Run
prod-us ✅ Deployed 2026-05-27 17:27 UTC Run
prod-eu ✅ Deployed 2026-05-27 17:21 UTC Run

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants