Parts 1 and 2 ship packaged presets plus a pure resolve_capabilities() helper. Parts 3 and 4 consume that resolver without changing dispatch behavior in this branch.
- Add
brigade roster suggest(or equivalent) that loads a chosen preset, callsHostCapabilityProbeandresolve_capabilities(), and prints everySeatResolutionentry with requested seat, outcome, resolved seat, and reason. - Check
result.usablebefore emission. When the orchestrator was dropped, print the report and refuse to emit an adoptable roster. - Emit the resolved roster TOML (or a concrete path) when the result is usable so operators can adopt the assembled result.
- Reuse the same report in
brigade roster doctorto warn when a seat's declared requirements no longer hold on the host.
- Add
brigade roster statsthat reads worker receipt durations and statuses from.brigade/runs/. - Compute per-seat medians and failure rates from local evidence.
- Overlay those stats in suggest/doctor output without mutating the packaged preset files; shipped
stats.sourceremains the author default until local receipts override it in rendered output.