@@ -128,7 +128,9 @@ curl -s -X POST http://localhost:8080/api/v1/execute/swe-planner.plan \
128128
129129Async dispatch is cheap: fire all independent calls up front, then poll them
130130together. Do NOT serialize multi-agent work — the whole point of the control
131- plane is managing many agents at once. What to know:
131+ plane is managing many agents at once. When a batch of independent jobs arrives
132+ (ten PRs to review, five repos to scan), the default is to dispatch the whole
133+ batch now and poll as a group — not one-at-a-time. What to know:
132134
133135- Concurrent calls to the ** same reasoner** are safe when the agent is (e.g.
134136 pr-af isolates concurrent reviews per PR). If an agent's docs don't say it's
@@ -147,6 +149,17 @@ launching more heavy runs — if `active_executions >= recommended_max_concurren
147149finish or await in-flight work first rather than starting more, and tell the
148150user you're throttling to avoid overloading the machine.
149151
152+ ** Canary after reconfiguration, then fan out.** The one exception to
153+ fire-everything-up-front: you just changed a node's runtime config (provider,
154+ model, bin path — ` af secrets set ` + restart). A misconfigured harness can fail
155+ * silently* — the run reports ` succeeded ` with empty results in seconds, and an
156+ agent that posts externally (GitHub reviews, Slack, tickets) will publish that
157+ garbage under the user's identity, once per dispatched call. So after any
158+ config change: send ONE representative call, confirm it did real work (nonzero
159+ cost/duration, plausible output — not just ` succeeded ` ), then fan out the rest
160+ at full width. This is a gate on the first call after a config change, not a
161+ reason to serialize steady-state work.
162+
150163## 4. Get the result
151164
152165** What's in flight right now** — no IDs needed (also answers "how many agents
0 commit comments