You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Filed by the repo:cloud execution PM seat (seat post objectstack#6026), session session_01TAUTP6Yky8QWoHUAPDKNJQ, at 2026-09-16T07:58Z, as the objectui half of cloud#2135. ⛔ Not graded or routed here beyond the lane label — that is the objectui seat's.
⚠️ Filed in this repo rather than in objectstack-ai/objectui because that repository is not reachable to this session's credential; this is the established seam carrier for that case (objectstack#18377 is the same shape).
What exists already, and what does not
The per-environment storage cap (产品负责人 adjudication 2026-09-08: Free 1 GB / Team 20 GB per environment; intercept attachment upload and bulk import only) is implemented and enforced on the cloud side:
GET /api/v1/usage/storage serves storageUsedMb / storageLimitMb and the same verdict that refuses an upload — served by StorageUsageEndpointPlugin, registered at packages/objectos-runtime/src/objectos-stack.ts:580.
An over-limit POST /api/v1/storage/upload/presigned answers 403 STORAGE_LIMIT_REACHED with an upgrade envelope. Proven end to end on the assembled host stack by cloud PR docs(skill): add the first automation eval — ADR-0044 revise loop #2300, including an ablation: with the guardrail removed the same request answers 200 with a real upload URL and a record is created on a full environment.
What has no renderer is the adjudication's warning half:
提醒:≥ 80% 环境管理员横幅「已用 X / Y」;≥ 100% 横幅升级为「已满,上传与导入已暂停」+ 升级入口。
cloud PR #2143's own landing note records that the banner renders in objectui and was out of scope there, and the cloud#2135 dev found no cloud-side owner for it. ⇒ Today a Free environment crosses 80% with nothing shown, and hits 100% by discovering that an upload fails.
What this card asks
An environment-admin banner driven by GET /api/v1/usage/storage:
≥ 80% — 「已用 X / Y」, informational.
≥ 100% — 「已满,上传与导入已暂停」 plus the upgrade entry point.
Visible to environment administrators. ⛔ Not to every member — the adjudication says 环境管理员.
⭐ Read the verdict, do not re-derive the threshold. The endpoint serves the same verdict the guardrail refuses with, precisely so that what the banner shows is what will block an upload. A UI that recomputes used/limit >= 0.8 locally will drift from the enforcement point the first time the rule changes, and the drift will be silent in the direction users notice last.
⛔ Out of scope here
The cloud side. The numbers, the endpoint, the verdict and the refusal are all landed and measured; ⛔ nothing in this card should change them. If the endpoint is missing a field the UI needs, that is a cloud card — say so rather than computing around it.
Provenance
cloud#2135 (the parent, whose runtime half is complete) · cloud#2131 (epic) · cloud PR #2143 (control plane + runtime) · cloud PR #2300 (the end-to-end proof) · docs/design/pricing.md Data volume row.
Filed by the
repo:cloudexecution PM seat (seat post objectstack#6026), sessionsession_01TAUTP6Yky8QWoHUAPDKNJQ, at 2026-09-16T07:58Z, as the objectui half of cloud#2135. ⛔ Not graded or routed here beyond the lane label — that is the objectui seat's.objectstack-ai/objectuibecause that repository is not reachable to this session's credential; this is the established seam carrier for that case (objectstack#18377 is the same shape).What exists already, and what does not
The per-environment storage cap (产品负责人 adjudication 2026-09-08: Free 1 GB / Team 20 GB per environment; intercept attachment upload and bulk import only) is implemented and enforced on the cloud side:
GET /api/v1/usage/storageservesstorageUsedMb/storageLimitMband the same verdict that refuses an upload — served byStorageUsageEndpointPlugin, registered atpackages/objectos-runtime/src/objectos-stack.ts:580.POST /api/v1/storage/upload/presignedanswers 403STORAGE_LIMIT_REACHEDwith an upgrade envelope. Proven end to end on the assembled host stack by cloud PR docs(skill): add the first automation eval — ADR-0044 revise loop #2300, including an ablation: with the guardrail removed the same request answers 200 with a real upload URL and a record is created on a full environment.What has no renderer is the adjudication's warning half:
cloud PR #2143's own landing note records that the banner renders in objectui and was out of scope there, and the cloud#2135 dev found no cloud-side owner for it. ⇒ Today a Free environment crosses 80% with nothing shown, and hits 100% by discovering that an upload fails.
What this card asks
An environment-admin banner driven by
GET /api/v1/usage/storage:⭐ Read the verdict, do not re-derive the threshold. The endpoint serves the same verdict the guardrail refuses with, precisely so that what the banner shows is what will block an upload. A UI that recomputes
used/limit >= 0.8locally will drift from the enforcement point the first time the rule changes, and the drift will be silent in the direction users notice last.⛔ Out of scope here
The cloud side. The numbers, the endpoint, the verdict and the refusal are all landed and measured; ⛔ nothing in this card should change them. If the endpoint is missing a field the UI needs, that is a cloud card — say so rather than computing around it.
Provenance
cloud#2135 (the parent, whose runtime half is complete) · cloud#2131 (epic) · cloud PR #2143 (control plane + runtime) · cloud PR #2300 (the end-to-end proof) ·
docs/design/pricing.mdData volume row.查重词
storage banner 80% 100%·STORAGE_LIMIT_REACHED banner·GET /api/v1/usage/storage renderer·环境管理员 容量横幅·storage quota console bannerGenerated by Claude Code