Skip to content

Backmerge main into staging after release#681

Open
jaeyunha wants to merge 9 commits into
stagingfrom
backmerge/main-to-staging-20260702-release-graph
Open

Backmerge main into staging after release#681
jaeyunha wants to merge 9 commits into
stagingfrom
backmerge/main-to-staging-20260702-release-graph

Conversation

@jaeyunha

@jaeyunha jaeyunha commented Jul 2, 2026

Copy link
Copy Markdown
Member

Summary

  • Merge origin/main into the staging backmerge branch after the staging→main release advanced main by 6 commits.
  • Carries the dedicated IP SES pool ownership/release fixes, billing-blocked broadcast requeue fix, and free-tier removal/review follow-ups back to staging.

Verification

  • bun run test tests/dedicated-ip-plan-gating.test.ts tests/dedicated-ip-provisioning.test.ts tests/broadcast-sender-billing.test.ts tests/deploy.test.ts tests/docs-no-free-tier.test.ts
  • make check

Notes

  • Merge completed cleanly with no conflicts.

@github-actions github-actions Bot added the size/L label Jul 2, 2026

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 966093f496

ℹ️ 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".

Comment on lines +10 to +11
-- at least one checkoutable public paid plan.
UPDATE "plans"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Put the overage-price seed in a new migration

In any environment that already applied the earlier 0040_remove_free_tier_public migration, Drizzle will record that migration as done and skip this edited SQL on the next deploy, so this backfill never runs there. Those databases will still have public paid plans with a blank stripe_overage_price_id, and createCheckoutSession returns stripe_price_missing when the overage price is absent, blocking paid checkout; add this UPDATE as a new migration instead of modifying 0040 in place.

Useful? React with 👍 / 👎.

@jaeyunha

jaeyunha commented Jul 2, 2026

Copy link
Copy Markdown
Member Author

Controller classification: human-risk-gate.

Live source-of-truth at this tick:

  • Head 966093f496b7c44b5610d6a5554e9d7689de4da1, base staging, non-draft, mergeStateStatus=CLEAN.
  • Current-head checks are green: CI typecheck/lint/unit/migration parity/SDK/onboarding all SUCCESS; PR Check size/draft SUCCESS; PR Base Guidance SKIPPED as expected for this backmerge.
  • Diff imports current main release-graph/product/runtime history into staging across dedicated-IP API/service tests, broadcast billing retry, deploy/free-tier docs/tests, Docker Compose, and migration 0040_remove_free_tier_public.sql.

I am not auto-merging this backmerge despite green checks because main→staging product/runtime/deploy history is a human-risk gate under the OpenSend branch policy. Next action is Jaeyun merge decision; after merge I’ll verify exact origin/staging merge-SHA CI before marking the release graph settled.

@jaeyunha

jaeyunha commented Jul 2, 2026

Copy link
Copy Markdown
Member Author

Controller update: pushed the Codex P1 migration fix on e03044eafd28d556ea7f493004d98c9ec7b19e94.

What changed:

  • Restored drizzle/0040_remove_free_tier_public.sql to only hide/remove Free-tier public plan state.
  • Added drizzle/0041_seed_paid_plan_overage_prices.sql for the paid-plan overage Stripe Price backfill so already-migrated environments still receive it.
  • Updated drizzle/meta/_journal.json and tests/docs-no-free-tier.test.ts to assert the split.

Validation:

  • bun run test tests/docs-no-free-tier.test.ts — 7 passed.
  • Push guardrails ran full-project typecheck and changed-file Biome lint — passed.
  • Earlier worker run also completed make check before commit.

Current gate: fresh PR checks are running on the new head; hold staging integration until exact-head CI finishes green and the review blocker is obsolete/resolved.

@jaeyunha

jaeyunha commented Jul 2, 2026

Copy link
Copy Markdown
Member Author

Addressed Codex P1 on head e03044e. The hosted paid-plan overage Stripe Price backfill is now in new migration drizzle/0041_seed_paid_plan_overage_prices.sql; drizzle/0040_remove_free_tier_public.sql is back to only hiding the legacy Free plan. Updated the no-free-tier regression test to assert that split.

Validation:

  • bun run test tests/docs-no-free-tier.test.ts passed locally.
  • make check passed locally.
  • Push guardrails re-ran change-scoped check, full-project typecheck, and changed-file Biome lint successfully during git push origin HEAD:backmerge/main-to-staging-20260702-release-graph.

Current PR head verified as e03044eafd28d556ea7f493004d98c9ec7b19e94; CI checks are queued/pending on that head.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e03044eafd

ℹ️ 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".

Comment thread src/app/api/dedicated-ips/[id]/route.ts Outdated
Comment on lines +180 to +186
if (providerPoolNameProvided && existing?.provider === "ses") {
return NextResponse.json(
{
error: "SES pool names are immutable after provisioning.",
code: "provider_pool_name_locked",
},
{ status: 403 },

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Allow idempotent provider pool updates

When callers update a provisioned SES pool by round-tripping the GET payload (which includes provider_pool_name/ses_pool_name) and changing only status, name, or notes, this branch rejects solely because the field is present. That makes normal idempotent PATCH/retire requests fail with 403 even when the supplied pool name equals existing.sesPoolName; compare the provided value before rejecting so only real name changes are blocked.

Useful? React with 👍 / 👎.

@jaeyunha

jaeyunha commented Jul 2, 2026

Copy link
Copy Markdown
Member Author

@codex review

@jaeyunha

jaeyunha commented Jul 2, 2026

Copy link
Copy Markdown
Member Author

Addressed the current-head Codex blocker on dedicated IP PATCH handling in 8e2be2329d1cc684c8d5e2f384e9b4635c623e3b.

Fix:

  • SES-backed dedicated IP pools still reject real provider pool name changes after provisioning.
  • Idempotent round-trip PATCH payloads that include the existing provider_pool_name / ses_pool_name now pass, so callers can change status/name/notes without tripping provider_pool_name_locked.
  • Added a regression test for that round-trip case while keeping the mutation rejection test.

Validation:

  • bun run test tests/dedicated-ip-plan-gating.test.ts passed locally.
  • make check passed locally.
  • Push guardrails passed change-scoped check, full-project typecheck, and changed-file Biome lint.

Current PR head verified as 8e2be2329d1cc684c8d5e2f384e9b4635c623e3b; CI is queued/pending on that head.

@jaeyunha

jaeyunha commented Jul 2, 2026

Copy link
Copy Markdown
Member Author

Controller update: current PR head 8e2be2329d1cc684c8d5e2f384e9b4635c623e3b is now exact-head green.

Evidence:

  • Non-draft, base staging, mergeStateStatus=CLEAN.
  • CI/PR checks on 8e2be2329d1cc684c8d5e2f384e9b4635c623e3b are green: typecheck, lint, unit tests, migration parity, SDK tests, onboarding, draft/size checks; PR Base Guidance is skipped as expected for this backmerge.
  • The two current-head review blockers from this backmerge cycle were fixed in follow-up commits: paid-plan overage seed moved to new 0041 migration, and idempotent SES pool PATCH names are allowed while real provider-pool renames remain rejected.

Classification remains human-risk-gate, not merge-now: this is a main→staging backmerge importing product/runtime/deploy history. Next action is Jaeyun merge decision; after merge I’ll verify exact origin/staging merge-SHA CI before calling the release graph settled.

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant