Skip to content

feat(error-tracking): show $screen views in the session timeline - #88072

Closed
posthog[bot] wants to merge 2 commits into
masterfrom
posthog-self-driving/featerror-tracking-show-mobile-screen-d40189
Closed

posthog[bot] wants to merge 2 commits into
masterfrom
posthog-self-driving/featerror-tracking-show-mobile-screen-d40189

Conversation

@posthog

@posthog posthog Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Problem

  • Mobile-app users using error tracking saw a near-empty session timeline next to their errors. Web users got page-view navigation context around a crash; mobile users got exceptions, console logs, and custom events with no record of which screen the user was on.
  • The combined event query kept only $exception, $pageview, and non-$ custom events, dropping every other $-prefixed event. $screen had no case, and there was no screen-view category to render or toggle.

Changes

  • Mobile $screen events now appear in the session timeline as their own Screens category, with a phone icon, showing the screen name — toggleable like page views.
  • Add $screen to the timeline event query and pull $screen_name; classify matching rows into a new SCREEN_VIEWS category (mechanical).
  • Register the category with a screenRenderer in the error tracking session tab, and add its label, tooltip, and event-detail query cases (mechanical).

session-timeline-screens

How did you test this code?

  • Rendered the Components/SessionTimeline Storybook 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.
  • Ran tsgo --noEmit: no errors in the touched files. Remaining repo errors come from unbuilt @posthog/hogvm workspace modules unrelated to this change.
  • No new automated tests: the combined loader has no existing unit-test harness, and the symptom is visual, verified through Storybook above.

Automatic notifications

  • Publish to changelog?

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 $screen needed only a new column, a where clause 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.

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
@trunk-io

trunk-io Bot commented Aug 24, 2026

Copy link
Copy Markdown

Merging to master in this repository is managed by Trunk.

  • To merge this pull request, check the box to the left or comment /trunk merge below.

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

@posthog

posthog Bot commented Aug 24, 2026 •

Copy link
Copy Markdown
Contributor Author

🦔 ReviewHog reviewed this pull request

Nothing worth raising this time, so here's a calming picture instead:

A panda relaxing and waving

@github-actions

github-actions Bot commented Aug 24, 2026 •

Copy link
Copy Markdown
Contributor

🤖 CI report

✅ Trunk lane — non-backend lane

This 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.

⚠️ Bundle size — 🔺 +1.4 KiB (+0.0%)

Uncompressed size of every built .js bundle, compared against the base branch.

Total: 68.75 MiB · 🔺 +1.4 KiB (+0.0%)

No file changed by more than 1000 B.

Posted automatically by build-bundle-size-report · uncompressed bytes from dist-report

✅ Eager graph — within budget

How much code each root ships on the eager path — downloaded and parsed before the surface is interactive. Measured from the esbuild output chunks (post-tree-shake, static imports only); lazy import() / React.lazy chunks are not counted.

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%)

stamphog[bot]
stamphog Bot previously approved these changes Aug 24, 2026

@stamphog stamphog Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

@posthog

posthog Bot commented Aug 24, 2026 •

Copy link
Copy Markdown
Contributor Author

👋 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
@stamphog
stamphog Bot dismissed their stale review August 24, 2026 19:41

A new stamphog review started for this PR — the fresh verdict replaces this approval.

@trunk-io

trunk-io Bot commented Aug 24, 2026 •

Copy link
Copy Markdown

Static Badge   Static Badge   Static Badge

View Full Report ↗︎ ⋅ Docs

@stamphog stamphog Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

@scheduled-actions-posthog

Copy link
Copy Markdown
Contributor

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 stale label – otherwise this will be closed in another week. If you want to permanently keep it open, use the waiting label.

@scheduled-actions-posthog

Copy link
Copy Markdown
Contributor

This PR was closed due to lack of activity. Feel free to reopen if it's still relevant.

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants