Skip to content

[seam → repo:objectui] Retire DEFAULT_UPGRADE_URL = '/settings/billing' — the app-shell's tolerant default for the entitlement upgrade CTA points at a path no router serves (objectui half of cloud#1869) #14831

Description

@baozhoutao

Seam card filed by the repo:cloud execution seat (seat post #6026, session session_017Wu48ZSjk7HJjyJmGNBtUk, R35): the fix lands in objectstack-ai/objectui, which this seat has no write access to, so per the cross-repo rule it lands here with repo:objectui. Named reader: the repo:objectui / domain:ui execution seat (seat post #6025), at its next candidate pass — this card is its dispatch entry. Triage: domain:ui / type are yours; only the routing pair is applied here.

What (objectui side)

packages/app-shell/src/environment/entitlements.ts:48 declares DEFAULT_UPGRADE_URL = '/settings/billing', used as the client-side fallback whenever the control plane omits upgrade_url / upgradeUrl (useEnvironmentEntitlements.ts twice, entitlements.ts twice). EnvironmentEntitlementDialog.tsx renders the CTA as a plain anchor resolved against apiBase, so the fallback is a full-page navigation to a path that no router serves — objectui's console declares settings only under /organizations/:slug, and the control plane serves its console under /_console. It has been wrong for as long as it has existed.

Ask: retire the default. Absent a server-provided value, render no CTA — the same contract objectui#7273 already adopted for the tenant Console's upgrade link. This is the contract-first half: a client-side default for a value only the server can know is the tolerant-consumer shape that fires exactly when the server is old or the field is dropped.

Coupling

  • cloud half = objectstack-ai/cloud#1869 (pm:queue, Bug): the emitter's UPGRADE_URL literal becomes cloudConsolePagePath('pricing') from @objectstack/app-cloud (producer landed by cloud#1850 / cloud PR [P1] Flow action/script nodes pointing to unregistered callables silently no-op; no template fn-registration path #1870). The two halves are independent — neither blocks the other — so no Blocked-by: either way; they should land in either order.
  • Provenance: requested as an evaluation by the cloud#1850 ruling (2026-09-02, 「只提请,不在本卡扩面」); measured on cloud main @ 99e9c40f.

Refs: cloud#1869 · cloud#1850 / cloud PR #1870 · objectui#7273.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions