Repository navigation
Conversation
|
Merging to
After your PR is submitted to the merge queue, this comment will be automatically updated with its status. If the PR fails, failure details will also be posted here |
🤖 CI report
|
| Function | Location | Complexity | Limit |
|---|---|---|---|
BillingAlertEditorContent |
products/billing_alerts/frontend/BillingAlertEditor.tsx:36 |
13 | 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.
✅ Bundle size — 🟢 -1.7 KiB (-0.0%)
Uncompressed size of every built .js bundle, compared against the base branch.
Total: 76.85 MiB · 🟢 -1.7 KiB (-0.0%)
| File | Size | Δ vs base |
|---|---|---|
posthog-app/_parent/products/billing_alerts/frontend/BillingAlerts.js |
26.0 KiB | 🟢 -1.7 KiB (-6.2%) |
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 |
1013.0 KiB · 24 files | no change | █████████░ 86.4% 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.88 MiB · 607 files | no change | █████████░ 94.9% of 3.03 MiB |
authenticated shell (every logged-in page)src/scenes/AuthenticatedShell.tsx |
7.45 MiB · 2,525 files | no change | ██████████ 97.5% of 7.64 MiB |
dashboard scenesrc/scenes/dashboard/Dashboard.tsx |
9.71 MiB · 3,638 files | no change | █████████░ 94.3% of 10.30 MiB |
today home pathsrc/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx |
7.83 MiB · 2,854 files | no change | ██████████ 99.3% of 7.89 MiB |
events scenesrc/scenes/activity/explore/EventsScene.tsx |
9.28 MiB · 3,464 files | no change | █████████░ 94.0% of 9.88 MiB |
replay detail scenesrc/scenes/session-recordings/detail/SessionRecordingDetail.tsx |
11.97 MiB · 4,319 files | 🟢 -4 B (-0.0%) | ████████░░ 79.5% of 15.05 MiB |
🟢 node_modules/monaco-editor/ stays out of src/index.tsx
🟢 src/lib/components/ActivityLog/describers 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/scenes/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/monaco-editor/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/lib/components/ActivityLog/describers 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
🟢 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
🟢 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/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
🟢 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
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/index.tsx |
| 1.3 KiB | src/RootErrorBoundary.tsx |
| 1.0 KiB | src/lib/utils/bootTiming.ts |
| 912 B | ../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js |
Largest files eagerly shipped from src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
| Size | File |
|---|---|
| 321.6 KiB | ../node_modules/.pnpm/posthog-js@1.438.12_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs |
| 220.2 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 |
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 106.0 KiB | src/products.tsx |
| 99.3 KiB | src/lib/api.ts |
| 69.0 KiB | src/lib/lemon-ui/icons/icons.tsx |
| 38.7 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 |
| 33.9 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.9 KiB | src/scenes/scenes.ts |
| 27.6 KiB | src/lib/constants.tsx |
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
| Size | File |
|---|---|
| 321.6 KiB | ../node_modules/.pnpm/posthog-js@1.438.12_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs |
| 279.0 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 220.2 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 |
| 185.5 KiB | ../packages/quill/packages/quill/dist/index.js |
| 153.7 KiB | ../node_modules/.pnpm/re2js@0.4.1/node_modules/re2js/build/index.esm.js |
| 139.9 KiB | ../packages/quill/packages/primitives/dist/index.js |
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 106.0 KiB | src/products.tsx |
| 99.3 KiB | src/lib/api.ts |
| 93.3 KiB | ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js |
Largest files eagerly shipped from src/scenes/dashboard/Dashboard.tsx
| Size | File |
|---|---|
| 321.6 KiB | ../node_modules/.pnpm/posthog-js@1.438.12_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs |
| 279.0 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 220.2 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 |
| 185.5 KiB | ../packages/quill/packages/quill/dist/index.js |
| 182.6 KiB | src/queries/validators.js |
| 153.7 KiB | ../node_modules/.pnpm/re2js@0.4.1/node_modules/re2js/build/index.esm.js |
| 139.9 KiB | ../packages/quill/packages/primitives/dist/index.js |
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 106.0 KiB | src/products.tsx |
| 99.3 KiB | src/lib/api.ts |
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
| Size | File |
|---|---|
| 321.6 KiB | ../node_modules/.pnpm/posthog-js@1.438.12_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs |
| 279.0 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 220.2 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 |
| 185.5 KiB | ../packages/quill/packages/quill/dist/index.js |
| 153.7 KiB | ../node_modules/.pnpm/re2js@0.4.1/node_modules/re2js/build/index.esm.js |
| 139.9 KiB | ../packages/quill/packages/primitives/dist/index.js |
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 106.0 KiB | src/products.tsx |
| 99.3 KiB | src/lib/api.ts |
| 93.3 KiB | ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js |
Largest files eagerly shipped from src/scenes/activity/explore/EventsScene.tsx
| Size | File |
|---|---|
| 321.6 KiB | ../node_modules/.pnpm/posthog-js@1.438.12_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs |
| 279.0 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 220.2 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 |
| 185.5 KiB | ../packages/quill/packages/quill/dist/index.js |
| 182.6 KiB | src/queries/validators.js |
| 153.7 KiB | ../node_modules/.pnpm/re2js@0.4.1/node_modules/re2js/build/index.esm.js |
| 139.9 KiB | ../packages/quill/packages/primitives/dist/index.js |
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 106.0 KiB | src/products.tsx |
| 99.3 KiB | src/lib/api.ts |
Largest files eagerly shipped from src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
| Size | File |
|---|---|
| 321.6 KiB | ../node_modules/.pnpm/posthog-js@1.438.12_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs |
| 315.9 KiB | ../node_modules/.pnpm/posthog-js@1.438.12_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/rrweb.js |
| 279.0 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 220.2 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 |
| 185.5 KiB | ../packages/quill/packages/quill/dist/index.js |
| 182.6 KiB | src/queries/validators.js |
| 153.7 KiB | ../node_modules/.pnpm/re2js@0.4.1/node_modules/re2js/build/index.esm.js |
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 106.0 KiB | src/products.tsx |
| 99.3 KiB | src/lib/api.ts |
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 · 19 files | no change | ████░░░░░░ 39.1% of 5.72 MiB |
| Deferred (lazy) | 2.10 MiB · 40 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 |
|---|---|
| 877.6 KiB | dist/toolbar/toolbar-app-W6GTY6MD.css |
| 666.1 KiB | dist/toolbar/chunk-chunk-XY2OLK24.js |
| 257.8 KiB | dist/toolbar/chunk-chunk-UWUMY6PK.js |
| 131.8 KiB | dist/toolbar/chunk-chunk-FDH2IBXT.js |
| 129.6 KiB | dist/toolbar/chunk-chunk-HVB7MW3U.js |
| 74.8 KiB | dist/toolbar/toolbar-app-MYQQ7LCA.js |
| 69.0 KiB | dist/toolbar/chunk-chunk-TSAL54PB.js |
| 35.6 KiB | dist/toolbar/chunk-chunk-L6LGXESA.js |
| 21.7 KiB | dist/toolbar/chunk-chunk-QIG7PJOM.js |
| 6.8 KiB | dist/toolbar/chunk-chunk-DV7IWQNF.js |
Posted automatically by check-toolbar-size · sizes are toolbar output bytes (shipped, post-tree-shake) from the esbuild metafile
✅ Dist folder size — 🟢 -14.1 KiB (-0.0%)
Total size of the built frontend/dist folder (all assets), compared against the base branch.
Total: 1018.37 MiB · 🟢 -14.1 KiB (-0.0%)
ℹ️ MCP UI apps size — 32 app(s), 26182.0 KB JS
Built size of each MCP UI app (main.js + styles.css).
| App | JS | CSS |
|---|---|---|
| debug | 836.4 KB | 206.4 KB |
| action | 760.5 KB | 206.4 KB |
| action-list | 827.4 KB | 206.4 KB |
| cohort | 759.5 KB | 206.4 KB |
| cohort-list | 826.4 KB | 206.4 KB |
| email-template | 759.3 KB | 206.4 KB |
| error-details | 764.3 KB | 206.4 KB |
| error-issue | 760.8 KB | 206.4 KB |
| error-issue-list | 828.0 KB | 206.4 KB |
| experiment | 824.5 KB | 206.4 KB |
| experiment-list | 828.2 KB | 206.4 KB |
| experiment-results | 827.0 KB | 206.4 KB |
| feature-flag | 826.8 KB | 206.4 KB |
| feature-flag-list | 830.5 KB | 206.4 KB |
| feature-flag-testing | 762.7 KB | 206.4 KB |
| inline-scan | 759.9 KB | 206.4 KB |
| insight-actors | 825.9 KB | 206.4 KB |
| llm-costs | 823.2 KB | 206.4 KB |
| session-recording | 761.7 KB | 206.4 KB |
| survey | 761.0 KB | 206.4 KB |
| survey-global-stats | 823.2 KB | 206.4 KB |
| survey-list | 828.1 KB | 206.4 KB |
| survey-stats | 823.2 KB | 206.4 KB |
| trace-span | 759.8 KB | 206.4 KB |
| trace-span-list | 827.3 KB | 206.4 KB |
| vision-observation-list | 826.5 KB | 206.4 KB |
| workflow | 759.8 KB | 206.4 KB |
| workflow-list | 826.7 KB | 206.4 KB |
| query-results | 1077.8 KB | 206.4 KB |
| render-ui | 1149.0 KB | 206.4 KB |
| visual-review-snapshots | 764.3 KB | 206.4 KB |
| workflow-data-suggestions | 762.1 KB | 206.4 KB |
⚠️ Playwright — 1 flaky
🎭 Playwright report · View test results →
- Creating a SQL insight with a variable and overriding it on a dashboard (chromium)
These issues are not necessarily caused by your changes.
Annoyed by this section? Help fix flakies and failures and it will go green!
✅ Hogbox preview — ready, open the preview
▶ Open the preview
| 🔑 Login | test@posthog.com / 12345678 (demo data) |
| 🧩 Running | this PR's backend and frontend, on the PostHog :master base |
| 🔗 Link | stable across rebuilds: a re-push swaps the box underneath, the URL stays |
| 🔒 Access | tailnet only (PostHog VPN) |
| 🛠️ Admin | inspect & debug state in hogland |
| 💤 Idle | sleeps after ~30 min idle (snapshot to S3, zero node cost) and wakes on your next visit in ~30s, behind a brief "waking up" screen |
commit 293383f · box box-b04250b50ec7 · ready in 1108s (push → usable) · build log · rebuilds on every push, torn down on close
|
782607a to
e90c9d4
Compare
|
Risk: No findings Follow-up review of the delta since 47e595b: the branch's hand-written billing-alert changes are unchanged since the last review, and the only new content is regenerated OpenAPI/MCP type and tool-schema files (type declarations only, no executable logic), reflecting the rebase onto newer master. No new security-relevant surface is introduced. Sentinel reviewed |
There was a problem hiding this comment.
Not approved — this change needs a human reviewer.
Re-adding the stamphog label gives the same result unless the changed files change.
stamphog can't approve this pull request because two gates failed. The deny-list gate matched billing, since the change touches billing alert code under products/billing_alerts/ and products/billing/. The tier gate classified it as T2-never (293 lines across 11 files, two areas, a feature change). The size and prerequisites gates passed, but that doesn't change the outcome.
Please ask a human reviewer to look at this pull request, ideally someone from the billing team. Splitting the frontend editor change from the backend API and generated-type changes may make that review easier, but it won't change the deny-list result.
Gate mechanics and policy version
| Gate | Result | |
|---|---|---|
| prerequisites | ✓ | all clear |
| deny-list | ✗ | matches: billing |
| size | ✓ | 112L, 5F substantive, 293L/11F incl. docs/generated/snapshots — within ceiling |
| tier | ✗ | classified as T2-never: T2-never (293L, 11F, two-areas, feat) |
| stamphog 2.5.1 | .stamphog/policy.yml @ unknown · reviewed head e90c9d4 |
cohenroy
left a comment
There was a problem hiding this comment.
LGTM from the billing side. Billing never saw these fields, and we agreed in the thread to go with platform defaults. Small asks inline. Also, README.md:15 and mcp/tools.yaml:42 still mention advanced options and cooldown.
a36e91f to
47e595b
Compare
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…escription Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
47e595b to
293383f
Compare
Problem
Changes
minimum_value,evaluation_delay_hoursorcooldown_hours. A write that sends them is ignored.validate_threshold_configurationtakes the minimum as an optional argument.Not rendered: no Storybook story covers the billing alert editor, so the removed section was not checked in a browser.
How did you test this code?
test_fields_the_platform_ignores_are_not_writablereplaces the negative-minimum test. It fails if the API accepts any of the three fields again.test_threshold_edit_preserves_snoozed_stateandtest_evaluation_rule_edits_reset_firing_state_and_failuresnow edit the threshold, because they edited removed fields before.Release status
Docs update
None. No doc describes the field.
🤖 Agent context
Autonomy: Human-driven (agent-assisted)
Agent: Claude Code, Opus 5.5 (
claude-opus-5-5)minimum_value. The author chose to remove the field instead./improving-drf-endpoints,/writing-tests,/writing-user-facing-copy,/simplify,/code-review high --fix,/writing-pr-descriptions./simplify: the serializer no longer reads the stored minimum only to validate it./code-review high, skipped:products/billing_alerts/frontend/generated/is stale from before this PR, because the build now writes billing alert types toproducts/billing/frontend/generated/. Re-pointing the imports is its own change.🤖 Generated with Claude Code