Skip to content

feat(tasks): summarize endpoint - #56959

Merged
jonathanlab merged 9 commits into
masterfrom
feat/tasks-summarize-endpoint
May 5, 2026
Merged

jonathanlab merged 9 commits into
masterfrom
feat/tasks-summarize-endpoint

Conversation

@jonathanlab

@jonathanlab jonathanlab commented Apr 29, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Our other task retrieval endpoint is pretty slow, we need a specialised endpoint for getting tasks for the sidebar in PostHog Code. See PostHog/code#1945

Changes

  • Add a summary endpoint for tasks, paginated

How did you test this code?

  • Manually and automated

👉 Stay up-to-date with PostHog coding conventions for a smoother review.

Publish to changelog?

Docs update

🤖 Agent context

@jonathanlab
jonathanlab marked this pull request as ready for review April 29, 2026 15:54
@pr-assigner-resolver-posthog
pr-assigner-resolver-posthog Bot requested a review from a team April 29, 2026 15:55
@jonathanlab jonathanlab changed the title Feat/tasks summarize endpoint feat(tasks): summarize endpoint Apr 29, 2026
@greptile-apps

greptile-apps Bot commented Apr 29, 2026

Copy link
Copy Markdown
Contributor
Prompt To Fix All With AI
This is a comment left during a code review.
Path: products/tasks/backend/serializers.py
Line: 780-784

Comment:
**`latest_run` silently returns `None` when status is falsy**

`_latest_run_status` is checked against `None`, but Django's `Subquery` can return any falsy value (e.g. an empty string `""`) for a non-null DB column if data is inconsistent. More importantly, `TaskRun.Status` has the value `"not_started"` which is always truthy, but the check `if status is None` is specifically testing for `None` (no-run case). This logic is correct *today*, but it's fragile: if `status` were ever an empty string or `0`, a task with a real latest run would be reported as having none.

A safer and more explicit check would distinguish "no run found" from "run found with some status":

```python
    def get_latest_run(self, obj):
        status = getattr(obj, "_latest_run_status", None)
        environment = getattr(obj, "_latest_run_environment", None)
        if status is None and environment is None:
            return None
        return {"status": status, "environment": environment}
```

This still relies on the subquery returning `None` only when no run exists, but is more robust to future additions of nullable status values.

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

---

This is a comment left during a code review.
Path: products/tasks/backend/api.py
Line: 255-271

Comment:
**Two correlated subqueries for the same row**

`_latest_run_status` and `_latest_run_environment` are two independent correlated subqueries that each re-evaluate the `ORDER BY -created_at, -id LIMIT 1` logic on `TaskRun`. On most databases this generates two identical index scans per task row. If the `TaskRun` table grows large, this doubles the per-row subquery cost. Consider using a single subquery that returns a JSON object (or use `Window` + `Subquery` with a single value), or accept the current approach if perf is acceptable at your task/run cardinalities.

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

Reviews (1): Last reviewed commit: "better less bad endpoint" | Re-trigger Greptile

Comment thread products/tasks/backend/serializers.py Resolved
Comment thread products/tasks/backend/api.py Resolved
@tests-posthog

tests-posthog Bot commented Apr 29, 2026

Copy link
Copy Markdown
Contributor

⏭️ Skipped snapshot commit because branch advanced to aa98188 while workflow was testing 63d6728.

The new commit will trigger its own snapshot update workflow.

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

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

@tests-posthog

tests-posthog Bot commented Apr 29, 2026

Copy link
Copy Markdown
Contributor

Query snapshots: Backend query snapshots updated

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

What this means:

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

Next steps:

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

Review snapshot changes →

@jonathanlab
jonathanlab enabled auto-merge (squash) May 5, 2026 12:16
@tests-posthog
tests-posthog Bot disabled auto-merge May 5, 2026 12:30
@github-actions

github-actions Bot commented May 5, 2026 •

Copy link
Copy Markdown
Contributor

Size Change: 0 B

Total Size: 141 MB

ℹ️ View Unchanged
Filename Size
frontend/dist/368Hedgehogs 5.41 kB
frontend/dist/abap 14.2 kB
frontend/dist/AccountConnected 2.89 kB
frontend/dist/Action 24 kB
frontend/dist/Actions 1.16 kB
frontend/dist/AdvancedActivityLogsScene 37.1 kB
frontend/dist/AgenticAuthorize 5.6 kB
frontend/dist/apex 3.99 kB
frontend/dist/ApprovalDetail 16.4 kB
frontend/dist/array.full.es5.js 345 kB
frontend/dist/array.full.js 437 kB
frontend/dist/array.js 189 kB
frontend/dist/AsyncMigrations 13.3 kB
frontend/dist/AuthorizationStatus 867 B
frontend/dist/azcli 885 B
frontend/dist/bat 1.88 kB
frontend/dist/BatchExportScene 60.6 kB
frontend/dist/bicep 2.59 kB
frontend/dist/Billing 629 B
frontend/dist/BillingSection 20.9 kB
frontend/dist/BoxPlot 5.18 kB
frontend/dist/browserAll-0QZMN1W2 37.4 kB
frontend/dist/ButtonPrimitives 698 B
frontend/dist/CalendarHeatMap 4.93 kB
frontend/dist/cameligo 2.23 kB
frontend/dist/changeRequestsLogic 680 B
frontend/dist/CLIAuthorize 11.5 kB
frontend/dist/CLILive 4.16 kB
frontend/dist/clojure 9.68 kB
frontend/dist/coffee 3.63 kB
frontend/dist/Cohort 24.9 kB
frontend/dist/CohortCalculationHistory 6.37 kB
frontend/dist/Cohorts 9.53 kB
frontend/dist/ConfirmOrganization 4.66 kB
frontend/dist/conversations.js 67.3 kB
frontend/dist/Coupons 861 B
frontend/dist/cpp 5.33 kB
frontend/dist/Create 975 B
frontend/dist/crisp-chat-integration.js 1.97 kB
frontend/dist/csharp 4.56 kB
frontend/dist/csp 1.45 kB
frontend/dist/css 4.54 kB
frontend/dist/cssMode 4.2 kB
frontend/dist/CustomCssScene 3.7 kB
frontend/dist/CustomerAnalyticsConfigurationScene 2.21 kB
frontend/dist/CustomerAnalyticsScene 26.7 kB
frontend/dist/CustomerJourneyBuilderScene 1.97 kB
frontend/dist/CustomerJourneyTemplatesScene 7.65 kB
frontend/dist/customizations.full.js 18 kB
frontend/dist/CyclotronJobInputAssignee 1.47 kB
frontend/dist/CyclotronJobInputBusinessHours 2.85 kB
frontend/dist/CyclotronJobInputTicketTags 852 B
frontend/dist/cypher 3.42 kB
frontend/dist/dart 4.29 kB
frontend/dist/Dashboard 1.31 kB
frontend/dist/Dashboards 22.2 kB
frontend/dist/DashboardTemplateCopyScene 5.85 kB
frontend/dist/DataManagementScene 782 B
frontend/dist/DataPipelinesNewScene 2.45 kB
frontend/dist/DataWarehouseScene 1.38 kB
frontend/dist/Deactivated 1.27 kB
frontend/dist/dead-clicks-autocapture.js 13.2 kB
frontend/dist/DeadLetterQueue 5.53 kB
frontend/dist/DebugScene 20.1 kB
frontend/dist/decompressionWorker 2.85 kB
frontend/dist/decompressionWorker.js 2.85 kB
frontend/dist/DefinitionEdit 8.7 kB
frontend/dist/DefinitionView 24.2 kB
frontend/dist/DestinationsScene 2.82 kB
frontend/dist/dist 643 B
frontend/dist/dockerfile 1.91 kB
frontend/dist/EarlyAccessFeature 889 B
frontend/dist/EarlyAccessFeatures 2.99 kB
frontend/dist/ecl 5.38 kB
frontend/dist/EditorScene 1.28 kB
frontend/dist/elixir 10.3 kB
frontend/dist/elk.bundled 1.44 MB
frontend/dist/EmailMFAVerify 3.16 kB
frontend/dist/EndpointScene 39.1 kB
frontend/dist/EndpointsScene 21.5 kB
frontend/dist/ErrorTrackingIssueFingerprintsScene 7.13 kB
frontend/dist/ErrorTrackingIssueScene 99.2 kB
frontend/dist/ErrorTrackingScene 25.2 kB
frontend/dist/EvaluationTemplates 711 B
frontend/dist/EventsScene 2.71 kB
frontend/dist/exception-autocapture.js 11.8 kB
frontend/dist/Experiment 195 kB
frontend/dist/Experiments 19.2 kB
frontend/dist/exporter 23.1 MB
frontend/dist/exporter.js 23.1 MB
frontend/dist/ExportsScene 4.13 kB
frontend/dist/FeatureFlag 131 kB
frontend/dist/FeatureFlags 742 B
frontend/dist/FeatureFlagTemplatesScene 7.18 kB
frontend/dist/FlappyHog 5.92 kB
frontend/dist/flow9 1.85 kB
frontend/dist/freemarker2 16.7 kB
frontend/dist/fsharp 3.02 kB
frontend/dist/go 2.69 kB
frontend/dist/graphql 2.3 kB
frontend/dist/Group 14.8 kB
frontend/dist/Groups 4.05 kB
frontend/dist/GroupsNew 7.49 kB
frontend/dist/handlebars 7.38 kB
frontend/dist/hcl 3.63 kB
frontend/dist/HealthCategoryDetailScene 7.38 kB
frontend/dist/HealthScene 10.7 kB
frontend/dist/HeatmapNewScene 4.76 kB
frontend/dist/HeatmapRecordingScene 4.14 kB
frontend/dist/HeatmapScene 6.77 kB
frontend/dist/HeatmapsScene 4.02 kB
frontend/dist/hls 394 kB
frontend/dist/HogFunctionScene 59.4 kB
frontend/dist/HogRepl 7.51 kB
frontend/dist/html 5.62 kB
frontend/dist/htmlMode 4.65 kB
frontend/dist/image-blob-reduce.esm 49.5 kB
frontend/dist/InboxScene 59.9 kB
frontend/dist/index 245 kB
frontend/dist/index.js 245 kB
frontend/dist/ini 1.14 kB
frontend/dist/InsightQuickStart 5.57 kB
frontend/dist/InsightScene 28.9 kB
frontend/dist/IntegrationsRedirect 874 B
frontend/dist/intercom-integration.js 2.03 kB
frontend/dist/InviteSignup 15.1 kB
frontend/dist/java 3.26 kB
frontend/dist/javascript 1.02 kB
frontend/dist/jsonMode 13.9 kB
frontend/dist/julia 7.26 kB
frontend/dist/kotlin 3.44 kB
frontend/dist/lazy 159 kB
frontend/dist/LegacyPluginScene 20.8 kB
frontend/dist/LegalDocumentNewScene 59.5 kB
frontend/dist/LegalDocumentsScene 4.78 kB
frontend/dist/LemonTextAreaMarkdown 638 B
frontend/dist/less 3.93 kB
frontend/dist/lexon 2.47 kB
frontend/dist/lib 2.25 kB
frontend/dist/Link 604 B
frontend/dist/LinkScene 25 kB
frontend/dist/LinksScene 4.34 kB
frontend/dist/liquid 4.57 kB
frontend/dist/LiveDebugger 19.3 kB
frontend/dist/LiveEventsTable 5.37 kB
frontend/dist/LLMAnalyticsClusterScene 19 kB
frontend/dist/LLMAnalyticsClustersScene 51.9 kB
frontend/dist/LLMAnalyticsDatasetScene 19.8 kB
frontend/dist/LLMAnalyticsDatasetsScene 3.42 kB
frontend/dist/LLMAnalyticsEvaluation 59.5 kB
frontend/dist/LLMAnalyticsEvaluationsScene 30 kB
frontend/dist/LLMAnalyticsPlaygroundScene 37.5 kB
frontend/dist/LLMAnalyticsScene 117 kB
frontend/dist/LLMAnalyticsSessionScene 13.5 kB
frontend/dist/LLMAnalyticsTag 27.2 kB
frontend/dist/LLMAnalyticsTagsScene 7.09 kB
frontend/dist/LLMAnalyticsTraceScene 129 kB
frontend/dist/LLMAnalyticsUsers 662 B
frontend/dist/LLMASessionFeedbackDisplay 4.98 kB
frontend/dist/LLMPromptScene 17.7 kB
frontend/dist/LLMPromptsScene 4.62 kB
frontend/dist/LLMSkillScene 725 B
frontend/dist/LLMSkillsScene 742 B
frontend/dist/Login 8.76 kB
frontend/dist/Login2FA 4.39 kB
frontend/dist/logs.js 38.5 kB
frontend/dist/LogsAlertDetailScene 17.1 kB
frontend/dist/LogsSamplingDetailScene 4.38 kB
frontend/dist/LogsSamplingNewScene 1.9 kB
frontend/dist/LogsScene 16.7 kB
frontend/dist/lua 2.16 kB
frontend/dist/m3 2.85 kB
frontend/dist/main 819 kB
frontend/dist/ManagedMigration 14.3 kB
frontend/dist/markdown 3.83 kB
frontend/dist/MarketingAnalyticsScene 40.1 kB
frontend/dist/MaterializedColumns 10.3 kB
frontend/dist/Max 937 B
frontend/dist/mdx 5.43 kB
frontend/dist/memlens.lib.bundle 27.9 kB
frontend/dist/MessageTemplate 16.4 kB
frontend/dist/MetricsScene 974 B
frontend/dist/mips 2.62 kB
frontend/dist/ModelsScene 14.5 kB
frontend/dist/MonacoDiffEditor 471 B
frontend/dist/monacoEditorWorker 288 kB
frontend/dist/monacoEditorWorker.js 288 kB
frontend/dist/monacoJsonWorker 419 kB
frontend/dist/monacoJsonWorker.js 419 kB
frontend/dist/monacoTsWorker 7.02 MB
frontend/dist/monacoTsWorker.js 7.02 MB
frontend/dist/MoveToPostHogCloud 4.6 kB
frontend/dist/msdax 4.95 kB
frontend/dist/mysql 11.3 kB
frontend/dist/NavTabChat 4.82 kB
frontend/dist/NewSourceScene 946 B
frontend/dist/NewTabScene 783 B
frontend/dist/NodeDetailScene 16.8 kB
frontend/dist/NotebookCanvasScene 3.51 kB
frontend/dist/NotebookPanel 5.48 kB
frontend/dist/NotebookScene 8.52 kB
frontend/dist/NotebooksScene 7.74 kB
frontend/dist/OAuthAuthorize 709 B
frontend/dist/objective-c 2.44 kB
frontend/dist/Onboarding 770 kB
frontend/dist/OnboardingCouponRedemption 1.34 kB
frontend/dist/pascal 3.03 kB
frontend/dist/pascaligo 2.04 kB
frontend/dist/passkeyLogic 620 B
frontend/dist/PasswordReset 4.5 kB
frontend/dist/PasswordResetComplete 3.13 kB
frontend/dist/PendingDeletion 2.35 kB
frontend/dist/perl 8.29 kB
frontend/dist/PersonScene 18.1 kB
frontend/dist/PersonsScene 4.84 kB
frontend/dist/pgsql 13.5 kB
frontend/dist/php 8.06 kB
frontend/dist/PipelineStatusScene 9.24 kB
frontend/dist/pla 1.72 kB
frontend/dist/posthog 145 kB
frontend/dist/postiats 7.9 kB
frontend/dist/powerquery 17 kB
frontend/dist/powershell 3.31 kB
frontend/dist/PreflightCheck 5.71 kB
frontend/dist/product-tours.js 115 kB
frontend/dist/ProductTour 274 kB
frontend/dist/ProductTours 4.82 kB
frontend/dist/ProjectHomepage 24.9 kB
frontend/dist/protobuf 9.09 kB
frontend/dist/pug 4.86 kB
frontend/dist/python 4.8 kB
frontend/dist/qsharp 3.23 kB
frontend/dist/QueryPerformance 8.35 kB
frontend/dist/r 3.16 kB
frontend/dist/razor 9.38 kB
frontend/dist/react-json-view 121 kB
frontend/dist/recorder-v2.js 112 kB
frontend/dist/recorder.js 112 kB
frontend/dist/redis 3.59 kB
frontend/dist/redshift 11.8 kB
frontend/dist/RegionMap 29.6 kB
frontend/dist/render-query 22.8 MB
frontend/dist/render-query.js 22.8 MB
frontend/dist/ResourceTransfer 9.32 kB
frontend/dist/restructuredtext 3.94 kB
frontend/dist/RevenueAnalyticsScene 25.8 kB
frontend/dist/ruby 8.54 kB
frontend/dist/rust 4.2 kB
frontend/dist/SavedInsights 800 B
frontend/dist/sb 1.86 kB
frontend/dist/scala 7.36 kB
frontend/dist/schema 700 kB
frontend/dist/SchemaScene 21.1 kB
frontend/dist/scheme 1.8 kB
frontend/dist/scss 6.45 kB
frontend/dist/SdkDoctorScene 9.56 kB
frontend/dist/SessionAttributionExplorerScene 6.77 kB
frontend/dist/SessionGroupSummariesTable 4.77 kB
frontend/dist/SessionGroupSummaryScene 17.1 kB
frontend/dist/SessionProfileScene 15.2 kB
frontend/dist/SessionRecordingDetail 1.9 kB
frontend/dist/SessionRecordingFilePlaybackScene 4.61 kB
frontend/dist/SessionRecordings 878 B
frontend/dist/SessionRecordingsKiosk 8.98 kB
frontend/dist/SessionRecordingsPlaylistScene 4.29 kB
frontend/dist/SessionRecordingsSettingsScene 2.04 kB
frontend/dist/SessionsScene 4.12 kB
frontend/dist/SettingsScene 3.12 kB
frontend/dist/sharedChunkAnchors 235 kB
frontend/dist/sharedChunkAnchors.js 235 kB
frontend/dist/SharedMetric 5.08 kB
frontend/dist/SharedMetrics 685 B
frontend/dist/shell 3.11 kB
frontend/dist/SignupContainer 28.3 kB
frontend/dist/Site 1.33 kB
frontend/dist/solidity 18.6 kB
frontend/dist/sophia 2.8 kB
frontend/dist/SourceScene 860 B
frontend/dist/SourcesScene 6.1 kB
frontend/dist/sparql 2.59 kB
frontend/dist/sql 10.3 kB
frontend/dist/SqlVariableEditScene 7.39 kB
frontend/dist/st 7.44 kB
frontend/dist/StartupProgram 21.3 kB
frontend/dist/StripeConfirmInstall 3.67 kB
frontend/dist/SubscriptionScene 13.5 kB
frontend/dist/SubscriptionsScene 5.08 kB
frontend/dist/SupportSettingsScene 1.57 kB
frontend/dist/SupportTicketScene 26.3 kB
frontend/dist/SupportTicketsScene 869 B
frontend/dist/Survey 984 B
frontend/dist/SurveyFormBuilder 1.68 kB
frontend/dist/Surveys 18.4 kB
frontend/dist/surveys.js 94.7 kB
frontend/dist/SurveyWizard 72.3 kB
frontend/dist/swift 5.3 kB
frontend/dist/SystemStatus 17 kB
frontend/dist/systemverilog 7.65 kB
frontend/dist/TaskDetailScene 22.5 kB
frontend/dist/TaskTracker 14.3 kB
frontend/dist/tcl 3.61 kB
frontend/dist/TextCardMarkdownEditor 11.1 kB
frontend/dist/toolbar 11.1 MB
frontend/dist/toolbar.js 11.1 MB
frontend/dist/ToolbarLaunch 2.61 kB
frontend/dist/tracing-headers.js 1.74 kB
frontend/dist/TracingScene 31.6 kB
frontend/dist/TransformationsScene 2.06 kB
frontend/dist/TrendsBarChart 5.71 kB
frontend/dist/TrendsLineChart 6.4 kB
frontend/dist/tsMode 24 kB
frontend/dist/twig 6.01 kB
frontend/dist/TwoFactorReset 4.16 kB
frontend/dist/typescript 274 B
frontend/dist/typespec 2.86 kB
frontend/dist/Unsubscribe 1.8 kB
frontend/dist/UserInterview 4.68 kB
frontend/dist/UserInterviews 2.16 kB
frontend/dist/vb 5.83 kB
frontend/dist/VercelConnect 5.13 kB
frontend/dist/VercelLinkError 2.4 kB
frontend/dist/VerifyEmail 4.92 kB
frontend/dist/vimMode 211 kB
frontend/dist/VisualReviewIndexScene 2.35 kB
frontend/dist/VisualReviewRunScene 42.5 kB
frontend/dist/VisualReviewRunsScene 7.11 kB
frontend/dist/VisualReviewSettingsScene 10.9 kB
frontend/dist/VisualReviewSnapshotHistoryScene 8.23 kB
frontend/dist/VisualReviewSnapshotOverviewScene 17.4 kB
frontend/dist/web-vitals.js 6.39 kB
frontend/dist/WebAnalyticsScene 5.91 kB
frontend/dist/WebGLRenderer-DYjOwNoG 60.4 kB
frontend/dist/WebGPURenderer-B_wkl_Ja 36.3 kB
frontend/dist/WebScriptsScene 2.68 kB
frontend/dist/webworkerAll-puPV1rBA 397 B
frontend/dist/wgsl 7.38 kB
frontend/dist/Wizard 4.59 kB
frontend/dist/WorkflowScene 109 kB
frontend/dist/WorkflowsScene 58.5 kB
frontend/dist/WorldMap 4.91 kB
frontend/dist/xml 3.02 kB
frontend/dist/yaml 4.64 kB

compressed-size-action

@tests-posthog

tests-posthog Bot commented May 5, 2026

Copy link
Copy Markdown
Contributor

⏭️ Skipped snapshot commit because branch advanced to e2c2108 while workflow was testing 4471093.

The new commit will trigger its own snapshot update workflow.

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

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

Generated-By: PostHog Code
Task-Id: 77ffbb16-3a1a-482a-9af0-8c8c563fb8d8
@jonathanlab
jonathanlab merged commit 1172a80 into master May 5, 2026
220 checks passed
@jonathanlab
jonathanlab deleted the feat/tasks-summarize-endpoint branch May 5, 2026 15:30
@deployment-status-posthog

deployment-status-posthog Bot commented May 5, 2026 •

Copy link
Copy Markdown

Deploy status

Environment Status Deployed At Workflow
dev ✅ Deployed 2026-05-05 15:59 UTC Run
prod-us ✅ Deployed 2026-05-05 16:15 UTC Run
prod-eu ✅ Deployed 2026-05-05 16:20 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