Skip to content

Align Stripe plan changes to first-of-month proration anchors - #2274

Draft
niemyjski with Copilot wants to merge 11 commits into
mainfrom
copilot/plan-upgrades
Draft

niemyjski with Copilot wants to merge 11 commits into
mainfrom
copilot/plan-upgrades

Conversation

Copilot AI commented May 31, 2026 •

Copy link
Copy Markdown
Contributor

Plan changes that create a Stripe subscription now share a policy that anchors billing to day 1 at midnight UTC and prorates the initial partial period. This covers new customers and existing customers without a live subscription. Existing subscriptions request prorations without explicitly resetting their anchor or adding a trial. Monthly/yearly intervals and Stripe's interval-change rules remain in effect; legacy renewal dates are not migrated.

Validation: current main (89607b48b) is merged. This update changes only CONTRIBUTING.md; application and tests are identical to 61f0b4473, whose full hosted API/client/E2E/Docker checks passed. Ancestry and whitespace checks pass. No local build/test was repeated for this documentation-only update. Hosted checks on 97cf904e1 are pending.

Local plan-change integration tests remain pending exclusive access to shared Aspire/test data. Browser verification of subscription creation requires a Stripe test key; live Stripe invoice amounts and renewal behavior are unverified. GitHub still reports a pending CLA status, although current contribution guidance now uses Apache 2.0 contribution terms.

Verification and implementation details
  • Both creation paths use CreateMonthAlignedSubscriptionOptions, keeping the billing policy in one place.
  • Existing endpoint coverage checks monthly/yearly creation for both customer paths and that updates request neither an anchor reset nor a trial. These tests use a fake Stripe client.
  • October 27 review found no actionable reviewer feedback or additional high-confidence defect. The merge leaves the two-file feature diff unchanged and preserves current subscription reconciliation and cancellation-credit behavior.
  • Commands: dotnet build Exceptionless.slnx --configuration Release -m:1; dotnet test --no-build --configuration Release -- --filter-class 'Exceptionless.Tests.Billing.StripeBillingClient*'; git diff origin/main...HEAD --check.
  • No public API, authorization, response-schema, configuration, UI, or persisted-data migration changes.

Copilot AI linked an issue May 31, 2026 that may be closed by this pull request
8 tasks
@CLAassistant

CLAassistant commented May 31, 2026 •

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
1 out of 2 committers have signed the CLA.

✅ niemyjski
❌ Copilot
You have signed the CLA already but the status is still pending? Let us recheck it.

Copilot AI changed the title [WIP] Fix plan tracking and invoice support with Stripe Align Stripe plan changes to first-of-month proration anchors Jun 1, 2026
Copilot AI requested a review from niemyjski June 1, 2026 00:00
@niemyjski

Copy link
Copy Markdown
Member

Follow-up reviewer-feedback and thermo-nuclear audit completed at head 0dec511f2cabc1658fb921ea3adca3b7538f92f8 against base dc940dd15c8d222d9764080622fdf4583d4546b8.

  • Feedback inventory/classification: GraphQL review threads: 0; inline review comments: 0; submitted reviews: 0. There are no human, Codex, or Copilot reviewer findings to reply to or resolve. The coverage-bot comment is current verification evidence and non-actionable. The CLAassistant comment is current and external: the Copilot co-author has not signed. The PR body's old helper-name snippet is outdated by the current CreateMonthAlignedSubscriptionOptions consolidation; the described behavior remains accurate.
  • RCA and surgical fix already on the live head: subscription-create branches assembled Stripe options independently and relied on implicit/default anchor/proration behavior. Commit 0dec511 centralizes the first-of-month UTC anchor and create_prorations policy for both creation paths; existing-subscription updates set create_prorations explicitly.
  • Thermo-nuclear result: reviewed the complete two-file effective diff (66 insertions, 7 deletions). No remaining branch-caused correctness, compatibility, authorization, serialization, race, partial-update, type/boundary, duplication, spaghetti, needless orchestration, or non-atomicity finding was proven. The production handler is 963 lines (945 on base); the test file was already over 1,000 lines and moved from 1,962 to 2,003 without crossing the threshold in this PR. No API contract/snapshot change is involved.
  • Verification: dotnet restore Exceptionless.slnx passed; dotnet build Exceptionless.slnx --no-restore --configuration Release -m:1 passed with 0 warnings/0 errors; the three focused plan-change tests each passed 1/1; git diff --check origin/main...HEAD passed; origin/main is an ancestor of head. Exact-head CI is green for version, test-api, test-client, test-e2e, and docker-build.

Verdict: code and CI are ready. The sole remaining external merge blocker is the pending Copilot contributor CLA.

@niemyjski

Copy link
Copy Markdown
Member

Final follow-up at head ce0c1dab3129fba781a304cdc3f180a5ed50e555 against current main d2dee90052d7ac229efc4777b719c8f7c3fe0f5b:

  • Re-audited GraphQL review threads, REST inline comments, submitted reviews, and the PR conversation: 0 review threads, 0 inline comments, and 0 submitted reviews. There are no actionable reviewer findings to reply to or resolve; CLA and coverage comments are administrative/verification signals.
  • Merge-forward commit ce0c1dab3 refreshed the branch without rebasing or changing the effective feature diff (still 2 files, 66 insertions, 7 deletions); git diff --check origin/main...HEAD passes.
  • Local verification: restore passed; Release build passed with 0 warnings/0 errors; the new existing-customer-without-subscription regression passed 1/1. Two separate local invocations were blocked after the PR-specific assertions by shared Elasticsearch test-* index contention from concurrent worktrees; no code change was justified from those environment failures.
  • Exact-head GitHub Actions run 31623005405 passed version, test-api (full API suite with coverage), test-client, test-e2e (including Aspire readiness and Playwright), and docker-build.

Code and CI are ready. The PR remains draft/mergeable; the only active blocking status is the external Copilot contributor CLA.

@niemyjski
niemyjski force-pushed the copilot/plan-upgrades branch from 5eb9dfb to 4380685 Compare September 16, 2026 00:29
@github-actions

Copy link
Copy Markdown

Code Coverage

Package Line Rate Branch Rate Complexity Health
Exceptionless.AppHost 23% 22% 130 ❌
Exceptionless.Core 78% 70% 10988 ✔
Exceptionless.Insulation 51% 43% 370 ➖
Exceptionless.Web 86% 72% 9429 ✔
Summary 81% (28647 / 35523) 70% (14329 / 20504) 20917 ✔

This branch has not been deployed

No deployments
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.

Plan Upgrades

3 participants