Skip to content

feat: Remove annual option except for existing annual plans#3967

Merged
calvin-codecov merged 2 commits intomainfrom
cy/allow_annual_upgrade_2
Jan 23, 2026
Merged

feat: Remove annual option except for existing annual plans#3967
calvin-codecov merged 2 commits intomainfrom
cy/allow_annual_upgrade_2

Conversation

@calvin-codecov
Copy link
Contributor

@calvin-codecov calvin-codecov commented Jan 21, 2026

Closes https://linear.app/getsentry/issue/CCMRG-2016/allow-yearly-plan-upgrades-for-current-customers

  • Reverts previous PR that removed yearly plan completely
  • 1st commit is revert putting back annual plans; 2nd commit is new changes
  • Adds commit to only show yearly plan for upgrades if user is currently on a yearly plan
  • Add changes for handling possible missing plans from API

Note

Restores annual billing support with strict gating and broad UI/logic updates.

  • Gate annual plan visibility/selection by current billingRate; monthly users see only monthly options across Pro/Sentry/Team upgrade flows
  • Update ProPlanDetails, SentryPlanDetails, TeamPlanDetails to render correct monthly/annual pricing, disclaimers, and show fallbacks when plan variants are missing
  • Refactor upgrade form controllers (Pro/Sentry/Team): pass newPlan, sync radio selection, and compute monthly vs annual totals, savings, and next billing dates in PriceCallouts
  • Simplify ActionsBilling: remove buttonOptions, always link upgrade?plan=pro, and fix A import path
  • Improve billing card: safely compute next bill price with null guard; hide "next billing date" for free plans
  • Copy tweaks: pricing line now "$X per user billed monthly" in Team plan card
  • Extensive test updates to cover annual gating, pricing displays, link params, and error states

Written by Cursor Bugbot for commit 86d4b1a. This will update automatically on new commits. Configure here.

@linear
Copy link

linear bot commented Jan 21, 2026

@sentry
Copy link

sentry bot commented Jan 21, 2026

Codecov Report

❌ Patch coverage is 91.71429% with 29 lines in your changes missing coverage. Please review.
✅ Project coverage is 98.57%. Comparing base (537d8dc) to head (86d4b1a).
⚠️ Report is 1 commits behind head on main.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
...rs/ProPlanController/PriceCallout/PriceCallout.tsx 78.94% 4 Missing ⚠️
...SentryPlanController/PriceCallout/PriceCallout.tsx 82.60% 4 Missing ⚠️
...s/TeamPlanController/PriceCallout/PriceCallout.tsx 78.94% 4 Missing ⚠️
...Page/subRoutes/UpgradePlanPage/UpgradePlanPage.jsx 89.47% 4 Missing ⚠️
...e/UpgradeDetails/ProPlanDetails/ProPlanDetails.jsx 84.61% 2 Missing ⚠️
...adeDetails/SentryPlanDetails/SentryPlanDetails.jsx 81.81% 2 Missing ⚠️
...UpgradeDetails/TeamPlanDetails/TeamPlanDetails.jsx 84.61% 2 Missing ⚠️
...ers/TeamPlanController/ErrorBanner/ErrorBanner.tsx 86.66% 2 Missing ⚠️
...OrgPlan/BillingDetails/PaymentCard/PaymentCard.jsx 93.33% 1 Missing ⚠️
...roPlanController/BillingOptions/BillingOptions.tsx 97.56% 1 Missing ⚠️
... and 3 more
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3967      +/-   ##
==========================================
- Coverage   98.73%   98.57%   -0.16%     
==========================================
  Files         826      826              
  Lines       14983    15232     +249     
  Branches     4287     4466     +179     
==========================================
+ Hits        14793    15015     +222     
- Misses        182      210      +28     
+ Partials        8        7       -1     
Files with missing lines Coverage Δ
...TeamPlanSpecialOffer/TeamPlanCard/TeamPlanCard.tsx 100.00% <ø> (ø)
...lan/BillingDetails/PaymentCard/CardInformation.jsx 100.00% <100.00%> (ø)
...ard/FreePlanCard/PlanUpgradePro/PlanUpgradePro.jsx 100.00% <ø> (ø)
...tPlanCard/shared/ActionsBilling/ActionsBilling.jsx 100.00% <100.00%> (ø)
...adePlanPage/UpgradeForm/Controllers/Controller.tsx 100.00% <100.00%> (ø)
...ontrollers/ProPlanController/ProPlanController.tsx 100.00% <ø> (ø)
...lers/SentryPlanController/SentryPlanController.tsx 100.00% <ø> (ø)
...trollers/TeamPlanController/TeamPlanController.tsx 100.00% <ø> (ø)
...dePlanPage/UpgradeForm/UpdateBlurb/UpdateBlurb.tsx 100.00% <100.00%> (ø)
...Routes/UpgradePlanPage/UpgradeForm/UpgradeForm.tsx 89.74% <ø> (ø)
... and 15 more
Components Coverage Δ
Assets 100.00% <ø> (ø)
Layouts 99.71% <ø> (ø)
Pages 98.07% <91.34%> (-0.28%) ⬇️
Services 99.32% <ø> (ø)
Shared 99.06% <100.00%> (+0.05%) ⬆️
UI 99.01% <ø> (ø)

Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 537d8dc...86d4b1a. Read the comment docs.

@codecov-notifications
Copy link

codecov-notifications bot commented Jan 21, 2026

Codecov Report

❌ Patch coverage is 91.71429% with 29 lines in your changes missing coverage. Please review.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
...rs/ProPlanController/PriceCallout/PriceCallout.tsx 78.94% 4 Missing ⚠️
...SentryPlanController/PriceCallout/PriceCallout.tsx 82.60% 4 Missing ⚠️
...s/TeamPlanController/PriceCallout/PriceCallout.tsx 78.94% 4 Missing ⚠️
...Page/subRoutes/UpgradePlanPage/UpgradePlanPage.jsx 89.47% 4 Missing ⚠️
...e/UpgradeDetails/ProPlanDetails/ProPlanDetails.jsx 84.61% 2 Missing ⚠️
...adeDetails/SentryPlanDetails/SentryPlanDetails.jsx 81.81% 2 Missing ⚠️
...UpgradeDetails/TeamPlanDetails/TeamPlanDetails.jsx 84.61% 2 Missing ⚠️
...ers/TeamPlanController/ErrorBanner/ErrorBanner.tsx 86.66% 2 Missing ⚠️
...OrgPlan/BillingDetails/PaymentCard/PaymentCard.jsx 93.33% 1 Missing ⚠️
...roPlanController/BillingOptions/BillingOptions.tsx 97.56% 1 Missing ⚠️
... and 3 more
@@            Coverage Diff             @@
##             main    #3967      +/-   ##
==========================================
- Coverage   98.73%   98.57%   -0.16%     
==========================================
  Files         826      826              
  Lines       14983    15232     +249     
  Branches     4287     4466     +179     
==========================================
+ Hits        14793    15015     +222     
- Misses        182      210      +28     
+ Partials        8        7       -1     
Files with missing lines Coverage Δ
...TeamPlanSpecialOffer/TeamPlanCard/TeamPlanCard.tsx 100.00% <ø> (ø)
...lan/BillingDetails/PaymentCard/CardInformation.jsx 100.00% <100.00%> (ø)
...ard/FreePlanCard/PlanUpgradePro/PlanUpgradePro.jsx 100.00% <ø> (ø)
...tPlanCard/shared/ActionsBilling/ActionsBilling.jsx 100.00% <100.00%> (ø)
...adePlanPage/UpgradeForm/Controllers/Controller.tsx 100.00% <100.00%> (ø)
...ontrollers/ProPlanController/ProPlanController.tsx 100.00% <ø> (ø)
...lers/SentryPlanController/SentryPlanController.tsx 100.00% <ø> (ø)
...trollers/TeamPlanController/TeamPlanController.tsx 100.00% <ø> (ø)
...dePlanPage/UpgradeForm/UpdateBlurb/UpdateBlurb.tsx 100.00% <100.00%> (ø)
...Routes/UpgradePlanPage/UpgradeForm/UpgradeForm.tsx 89.74% <ø> (ø)
... and 15 more
Components Coverage Δ
Assets 100.00% <ø> (ø)
Layouts 99.71% <ø> (ø)
Pages 98.07% <91.34%> (-0.28%) ⬇️
Services 99.32% <ø> (ø)
Shared 99.06% <100.00%> (+0.05%) ⬆️
UI 99.01% <ø> (ø)

Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 537d8dc...86d4b1a. Read the comment docs.

@codecov-releaser
Copy link
Collaborator

codecov-releaser commented Jan 21, 2026

✅ Deploy preview for gazebo ready!

Previews expire after 1 month automatically.

Storybook

Commit Created Cloud Enterprise
75b2a46 Wed, 21 Jan 2026 00:09:58 GMT Expired Expired
20b5921 Wed, 21 Jan 2026 00:42:05 GMT Expired Expired
3af79df Thu, 22 Jan 2026 20:02:54 GMT Expired Expired
e28f4fa Thu, 22 Jan 2026 22:00:16 GMT Expired Expired
09376a5 Thu, 22 Jan 2026 22:54:33 GMT Expired Expired
589de52 Thu, 22 Jan 2026 23:03:21 GMT Expired Expired
4398dae Thu, 22 Jan 2026 23:39:34 GMT Expired Expired
39b1e4f Fri, 23 Jan 2026 00:28:20 GMT Expired Expired
b623897 Fri, 23 Jan 2026 18:21:58 GMT Expired Expired
86d4b1a Fri, 23 Jan 2026 18:43:22 GMT Cloud Enterprise

@codecov-qa
Copy link

codecov-qa bot commented Jan 21, 2026

Codecov Report

❌ Patch coverage is 91.71429% with 29 lines in your changes missing coverage. Please review.
✅ Project coverage is 98.57%. Comparing base (537d8dc) to head (86d4b1a).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
...rs/ProPlanController/PriceCallout/PriceCallout.tsx 78.94% 4 Missing ⚠️
...SentryPlanController/PriceCallout/PriceCallout.tsx 82.60% 4 Missing ⚠️
...s/TeamPlanController/PriceCallout/PriceCallout.tsx 78.94% 4 Missing ⚠️
...Page/subRoutes/UpgradePlanPage/UpgradePlanPage.jsx 89.47% 4 Missing ⚠️
...e/UpgradeDetails/ProPlanDetails/ProPlanDetails.jsx 84.61% 2 Missing ⚠️
...adeDetails/SentryPlanDetails/SentryPlanDetails.jsx 81.81% 2 Missing ⚠️
...UpgradeDetails/TeamPlanDetails/TeamPlanDetails.jsx 84.61% 2 Missing ⚠️
...ers/TeamPlanController/ErrorBanner/ErrorBanner.tsx 86.66% 2 Missing ⚠️
...OrgPlan/BillingDetails/PaymentCard/PaymentCard.jsx 93.33% 1 Missing ⚠️
...roPlanController/BillingOptions/BillingOptions.tsx 97.56% 1 Missing ⚠️
... and 3 more
@@            Coverage Diff             @@
##             main    #3967      +/-   ##
==========================================
- Coverage   98.73%   98.57%   -0.16%     
==========================================
  Files         826      826              
  Lines       14983    15232     +249     
  Branches     4287     4466     +179     
==========================================
+ Hits        14793    15015     +222     
- Misses        182      210      +28     
+ Partials        8        7       -1     
Files with missing lines Coverage Δ
...TeamPlanSpecialOffer/TeamPlanCard/TeamPlanCard.tsx 100.00% <ø> (ø)
...lan/BillingDetails/PaymentCard/CardInformation.jsx 100.00% <100.00%> (ø)
...ard/FreePlanCard/PlanUpgradePro/PlanUpgradePro.jsx 100.00% <ø> (ø)
...tPlanCard/shared/ActionsBilling/ActionsBilling.jsx 100.00% <100.00%> (ø)
...adePlanPage/UpgradeForm/Controllers/Controller.tsx 100.00% <100.00%> (ø)
...ontrollers/ProPlanController/ProPlanController.tsx 100.00% <ø> (ø)
...lers/SentryPlanController/SentryPlanController.tsx 100.00% <ø> (ø)
...trollers/TeamPlanController/TeamPlanController.tsx 100.00% <ø> (ø)
...dePlanPage/UpgradeForm/UpdateBlurb/UpdateBlurb.tsx 100.00% <100.00%> (ø)
...Routes/UpgradePlanPage/UpgradeForm/UpgradeForm.tsx 89.74% <ø> (ø)
... and 15 more
Components Coverage Δ
Assets 100.00% <ø> (ø)
Layouts 99.71% <ø> (ø)
Pages 98.07% <91.34%> (-0.28%) ⬇️
Services 99.32% <ø> (ø)
Shared 99.06% <100.00%> (+0.05%) ⬆️
UI 99.01% <ø> (ø)

Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 537d8dc...86d4b1a. Read the comment docs.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

cursor[bot]

This comment was marked as outdated.

@calvin-codecov calvin-codecov force-pushed the cy/allow_annual_upgrade_2 branch from 75b2a46 to 20b5921 Compare January 21, 2026 00:36
cursor[bot]

This comment was marked as outdated.

@sentry
Copy link

sentry bot commented Jan 21, 2026

Bundle Report

Changes will increase total bundle size by 17.12kB (0.14%) ⬆️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
gazebo-production-system 6.24MB 8.0kB (0.13%) ⬆️
gazebo-production-esm 6.32MB 9.12kB (0.14%) ⬆️

Affected Assets, Files, and Routes:

view changes for bundle: gazebo-production-system

Assets Changed:

Asset Name Size Change Total Size Change (%)
assets/index-legacy.*.js -4 bytes 115.08kB -0.0%
assets/index-legacy.*.js -1 bytes 11.79kB -0.01%
assets/index-legacy.*.js -1 bytes 12.66kB -0.01%
assets/index-legacy.*.js -1 bytes 12.28kB -0.01%
assets/index-legacy.*.js -1 bytes 8.57kB -0.01%
assets/index-legacy.*.js -1 bytes 21.1kB -0.0%
assets/index-legacy.*.js 51 bytes 16.62kB 0.31%
assets/index-legacy.*.js -3 bytes 9.46kB -0.03%
assets/index-legacy.*.js -1 bytes 16.8kB -0.01%
assets/index-legacy.*.js 20 bytes 716.85kB 0.0%
assets/index-legacy.*.js 7.83kB 31.04kB 33.75% ⚠️
assets/index-legacy.*.js -2 bytes 45.41kB -0.0%
assets/index-legacy.*.js -1 bytes 11.39kB -0.01%
assets/index-legacy.*.js 51 bytes 2.7kB 1.92%
assets/index-legacy.*.js -2 bytes 35.21kB -0.01%
assets/index-legacy.*.js -4 bytes 84.77kB -0.0%
assets/index-legacy.*.js -2 bytes 7.4kB -0.03%
assets/index-legacy.*.js -2 bytes 5.63kB -0.04%
assets/index-legacy.*.js 3.09kB 29.4kB 11.73% ⚠️
assets/index-legacy.*.js -1 bytes 41.39kB -0.0%
assets/index-legacy.*.js -111 bytes 9.38kB -1.17%
assets/index-legacy.*.js 13.53kB 26.31kB 105.87% ⚠️
assets/index-legacy.*.js -1 bytes 4.41kB -0.02%
assets/index-legacy.*.js -2 bytes 49.41kB -0.0%
assets/index-legacy.*.js -2 bytes 7.81kB -0.03%
assets/index-legacy.*.js -2 bytes 113.07kB -0.0%
assets/index-legacy.*.js -40.47kB 12.78kB -76.0%
assets/RawFileViewer-legacy.*.js -1 bytes 127.36kB -0.0%
assets/BillingDetails-legacy.*.js (New) 26.89kB 26.89kB 100.0% 🚀
assets/ConfigureCachedBundleModal-legacy.*.js -5 bytes 7.87kB -0.06%
assets/useInvoices-legacy.*.js -723 bytes 2.53kB -22.25%
assets/propTypes-legacy.*.js (New) 819 bytes 819 bytes 100.0% 🚀
assets/upgradeForm-legacy.*.js (Deleted) -2.94kB 0 bytes -100.0% 🗑️

Files in assets/index-legacy.*.js:

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/ProPlanDetails/ProPlanDetails.jsx → Total Size: 4.24kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/SentryPlanController/SentryPlanController.tsx → Total Size: 1.64kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/SentryPlanController/BillingOptions/BillingOptions.tsx → Total Size: 3.4kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/SentryPlanDetails/SentryPlanDetails.jsx → Total Size: 4.11kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/ProPlanController/BillingOptions/BillingOptions.tsx → Total Size: 3.37kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/ProPlanController/ProPlanController.tsx → Total Size: 1.63kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/TeamPlanDetails/TeamPlanDetails.jsx → Total Size: 4.21kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/SentryPlanController/PriceCallout/PriceCallout.tsx → Total Size: 3.89kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/ProPlanController/PriceCallout/PriceCallout.tsx → Total Size: 2.99kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/Controller.tsx → Total Size: 739 bytes

Files in assets/index-legacy.*.js:

  • ./src/pages/PlanPage/subRoutes/CurrentOrgPlan/CurrentPlanCard/FreePlanCard/PlanUpgradePro/PlanUpgradePro.jsx → Total Size: 3.47kB

  • ./src/pages/PlanPage/subRoutes/CurrentOrgPlan/CurrentPlanCard/shared/ActionsBilling/ActionsBilling.jsx → Total Size: 3.93kB

Files in assets/index-legacy.*.js:

  • ./src/pages/PlanPage/subRoutes/CancelPlanPage/subRoutes/TeamPlanSpecialOffer/TeamPlanCard/TeamPlanCard.tsx → Total Size: 2.17kB

Files in assets/BillingDetails-legacy.*.js:

  • ./src/pages/PlanPage/subRoutes/CurrentOrgPlan/BillingDetails/PaymentCard/CardInformation.jsx → Total Size: 2.26kB

  • ./src/pages/PlanPage/subRoutes/CurrentOrgPlan/BillingDetails/PaymentCard/PaymentCard.jsx → Total Size: 4.4kB

view changes for bundle: gazebo-production-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
assets/index.*.js -2 bytes 14.24kB -0.01%
assets/index.*.js -1 bytes 4.6kB -0.02%
assets/index.*.js -1 bytes 12.43kB -0.01%
assets/index.*.js 8.9kB 33.99kB 35.48% ⚠️
assets/index.*.js -3 bytes 9.58kB -0.03%
assets/index.*.js -2 bytes 7.75kB -0.03%
assets/index.*.js -1 bytes 13.62kB -0.01%
assets/index.*.js 55 bytes 2.54kB 2.22%
assets/index.*.js -1.14kB 31.14kB -3.53%
assets/index.*.js -116 bytes 9.8kB -1.17%
assets/index.*.js -1 bytes 8.58kB -0.01%
assets/index.*.js 50 bytes 16.9kB 0.3%
assets/index.*.js -1 bytes 22.37kB -0.0%
assets/index.*.js -9 bytes 126.54kB -0.01%
assets/index.*.js -2 bytes 125.68kB -0.0%
assets/index.*.js -2 bytes 36.76kB -0.01%
assets/index.*.js 3 bytes 5.86kB 0.05%
assets/index.*.js -2 bytes 49.15kB -0.0%
assets/index.*.js -1 bytes 12.42kB -0.01%
assets/index.*.js -4 bytes 90.02kB -0.0%
assets/index.*.js -2 bytes 7.45kB -0.03%
assets/index.*.js -1.14kB 32.27kB -3.41%
assets/index.*.js 7.14kB 33.41kB 27.19% ⚠️
assets/index.*.js 9.04kB 26.27kB 52.51% ⚠️
assets/index.*.js 4.94kB 17.22kB 40.2% ⚠️
assets/index.*.js 20 bytes 639.39kB 0.0%
assets/index.*.js -1 bytes 41.88kB -0.0%
assets/index.*.js 9.77kB 12.28kB 387.65% ⚠️
assets/index.*.js -2 bytes 53.59kB -0.0%
assets/index.*.js -54.26kB 2.52kB -95.56%
assets/RawFileViewer.*.js -1 bytes 127.15kB -0.0%
assets/BillingDetails.*.js (New) 29.07kB 29.07kB 100.0% 🚀
assets/ConfigureCachedBundleModal.*.js -5 bytes 8.31kB -0.06%
assets/useInvoices.*.js -711 bytes 2.5kB -22.18%
assets/Alert.*.js 5 bytes 2.21kB 0.23%
assets/BenefitList.*.js -5 bytes 1.47kB -0.34%
assets/Checkbox.*.js 5 bytes 976 bytes 0.51%
assets/TotalsNumber.*.js 5 bytes 834 bytes 0.6%
assets/propTypes.*.js (New) 731 bytes 731 bytes 100.0% 🚀
assets/upgradeForm.*.js (Deleted) -3.19kB 0 bytes -100.0% 🗑️

Files in assets/index.*.js:

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/Controller.tsx → Total Size: 739 bytes

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/TeamPlanDetails/TeamPlanDetails.jsx → Total Size: 4.21kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/ProPlanController/ProPlanController.tsx → Total Size: 1.63kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/ProPlanController/PriceCallout/PriceCallout.tsx → Total Size: 2.99kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/SentryPlanDetails/SentryPlanDetails.jsx → Total Size: 4.11kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/ProPlanController/BillingOptions/BillingOptions.tsx → Total Size: 3.37kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/SentryPlanController/PriceCallout/PriceCallout.tsx → Total Size: 3.89kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/SentryPlanController/BillingOptions/BillingOptions.tsx → Total Size: 3.4kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/ProPlanDetails/ProPlanDetails.jsx → Total Size: 4.24kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/SentryPlanController/SentryPlanController.tsx → Total Size: 1.64kB

Files in assets/index.*.js:

  • ./src/pages/PlanPage/subRoutes/CurrentOrgPlan/CurrentPlanCard/shared/ActionsBilling/ActionsBilling.jsx → Total Size: 3.93kB

  • ./src/pages/PlanPage/subRoutes/CurrentOrgPlan/CurrentPlanCard/FreePlanCard/PlanUpgradePro/PlanUpgradePro.jsx → Total Size: 3.47kB

Files in assets/index.*.js:

  • ./src/pages/PlanPage/subRoutes/CancelPlanPage/subRoutes/TeamPlanSpecialOffer/TeamPlanCard/TeamPlanCard.tsx → Total Size: 2.17kB

Files in assets/BillingDetails.*.js:

  • ./src/pages/PlanPage/subRoutes/CurrentOrgPlan/BillingDetails/PaymentCard/PaymentCard.jsx → Total Size: 4.4kB

  • ./src/pages/PlanPage/subRoutes/CurrentOrgPlan/BillingDetails/PaymentCard/CardInformation.jsx → Total Size: 2.26kB

@codecov-public-qa
Copy link

codecov-public-qa bot commented Jan 22, 2026

Codecov Report

Attention: Patch coverage is 91.71429% with 29 lines in your changes missing coverage. Please review.

Project coverage is 98.57%. Comparing base (537d8dc) to head (86d4b1a).
Report is 1 commits behind head on main.

✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
...rs/ProPlanController/PriceCallout/PriceCallout.tsx 78.94% 4 Missing ⚠️
...SentryPlanController/PriceCallout/PriceCallout.tsx 82.60% 4 Missing ⚠️
...s/TeamPlanController/PriceCallout/PriceCallout.tsx 78.94% 4 Missing ⚠️
...Page/subRoutes/UpgradePlanPage/UpgradePlanPage.jsx 89.47% 4 Missing ⚠️
...e/UpgradeDetails/ProPlanDetails/ProPlanDetails.jsx 84.61% 2 Missing ⚠️
...adeDetails/SentryPlanDetails/SentryPlanDetails.jsx 81.81% 2 Missing ⚠️
...UpgradeDetails/TeamPlanDetails/TeamPlanDetails.jsx 84.61% 2 Missing ⚠️
...ers/TeamPlanController/ErrorBanner/ErrorBanner.tsx 86.66% 2 Missing ⚠️
...OrgPlan/BillingDetails/PaymentCard/PaymentCard.jsx 93.33% 1 Missing ⚠️
...roPlanController/BillingOptions/BillingOptions.tsx 97.56% 1 Missing ⚠️
... and 3 more
@@            Coverage Diff             @@
##             main    #3967      +/-   ##
==========================================
- Coverage   98.73%   98.57%   -0.16%     
==========================================
  Files         826      826              
  Lines       14983    15232     +249     
  Branches     4292     4458     +166     
==========================================
+ Hits        14793    15015     +222     
- Misses        182      210      +28     
+ Partials        8        7       -1     
Files with missing lines Coverage Δ
...TeamPlanSpecialOffer/TeamPlanCard/TeamPlanCard.tsx 100.00% <ø> (ø)
...lan/BillingDetails/PaymentCard/CardInformation.jsx 100.00% <100.00%> (ø)
...ard/FreePlanCard/PlanUpgradePro/PlanUpgradePro.jsx 100.00% <ø> (ø)
...tPlanCard/shared/ActionsBilling/ActionsBilling.jsx 100.00% <100.00%> (ø)
...adePlanPage/UpgradeForm/Controllers/Controller.tsx 100.00% <100.00%> (ø)
...ontrollers/ProPlanController/ProPlanController.tsx 100.00% <ø> (ø)
...lers/SentryPlanController/SentryPlanController.tsx 100.00% <ø> (ø)
...trollers/TeamPlanController/TeamPlanController.tsx 100.00% <ø> (ø)
...dePlanPage/UpgradeForm/UpdateBlurb/UpdateBlurb.tsx 100.00% <100.00%> (ø)
...Routes/UpgradePlanPage/UpgradeForm/UpgradeForm.tsx 89.74% <ø> (ø)
... and 15 more
Components Coverage Δ
Assets 100.00% <ø> (ø)
Layouts 99.71% <ø> (ø)
Pages 98.07% <91.34%> (-0.28%) ⬇️
Services 99.32% <ø> (ø)
Shared 99.06% <100.00%> (+0.05%) ⬆️
UI 99.01% <ø> (ø)

Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 537d8dc...86d4b1a. Read the comment docs.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

cursor[bot]

This comment was marked as outdated.

@calvin-codecov calvin-codecov changed the title Cy/allow annual upgrade 2 feat: Remove annual option except for existing annual plans Jan 22, 2026
@calvin-codecov calvin-codecov force-pushed the cy/allow_annual_upgrade_2 branch from 3af79df to e28f4fa Compare January 22, 2026 21:55
cursor[bot]

This comment was marked as outdated.

@calvin-codecov calvin-codecov force-pushed the cy/allow_annual_upgrade_2 branch from 589de52 to 4398dae Compare January 22, 2026 23:34
cursor[bot]

This comment was marked as outdated.

cursor[bot]

This comment was marked as outdated.

@calvin-codecov calvin-codecov force-pushed the cy/allow_annual_upgrade_2 branch from 39b1e4f to b623897 Compare January 23, 2026 18:16
<p className="text-ds-gray-senary">
over 5 users is ${sentryAnnualUnitPrice} per user/month, billed
annually
over 5 users is ${sentryMonthlyUnitPrice} per user/month, billed
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This shows from Dev plan so we only need to show monthly

<div className="text-xs">
<p className="font-semibold">
<span className="text-2xl">${yearlyUnitPrice}</span> per
<span className="text-2xl">${monthlyUnitPrice}</span> per
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Same: this is from free so we only need to show monthly

<A
to={{
pageName: 'upgradeOrgPlan',
options: { params: { plan: 'pro' } },
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Adding this to add "pro" plan url param to be more explicit for other parts of the code

cursor[bot]

This comment was marked as outdated.

@calvin-codecov calvin-codecov force-pushed the cy/allow_annual_upgrade_2 branch from b623897 to 86d4b1a Compare January 23, 2026 18:37
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

// Don't render if no corresponding plans are available
if (!proPlanMonth && !proPlanYear) {
return null
}
Copy link

Choose a reason for hiding this comment

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

Incomplete plan availability check renders empty billing options

Medium Severity

The null check if (!planMonth && !planYear) only handles when both plans are missing. However, the annual radio button only renders when currentPlanBillingRate === BillingRate.ANNUALLY && planYear, and the monthly button only renders when planMonth exists. If only the yearly plan exists but the user is not on an annual plan, neither button renders, leaving users with the "Step 2: Choose a billing cycle" heading and an empty radio group with no pricing information displayed.

Additional Locations (2)

Fix in Cursor Fix in Web

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Going to leave this for now. This is a highly edge-case situation and without those plans, the user shouldn't have anything viable to change to anyways.

@calvin-codecov calvin-codecov added this pull request to the merge queue Jan 23, 2026
Merged via the queue into main with commit bd05f38 Jan 23, 2026
54 of 66 checks passed
@calvin-codecov calvin-codecov deleted the cy/allow_annual_upgrade_2 branch January 23, 2026 20:27
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.

3 participants