Node Max runners field enforce or remove

Task 9697 · Done · Coder · created · updated

Found while removing the worktree pool caps (Task 9648): the node form's **Max runners** field (`nodes.capacity.max_runners`, apps/web/src/pages/NodeDetailPage.tsx) is saved but read by nothing in apps/api or apps/jaahd (`routes/nodes/register.py` says so: "Declarative only: nothing in the API reads these"). The reader docs promise it caps concurrent tasks (apps/docs/content/console-reference/directory/nodes.md "Host & capacity", apps/docs/content/tutorials/nodes-and-capacity.md). With the per-project pool cap gone, an operator or tenant who sets it expects a bound that never applies. Decide one of: 1. Enforce it: skip dispatch to a node whose running fleet runners (lane and no-model runs excluded) have reached `capacity.max_runners`, with a `Waiting:` reason the task row shows; or 2. Remove it: drop the field from the node form, the register/update schemas and the reader docs, and strip the key from `nodes.capacity` in an additive migration. Out of scope: the per-account Max runners (`accounts.max_runners`, `max_runners_per_account`), which is enforced and stays; the org Agents cap; the port-grid index ceiling. Done means: - Either the dispatch plan refuses a node at its Max runners with a test pinning the count and the wait reason, or no surface (form, API schema, reader docs, capacity JSON) offers the field. - apps/docs pages that mention a node's Max runners describe what exists. - `./dc check quick` green; changed-area tests green.

Outcome

Removed node Max runners (operator chose removal): form, API schemas/read, docs; additive migration strips the key. Quick gate + changed-area tests green; visual check clean. PR #6826 merged e806b404, Jaah Deploy succeeded. Deferred: prod docs screenshot.

Pull request

Artifacts

Activity

  • Created
  • Updated
  • Run
  • Runner started
  • Awaiting response
  • Awaiting response
  • Awaiting response
  • Awaiting response
  • Runner resumed
  • Runner ended (done)