Skip to content

feat(signals): record personal ranking readiness on inbox viewed - #134845

Merged
trunk-io[bot] merged 1 commit into
masterfrom
posthog/inbox-viewed-personal-ranking-status
Nov 12, 2026
Merged

trunk-io[bot] merged 1 commit into
masterfrom
posthog/inbox-viewed-personal-ranking-status

Conversation

@posthog

@posthog posthog Bot commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

Problem

  • Product analytics cannot tell whether a person had a personal ranking ready when they opened the inbox, or had anything to rank.

Closes #134818

Origin

  • Issues: #134818
  • Scout: a custom scout
  • First signal: 2026-11-12
  • Inbox report: open
  • Task started by: a person, from the inbox

Changes

  • Nothing a person sees changes.
  • The first report-list page returns the viewer's own personal_ranking_status, for every sort and with scope=teammate.
  • The read never queues a build. Later pages and flag-off viewers get null.
  • Inbox viewed adds five personal_list_* properties, for_you_report_count, sort_field and ranker_id.
  • for_you_report_count reuses the counts the event already sums. It is null outside the viewer's own scope or with filters.

How did you test this code?

Test rationale: New cases cover each state, teammate scope, later pages, flag off, the event wiring, and one added query (28 to 29).

  • Not run: the full frontend typecheck, because the sandbox lacks a built @posthog/quill.
  • CI report, comment density: each added comment states a null case or a reason the code cannot show, so none were removed.

Release status

  • No feature flag controls this change

Docs update

  • None.

🤖 Agent context

Autonomy: Fully autonomous

Agent: Claude Code, Claude Opus 5.5 (claude-opus-5-5)

Skills: /improving-drf-endpoints, /adopting-generated-api-types, /writing-tests, /writing-code-comments, /writing-pr-descriptions

Security review: not needed

More context for AI agents
  • Session: PostHog Desktop task from a Self-driving inbox report, Claude Code with the PostHog MCP.
  • Decisions: The status reads the latest row of any status, as serve.py does, so a newer fallback row reports fallback even when an older personalized row still orders sort=personal.
  • Decisions: size counts ranked plus folded reports, the same set personal_list_order orders.
  • Decisions: No duplicate PR found for feat(signals): record personal ranking readiness on Inbox viewed #134818.
  • Follow-ups: A dedicated For you count for auto-switched views, if analysis needs it. The desktop app's Inbox viewed.
  • Read closely: personal_ranking_state in list_sort.py, and the served pick in ReportsTab.tsx.

Created with PostHog Desktop from an inbox report

🤖 Generated with Claude Code

The first page of the report list now returns the viewer's own personal_ranking_status for every sort, read from the latest stored ranking row with one indexed query and never starting a build. Later pages and flag-off viewers get null.

Inbox viewed now carries personal_list_state, size, age, checked age and fallback reason from that status, plus for_you_report_count, sort_field and ranker_id.

Refs #134818

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Generated-By: PostHog Desktop
Task-Id: 17205fb1-b95c-40f9-b271-9eea49702af5
@posthog posthog Bot added the self-driving label Nov 12, 2026
@posthog
posthog Bot marked this pull request as ready for review November 12, 2026 17:33
@trunk-io

trunk-io Bot commented Nov 12, 2026 •

Copy link
Copy Markdown

😎 Merged successfully - details.

@stamphog
stamphog Bot requested a review from a team November 12, 2026 17:33
@posthog
posthog Bot requested a review from andrewm4894 November 12, 2026 17:33
@parameterai

parameterai Bot commented Nov 12, 2026 •

Copy link
Copy Markdown

Risk: No findings

The change adds a read-only personal_ranking_status field to the first page of the signals report list, plus Inbox viewed analytics properties carrying that status, the For-you count, sort and ranker. The status is strictly the caller's own stored ranking, read with one team- and user-scoped query that never queues a build, so it introduces no new trust boundary.

Sentinel reviewed 97c5967 · Review settings

@github-actions

github-actions Bot commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

🤖 CI report

⚠️ Trunk lane — backend Python lane

This PR is assigned to the backend Python lane. It runs backend Python tests and may merge in parallel with PRs in other lanes.

⚠️ Complexity (TypeScript) — 1 function above the limit (max 35)

Cyclomatic complexity above the limit in changed typescript files (10 for production files, 15 for test files). Warn only: worth simplifying when you next touch these functions.

Function Location Complexity Limit
ReportsTab products/signals/frontend/inbox/components/tabs/ReportsTab.tsx:261 35 10
✅ Duplication (Python) — clean

New Python code duplication introduced by this branch. Fails at 70+ tokens in app code, or 150+ tokens when both copies live in test files. Advisory while the gate proves itself: extract a shared helper instead of copying.

✅ Duplication (TypeScript) — clean

New TypeScript code duplication introduced by this branch. Fails at 70+ tokens in app code, or 150+ tokens when both copies live in test files. Advisory while the gate proves itself: extract a shared helper instead of copying.

⚠️ Comment density — 3% of added code lines are comments (11 of 316)

This section warns when comments are more than 3% of the code lines a PR adds, and alerts above 6%. Before agent-assisted PRs, the typical share was about 2%. Only full-line comments count. Docstrings, generated files, snapshots, migrations, and workflow files are left out.

Comments that restate the code, record how the change came about, or narrate the next line add noise for the next reader. Keep the comments that explain a reason the code cannot show, and remove the rest. See .agents/skills/writing-code-comments/SKILL.md for the house rules.

Files with the most added comment lines:

File Comment lines Added lines
products/signals/frontend/inbox/inboxAnalytics.ts 3 20
products/signals/backend/personal_ranking/list_sort.py 2 57
products/signals/frontend/inbox/components/tabs/ReportsTab.tsx 2 31
products/signals/frontend/inbox/logics/reportListLogic.ts 2 14
products/signals/backend/views.py 1 66
products/signals/frontend/inbox/components/tabs/ReportsTab.test.tsx 1 48

This check does not block merging. It updates on every push and clears when the share drops.

⚠️ Bundle size — 🔺 +374 B (+0.0%)

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

Total: 79.48 MiB · 🔺 +374 B (+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.05 MiB · 25 files no change █████████░ 91.7% of 1.14 MiB
logged-out boot: index + App + bootApp (preloaded by every page, including /login)
src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
2.87 MiB · 538 files no change ██████████ 99.1% of 2.89 MiB
authenticated shell (every logged-in page)
src/scenes/AuthenticatedShell.tsx
3.89 MiB · 1,237 files no change ██████████ 99.5% of 3.91 MiB
dashboard scene
src/scenes/dashboard/Dashboard.tsx
7.86 MiB · 3,042 files no change ██████████ 99.3% of 7.92 MiB
today home path
src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
4.88 MiB · 1,872 files 🔺 +348 B (+0.0%) ██████████ 100.0% of 4.88 MiB
AI-first home path
src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
6.11 MiB · 2,297 files 🔺 +348 B (+0.0%) ██████████ 99.6% of 6.13 MiB
events scene
src/scenes/activity/explore/EventsScene.tsx
6.83 MiB · 2,568 files no change ██████████ 98.9% of 6.91 MiB
web analytics scene
src/scenes/web-analytics/WebAnalyticsScene.tsx
7.92 MiB · 2,973 files no change ██████████ 99.6% of 7.96 MiB
replay detail scene
src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
7.01 MiB · 2,622 files no change ██████████ 98.9% of 7.09 MiB

🟢 node_modules/monaco-editor/ stays out of src/index.tsx
🟢 products/product_analytics/frontend/insights/activityDescriptions stays out of src/index.tsx
🟢 node_modules/@posthog/brand/dist/generated/hoggies/svg/ stays out of src/index.tsx
🟢 node_modules/@posthog/brand/dist/generated/hoggies/components/ stays out of src/index.tsx
🟢 node_modules/monaco-editor/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/lemon-ui/LemonTable/LemonTable.tsx stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 node_modules/@dnd-kit/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/layout/navigation-3000/navigationLogic.tsx stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/scenes/dashboard/dashboardLogic.tsx stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/lemon-ui/LemonMarkdown/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/components/RichContentEditor/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/components/CodeSnippet/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/taxonomy/core-filter-definitions-by-group.json stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 node_modules/zod/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/logic/billing/billingLogic.tsx stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/components/ProductEmptyState/productSetupPreloadLogic.ts stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 node_modules/kea-test-utils/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 node_modules/monaco-editor/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 products/product_analytics/frontend/insights/activityDescriptions stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/kea-test-utils/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 products/dashboards/frontend/widgets/previews/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/session-recordings/player/sessionRecordingPlayerLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/panel-layout/ProjectTree/menus/SessionReplayMenuItems.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/taxonomy/core-filter-definitions-by-group.json stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/navigation/projectNoticeLogic.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/navigation/ImpersonationNotice/ImpersonationNotice.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/cohorts/cohortSavedToast.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 products/wizard/frontend/runs/WizardRunDetailsDrawer.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/today/TodayShell.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/today/TodayContextPanelFloating.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/today/TodaySidePanel.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/today/TodayTopBar.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/today/todayRailItems.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 products/subscriptions/frontend/components/Subscriptions/exportNudge/exportNudgeLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/billing/paymentEntryLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 products/conversations/frontend/components/SidePanel/sidepanelTicketsLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/zod/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/authentication/auth/loginLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/authentication/shared/passkeyLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/cohorts/CohortFilters/constants.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 products/persons/frontend/logics/personsLogic.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/surveys/constants.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/@tiptap/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/prosemirror- stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/re2js/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/react-markdown/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/lib/components/Command/Command.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 packages/quill/packages/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 zod/v4/locales/de.js stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/@posthog/brand/dist/generated/hoggies/svg/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/@posthog/brand/dist/generated/hoggies/components/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 packages/quill/packages/quill/dist/ stays out of src/scenes/dashboard/Dashboard.tsx
🟢 node_modules/@tiptap/ stays out of src/scenes/dashboard/Dashboard.tsx
🟢 node_modules/prosemirror- stays out of src/scenes/dashboard/Dashboard.tsx
🟢 node_modules/marked/ stays out of src/scenes/dashboard/Dashboard.tsx
🟢 node_modules/frimousse/ stays out of src/scenes/dashboard/Dashboard.tsx
🟢 src/scenes/session-recordings/playlist/SessionRecordingsPlaylist.tsx stays out of src/scenes/dashboard/Dashboard.tsx
🟢 src/scenes/web-analytics/tiles/WebAnalyticsTile.tsx stays out of src/scenes/dashboard/Dashboard.tsx
🟢 src/queries/validators.js stays out of src/scenes/dashboard/Dashboard.tsx
🟢 src/queries/web-analytics-validators.js stays out of src/scenes/dashboard/Dashboard.tsx
🟢 node_modules/re2js/ stays out of src/scenes/dashboard/Dashboard.tsx
🟢 node_modules/kea-test-utils/ stays out of src/scenes/dashboard/Dashboard.tsx
🟢 src/scenes/debug/HogDebug.tsx stays out of src/scenes/dashboard/Dashboard.tsx
🟢 src/queries/QueryEditor/QueryEditor.tsx stays out of src/scenes/dashboard/Dashboard.tsx
🟢 packages/quill/packages/quill/dist/ stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
🟢 src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
🟢 src/scenes/project-homepage/today/TodayReportPage.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
🟢 src/queries/Query/Query.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
🟢 packages/quill/packages/charts/ stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
🟢 packages/quill/packages/quill/dist/ stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
🟢 products/posthog_ai/frontend/components/tool/widgets/VisualizationWidget.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
🟢 products/posthog_ai/frontend/components/tool/widgets/RecordingsWidget.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
🟢 src/queries/Query/Query.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
🟢 products/posthog_ai/frontend/api/primitives.ts stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
🟢 src/scenes/notebooks/Notebook/notebookLogic.ts stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
🟢 packages/quill/packages/quill/dist/ stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 node_modules/@tiptap/ stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 node_modules/prosemirror- stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 node_modules/marked/ stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 node_modules/frimousse/ stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/scenes/session-recordings/playlist/SessionRecordingsPlaylist.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/scenes/web-analytics/tiles/WebAnalyticsTile.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/queries/validators.js stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/queries/web-analytics-validators.js stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 node_modules/re2js/ stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 node_modules/kea-test-utils/ stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/queries/nodes/InsightViz/InsightViz.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/queries/nodes/DataVisualization/DataVisualization.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/queries/nodes/WebOverview/WebOverview.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/scenes/debug/HogDebug.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/queries/QueryEditor/QueryEditor.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 packages/quill/packages/quill/dist/ stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 node_modules/@tiptap/ stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 node_modules/prosemirror- stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 node_modules/marked/ stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 node_modules/frimousse/ stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 src/scenes/web-analytics/LiveMetricsDashboard/LiveWebAnalyticsMetrics.tsx stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 products/product_analytics/frontend/insights/trends/WorldMap/countryVectors.tsx stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 src/queries/validators.js stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 node_modules/re2js/ stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 node_modules/kea-test-utils/ stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 src/scenes/debug/HogDebug.tsx stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 src/queries/QueryEditor/QueryEditor.tsx stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 packages/quill/packages/quill/dist/ stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 node_modules/@tiptap/ stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 node_modules/prosemirror- stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 node_modules/marked/ stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 src/scenes/settings/SettingsMap.tsx stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 @jspm/core/nodelibs/browser/fs stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 node_modules/re2js/ stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 node_modules/kea-test-utils/ stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 node_modules/d3/src/ stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.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.7 KiB ../node_modules/.pnpm/@jspm+core@2.1.0/node_modules/@jspm/core/nodelibs/browser/process.js
4.0 KiB ../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js
1.8 KiB src/lib/utils/bootTiming.ts
1.7 KiB ../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js
1.7 KiB src/index.tsx
1.2 KiB src/RootErrorBoundary.tsx
1.1 KiB src/lib/utils/deferredAppContext.ts
Largest files eagerly shipped from src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
Size File
363.5 KiB ../node_modules/.pnpm/posthog-js@1.447.13_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.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
108.1 KiB src/products.tsx
93.2 KiB src/lib/api.ts
69.0 KiB src/lib/lemon-ui/icons/icons.tsx
36.4 KiB ../node_modules/.pnpm/kea@4.0.0-pre.6_patch_hash=139b8d1f1304f9d9da452a9a1244c94ea679dbcb85687d8999563146879fb6f5_react@18.3.1/node_modules/kea/lib/index.cjs.js
29.4 KiB src/lib/constants.tsx
24.8 KiB ../node_modules/.pnpm/fuse.js@7.3.0/node_modules/fuse.js/dist/fuse.mjs
24.6 KiB ../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
Size File
363.5 KiB ../node_modules/.pnpm/posthog-js@1.447.13_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.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
108.1 KiB src/products.tsx
93.2 KiB src/lib/api.ts
69.0 KiB src/lib/lemon-ui/icons/icons.tsx
40.3 KiB ../node_modules/.pnpm/@dnd-kit+core@6.3.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@dnd-kit/core/dist/core.esm.js
36.4 KiB ../node_modules/.pnpm/kea@4.0.0-pre.6_patch_hash=139b8d1f1304f9d9da452a9a1244c94ea679dbcb85687d8999563146879fb6f5_react@18.3.1/node_modules/kea/lib/index.cjs.js
32.6 KiB src/lib/utils/eventUsageLogic.ts
29.4 KiB src/lib/constants.tsx
Largest files eagerly shipped from src/scenes/dashboard/Dashboard.tsx
Size File
363.5 KiB ../node_modules/.pnpm/posthog-js@1.447.13_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.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
116.4 KiB ../node_modules/.pnpm/posthog-js@1.447.13_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/surveys-preview.js
112.7 KiB ../packages/quill/packages/primitives/dist/index.js
108.1 KiB src/products.tsx
98.3 KiB ../packages/quill/packages/components/dist/index.js
93.2 KiB src/lib/api.ts
78.9 KiB src/scenes/dashboard/dashboardLogic.tsx
69.0 KiB src/lib/lemon-ui/icons/icons.tsx
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
Size File
363.5 KiB ../node_modules/.pnpm/posthog-js@1.447.13_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.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
112.7 KiB ../packages/quill/packages/primitives/dist/index.js
108.1 KiB src/products.tsx
93.2 KiB src/lib/api.ts
69.0 KiB src/lib/lemon-ui/icons/icons.tsx
68.5 KiB ../products/posthog_ai/frontend/logics/runStreamLogic.ts
40.3 KiB ../node_modules/.pnpm/@dnd-kit+core@6.3.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@dnd-kit/core/dist/core.esm.js
36.4 KiB ../node_modules/.pnpm/kea@4.0.0-pre.6_patch_hash=139b8d1f1304f9d9da452a9a1244c94ea679dbcb85687d8999563146879fb6f5_react@18.3.1/node_modules/kea/lib/index.cjs.js
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
Size File
363.5 KiB ../node_modules/.pnpm/posthog-js@1.447.13_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.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
112.7 KiB ../packages/quill/packages/primitives/dist/index.js
108.1 KiB src/products.tsx
93.2 KiB src/lib/api.ts
69.0 KiB src/lib/lemon-ui/icons/icons.tsx
68.5 KiB ../products/posthog_ai/frontend/logics/runStreamLogic.ts
41.7 KiB src/scenes/hog-functions/sub-templates/sub-templates.ts
40.3 KiB ../node_modules/.pnpm/@dnd-kit+core@6.3.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@dnd-kit/core/dist/core.esm.js
Largest files eagerly shipped from src/scenes/activity/explore/EventsScene.tsx
Size File
363.5 KiB ../node_modules/.pnpm/posthog-js@1.447.13_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.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
112.7 KiB ../packages/quill/packages/primitives/dist/index.js
108.1 KiB src/products.tsx
98.3 KiB ../packages/quill/packages/components/dist/index.js
93.2 KiB src/lib/api.ts
78.9 KiB src/scenes/dashboard/dashboardLogic.tsx
69.0 KiB src/lib/lemon-ui/icons/icons.tsx
68.5 KiB ../products/posthog_ai/frontend/logics/runStreamLogic.ts
Largest files eagerly shipped from src/scenes/web-analytics/WebAnalyticsScene.tsx
Size File
363.5 KiB ../node_modules/.pnpm/posthog-js@1.447.13_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.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
116.4 KiB ../node_modules/.pnpm/posthog-js@1.447.13_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/surveys-preview.js
112.7 KiB ../packages/quill/packages/primitives/dist/index.js
108.1 KiB src/products.tsx
98.3 KiB ../packages/quill/packages/components/dist/index.js
93.2 KiB src/lib/api.ts
78.9 KiB src/scenes/dashboard/dashboardLogic.tsx
69.0 KiB src/lib/lemon-ui/icons/icons.tsx
Largest files eagerly shipped from src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
Size File
363.5 KiB ../node_modules/.pnpm/posthog-js@1.447.13_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/module.mjs
329.8 KiB ../node_modules/.pnpm/posthog-js@1.447.13_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/rrweb.js
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.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
112.7 KiB ../packages/quill/packages/primitives/dist/index.js
108.1 KiB src/products.tsx
98.3 KiB ../packages/quill/packages/components/dist/index.js
93.2 KiB src/lib/api.ts
69.0 KiB src/lib/lemon-ui/icons/icons.tsx
68.5 KiB ../products/posthog_ai/frontend/logics/runStreamLogic.ts

Posted automatically by check-eager-graph · sizes are eager output bytes (shipped, post-tree-shake) from the esbuild metafile · part of #32479

✅ Frontend layers — no new upward imports, 0 removed

Static imports from a lower frontend layer into a higher one (layers, lowest first: kernel, shell, query, features). Compared with the base branch, so an import that a PR also adds to layer-baseline.txt still shows here. Sizes are the source bytes on the eager path of every logged-in page.

Layer Eager source bytes Δ vs base
kernel 3.01 MiB no change
shell 2.42 MiB no change
query 56.9 KiB no change
features 274.3 KiB no change

Download the interactive layer graph for this PR.

Posted automatically by check-layers

✅ Toolbar bundle — eager 2.45 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.45 MiB · 19 files no change ████░░░░░░ 42.9% of 5.72 MiB
Deferred (lazy) 2.64 MiB · 43 files no change n/a — loads on demand
Loader dist/toolbar.js 1.2 KiB no change █░░░░░░░░░ 6.0% of 19.5 KiB
Largest eagerly-shipped chunks
Size File
987.5 KiB dist/toolbar/toolbar-app-EX7SSHH5.css
739.3 KiB dist/toolbar/chunk-chunk-PFFJQBT4.js
290.5 KiB dist/toolbar/chunk-chunk-E2SUTX3R.js
137.6 KiB dist/toolbar/chunk-chunk-IULJRZNM.js
131.8 KiB dist/toolbar/chunk-chunk-FQJO25M6.js
75.7 KiB dist/toolbar/toolbar-app-ASWEJWJW.js
69.0 KiB dist/toolbar/chunk-chunk-BFAXZMC5.js
33.8 KiB dist/toolbar/chunk-chunk-QPDUWEQB.js
21.9 KiB dist/toolbar/chunk-chunk-PBF5VFNQ.js
6.8 KiB dist/toolbar/chunk-chunk-RVLGRPCH.js

Posted automatically by check-toolbar-size · sizes are toolbar output bytes (shipped, post-tree-shake) from the esbuild metafile

✅ Dist folder size — 🔺 +12.3 KiB (+0.0%)

Total size of the built frontend/dist folder (all assets), compared against the base branch.

Total: 1013.71 MiB · 🔺 +12.3 KiB (+0.0%)

ℹ️ MCP UI apps size — 35 app(s), 37013.2 KB JS

Built size of each MCP UI app (main.js + styles.css).

App JS CSS
debug 1067.4 KB 225.2 KB
explain-chart 1351.3 KB 225.2 KB
action 994.6 KB 225.2 KB
action-list 1058.3 KB 225.2 KB
cohort 993.6 KB 225.2 KB
cohort-list 1057.3 KB 225.2 KB
email-template 993.4 KB 225.2 KB
error-details 998.5 KB 225.2 KB
error-issue 995.5 KB 225.2 KB
error-issue-list 1059.5 KB 225.2 KB
experiment 1055.5 KB 225.2 KB
experiment-list 1059.1 KB 225.2 KB
experiment-results 1057.5 KB 225.2 KB
feature-flag 1057.7 KB 225.2 KB
feature-flag-list 1061.5 KB 225.2 KB
feature-flag-testing 996.8 KB 225.2 KB
inline-scan 994.0 KB 225.2 KB
insight-actors 1056.8 KB 225.2 KB
llm-costs 1054.1 KB 225.2 KB
session-recording 995.8 KB 225.2 KB
survey 995.2 KB 225.2 KB
survey-global-stats 1054.2 KB 225.2 KB
survey-list 1059.0 KB 225.2 KB
survey-stats 1054.1 KB 225.2 KB
trace-span 993.9 KB 225.2 KB
trace-span-list 1058.3 KB 225.2 KB
vision-observation-list 1057.4 KB 225.2 KB
workflow 993.9 KB 225.2 KB
workflow-list 1057.7 KB 225.2 KB
workflow-setup-status 993.6 KB 225.2 KB
query-results 1320.7 KB 225.2 KB
render-ui 1427.2 KB 225.2 KB
visual-review-snapshots 998.4 KB 225.2 KB
workflow-data-suggestions 996.2 KB 225.2 KB
workflow-sending-rules 994.9 KB 225.2 KB
⚠️ Playwright — 3 flaky

🎭 Playwright report · View test results →

⚠️ 3 flaky tests:

  • password-protected insight sharing (chromium)
  • Delete a person property (chromium)
  • Remove an insight from a notebook and verify text persists (chromium)

These issues are not necessarily caused by your changes.
Annoyed by this section? Help fix flakies and failures and it will go green!

⚠️ Backend coverage — 92.0% of changed backend lines covered — 6 uncovered

🧪 Backend test coverage

Patch coverage — changed backend lines (products + core): ██████████████████░░ 92.0% (79 / 85)

File Patch Uncovered changed lines
products/signals/backend/personal_ranking/list_sort.py 84.8% 75, 77–78, 80–81
products/signals/backend/views.py 90.9% 1541

🤖 Agents: add a test only if an uncovered line exposes a realistic regression that existing tests miss. Otherwise explain why no new test is needed under "How did you test this code?". Gap list: the patch-coverage artifact on this run (gh run download 376429377953416 -n patch-coverage), or the coverage-data block at the end of this comment.

Per-product line coverage (touched products)
Product Coverage Lines
platform_features ██░░░░░░░░░░░░░░░░░░ 12.1% 7 / 58
data_tools ████████████░░░░░░░░ 57.6% 95 / 165
warehouse_sources_queue █████████████░░░░░░░ 65.9% 2,194 / 3,330
demo ██████████████░░░░░░ 71.6% 2,006 / 2,803
knowledge_writer ████████████████░░░░ 77.8% 1,474 / 1,895
batch_exports █████████████████░░░ 83.0% 24,969 / 30,076
engineering_analytics █████████████████░░░ 85.6% 12,515 / 14,615
ml_inference █████████████████░░░ 86.3% 524 / 607
commands █████████████████░░░ 86.7% 1,674 / 1,930
mcp_analytics ██████████████████░░ 87.8% 6,827 / 7,777
posthog_ai ██████████████████░░ 88.2% 4,514 / 5,116
notebooks ██████████████████░░ 88.6% 15,599 / 17,612
apm ██████████████████░░ 89.2% 2,250 / 2,523
dashboards ██████████████████░░ 89.6% 9,057 / 10,105
cohorts ██████████████████░░ 90.5% 9,895 / 10,932
warehouse_suggestions ██████████████████░░ 90.7% 4,276 / 4,712
actions ██████████████████░░ 90.9% 1,524 / 1,677
data_warehouse ██████████████████░░ 91.0% 15,846 / 17,407
cdp ██████████████████░░ 91.1% 11,814 / 12,967
signals ██████████████████░░ 91.2% 113,783 / 124,769
canvas ██████████████████░░ 91.5% 8,559 / 9,351
tasks ██████████████████░░ 91.6% 86,759 / 94,722
autoresearch ██████████████████░░ 91.6% 12,301 / 13,422
today ██████████████████░░ 91.7% 4,270 / 4,655
streamlit_apps ██████████████████░░ 92.0% 3,200 / 3,478
alerts_platform ██████████████████░░ 92.1% 11,062 / 12,013
business_knowledge ██████████████████░░ 92.2% 10,900 / 11,824
data_modeling ██████████████████░░ 92.3% 13,023 / 14,117
visual_review ██████████████████░░ 92.4% 13,437 / 14,550
review_hog ██████████████████░░ 92.4% 18,498 / 20,025
conversations ██████████████████░░ 92.4% 33,298 / 36,038
metrics ██████████████████░░ 92.4% 13,031 / 14,101
wizard ██████████████████░░ 92.4% 7,323 / 7,922
slack_app ███████████████████░ 92.6% 25,685 / 27,748
notifications ███████████████████░ 92.8% 1,230 / 1,326
error_tracking ███████████████████░ 92.8% 21,541 / 23,219
early_access_features ███████████████████░ 92.8% 1,400 / 1,509
legal_documents ███████████████████░ 93.0% 2,380 / 2,558
ai_training ███████████████████░ 93.1% 605 / 650
managed_warehouse ███████████████████░ 93.2% 15,792 / 16,947
authorization ███████████████████░ 93.2% 850 / 912
webmcp ███████████████████░ 93.3% 277 / 297
stamphog ███████████████████░ 93.3% 11,751 / 12,592
alerts ███████████████████░ 93.3% 14,214 / 15,228
surveys ███████████████████░ 93.6% 7,847 / 8,388
web_analytics ███████████████████░ 93.6% 27,149 / 29,018
approvals ███████████████████░ 93.6% 4,944 / 5,284
exports ███████████████████░ 93.7% 4,474 / 4,777
cross_project_dashboards ███████████████████░ 93.7% 867 / 925
context_layer ███████████████████░ 93.8% 4,082 / 4,350
marketing_analytics ███████████████████░ 93.9% 22,448 / 23,903
mcp_store ███████████████████░ 94.0% 9,391 / 9,991
ai_observability ███████████████████░ 94.0% 42,027 / 44,703
billing_alerts ███████████████████░ 94.0% 2,332 / 2,480
messaging ███████████████████░ 94.0% 10,646 / 11,320
annotations ███████████████████░ 94.1% 1,460 / 1,552
workflows ███████████████████░ 94.1% 31,731 / 33,718
managed_migrations ███████████████████░ 94.2% 1,886 / 2,003
customer_analytics ███████████████████░ 94.4% 33,637 / 35,649
replay_vision ███████████████████░ 94.4% 33,459 / 35,453
access_control ███████████████████░ 94.4% 8,663 / 9,179
ai_gateway ███████████████████░ 94.4% 1,580 / 1,674
logs ███████████████████░ 94.4% 20,579 / 21,794
reminders ███████████████████░ 94.5% 837 / 886
experiments ███████████████████░ 94.7% 49,044 / 51,779
growth ███████████████████░ 95.0% 11,603 / 12,217
endpoints ███████████████████░ 95.0% 9,725 / 10,239
warehouse_sources ███████████████████░ 95.0% 143,195 / 150,748
release ███████████████████░ 95.0% 703 / 740
product_tours ███████████████████░ 95.1% 1,271 / 1,337
skills ███████████████████░ 95.1% 7,658 / 8,053
uptime_monitoring ███████████████████░ 95.3% 306 / 321
subscriptions ███████████████████░ 95.7% 14,326 / 14,977
ui_customization ███████████████████░ 95.7% 714 / 746
data_catalog ███████████████████░ 95.7% 5,410 / 5,651
tracing ███████████████████░ 95.8% 5,113 / 5,339
feature_flags ███████████████████░ 95.8% 31,130 / 32,505
product_analytics ███████████████████░ 95.8% 31,510 / 32,901
revenue_analytics ███████████████████░ 95.9% 1,877 / 1,958
data_quality ███████████████████░ 96.0% 8,583 / 8,937
groups ███████████████████░ 96.4% 2,068 / 2,145
aeo ███████████████████░ 96.4% 4,958 / 5,141
account_audits ███████████████████░ 96.5% 823 / 853
security ███████████████████░ 96.8% 1,594 / 1,647
pulse ███████████████████░ 97.0% 2,044 / 2,107
analytics_platform ████████████████████ 98.0% 2,962 / 3,022
field_notes ████████████████████ 98.4% 181 / 184

Report-only. Patch coverage = changed backend lines covered vs origin/master. Sorted lowest first.
Known gaps: lines covered only by Temporal tests show as uncovered; core line numbers may drift if master changed the same file.

@andrewm4894

Copy link
Copy Markdown
Member

/trunk merge

@trunk-io
trunk-io Bot merged commit f301563 into master Nov 12, 2026
426 of 469 checks passed
@trunk-io
trunk-io Bot deleted the posthog/inbox-viewed-personal-ranking-status branch November 12, 2026 19:32
@deployment-status-posthog

deployment-status-posthog Bot commented Nov 12, 2026 •

Copy link
Copy Markdown

Deploy status

Environment Status Deployed At Workflow
dev ✅ Deployed 2026-11-12 20:18 UTC Run
prod-us ✅ Deployed 2026-11-12 20:40 UTC Run
prod-eu ✅ Deployed 2026-11-12 20:44 UTC Run

This table shows the posthog release only. Hogstation shows every service that this PR reaches, Kargo services included.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(signals): record personal ranking readiness on Inbox viewed

1 participant