Node Max runners field enforce or remove
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.
Artifacts
Activity
- Created
- Updated
- Run
- Runner started
- Awaiting response
- Awaiting response
- Awaiting response
- Awaiting response
- Runner resumed
- Runner ended (done)