Skip to content

feat(insights): exact-first saved insights search#61611

Open
pauldambra wants to merge 3 commits into
masterfrom
posthog-code/two-phase-insight-search
Open

feat(insights): exact-first saved insights search#61611
pauldambra wants to merge 3 commits into
masterfrom
posthog-code/two-phase-insight-search

Conversation

@pauldambra
Copy link
Copy Markdown
Member

@pauldambra pauldambra commented Jun 4, 2026

Problem

Saved-insights search routed the whole query through Postgres trigram similarity with loose thresholds, so short terms like revenue surfaced fuzzy, noisy matches with no way to tell exact matches from approximate ones — for the UI or for agents/MCP hitting the same endpoint.

Changes

GET /api/environments/:id/insights/?search= now returns literal substring ("exact") matches and fuzzy trigram ("similar") matches together in one relevance-ranked list, ordered exact-first. Each result carries search_match_type (exact | similar); it is null when the list isn't filtered by search.

  • One query (no second round-trip), no match_mode parameter, no cross-set response flags — the response describes the results, so it's self-describing for agents/MCP (no skill needed to drive it).
  • Frontend: the saved-insights table badges "similar" rows; exact matches rank first. A new SearchResults Storybook story (Scenes-App/Saved Insights) exercises the badge + ordering for visual review.
  • Backend: _apply_search annotates _is_exact from the icontains/tag predicate and orders -_is_exact, -_search_score, name; a search_match_type serializer field exposes it.

This collapses an earlier two-phase (match_mode + has_includes/has_fuzzy flags) design that briefly lived in this PR — simplified to one labeled list to cut consumer-side complexity while keeping all ranking server-side.

How did you test this code?

I'm an agent (PostHog Code); no manual UI clicks beyond a local Storybook render of the new story. Automated, run locally:

  • Backend test_insight.py: union exact-first ordering + per-row search_match_type (exact vs similar), search_match_type null without search, plus the pre-existing test_list_filter_by_search_* and the N+1 query-count snapshot (21 pass).
  • Frontend savedInsightsLogic.test.ts: per-row search_match_type carried through to results, plus the existing suite (12 pass).
  • tsgo clean for every touched file; ruff/oxlint clean; OpenAPI + MCP regenerated and the MCP tool-schema snapshot updated.

Automatic notifications

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

Docs update

No user-facing docs change.

🤖 Agent context

Authored by an agent (PostHog Code, Claude Opus) completing a Slack thread on noisy insight search.

  • Started as a two-phase match_mode design (exact-only / fuzzy "show similar" toggle), reviewed by a multi-agent swarm. The requester then chose to reduce result/contract complexity: collapse to one exact-first list with a per-row search_match_type, keeping the smarts server-side so agents/MCP get the same behavior from a single insights-list call with no special handling.
  • search_match_type lives on QueryBasedInsightModel (not the base InsightModel) to avoid breaking the exhaustive activity-log describer record.
  • Security-audit (swarm) found no issues; the search path is ORM-parameterized, team-scoped, and length-capped.

Created with PostHog Code

Copy link
Copy Markdown
Member Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@pauldambra pauldambra marked this pull request as ready for review June 4, 2026 12:38
@assign-reviewers-posthog assign-reviewers-posthog Bot requested a review from a team June 4, 2026 12:39
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: abba632d4e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread products/product_analytics/backend/api/insight.py Outdated
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

Size Change: 0 B

Total Size: 81.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.67 MB +241 B (0%)
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 120 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilitySessionScene 19.9 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 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 20.4 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 34.4 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 76.2 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsConfigurationScene/CustomerAnalyticsConfigurationScene 2.65 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyBuilderScene/CustomerJourneyBuilderScene 2.18 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyTemplatesScene/CustomerJourneyTemplatesScene 7.86 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/DataWarehouseScene 46.8 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/NewSourceScene/NewSourceScene 1.15 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SchemaScene/SchemaScene 26.6 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SourceScene/SourceScene 1.1 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/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.34 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 33.6 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.8 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.6 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 8.57 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.63 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsPieChart/TrendsPieChart 4.43 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/observations/ReplayObservation 13.9 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner 41.1 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ReplayScannersScene 16.8 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 67.2 kB 0 B
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterview 9.37 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.8 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.1 kB 0 B
frontend/dist-report/exporter/src/exporter/exporter 36.8 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 853 kB 0 B
frontend/dist-report/exporter/src/scenes/approvals/changeRequestsLogic 884 B 0 B
frontend/dist-report/exporter/src/scenes/authentication/shared/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.58 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.88 MB +241 B (0%)
frontend/dist-report/posthog-app/_parent/products/actions/frontend/pages/Action 25.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/actions/frontend/pages/Actions 1.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityScene 120 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilitySessionScene 20 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityTraceScene 132 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 20.4 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 74.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.25 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SchemaScene/SchemaScene 26.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SourceScene/SourceScene 1.17 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/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.37 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 33.7 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.8 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsAlertDetailScene/LogsAlertDetailScene 17.3 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/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.35 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 8.61 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.66 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsPieChart/TrendsPieChart 4.47 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/observations/ReplayObservation 13.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner 41.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScannersScene 16.8 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.7 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 67.3 kB 0 B
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterview 9.41 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.9 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.26 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 853 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 173 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/account/AccountConnected 3.36 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/account/AgenticAccountMismatch 2.77 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/account/credential-review/CredentialReview 4.01 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/cli/CLIAuthorize 11.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/cli/CLILive 4.41 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/email-mfa-verify/EmailMFAVerify 3.42 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/invite-signup/InviteSignup 1.31 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/login-2fa/Login2FA 5.12 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/login/Login 1.34 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/password-reset/PasswordReset 4.74 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/password-reset/PasswordResetComplete 3.38 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/shared/passkeyLogic 858 B 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/signup/SignupContainer 1.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/two-factor-reset/TwoFactorReset 4.41 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/vercel/VercelConnect 5.37 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/vercel/VercelLinkError 2.64 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/verify-email/VerifyEmail 5.16 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.5 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 18.3 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 60.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/DataPipelinesNewScene 2.76 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/DestinationsScene 3.13 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.37 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/WebScriptsScene 2.99 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 211 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/Experiments 21.8 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.4 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 13.3 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.27 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapScene 6.91 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 55.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/inbox/InboxScene 63.4 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.81 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookPanel/NotebookPanel 5.84 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookScene 9.16 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebooksScene 8.01 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 8.31 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/ConfirmOrganization/ConfirmOrganization 4.87 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/Create/Create 1.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.6 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.42 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/SessionRecordings 1.08 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/settings/SessionRecordingsSettingsScene 2.28 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.9 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 14.8 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.6 MB +242 B (0%)
frontend/dist-report/toolbar/src/toolbar/toolbar 15.9 MB +241 B (0%)

compressed-size-action

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Jun 4, 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
frontend/src/scenes/saved-insights/SavedInsights.tsx:1085-1087
When `appliedMatchMode === 'fuzzy'` returns zero results (`insights.count === 0`) but `hasIncludesMatches === true`, the banner renders as a bare "Show exact matches" button with no surrounding text — the `insights.count > 0` guard suppresses the "Showing results similar to…" sentence. A common trigger: any unambiguous term like "sales" where every trigram match is also an exact match, so `fuzzy_only_qs` is empty. The user sees an empty table and a floating button with no explanation of why the similar search returned nothing.

```suggestion
                            <div className="flex items-center gap-2 text-secondary text-sm mt-2">
                                {insights.count > 0 ? (
                                    <span>Showing results similar to "{filters.search}".</span>
                                ) : (
                                    <span>No additional similar results found.</span>
                                )}
                                {hasIncludesMatches && (
```

### Issue 2 of 2
products/product_analytics/backend/api/insight.py:1402
**Missing `match_mode` enum validation**

`match_mode` is accepted from the query string but never validated against its documented enum (`auto`, `includes`, `fuzzy`). An unexpected value (e.g. `match_mode=typo`) falls through to the `elif has_includes:` / `else:` branches (effectively `auto` behaviour) while `applied_match_mode` in the response correctly reflects the resolved phase. The behaviour is safe, but callers receive no error signal and the OpenAPI contract is silently unenforced. A short `ValidationError` guard would make the contract explicit.

Reviews (1): Last reviewed commit: "feat(insights): two-phase saved insights..." | Re-trigger Greptile

Comment thread frontend/src/scenes/saved-insights/SavedInsights.tsx Outdated
Comment thread products/product_analytics/backend/api/insight.py
Copy link
Copy Markdown
Member Author

@pauldambra pauldambra left a comment

Choose a reason for hiding this comment

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

Note

🤖 Automated comment by QA Swarm — not written by a human

QA Swarm multi-perspective review (qa-team specialists, paul-reviewer, xp-reviewer, security-audit). See inline comments; full verdict in the summary comment.

Comment thread products/product_analytics/backend/api/insight.py Outdated
Comment thread products/product_analytics/backend/api/insight.py Outdated
Comment thread products/product_analytics/backend/api/insight.py Outdated
Comment thread products/product_analytics/backend/api/insight.py Outdated
Comment thread frontend/src/scenes/saved-insights/SavedInsights.tsx Outdated
Comment thread frontend/src/scenes/saved-insights/savedInsightsLogic.ts Outdated
@pauldambra
Copy link
Copy Markdown
Member Author

Note

🤖 Automated comment by QA Swarm — not written by a human

Multi-perspective review: qa-team (specialists + generalists), paul-reviewer, xp-reviewer, security-audit

Verdict: 💬 APPROVE WITH NITS

Clean, well-tested, self-contained change — no correctness or security blockers. Two convergent items are worth a look (search query cost; response-metadata coupling); everything else is LOW/NIT.

Key findings

🟡 MEDIUM

  • Unconditional double .exists() on every search (includes + fuzzy). The fuzzy probe may not be trigram-index-backed and runs even when only includes is returned. No query-count test pins the search path. (inline on insight.py)

🟢 LOW

  • self._search_match_flags instance side-channel between the queryset builder and list() — works per-request, but a class attribute + one-line comment would make it explicit.
  • match_mode accepts any value (no enum validation) → silently behaves as auto; diverges from the advertised OpenAPI enum.
  • Whitespace/NUL-only search omits the response flags (minor shape inconsistency).
  • Fuzzy-mode empty page renders a context-free "Show exact matches" button.
  • Frontend could lean on the generated response type instead of an inline & { match_mode?: … }.

⚪ NIT

  • Duplicate .order_by("-_search_score", "name").distinct() tail on both querysets (fine until a 3rd phase).
  • The autofuzzy fallback isn't visible from frontend actions (the server span applied_match_mode covers it).
  • "similar" / "Not seeing what you're looking for?" copy — worth checking it lands with a non-technical reader.

Convergence (highest confidence)

  • Search query cost — flagged independently by qa-team/performance, paul, and xp.
  • _search_match_flags coupling — flagged independently by qa-team/reliability, paul, and xp.

Praise

  • _annotate_search_scores extraction + a single includes_q reused in .filter() and .exclude() is the right deduplication (shared idea named once, divergent filters kept distinct).
  • The parameterized backend match_mode tests cover every mode/flag permutation, including the tricky empty-page-still-flags-the-other-phase cases.

Reviewer summaries

Reviewer Assessment
🔍 qa-team Clean, well-scoped; tenant scoping + pagination correct; one MEDIUM perf item (double exists), rest LOW/NIT.
👤 paul Would stamp it; reservations are search query cost (no query-count test) and the self._search_match_flags channel; loves the parameterized tests.
📐 xp Well-executed; _annotate_search_scores / includes_q are the right OnceAndOnlyOnce; only substantive note is the unmeasured double-exists cost.
🛡 security-audit No findings — ORM-parameterized, team-scoped, length-capped, no cross-tenant existence oracle.

Automated by QA Swarm — not a human review

@pauldambra pauldambra added the stamphog Request AI review from stamphog label Jun 4, 2026
Copy link
Copy Markdown

@stamphog stamphog Bot left a comment

Choose a reason for hiding this comment

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

Two substantive unresolved review concerns need human judgment: (1) a convergent MEDIUM performance finding (three DB queries per search request — two exists() probes plus the main paginated query — including an expensive trigram similarity scan that runs on every ?search= call) that was raised by multiple reviewers and never marked resolved or deferred; (2) a P2 Codex finding that the new response fields (match_mode, has_includes_matches, has_fuzzy_matches) are dynamically patched onto response.data after super().list() and are absent from any serializer or @extend_schema response declaration, violating the project's documented API schema guidelines.

@stamphog stamphog Bot removed the stamphog Request AI review from stamphog label Jun 4, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

🎭 Playwright report · View test results →

1 failed test:

  • Preserves next parameter through signup flow (chromium)

🔁 Flake verification failed (--repeat-each=10):

  • e2e/annotations.spec.ts
  • e2e/billing/billing-limits.spec.ts
  • e2e/early-access-management.spec.ts
  • e2e/events.spec.ts
  • e2e/playwright-setup-examples.spec.ts
  • e2e/product-analytics/cohorts.spec.ts
  • e2e/product-analytics/dashboards.spec.ts
  • e2e/product-analytics/insight-modals.spec.ts
  • e2e/product-analytics/insight-navigation.spec.ts
  • e2e/product-analytics/insight-variables.spec.ts
  • e2e/project-home-page.spec.ts
  • e2e/signup.spec.ts
  • e2e/surveys/crud.spec.ts
  • e2e/surveys/quickcreate.spec.ts
  • e2e/toolbar.spec.ts
  • e2e/workflows.spec.ts

The report only shows the tests under verification. View report → Fix these before merging.

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

@pauldambra pauldambra force-pushed the posthog-code/two-phase-insight-search branch 2 times, most recently from 049c383 to ffce385 Compare June 4, 2026 14:33
@pauldambra pauldambra changed the title feat(insights): two-phase saved insights search (includes + fuzzy) feat(insights): exact-first saved insights search Jun 4, 2026
@pauldambra pauldambra added the stamphog Request AI review from stamphog label Jun 4, 2026
github-actions[bot]
github-actions Bot previously approved these changes Jun 4, 2026
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

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

No showstoppers. The implementation uses a clean single-query approach annotating _is_exact via Case/When, avoiding the extra exists() probes that earlier reviewers flagged (those comments are on older commits). Schema exposure, generated types, and backward compatibility are all handled correctly.

Copy link
Copy Markdown
Member Author

@pauldambra pauldambra left a comment

Choose a reason for hiding this comment

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

Note

🤖 Automated comment by QA Swarm — not written by a human

QA Swarm re-review of the simplified single-list design (qa-team, paul-reviewer, xp-reviewer, security-audit). The two convergent MEDIUM items from the first review are resolved by the simplification. See inline; verdict in the summary comment.

Comment thread products/product_analytics/backend/api/insight.py
Comment thread products/product_analytics/backend/api/insight.py
Comment thread products/product_analytics/backend/api/insight.py
Comment thread products/product_analytics/backend/api/insight.py
Comment thread products/product_analytics/backend/api/test/test_insight.py
@pauldambra
Copy link
Copy Markdown
Member Author

Note

🤖 Automated comment by QA Swarm — not written by a human

Multi-perspective re-review (qa-team, paul-reviewer, xp-reviewer, security-audit) of the simplified single-list design.

Verdict: 💬 APPROVE WITH NITS

The simplification landed cleanly. The two convergent MEDIUM items from the first review — the unconditional double .exists() and the self._search_match_flags instance side-channel — are gone (one query, per-row _is_exact DB annotation). Security-audit found nothing. Remaining items are LOW/NIT.

Key findings (all LOW / NIT — none blocking)

🟢 LOW

  • exact_q is rendered twice in the single statement (CASE + filter); searched columns lack a GIN trigram index (pre-existing, per-team-bounded).
  • No query-count guard on the ?search= path — a @snapshot_postgres_queries case would pin the new "one query" property.
  • The union widens recall (short below-threshold substrings now match as exact); no test covers that specific new path.
  • getattr(_is_exact) serializer↔annotation coupling — idiomatic (mirrors last_viewed_at), fine as-is.

⚪ NIT

  • .distinct() is now superfluous (tag match is a subquery, no join).
  • Trigram scorer duplicated across 5 products — pre-existing; worth a shared-helper follow-up.
  • Badge copy reads slightly bare without the search term in view — non-issue in practice.

Convergence (highest confidence)

  • Add a query-count test on the ?search= path — flagged independently by qa-team, paul, and xp.

Praise

  • Reusing one exact_q for both the Case(When(...)) label and the .filter() means search_match_type can never drift from why a row matched.
  • Net deletion on the frontend (mode/toggle/reset machinery gone) — the simplification is real.
  • Tests assert labels and ordering separately + null-without-search; a Storybook story was added.

Reviewer summaries

Reviewer Assessment
🔍 qa-team Clean and correct; one-query property sound; only LOW/NIT.
👤 paul Both earlier reservations addressed by the simplification — high trust.
📐 xp Genuinely simpler; right OnceAndOnlyOnce on the predicate; one recall-edge test gap.
🛡 security-audit 0 findings — ORM-parameterized, team-scoped, length-capped, read-only field.

Automated by QA Swarm — not a human review

@pauldambra pauldambra force-pushed the posthog-code/two-phase-insight-search branch from ffce385 to 26edba8 Compare June 4, 2026 14:45
@pauldambra pauldambra added stamphog Request AI review from stamphog and removed stamphog Request AI review from stamphog labels Jun 4, 2026
github-actions[bot]
github-actions Bot previously approved these changes Jun 4, 2026
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

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

All substantive review concerns were addressed in follow-up commits: the double-exists() probe is replaced by a single annotated query, schema exposure is handled via @extend_schema_field on the serializer, and match_mode validation was added. The remaining unresolved comments are advisory LOW/NIT items explicitly deemed "fine as-is." The change is backward-compatible (nullable field, null when no search) with consistent generated-type updates and good test coverage including a query-count guard.

@pauldambra pauldambra force-pushed the posthog-code/two-phase-insight-search branch from 26edba8 to b78d670 Compare June 4, 2026 14:53
@pauldambra pauldambra added stamphog Request AI review from stamphog and removed stamphog Request AI review from stamphog labels Jun 4, 2026
github-actions[bot]
github-actions Bot previously approved these changes Jun 4, 2026
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

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

All substantive review concerns from earlier iterations (double-exists probes, missing schema annotation, missing enum validation) were addressed in follow-up commits. The current implementation is a clean single-query approach using Case/When to annotate _is_exact, backward-compatible nullable field, consistent generated-type updates, and solid test coverage including a query-count guard.

@posthog
Copy link
Copy Markdown
Contributor

posthog Bot commented Jun 4, 2026

Visual changes approved by @pauldambra — baseline updated in 289f499.

View this run in PostHog

10 changed, 2 new.

@pauldambra pauldambra force-pushed the posthog-code/two-phase-insight-search branch from b78d670 to 69de1bf Compare June 4, 2026 16:08
@pauldambra pauldambra added stamphog Request AI review from stamphog and removed stamphog Request AI review from stamphog labels Jun 4, 2026
@pauldambra pauldambra enabled auto-merge (squash) June 4, 2026 16:08
github-actions[bot]
github-actions Bot previously approved these changes Jun 4, 2026
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

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

Clean single-query implementation using Case/When to annotate exact vs. fuzzy match per row, with backward-compatible nullable field, proper schema annotation via @extend_schema_field, consistent generated-type updates, and a query-count guard test. All substantive concerns from earlier review rounds were addressed; remaining unresolved comments are low/nit self-authored notes.

Saved-insights search returns literal substring ("exact") and fuzzy trigram
("similar") matches together in one relevance-ranked list, ordered exact-first.
Each result carries `search_match_type` (exact|similar) and the UI badges the
"similar" rows. A single query with no mode parameter or response flags, so
agents and MCP get the same exact-first results from one insights-list call.

Generated-By: PostHog Code
Task-Id: 63a82e0c-6cc0-4cb0-8898-1f8f78586f7a
@pauldambra pauldambra force-pushed the posthog-code/two-phase-insight-search branch from 69de1bf to 6fcece5 Compare June 4, 2026 17:19
@pauldambra pauldambra added stamphog Request AI review from stamphog and removed stamphog Request AI review from stamphog labels Jun 4, 2026
github-actions[bot]
github-actions Bot previously approved these changes Jun 4, 2026
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

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

Clean single-query implementation using Case/When to annotate exact vs. fuzzy match per row; all substantive bot-review concerns from earlier iterations were addressed in follow-up commits, remaining comments are LOW/NIT items explicitly marked as non-blocking. Backward-compatible nullable field with consistent generated-type updates and solid test coverage including a query-count guard.

@pauldambra
Copy link
Copy Markdown
Member Author

Note

🤖 Automated comment by PostHog Code — not written by a human

Resolved the review threads that have been addressed:

  • 3 first-review threads (unconditional double .exists(), whitespace-search flag inconsistency, loader inline match_mode type) — obsolete after the redesign to a single labeled list (no match_mode, no response flags, one query).
  • Query-count + recall-edge tests — added in 6fcece5: test_list_filter_by_search_runs_a_single_filtering_query and test_list_filter_by_search_matches_substring_below_trigram_threshold.

Left open for a human call (NITs I considered but chose not to change):

  • exact_q rendered twice in the one statement — accepted as a net win over the removed double-.exists().
  • .distinct() — kept intentionally; documents the multi-tag dedup invariant.
  • getattr(_is_exact) serializer↔annotation coupling — idiomatic (mirrors last_viewed_at in the same serializer).
  • Cross-product trigram-scorer duplication — pre-existing; a good shared-helper follow-up, out of scope here.

2 updated
Run: 8ea2a8cf-1b21-4d83-9298-9a6be014f035

Co-authored-by: pauldambra <984817+pauldambra@users.noreply.github.com>
@github-actions github-actions Bot dismissed stale reviews from themself June 4, 2026 20:17

New commits pushed (delta classified non_trivial_delta) — stamphog approval dismissed; re-review running automatically.

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

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

Clean single-query implementation adding exact-first search with per-row search_match_type annotation; backward-compatible nullable field, consistently updated generated types, and solid test coverage including a query-count guard. All substantive concerns from earlier review rounds were addressed.

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

Labels

stamphog Request AI review from stamphog

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant