fix(aio): guard against null summarization response in summary view - #71085
Conversation
The trace summary loader read `data.summary` directly off the summarization API response. When the endpoint resolves to an empty body, this threw a TypeError. Guard the response before reading its fields so a missing summary surfaces as a normal loader failure. Generated-By: PostHog Code Task-Id: e8cd5716-c75f-4d35-bc0f-96895893fc0e
|
Hey @Radu-Raicea! 👋 It looks like your git author email on this PR isn't your
You can fix it for this repo with: git config user.email "you@posthog.com"Or set it globally with |
🦔 Hogbox preview · ✅ ready▶ Open the preview
commit |
|
Reviews (1): Last reviewed commit: "fix(aio): guard against null summarizati..." | Re-trigger Greptile |
There was a problem hiding this comment.
Trivial 6-line null-guard fix in one file, author is on the owning team, no risky territory involved.
- 👍 on the PR from greptile-apps[bot], hex-security-app[bot].
Gate mechanics and policy version
| Gate | Result | |
|---|---|---|
| prerequisites | ✓ | all clear |
| deny-list | ✓ | no deny categories matched |
| size | ✓ | 6L, 1F substantive — within ceiling |
| tier | ✓ | T1-agent / T1a-trivial (6L, 1F, single-area, fix) |
| stamphog 2.0.0b3 | .stamphog/policy.yml @ 90ad2ce · reviewed head 1f4247c |
🤖 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.15 MiB · 2,979 files | no change | █████████░ 88.1% 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.1 KiB | ../node_modules/.pnpm/posthog-js@1.401.0/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.7 KiB | ../node_modules/.pnpm/posthog-js@1.401.0/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 |
| 106.1 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 — 🔺 +460 B (+0.0%)
Total size of the built frontend/dist folder (all assets), compared against the base branch.
Total: 1308.72 MiB · 🔺 +460 B (+0.0%)
Problem
The AI observability trace summary view threw an uncaught
TypeError: Cannot read properties of null (reading 'summary')fromsummaryViewLogic.ts. ThegenerateSummaryloader called the summarization endpoint and readdata.summarydirectly. When the endpoint resolves to an empty/null body (for example when no summary is available yet), that dereference blew up. Surfaced by an error tracking alert.Changes
Guard the response before reading its fields. If the body is missing or has no
summary, the loader now throws a clear "No summary available for this trace yet" error, which the kea loader captures as a normal failure state instead of a null dereference.How did you test this code?
No automated test added — this is a one-line defensive guard in a kea loader. I (the agent) did not run the frontend manually. The change is type-safe against the existing
{ summary, text_repr } | nullloader default.Docs update
No docs affected.
🤖 Agent context
Autonomy: Human-driven (agent-assisted)
Investigated the error tracking issue from a Slack thread using the PostHog MCP tools (
query-error-tracking-issues-list,query-error-tracking-issue-events) and theinvestigating-error-issueskill. The single sample event pointed atsummaryViewLogic.ts:150wheredata.summarywas read without a null check. Chose a minimal guard over a broader refactor since the loader already models a nullable result.Created with PostHog from a Slack thread