Skip to content

feat(feature-flags): implement early exit functionality for feature flag conditions#57321

Open
gustavohstrassburger wants to merge 26 commits into
masterfrom
gustavo/early-exit-flags
Open

feat(feature-flags): implement early exit functionality for feature flag conditions#57321
gustavohstrassburger wants to merge 26 commits into
masterfrom
gustavo/early-exit-flags

Conversation

@gustavohstrassburger
Copy link
Copy Markdown
Contributor

Problem

When feature flag conditions are evaluated sequentially, users who match conditions but are excluded by rollout percentage continue through subsequent condition evaluation. This can lead to unexpected behavior where users might match a later condition instead of receiving a consistent "false" result.

Changes

  • Backend: Add early_exit field to FeatureFlagGroupType model and API schema
  • Rust Engine: Implement early exit evaluation logic in feature flags matching engine
  • Frontend V2 UI: Add checkbox in feature flag editor to configure early exit behavior
  • Details View: Display early exit status in read-only feature flag overview
  • Types: Update TypeScript interfaces to support early exit functionality

The early exit feature allows flag conditions to stop evaluation immediately when users match targeting criteria but are excluded by rollout percentage, providing more deterministic flag behavior.

How did you test this code?

  • Verified Rust code compiles and builds successfully
  • Confirmed frontend TypeScript types are correct
  • Tested UI components render properly in V2 editor and details view
  • Validated API schema documentation includes new field

🤖 Generated with Claude Code

…lag conditions

This adds a new early exit feature that allows feature flag conditions to stop
evaluation when users match conditions but are excluded by rollout percentage,
rather than continuing to evaluate subsequent conditions.

Changes:
- Add early_exit field to FeatureFlagGroupType model and API schema
- Implement early exit evaluation logic in Rust flags engine
- Add UI checkbox in V2 feature flag editor for early exit configuration
- Display early exit status in read-only feature flag details view
- Update TypeScript types and logic to support early exit functionality

The early exit behavior ensures deterministic flag evaluation while providing
more control over flag condition processing order.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 1, 2026

Size Change: +5.17 kB (+0.01%)

Total Size: 80.8 MB

📦 View Changed
Filename Size Change
frontend/dist-report/exporter/_chunks/chunk 8.42 MB +1.26 kB (+0.01%)
frontend/dist-report/posthog-app/_chunks/chunk 8.62 MB +1.28 kB (+0.01%)
frontend/dist-report/render-query/src/render-query/render-query 27.4 MB +1.33 kB (0%)
frontend/dist-report/toolbar/src/toolbar/toolbar 15.7 MB +1.31 kB (+0.01%)
ℹ️ 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/_parent/products/actions/frontend/pages/Action 25 kB 0 B
frontend/dist-report/exporter/_parent/products/actions/frontend/pages/Actions 1.33 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilityScene 118 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilitySessionScene 18.3 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilityTraceScene 130 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilityUsers 872 B 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/clusters/AIObservabilityClusterScene 21.7 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/clusters/AIObservabilityClustersScene 55.1 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetScene 21 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetsScene 3.64 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluation 59.9 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluationsScene 28.2 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/evaluations/EvaluationTemplates 915 B 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/LLMASessionFeedbackDisplay 5.19 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/playground/AIObservabilityPlaygroundScene 37.8 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/prompts/LLMPromptScene 29.2 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/prompts/LLMPromptsScene 4.83 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/skills/LLMSkillScene 929 B 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/skills/LLMSkillsScene 946 B 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/tags/AIObservabilityTag 27.4 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/tags/AIObservabilityTagsScene 7.31 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.67 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/SlaBusinessHours/CyclotronJobInputBusinessHours 3.06 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/TicketTags/CyclotronJobInputTicketTags 1.06 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/settings/SupportSettingsScene 1.82 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.07 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/CustomerAnalyticsScene 45.2 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsConfigurationScene/CustomerAnalyticsConfigurationScene 2.65 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyBuilderScene/CustomerJourneyBuilderScene 2.18 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyTemplatesScene/CustomerJourneyTemplatesScene 7.86 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/DataWarehouseScene 46.8 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/NewSourceScene/NewSourceScene 1.12 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SchemaScene/SchemaScene 24.4 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SourceScene/SourceScene 1.06 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SourcesScene/SourcesScene 6.31 kB 0 B
frontend/dist-report/exporter/_parent/products/deployments/frontend/Deployment 4.05 kB 0 B
frontend/dist-report/exporter/_parent/products/deployments/frontend/DeploymentProject 5.58 kB 0 B
frontend/dist-report/exporter/_parent/products/deployments/frontend/Deployments 9.31 kB 0 B
frontend/dist-report/exporter/_parent/products/early_access_features/frontend/EarlyAccessFeature 1.02 kB 0 B
frontend/dist-report/exporter/_parent/products/early_access_features/frontend/EarlyAccessFeatures 3.24 kB 0 B
frontend/dist-report/exporter/_parent/products/endpoints/frontend/EndpointScene 40.6 kB 0 B
frontend/dist-report/exporter/_parent/products/endpoints/frontend/EndpointsScene 24.5 kB 0 B
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingFingerprintsScene/ErrorTrackingIssueFingerprintsScene 7.41 kB 0 B
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingIssueScene/ErrorTrackingIssueScene 104 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.38 kB 0 B
frontend/dist-report/exporter/_parent/products/games/368Hedgehogs/368Hedgehogs 5.61 kB 0 B
frontend/dist-report/exporter/_parent/products/games/FlappyHog/FlappyHog 6.12 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.31 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.55 kB 0 B
frontend/dist-report/exporter/_parent/products/live_debugger/frontend/LiveDebugger 19.5 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.3 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsSamplingNewScene/LogsSamplingNewScene 2.25 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 40.5 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 16.2 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/stickiness/StickinessBarChart/StickinessBarChart 3.31 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/stickiness/StickinessLineChart/StickinessLineChart 3.14 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsBarChart/TrendsBarChart 7.36 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsLifecycleChart/TrendsLifecycleChart 4.25 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsLineChart/TrendsLineChart 4.6 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsPieChart/TrendsPieChart 4.35 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/observations/ReplayObservation 8.17 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner 32.9 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ReplayScannersScene 11.6 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ScannerTemplatesScene 4.59 kB 0 B
frontend/dist-report/exporter/_parent/products/revenue_analytics/frontend/RevenueAnalyticsScene 26.5 kB 0 B
frontend/dist-report/exporter/_parent/products/session_summaries/frontend/SessionGroupSummariesTable 5.05 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/SlackTaskContextScene 8.88 kB 0 B
frontend/dist-report/exporter/_parent/products/tasks/frontend/TaskDetailScene 23.8 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.4 kB 0 B
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterview 9.32 kB 0 B
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterviewResponse 5.68 kB 0 B
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterviews 6.08 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewIndexScene 2.56 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewRunScene 44.7 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewRunsScene 7.32 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.6 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.2 kB 0 B
frontend/dist-report/exporter/src/exporter/exporter 19.7 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterDashboardScene 2.02 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterHeatmapScene 19.9 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterInsightScene 3.02 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterInterviewScene 310 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.13 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.25 kB 0 B
frontend/dist-report/exporter/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown 842 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 832 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.52 kB 0 B
frontend/dist-report/exporter/src/queries/nodes/WebVitals/WebVitalsPathBreakdown 4.09 kB 0 B
frontend/dist-report/exporter/src/queries/schema 850 kB 0 B
frontend/dist-report/exporter/src/scenes/approvals/changeRequestsLogic 884 B 0 B
frontend/dist-report/exporter/src/scenes/authentication/passkeyLogic 824 B 0 B
frontend/dist-report/exporter/src/scenes/data-pipelines/event-filtering/EventFilterScene 22.2 kB 0 B
frontend/dist-report/exporter/src/scenes/data-pipelines/TransformationsScene 6.54 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/BoxPlot/BoxPlot 5.39 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/CalendarHeatMap/CalendarHeatMap 8.84 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/RegionMap/RegionMap 29.8 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/_parent/products/actions/frontend/pages/Action 25.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/actions/frontend/pages/Actions 1.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityScene 119 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilitySessionScene 18.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityTraceScene 130 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityUsers 906 B 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/clusters/AIObservabilityClusterScene 21.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/clusters/AIObservabilityClustersScene 55.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetScene 21 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetsScene 3.67 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluation 59.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluationsScene 28.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/evaluations/EvaluationTemplates 949 B 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/LLMASessionFeedbackDisplay 5.23 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/playground/AIObservabilityPlaygroundScene 37.8 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/prompts/LLMPromptScene 29.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/prompts/LLMPromptsScene 4.86 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/skills/LLMSkillScene 963 B 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/skills/LLMSkillsScene 980 B 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/tags/AIObservabilityTag 27.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/tags/AIObservabilityTagsScene 7.34 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.71 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/SlaBusinessHours/CyclotronJobInputBusinessHours 3.09 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/TicketTags/CyclotronJobInputTicketTags 1.09 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/settings/SupportSettingsScene 1.85 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.11 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/CustomerAnalyticsScene 43.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsConfigurationScene/CustomerAnalyticsConfigurationScene 2.68 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyBuilderScene/CustomerJourneyBuilderScene 2.22 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyTemplatesScene/CustomerJourneyTemplatesScene 7.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/DataWarehouseScene 1.81 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/NewSourceScene/NewSourceScene 1.18 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SchemaScene/SchemaScene 24.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SourceScene/SourceScene 1.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SourcesScene/SourcesScene 6.34 kB 0 B
frontend/dist-report/posthog-app/_parent/products/deployments/frontend/Deployment 4.08 kB 0 B
frontend/dist-report/posthog-app/_parent/products/deployments/frontend/DeploymentProject 5.61 kB 0 B
frontend/dist-report/posthog-app/_parent/products/deployments/frontend/Deployments 9.35 kB 0 B
frontend/dist-report/posthog-app/_parent/products/early_access_features/frontend/EarlyAccessFeature 1.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/early_access_features/frontend/EarlyAccessFeatures 3.28 kB 0 B
frontend/dist-report/posthog-app/_parent/products/endpoints/frontend/EndpointScene 40.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/endpoints/frontend/EndpointsScene 22.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingFingerprintsScene/ErrorTrackingIssueFingerprintsScene 7.48 kB 0 B
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingIssueScene/ErrorTrackingIssueScene 103 kB 0 B
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingScene/ErrorTrackingScene 27.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/feature_flags/frontend/FeatureFlagTemplatesScene 7.42 kB 0 B
frontend/dist-report/posthog-app/_parent/products/games/368Hedgehogs/368Hedgehogs 5.65 kB 0 B
frontend/dist-report/posthog-app/_parent/products/games/FlappyHog/FlappyHog 6.16 kB 0 B
frontend/dist-report/posthog-app/_parent/products/legal_documents/frontend/scenes/LegalDocumentNewScene 59.8 kB 0 B
frontend/dist-report/posthog-app/_parent/products/legal_documents/frontend/scenes/LegalDocumentsScene 5.35 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.58 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/logs/frontend/LogsScene 17.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsAlertDetailScene/LogsAlertDetailScene 17.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsSamplingDetailScene/LogsSamplingDetailScene 5.34 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsSamplingNewScene/LogsSamplingNewScene 2.29 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 40.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/mcp_analytics/frontend/MCPAnalyticsToolDetail 18.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/metrics/frontend/MetricsScene 16.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/stickiness/StickinessBarChart/StickinessBarChart 3.34 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/stickiness/StickinessLineChart/StickinessLineChart 3.18 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsBarChart/TrendsBarChart 7.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsLifecycleChart/TrendsLifecycleChart 4.28 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsLineChart/TrendsLineChart 4.64 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsPieChart/TrendsPieChart 4.38 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/observations/ReplayObservation 8.21 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner 32.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScannersScene 11.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ScannerTemplatesScene 4.63 kB 0 B
frontend/dist-report/posthog-app/_parent/products/revenue_analytics/frontend/RevenueAnalyticsScene 26.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/session_summaries/frontend/SessionGroupSummariesTable 5.09 kB 0 B
frontend/dist-report/posthog-app/_parent/products/session_summaries/frontend/SessionGroupSummaryScene 19.3 kB 0 B
frontend/dist-report/posthog-app/_parent/products/tasks/frontend/SlackTaskContextScene 8.91 kB 0 B
frontend/dist-report/posthog-app/_parent/products/tasks/frontend/TaskDetailScene 23.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/tasks/frontend/TaskTracker 14.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/tracing/frontend/TracingScene 54.5 kB 0 B
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterview 9.35 kB 0 B
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterviewResponse 5.71 kB 0 B
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterviews 6.12 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewIndexScene 2.59 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.36 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.7 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.3 kB 0 B
frontend/dist-report/posthog-app/src/index 61.1 kB 0 B
frontend/dist-report/posthog-app/src/layout/panel-layout/ai-first/tabs/NavTabChat 7.19 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.29 kB 0 B
frontend/dist-report/posthog-app/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown 876 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 866 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.55 kB 0 B
frontend/dist-report/posthog-app/src/queries/nodes/WebVitals/WebVitalsPathBreakdown 4.12 kB 0 B
frontend/dist-report/posthog-app/src/queries/schema 850 kB 0 B
frontend/dist-report/posthog-app/src/scenes/activity/explore/EventsScene 3.32 kB 0 B
frontend/dist-report/posthog-app/src/scenes/activity/explore/SessionsScene 4.72 kB 0 B
frontend/dist-report/posthog-app/src/scenes/activity/live/LiveEventsTable 5.62 kB 0 B
frontend/dist-report/posthog-app/src/scenes/agentic/AgenticAuthorize 5.87 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 918 B 0 B
frontend/dist-report/posthog-app/src/scenes/audit-logs/AdvancedActivityLogsScene 42.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/AuthenticatedShell 165 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/AccountConnected 3.36 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/AgenticAccountMismatch 2.77 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/CLIAuthorize 11.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/CLILive 4.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/credential-review/CredentialReview 3.98 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/EmailMFAVerify 3.4 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 5.11 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/passkeyLogic 858 B 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/PasswordReset 4.74 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/PasswordResetComplete 3.38 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/signup/SignupContainer 28.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/signup/verify-email/VerifyEmail 5.16 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/TwoFactorReset 4.41 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/VercelConnect 5.37 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/VercelLinkError 2.64 kB 0 B
frontend/dist-report/posthog-app/src/scenes/billing/AuthorizationStatus 1.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/billing/Billing 867 B 0 B
frontend/dist-report/posthog-app/src/scenes/billing/BillingSection 21.2 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.61 kB 0 B
frontend/dist-report/posthog-app/src/scenes/cohorts/Cohorts 9.81 kB 0 B
frontend/dist-report/posthog-app/src/scenes/coupons/Coupons 1.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/dashboard/Dashboard 1.68 kB 0 B
frontend/dist-report/posthog-app/src/scenes/dashboard/dashboards/Dashboards 19.9 kB 0 B
frontend/dist-report/posthog-app/src/scenes/dashboard/dashboards/templates/DashboardTemplateCopyScene 6.09 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/DataManagementScene 1.02 kB 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.63 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/batch-exports/BatchExportScene 61 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/DataPipelinesNewScene 2.69 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/DestinationsScene 3.06 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/event-filtering/EventFilterScene 22.3 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.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/WebScriptsScene 2.92 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-warehouse/DataWarehouseScene 1.75 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-warehouse/editor/EditorScene 1.52 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.75 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/Experiment 207 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/Experiments 20.9 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/SharedMetrics/SharedMetric 6.45 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/SharedMetrics/SharedMetrics 923 B 0 B
frontend/dist-report/posthog-app/src/scenes/exports/ExportsScene 4.36 kB 0 B
frontend/dist-report/posthog-app/src/scenes/feature-flags/FeatureFlag 144 kB +54 B (+0.04%)
frontend/dist-report/posthog-app/src/scenes/feature-flags/FeatureFlags 1.12 kB 0 B
frontend/dist-report/posthog-app/src/scenes/groups/Group 15.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/groups/Groups 4.29 kB 0 B
frontend/dist-report/posthog-app/src/scenes/groups/GroupsNew 7.73 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health-alerts/HealthAlertsScene 4.17 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health/categoryDetail/HealthCategoryDetailScene 7.64 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health/HealthScene 12.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health/pipelineStatus/PipelineStatusScene 11.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapNewScene 5.41 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapRecordingScene 4.31 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapScene 6.94 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmaps/HeatmapsScene 4.27 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.81 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/InsightScene 34.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/views/BoxPlot/BoxPlot 5.43 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/views/CalendarHeatMap/CalendarHeatMap 4.87 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.16 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.77 kB 0 B
frontend/dist-report/posthog-app/src/scenes/instance/QueryPerformance/QueryPerformance 9 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.11 kB 0 B
frontend/dist-report/posthog-app/src/scenes/marketing-analytics/MarketingAnalyticsScene 42.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/max/Max 1.06 kB 0 B
frontend/dist-report/posthog-app/src/scenes/models/ModelsScene 19.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/models/NodeDetailScene 17.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/moveToPostHogCloud/MoveToPostHogCloud 4.84 kB 0 B
frontend/dist-report/posthog-app/src/scenes/new-tab/NewTabScene 1.85 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookCanvasScene 3.92 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookPanel/NotebookPanel 5.98 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookScene 9.29 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebooksScene 7.98 kB 0 B
frontend/dist-report/posthog-app/src/scenes/oauth/OAuthAuthorize 1.01 kB 0 B
frontend/dist-report/posthog-app/src/scenes/onboarding/coupon/OnboardingCouponRedemption 1.58 kB 0 B
frontend/dist-report/posthog-app/src/scenes/onboarding/Onboarding 791 kB 0 B
frontend/dist-report/posthog-app/src/scenes/onboarding/sdks/SdkDoctorScene 10.2 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/ConfirmOrganization/ConfirmOrganization 4.91 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/Create/Create 1.03 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/Deactivated 1.51 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/PendingDeletion 2.48 kB 0 B
frontend/dist-report/posthog-app/src/scenes/persons/PersonScene 19.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/persons/PersonsScene 6.12 kB +4 B (+0.07%)
frontend/dist-report/posthog-app/src/scenes/PreflightCheck/PreflightCheck 5.95 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.06 kB 0 B
frontend/dist-report/posthog-app/src/scenes/project-homepage/ProjectHomepage 18.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/project/Create/Create 1.21 kB 0 B
frontend/dist-report/posthog-app/src/scenes/resource-transfer/ResourceTransfer 9.56 kB 0 B
frontend/dist-report/posthog-app/src/scenes/saved-insights/SavedInsights 1.04 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/detail/SessionRecordingDetail 2.14 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/file-playback/SessionRecordingFilePlaybackScene 4.85 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.49 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/SessionRecordings 1.15 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/settings/SessionRecordingsSettingsScene 2.35 kB 0 B
frontend/dist-report/posthog-app/src/scenes/sessions/SessionProfileScene 15.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/settings/SettingsScene 3.94 kB 0 B
frontend/dist-report/posthog-app/src/scenes/sites/Site 1.57 kB 0 B
frontend/dist-report/posthog-app/src/scenes/startups/StartupProgram 21.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/StripeConfirmInstall/StripeConfirmInstall 3.92 kB 0 B
frontend/dist-report/posthog-app/src/scenes/subscriptions/SubscriptionScene 14.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/subscriptions/SubscriptionsScene 5.23 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/forms/SurveyFormBuilder 1.93 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/Survey 1.39 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/Surveys 26.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/wizard/SurveyWizard 72.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/themes/CustomCssScene 3.94 kB 0 B
frontend/dist-report/posthog-app/src/scenes/toolbar-launch/ToolbarLaunch 2.85 kB 0 B
frontend/dist-report/posthog-app/src/scenes/Unsubscribe/Unsubscribe 2.04 kB 0 B
frontend/dist-report/posthog-app/src/scenes/web-analytics/SessionAttributionExplorer/SessionAttributionExplorerScene 7.01 kB 0 B
frontend/dist-report/posthog-app/src/scenes/web-analytics/WebAnalyticsScene 13.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/wizard/Wizard 4.83 kB 0 B
frontend/dist-report/posthog-app/src/sharedChunkAnchors 1.19 kB 0 B

compressed-size-action

@tests-posthog
Copy link
Copy Markdown
Contributor

tests-posthog Bot commented May 1, 2026

⏭️ Skipped snapshot commit because branch advanced to 7ae89f9 while workflow was testing ec717ad.

The new commit will trigger its own snapshot update workflow.

If you expected this workflow to succeed: This can happen due to concurrent commits. To get a fresh workflow run, either:

  • Merge master into your branch, or
  • Push an empty commit: git commit --allow-empty -m 'trigger CI' && git push

@gustavohstrassburger gustavohstrassburger force-pushed the gustavo/early-exit-flags branch from 4478911 to 7ae89f9 Compare May 1, 2026 19:28
@tests-posthog
Copy link
Copy Markdown
Contributor

tests-posthog Bot commented May 1, 2026

Query snapshots: Backend query snapshots updated

Changes: 4 snapshots (4 modified, 0 added, 0 deleted)

What this means:

  • Query snapshots have been automatically updated to match current output
  • These changes reflect modifications to database queries or schema

Next steps:

  • Review the query changes to ensure they're intentional
  • If unexpected, investigate what caused the query to change

Review snapshot changes →

@tests-posthog
Copy link
Copy Markdown
Contributor

tests-posthog Bot commented May 1, 2026

⏭️ Skipped snapshot commit because branch advanced to 48436de while workflow was testing 7ae89f9.

The new commit will trigger its own snapshot update workflow.

If you expected this workflow to succeed: This can happen due to concurrent commits. To get a fresh workflow run, either:

  • Merge master into your branch, or
  • Push an empty commit: git commit --allow-empty -m 'trigger CI' && git push

- Add missing earlyExit parameter to updateConditionSet type definition
- Fix labelInline prop to use explicit boolean value

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
@gustavohstrassburger gustavohstrassburger marked this pull request as ready for review May 1, 2026 19:56
Copilot AI review requested due to automatic review settings May 1, 2026 19:56
@assign-reviewers-posthog assign-reviewers-posthog Bot requested review from a team May 1, 2026 19:57
@posthog-project-board-bot posthog-project-board-bot Bot moved this to In Review in Feature Flags May 1, 2026
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 1, 2026

Comments Outside Diff (1)

  1. frontend/src/scenes/feature-flags/FeatureFlagReleaseConditionsCollapsible.tsx, line 43-51 (link)

    P2 Fragile positional-argument call

    updateConditionSet now takes 6 positional parameters and this call passes undefined for 5 of them just to reach earlyExit. If a new parameter is inserted before earlyExit in the future, all such call-sites will silently mis-wire. Consider switching the signature to accept an options object (or at least a partial record) so callers only supply the fields they intend to change.

    Prompt To Fix With AI
    This is a comment left during a code review.
    Path: frontend/src/scenes/feature-flags/FeatureFlagReleaseConditionsCollapsible.tsx
    Line: 43-51
    
    Comment:
    **Fragile positional-argument call**
    
    `updateConditionSet` now takes 6 positional parameters and this call passes `undefined` for 5 of them just to reach `earlyExit`. If a new parameter is inserted before `earlyExit` in the future, all such call-sites will silently mis-wire. Consider switching the signature to accept an options object (or at least a partial record) so callers only supply the fields they intend to change.
    
    How can I resolve this? If you propose a fix, please make it concise.
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
rust/feature-flags/src/flags/flag_matching.rs:1411-1497
**Redundant property re-evaluation duplicates `is_condition_match` logic**

When `reason == OutOfRolloutBound`, `is_condition_match` has already verified that all properties matched — `OutOfRolloutBound` can only be returned after a successful property pass (see lines 1636/1643/1658 in `is_condition_match`, which short-circuit to `NoConditionMatch` on any property mismatch). Re-checking all properties here (~70 lines) is therefore always redundant and duplicates the matching logic in violation of OnceAndOnlyOnce.

The three branches in this block are also identical in their return value. The entire block can be collapsed to:

```rust
if condition.early_exit.unwrap_or(false)
    && !is_match
    && reason == FeatureFlagMatchReason::OutOfRolloutBound
{
    return Ok(FeatureFlagMatch {
        matches: false,
        variant: None,
        reason: FeatureFlagMatchReason::OutOfRolloutBound,
        condition_index: Some(index),
        payload: None,
    });
}
```

### Issue 2 of 3
rust/feature-flags/src/flags/test_flag_matching.rs:8733
**No tests for actual early exit behaviour**

The only changes in this file are adding `early_exit: None` to existing test fixtures to satisfy the new struct field. There are no new test cases that exercise the early exit path — i.e., a flag with `early_exit: Some(true)`, a user who matches properties but falls outside the rollout percentage, and an assertion that evaluation terminates instead of continuing to subsequent conditions. Without these tests, the new logic in `flag_matching.rs` has no coverage.

### Issue 3 of 3
frontend/src/scenes/feature-flags/FeatureFlagReleaseConditionsCollapsible.tsx:43-51
**Fragile positional-argument call**

`updateConditionSet` now takes 6 positional parameters and this call passes `undefined` for 5 of them just to reach `earlyExit`. If a new parameter is inserted before `earlyExit` in the future, all such call-sites will silently mis-wire. Consider switching the signature to accept an options object (or at least a partial record) so callers only supply the fields they intend to change.

Reviews (1): Last reviewed commit: "fix(feature-flags): resolve TypeScript e..." | Re-trigger Greptile

Comment thread rust/feature-flags/src/flags/flag_matching.rs Outdated
Comment thread rust/feature-flags/src/flags/test_flag_matching.rs
Comment thread posthog/api/documentation.py Outdated
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds an “early exit” option to feature flag condition sets so that when a user matches a condition’s targeting but falls outside its rollout percentage, evaluation can stop immediately (returning false) instead of continuing to later condition sets.

Changes:

  • Extend feature flag condition-set schema/types (early_exit) across backend OpenAPI docs, MCP tool schemas, Rust flag engine models, and frontend TypeScript types.
  • Implement early-exit evaluation behavior in the Rust feature flag matcher.
  • Add UI controls and read-only display for configuring/viewing early exit in the feature flag editor.

Reviewed changes

Copilot reviewed 15 out of 17 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
services/mcp/tests/unit/snapshots/tool-schemas/common/update-feature-flag.json Updates MCP tool JSON schema snapshot to include early_exit on condition groups.
services/mcp/tests/unit/snapshots/tool-schemas/common/create-feature-flag.json Updates MCP tool JSON schema snapshot to include early_exit on condition groups.
services/mcp/tests/unit/snapshots/tool-schemas/common/survey-create.json Updates survey tool schema snapshot to include early_exit on targeting flag filters groups.
services/mcp/tests/unit/snapshots/tool-schemas/common/survey-update.json Updates survey tool schema snapshot to include early_exit on targeting flag filters groups.
services/mcp/src/generated/surveys/api.ts Adds early_exit to Zod schemas for survey create/partial update targeting flag filters.
services/mcp/src/generated/feature_flags/api.ts Adds early_exit to Zod schemas for feature flag create/partial update filters.
services/mcp/src/api/generated.ts Updates generated API types to include early_exit in schemas.
rust/feature-flags/src/flags/flag_models.rs Adds early_exit to Rust FlagPropertyGroup model + mocks.
rust/feature-flags/src/flags/flag_matching.rs Implements early-exit evaluation logic in Rust matcher.
rust/feature-flags/src/flags/test_flag_matching.rs Updates existing Rust tests/fixtures to include early_exit field.
rust/feature-flags/src/flags/flag_property_group.rs Updates expected structs in tests to include early_exit.
rust/feature-flags/src/flags/flag_definitions_cache.rs Updates cache tests/fixtures to include early_exit.
posthog/api/documentation.py Documents early_exit in OpenAPI serializer schema for condition groups.
frontend/src/types.ts Extends FeatureFlagGroupType TS interface with early_exit.
frontend/src/scenes/feature-flags/featureFlagReleaseConditionsLogic.ts Adds state/update plumbing for editing early_exit per condition set.
frontend/src/scenes/feature-flags/FeatureFlagReleaseConditionsReadonly.tsx Displays early-exit status in read-only condition set cards.
frontend/src/scenes/feature-flags/FeatureFlagReleaseConditionsCollapsible.tsx Adds checkbox control to configure early exit in the editor UI.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread frontend/src/types.ts Outdated
Comment thread frontend/src/scenes/feature-flags/featureFlagReleaseConditionsLogic.ts Outdated
Comment thread rust/feature-flags/src/flags/flag_matching.rs Outdated
Comment thread rust/feature-flags/src/flags/flag_matching.rs Outdated
Comment thread posthog/api/documentation.py Outdated
gustavohstrassburger and others added 2 commits May 1, 2026 17:10
Add boolean type validation for early_exit field in feature flag groups
to prevent Rust serde failures and cache poisoning. Follows the existing
pattern used for variant and aggregation_group_type_index validation.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
@tests-posthog
Copy link
Copy Markdown
Contributor

tests-posthog Bot commented May 1, 2026

Query snapshots: Backend query snapshots updated

Changes: 1 snapshots (1 modified, 0 added, 0 deleted)

What this means:

  • Query snapshots have been automatically updated to match current output
  • These changes reflect modifications to database queries or schema

Next steps:

  • Review the query changes to ensure they're intentional
  • If unexpected, investigate what caused the query to change

Review snapshot changes →

- Simplify early exit logic in Rust by removing redundant property checks
- Add comprehensive tests for early exit behavior and disabled early exit
- Fix TypeScript types to use boolean instead of boolean | null
- Update frontend logic to handle early exit parameter correctly
Copy link
Copy Markdown
Contributor

@dmarticus dmarticus left a comment

Choose a reason for hiding this comment

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

IMO this should be wrapped in an early access feature so that you can get some feedback on the experience when rolling it out.

Needs docs, too, but I would say roll it behind a flag -> write docs -> roll it out further.

checked
)
}}
label="Stop evaluation if excluded by rollout"
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.

can we call this e.g. "short-circuit evaluation on false"? I get what you're saying here, but I'm not sure about the terminology.

@ksvat you've felt passionately about this subject – what do you think about this? UI looks like

Image

Copy link
Copy Markdown
Contributor

@ksvat ksvat May 7, 2026

Choose a reason for hiding this comment

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

sorry finally remembered this tag @dmarticus
tbh maybe just my brain being silly but this copy is sort of confusing imo

I'd lean more toward something like "Stop evaluation at first matching group" "Evaluate at first matching group" "Use first matching group to evaluate" or something like that, since its true for both inclusion and exclusion, and its more about the MATCH -> final outcome, than about the exclusion having unique behavior idk

Tooltip could then be something similarly worded like:
When this setting is enabled, conditions are evaluated in order. The first matching condition set determines the result — later conditions are skipped. When this settign is disabled, all conditions are evaluated, and a pass on any condition is a pass, regardless of rollout exclusions on other condition groups.`` `` Optionally include a simple example idk

)}

<div className="mt-3 flex items-center gap-2">
<LemonCheckbox
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.

on one hand, I see the value of doing this on a condition-by condition basis so that people have the flexibility to build flags with whatever rules they want.

on the other hand, I also think it could be cool to do this on a flag-level, so that the user doesn't have to think about the conditions and just make flags that short-circuit by default.

Copy link
Copy Markdown
Contributor

@dmarticus dmarticus left a comment

Choose a reason for hiding this comment

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

A few additional things to consider on top of the bot feedback and my earlier comments:

SDK local-evaluation divergence

The Rust engine handles early_exit, but PostHog's server-side SDKs (posthog-python, posthog-node, posthog-go, posthog-ruby, posthog-php, posthog-dotnet, posthog-elixir) all perform local evaluation of release conditions when a customer fetches flag definitions and calls feature_enabled() with properties. None of them currently know about early_exitposthog-python/posthog/feature_flags.py::is_condition_match is the equivalent of is_condition_match in flag_matching.rs and it has no notion of short-circuiting on rollout exclusion.

That means a customer using local eval will get the opposite result from /flags/: local eval continues to the next condition, the Rust service short-circuits. That directly undermines the stated goal of more deterministic flag behavior.

Suggestions:

  • Land follow-up PRs to each server SDK's local-eval to honor early_exit, ideally before announcing the feature.
  • Until SDKs catch up, either gate the UI behind a feature flag, or surface a banner/help text warning that local eval doesn't yet honor this setting.
  • Mention SDK version requirements in the field's help_text so API consumers know.

Missing Python tests for the new validation

posthog/api/feature_flag.py:917-922 adds the early_exit type check (good fix for the hex-security finding), but no Python test in this PR exercises that branch. Add a parameterized test in posthog/api/test/test_feature_flag.py covering early_exit=true, false, missing, and rejected non-boolean values (1, \"true\", etc.).

Unrelated snapshot churn

posthog/hogql_queries/web_analytics/test/__snapshots__/test_web_stats_table.ambr has 78/-36 lines of changes that have nothing to do with feature flags. Looks like a local snapshot regenerated from a stale base. Worth reverting before merge so it doesn't mask the real snapshot owner's diff next time and pollute blame.

PR description nit

Add early_exit field to FeatureFlagGroupType model

There's no Django model field — it's a key inside the existing filters JSON blob. No migration was needed, and that's the right call. Worth correcting the description so future archaeology isn't misled into looking for a column.

Activity logging coverage

Worth verifying that toggling early_exit produces a useful entry in the flag's activity log. Changes to keys inside the filters JSON blob often get summarized as a generic "filters changed" diff. If the activity describer special-cases rollout / variant changes per condition, consider extending it for early_exit so reviewers can see who toggled it and on which condition.

Test nit

The second Rust test's trailing comment (// The test should match the second condition since the first has 0% rollout) reads like a TODO. Either assert condition_index == Some(1) with reason == ConditionMatch, or drop the comment.

Copy link
Copy Markdown
Contributor

@haacked haacked left a comment

Choose a reason for hiding this comment

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

Nice, focused feature. The core matcher change is clean and the bot reviews mostly turned out to be false positives (Greptile/Copilot misread the early-exit branch as re-evaluating properties; @Hex-Security cache-poisoning concern is closed by the new isinstance validation). Inline suggestions below. No blockers from me, though strong agreement with @dmarticus that the SDK local-eval divergence is the headline risk and worth either gating behind an early-access flag or coordinating SDK rollouts before this lands. Also: please revert the unrelated test_web_stats_table.ambr snapshot churn before merging.

Comment thread posthog/api/documentation.py Outdated
Comment thread posthog/api/feature_flag.py Outdated
Comment thread rust/feature-flags/src/flags/flag_matching.rs
Comment thread rust/feature-flags/src/flags/flag_matching.rs Outdated
Comment thread rust/feature-flags/src/flags/flag_models.rs Outdated
Comment thread frontend/src/scenes/feature-flags/FeatureFlagReleaseConditionsCollapsible.tsx Outdated
Comment thread frontend/src/scenes/feature-flags/FeatureFlagReleaseConditionsCollapsible.tsx Outdated
Comment thread services/mcp/src/generated/feature_flags/api.ts Outdated
Comment thread rust/feature-flags/src/flags/test_flag_matching.rs Outdated
Comment thread rust/feature-flags/src/flags/test_flag_matching.rs
@gantoine gantoine removed the request for review from a team May 8, 2026 18:55
@gustavohstrassburger gustavohstrassburger removed request for a team May 29, 2026 13:19
@tests-posthog
Copy link
Copy Markdown
Contributor

tests-posthog Bot commented May 29, 2026

Query snapshots: Backend query snapshots updated

Changes: 4 snapshots (4 modified, 0 added, 0 deleted)

What this means:

  • Query snapshots have been automatically updated to match current output
  • These changes reflect modifications to database queries or schema

Next steps:

  • Review the query changes to ensure they're intentional
  • If unexpected, investigate what caused the query to change

Review snapshot changes →

@gustavohstrassburger gustavohstrassburger force-pushed the gustavo/early-exit-flags branch from c4cac78 to 2e2b015 Compare May 29, 2026 13:26
@tests-posthog
Copy link
Copy Markdown
Contributor

tests-posthog Bot commented May 29, 2026

Query snapshots: Backend query snapshots updated

Changes: 4 snapshots (4 modified, 0 added, 0 deleted)

What this means:

  • Query snapshots have been automatically updated to match current output
  • These changes reflect modifications to database queries or schema

Next steps:

  • Review the query changes to ensure they're intentional
  • If unexpected, investigate what caused the query to change

Review snapshot changes →

@tests-posthog
Copy link
Copy Markdown
Contributor

tests-posthog Bot commented May 29, 2026

Query snapshots: Backend query snapshots updated

Changes: 2 snapshots (2 modified, 0 added, 0 deleted)

What this means:

  • Query snapshots have been automatically updated to match current output
  • These changes reflect modifications to database queries or schema

Next steps:

  • Review the query changes to ensure they're intentional
  • If unexpected, investigate what caused the query to change

Review snapshot changes →

@gustavohstrassburger gustavohstrassburger marked this pull request as ready for review May 29, 2026 19:13
@assign-reviewers-posthog assign-reviewers-posthog Bot requested a review from a team May 29, 2026 19:14
@assign-reviewers-posthog
Copy link
Copy Markdown

👥 Auto-assigned reviewers

Skipped a review request for @PostHog/team-devex (posthog/api/documentation.py) because they only have minor changes here. These are soft owners (CODEOWNERS-soft / each product's product.yaml), so nothing blocks merge — self-assign if you'd like a look. (Generated files and lockfiles are ignored when deciding ownership.)

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 29, 2026

Reviews (2): Last reviewed commit: "Merge branch 'master' into gustavo/early..." | Re-trigger Greptile

Copy link
Copy Markdown
Contributor Author

@github-actions
Copy link
Copy Markdown
Contributor

🎭 Playwright report · View test results →

⚠️ 1 flaky test:

  • Save an insight, make changes, discard them, and save a copy (chromium)

These issues are not necessarily caused by your changes.
Annoyed by this comment? Help fix flakies and failures and it'll disappear!

Copy link
Copy Markdown
Contributor

@haacked haacked left a comment

Choose a reason for hiding this comment

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

A few suggestions to consider, but nothing majorly blocking.

</div>
{releaseFilters.early_exit &&
evaluationRuntime !== undefined &&
evaluationRuntime !== FeatureFlagEvaluationRuntime.SERVER && (
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.

suggestion: This banner gates on evaluationRuntime, but that field is a targeting hint, not a signal of how the flag is actually evaluated, so the warning can't really be accurate. early_exit is honored wherever evaluation goes through the /flags endpoint (the Rust matcher), which is every client-side SDK and any server SDK that calls /flags. It's ignored only by server-side SDKs configured for local evaluation, since those evaluate all condition groups in-process. Whether a given consumer has local eval turned on isn't something the flag's runtime setting tells you.

So the current gate is backwards on the one case it can be sure about: CLIENT-only flags never local-eval, so they always honor early_exit, yet they're the ones that get the warning. SERVER/ALL flags are where local eval is even possible, and those are exactly where the banner stays silent. The banner text ("Client-side and local evaluation SDKs evaluate all condition groups") has the same flip, since client-side SDKs do honor early_exit.

Since you can't know local-eval status from here, the honest version is a conditional caveat rather than a flat "not supported." Show it wherever local eval is possible (everything except CLIENT-only) and word it as a maybe:

{releaseFilters.early_exit && evaluationRuntime !== FeatureFlagEvaluationRuntime.CLIENT && (
    <LemonBanner type="warning" className="mt-1">
        <b>Not applied with local evaluation.</b> If you evaluate this flag with a server-side SDK
        using local evaluation, early exit won't take effect, those SDKs evaluate all condition
        groups. It does take effect when the flag is evaluated through the /flags endpoint.
    </LemonBanner>
)}

One thing I didn't confirm: whether /local_evaluation filters flags by runtime. If it returns CLIENT flags too, then even a CLIENT flag could be locally evaluated and the caveat should show for all runtimes (drop the gate entirely).

if p.get("operator") in ("regex", "not_regex") and isinstance(p.get("value"), str):
existing_patterns.add(p["value"])

early_exit = filters.get("early_exit")
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.

question: The feature-flag-early-exit gate is UI-only. This validator type-checks early_exit but doesn't check the feature flag or team eligibility, so the public REST API, the MCP create/update tools, and the terraform provider can all persist early_exit: true regardless of whether the flag is enabled for the team. Combined with the local-eval divergence, that means a customer or an MCP agent could turn this on before the server-side SDKs honor it. Is leaving the API ungated intentional (UI-gated rollout only), or should validate_filters reject a truthy early_exit unless the team has feature-flag-early-exit enabled?


return { ...state, groups }
},
setEarlyExit: (state, { earlyExit }) => {
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.

suggestion: setEarlyExit is the only thing that writes early_exit. Worth a unit test to make sure nothing breaks it in the future?

format="json",
)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn(expected_type, response.json()["detail"])
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.

suggestion: assertIn(expected_type, response.json()["detail"]) is a loose check. The type names are substrings of common words ("int" in "integer", "str" in "string"), so if some other validator rejected the payload first with a message that happened to contain the substring, this would pass without the early_exit branch ever running. The payloads only have early_exit wrong today, but the assertion doesn't pin that. Add the branch-specific text:

Suggested change
self.assertIn(expected_type, response.json()["detail"])
self.assertIn("early_exit must be a boolean", response.json()["detail"])
self.assertIn(expected_type, response.json()["detail"])

@github-project-automation github-project-automation Bot moved this from In Review to Approved in Feature Flags May 29, 2026
@haacked
Copy link
Copy Markdown
Contributor

haacked commented May 30, 2026

I like that this is gated behind a feature flag. But what's the rollout strategy once we've validated this approach? This would be a breaking change for folks. Will we want to make this the new default behavior and existing customers will have the legacy behavior until they opt-in? Or do you have other plans?

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

Labels

None yet

Projects

Status: Approved

Development

Successfully merging this pull request may close these issues.

6 participants