Repository navigation
feat(error-tracking): show $screen views in the session timeline - #88072
posthog[bot] wants to merge 2 commits into
Conversation
Mobile-app users saw a near-empty session timeline next to their errors, because the combined event query dropped every `$`-prefixed event except `$exception` and `$pageview`. `$screen` had no case, so mobile navigation context was lost. Add `$screen` to the timeline event query, classify it as a new SCREEN_VIEWS category, and register it with its own renderer so users can see and toggle screen views alongside page views. Generated-By: PostHog Desktop Task-Id: 61010af9-abc6-4893-92b3-161f101c4fe9
|
Merging to
After your PR is submitted to the merge queue, this comment will be automatically updated with its status. If the PR fails, failure details will also be posted here |
🤖 CI report✅ Trunk lane — non-backend laneThis PR is assigned to the non-backend lane. It does not run backend Python tests and may merge in parallel with PRs in other lanes.
|
| Root | Eager (shipped) | Δ vs base | Budget |
|---|---|---|---|
entry (logged-out pages, app bootstrap)src/index.tsx |
1.36 MiB · 22 files | no change | ███░░░░░░░ 30.2% of 4.51 MiB |
authenticated shell (every logged-in page)src/scenes/AuthenticatedShell.tsx |
8.75 MiB · 3,234 files | no change | █████████░ 90.1% of 9.71 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 |
|---|---|
| 304.7 KiB | ../node_modules/.pnpm/posthog-js@1.418.5/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 |
| 250.7 KiB | ../node_modules/.pnpm/posthog-js@1.418.5/node_modules/posthog-js/dist/module.js |
| 246.9 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 154.2 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 |
| 104.6 KiB | src/lib/api.ts |
| 95.1 KiB | ../packages/quill/packages/quill/dist/index.js |
| 93.3 KiB | ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js |
| 90.6 KiB | ../node_modules/.pnpm/@tiptap+core@3.20.6_@tiptap+pm@3.20.6/node_modules/@tiptap/core/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
✅ Toolbar bundle — eager 2.24 MiB within budget
What the toolbar ships to customer pages, measured from the esbuild output (minified, post-tree-shake). The eager set is the entry plus everything statically imported from it — fetched before any feature runs; deferred chunks load lazily. The eager guardrail is 5.72 MiB. Each output file must also stay below 10 MB, where CloudFront stops compressing it. The module boundary is enforced separately by check-toolbar-graph.
| Metric | Size | Δ vs base | Budget |
|---|---|---|---|
| Eager (shipped) entry + static imports |
2.24 MiB · 17 files | no change | ████░░░░░░ 39.1% of 5.72 MiB |
| Deferred (lazy) | 2.10 MiB · 33 files | no change | n/a — loads on demand |
Loader dist/toolbar.js |
1.1 KiB | no change | █░░░░░░░░░ 5.8% of 19.5 KiB |
Largest eagerly-shipped chunks
| Size | File |
|---|---|
| 743.7 KiB | dist/toolbar/toolbar-app-JPKTOXYM.css |
| 575.0 KiB | dist/toolbar/chunk-chunk-U2WM55RP.js |
| 484.6 KiB | dist/toolbar/chunk-chunk-F4LOU7PS.js |
| 133.8 KiB | dist/toolbar/chunk-chunk-GBKQCJHN.js |
| 131.8 KiB | dist/toolbar/chunk-chunk-T5KY5WYR.js |
| 71.2 KiB | dist/toolbar/toolbar-app-BPGV2DB7.js |
| 69.0 KiB | dist/toolbar/chunk-chunk-27JL52RE.js |
| 35.6 KiB | dist/toolbar/chunk-chunk-KKB52Z7J.js |
| 20.9 KiB | dist/toolbar/chunk-chunk-LTL22R5B.js |
| 12.2 KiB | dist/toolbar/chunk-chunk-PIK3PADE.js |
Posted automatically by check-toolbar-size · sizes are toolbar output bytes (shipped, post-tree-shake) from the esbuild metafile
✅ Dist folder size — 🔺 +18.5 KiB (+0.0%)
Total size of the built frontend/dist folder (all assets), compared against the base branch.
Total: 1464.01 MiB · 🔺 +18.5 KiB (+0.0%)
There was a problem hiding this comment.
Contained, additive frontend feature (new $screen event category in the session timeline) with no touch to data models, APIs, auth, billing, or CI; the query/row-parsing changes are mechanical and internally consistent, so no independent assurance is required outside risky territory.
Gate mechanics and policy version
| Gate | Result | |
|---|---|---|
| prerequisites | ✓ | all clear |
| deny-list | ✓ | no deny categories matched |
| size | ✓ | 81L, 7F substantive — within ceiling |
| tier | ✓ | T1-agent / T1c-medium (81L, 7F, two-areas, feat) |
| stamphog 2.0.0b4 | .stamphog/policy.yml @ 0276ee2 · reviewed head 0276ee2 |
|
👋 Visual changes detected for this PR. Review and approve in PostHog Visual Review If these changes are unexpected, they may be caused by a flaky test or a broken snapshot on master. Don't approve — rerun the job or wait for a fix. |
Drop the screen category from the shared default Storybook story so no committed visual snapshots change. The new SCREEN_VIEWS category still compiles into the story's exhaustive records, but no story renders it, so the timeline reference images stay identical. Generated-By: PostHog Desktop Task-Id: 61010af9-abc6-4893-92b3-161f101c4fe9
A new stamphog review started for this PR — the fresh verdict replaces this approval.
There was a problem hiding this comment.
Small, additive, purely frontend UI feature (new timeline category for mobile screen views) with no schema, API, auth, billing, or CI/dependency changes — outside risky territory, so no independent review is required, and the diff matches the stated description.
Gate mechanics and policy version
| Gate | Result | |
|---|---|---|
| prerequisites | ✓ | all clear |
| deny-list | ✓ | no deny categories matched |
| size | ✓ | 80L, 7F substantive — within ceiling |
| tier | ✓ | T1-agent / T1c-medium (80L, 7F, two-areas, feat) |
| stamphog 2.0.0b4 | .stamphog/policy.yml @ 9834aef · reviewed head 9834aef |
|
This PR hasn't seen activity in a week! Should it be merged, closed, or further worked on? If you want to keep it open, please remove the |
|
This PR was closed due to lack of activity. Feel free to reopen if it's still relevant. |

Problem
$exception,$pageview, and non-$custom events, dropping every other$-prefixed event.$screenhad no case, and there was no screen-view category to render or toggle.Changes
$screenevents now appear in the session timeline as their own Screens category, with a phone icon, showing the screen name — toggleable like page views.$screento the timeline event query and pull$screen_name; classify matching rows into a newSCREEN_VIEWScategory (mechanical).screenRendererin the error tracking session tab, and add its label, tooltip, and event-detail query cases (mechanical).How did you test this code?
Components/SessionTimelineStorybook story headlessly and confirmed screen-view rows now interleave with page views, exceptions, custom events, and console logs. The screenshot above is that story with synthetic mock data.tsgo --noEmit: no errors in the touched files. Remaining repo errors come from unbuilt@posthog/hogvmworkspace modules unrelated to this change.Automatic notifications
Docs update
None.
🤖 Agent context
Autonomy: Fully autonomous
Authored by an agent (Claude Code). Skills invoked:
/writing-ui-components,/writing-pr-descriptions,/writing-simplified-technical-english.The screen renderer mirrors the existing page and custom renderers, and the loader shares one query instance across all event categories, so
$screenneeded only a new column, awhereclause term, and a classification branch. The category then flows automatically into the timeline's toggle controls, which derive from the collector's registered categories.Created with PostHog Desktop from this inbox report.