Skip to content

feat(billing): remove billing alert settings the platform ignores - #116696

Open
jzhu13 wants to merge 3 commits into
masterfrom
posthog/billing-alerts-drop-minimum-value
Open

jzhu13 wants to merge 3 commits into
masterfrom
posthog/billing-alerts-drop-minimum-value

Conversation

@jzhu13

@jzhu13 jzhu13 commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Problem

  • The billing alert editor offers three settings that the shared alerts platform ignores: "Minimum current value", "Evaluation delay" and "Notification cooldown".
  • Billing alerts are moving onto the platform (feat(alerts): evaluate billing alerts on the platform #113661). It checks the running spend total against the threshold every hour, and sends no daily reminders.
  • A user who changes any of the three sees no difference in when the alert checks or notifies.
  • Dropping them was decided with the billing team (thread).

Changes

  • The billing alert editor loses its "Advanced options" section, which held only these three settings.
  • The billing alerts API no longer accepts or returns minimum_value, evaluation_delay_hours or cooldown_hours. A write that sends them is ignored.
  • The history chart no longer applies a minimum when it marks which checks would fire.
  • The model columns, billing's legacy evaluator and the event snapshot keep the fields. Nothing writes them now, so they stay at their defaults.
  • Mechanical: regenerated API types and MCP schema, and validate_threshold_configuration takes 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_writable replaces the negative-minimum test. It fails if the API accepts any of the three fields again.
  • test_threshold_edit_preserves_snoozed_state and test_evaluation_rule_edits_reset_firing_state_and_failures now edit the threshold, because they edited removed fields before.
  • The history and form logic tests drop the removed fields.
  • Not run: the editor in a browser.

Release status

  • No feature flag controls this change

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)

  • Opened in response to a CodeRabbit finding on feat(alerts): evaluate billing alerts on the platform #113661, which asked the platform to apply minimum_value. The author chose to remove the field instead.
  • Skills: /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:
    • The legacy evaluator and the history chart still differ for an alert with a stored minimum. The legacy evaluator is never switched on, so the column goes with the legacy stack.
    • products/billing_alerts/frontend/generated/ is stale from before this PR, because the build now writes billing alert types to products/billing/frontend/generated/. Re-pointing the imports is its own change.
  • CodeRabbit CLI: not run. It failed with "You are not a member of the requested organization".

🤖 Generated with Claude Code

@trunk-io

trunk-io Bot commented Oct 14, 2026

Copy link
Copy Markdown

Merging to master in this repository is managed by Trunk.

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

After your PR is submitted to the merge queue, this comment will be automatically updated with its status. If the PR fails, failure details will also be posted here

@github-actions

github-actions Bot commented Oct 14, 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 13)

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
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 scene
src/scenes/dashboard/Dashboard.tsx
9.71 MiB · 3,638 files no change █████████░ 94.3% of 10.30 MiB
today home path
src/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 scene
src/scenes/activity/explore/EventsScene.tsx
9.28 MiB · 3,464 files no change █████████░ 94.0% of 9.88 MiB
replay detail scene
src/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 →

⚠️ 1 flaky test:

  • 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

@trunk-io

trunk-io Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Static Badge   Static Badge   Static Badge

Failed Test Failure Summary Logs
Scenes-Other/Startup program NeedsBillingDetails smoke-test The test timed out while waiting for loading indicators or spinners to disappear. Logs ↗︎
Scenes-App/Experiments ExperimentWithHealthFindings play-test The UI test could not find the text “Why?” on the experiment page. Logs ↗︎
Dashboards › Creating a SQL insight with a variable and overriding it on a dashboard The test failed because the page URL did not match the expected URL. Logs ↗︎

View Full Report ↗︎ ⋅ Docs

@jzhu13
jzhu13 force-pushed the posthog/billing-alerts-drop-minimum-value branch from 782607a to e90c9d4 Compare October 14, 2026 02:21
@jzhu13 jzhu13 changed the title feat(billing): remove the minimum current value from billing alerts feat(billing): remove billing alert settings the platform ignores Oct 14, 2026
@jzhu13
jzhu13 marked this pull request as ready for review October 15, 2026 00:06
@parameterai

parameterai Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

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 293383f · Review settings

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

@stamphog stamphog Bot removed the stamphog Request AI approval (no full review) label Oct 15, 2026
@pr-assigner-resolver-posthog
pr-assigner-resolver-posthog Bot requested review from a team and cohenroy and removed request for a team October 15, 2026 00:07

@cohenroy cohenroy left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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.

Comment thread products/billing_alerts/backend/test/test_api.py
Comment thread products/billing/frontend/generated/api.schemas.ts
@jzhu13

jzhu13 commented Oct 16, 2026

Copy link
Copy Markdown
Contributor Author

@cohenroy thanks. The README and MCP description no longer mention advanced options or cooldown (c5f7316). The data migration is #118764 and the generated-types fix is #118765, both stacked on this PR.

jzhu13 and others added 3 commits October 16, 2026 20:53
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…escription

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

This branch was successfully deployed

1 active deployment
hogbox-preview — 293383f0 Deployed Oct 17, 2026 by github-actions[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants