Polish plans customers and billing pages
Quality goals for operator Products › Plans, Customers, and the tenant billing pages (was #8349, #8396, #8385, #8405, #8476, #8469). Skip anything already fixed.
Products › Plans:
1. "Billing not connected" said once at the section, not on every row; rows marked Hidden only for a plan-specific reason; chip and reason on one line; the Default chip never squeezes a name ("Bus…") in the split pane.
2. Flag active plans that share a name (prod `team` / `team_trial`).
Customers:
3. Plan tab: an unsold plan's Price row reads "no price to override" (no Stripe call to action) and has a disabled ⋯ or lock like other Terms rows; rows hoisted from a named included plan are distinguishable without hover.
4. Billing › Details (`DeskDetailsEditor.tsx`): leaving with unsaved edits asks first (`hooks/useLeaveGuard`).
5. Pending cards and sign-up summary: emails break only at "@"; the "Plan not started" fact links to the customer's Billing tab; one label column width on phone.
Tenant:
6. Change dialog: hide "Need another plan? Contact us" when a contact plan is listed.
7. Change plan wizard (/org/billing/subscription/change): body2 billing-period labels; a selected-plan tint that reads as chosen in dark; order-table figures on the stepper's baseline; "Total" kept beside the folded figure on phone.
8. Agents cap (terms §7): count `user`-state worktrees and live advisor conversations in `org_limits.py` `runner_slots`, or record the decision not to and narrow §7 (c)/(d); show "Agents active" on Subscription.
Out of scope: prices and plan ranges, trial logic, purchase/quote API, Stripe sync, approve/reject flows, the plan editor dialog.
Done means:
- Each item fixed or declined with a one-line reason in the PR.
- Tests for 1, 2, 5 (Billing link), 8 (an org at its cap cannot open an interactive session).
- Screenshots of changed surfaces at 390 px and desktop.
Outcome
PR #6487 is queued to the merge lane. Items 1–5, 7 and 8 are fixed: Agents now counts console sessions and the console refuses at the cap. Item 6 is declined because no contact plan is ever listed. Quick gate, web tests (1262) and API tests are green. The visual check is done. Follow-ups are in draft 8591.
Artifacts
Activity
- Created
- Run
- Runner started
- Runner ended (done)