feat(tasks): expose resume-chain presigned log urls on run detail - #71394
feat(tasks): expose resume-chain presigned log urls on run detail#71394charlesvien wants to merge 3 commits into
Conversation
🤖 CI report
|
| Root | Eager (shipped) | Δ vs base | Budget |
|---|---|---|---|
entry (logged-out pages, app bootstrap)src/index.tsx |
1.22 MiB · 22 files | no change | ███░░░░░░░ 28.4% of 4.29 MiB |
authenticated shell (every logged-in page)src/scenes/AuthenticatedShell.tsx |
8.13 MiB · 2,978 files | 🔺 +30 B (+0.0%) | █████████░ 87.9% of 9.25 MiB |
🟢 node_modules/monaco-editor/ stays out of src/index.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/index.tsx
🟢 [object Object] stays out of src/index.tsx
🟢 [object Object] stays out of src/index.tsx
🟢 node_modules/monaco-editor/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
Largest files eagerly shipped from src/index.tsx
| Size | File |
|---|---|
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 24.6 KiB | ../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js |
| 6.3 KiB | ../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js |
| 4.5 KiB | ../node_modules/.pnpm/@jspm+core@2.1.0/node_modules/@jspm/core/nodelibs/browser/process.js |
| 3.9 KiB | ../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js |
| 1.4 KiB | ../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js |
| 1.3 KiB | src/RootErrorBoundary.tsx |
| 912 B | ../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js |
| 789 B | src/scenes/ChunkLoadErrorBoundary.tsx |
| 762 B | src/index.tsx |
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
| Size | File |
|---|---|
| 281.3 KiB | ../node_modules/.pnpm/posthog-js@1.402.3/node_modules/posthog-js/dist/rrweb.js |
| 267.7 KiB | ../node_modules/.pnpm/@posthog+icons@0.38.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js |
| 235.5 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 222.9 KiB | ../node_modules/.pnpm/posthog-js@1.402.3/node_modules/posthog-js/dist/module.js |
| 164.0 KiB | src/queries/validators.js |
| 154.3 KiB | ../node_modules/.pnpm/re2js@0.4.1/node_modules/re2js/build/index.esm.js |
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 105.8 KiB | src/lib/api.ts |
| 93.3 KiB | ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js |
| 92.7 KiB | ../packages/quill/packages/quill/dist/index.js |
Posted automatically by check-eager-graph · sizes are eager output bytes (shipped, post-tree-shake) from the esbuild metafile · part of #32479
✅ Dist folder size — 🔺 +131.0 KiB (+0.0%)
Total size of the built frontend/dist folder (all assets), compared against the base branch.
Total: 1312.62 MiB · 🔺 +131.0 KiB (+0.0%)
|
Reviews (1): Last reviewed commit: "Merge remote-tracking branch 'origin/mas..." | Re-trigger Greptile |
Problem
Clients bootstrap a task run's session history through the paginated
session_logs/endpoint. Every page re-downloads the run's entire log chain from S3 and re-parses every JSONL line just to slice out ~2 MB, so one cold load of a run with N bytes of history costs O(N²). Once a single page crosses the client's fetch timeout, the run becomes unloadable: retry restarts at offset 0 and dies the same way.The run detail response already exposes a presigned
log_url, but only for the run's own log, not its resume ancestors, so clients can't fetch the full history from object storage directly.Changes
log_urlsto the run detail response: presigned S3 URLs for every JSONL log in the run's resume chain, oldest first, cached the same way aslog_url.session_logs/.The PostHog Code client prefers downloading history straight from these URLs and keeps the paginated endpoint as fallback (PostHog/code#3489), which also preserves compatibility for old clients.
How did you test this code?
Added API tests to
TestTaskRunAPI: a chainless run returns exactly its own presigned log URL, a resumed run returns the chain oldest first, and presigning being unavailable yields an empty list instead of a 500. All three pass locally viahogli test.ruffandhogli ci:preflight --fixare clean. I did not test against a live deployment.Automatic notifications
Docs update
N/A
🤖 Agent context
Autonomy: Human-driven (agent-assisted)
Authored by Claude Code (directed by @charlesvien) while debugging why very long-running cloud task runs fail to load their history in PostHog Code. The investigation traced the failure to
session_logsdoing a full chain read and full JSONL parse per page. We chose presigned chain URLs over byte-cursor ranged pagination in the endpoint because the presignedlog_urlpattern already exists on run detail and this removes Django from the history byte path entirely. A follow-up should address theappend_logfull read-modify-write on the write path. Skills used:/improving-drf-endpointsand/writing-tests(read as repo skill files).