背景(cloud#1850 裁 A 的 framework 半边;维护者 2026-09-02 在场裁定)
租户运行时的 SPA 在 AI 额度耗尽时给出「升级」入口,但 /api/v1/runtime/config 只下发 cloud 的 origin,没有任何控制面声明的升级/计费页 URL。objectui(objectstack-ai/objectui#7273)已把消费侧改为「只用 origin、不再客户端拼路径;有键则渲染、无键不渲染」。控制面自己两处对这个 URL 的拼法都不一致(billing.ts vs environment-lifecycle.ts),证明消费侧推导不可能稳定。
裁决 A:/api/v1/runtime/config 下发绝对 URL
packages/cloud-connection(@objectstack/cloud-connection)在 runtime config 载荷上声明一个可选键,值为控制面升级/计费入口的绝对 URL(命名按该载荷既有键风格,PR 正文说明;缺省不下发)。
- 类型与(若有)zod/契约测试同步;README/文档中该载荷的字段表加一行。
- cloud 侧子类填值(cloud#1850 的另一半)在 pin bump 后落地,⛔ 不在本卡做;本卡 PR 正文写明 cloud 侧要填的键名与语义。
契约面
扩大公开载荷 ⇒ Clause-②: yes(契约复审档)。本卡是 epic objectstack-ai/cloud#1841 的 sub-issue。
验收
新键可选、缺省不出现在响应里;类型导出;一条契约测试覆盖「声明了就原样透传、没声明就不出现」;changeset minor。
背景(cloud#1850 裁 A 的 framework 半边;维护者 2026-09-02 在场裁定)
租户运行时的 SPA 在 AI 额度耗尽时给出「升级」入口,但
/api/v1/runtime/config只下发 cloud 的 origin,没有任何控制面声明的升级/计费页 URL。objectui(objectstack-ai/objectui#7273)已把消费侧改为「只用 origin、不再客户端拼路径;有键则渲染、无键不渲染」。控制面自己两处对这个 URL 的拼法都不一致(billing.tsvsenvironment-lifecycle.ts),证明消费侧推导不可能稳定。裁决 A:
/api/v1/runtime/config下发绝对 URLpackages/cloud-connection(@objectstack/cloud-connection)在 runtime config 载荷上声明一个可选键,值为控制面升级/计费入口的绝对 URL(命名按该载荷既有键风格,PR 正文说明;缺省不下发)。契约面
扩大公开载荷 ⇒ Clause-②: yes(契约复审档)。本卡是 epic objectstack-ai/cloud#1841 的 sub-issue。
验收
新键可选、缺省不出现在响应里;类型导出;一条契约测试覆盖「声明了就原样透传、没声明就不出现」;changeset minor。