Skip to content

feat(conversations): create ticket#58392

Merged
veryayskiy merged 10 commits into
masterfrom
feat/support-raise-a-ticker-email
May 14, 2026
Merged

feat(conversations): create ticket#58392
veryayskiy merged 10 commits into
masterfrom
feat/support-raise-a-ticker-email

Conversation

@veryayskiy
Copy link
Copy Markdown
Contributor

Create ticket (email channel first)

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 13, 2026

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

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

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 13, 2026

Size Change: +4.67 kB (0%)

Total Size: 117 MB

📦 View Changed
Filename Size Change
frontend/dist/EndpointsScene 21.8 kB -2.14 kB (-8.94%)
frontend/dist/WorkflowScene 117 kB +6.81 kB (+6.19%) 🔍
ℹ️ View Unchanged
Filename Size Change
frontend/dist/368Hedgehogs 5.47 kB -34 B (-0.62%)
frontend/dist/abap 14.2 kB 0 B
frontend/dist/AccountConnected 2.99 kB 0 B
frontend/dist/Action 24.8 kB -101 B (-0.41%)
frontend/dist/Actions 1.2 kB 0 B
frontend/dist/AdvancedActivityLogsScene 39.9 kB 0 B
frontend/dist/AgenticAuthorize 5.7 kB 0 B
frontend/dist/apex 3.99 kB 0 B
frontend/dist/ApprovalDetail 16.5 kB 0 B
frontend/dist/architecture-7EHR7CIX 372 B 0 B
frontend/dist/architectureDiagram-3BPJPVTR 151 kB 0 B
frontend/dist/array.full.es5.js 347 kB 0 B
frontend/dist/array.full.js 427 kB 0 B
frontend/dist/array.js 191 kB 0 B
frontend/dist/AsyncMigrations 13.4 kB 0 B
frontend/dist/AuthenticatedShell 173 kB 0 B
frontend/dist/AuthorizationStatus 969 B 0 B
frontend/dist/azcli 885 B 0 B
frontend/dist/bat 1.88 kB 0 B
frontend/dist/BatchExportScene 60.8 kB 0 B
frontend/dist/bicep 2.59 kB 0 B
frontend/dist/Billing 731 B 0 B
frontend/dist/BillingSection 21 kB 0 B
frontend/dist/blockDiagram-GPEHLZMM 72.5 kB 0 B
frontend/dist/BoxPlot 5.25 kB -35 B (-0.66%)
frontend/dist/browserAll-0QZMN1W2 37.4 kB 0 B
frontend/dist/BusinessKnowledgeScene 18.9 kB -35 B (-0.19%)
frontend/dist/ButtonPrimitives 762 B 0 B
frontend/dist/c4Diagram-AAUBKEIU 70.8 kB 0 B
frontend/dist/CalendarHeatMap 9 kB 0 B
frontend/dist/cameligo 2.23 kB 0 B
frontend/dist/changeRequestsLogic 748 B 0 B
frontend/dist/classDiagram-4FO5ZUOK 1.28 kB 0 B
frontend/dist/classDiagram-v2-Q7XG4LA2 1.28 kB 0 B
frontend/dist/CLIAuthorize 11.6 kB 0 B
frontend/dist/CLILive 4.26 kB 0 B
frontend/dist/clojure 9.68 kB 0 B
frontend/dist/CodeEditorInline 696 B 0 B
frontend/dist/coffee 3.63 kB 0 B
frontend/dist/Cohort 27.7 kB 0 B
frontend/dist/CohortCalculationHistory 6.47 kB 0 B
frontend/dist/Cohorts 9.64 kB 0 B
frontend/dist/ConfirmOrganization 4.76 kB 0 B
frontend/dist/conversations.js 67.3 kB 0 B
frontend/dist/cose-bilkent-S5V4N54A 82.8 kB 0 B
frontend/dist/Coupons 963 B 0 B
frontend/dist/cpp 5.33 kB 0 B
frontend/dist/Create 1.08 kB 0 B
frontend/dist/crisp-chat-integration.js 1.97 kB 0 B
frontend/dist/csharp 4.56 kB 0 B
frontend/dist/csp 1.45 kB 0 B
frontend/dist/css 4.54 kB 0 B
frontend/dist/cssMode 4.2 kB 0 B
frontend/dist/CustomCssScene 3.8 kB 0 B
frontend/dist/CustomerAnalyticsConfigurationScene 2.27 kB 0 B
frontend/dist/CustomerAnalyticsScene 28.1 kB 0 B
frontend/dist/CustomerJourneyBuilderScene 2.04 kB 0 B
frontend/dist/CustomerJourneyTemplatesScene 7.72 kB -36 B (-0.46%)
frontend/dist/customizations.full.js 18 kB 0 B
frontend/dist/CyclotronJobInputAssignee 1.54 kB -35 B (-2.23%)
frontend/dist/CyclotronJobInputBusinessHours 2.92 kB -35 B (-1.18%)
frontend/dist/CyclotronJobInputTicketTags 920 B 0 B
frontend/dist/cypher 3.42 kB 0 B
frontend/dist/dagre-BM42HDAG 11.9 kB 0 B
frontend/dist/dart 4.29 kB 0 B
frontend/dist/Dashboard 1.38 kB 0 B
frontend/dist/Dashboards 21.8 kB 0 B
frontend/dist/DashboardTemplateCopyScene 5.95 kB 0 B
frontend/dist/DataManagementScene 884 B 0 B
frontend/dist/DataPipelinesNewScene 2.55 kB 0 B
frontend/dist/DataWarehouseScene 46.5 kB 0 B
frontend/dist/Deactivated 1.37 kB 0 B
frontend/dist/dead-clicks-autocapture.js 13.2 kB 0 B
frontend/dist/DeadLetterQueue 5.63 kB 0 B
frontend/dist/DebugScene 20.2 kB 0 B
frontend/dist/decompressionWorker 2.85 kB 0 B
frontend/dist/decompressionWorker.js 2.85 kB 0 B
frontend/dist/DecompressionWorkerManager 329 B 0 B
frontend/dist/DefinitionEdit 8.82 kB 0 B
frontend/dist/DefinitionView 24.3 kB 0 B
frontend/dist/Deployment 1.18 kB +34 B (+2.97%)
frontend/dist/Deployments 2.69 kB +36 B (+1.36%)
frontend/dist/DestinationsScene 2.92 kB 0 B
frontend/dist/diagram-2AECGRRQ 6.66 kB 0 B
frontend/dist/diagram-5GNKFQAL 3.61 kB 0 B
frontend/dist/diagram-KO2AKTUF 11.5 kB 0 B
frontend/dist/diagram-LMA3HP47 5.02 kB 0 B
frontend/dist/diagram-OG6HWLK6 11.8 kB 0 B
frontend/dist/dist 643 B 0 B
frontend/dist/dockerfile 1.91 kB 0 B
frontend/dist/EarlyAccessFeature 991 B +136 B (+15.91%) ⚠️
frontend/dist/EarlyAccessFeatures 3.09 kB +36 B (+1.18%)
frontend/dist/ecl 5.38 kB 0 B
frontend/dist/EditorScene 1.38 kB 0 B
frontend/dist/elixir 10.3 kB 0 B
frontend/dist/elk.bundled 1.44 MB 0 B
frontend/dist/EmailMFAVerify 3.26 kB 0 B
frontend/dist/EndpointScene 39.9 kB 0 B
frontend/dist/erDiagram-TEJ5UH35 27.7 kB 0 B
frontend/dist/ErrorTrackingIssueFingerprintsScene 7.26 kB 0 B
frontend/dist/ErrorTrackingIssueScene 101 kB 0 B
frontend/dist/ErrorTrackingScene 27.1 kB 0 B
frontend/dist/EvaluationTemplates 813 B +34 B (+4.36%)
frontend/dist/eventmodeling-FCH6USID 375 B 0 B
frontend/dist/EventsScene 2.81 kB 0 B
frontend/dist/exception-autocapture.js 11.8 kB 0 B
frontend/dist/Experiment 210 kB 0 B
frontend/dist/Experiments 19.3 kB 0 B
frontend/dist/exporter 18.7 kB 0 B
frontend/dist/exporter.js 18.7 kB 0 B
frontend/dist/ExporterDashboardScene 1.78 kB 0 B
frontend/dist/ExporterHeatmapScene 19.5 kB 0 B
frontend/dist/ExporterInsightScene 2.88 kB 0 B
frontend/dist/ExporterNotebookScene 2.69 MB 0 B
frontend/dist/ExporterRecordingScene 995 B 0 B
frontend/dist/exporterSharedChunkAnchors 288 kB 0 B
frontend/dist/exporterSharedChunkAnchors.js 288 kB 0 B
frontend/dist/ExportsScene 4.23 kB 0 B
frontend/dist/FeatureFlag 133 kB 0 B
frontend/dist/FeatureFlags 844 B 0 B
frontend/dist/FeatureFlagTemplatesScene 7.28 kB +36 B (+0.5%)
frontend/dist/FlappyHog 5.99 kB 0 B
frontend/dist/flow9 1.85 kB 0 B
frontend/dist/flowDiagram-I6XJVG4X 61.6 kB 0 B
frontend/dist/freemarker2 16.7 kB 0 B
frontend/dist/fsharp 3.02 kB 0 B
frontend/dist/ganttDiagram-6RSMTGT7 50.9 kB 0 B
frontend/dist/gitGraph-WXDBUCRP 360 B 0 B
frontend/dist/gitGraphDiagram-PVQCEYII 30.2 kB 0 B
frontend/dist/go 2.69 kB 0 B
frontend/dist/graphql 2.3 kB 0 B
frontend/dist/Group 14.8 kB 0 B
frontend/dist/Groups 4.15 kB 0 B
frontend/dist/GroupsNew 7.58 kB 0 B
frontend/dist/handlebars 7.38 kB 0 B
frontend/dist/hcl 3.63 kB 0 B
frontend/dist/HealthCategoryDetailScene 7.48 kB 0 B
frontend/dist/HealthScene 12.4 kB 0 B
frontend/dist/HeatmapNewScene 4.86 kB 0 B
frontend/dist/HeatmapRecordingScene 4.25 kB 0 B
frontend/dist/HeatmapScene 6.87 kB 0 B
frontend/dist/HeatmapsScene 4.13 kB 0 B
frontend/dist/hls 394 kB 0 B
frontend/dist/HogFunctionScene 59.5 kB 0 B
frontend/dist/hogql_parser_wasm_browser 1.52 MB 0 B
frontend/dist/HogRepl 7.61 kB 0 B
frontend/dist/html 5.62 kB 0 B
frontend/dist/htmlMode 4.65 kB 0 B
frontend/dist/image-blob-reduce.esm 49.5 kB 0 B
frontend/dist/InboxScene 59.9 kB 0 B
frontend/dist/index 60.5 kB 0 B
frontend/dist/index.js 60.5 kB 0 B
frontend/dist/info-J43DQDTF 348 B 0 B
frontend/dist/infoDiagram-5YYISTIA 1.32 kB 0 B
frontend/dist/ini 1.14 kB 0 B
frontend/dist/InsightQuickStart 5.67 kB 0 B
frontend/dist/InsightScene 34.6 kB 0 B
frontend/dist/IntegrationsRedirect 976 B 0 B
frontend/dist/intercom-integration.js 2.03 kB 0 B
frontend/dist/InviteSignup 15.2 kB 0 B
frontend/dist/ishikawaDiagram-YF4QCWOH 18 kB 0 B
frontend/dist/java 3.26 kB 0 B
frontend/dist/javascript 1.02 kB 0 B
frontend/dist/journeyDiagram-JHISSGLW 24 kB 0 B
frontend/dist/jsonMode 13.9 kB 0 B
frontend/dist/julia 7.26 kB 0 B
frontend/dist/kanban-definition-UN3LZRKU 21.2 kB 0 B
frontend/dist/katex 266 kB 0 B
frontend/dist/kotlin 3.44 kB 0 B
frontend/dist/lazy 146 kB 0 B
frontend/dist/LegacyPluginScene 20.9 kB 0 B
frontend/dist/LegalDocumentNewScene 59.6 kB 0 B
frontend/dist/LegalDocumentsScene 5.17 kB 0 B
frontend/dist/LemonTextAreaMarkdown 706 B 0 B
frontend/dist/less 3.93 kB 0 B
frontend/dist/lexon 2.47 kB 0 B
frontend/dist/lib 2.25 kB 0 B
frontend/dist/Link 672 B 0 B
frontend/dist/LinkScene 25.1 kB 0 B
frontend/dist/LinksScene 4.4 kB -36 B (-0.81%)
frontend/dist/liquid 4.57 kB 0 B
frontend/dist/LiveDebugger 19.3 kB 0 B
frontend/dist/LiveEventsTable 5.47 kB 0 B
frontend/dist/LLMAnalyticsClusterScene 21.4 kB 0 B
frontend/dist/LLMAnalyticsClustersScene 54.7 kB 0 B
frontend/dist/LLMAnalyticsDatasetScene 20.7 kB 0 B
frontend/dist/LLMAnalyticsDatasetsScene 3.49 kB 0 B
frontend/dist/LLMAnalyticsEvaluation 59.6 kB 0 B
frontend/dist/LLMAnalyticsEvaluationsScene 28 kB +34 B (+0.12%)
frontend/dist/LLMAnalyticsPlaygroundScene 37.6 kB +36 B (+0.1%)
frontend/dist/LLMAnalyticsScene 118 kB +339 B (+0.29%)
frontend/dist/LLMAnalyticsSessionScene 13.6 kB +41 B (+0.3%)
frontend/dist/LLMAnalyticsTag 27.3 kB +36 B (+0.13%)
frontend/dist/LLMAnalyticsTagsScene 7.19 kB +36 B (+0.5%)
frontend/dist/LLMAnalyticsTraceScene 130 kB 0 B
frontend/dist/LLMAnalyticsUsers 764 B +34 B (+4.66%) 🔍
frontend/dist/LLMASessionFeedbackDisplay 5.08 kB 0 B
frontend/dist/LLMPromptScene 17.8 kB +38 B (+0.21%)
frontend/dist/LLMPromptsScene 4.68 kB 0 B
frontend/dist/LLMSkillScene 793 B -34 B (-4.11%)
frontend/dist/LLMSkillsScene 810 B 0 B
frontend/dist/Login 8.86 kB 0 B
frontend/dist/Login2FA 4.49 kB 0 B
frontend/dist/logs.js 38.9 kB 0 B
frontend/dist/LogsAlertDetailScene 17.2 kB +32 B (+0.19%)
frontend/dist/LogsSamplingDetailScene 4.44 kB 0 B
frontend/dist/LogsSamplingNewScene 1.97 kB 0 B
frontend/dist/LogsScene 18.1 kB 0 B
frontend/dist/lua 2.16 kB 0 B
frontend/dist/m3 2.85 kB 0 B
frontend/dist/main 819 kB 0 B
frontend/dist/ManagedMigration 14.4 kB +36 B (+0.25%)
frontend/dist/markdown 3.83 kB 0 B
frontend/dist/MarketingAnalyticsScene 40.2 kB 0 B
frontend/dist/MaterializedColumns 10.4 kB 0 B
frontend/dist/Max 888 B 0 B
frontend/dist/mdx 5.43 kB 0 B
frontend/dist/memlens.lib.bundle 27.9 kB 0 B
frontend/dist/mermaid.core 28.5 kB 0 B
frontend/dist/MermaidDiagram 2.11 kB 0 B
frontend/dist/MessageTemplate 16.5 kB -70 B (-0.42%)
frontend/dist/MetricsScene 1.04 kB 0 B
frontend/dist/mindmap-definition-RKZ34NQL 24.8 kB 0 B
frontend/dist/mips 2.62 kB 0 B
frontend/dist/ModelsScene 14.6 kB 0 B
frontend/dist/MonacoDiffEditor 471 B 0 B
frontend/dist/monacoEditorWorker 288 kB 0 B
frontend/dist/monacoEditorWorker.js 288 kB 0 B
frontend/dist/monacoJsonWorker 419 kB 0 B
frontend/dist/monacoJsonWorker.js 419 kB 0 B
frontend/dist/monacoTsWorker 7.02 MB 0 B
frontend/dist/monacoTsWorker.js 7.02 MB 0 B
frontend/dist/MoveToPostHogCloud 4.7 kB 0 B
frontend/dist/msdax 4.95 kB 0 B
frontend/dist/mysql 11.3 kB 0 B
frontend/dist/NavTabChat 7.41 kB 0 B
frontend/dist/NewSourceScene 980 B 0 B
frontend/dist/NewTabScene 1.72 kB 0 B
frontend/dist/NodeDetailScene 16.9 kB +33 B (+0.2%)
frontend/dist/NotebookCanvasScene 3.58 kB 0 B
frontend/dist/NotebookPanel 5.54 kB +68 B (+1.24%)
frontend/dist/NotebookScene 8.78 kB 0 B
frontend/dist/NotebooksScene 7.84 kB 0 B
frontend/dist/OAuthAuthorize 844 B 0 B
frontend/dist/objective-c 2.44 kB 0 B
frontend/dist/Onboarding 771 kB 0 B
frontend/dist/OnboardingCouponRedemption 1.44 kB 0 B
frontend/dist/packet-YPE3B663 354 B 0 B
frontend/dist/pascal 3.03 kB 0 B
frontend/dist/pascaligo 2.04 kB 0 B
frontend/dist/passkeyLogic 722 B 0 B
frontend/dist/PasswordReset 4.6 kB 0 B
frontend/dist/PasswordResetComplete 3.23 kB 0 B
frontend/dist/PendingDeletion 2.38 kB 0 B
frontend/dist/perl 8.29 kB 0 B
frontend/dist/PersonScene 18.1 kB 0 B
frontend/dist/PersonsScene 5.91 kB 0 B
frontend/dist/pgsql 13.5 kB 0 B
frontend/dist/php 8.06 kB 0 B
frontend/dist/pie-LRSECV5Y 345 B 0 B
frontend/dist/pieDiagram-4H26LBE5 4.92 kB 0 B
frontend/dist/PipelineStatusScene 9.35 kB 0 B
frontend/dist/pla 1.72 kB 0 B
frontend/dist/posthog 146 kB 0 B
frontend/dist/postiats 7.9 kB 0 B
frontend/dist/powerquery 17 kB 0 B
frontend/dist/powershell 3.31 kB 0 B
frontend/dist/PreflightCheck 5.81 kB 0 B
frontend/dist/product-tours.js 115 kB 0 B
frontend/dist/ProductTour 275 kB 0 B
frontend/dist/ProductTours 4.92 kB 0 B
frontend/dist/ProjectHomepage 19.9 kB 0 B
frontend/dist/protobuf 9.09 kB 0 B
frontend/dist/pug 4.86 kB 0 B
frontend/dist/python 4.8 kB 0 B
frontend/dist/qsharp 3.23 kB 0 B
frontend/dist/quadrantDiagram-W4KKPZXB 34.4 kB 0 B
frontend/dist/QueryPerformance 8.86 kB 0 B
frontend/dist/r 3.16 kB 0 B
frontend/dist/radar-GUYGQ44K 351 B 0 B
frontend/dist/razor 9.38 kB 0 B
frontend/dist/react-json-view 121 kB 0 B
frontend/dist/recorder-v2.js 98.6 kB 0 B
frontend/dist/recorder.js 98.6 kB 0 B
frontend/dist/redis 3.59 kB 0 B
frontend/dist/redshift 11.8 kB 0 B
frontend/dist/RegionMap 29.6 kB 0 B
frontend/dist/render-query 26.6 MB +164 B (0%)
frontend/dist/render-query.js 26.6 MB +164 B (0%)
frontend/dist/requirementDiagram-4Y6WPE33 31.9 kB 0 B
frontend/dist/ResourceTransfer 9.42 kB 0 B
frontend/dist/restructuredtext 3.94 kB 0 B
frontend/dist/RevenueAnalyticsScene 25.8 kB 0 B
frontend/dist/ruby 8.54 kB 0 B
frontend/dist/rust 4.2 kB 0 B
frontend/dist/sankeyDiagram-5OEKKPKP 24 kB 0 B
frontend/dist/SavedInsights 902 B 0 B
frontend/dist/sb 1.86 kB 0 B
frontend/dist/scala 7.36 kB 0 B
frontend/dist/schema 715 kB 0 B
frontend/dist/SchemaScene 21.2 kB 0 B
frontend/dist/scheme 1.8 kB 0 B
frontend/dist/scss 6.45 kB 0 B
frontend/dist/SdkDoctorScene 9.66 kB 0 B
frontend/dist/sequenceDiagram-3UESZ5HK 117 kB 0 B
frontend/dist/SessionAttributionExplorerScene 6.87 kB 0 B
frontend/dist/SessionGroupSummariesTable 4.87 kB +35 B (+0.72%)
frontend/dist/SessionGroupSummaryScene 17.2 kB -36 B (-0.21%)
frontend/dist/SessionProfileScene 15.3 kB 0 B
frontend/dist/SessionRecordingDetail 2 kB 0 B
frontend/dist/SessionRecordingFilePlaybackScene 4.71 kB 0 B
frontend/dist/SessionRecordings 980 B 0 B
frontend/dist/SessionRecordingsKiosk 9.09 kB 0 B
frontend/dist/SessionRecordingsPlaylistScene 5.28 kB 0 B
frontend/dist/SessionRecordingsSettingsScene 2.14 kB 0 B
frontend/dist/SessionsScene 4.22 kB 0 B
frontend/dist/SettingsScene 3.23 kB 0 B
frontend/dist/sharedChunkAnchors 236 kB 0 B
frontend/dist/sharedChunkAnchors.js 236 kB 0 B
frontend/dist/SharedMetric 6.03 kB 0 B
frontend/dist/SharedMetrics 787 B 0 B
frontend/dist/shell 3.11 kB 0 B
frontend/dist/SignupContainer 28.4 kB 0 B
frontend/dist/Site 1.43 kB 0 B
frontend/dist/solidity 18.6 kB 0 B
frontend/dist/sophia 2.8 kB 0 B
frontend/dist/SourceScene 928 B 0 B
frontend/dist/SourcesScene 6.17 kB 0 B
frontend/dist/sparql 2.59 kB 0 B
frontend/dist/sql 10.3 kB 0 B
frontend/dist/SqlVariableEditScene 7.49 kB 0 B
frontend/dist/st 7.44 kB 0 B
frontend/dist/StartupProgram 21.4 kB 0 B
frontend/dist/stateDiagram-AJRCARHV 11.3 kB -5 B (-0.04%)
frontend/dist/stateDiagram-v2-BHNVJYJU 1.18 kB 0 B
frontend/dist/StripeConfirmInstall 3.78 kB 0 B
frontend/dist/SubscriptionScene 14.4 kB 0 B
frontend/dist/SubscriptionsScene 5.42 kB 0 B
frontend/dist/SupportSettingsScene 1.64 kB 0 B
frontend/dist/SupportTicketScene 33.8 kB 0 B
frontend/dist/SupportTicketsScene 1.04 kB +102 B (+10.89%) ⚠️
frontend/dist/Survey 1.09 kB 0 B
frontend/dist/SurveyFormBuilder 1.78 kB 0 B
frontend/dist/Surveys 18.5 kB 0 B
frontend/dist/surveys.js 94.7 kB 0 B
frontend/dist/SurveyWizard 75 kB 0 B
frontend/dist/swift 5.3 kB 0 B
frontend/dist/SystemStatus 17.1 kB 0 B
frontend/dist/systemverilog 7.65 kB 0 B
frontend/dist/TaskDetailScene 23 kB -36 B (-0.16%)
frontend/dist/TaskTracker 14.4 kB 0 B
frontend/dist/tcl 3.61 kB 0 B
frontend/dist/TextCardMarkdownEditor 11.2 kB -28 B (-0.25%)
frontend/dist/timeline-definition-PNZ67QCA 31.3 kB 0 B
frontend/dist/toolbar 14.9 MB 0 B
frontend/dist/toolbar.js 14.9 MB +164 B (0%)
frontend/dist/ToolbarLaunch 2.71 kB 0 B
frontend/dist/tracing-headers.js 1.74 kB 0 B
frontend/dist/TracingScene 53.7 kB -39 B (-0.07%)
frontend/dist/TransformationsScene 6.4 kB 0 B
frontend/dist/treemap-LRROVOQU 357 B 0 B
frontend/dist/treeView-BLDUP644 360 B 0 B
frontend/dist/TrendsBarChart 6.74 kB -37 B (-0.55%)
frontend/dist/TrendsLineChart 6.84 kB 0 B
frontend/dist/tsMode 24 kB 0 B
frontend/dist/twig 6.01 kB 0 B
frontend/dist/TwoFactorReset 4.27 kB 0 B
frontend/dist/typescript 274 B 0 B
frontend/dist/typespec 2.86 kB 0 B
frontend/dist/Unsubscribe 1.9 kB 0 B
frontend/dist/UserInterview 4.74 kB 0 B
frontend/dist/UserInterviews 2.22 kB 0 B
frontend/dist/vb 5.83 kB 0 B
frontend/dist/vennDiagram-CIIHVFJN 41.6 kB 0 B
frontend/dist/VercelConnect 5.23 kB 0 B
frontend/dist/VercelLinkError 2.5 kB 0 B
frontend/dist/VerifyEmail 5.02 kB 0 B
frontend/dist/vimMode 211 kB 0 B
frontend/dist/VisualReviewIndexScene 2.41 kB 0 B
frontend/dist/VisualReviewRunScene 44.3 kB 0 B
frontend/dist/VisualReviewRunsScene 7.17 kB 0 B
frontend/dist/VisualReviewSettingsScene 11 kB -35 B (-0.32%)
frontend/dist/VisualReviewSnapshotHistoryScene 12.4 kB +37 B (+0.3%)
frontend/dist/VisualReviewSnapshotOverviewScene 17.5 kB 0 B
frontend/dist/wardley-L42UT6IY 352 B 0 B
frontend/dist/wardleyDiagram-YWT4CUSO 26.2 kB 0 B
frontend/dist/web-vitals-with-attribution.js 11.8 kB 0 B
frontend/dist/web-vitals.js 6.39 kB 0 B
frontend/dist/WebAnalyticsScene 9.76 kB 0 B
frontend/dist/WebGLRenderer-DYjOwNoG 60.4 kB 0 B
frontend/dist/WebGPURenderer-B_wkl_Ja 36.3 kB 0 B
frontend/dist/WebScriptsScene 2.78 kB 0 B
frontend/dist/webworkerAll-puPV1rBA 397 B 0 B
frontend/dist/wgsl 7.38 kB 0 B
frontend/dist/Wizard 4.7 kB 0 B
frontend/dist/WorkflowsScene 60 kB -91 B (-0.15%)
frontend/dist/WorldMap 1.04 MB 0 B
frontend/dist/xml 3.02 kB 0 B
frontend/dist/xychartDiagram-2RQKCTM6 39.6 kB 0 B
frontend/dist/yaml 4.64 kB 0 B

compressed-size-action

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 13, 2026

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

---

### Issue 1 of 4
products/conversations/backend/api/tickets.py:862-882
**Initial compose email sent with "Re:" subject prefix**

The `Comment` created here triggers the existing `send_email_reply_on_team_message` signal, which calls `send_email_reply`. That task unconditionally prepends `"Re: "` to the subject unless it already starts with `"re:"`. For a compose flow initiating first contact (e.g. subject `"Welcome!"`), the customer receives an email with subject `"Re: Welcome!"`. The `send_email_reply` task was designed for replies to inbound tickets, not for the first outbound message. You'll need either a dedicated compose-email task, or an `is_initial_message` flag to skip the "Re:" prefix.

### Issue 2 of 4
products/conversations/frontend/components/ComposeTicket/ComposeTicketModal.tsx:12-13
The `emailConfigsLoading` state provided by kea-loaders is not used. While configs are loading the "From" dropdown shows the placeholder but remains empty with no visual feedback, which may leave users confused if the load takes a moment.

```suggestion
    const { isOpen, recipientEmail, emailSubject, emailConfigId, emailConfigs, emailConfigsLoading, composingLoading } =
        useValues(composeTicketLogic)
```

### Issue 3 of 4
products/conversations/frontend/components/ComposeTicket/ComposeTicketModal.tsx:50-56
Pass `emailConfigsLoading` to `LemonSelect` so the dropdown shows a spinner while configs load, rather than appearing empty.

```suggestion
                    <LemonSelect
                        value={emailConfigId || undefined}
                        options={emailConfigOptions}
                        onChange={(value) => value && setEmailConfigId(value)}
                        placeholder={emailConfigsLoading ? 'Loading...' : 'Select sender address...'}
                        loading={emailConfigsLoading}
                        fullWidth
                    />
```

### Issue 4 of 4
frontend/src/lib/api.ts:6594-6601
The `channel` field is declared in the request type but `ComposeTicketSerializer` on the backend doesn't include it, so it is silently ignored. Since the endpoint is email-only and hardcodes `Channel.EMAIL`, the field adds noise without effect.

```suggestion
        async compose(data: {
            message: string
            recipient_email: string
            email_config_id: string
            email_subject?: string
            rich_content?: Record<string, unknown> | null
        }): Promise<{ id: string; ticket_number: number }> {
```

Reviews (1): Last reviewed commit: "feat: create ticket" | Re-trigger Greptile

Comment thread products/conversations/backend/api/tickets.py
Comment thread products/conversations/frontend/components/ComposeTicket/ComposeTicketModal.tsx Outdated
Comment thread frontend/src/lib/api.ts
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 13, 2026

MCP UI Apps size report

App JS CSS
debug 478.4 KB 139.9 KB
action 353.8 KB 139.9 KB
action-list 361.7 KB 139.9 KB
cohort 352.9 KB 139.9 KB
cohort-list 360.6 KB 139.9 KB
error-details 374.3 KB 139.9 KB
error-issue 353.6 KB 139.9 KB
error-issue-list 361.6 KB 139.9 KB
experiment 358.1 KB 139.9 KB
experiment-list 362.4 KB 139.9 KB
experiment-results 360.2 KB 139.9 KB
feature-flag 438.5 KB 139.9 KB
feature-flag-list 443.0 KB 139.9 KB
feature-flag-testing 431.4 KB 139.9 KB
insight-actors 356.7 KB 139.9 KB
llm-costs 356.3 KB 139.9 KB
session-recording 354.6 KB 139.9 KB
session-summary 360.6 KB 139.9 KB
survey 354.4 KB 139.9 KB
survey-global-stats 359.2 KB 139.9 KB
survey-list 362.3 KB 139.9 KB
survey-stats 359.2 KB 139.9 KB
trace-span 353.3 KB 139.9 KB
trace-span-list 361.5 KB 139.9 KB
workflow 353.2 KB 139.9 KB
workflow-list 361.0 KB 139.9 KB
query-results 375.0 KB 139.9 KB

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 13, 2026

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

---

### Issue 1 of 1
products/conversations/backend/api/tickets.py:233-235
The `compose` action is not added to `posthog_feature_flag`, so `PostHogFeatureFlagPermission` (which is in the class-level `permission_classes`) does not gate it. Any authenticated team member can call this endpoint even when `PRODUCT_SUPPORT_CREATE_TICKET` is disabled — bypassing the UI flag check entirely. The `suggest_reply` action shows the established pattern: list the action name in the dict alongside its flag key.

```suggestion
    posthog_feature_flag = {
        "product-support-ai-suggestion": ["suggest_reply"],
        "product-support-create-ticket": ["compose"],
    }
```

Reviews (2): Last reviewed commit: "chore: update OpenAPI generated types" | Re-trigger Greptile

Comment thread products/conversations/backend/api/tickets.py
@veria-ai
Copy link
Copy Markdown

veria-ai Bot commented May 13, 2026

Medium: Compose can link outbound tickets to arbitrary people

This PR adds a compose endpoint for creating outbound email tickets. The endpoint trusts a caller-supplied distinct ID when linking the ticket to a person, which lets a ticket writer attach the new ticket to an unrelated person and then read that person data through the ticket response.


Status: 1 new · 1 open · 1 resolved
Risk: 5/10

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 13, 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/conversations/backend/api/tickets.py:815-820
**400 error schema doesn't match actual responses**

The `@extend_schema` decorator annotates the 400 response with `SuggestReplyErrorSerializer` (which has an `error_type` field), but the `compose` action returns standard DRF `{"detail": "..."}` payloads. This will generate an incorrect OpenAPI spec for the endpoint. The `SuggestReplyErrorSerializer` was designed for the `suggest_reply` action where error types like `"no_messages"` are returned. A plain `serializers.Serializer` with a `detail` field (or `OpenApiResponse(description="Bad request")`) would be more accurate here.

### Issue 2 of 2
products/conversations/frontend/components/ComposeTicket/composeTicketLogic.ts:55-62
**Stale `composingLoading` when modal closed during in-flight request**

`closeComposeModal` does not reset `composingLoading`, so if a user clicks Cancel while the API call is still in-flight and then immediately reopens the modal, they'll see the "Send" button stuck in a loading state until the background request resolves. Adding `closeComposeModal` to the `composingLoading` reducer ensures the state is clean on reopen.

```suggestion
        composingLoading: [
            false,
            {
                submitCompose: () => true,
                submitComposeFinished: () => false,
                resetForm: () => false,
                closeComposeModal: () => false,
            },
        ],
```

Reviews (3): Last reviewed commit: "Merge branch 'feat/support-raise-a-ticke..." | Re-trigger Greptile

Comment thread products/conversations/backend/api/tickets.py
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 13, 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/conversations/backend/api/tickets.py:428-441
**N+1 queries in `_attach_persons_to_tickets` fallback**

The new loop issues one `get_person_by_email_property` ORM query per unmatched email ticket. With `max_limit = 1000`, a full-page list request containing 1000 such tickets would fire 1000 extra queries (each filtering on a JSONB `properties` column) against the read replica. A single call to `get_person_by_email_property` is already a heavy operation since it must match against three JSON key variants.

The fix is to deduplicate by email address first, execute one query per unique email (or a single `__in`-based query), then distribute the results, similar to how `get_persons_by_distinct_ids` handles the batch above.

### Issue 2 of 2
products/conversations/backend/api/tickets.py:834-840
`permission_classes` on `@action` is ignored by `TeamAndOrgViewSetMixin`

`TeamAndOrgViewSetMixin.get_permissions()` builds the permission list entirely from the class-level `self.permission_classes` attribute — it never reads action-level `permission_classes` from `@action(...)` kwargs. The actual enforced permissions are the full set inherited from the viewset (`IsAuthenticated`, `APIScopePermission`, `AccessControlPermission`, `TeamMemberAccessPermission`, `PostHogFeatureFlagPermission`). Leaving this here is misleading: a reader might believe the compose endpoint is less protected than it actually is.

```suggestion
    @action(
        detail=False,
        methods=["POST"],
        pagination_class=None,
        throttle_classes=[ComposeTicketBurstThrottle, ComposeTicketSustainedThrottle],
    )
```

Reviews (4): Last reviewed commit: "fix" | Re-trigger Greptile

Comment thread products/conversations/backend/api/tickets.py
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 13, 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/conversations/backend/api/tickets.py:436-441
The `if email:` check inside the loop is redundant — the list comprehension on the preceding lines already filters for `t.email_from` being truthy, so `email` is always a non-empty string at this point.

```suggestion
        for ticket in unmatched:
            found = get_person_by_email_property(self.team_id, ticket.email_from)
            if found is not None:
                ticket.person = found
```

### Issue 2 of 2
products/conversations/frontend/components/ComposeTicket/composeTicketLogic.ts:117-124
**Field-level API errors silently fall back to generic message**

DRF field validation errors (e.g. an invalid `recipient_email`) return a 400 body like `{"recipient_email": ["Enter a valid email address."]}` — no top-level `detail` key. The check `'detail' in error` will be `false`, so the user sees "Failed to create ticket." instead of the actual validation message. Consider showing the first field-level error message when `detail` is absent, or normalising the error shape from the API client.

Reviews (5): Last reviewed commit: "fix" | Re-trigger Greptile

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 14, 2026

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

---

### Issue 1 of 1
products/conversations/backend/api/tickets.py:871-881
The person-resolution block is duplicated verbatim. After the first block runs it may update `distinct_id` to the person's first distinct ID; the second block then calls `get_person_by_distinct_id` again with that already-resolved ID (an extra DB round-trip), and the `distinct_id == recipient_email` guard is now false so the email fallback can never fire anyway. The second block is entirely dead and should be removed.

```suggestion
        person = get_person_by_distinct_id(team.id, distinct_id)
        if person is None and distinct_id == recipient_email:
            person = get_person_by_email_property(team.id, recipient_email)
            if person is not None and person.distinct_ids:
                distinct_id = person.distinct_ids[0]
```

Reviews (6): Last reviewed commit: "fix" | Re-trigger Greptile

Comment thread products/conversations/backend/api/tickets.py Outdated
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 14, 2026

Security Review

  • APIScopePermission bypass (products/conversations/backend/api/tickets.py, compose action): The permission_classes=[IsAuthenticated] override on the compose action removes the viewset-level APIScopePermission. Any authenticated session — including a personal API token scoped to read-only — can POST to this endpoint and send outbound emails.
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/conversations/backend/api/tickets.py:836-842
**`compose` action drops `APIScopePermission`**

By setting `permission_classes=[IsAuthenticated]` on the action, the viewset-level `APIScopePermission` (and `PostHogFeatureFlagPermission`) are completely replaced — not merged. That means a personal API token with `read`-only scope can POST to `/conversations/tickets/compose/` and send an outbound email to any address. All other new actions in this viewset (e.g. `suggest_reply_action`, `unread_count`) leave `permission_classes` unset, inheriting the viewset defaults. This should follow the same pattern, or at minimum retain `APIScopePermission`.

### Issue 2 of 2
products/conversations/backend/api/tickets.py:843-855
**`PRODUCT_SUPPORT_CREATE_TICKET` flag not enforced server-side**

The flag is gated client-side only. Since `PostHogFeatureFlagPermission` is dropped from this action's `permission_classes`, the `posthog_feature_flag` dict at the viewset level has no effect here. Any authenticated user can call this endpoint even when the flag is off for their team. To add server-side enforcement, restore the viewset permission classes (see other comment) and add `"product-support-create-ticket": ["compose"]` to `posthog_feature_flag`.

Reviews (7): Last reviewed commit: "me being me" | Re-trigger Greptile

Comment thread products/conversations/backend/api/tickets.py
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 14, 2026

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

---

### Issue 1 of 3
products/conversations/backend/api/tickets.py:89-93
`email_subject` allows blank strings by default since DRF `CharField` has `allow_blank=True`. Sending `email_subject: ""` will pass validation, be stored as `""`, and then silently fall back to `"Your support request"` in `send_email_reply` (via the `or` fallback). Adding `allow_blank=False` enforces the intent: if the field is present, it must be non-empty.

```suggestion
    email_subject = serializers.CharField(
        required=False,
        allow_blank=False,
        max_length=500,
        help_text="Email subject line.",
    )
```

### Issue 2 of 3
products/conversations/backend/api/tickets.py:107-110
Superfluous check: `not value` is redundant here. Since `message` is a non-nullable `CharField`, `value` is always a `str`. `not value.strip()` already covers the empty-string case (`"".strip() == ""`), so the `not value` short-circuit adds no correctness benefit. Simplify to a single condition.

```suggestion
    def validate_message(self, value: str) -> str:
        if not value.strip():
            raise serializers.ValidationError("Message content is required.")
        return value.strip()
```

### Issue 3 of 3
products/conversations/backend/api/tickets.py:884
`email_from` semantically means "the address this email originated from" (the customer for inbound tickets). For compose/outbound tickets the customer is the *recipient*, yet `email_from` is populated with `data["recipient_email"]`. This works today because `send_email_reply` uses `ticket.email_from` as the `to=` address and the fallback person-lookup in `_attach_persons_to_tickets` also keys on it — so functionally it is fine. However, a future maintainer inspecting an outbound ticket will see `email_from = customer@example.com` and reasonably conclude "the customer sent this email", which is the opposite of what happened. A field like `email_to` or a dedicated `direction` column would prevent this confusion as the outbound feature grows.

Reviews (8): Last reviewed commit: "remove" | Re-trigger Greptile

Comment thread products/conversations/backend/api/tickets.py
@veryayskiy veryayskiy added the stamphog Request AI review from stamphog label May 14, 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.

There is an unresolved security/behavioral comment from @veria-ai on the current head: the compose action only gates on email_enabled but not conversations_enabled, allowing outbound emails to be sent even after Conversations is turned off for the team. This needs to be addressed before auto-approval. Additionally, the PR is cross-cutting, involves a new API action with permission changes, and warrants a human review.

@stamphog stamphog Bot removed the stamphog Request AI review from stamphog label May 14, 2026
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 14, 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/conversations/backend/api/tickets.py:436-441
The `if email:` guard is redundant — the list comprehension above already filters for `t.email_from` being truthy. The variable `email` is unconditionally truthy at this point, so the inner `if` can never be False.

```suggestion
        for ticket in unmatched:
            found = get_person_by_email_property(self.team_id, ticket.email_from)
            if found is not None:
                ticket.person = found
```

### Issue 2 of 2
products/conversations/backend/api/tickets.py:877-881
**Lazy `distinct_ids` query after `get_person_by_email_property`**

`get_person_by_email_property` always goes through the ORM path (no personhog RPC, as noted in its docstring) and does a plain `.filter(...).first()` with no `prefetch_related` for `PersonDistinctId`. Accessing `person.distinct_ids[0]` therefore fires an extra lazy DB query. This is only one query per compose request so it's not critical, but adding `.prefetch_related("persondistinctid_set")` inside `get_person_by_email_property` would keep it consistent with how `get_persons_by_distinct_ids` works.

Reviews (9): Last reviewed commit: "fix" | Re-trigger Greptile

@veryayskiy veryayskiy added the stamphog Request AI review from stamphog label May 14, 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.

Review agent failed after 3 attempts — needs human review.

@stamphog stamphog Bot removed the stamphog Request AI review from stamphog label May 14, 2026
Comment thread products/conversations/backend/api/tickets.py
@veryayskiy veryayskiy added the stamphog Request AI review from stamphog label May 14, 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.

Gates denied due to size (631 lines, 16 files). Beyond the size gate, this PR adds a new outbound email action that introduces real concerns: an N+1 query per unmatched ticket in _attach_persons_to_tickets (one get_person_by_email_property call per email ticket with no person match, across up to 1000 tickets per page), and the recipient_distinct_id field still allows callers to link a ticket to an arbitrary person's distinct ID independently of the recipient email, leaking that person's properties through TicketSerializer. The stamphog review agent also failed after 3 attempts and flagged the need for human review. Request a human review from the conversations team owner before re-requesting auto-approval.

@stamphog stamphog Bot removed the stamphog Request AI review from stamphog label May 14, 2026
Copy link
Copy Markdown
Contributor

@yasen-posthog yasen-posthog left a comment

Choose a reason for hiding this comment

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

very good, awesome feature

@veryayskiy veryayskiy merged commit 8bf6573 into master May 14, 2026
391 of 393 checks passed
@veryayskiy veryayskiy deleted the feat/support-raise-a-ticker-email branch May 14, 2026 14:12
inkeep Bot added a commit to PostHog/posthog.com that referenced this pull request May 14, 2026
Documents the new compose ticket feature from PR PostHog/posthog#58392, which allows support teams to proactively create tickets and send initial emails to customers via the email channel.
inkeep Bot added a commit to PostHog/posthog.com that referenced this pull request May 14, 2026
@deployment-status-posthog
Copy link
Copy Markdown

deployment-status-posthog Bot commented May 14, 2026

Deploy status

Environment Status Deployed At Workflow
dev ✅ Deployed 2026-05-14 15:00 UTC Run
prod-us ✅ Deployed 2026-05-14 15:11 UTC Run
prod-eu ✅ Deployed 2026-05-14 15:15 UTC Run

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants