Skip to content

feat(signals): add sort=personal to the inbox report list - #129978

Merged
trunk-io[bot] merged 4 commits into
masterfrom
posthog-self-driving/featsignals-add-sortpersonal-to-the-36bdd0
Nov 5, 2026
Merged

trunk-io[bot] merged 4 commits into
masterfrom
posthog-self-driving/featsignals-add-sortpersonal-to-the-36bdd0

Conversation

@posthog

@posthog posthog Bot commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

Problem

  • People on the inbox list and the Today page never see their stored personal ranking. They get the plain recommended order.
  • Only for_me serves the ranking, and its read can gather candidates and queue a build. A page load cannot wait for that.

Closes #129928

Origin

  • Issues: #129928
  • Scout: a custom scout
  • First signal: 2026-11-05
  • Inbox report: open
  • Task started by: auto-start, after the report was rated P2 and ready to fix

Changes

  • New sort=personal on the report list. It is a pure read of one stored row: no candidate gathering, no queued build, no LLM call.
  • Order: ranked reports by stored rank, then folded reports, then every other report in the person's recommended order.
  • With no usable row (none, empty, not personalized, flag off, enabled: false), the list is the plain recommended order.
  • The base order resolves the arm with send_feature_flag_events=False, so the sort records no experiment exposure.
  • The response returns ranking_id. Later pages pass it back, so a rebuild does not reshuffle page two.
  • ranker is personal when ranks apply. inbox_merge_key follows list position.
  • Rows the LLM ranked get personal_tier and personal_reason. The prefix keeps them apart from report fields.
  • Mechanical: regenerated OpenAPI and MCP types.

How did you test this code?

Test rationale: new TestPersonalListSort covers the four regressions the issue lists: a read that builds, a fallback that is not the base order, a list exposure, and a rebuild that reshuffles page two. No existing list test touches the personal ranking.

  • Not checked: the inbox clients, which do not use the sort yet.

Release status

  • This change is behind a feature flag and is not available to users

Docs update

  • None.

🤖 Agent context

Autonomy: Fully autonomous

Agent: Claude Code, claude-opus-5-5

Skills: /writing-tests, /writing-pr-descriptions

More context for AI agents
  • Decisions: the row is the latest with personalized=True, so a failed rebuild does not hide an older personal order.
  • Decisions: array_position over the stored ids gives the SQL order, so paging stays in Postgres.
  • Follow-ups: add sort and ranker to the client list-load event to measure adoption. Move the Today page to the sort.
  • Read closely: _personal_order and _apply_signal_report_ordering in products/signals/backend/views.py.

Created with PostHog Desktop from this inbox report, addressing #129928.

🤖 Generated with Claude Code

The list reads the stored personal ranking and never builds one. Ranked reports come first by stored rank, then folded reports, then the recommended order. The base order resolves the recommended arm without an experiment exposure. ranking_id keeps later pages on the first page's ranking.

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

Generated-By: PostHog Desktop
Task-Id: c2fb09ea-1cb5-4b21-9803-347e3d5661a1
@posthog posthog Bot added the self-driving label Nov 5, 2026
@posthog
posthog Bot marked this pull request as ready for review November 5, 2026 11:53
@trunk-io

trunk-io Bot commented Nov 5, 2026 •

Copy link
Copy Markdown

😎 Merged successfully - details.

@posthog
posthog Bot requested a review from andrewm4894 November 5, 2026 11:53
@parameterai

parameterai Bot commented Nov 5, 2026 •

Copy link
Copy Markdown

Risk: No findings

This delta since the last review is a merge of origin/master plus a rewrite of the report-list pagination count for search pages (bounded count with a count_is_capped flag), a refactor moving the monitoring-status exclusion from _visible_statuses into _apply_signal_report_status_filter, and new search-shape span attributes; generated types are mechanical regenerations. I found no new security issues: every Postgres queryset path still applies the monitoring-status exclusion when the org flag is off, the new pagination path only reduces query work and exposes a boolean, and the span logs search length and a regex boolean but never the term itself.

Sentinel reviewed 4a117c7 · Review settings

@pr-assigner-resolver-posthog
pr-assigner-resolver-posthog Bot requested a review from a team November 5, 2026 11:54
@github-actions

github-actions Bot commented Nov 5, 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) — clean

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.

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

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

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

Total: 77.00 MiB · 🔺 +10 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.02 MiB · 25 files no change █████████░ 89.5% 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
3.00 MiB · 623 files 🔺 +10 B (+0.0%) ██████████ 98.8% of 3.03 MiB
authenticated shell (every logged-in page)
src/scenes/AuthenticatedShell.tsx
3.82 MiB · 1,221 files 🔺 +10 B (+0.0%) ██████████ 95.2% of 4.01 MiB
dashboard scene
src/scenes/dashboard/Dashboard.tsx
7.57 MiB · 2,924 files 🔺 +10 B (+0.0%) ████████░░ 76.9% of 9.84 MiB
today home path
src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
4.68 MiB · 1,748 files 🔺 +10 B (+0.0%) █████████░ 94.8% of 4.93 MiB
AI-first home path
src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
5.97 MiB · 2,255 files 🔺 +10 B (+0.0%) ██████████ 95.2% of 6.27 MiB
events scene
src/scenes/activity/explore/EventsScene.tsx
6.65 MiB · 2,503 files 🔺 +10 B (+0.0%) ███████░░░ 70.6% of 9.41 MiB
web analytics scene
src/scenes/web-analytics/WebAnalyticsScene.tsx
7.64 MiB · 2,855 files 🔺 +10 B (+0.0%) ███████░░░ 72.8% of 10.49 MiB
replay detail scene
src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
6.88 MiB · 2,593 files 🔺 +10 B (+0.0%) ████████░░ 84.6% of 8.13 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/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.9 KiB src/lib/utils/bootTiming.ts
1.7 KiB src/index.tsx
1.7 KiB ../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js
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
358.6 KiB ../node_modules/.pnpm/posthog-js@1.446.0_@types+react@18.3.27_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
105.4 KiB src/products.tsx
87.5 KiB src/lib/api.ts
68.7 KiB src/lib/lemon-ui/icons/icons.tsx
41.9 KiB ../node_modules/.pnpm/@dnd-kit+core@6.0.8_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
28.3 KiB src/lib/constants.tsx
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
358.6 KiB ../node_modules/.pnpm/posthog-js@1.446.0_@types+react@18.3.27_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
105.4 KiB src/products.tsx
87.5 KiB src/lib/api.ts
68.7 KiB src/lib/lemon-ui/icons/icons.tsx
41.9 KiB ../node_modules/.pnpm/@dnd-kit+core@6.0.8_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.3 KiB src/lib/utils/eventUsageLogic.ts
28.3 KiB src/lib/constants.tsx
Largest files eagerly shipped from src/scenes/dashboard/Dashboard.tsx
Size File
358.6 KiB ../node_modules/.pnpm/posthog-js@1.446.0_@types+react@18.3.27_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
115.7 KiB ../node_modules/.pnpm/posthog-js@1.446.0_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/surveys-preview.js
110.8 KiB ../packages/quill/packages/primitives/dist/index.js
105.4 KiB src/products.tsx
96.1 KiB ../packages/quill/packages/components/dist/index.js
87.5 KiB src/lib/api.ts
79.0 KiB src/scenes/dashboard/dashboardLogic.tsx
68.7 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
358.6 KiB ../node_modules/.pnpm/posthog-js@1.446.0_@types+react@18.3.27_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
110.8 KiB ../packages/quill/packages/primitives/dist/index.js
105.4 KiB src/products.tsx
87.5 KiB src/lib/api.ts
68.7 KiB src/lib/lemon-ui/icons/icons.tsx
68.0 KiB ../products/posthog_ai/frontend/logics/runStreamLogic.ts
41.9 KiB ../node_modules/.pnpm/@dnd-kit+core@6.0.8_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
358.6 KiB ../node_modules/.pnpm/posthog-js@1.446.0_@types+react@18.3.27_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
110.8 KiB ../packages/quill/packages/primitives/dist/index.js
105.4 KiB src/products.tsx
87.5 KiB src/lib/api.ts
68.7 KiB src/lib/lemon-ui/icons/icons.tsx
68.0 KiB ../products/posthog_ai/frontend/logics/runStreamLogic.ts
41.9 KiB ../node_modules/.pnpm/@dnd-kit+core@6.0.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@dnd-kit/core/dist/core.esm.js
41.7 KiB src/scenes/hog-functions/sub-templates/sub-templates.ts
Largest files eagerly shipped from src/scenes/activity/explore/EventsScene.tsx
Size File
358.6 KiB ../node_modules/.pnpm/posthog-js@1.446.0_@types+react@18.3.27_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
110.8 KiB ../packages/quill/packages/primitives/dist/index.js
105.4 KiB src/products.tsx
96.1 KiB ../packages/quill/packages/components/dist/index.js
87.5 KiB src/lib/api.ts
79.0 KiB src/scenes/dashboard/dashboardLogic.tsx
68.7 KiB src/lib/lemon-ui/icons/icons.tsx
68.0 KiB ../products/posthog_ai/frontend/logics/runStreamLogic.ts
Largest files eagerly shipped from src/scenes/web-analytics/WebAnalyticsScene.tsx
Size File
358.6 KiB ../node_modules/.pnpm/posthog-js@1.446.0_@types+react@18.3.27_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
115.7 KiB ../node_modules/.pnpm/posthog-js@1.446.0_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/surveys-preview.js
110.8 KiB ../packages/quill/packages/primitives/dist/index.js
105.4 KiB src/products.tsx
96.1 KiB ../packages/quill/packages/components/dist/index.js
87.5 KiB src/lib/api.ts
79.0 KiB src/scenes/dashboard/dashboardLogic.tsx
68.7 KiB src/lib/lemon-ui/icons/icons.tsx
Largest files eagerly shipped from src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
Size File
358.6 KiB ../node_modules/.pnpm/posthog-js@1.446.0_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
321.5 KiB ../node_modules/.pnpm/posthog-js@1.446.0_@types+react@18.3.27_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
110.8 KiB ../packages/quill/packages/primitives/dist/index.js
105.4 KiB src/products.tsx
96.1 KiB ../packages/quill/packages/components/dist/index.js
87.5 KiB src/lib/api.ts
68.7 KiB src/lib/lemon-ui/icons/icons.tsx
68.0 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 2.97 MiB 🔺 +10 B (+0.0%)
shell 2.34 MiB no change
query 56.2 KiB no change
features 272.7 KiB no change

Download the interactive layer graph for this PR.

Posted automatically by check-layers

✅ Toolbar bundle — eager 2.42 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.42 MiB · 19 files 🔺 +10 B (+0.0%) ████░░░░░░ 42.2% of 5.72 MiB
Deferred (lazy) 2.61 MiB · 42 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
960.4 KiB dist/toolbar/toolbar-app-FO7HE4NV.css
730.5 KiB dist/toolbar/chunk-chunk-EY3XXSB4.js
290.5 KiB dist/toolbar/chunk-chunk-VGI6XVDZ.js
131.8 KiB dist/toolbar/chunk-chunk-FQJO25M6.js
130.4 KiB dist/toolbar/chunk-chunk-RZE6NPXC.js
75.7 KiB dist/toolbar/toolbar-app-MKFKAK72.js
69.0 KiB dist/toolbar/chunk-chunk-BFAXZMC5.js
33.8 KiB dist/toolbar/chunk-chunk-LSNSWGYN.js
21.7 KiB dist/toolbar/chunk-chunk-6DLD3VB5.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 — 🔺 +4.9 KiB (+0.0%)

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

Total: 983.61 MiB · 🔺 +4.9 KiB (+0.0%)

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

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

App JS CSS
debug 848.8 KB 220.9 KB
explain-chart 1122.9 KB 220.9 KB
action 771.5 KB 220.9 KB
action-list 839.8 KB 220.9 KB
cohort 770.5 KB 220.9 KB
cohort-list 838.8 KB 220.9 KB
email-template 770.4 KB 220.9 KB
error-details 775.4 KB 220.9 KB
error-issue 772.7 KB 220.9 KB
error-issue-list 841.2 KB 220.9 KB
experiment 836.9 KB 220.9 KB
experiment-list 840.5 KB 220.9 KB
experiment-results 838.7 KB 220.9 KB
feature-flag 839.2 KB 220.9 KB
feature-flag-list 842.9 KB 220.9 KB
feature-flag-testing 773.8 KB 220.9 KB
inline-scan 771.0 KB 220.9 KB
insight-actors 838.3 KB 220.9 KB
llm-costs 835.6 KB 220.9 KB
session-recording 772.8 KB 220.9 KB
survey 772.1 KB 220.9 KB
survey-global-stats 835.6 KB 220.9 KB
survey-list 840.5 KB 220.9 KB
survey-stats 835.6 KB 220.9 KB
trace-span 770.9 KB 220.9 KB
trace-span-list 839.7 KB 220.9 KB
vision-observation-list 838.9 KB 220.9 KB
workflow 770.9 KB 220.9 KB
workflow-list 839.1 KB 220.9 KB
workflow-setup-status 770.6 KB 220.9 KB
query-results 1094.4 KB 220.9 KB
render-ui 1198.9 KB 220.9 KB
visual-review-snapshots 775.4 KB 220.9 KB
workflow-data-suggestions 773.2 KB 220.9 KB
workflow-sending-rules 771.9 KB 220.9 KB
ℹ️ MCP agent API — agent-facing tool changes

What this PR changes for agents, from the tool schema snapshots and tool definitions.

Tools changed (1):

Tool Params Scopes Annotations Schema chars
inbox-reports-list +ranking_id 9,131 -> 9,648
✅ Playwright — all passed

All tests passed.

View test results →

⚠️ Backend coverage — 94.0% of changed backend lines covered — 9 uncovered

🧪 Backend test coverage

Patch coverage — changed backend lines (products + core): ███████████████████░ 94.0% (149 / 158)

File Patch Uncovered changed lines
products/signals/backend/personal_ranking/list_sort.py 81.4% 21–22, 27, 29, 31, 37–38, 59
products/signals/backend/views.py 95.8% 1410

🤖 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 142366329634353 -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 ████████████░░░░░░░░ 60.9% 95 / 156
warehouse_sources_queue █████████████░░░░░░░ 65.2% 2,161 / 3,314
demo ██████████████░░░░░░ 71.2% 1,977 / 2,778
knowledge_writer ███████████████░░░░░ 73.6% 1,045 / 1,419
batch_exports ████████████████░░░░ 82.3% 23,652 / 28,746
engineering_analytics █████████████████░░░ 85.5% 12,322 / 14,415
mcp_analytics █████████████████░░░ 86.3% 5,811 / 6,732
ml_inference █████████████████░░░ 86.3% 524 / 607
commands █████████████████░░░ 86.8% 1,709 / 1,970
posthog_ai ██████████████████░░ 87.9% 4,305 / 4,897
apm ██████████████████░░ 88.2% 1,973 / 2,236
notebooks ██████████████████░░ 88.8% 15,454 / 17,407
mcp_registry ██████████████████░░ 89.0% 1,596 / 1,794
dashboards ██████████████████░░ 89.4% 8,040 / 8,993
product_tours ██████████████████░░ 89.7% 1,355 / 1,510
warehouse_suggestions ██████████████████░░ 90.1% 3,841 / 4,262
cohorts ██████████████████░░ 90.3% 9,219 / 10,211
visual_review ██████████████████░░ 90.7% 9,849 / 10,860
signals ██████████████████░░ 90.7% 103,471 / 114,080
canvas ██████████████████░░ 91.2% 8,199 / 8,988
data_warehouse ██████████████████░░ 91.4% 15,789 / 17,283
managed_warehouse ██████████████████░░ 91.4% 12,990 / 14,214
tasks ██████████████████░░ 91.4% 84,452 / 92,374
autoresearch ██████████████████░░ 91.5% 11,719 / 12,809
today ██████████████████░░ 91.5% 3,975 / 4,344
cdp ██████████████████░░ 91.5% 10,517 / 11,489
data_modeling ██████████████████░░ 91.8% 12,117 / 13,194
metrics ██████████████████░░ 91.9% 11,560 / 12,579
streamlit_apps ██████████████████░░ 91.9% 3,139 / 3,415
business_knowledge ██████████████████░░ 92.1% 10,825 / 11,753
wizard ██████████████████░░ 92.2% 7,002 / 7,594
review_hog ██████████████████░░ 92.3% 17,836 / 19,323
conversations ██████████████████░░ 92.3% 31,381 / 33,982
error_tracking ███████████████████░ 92.5% 20,699 / 22,374
early_access_features ███████████████████░ 92.6% 1,339 / 1,446
alerts_platform ███████████████████░ 92.7% 8,743 / 9,429
slack_app ███████████████████░ 92.8% 23,720 / 25,570
notifications ███████████████████░ 92.8% 1,218 / 1,312
actions ███████████████████░ 92.9% 1,360 / 1,464
stamphog ███████████████████░ 93.1% 10,740 / 11,538
alerts ███████████████████░ 93.1% 11,783 / 12,656
surveys ███████████████████░ 93.3% 7,256 / 7,780
webmcp ███████████████████░ 93.3% 277 / 297
ai_training ███████████████████░ 93.3% 598 / 641
web_analytics ███████████████████░ 93.4% 26,478 / 28,354
aeo ███████████████████░ 93.4% 2,312 / 2,475
workflows ███████████████████░ 93.6% 28,560 / 30,528
ai_gateway ███████████████████░ 93.6% 787 / 841
approvals ███████████████████░ 93.7% 5,004 / 5,341
marketing_analytics ███████████████████░ 93.8% 22,058 / 23,527
context_layer ███████████████████░ 93.8% 3,984 / 4,247
exports ███████████████████░ 93.9% 4,324 / 4,607
cross_project_dashboards ███████████████████░ 93.9% 858 / 914
mcp_store ███████████████████░ 94.0% 9,298 / 9,894
authorization ███████████████████░ 94.0% 671 / 714
billing_alerts ███████████████████░ 94.0% 2,322 / 2,470
ai_observability ███████████████████░ 94.0% 34,115 / 36,279
messaging ███████████████████░ 94.0% 8,646 / 9,194
customer_analytics ███████████████████░ 94.1% 30,858 / 32,786
managed_migrations ███████████████████░ 94.1% 1,877 / 1,994
replay_vision ███████████████████░ 94.4% 33,354 / 35,346
legal_documents ███████████████████░ 94.4% 2,313 / 2,451
logs ███████████████████░ 94.4% 19,485 / 20,630
reminders ███████████████████░ 94.8% 782 / 825
experiments ███████████████████░ 94.8% 45,568 / 48,056
warehouse_sources ███████████████████░ 94.9% 136,562 / 143,919
growth ███████████████████░ 95.0% 11,563 / 12,176
endpoints ███████████████████░ 95.0% 9,720 / 10,232
annotations ███████████████████░ 95.1% 1,097 / 1,153
skills ███████████████████░ 95.2% 7,633 / 8,018
uptime_monitoring ███████████████████░ 95.3% 306 / 321
access_control ███████████████████░ 95.4% 8,470 / 8,881
data_catalog ███████████████████░ 95.7% 4,714 / 4,928
subscriptions ███████████████████░ 95.7% 14,019 / 14,650
product_analytics ███████████████████░ 95.8% 30,544 / 31,882
feature_flags ███████████████████░ 95.8% 29,688 / 30,984
revenue_analytics ███████████████████░ 95.9% 1,877 / 1,958
data_quality ███████████████████░ 96.0% 8,564 / 8,918
tracing ███████████████████░ 96.5% 4,572 / 4,737
account_audits ███████████████████░ 96.7% 770 / 796
security ███████████████████░ 96.8% 1,597 / 1,650
pulse ███████████████████░ 97.3% 2,036 / 2,093
analytics_platform ████████████████████ 98.0% 2,883 / 2,943
groups ████████████████████ 98.2% 1,604 / 1,634
field_notes ████████████████████ 99.4% 172 / 173

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.

@posthog posthog Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

PostHog Review · Standard · reviewed b83a341: 1 Should fix.

See this review and its findings in PostHog Review. Comment @posthog review --deep for a Deep review. A Deep review takes longer and looks deeper than a Standard review.

Comment on lines +495 to +500
ranking_id: zod
.string()
.optional()
.describe(
'For sort=personal: the ranking_id of the first page. Pass it on later pages, so a new personal ranking does not reorder them. When that ranking no longer exists, the latest one applies.'
),

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

P2 · Refresh the MCP input schema snapshot

Adding ranking_id and changing the sort description changes the runtime schema, but inbox-reports-list.json still contains the previous schema. tool-schema-snapshots.test.ts compares them directly and fails. Follow the snapshot refresh step and commit the updated snapshot.

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

Not approved — this change needs a human reviewer.

Re-add the stamphog label to request another review once you have addressed this.

@PostHog's snapshot concern is still unaddressed, and the API-contract changes have no concern-free current-head review. Refresh the snapshot and request review from @PostHog/team-self-driving and @PostHog/team-context-and-mcp before re-requesting.

  • PostHog Review (Standard) reviewed the current head: 1 finding, posted on the PR.
  • @PostHog on services/mcp/src/generated/signals/api.ts: the MCP schema snapshot remains stale. The runtime input adds ranking_id and updates the sort description, but services/mcp/tests/unit/snapshots/tool-schemas/inbox-reports-list.json has neither update; tool-schema-snapshots.test.ts compares the runtime schema against that file. Refresh and commit the snapshot, then rerun the snapshot test before re-requesting.
Gate mechanics and policy version
Gate Result
prerequisites ✓ all clear
deny-list ✓ no deny categories matched
size ✓ 202L, 4F substantive, 406L/9F incl. docs/generated/snapshots — within ceiling
tier ✓ T1-agent / T1d-complex (406L, 9F, two-areas, feat)
stamphog 2.7.0 .stamphog/policy.yml @ b83a341 · reviewed head b83a341

@andrewm4894

Copy link
Copy Markdown
Member

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 5, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-05T16:45:25.068584Z 4a117c7 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Another round soon, please!

Reviewed commit: b83a341f7a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

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

Not approved — escalated to a human reviewer.

Re-add the stamphog label to request another review once you have addressed this.

The API contract changes lack current-head independent assurance; the earlier approval and agent reviews cover an older commit, while the snapshot concern is fixed in the current diff. Request current-head review from @PostHog/team-self-driving and @PostHog/team-context-and-mcp before re-requesting.

  • 👍 on the PR from chatgpt-codex-connector[bot].
  • Risky territory without independent assurance: Public API contracts — products/signals/backend/views.py and serializers.py add a personalized list ordering, a ranking identifier query parameter and response field, and per-report ranking annotations; services/mcp/src/generated/signals/api.ts and src/tools/generated/signals.ts expose the new parameter to MCP callers.
Gate mechanics and policy version
Gate Result
prerequisites ✓ all clear
deny-list ✓ no deny categories matched
size ✓ 202L, 4F substantive, 412L/10F incl. docs/generated/snapshots — within ceiling
tier ✓ T1-agent / T1d-complex (412L, 10F, two-areas, feat)
stamphog 2.7.0 .stamphog/policy.yml @ 59e67cb · reviewed head 59e67cb

@andrewm4894

Copy link
Copy Markdown
Member

/trunk merge

@posthog posthog Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

PostHog Review · Standard · reviewed 59e67cb: no findings.

…g/featsignals-add-sortpersonal-to-the-36bdd0

# Conflicts:
#	products/signals/backend/views.py

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

Not approved — escalated to a human reviewer.

Re-add the stamphog label to request another review once you have addressed this.

The API contract changes lack current-head independent assurance; request review from @PostHog/team-self-driving and @PostHog/team-context-and-mcp before re-requesting. The snapshot concern raised by @PostHog is fixed in the current checkout; existing approvals and clean reviews are on older commits.

  • 👍 on the PR from chatgpt-codex-connector[bot].
  • Risky territory without independent assurance: Public API contracts — products/signals/backend/views.py and serializers.py add a personal list sort, ranking identifier parameter, and response metadata; services/mcp/src/generated/signals/api.ts and tools/generated/signals.ts expose the new parameter to MCP callers.
Gate mechanics and policy version
Gate Result
prerequisites ✓ all clear
deny-list ✓ no deny categories matched
size ✓ 202L, 4F substantive, 412L/10F incl. docs/generated/snapshots — within ceiling
tier ✓ T1-agent / T1d-complex (412L, 10F, two-areas, feat)
stamphog 2.7.0 .stamphog/policy.yml @ 2b2dd9e · reviewed head 2b2dd9e

@andrewm4894

Copy link
Copy Markdown
Member

/trunk merge

@posthog posthog Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

PostHog Review · Standard · reviewed 2b2dd9e: no findings.

…g/featsignals-add-sortpersonal-to-the-36bdd0

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

Not approved — escalated to a human reviewer.

Re-add the stamphog label to request another review once you have addressed this.

The API contract changes lack independent assurance on the current head; all supplied reviews cover older commits, and the snapshot concern is fixed. Request current-head review from @PostHog/team-self-driving and @PostHog/team-context-and-mcp before re-requesting.

  • 👍 on the PR from chatgpt-codex-connector[bot].
  • Risky territory without independent assurance: Public API contracts — products/signals/backend/views.py and serializers.py add a personal list ordering, a ranking identifier query parameter and response metadata, and per-report personal annotations; services/mcp/src/generated/signals/api.ts and src/tools/generated/signals.ts expose the new parameter through MCP.
Gate mechanics and policy version
Gate Result
prerequisites ✓ all clear
deny-list ✓ no deny categories matched
size ✓ 202L, 4F substantive, 412L/10F incl. docs/generated/snapshots — within ceiling
tier ✓ T1-agent / T1d-complex (412L, 10F, two-areas, feat)
stamphog 2.7.0 .stamphog/policy.yml @ 4a117c7 · reviewed head 4a117c7

@posthog posthog Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

PostHog Review · Standard · reviewed 4a117c7: 1 Should fix.

response.data["ranking_pill"] = (
self._recommended_arm.ranking_pill if self._recommended_arm is not None else None
)
response.data["ranking_id"] = self._personal_order.ranking_id if self._personal_order is not None else None

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

P2 · Include the resolved ranking ID in pagination links

When the first sort=personal request omits ranking_id, get_paginated_response() builds next without the resolved ID. Following that URL after a rebuild selects the latest ranking, so offset pagination repeats or skips reports. Returning the ID separately leaves the advertised pagination link unstable; include it in next and previous.

@andrewm4894

Copy link
Copy Markdown
Member

/trunk merge

@trunk-io
trunk-io Bot merged commit d185384 into master Nov 5, 2026
288 checks passed
@trunk-io
trunk-io Bot deleted the posthog-self-driving/featsignals-add-sortpersonal-to-the-36bdd0 branch November 5, 2026 19:00
@deployment-status-posthog

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

Copy link
Copy Markdown

Deploy status

Environment Status Deployed At Workflow
dev ✅ Deployed 2026-11-05 19:46 UTC Run
prod-us ✅ Deployed 2026-11-05 20:13 UTC Run
prod-eu ✅ Deployed 2026-11-05 20:18 UTC Run

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): add sort=personal to the inbox report list

1 participant