Repository navigation
Cloud plan entitlements honour cmuxVmPlan and company account grants, as classic Cloud does - #26817
Conversation
… as classic Cloud does NEXT Cloud read only cmuxPlan, so operator grants (cmuxVmPlan) and verified company-domain accounts (classic #21276) got no machines. CloudDO now reads cmuxVmPlan through TeamDO (cached, last copy kept on failure) and applies classic's precedence; a verified company account's personal team is Team (Max for a Max owner) with no machine cap. Machine limits only: the model router's paid gate and billing keep reading cmuxPlan. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
|
|
Owned by an agent session · session |
|
Bead |
This comment has been minimized.
This comment has been minimized.
…cts, Max exception on exact values) and classic's company email check Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6
…Cloud reads the raw cmuxPlan as classic does (router gate unchanged) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
…er grant read never overwrites a newer one Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6
…ata; a missing user is a tagged result, not a plan string Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6
…plan after cmuxVmPlan, as in classic Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6
…udDO's plan copy Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6
|
Found 5 test failures on Blacksmith runners: Failures
|
|
Review (codex gpt-6-astra): SHIP at 764b45c Independent review at high with fast mode, run on the full changed files and classic's matching code over seven rounds. Rounds 1 to 6 returned FIX; every finding was fixed with a test, except one answered with classic's own code (company Max follows the plan after cmuxVmPlan, web/services/vms/auth.ts:958). Round 7 returned SHIP with no findings at f67e4bf. This head is that commit plus a base merge. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40682236069 at 8114288 failed: cmux-next generated files. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40681979402 at d6c40eb failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40683834325 at 2645001 failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40683016589 at 9fbc12e failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40686413651 at a0c8bdb failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40684373512 at 42bbb37 failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40684174353 at 442849d failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40684605734 at 1048c0f failed: cmux-next generated files. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40684922462 at 28d9a7d failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40686199378 at c02ae48 failed: cmux-next Release compile (fleet fast check), cmux-next generated files. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40688911044 at 52bbe91 failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40690021866 at 1e8fb3c failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files. |
|
Shipped in:
|
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
What
NEXT Cloud machine limits now honour the two grants classic Cloud honours. Before this, NEXT read only
cmuxPlan.cmuxVmPlan: the operator grant on the sign-in record. NEXT applies classic's precedence (webservices/billing/teamResolution.tsbillingPlanIdFromMetadata):cmuxVmPlanwins overcmuxPlan;"free", or a blank or malformedcmuxVmPlan, stands. It is an operator restriction, so it also applies over a paid plan;cmuxPlanis normalized as classic does (" Max "is Max). The model router's exact-match paid gate is unchanged.services/billing/companyPlan.tshasCompanyPlanGrant(web: company email accounts are Team with no Cloud machine cap #21276), used inservices/vms/entitlements.tsresolveVmEntitlements. A verified email on cmux.com, manaflow.ai or manaflow.com gets Team, or Max when the person's own plan is Max, with no machine cap. In NEXT this applies to the account's personal team. Whether an account counts as a company account comes from UserDO's record of its verified email, checked with classic'sisAdminEmailrules (plain local part, an exact domain, no subdomains or lookalikes), never from a client claim.How it works:
TeamDO.cloudVmPlan(newcloud-vm-plan.ts) readscmuxVmPlanfrom the same sign-in record ascmuxPlan: the owner's user record for a personal team, the Stack team's record for a shared one. It caches the value for 10 minutes, keeps the last copy if the sign-in service fails, and never lets an older answer overwrite a newer one.CloudEntitlementStorecombines the two grants with the paid plan.cloud-plan.tsaddscloudPlanId,companyPlanKeyand the company limits: Team or Max limits withmax_activeout of reach, which matches classic'smaxActiveVms: null.Why
Leo, 2026-10-28: "whatever's convenient for cloud, like that can be productionized, operationalized, we ought to just put out there"
Leo, 2026-10-28: "'pay money to us'"
Before paid Cloud entitlements go on in production, staff and operator-granted accounts would get
cloud.plan.requiredin NEXT, even though classic gives them machines.What it does not change: nobody pays differently
These grants only set Cloud machine limits.
TeamDO.inferencePlan, which the model router's paid gate, included credits and usage billing read, still readscmuxPlanonly. A test checks that acmuxVmPlan-granted account stays unpaid there. No Stripe, checkout or metering code changes.Risk
Low to medium. The change only acts where
CLOUD_PLAN_ENTITLEMENTSis on (development and staging; production is off and held in #26757).cloud.plan.getrefreshes its plan.cmuxPlan.Tested
On a Linux CI box (
cmux-ci test):typecheckandlint:sizepassed;vitestpassed 124/124 acrosscloud-plan-overrides.test.ts(new),cloud-plan-entitlements.test.ts,cloud-plan-production.test.ts,team-stack-webhook-review2.test.ts,cloud-routes.test.ts,cloud-do.test.tsand thetest/inferencesuites.The new tests cover:
cmuxPlan/cmuxVmPlancases with classic's exact precedence, including blank overrides and padded values;isAdminEmailcases;ADMIN_EMAIL_DOMAINS(a parity test);cmuxVmPlanvalue (absent, blank, non-string, too long);cmuxPlancounting for machines while the router's gate stays unpaid;cmuxVmPlanvalues "company", "company_max", "user_gone" and "enterprise" on a record restricting and granting nothing.Agent session: agent session
🤖 Generated with Claude Code