Skip to content

feat(data-warehouse): allow enabling and disabling CDC after source creation#60708

Merged
danielcarletti merged 17 commits into
masterfrom
posthog-code/cdc-edit-config
Jun 1, 2026
Merged

feat(data-warehouse): allow enabling and disabling CDC after source creation#60708
danielcarletti merged 17 commits into
masterfrom
posthog-code/cdc-edit-config

Conversation

@danielcarletti
Copy link
Copy Markdown
Contributor

@danielcarletti danielcarletti commented May 29, 2026

Problem

CDC was a one-shot decision at source creation. Users who wanted to flip it on later, turn it off, or tune lag thresholds had to delete and recreate the source — losing schedule + schema history. The Configuration tab on data-management/sources/managed-<id>/configuration had no CDC controls.

Changes

Backend — three new viewset actions on ExternalDataSource:

  • POST /enable_cdc/ — re-runs prereq checks server-side, provisions engine-side CDC resources, writes config to job_inputs, ensures the extraction schedule exists. 409 on already-enabled, 403 when team flag off.
  • POST /disable_cdc/ — cancels any running CDC workflow, deletes the extraction schedule, delegates engine-side teardown to the adapter (drops slot + publication for Postgres, drops slot only for self-managed), soft-deletes _cdc companion tables, and forces CDC schemas to pick a new strategy by clearing sync_type and setting should_sync=False. Clears every cdc_* key from job_inputs so re-enable starts clean.
  • POST /update_cdc_settings/ — edits cdc_auto_drop_slot and lag thresholds with cross-field validation (warn < crit). Universal across engines; the other CDC fields stay immutable post-enable.

Postgres-agnostic abstractionCDCSourceAdapter Protocol (posthog/temporal/data_imports/cdc/adapters.py) gains setup_resources(source, payload) -> tuple[dict, str | None] and cleanup_resources(source) -> None. The viewset gates new actions via get_cdc_adapter(source) — returns 400 with a generic "CDC is not supported for source type: X" message instead of hard-coding if source.source_type != POSTGRES. Adding a future engine (MySQL binlog, etc.) means adding an adapter, no viewset changes.

Partial-state rollbackPostgresCDCAdapter.setup_resources now drops any partially-created slot/publication on failure. PostHog-managed mode uses drop_slot_and_publication; self-managed mode uses a new drop_slot helper so we never touch the customer-owned publication.

Frontend — new CDCSection component on the Configuration tab (gated on Postgres + warehouse + DWH_POSTGRES_CDC flag). Shows enabled-state (mode/slot/pub readouts + editable lag fields) or disabled-state (mode picker + prereq check + enable). Every save/enable/disable goes through LemonDialog.open confirmation. Buttons wrapped in AccessControlAction (Editor level). API client gets enable_cdc, disable_cdc, update_cdc_settings.

How did you test this code?

I'm an agent. Automated coverage:

  • 32 new backend tests in test_external_data_source.py covering: non-CDC-source rejection, team flag gating, already-enabled (409), invalid management mode (parameterized), prereq failures, prereq connection exceptions, posthog-managed success, self-managed publication forwarding, slot-setup failure (no source delete), posthog rollback on partial slot failure, self-managed rollback (slot-only, never the customer-owned publication), running-workflow cancellation, schedule + slot cleanup ordering, atomic schema pause + cdc_* key clearing, companion _cdc table soft-deletion, partial-update preservation, threshold validation (warn vs persisted crit), no-op empty payload, bool coercion.
  • Full file: 223 tests pass.
  • Lint + format clean. No manual UI testing performed.

Manual tests:

  • created a Postgres source
  • edited source to enable CDC
  • DB contains the publication/replication slot correctly
  • configured a table to use CDC
  • sync works
  • added data, CDC sync works too
  • disabled CDC for source
  • schema no longer syncs and publication/replication slot were dropped
  • enabled it again, everything works

Did the same for a source with CDC enabled during creation. Everything worked.

