Plans and billing correction for organization states
Goal: an org sees its real plan and what it does or doesn't include, and an operator edits plans without ambiguity.
- Pending self-service org on `(default)`: Plan page shows the applied-for plan or "No plan yet"; the guide's Choose plan step can be completed.
- A plan-gated page (e.g. Billing › Jaah AI) shows the "not included" line with a Subscription link, never an empty tab.
- Plan form: per-field "inherit (default)" vs own empty value; cron minimum period in words, not seconds.
- One control per cap: migrate legacy `limit_runner_slots` overrides into Max agents; show "no agents bought — capped at Max agents".
- Tenant API doors for Automations and Slots match what the console exposes (decide and enforce); reader docs for operator-only surfaces moved out of the tenant portal; drop AuditPage's dead operator-plane prompt.
- Self-create takes the advisory lock after the slug is chosen; `reset_billing` restores `inherits` and `_default`; migration 202610211200 tested without a `free` row.
Out of scope: Stripe, prices, the inheritance model.
Done means: api + vitest per item; plan form checked at 1440px and 390px; quick gate green.
Outcome
Pending-org plan label/choice, plan gates with Subscription link, per-field (default) in plan form, runner slots folded into Max agents, operator-only Slots doors, docs moved, lock/reset_billing/migration fixes. Quick gate green; PR #6640 queued. Visual check done (1440/390 clean). Follow-up draft #9059. Memory: none applied.
Artifacts
Activity
- Created
- Run
- Runner started
- Runner ended (done)