I2987 — server.status and peers.list ask every checkout at once, a bounded number at a time
Make the repository-wide readings of `server.status` and `peers.list` ask the checkouts git registers concurrently, at most `server::ASKED_AT_ONCE` (16) at a time, through one helper (`server::each_checkout`). The answers are folded in the order git lists the checkouts, so the output, its order and `complete` are what the one-at-a-time loop gave. Each probe stays bounded by the declared probe timeout, so the wait is a few timeouts however many checkouts there are.
DONE wave 0 · p1 · implementation profile · parallel safe
Objective
Make the repository-wide readings of `server.status` and `peers.list` ask the checkouts git registers concurrently, at most `server::ASKED_AT_ONCE` (16) at a time, through one helper (`server::each_checkout`). The answers are folded in the order git lists the checkouts, so the output, its order and `complete` are what the one-at-a-time loop gave. Each probe stays bounded by the declared probe timeout, so the wait is a few timeouts however many checkouts there are.
Why
An adopter's 0.29.0 field report (prismatic-platform, 2026-10-18, item 5) measured `/api/v1/server` with the default `checkouts=repository` blocking for 30 s or more while `/` answered in 0.5 ms, and `serve status` failing with `Resource temporarily unavailable (os error 35)`, with about 58 `serve` processes on the machine. Both capabilities read each checkout's lease and probed its server one after another, so one wedged server added a full probe timeout per checkout. The brief reports 545 boards on this machine, and the blackboard (I2980) reads them through the same gather.
Current state
server_status and peers_list loop over the checkouts sequentially; the wait is the sum of every probe.
Desired state
The checkouts are asked sixteen at a time and the answer is the same, in the same order.
Scope
- apps/majordomus-cli/src/capability/builtin/server.rs
- apps/majordomus-cli/src/capability/builtin/peers.rs
Dependencies
None. This issue is a root of the graph.
Acceptance criteria
- Every checkout is answered in the order given, more than one is asked at once, and never more than ASKED_AT_ONCE (unit test every_checkout_is_asked_at_once_and_answered_in_order)
- The existing server and peers unit tests and their cases pass unchanged
Validation
- cargo test --lib -- capability::builtin::server
- cargo test --lib -- capability::builtin::peers
Evidence required
- unit_checkouts_at_once
Evidence
| covers | type | command | result | at commit |
|---|---|---|---|---|
| unit_checkouts_at_once | ci | validate run 39438896504 at master 9a5a9b77520: rust (1-3) jobs 118683336143 118683336062 118683336401 run cargo test, incl. capability::builtin::server::every_checkout_is_asked_at_once_and_answered_in_order (baadbbfb025) | success (the run's only red job is pages, which runs no test) | a81b1e3 |
Timeline
- started
- 2026-10-20T16:18:04Z
- verified
- —
- completed
- 2026-10-20T16:32:59Z
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I2987.yaml. Read it back with majordomus plan show I2987.