Before enabling:
Screenshot 2026-05-29 at 17 37 02

After enabling:
Screenshot 2026-05-29 at 17 37 24

Automatic notifications

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

Docs update

🤖 Agent context

PostHog Code agent (Claude Opus 4.7). Conversation built up in stages:

  1. Initial design pass surfaced edge cases beyond the user's two stated needs — running workflow cancellation before slot drop (Postgres refuses pg_drop_replication_slot while active), stale cdc_consistent_point corrupting resume tracking if re-enabled, schedule + companion table cleanup. User picked "Option A" disable semantics (force schema re-pick) over silent fallback to incremental.
  2. Tests were added on second pass after the user flagged that the change has "major implications" — discovered along the way that EncryptedJSONField round-trips scalar values as strings, which is now baked into the test assertions.
  3. User asked to generalize the Postgres-specific viewset code. Found pre-existing CDCSourceAdapter Protocol and extended it with setup_resources + cleanup_resources rather than inventing a new abstraction. Viewset now adapter-only.
  4. User asked for the inline imports added during the refactor to be hoisted. Discovered that hoisting changes patch targets (Python binds names locally at import time, so @patch("source_module.X") no longer works once from source_module import X is at the top of the consumer). Patches updated to target the viewset module.
  5. After fast-forwarding 150 commits from master, one file conflicted on imports + the create() CDC flow. Upstream had restructured create() to move CDC setup after PK validation and folded the source-type check into cdc_enabled itself — adopted that ordering, kept the adapter-based call.

User confirmed each major design decision before implementation (option A semantics, nice-to-haves bundle, modal-on-every-save UX).


Created with PostHog Code

…reation

Add three new viewset actions (enable_cdc, disable_cdc, update_cdc_settings)
on ExternalDataSource and a Configuration tab CDC section that wires them up
with confirmation modals. Disable forces CDC schemas to pick a new sync
strategy by clearing sync_type and pausing.

Generalize the CDC viewset code so it dispatches via CDCSourceAdapter
(setup_resources + cleanup_resources) instead of instantiating PostgresSource
or PostgresCDCConfig directly — future CDC engines (MySQL, etc) plug in by
implementing the adapter Protocol. Postgres setup/cleanup logic now lives on
the adapter alongside slot/publication primitives.

Setup also rolls back partial slot/publication state on failure so a half-
provisioned source DB doesn't leak replication infra.

Generated-By: PostHog Code
Task-Id: fcaae539-62ef-4f3c-ae16-27bc684d8446
@assign-reviewers-posthog assign-reviewers-posthog Bot requested review from a team May 29, 2026 16:48
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 29, 2026

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

---

### Issue 1 of 2
products/data_warehouse/frontend/scenes/SourceScene/tabs/CDCSection.tsx:372-374
Stale prerequisite result after publication name change — when a user in self-managed mode runs the prereq check against "pub_a", then edits the input to "pub_b", the success banner for "pub_a" remains visible. The Enable button is not gated on a stale result (the server re-validates), but the UI can mislead the user into thinking "pub_b" was already validated.

```suggestion
                <LemonField.Pure label="Publication name">
                    <LemonInput
                        value={publicationName}
                        onChange={(v) => {
                            setPublicationName(v)
                            setPrereqResult(null)
                        }}
                        placeholder="posthog_pub"
                    />
                </LemonField.Pure>
```

### Issue 2 of 2
products/data_warehouse/backend/api/external_data_source.py:1955-1967
Only the latest running job is cancelled before teardown — if another CDC extraction job for the same source is concurrently `Running` (e.g., a late-starting retry that hasn't yet registered a workflow ID, or two overlapping trigger calls), its active use of the replication slot will cause `pg_drop_replication_slot` to fail inside `cleanup_resources`. The best-effort wrapper suppresses the error, so the slot remains on the customer database consuming WAL. The `cdc_*` keys are still cleared locally, so PostHog won't restart CDC — but the orphaned slot persists until the concurrent job finishes or is cancelled manually.

Reviews (1): Last reviewed commit: "feat(data-warehouse): allow enabling and..." | Re-trigger Greptile

Comment thread products/data_warehouse/frontend/scenes/SourceScene/tabs/CDCSection.tsx Outdated
Comment on lines +1955 to +1967

cdc_error = self._setup_cdc_resources(adapter, instance, request.data)
if cdc_error is not None:
return Response(
status=status.HTTP_400_BAD_REQUEST,
data={"message": cdc_error},
)

# Ensure the CDC extraction schedule + global cleanup schedule exist. No CDC
# schemas yet (user must switch sync_type=cdc on the Sync tab afterward), so
# `sync_cdc_extraction_schedule` no-ops or creates a paused schedule — that's
# fine, it'll start running on the next schema update.
try:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P2 Only the latest running job is cancelled before teardown — if another CDC extraction job for the same source is concurrently Running (e.g., a late-starting retry that hasn't yet registered a workflow ID, or two overlapping trigger calls), its active use of the replication slot will cause pg_drop_replication_slot to fail inside cleanup_resources. The best-effort wrapper suppresses the error, so the slot remains on the customer database consuming WAL. The cdc_* keys are still cleared locally, so PostHog won't restart CDC — but the orphaned slot persists until the concurrent job finishes or is cancelled manually.

Prompt To Fix With AI
This is a comment left during a code review.
Path: products/data_warehouse/backend/api/external_data_source.py
Line: 1955-1967

Comment:
Only the latest running job is cancelled before teardown — if another CDC extraction job for the same source is concurrently `Running` (e.g., a late-starting retry that hasn't yet registered a workflow ID, or two overlapping trigger calls), its active use of the replication slot will cause `pg_drop_replication_slot` to fail inside `cleanup_resources`. The best-effort wrapper suppresses the error, so the slot remains on the customer database consuming WAL. The `cdc_*` keys are still cleared locally, so PostHog won't restart CDC — but the orphaned slot persists until the concurrent job finishes or is cancelled manually.

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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

this seems valid

…entials

The Configuration-page "Check database prerequisites" button reused the
creation-wizard endpoint, which expects the raw connection config (incl.
password) in the request body. For an existing source those secret fields are
stripped from API responses, so the client sent a config with no password and
the server rejected it with "Required field 'password' is missing".

Add a detail=True check_cdc_prerequisites_for_source action that validates
against the source's stored (encrypted) credentials via the CDC adapter, and
point the Configuration page at it.

Generated-By: PostHog Code
Task-Id: fcaae539-62ef-4f3c-ae16-27bc684d8446
When enabling self-managed CDC from the Configuration tab, walk the user
through the CREATE PUBLICATION / GRANT SQL in a modal before enabling, mirroring
the creation wizard. The publication must exist before PostHog can create the
replication slot, so "Set up & enable CDC" opens the SQL modal; the user runs it,
confirms, and "Verify & enable" runs enable_cdc (which re-validates prerequisites
server-side and surfaces any failures inline).

SQL is built client-side from the source's non-secret job_inputs (schema, user)
plus the publication name, defaulting the table list to currently-synced tables.

PostHog-managed enable is unchanged — PostHog creates the publication itself.

Generated-By: PostHog Code
Task-Id: fcaae539-62ef-4f3c-ae16-27bc684d8446
Comment thread posthog/temporal/data_imports/sources/postgres/cdc/adapter.py
@veria-ai
Copy link
Copy Markdown

veria-ai Bot commented May 29, 2026

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: 2 · PR risk: 0/10

The Configuration page never reflected CDC as enabled because the cdc_* keys
live in job_inputs but aren't source-config form fields, so the read serializer
stripped them as "unknown". Expose them via an explicit non-secret allowlist so
the UI can render the enabled state, the "Disable CDC" / "Update CDC configs"
controls, and details.

Also:
- Coerce string-bool job_inputs values on the client (EncryptedJSONField stores
  scalars as strings, so cdc_enabled/cdc_auto_drop_slot arrive as "True"/"False").
- Add a cdc_status endpoint (and adapter get_status) returning live replication
  slot / publication existence and WAL lag, surfaced in a "Replication status"
  panel with a refresh button and missing-slot/publication warnings.
- Rename the enabled-state primary button to "Update CDC configs".
- Widen test_list_external_data_source's FuzzyInt lower bound to match its own
  documented cached-lookup variance (now flakes less under a larger test set).

Generated-By: PostHog Code
Task-Id: fcaae539-62ef-4f3c-ae16-27bc684d8446
…text error

The replication-status panel fetched cdc_status from a React useEffect on mount,
which could run before the global team id was set, throwing "Team ID is not
known." Move the fetch into sourceSettingsLogic as a loader triggered from
loadSourceSuccess (which only fires after a successful source load, so the team
context is guaranteed). This also follows the kea convention of keeping data
fetching out of React effects. The status call opens a connection to the
customer DB, so it runs once per source plus on manual refresh — never on the
5s poll.

Generated-By: PostHog Code
Task-Id: fcaae539-62ef-4f3c-ae16-27bc684d8446
Comment thread products/data_warehouse/frontend/scenes/SourceScene/tabs/CDCSection.tsx Outdated
Resolves the import conflict in external_data_source.py (drops the now-unused
PostgresCDCConfig import; keeps SQLSource from master).

Review fixes bundled in:
- setup_resources now pre-flight checks slot/publication existence and refuses to
  proceed if either already exists, so a failed create never rolls back (drops)
  a slot/publication PostHog didn't create (Veria security finding).
- disable_cdc cancels ALL running extraction jobs, not just the latest, so a
  concurrent job can't hold the replication slot and fail the teardown (Greptile).
- Editing the self-managed publication name clears the stale prereq banner (Greptile).
- Moved add/remove-table-to-publication into the CDC adapter (add_table/remove_table);
  external_data_source and external_data_schema now go through the adapter instead of
  calling slot_manager directly.

Generated-By: PostHog Code
Task-Id: fcaae539-62ef-4f3c-ae16-27bc684d8446
@danielcarletti
Copy link
Copy Markdown
Contributor Author

Addressed the AI-review findings (commit f709c8d):

  • Veria — rollback could drop pre-existing slots/publications. setup_resources now pre-flight checks slot_exists/publication_exists and refuses with a clear error if either already exists. Because we only proceed past that point when both are confirmed absent, the failure rollback can only ever drop resources we just created — never a customer's existing slot/publication. Self-managed mode still only touches the slot (never the customer-owned publication). Covered by new unit tests in cdc/tests/test_adapter.py.
  • Greptile — only the latest running job was cancelled before teardown. disable_cdc now cancels all Running extraction jobs for the source (with a workflow id), so a concurrent/overlapping job can't keep the replication slot busy and fail pg_drop_replication_slot.
  • Greptile — stale prerequisite banner. Editing the self-managed publication name now clears the prior check result.

Also moved the add/remove-table-to-publication resource ops onto the CDC adapter (add_table/remove_table) so external_data_source and external_data_schema no longer call slot_manager directly.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 29, 2026

Size Change: 0 B

Total Size: 80.9 MB

ℹ️ View Unchanged
Filename Size Change
frontend/dist-report/decompression-worker/src/scenes/session-recordings/player/snapshot-processing/decompressionWorker 2.85 kB 0 B
frontend/dist-report/exporter/_chunks/chunk 8.43 MB +590 B (+0.01%)
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 19.8 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 53.1 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 60.5 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.2 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsAlertNotificationDetailScene/LogsAlertNotificationDetailScene 8.49 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.6 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.41 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.14 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner 34 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 7.79 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 854 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/_chunks/chunk 8.63 MB +590 B (+0.01%)
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 19.8 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 51.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 60.5 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.3 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsAlertNotificationDetailScene/LogsAlertNotificationDetailScene 8.53 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.45 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.18 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner 34 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 7.83 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 854 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.45 kB 0 B
frontend/dist-report/posthog-app/src/scenes/feature-flags/FeatureFlag 144 kB 0 B
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.9 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 792 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 20.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/persons/PersonsScene 6.12 kB 0 B
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 19.1 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
frontend/dist-report/render-query/src/render-query/render-query 27.4 MB +590 B (0%)
frontend/dist-report/toolbar/src/toolbar/toolbar 15.7 MB +590 B (0%)

compressed-size-action

@github-actions
Copy link
Copy Markdown
Contributor

MCP UI Apps size report

App JS CSS
debug 474.9 KB 139.9 KB
action 349.4 KB 139.9 KB
action-list 357.2 KB 139.9 KB
cohort 348.5 KB 139.9 KB
cohort-list 356.2 KB 139.9 KB
error-details 369.9 KB 139.9 KB
error-issue 349.2 KB 139.9 KB
error-issue-list 357.2 KB 139.9 KB
experiment 353.7 KB 139.9 KB
experiment-list 358.0 KB 139.9 KB
experiment-results 355.8 KB 139.9 KB
feature-flag 434.3 KB 139.9 KB
feature-flag-list 438.8 KB 139.9 KB
feature-flag-testing 427.2 KB 139.9 KB
insight-actors 352.3 KB 139.9 KB
llm-costs 351.9 KB 139.9 KB
session-recording 350.2 KB 139.9 KB
session-summary 356.2 KB 139.9 KB
survey 350.0 KB 139.9 KB
survey-global-stats 354.8 KB 139.9 KB
survey-list 357.9 KB 139.9 KB
survey-stats 354.8 KB 139.9 KB
trace-span 348.8 KB 139.9 KB
trace-span-list 357.1 KB 139.9 KB
workflow 348.8 KB 139.9 KB
workflow-list 356.6 KB 139.9 KB
query-results 370.6 KB 139.9 KB
visual-review-snapshots 353.5 KB 139.9 KB

Generated-By: PostHog Code
Task-Id: fcaae539-62ef-4f3c-ae16-27bc684d8446
@tests-posthog
Copy link
Copy Markdown
Contributor

tests-posthog Bot commented May 29, 2026

⏭️ Skipped snapshot commit because branch advanced to e89ba99 while workflow was testing f709c8d.

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

Comment on lines +2054 to +2058
try:
sync_cdc_extraction_schedule(instance, create=True)
ensure_cdc_slot_cleanup_schedule()
except Exception as e:
logger.exception("Could not create CDC schedules after enable_cdc", exc_info=e)
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.

If CDC schedule creation fails after successfully writing cdc_enabled=True to job_inputs, the source will be marked as CDC-enabled but have no active schedule. The operation returns success (line 2060) despite the failure, leaving the system in an inconsistent state where CDC appears enabled but won't actually run.

# Current code silently logs and continues:
try:
    sync_cdc_extraction_schedule(instance, create=True)
    ensure_cdc_slot_cleanup_schedule()
except Exception as e:
    logger.exception("Could not create CDC schedules after enable_cdc", exc_info=e)

# Should fail the operation if schedules can't be created:
try:
    sync_cdc_extraction_schedule(instance, create=True)
    ensure_cdc_slot_cleanup_schedule()
except Exception as e:
    logger.exception("Could not create CDC schedules after enable_cdc", exc_info=e)
    # Roll back the CDC config
    job_inputs = dict(instance.job_inputs or {})
    for key in list(job_inputs.keys()):
        if key.startswith("cdc_"):
            job_inputs.pop(key, None)
    instance.job_inputs = job_inputs
    instance.save(update_fields=["job_inputs", "updated_at"])
    return Response(
        status=status.HTTP_500_INTERNAL_SERVER_ERROR,
        data={"message": f"CDC resources created but schedule setup failed: {e}"},
    )
Suggested change
try:
sync_cdc_extraction_schedule(instance, create=True)
ensure_cdc_slot_cleanup_schedule()
except Exception as e:
logger.exception("Could not create CDC schedules after enable_cdc", exc_info=e)
try:
sync_cdc_extraction_schedule(instance, create=True)
ensure_cdc_slot_cleanup_schedule()
except Exception as e:
logger.exception("Could not create CDC schedules after enable_cdc", exc_info=e)
# Roll back the CDC config
job_inputs = dict(instance.job_inputs or {})
for key in list(job_inputs.keys()):
if key.startswith("cdc_"):
job_inputs.pop(key, None)
instance.job_inputs = job_inputs
instance.save(update_fields=["job_inputs", "updated_at"])
return Response(
status=status.HTTP_500_INTERNAL_SERVER_ERROR,
data={"message": f"CDC resources created but schedule setup failed: {e}"},
)

Spotted by Graphite

Fix in Graphite


Is this helpful? React 👍 or 👎 to let us know.

Tables discovered after source creation (via "refresh schemas") had their
detected primary key dropped — reconcile_postgres_schemas wrote schema_metadata
but never stored primary_key_columns. Switching such a table to CDC then failed
with "refresh schema discovery to pick one up", which never actually worked
because refresh didn't persist the PK.

Persist source_schema.detected_primary_keys into sync_type_config.primary_key_columns
during reconcile (without clobbering an existing/overridden value), so the error
message's guidance holds and post-creation tables can be switched to CDC.

Generated-By: PostHog Code
Task-Id: fcaae539-62ef-4f3c-ae16-27bc684d8446
The CDC sync_type branch overwrote primary_key_columns unconditionally, unlike
the incremental branch which refuses a PK change once a table has materialized.
Since CDC uses the PK as the UPDATE/DELETE merge key, changing it mid-sync would
corrupt dedup. Apply the same guard: reject when the PK differs and a synced
table exists.

Generated-By: PostHog Code
Task-Id: fcaae539-62ef-4f3c-ae16-27bc684d8446
The pgoutput decoder emitted bare table names (cdc_test_orders) on every
ChangeEvent, but the CDC extraction activity filters and keys against the
qualified ExternalDataSchema.name (public.cdc_test_orders). Result: every change
was dropped, event_count stayed 0, and the slot was never advanced — CDC
streaming silently no-op'd for any schema with a qualified name (i.e. every
source created after Postgres schema names were qualified). The replication slot
just accumulated WAL forever.

Emit schema-qualified `schema.table` from the decoder so events match the
schema names the activity keys on, end to end (filter, schema_by_name, batcher,
truncate handling).

Generated-By: PostHog Code
Task-Id: fcaae539-62ef-4f3c-ae16-27bc684d8446
Comment on lines +1955 to +1967

cdc_error = self._setup_cdc_resources(adapter, instance, request.data)
if cdc_error is not None:
return Response(
status=status.HTTP_400_BAD_REQUEST,
data={"message": cdc_error},
)

# Ensure the CDC extraction schedule + global cleanup schedule exist. No CDC
# schemas yet (user must switch sync_type=cdc on the Sync tab afterward), so
# `sync_cdc_extraction_schedule` no-ops or creates a paused schedule — that's
# fine, it'll start running on the next schema update.
try:
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

this seems valid

return Response(status=status.HTTP_200_OK, data={"success": True, "already_disabled": True})

# Cancel ALL running workflows first — any one holding the slot fails pg_drop_replication_slot.
running_jobs = ExternalDataJob.objects.filter(
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

we should probably filter by cdc here

- disable_cdc: only cancel running jobs belonging to CDC schemas, not unrelated
  incremental/full-refresh syncs on the same source (reviewer: filter by cdc).
- enable_cdc: capture (not just log) CDC schedule-creation failures and return
  schedules_ready so a failure isn't reported as clean success. The extraction
  schedule is authoritatively (re)created on the first CDC schema toggle, so this
  can't strand a "CDC on, never runs" source.
- CDCSection self-managed SQL: escape embedded double-quotes in all identifiers
  (schema/table/user/publication) so a name containing `"` can't inject extra SQL
  into the generated copy-paste script.

Generated-By: PostHog Code
Task-Id: fcaae539-62ef-4f3c-ae16-27bc684d8446
@danielcarletti
Copy link
Copy Markdown
Contributor Author

Addressed the latest review (commit bd0296d):

  • @MarconLPdisable_cdc should filter by CDC (external_data_source.py:2085): now cancels only running jobs whose schema is CDC (schema_id__in the source's CDC schemas), read before the sync_type reset. A running incremental/full-refresh sync on the same source is no longer cancelled. Added test_disable_cdc_does_not_cancel_non_cdc_running_jobs. The earlier "cancel all running jobs" change (your "this seems valid") is kept but now scoped.
  • Graphite — enable returns success even if schedule creation fails: now capture_exceptions the failure and returns schedules_ready: false instead of a clean success. Note there are no CDC schemas at enable time, so sync_cdc_extraction_schedule is a no-op here — the extraction schedule is authoritatively (re)created when a schema is switched to CDC, so a hiccup here can't strand a "CDC on, never runs" source; the slot + config are valid and self-heal.
  • Veria — SQL injection in generated setup script (CDCSection.tsx): all identifiers (schema/table/user/publication) now go through quoteIdent, which doubles embedded " per the SQL spec, so a name containing "; … -- can't inject extra statements into the copy-paste script.

Earlier findings already shipped: stale prereq banner cleared on publication-name change, rollback no longer drops pre-existing slots/publications (pre-flight existence check), and the CDC streaming no-op (decoder emitted bare table names vs qualified schema names) — fixed and verified live (slot drains, batch_processed_ok).

Local postgres is down on my box so the DB-backed enable/disable tests run in CI, not locally; decoder + frontend typecheck/lint pass locally.

danielcarletti and others added 2 commits June 1, 2026 10:20
…it-config

# Conflicts:
#	products/data_warehouse/backend/api/external_data_source.py
Comment thread products/data_warehouse/backend/api/test/test_external_data_source.py Outdated
@tests-posthog
Copy link
Copy Markdown
Contributor

tests-posthog Bot commented Jun 1, 2026

Query snapshots: Backend query snapshots updated

Changes: 1 snapshots (0 modified, 1 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 Bot and others added 2 commits June 1, 2026 13:52
…sponse

Generated-By: PostHog Code
Task-Id: fcaae539-62ef-4f3c-ae16-27bc684d8446
@danielcarletti
Copy link
Copy Markdown
Contributor Author

Fixed (commit d9b6edd): the enable_cdc success test now asserts {"success": True, "schedules_ready": True} — the missing field was the sole cause of the failing Product tests (data-warehouse) / Turbo gate. OpenAPI-types + MCP-snapshot drift were already handled by the codegen bots and are rebased in. All 50 CDC backend tests pass locally.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 1, 2026

🎭 Playwright report · View test results →

⚠️ 1 flaky test:

  • Inline editing insight title via compact card popover (chromium)

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

@danielcarletti danielcarletti merged commit 66bbea9 into master Jun 1, 2026
219 checks passed
@danielcarletti danielcarletti deleted the posthog-code/cdc-edit-config branch June 1, 2026 16:13
@deployment-status-posthog
Copy link
Copy Markdown

deployment-status-posthog Bot commented Jun 1, 2026

Deploy status

Environment Status Deployed At Workflow
dev ✅ Deployed 2026-06-01 16:48 UTC Run
prod-us ✅ Deployed 2026-06-01 17:03 UTC Run
prod-eu ✅ Deployed 2026-06-01 17:05 UTC Run

MattPua pushed a commit that referenced this pull request Jun 1, 2026
…reation (#60708)

Co-authored-by: tests-posthog[bot] <250237707+tests-posthog[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants