Skip to content

feat(ingestion): verify events captured with the secret API key#62888

Open
Gilbert09 wants to merge 9 commits into
masterfrom
tom/secret-key-verified-events
Open

feat(ingestion): verify events captured with the secret API key#62888
Gilbert09 wants to merge 9 commits into
masterfrom
tom/secret-key-verified-events

Conversation

@Gilbert09

Copy link
Copy Markdown
Member

Problem

Server-side SDKs authenticate capture with the public project API key (phc_), which is world-readable by design — so nothing distinguishes an event genuinely sent by trusted server infrastructure from one forged by anyone holding the public key. For workflows that act automatically on ingested events (e.g. error-tracking automations), we need a way to know an event came from a holder of a server-side secret.

An earlier approach signed individual $exception events with per-team Ed25519 keys (#62750, #62751, posthog-python#657). This PR supersedes that with a much simpler transport-level mechanism: send events with the project's secret API token (phs_, already used for flags local evaluation and the conversations API), and every event ingested that way is marked verified.

Changes

  • Ingestion (plugin-server): TeamManager now also resolves teams by secret_api_token and secret_api_token_backup (so token rotation keeps working), and the shared resolve-team step sets a server-controlled $verified: true property on events captured with a secret token. Any client-supplied $verified on public-token events is stripped, so the property cannot be forged. Covers the analytics, error-tracking, and heatmap pipelines; a counter metric tracks verified/stripped events.
  • Billing / quota limiting: the quota-limit Redis sets now include each team's secret tokens alongside the public token. Capture enforces quota by the raw request token, so without this a team switching to phs_ capture would bypass billing limits.
  • Feature flags service: /flags requests now accept a phs_ token as the api_key (reusing the existing cached secret-token validation used by /flag_definitions), so an SDK configured with the secret key keeps evaluating flags. Unknown phs_ tokens 401 without polluting the public-token negative cache.
  • Taxonomy: $verified registered as a boolean event property.

No SDK changes are required — server SDKs send api_key verbatim, so setting api_key="phs_..." works as-is. Capture already accepts phs_ tokens at the edge (format-only validation) and the token is not persisted to ClickHouse.

Everything is inert until a team generates a secret token (existing rotate endpoint) and points an SDK at it; teams with NULL secret tokens see byte-identical behaviour. No migrations — unique indexes on both secret-token columns already exist.

Notes for reviewers:

  • Overflow / per-(token, distinct_id) rate-limit buckets treat phc_ and phs_ as separate keys — accepted.
  • Token-dropper blocklists are exact-string config, so ops must list a team's phs_ token too to fully block a team.
  • Session replay intentionally keeps rejecting phs_ tokens (its team service is public-token-only; server SDKs don't do replay).

How did you test this code?

  • nodejs: new parameterized unit tests for applyVerifiedProperty and the resolve-team step (secret/backup/forged/no-properties/null-secret cases), team-manager integration tests for secret-token resolution and cache warming, and two end-to-end ingestion tests (phs_ capture lands in ClickHouse with $verified: true; forged $verified via phc_ is stripped). Full event-preprocessing and error-tracking pipeline suites pass.
  • ee/billing: parameterized pytest coverage over no-secret / primary-only / primary+backup token sets for update_org_billing_quotas, update_all_orgs_billing_quotas, and the token helpers; full test_quota_limiting.py suite passes (74 tests).
  • rust/feature-flags: integration tests for /flags authenticated with the primary and backup secret token (200 + flags evaluated) and an unknown phs_ token (401 with Django-compatible error body).

Automatic notifications

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

Docs update

@Gilbert09 Gilbert09 self-assigned this Jun 11, 2026
@assign-reviewers-posthog assign-reviewers-posthog Bot requested review from a team June 11, 2026 10:13
@assign-reviewers-posthog

Copy link
Copy Markdown

👀 Auto-assigned reviewers

These soft owners were skipped because they only have minor changes here. Nothing blocks merge, so self-assign if you'd like a look:

  • @PostHog/team-product-analytics (posthog/taxonomy/)

Soft owners come from CODEOWNERS-soft and each product's product.yaml. Generated files and lockfiles are ignored when deciding ownership.

@github-actions

github-actions Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Size Change: +391 kB (+0.61%)

Total Size: 64.4 MB

📦 View Changed
Filename Size Change
frontend/dist-report/exporter/_chunks/chunk 2.62 MB +383 kB (+17.12%) ⚠️
frontend/dist-report/posthog-app/_chunks/chunk 2.62 MB +7.96 kB (+0.3%)
ℹ️ 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 27.9 kB 0 B
frontend/dist-report/exporter/_parent/products/actions/frontend/pages/Actions 5.66 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_gateway/frontend/AIGatewayScene 13.2 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilityScene 120 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilitySessionScene 19.4 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilityTraceScene 132 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilityUsers 3.44 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/clusters/AIObservabilityClusterScene 21.8 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/clusters/AIObservabilityClustersScene 53.9 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetScene 20.7 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetsScene 4.07 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluation 60.6 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluationsScene 32.8 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/evaluations/EvaluationTemplates 671 B 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/LLMASessionFeedbackDisplay 4.81 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/playground/AIObservabilityPlaygroundScene 37.5 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/prompts/LLMPromptScene 32.8 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/prompts/LLMPromptsScene 5.21 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/tags/AIObservabilityTag 32 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/tags/AIObservabilityTagsScene 11.8 kB 0 B
frontend/dist-report/exporter/_parent/products/business_knowledge/frontend/scenes/BusinessKnowledgeScene 23.3 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/Assignee/CyclotronJobInputAssignee 1.38 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/SlaBusinessHours/CyclotronJobInputBusinessHours 2.69 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/TicketTags/CyclotronJobInputTicketTags 783 B 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/settings/SupportSettingsScene 5.73 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/ticket/SupportTicketScene 41.4 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/tickets/SupportTicketsScene 1.68 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/CustomerAnalyticsScene 96.4 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsConfigurationScene/CustomerAnalyticsConfigurationScene 6.48 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyBuilderScene/CustomerJourneyBuilderScene 6.33 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyTemplatesScene/CustomerJourneyTemplatesScene 9.23 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/DataWarehouseScene 32.3 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/NewSourceScene/NewSourceScene 2.88 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SchemaScene/SchemaScene 34.1 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SourceConnectScene/SourceConnectScene 7 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SourceScene/SourceScene 2.69 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SourcesScene/SourcesScene 7.49 kB 0 B
frontend/dist-report/exporter/_parent/products/early_access_features/frontend/EarlyAccessFeature 5.54 kB 0 B
frontend/dist-report/exporter/_parent/products/early_access_features/frontend/EarlyAccessFeatures 3.73 kB 0 B
frontend/dist-report/exporter/_parent/products/endpoints/frontend/EndpointScene 47.6 kB 0 B
frontend/dist-report/exporter/_parent/products/endpoints/frontend/EndpointsScene 27.4 kB 0 B
frontend/dist-report/exporter/_parent/products/engineering_analytics/frontend/scenes/EngineeringAnalyticsAuthorScene 5.31 kB 0 B
frontend/dist-report/exporter/_parent/products/engineering_analytics/frontend/scenes/EngineeringAnalyticsScene 21.5 kB 0 B
frontend/dist-report/exporter/_parent/products/engineering_analytics/frontend/scenes/PullRequestDetailScene 20.8 kB 0 B
frontend/dist-report/exporter/_parent/products/engineering_analytics/frontend/scenes/WorkflowRunDetailScene 6.42 kB 0 B
frontend/dist-report/exporter/_parent/products/engineering_analytics/frontend/scenes/WorkflowRunsScene 7.94 kB 0 B
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingFingerprintsScene/ErrorTrackingIssueFingerprintsScene 7.66 kB 0 B
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingIssueScene/ErrorTrackingIssueScene 102 kB 0 B
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingScene/ErrorTrackingScene 42.6 kB 0 B
frontend/dist-report/exporter/_parent/products/feature_flags/frontend/FeatureFlagTemplatesScene 6.91 kB 0 B
frontend/dist-report/exporter/_parent/products/games/368Hedgehogs/368Hedgehogs 5.24 kB 0 B
frontend/dist-report/exporter/_parent/products/games/FlappyHog/FlappyHog 5.7 kB 0 B
frontend/dist-report/exporter/_parent/products/growth/frontend/IdentityMatchingScene 35.9 kB 0 B
frontend/dist-report/exporter/_parent/products/legal_documents/frontend/scenes/LegalDocumentNewScene 60.1 kB 0 B
frontend/dist-report/exporter/_parent/products/legal_documents/frontend/scenes/LegalDocumentsScene 6.37 kB 0 B
frontend/dist-report/exporter/_parent/products/links/frontend/LinkScene 25.4 kB 0 B
frontend/dist-report/exporter/_parent/products/links/frontend/LinksScene 5.15 kB 0 B
frontend/dist-report/exporter/_parent/products/live_debugger/frontend/LiveDebugger 19.6 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/LogsScene 22.6 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsAlertDetailScene/LogsAlertDetailScene 18.5 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsAlertNotificationDetailScene/LogsAlertNotificationDetailScene 9 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsSamplingDetailScene/LogsSamplingDetailScene 6.11 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsSamplingNewScene/LogsSamplingNewScene 3.12 kB 0 B
frontend/dist-report/exporter/_parent/products/managed_migrations/frontend/ManagedMigration 15.2 kB 0 B
frontend/dist-report/exporter/_parent/products/mcp_analytics/frontend/MCPAnalyticsScene 109 kB 0 B
frontend/dist-report/exporter/_parent/products/mcp_analytics/frontend/MCPAnalyticsToolDetail 20.1 kB 0 B
frontend/dist-report/exporter/_parent/products/metrics/frontend/MetricsScene 18.1 kB 0 B
frontend/dist-report/exporter/_parent/products/posthog_ai/frontend/sandbox/components/tool/builtinToolRenderers 4.48 kB 0 B
frontend/dist-report/exporter/_parent/products/posthog_ai/frontend/sandbox/SandboxQuestionRenderer 1.76 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/stickiness/StickinessBarChart/StickinessBarChart 4.17 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/stickiness/StickinessLineChart/StickinessLineChart 4.05 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsBarChart/TrendsBarChart 9.6 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsLifecycleChart/TrendsLifecycleChart 5.87 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsLineChart/TrendsLineChart 5.82 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsPieChart/TrendsPieChart 5.01 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsSlopeChart/TrendsSlopeChart 2.6 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/observations/ReplayObservation 17.9 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner 41.3 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ReplayScannersScene 22.4 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ScannerEditorScene 25.2 kB 0 B
frontend/dist-report/exporter/_parent/products/revenue_analytics/frontend/revenueAnalyticsLogic 1.49 kB 0 B
frontend/dist-report/exporter/_parent/products/revenue_analytics/frontend/RevenueAnalyticsScene 29.8 kB 0 B
frontend/dist-report/exporter/_parent/products/session_summaries/frontend/SessionGroupSummariesTable 5.4 kB 0 B
frontend/dist-report/exporter/_parent/products/session_summaries/frontend/SessionGroupSummaryScene 23.3 kB 0 B
frontend/dist-report/exporter/_parent/products/skills/frontend/LLMSkillScene 1.47 kB 0 B
frontend/dist-report/exporter/_parent/products/skills/frontend/LLMSkillsScene 1.48 kB 0 B
frontend/dist-report/exporter/_parent/products/tasks/frontend/SlackTaskContextScene 9 kB 0 B
frontend/dist-report/exporter/_parent/products/tasks/frontend/TaskTracker 67.9 kB 0 B
frontend/dist-report/exporter/_parent/products/tracing/frontend/TracingScene 86.6 kB 0 B
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterview 10.8 kB 0 B
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterviewResponse 8.05 kB 0 B
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterviews 6.46 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewIndexScene 3 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewRunScene 47.2 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewRunsScene 8.23 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewSettingsScene 11.6 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotHistoryScene 14.3 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotOverviewScene 19.8 kB 0 B
frontend/dist-report/exporter/_parent/products/workflows/frontend/TemplateLibrary/MessageTemplate 17 kB 0 B
frontend/dist-report/exporter/_parent/products/workflows/frontend/Workflows/WorkflowScene 113 kB 0 B
frontend/dist-report/exporter/_parent/products/workflows/frontend/WorkflowsScene 61.4 kB 0 B
frontend/dist-report/exporter/src/exporter/exporter 25.9 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterDashboardScene 6.64 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterHeatmapScene 20.1 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterInsightScene 7.21 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterInterviewScene 310 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterNotebookScene 2.9 MB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterRecordingScene 5.59 kB 0 B
frontend/dist-report/exporter/src/exporterSharedChunkAnchors 1.26 kB 0 B
frontend/dist-report/exporter/src/lib/components/ActivityLog/describers 129 kB 0 B
frontend/dist-report/exporter/src/lib/components/Cards/TextCard/TextCardMarkdownEditor 10.6 kB 0 B
frontend/dist-report/exporter/src/lib/components/MonacoDiffEditor 533 B 0 B
frontend/dist-report/exporter/src/lib/lemon-ui/LemonMarkdown/MermaidDiagram 2 kB 0 B
frontend/dist-report/exporter/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown 790 B 0 B
frontend/dist-report/exporter/src/lib/lemon-ui/Link/Link 415 B 0 B
frontend/dist-report/exporter/src/lib/monaco/CodeEditor 448 B 0 B
frontend/dist-report/exporter/src/lib/monaco/CodeEditorImpl 26.5 kB 0 B
frontend/dist-report/exporter/src/lib/monaco/CodeEditorInline 649 B 0 B
frontend/dist-report/exporter/src/lib/monaco/vimMode 211 kB 0 B
frontend/dist-report/exporter/src/lib/ui/Button/ButtonPrimitives 482 B 0 B
frontend/dist-report/exporter/src/queries/nodes/WebVitals/WebVitals 11.5 kB 0 B
frontend/dist-report/exporter/src/queries/nodes/WebVitals/WebVitalsPathBreakdown 4.76 kB 0 B
frontend/dist-report/exporter/src/queries/Query/Query 5.08 kB 0 B
frontend/dist-report/exporter/src/queries/schema 955 kB 0 B
frontend/dist-report/exporter/src/scenes/approvals/changeRequestsLogic 622 B 0 B
frontend/dist-report/exporter/src/scenes/authentication/login/loginLogic 569 B 0 B
frontend/dist-report/exporter/src/scenes/authentication/shared/passkeyLogic 602 B 0 B
frontend/dist-report/exporter/src/scenes/data-pipelines/event-filtering/EventFilterScene 22.8 kB 0 B
frontend/dist-report/exporter/src/scenes/data-pipelines/TransformationsScene 8.09 kB 0 B
frontend/dist-report/exporter/src/scenes/experiments/notebook/NotebookCompactTable 1.54 kB 0 B
frontend/dist-report/exporter/src/scenes/hog-functions/misc/Diff 1.35 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/BoxPlot/BoxPlot 4.49 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/CalendarHeatMap/CalendarHeatMap 8.88 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/RegionMap/RegionMap 30.3 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/WorldMap/WorldMap 1.04 MB 0 B
frontend/dist-report/exporter/src/scenes/max/messages/adapters/CreateInsightWidget 5.73 kB 0 B
frontend/dist-report/exporter/src/scenes/max/messages/adapters/CreateNotebookWidget 1.8 kB 0 B
frontend/dist-report/exporter/src/scenes/max/messages/adapters/EditDiffRenderer 3.23 kB 0 B
frontend/dist-report/exporter/src/scenes/max/messages/adapters/ErrorTrackingWidget 5.55 kB 0 B
frontend/dist-report/exporter/src/scenes/max/messages/adapters/QueryWidget 5.67 kB 0 B
frontend/dist-report/exporter/src/scenes/max/messages/adapters/SearchSessionRecordingsWidget 5.58 kB 0 B
frontend/dist-report/exporter/src/scenes/max/messages/adapters/UpsertDashboardWidget 1.61 kB 0 B
frontend/dist-report/exporter/src/scenes/models/ModelsScene 20 kB 0 B
frontend/dist-report/exporter/src/scenes/models/NodeDetailScene 19 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 29.3 kB 0 B
frontend/dist-report/posthog-app/_parent/products/actions/frontend/pages/Actions 6.95 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_gateway/frontend/AIGatewayScene 13.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityScene 122 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilitySessionScene 19.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityTraceScene 133 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityUsers 4.23 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/clusters/AIObservabilityClusterScene 22.3 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/clusters/AIObservabilityClustersScene 54.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetScene 21.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetsScene 4.54 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluation 61.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluationsScene 34.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/evaluations/EvaluationTemplates 671 B 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/LLMASessionFeedbackDisplay 4.81 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/playground/AIObservabilityPlaygroundScene 38.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/prompts/LLMPromptScene 34.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/prompts/LLMPromptsScene 5.69 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/tags/AIObservabilityTag 33.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/tags/AIObservabilityTagsScene 13 kB 0 B
frontend/dist-report/posthog-app/_parent/products/business_knowledge/frontend/scenes/BusinessKnowledgeScene 23.8 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/Assignee/CyclotronJobInputAssignee 1.38 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/SlaBusinessHours/CyclotronJobInputBusinessHours 2.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/TicketTags/CyclotronJobInputTicketTags 783 B 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/settings/SupportSettingsScene 7.77 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/ticket/SupportTicketScene 35.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/tickets/SupportTicketsScene 2.15 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/CustomerAnalyticsScene 96.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsConfigurationScene/CustomerAnalyticsConfigurationScene 8.52 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyBuilderScene/CustomerJourneyBuilderScene 7.58 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyTemplatesScene/CustomerJourneyTemplatesScene 10 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/DataWarehouseScene 2.04 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/NewSourceScene/NewSourceScene 3.66 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SchemaScene/SchemaScene 34.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SourceConnectScene/SourceConnectScene 7.71 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SourceScene/SourceScene 3.37 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SourcesScene/SourcesScene 8.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/early_access_features/frontend/EarlyAccessFeature 6.97 kB 0 B
frontend/dist-report/posthog-app/_parent/products/early_access_features/frontend/EarlyAccessFeatures 4.21 kB 0 B
frontend/dist-report/posthog-app/_parent/products/endpoints/frontend/EndpointScene 48.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/endpoints/frontend/EndpointsScene 26.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/engineering_analytics/frontend/scenes/EngineeringAnalyticsAuthorScene 5.79 kB 0 B
frontend/dist-report/posthog-app/_parent/products/engineering_analytics/frontend/scenes/EngineeringAnalyticsScene 22 kB 0 B
frontend/dist-report/posthog-app/_parent/products/engineering_analytics/frontend/scenes/PullRequestDetailScene 21.3 kB 0 B
frontend/dist-report/posthog-app/_parent/products/engineering_analytics/frontend/scenes/WorkflowRunDetailScene 6.89 kB 0 B
frontend/dist-report/posthog-app/_parent/products/engineering_analytics/frontend/scenes/WorkflowRunsScene 8.42 kB 0 B
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingFingerprintsScene/ErrorTrackingIssueFingerprintsScene 8.17 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 44.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/feature_flags/frontend/FeatureFlagTemplatesScene 6.92 kB 0 B
frontend/dist-report/posthog-app/_parent/products/games/368Hedgehogs/368Hedgehogs 5.24 kB 0 B
frontend/dist-report/posthog-app/_parent/products/games/FlappyHog/FlappyHog 5.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/growth/frontend/IdentityMatchingScene 36.3 kB 0 B
frontend/dist-report/posthog-app/_parent/products/legal_documents/frontend/scenes/LegalDocumentNewScene 60.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/legal_documents/frontend/scenes/LegalDocumentsScene 6.84 kB 0 B
frontend/dist-report/posthog-app/_parent/products/links/frontend/LinkScene 25.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/links/frontend/LinksScene 5.63 kB 0 B
frontend/dist-report/posthog-app/_parent/products/live_debugger/frontend/LiveDebugger 20 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/components/LogsViewer/LogsViewerModal/LogsViewerModal 2.41 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/LogsScene 23.8 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsAlertDetailScene/LogsAlertDetailScene 19.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsAlertNotificationDetailScene/LogsAlertNotificationDetailScene 9.54 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsSamplingDetailScene/LogsSamplingDetailScene 6.59 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsSamplingNewScene/LogsSamplingNewScene 3.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/managed_migrations/frontend/ManagedMigration 15.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/mcp_analytics/frontend/MCPAnalyticsScene 110 kB 0 B
frontend/dist-report/posthog-app/_parent/products/mcp_analytics/frontend/MCPAnalyticsToolDetail 20.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/metrics/frontend/MetricsScene 18.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/posthog_ai/frontend/sandbox/components/tool/builtinToolRenderers 4.48 kB 0 B
frontend/dist-report/posthog-app/_parent/products/posthog_ai/frontend/sandbox/SandboxQuestionRenderer 1.76 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/stickiness/StickinessBarChart/StickinessBarChart 4.62 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/stickiness/StickinessLineChart/StickinessLineChart 4.5 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsBarChart/TrendsBarChart 10 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsLifecycleChart/TrendsLifecycleChart 6.31 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsLineChart/TrendsLineChart 6.27 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsPieChart/TrendsPieChart 5.45 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsSlopeChart/TrendsSlopeChart 3 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/observations/ReplayObservation 20 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner 42.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScannersScene 23.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ScannerEditorScene 25.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/revenue_analytics/frontend/revenueAnalyticsLogic 1.86 kB 0 B
frontend/dist-report/posthog-app/_parent/products/revenue_analytics/frontend/RevenueAnalyticsScene 31.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/session_summaries/frontend/SessionGroupSummariesTable 5.88 kB 0 B
frontend/dist-report/posthog-app/_parent/products/session_summaries/frontend/SessionGroupSummaryScene 25.3 kB 0 B
frontend/dist-report/posthog-app/_parent/products/skills/frontend/LLMSkillScene 1.94 kB 0 B
frontend/dist-report/posthog-app/_parent/products/skills/frontend/LLMSkillsScene 1.96 kB 0 B
frontend/dist-report/posthog-app/_parent/products/tasks/frontend/SlackTaskContextScene 9.47 kB 0 B
frontend/dist-report/posthog-app/_parent/products/tasks/frontend/TaskTracker 27.5 kB 0 B
frontend/dist-report/posthog-app/_parent/products/tracing/frontend/TracingScene 87.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterview 10.8 kB 0 B
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterviewResponse 8.52 kB 0 B
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterviews 6.94 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewIndexScene 3.48 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewRunScene 47.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewRunsScene 8.71 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewSettingsScene 12.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotHistoryScene 14.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotOverviewScene 20.3 kB 0 B
frontend/dist-report/posthog-app/_parent/products/workflows/frontend/TemplateLibrary/MessageTemplate 17.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/workflows/frontend/Workflows/WorkflowScene 107 kB 0 B
frontend/dist-report/posthog-app/_parent/products/workflows/frontend/WorkflowsScene 62.5 kB 0 B
frontend/dist-report/posthog-app/src/index 62.4 kB 0 B
frontend/dist-report/posthog-app/src/layout/panel-layout/ai-first/tabs/NavTabChat 7.89 kB 0 B
frontend/dist-report/posthog-app/src/lib/components/ActivityLog/describers 130 kB 0 B
frontend/dist-report/posthog-app/src/lib/components/Cards/TextCard/TextCardMarkdownEditor 10.6 kB 0 B
frontend/dist-report/posthog-app/src/lib/components/MonacoDiffEditor 533 B 0 B
frontend/dist-report/posthog-app/src/lib/components/Shortcuts/utils/DebugCHQueriesImpl 20.1 kB 0 B
frontend/dist-report/posthog-app/src/lib/components/Support/supportRouterLogic 1.56 kB 0 B
frontend/dist-report/posthog-app/src/lib/lemon-ui/LemonMarkdown/MermaidDiagram 2 kB 0 B
frontend/dist-report/posthog-app/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown 790 B 0 B
frontend/dist-report/posthog-app/src/lib/lemon-ui/Link/Link 415 B 0 B
frontend/dist-report/posthog-app/src/lib/monaco/CodeEditor 448 B 0 B
frontend/dist-report/posthog-app/src/lib/monaco/CodeEditorImpl 26.5 kB 0 B
frontend/dist-report/posthog-app/src/lib/monaco/CodeEditorInline 649 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 482 B 0 B
frontend/dist-report/posthog-app/src/queries/nodes/WebVitals/WebVitals 12.7 kB 0 B
frontend/dist-report/posthog-app/src/queries/nodes/WebVitals/WebVitalsPathBreakdown 5.13 kB 0 B
frontend/dist-report/posthog-app/src/queries/Query/Query 6.34 kB 0 B
frontend/dist-report/posthog-app/src/queries/schema 955 kB 0 B
frontend/dist-report/posthog-app/src/scenes/activity/explore/EventsScene 8.51 kB 0 B
frontend/dist-report/posthog-app/src/scenes/activity/explore/SessionsScene 9.85 kB 0 B
frontend/dist-report/posthog-app/src/scenes/activity/live/LiveEventsTable 6.58 kB 0 B
frontend/dist-report/posthog-app/src/scenes/agentic/AgenticAuthorize 5.51 kB 0 B
frontend/dist-report/posthog-app/src/scenes/approvals/ApprovalDetail 17.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/approvals/changeRequestsLogic 622 B 0 B
frontend/dist-report/posthog-app/src/scenes/audit-logs/AdvancedActivityLogsScene 43 kB 0 B
frontend/dist-report/posthog-app/src/scenes/AuthenticatedShell 207 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/account/AccountConnected 3.32 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/account/AgenticAccountMismatch 2.43 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/account/credential-review/CredentialReview 5.04 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/cli/CLIAuthorize 12.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/cli/CLILive 4.05 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/email-mfa-verify/EmailMFAVerify 3.04 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/invite-signup/InviteSignup 1.44 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/login-2fa/Login2FA 4.74 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/login/Login 1.42 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/login/loginLogic 569 B 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/password-reset/PasswordReset 4.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/password-reset/PasswordResetComplete 3.06 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/shared/passkeyLogic 602 B 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/signup/SignupContainer 1.42 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/two-factor-reset/TwoFactorReset 4.04 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/vercel/VercelConnect 5.03 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/vercel/VercelLinkError 2.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/verify-email/VerifyEmail 1.44 kB 0 B
frontend/dist-report/posthog-app/src/scenes/billing/AuthorizationStatus 768 B 0 B
frontend/dist-report/posthog-app/src/scenes/billing/Billing 717 B 0 B
frontend/dist-report/posthog-app/src/scenes/billing/BillingSection 21.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/cohorts/Cohort 33.9 kB 0 B
frontend/dist-report/posthog-app/src/scenes/cohorts/CohortCalculationHistory 7.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/cohorts/Cohorts 11 kB 0 B
frontend/dist-report/posthog-app/src/scenes/coupons/Coupons 895 B 0 B
frontend/dist-report/posthog-app/src/scenes/dashboard/Dashboard 7.76 kB 0 B
frontend/dist-report/posthog-app/src/scenes/dashboard/dashboards/Dashboards 22.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/dashboard/dashboards/templates/DashboardTemplateCopyScene 7.02 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/DataManagementScene 6.65 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/definition/DefinitionEdit 23.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/definition/DefinitionView 31.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/MaterializedColumns/MaterializedColumns 12.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/variables/SqlVariableEditScene 8.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/batch-exports/BatchExportScene 67.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/DataPipelinesNewScene 5.25 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/DestinationsScene 5.68 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/event-filtering/EventFilterScene 23.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/legacy-plugins/LegacyPluginScene 22 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/TransformationsScene 4.88 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/WebScriptsScene 5.54 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-warehouse/DataWarehouseScene 2.02 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-warehouse/editor/EditorScene 4.91 kB 0 B
frontend/dist-report/posthog-app/src/scenes/debug/DebugScene 25.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/debug/hog/HogRepl 8.95 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/Experiment 227 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/Experiments 23.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/notebook/NotebookCompactTable 1.98 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/SharedMetrics/SharedMetric 12.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/SharedMetrics/SharedMetrics 1.81 kB 0 B
frontend/dist-report/posthog-app/src/scenes/exports/ExportsScene 5.53 kB 0 B
frontend/dist-report/posthog-app/src/scenes/feature-flags/FeatureFlag 117 kB 0 B
frontend/dist-report/posthog-app/src/scenes/feature-flags/FeatureFlags 3.9 kB 0 B
frontend/dist-report/posthog-app/src/scenes/groups/Group 23.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/groups/Groups 9.48 kB 0 B
frontend/dist-report/posthog-app/src/scenes/groups/GroupsNew 8.59 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health-alerts/HealthAlertsScene 6.38 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health/categoryDetail/HealthCategoryDetailScene 13.2 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health/HealthScene 17.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health/pipelineStatus/PipelineStatusScene 12.2 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapNewScene 5.15 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapRecordingScene 5.15 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapScene 7.87 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmaps/HeatmapsScene 5.16 kB 0 B
frontend/dist-report/posthog-app/src/scenes/hog-functions/HogFunctionScene 60.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/hog-functions/misc/Diff 1.35 kB 0 B
frontend/dist-report/posthog-app/src/scenes/inbox/InboxScene 223 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/InsightQuickStart/InsightQuickStart 8.16 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/InsightScene 41.2 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/views/BoxPlot/BoxPlot 4.93 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/views/CalendarHeatMap/CalendarHeatMap 9.26 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/views/RegionMap/RegionMap 30.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/views/WorldMap/WorldMap 6.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/instance/AsyncMigrations/AsyncMigrations 14.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/instance/DeadLetterQueue/DeadLetterQueue 6.65 kB 0 B
frontend/dist-report/posthog-app/src/scenes/instance/QueryPerformance/QueryPerformance 12.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/instance/SystemStatus/SystemStatus 18.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/integrations/IntegrationsLandingScene 1.67 kB 0 B
frontend/dist-report/posthog-app/src/scenes/IntegrationsRedirect/IntegrationsRedirect 955 B 0 B
frontend/dist-report/posthog-app/src/scenes/marketing-analytics/MarketingAnalyticsScene 46.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/max/Max 20.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/max/messages/adapters/CreateInsightWidget 6.99 kB 0 B
frontend/dist-report/posthog-app/src/scenes/max/messages/adapters/CreateNotebookWidget 1.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/max/messages/adapters/EditDiffRenderer 3.23 kB 0 B
frontend/dist-report/posthog-app/src/scenes/max/messages/adapters/ErrorTrackingWidget 7.56 kB 0 B
frontend/dist-report/posthog-app/src/scenes/max/messages/adapters/QueryWidget 6.93 kB 0 B
frontend/dist-report/posthog-app/src/scenes/max/messages/adapters/SearchSessionRecordingsWidget 7.58 kB 0 B
frontend/dist-report/posthog-app/src/scenes/max/messages/adapters/UpsertDashboardWidget 1.61 kB 0 B
frontend/dist-report/posthog-app/src/scenes/models/ModelsScene 20.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/models/NodeDetailScene 19.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/moveToPostHogCloud/MoveToPostHogCloud 4.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/new-tab/NewTabScene 2.76 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookCanvasScene 12.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookPanel/NotebookPanel 14.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookScene 18 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebooksScene 8.69 kB 0 B
frontend/dist-report/posthog-app/src/scenes/oauth/OAuthAuthorize 810 B 0 B
frontend/dist-report/posthog-app/src/scenes/onboarding/legacy/coupon/OnboardingCouponRedemption 1.34 kB 0 B
frontend/dist-report/posthog-app/src/scenes/onboarding/Onboarding 785 kB 0 B
frontend/dist-report/posthog-app/src/scenes/onboarding/shared/sdkHealth/SdkHealthScene 9.04 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/ConfirmOrganization/ConfirmOrganization 4.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/Create/Create 704 B 0 B
frontend/dist-report/posthog-app/src/scenes/organization/Deactivated 1.17 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/PendingDeletion 2.24 kB 0 B
frontend/dist-report/posthog-app/src/scenes/persons/PersonScene 28.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/persons/PersonsScene 11.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/PreflightCheck/PreflightCheck 5.57 kB 0 B
frontend/dist-report/posthog-app/src/scenes/product-tours/ProductTour 273 kB 0 B
frontend/dist-report/posthog-app/src/scenes/product-tours/ProductTours 5.97 kB 0 B
frontend/dist-report/posthog-app/src/scenes/project-homepage/ProjectHomepage 27.2 kB 0 B
frontend/dist-report/posthog-app/src/scenes/project/Create/Create 982 B 0 B
frontend/dist-report/posthog-app/src/scenes/project/PendingDeletion 2.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/resource-transfer/ResourceTransfer 10.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/saved-insights/SavedInsights 3.47 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/detail/SessionRecordingDetail 8.55 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/file-playback/SessionRecordingFilePlaybackScene 11.2 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/kiosk/SessionRecordingsKiosk 16.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/player/modal/SessionPlayerModal 8.26 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/player/snapshot-processing/DecompressionWorkerManager 323 B 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistScene 11.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/SessionRecordings 7.68 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/settings/SessionRecordingsSettingsScene 8.88 kB 0 B
frontend/dist-report/posthog-app/src/scenes/sessions/SessionProfileScene 21.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/settings/SettingsMap 6.66 kB 0 B
frontend/dist-report/posthog-app/src/scenes/settings/SettingsScene 9.96 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.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/StripeConfirmInstall/StripeConfirmInstall 3.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/subscriptions/SubscriptionScene 17.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/subscriptions/SubscriptionsScene 7.02 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/forms/SurveyFormBuilder 3.02 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/Survey 7.48 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/Surveys 27.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/wizard/SurveyWizard 69.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/themes/CustomCssScene 4.91 kB 0 B
frontend/dist-report/posthog-app/src/scenes/toolbar-launch/ToolbarLaunch 3.97 kB 0 B
frontend/dist-report/posthog-app/src/scenes/Unsubscribe/Unsubscribe 1.71 kB 0 B
frontend/dist-report/posthog-app/src/scenes/web-analytics/SessionAttributionExplorer/SessionAttributionExplorerScene 12.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/web-analytics/WebAnalyticsScene 20.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/wizard/Wizard 4.45 kB 0 B
frontend/dist-report/posthog-app/src/sharedChunkAnchors 1.33 kB 0 B
frontend/dist-report/render-query/src/render-query/render-query 24.9 MB +362 B (0%)
frontend/dist-report/toolbar/src/toolbar/toolbar 11.3 MB +362 B (0%)

compressed-size-action

@greptile-apps

greptile-apps Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Reviews (1): Last reviewed commit: "feat(flags): authenticate /flags request..." | Re-trigger Greptile

Comment thread rust/feature-flags/src/handler/authentication.rs
@veria-ai

veria-ai Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

PR overview

All previously flagged issues have been addressed. No open security concerns remain on this pull request.

Security review

No open security issues remain on this pull request.

Fixed/addressed: 3 · PR risk: 0/10

@pawel-cebula pawel-cebula left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

FYI I mostly reviewed the quota-limiting part

Comment thread ee/billing/quota_limiting.py
@pawel-cebula pawel-cebula self-requested a review June 12, 2026 11:34

@pawel-cebula pawel-cebula left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks good from quota limiting side, thx for addressing the suggestions.

@github-project-automation github-project-automation Bot moved this from In Review to Approved in Feature Flags Jun 12, 2026
@haacked haacked removed this from Feature Flags Jun 15, 2026
@haacked

haacked commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Sorry, just noticed this. Will take a look from the feature flags side.

@haacked haacked left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks good from the feature flags side. Just some non-blocking suggestions.

Comment thread nodejs/src/common/utils/team-manager.ts
Comment thread nodejs/src/ingestion/common/steps/event-preprocessing/resolve-team.ts Outdated
Comment thread rust/feature-flags/src/handler/body_logger.rs
Comment thread nodejs/src/common/utils/team-manager.test.ts
Comment thread ee/billing/quota_limiting.py Outdated
@Piccirello

Copy link
Copy Markdown
Member

🔒 Security review notes (via Claude)

I reviewed this PR against its core invariant — $verified: true should appear iff the event was captured with the team's secret token. The event-property path is solid: capture forwards the raw client token, every producer into the events table routes through createResolveTeamStepapplyVerifiedProperty, and forged top-level $verified is stripped. Two things worth addressing:

1. $verified is still forgeable via $set / $set_once (Medium)

applyVerifiedProperty (nodejs/src/ingestion/event-preprocessing/resolve-team.ts) only strips the top-level event.properties['$verified']. It does not touch event.properties['$set']['$verified'] or $set_once.

A holder of the world-readable phc_ key can send:

{ "event": "...", "properties": { "$set": { "$verified": true } } }

This sets a person property $verified = true that is never stripped and is sticky across events. Under person-on-events, person.properties.$verified is queryable on the events table, so an automation (or an author using the blended event/person property filter UI) could key off it. The taxonomy entry added here says "Cannot be set by clients" — that holds only for the event property, not the person-property namespace.

Suggested fix: on the non-secret-token branch, also delete $verified from $set and $set_once (and for consistency on the secret-token branch too), with a parameterized test covering the $set/$set_once forgery case.

2. ProjectSecretAPIKeys authenticate /flags with no scope check (Low)

In rust/feature-flags/src/handler/authentication.rs, validate_secret_api_token also resolves ProjectSecret tokens and the is_project_secret flag is discarded, so any valid PSAK for the project can evaluate flags regardless of its scopes. This matches the existing /flag_definitions precedent and flag eval is project-scoped + read-only, so impact is limited — but it's a silent widening of what a PSAK grants.

Suggested fix: if PSAK scopes are meant to gate flag reads, enforce a feature_flag:read scope check when the token is a PSAK; otherwise document that flag evaluation is ungated for PSAKs.


Automated security review by Claude. Worth a human sanity-check before relying on $verified in automations.

@eli-r-ph

eli-r-ph commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

👋 hey folks

Billing / quota limiting: the quota-limit Redis sets now include each team's secret tokens alongside the public token. Capture enforces quota by the raw request token, so without this a team switching to phs_ capture would bypass billing limits.

Looks like this isn't an immediate blocker to this PR (no capture change yet) but FYI:

Just to confirm - at the moment no capture-rs services touch the database (we save team resolution etc. for the ingestion workers on the other side of the initial Kafka topic) to ensure we don't lose data during DB incidents or slow down the pipeline with DB calls. We do check billing quotas from Redis in capture, and drop a substantial amount of events/second on this (without linking graphs, about 16k/sec as of this hour in prod US alone) so we probably need a story for this before the e2e ships.

If we opt to move quota checks entirely downstream, we will ship those events (and future ones...sometimes this can really spike) into the topic just to drop them downstream. Not a hard blocker, but something to consider

@Gilbert09 Gilbert09 force-pushed the tom/secret-key-verified-events branch from 992e917 to c877c2d Compare June 22, 2026 12:28
@github-actions

github-actions Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

🕸️ Eager graph

How much code each root forces the browser to download and decode through static imports — the regression class total bundle size can't see.

Root Eager closure Δ vs base Budget
entry (logged-out pages, app bootstrap)
src/index.tsx
15.15 MiB · 774 files 🔺 +500 B (+0.0%) ██████████ 99.3% of 15.26 MiB
authenticated shell (every logged-in page)
src/scenes/AuthenticatedShell.tsx
32.34 MiB · 5,189 files 🔺 +500 B (+0.0%) ██████████ 99.7% of 32.42 MiB

node_modules/monaco-editor/ stays out of src/index.tsx
src/lib/components/ActivityLog/describers stays out of src/index.tsx
node_modules/monaco-editor/ stays out of src/scenes/AuthenticatedShell.tsx
src/lib/components/ActivityLog/describers stays out of src/scenes/AuthenticatedShell.tsx

Largest files eagerly reachable from src/index.tsx
Size File
899.9 KiB src/styles/global.scss
609.0 KiB public/hedgehog/burning-money-hog.png
541.9 KiB public/hedgehog/waving-hog.png
448.2 KiB public/hedgehog/stop-sign-hog.png
362.0 KiB public/hedgehog/phone-pair-hogs.png
355.9 KiB ../node_modules/.pnpm/@posthog+icons@0.37.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
343.5 KiB src/taxonomy/core-filter-definitions-by-group.json
335.6 KiB public/hedgehog/desk-hog.png
323.2 KiB public/hedgehog/3-bears-hogs.png
298.6 KiB src/lib/api.ts
Largest files eagerly reachable from src/scenes/AuthenticatedShell.tsx
Size File
899.9 KiB src/styles/global.scss
764.5 KiB src/queries/validators.js
609.0 KiB public/hedgehog/burning-money-hog.png
541.9 KiB public/hedgehog/waving-hog.png
448.2 KiB public/hedgehog/stop-sign-hog.png
362.0 KiB public/hedgehog/phone-pair-hogs.png
355.9 KiB ../node_modules/.pnpm/@posthog+icons@0.37.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
343.5 KiB src/taxonomy/core-filter-definitions-by-group.json
335.6 KiB public/hedgehog/desk-hog.png
323.2 KiB public/hedgehog/3-bears-hogs.png

Posted automatically by check-eager-graph · sizes are input-source bytes from the esbuild metafile · part of #32479

@posthog

posthog Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

👋 Visual changes detected for this PR.

Review and approve in PostHog Visual Review

If these changes are unexpected, they may be caused by a flaky test or a broken snapshot on master. Don't approve — rerun the job or wait for a fix.

Comment thread rust/feature-flags/src/handler/body_logger.rs
Comment thread nodejs/src/ingestion/common/steps/event-preprocessing/resolve-team.ts Outdated

Copy link
Copy Markdown
Member Author

Addressed in 49816d9: applyVerifiedProperty now scrubs $verified from $set, $set_once, and $unset (object and array forms) on non-secret-token events, so a forged $verified person property can no longer be smuggled in via person-property operations. Added unit + step-level tests covering each operation.

Copy link
Copy Markdown
Member Author

CI status

The branch is up to date with master, mergeable with no conflicts, and the review thread has been resolved with a code fix + tests.

The only remaining red check is Product tests (data-warehouse, workflows) (and the Django Tests Pass gate that depends on it). This is a pre-existing, master-wide failure unrelated to this PR — this PR touches no data_warehouse code.

Evidence:

  • The same two tests fail on plain master HEAD runs:
    • backend/models/test/test_managed_viewset.py::TestDataWarehouseManagedViewSetModel::test_sync_views_creates_viewsAssertionError: False is not true (is_materialized)
    • backend/test/test_saved_query_dag_sync_integration.py::TestSavedQueryDagSyncIntegration::test_materialize_updates_node_type500 != 200
  • master's Backend CI went from green to red in the window whose only commit is revert(ci): use correct DOCKERHUB_USER secret name for Docker Hub auth #65256 (revert(ci): use correct DOCKERHUB_USER secret name for Docker Hub auth), a CI-only change to Docker Hub auth across all workflows.
  • The materialize integration tests pull a container image; with Docker Hub auth broken the pull fails, surfacing as the 500 / is_materialized=False. (The earlier transient semgrep failure on this PR was the same Docker-pull root cause.)
  • test_materialize_view and the other non-integration materialize tests pass — only the tests that need the pulled image fail.

This needs the master CI Docker Hub auth issue to be resolved (infra-side). Once master is green again, re-running / re-merging this branch will clear the check. Everything within this PR's control is green.

Capture enforces quota limits by the raw ingestion token, so a team
sending events with its phs_ secret API token would bypass billing
limits keyed only on the public api_token. Write every ingestion token
(api_token, secret_api_token, secret_api_token_backup) to the
quota-limit and quota-limiting-suspended zsets; change detection stays
keyed on the always-present public token.
Events captured with a team's secret API token (phs_, primary or
backup) now resolve to the team during ingestion instead of being
dropped as invalid_token, and get a server-set $verified: true
property. $verified is server-controlled: any client-supplied value
on public-token events is stripped, so it cannot be forged. Applied
in the shared resolve-team step so both the analytics and
error-tracking pipelines (and the heatmap subpipeline) are covered.

Also registers $verified in the taxonomy so it renders in the UI.
… token

An SDK configured with the phs_ secret API token as its api_key (for
verified event capture) would otherwise lose feature flags: the team
metadata HyperCache and PG lookup are keyed by the public token only,
so phs_ tokens landed in the negative cache and 401'd. Branch on the
phs_ prefix and reuse the cached secret-token validation already used
by /flag_definitions, resolving the team via its public token (or by
id for legacy cache entries).
/flags now accepts a phs_ secret token as api_key, so the decoded request
body can carry one. The body logger recorded the decoded body verbatim for
opted-in teams, which would let a log reader recover the secret. Redact
phs_-prefixed tokens before logging; public phc_ tokens are world-readable
by design and left intact.

Generated-By: PostHog Code
Task-Id: c79724ba-e6b2-4100-ab76-9e05351b46bf
Generated-By: PostHog Code
Task-Id: c79724ba-e6b2-4100-ab76-9e05351b46bf
The scheduled quota refresh already writes every ingestion token (public +
secret) to Redis, but the manual limit/unlimit and token-change paths did not,
so they could drift from the quota contract this PR introduces.

- Route `Organization.limit_product_until_end_of_billing_cycle` /
  `unlimit_product` through `get_team_ingestion_tokens` so secret tokens are
  limited/unlimited alongside the public token.
- Add `sync_team_quota_limited_tokens`, a shared helper that re-points a team's
  active quota limits onto its current ingestion tokens, and call it from the
  public token reset and the secret token rotation/backup-deletion paths. This
  closes the gap where a newly rotated token could ingest freely until the next
  scheduled refresh.

Generated-By: PostHog Code
Task-Id: a7bc377f-4621-42b8-846e-fdbec703e2b7
- quota_limiting: re-chunk the flat zscore pipeline results into a per-zset
  map in one place so the slice windows can't drift out of sync with the
  build loop.
- team model: resolve the secret-token backup slot on the Django auth path
  too, mirroring the ingestion (TeamManager) and /flags resolvers, so a
  rotated-out token keeps authenticating during the grace period; add a
  backup-token auth test.
- feature-flags body_logger: add a log_response test that feeds a phs_ body
  and asserts the emitted line is redacted, guarding the call-site redaction.
- team-manager: add a test asserting a rotated-out secret token stops
  resolving once the cache refreshes.

Generated-By: PostHog Code
Task-Id: 68621483-6e60-4d42-8f26-88533fd62ad4
A `/flags` caller can send a valid secret token as JSON unicode escapes
(`"api_key":"phs_..."`). serde decodes it for
authentication, but the raw-text regex never sees the literal `phs_` prefix,
so the body log stored a recoverable representation.

Redact structurally when the body parses as JSON: walk the decoded values,
redact any string carrying a `phs_` token, and re-serialize, then run the
regex over the result as a backstop. Non-JSON bodies fall back to the
raw-text regex as before. Adds a test feeding a `\u`-escaped token.

Generated-By: PostHog Code
Task-Id: 68621483-6e60-4d42-8f26-88533fd62ad4
A sender using the public project token could smuggle a forged "$verified"
person property through $set/$set_once/$unset, since the previous code only
stripped the top-level properties.$verified on non-secret-token events. Scrub
$verified from those person-property operations too, so the server-controlled
"Verified" marker cannot be forged without the secret API token.

Generated-By: PostHog Code
Task-Id: d0e82832-8e45-4e3a-b495-f393aee5649e
@Gilbert09 Gilbert09 force-pushed the tom/secret-key-verified-events branch from 059b901 to 543b294 Compare June 25, 2026 21:08
@github-actions

Copy link
Copy Markdown
Contributor

🎭 Playwright report

⚠️ 1 flaky test:

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

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

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.

5 participants