Symptoms
capacity.headroom.lowarrives in the weekly review, with total demand past 80 percent of pool capacity.daily.run.incompletestarts appearing for workspaces that were fine last week.asobeast_workspace_daily_requests_estimatedgrows faster thanasobeast_pool_endpoints.- Registrations answer
503because the signup gate is already holding the line.
Triage
The commands run on the host and read a personal API token of the platform operator fromASOBEAST_API_TOKEN. Behind the tunnel overlay, which publishes no host port, replace http://127.0.0.1:3001 with your public origin. See API tokens.
1
Measure the ceiling, do not estimate it
GET /jobs/budget gives the same view for one workspace.2
Separate growth from a store mix change
A Google Play keyword check costs roughly eight store requests against one for the App Store, so a handful of customers moving to Play can multiply demand without any change in customer count. Compare the two
store labels on asobeast_workspace_daily_requests_estimated week over week.3
Name the heaviest tenants
Sort the same metric descending, then check
workspace.cost.unpaid and workspace.cost.exceeds-revenue. A trial workspace taking a tenth of the pool is a different problem from healthy paid growth.Containment
- Close the door before the room fills. Set
SIGNUP_CAPACITY_MAX_UTILIZATIONso that registration is refused once tracked collection passes that share of daily capacity. It only applies when billing is enabled, so self hosted installs are never gated. - Leave existing customers untouched. Shedding work from paying tenants to admit new ones is the wrong trade in every direction.
- If one unpaid workspace dominates the pool, suspend it with a reason written for the customer, who sees it on every page (see Support tooling), rather than degrading everyone. Suspension stops collection for that workspace even on keywords another tenant also tracks, because a shared search is judged per workspace before any row is written.
- Do not lower the depth of Google Play searches as a first move. It changes the data customers already have and is hard to explain.
Recovery
- Buy datacenter endpoints ahead of demand. They are the cheapest input in the business by a wide margin, and the sync job adds them on its next run.
- Confirm capacity on Admin, Capacity or with
/admin/capacitybefore raising the registration gate. - Raise the gate in steps and watch one full daily cycle at each step.
- Revisit the plan limits if a single plan repeatedly reaches the pool ceiling on its own. A limit that never bites is not a limit.
Who to tell
- People who could not register, in the refusal itself. A waiting list is a better outcome than a broken product.
- Existing customers, only if their collection was actually affected.
- Nobody, for a gate that held. A gate doing its job is not an incident, it is the plan working.