Multi-pad coordination (shared fleet)
Research-grade — validation in progress.
Phase H — pure `src/lib/multiPad/multiPadCoordination.ts` greedy priority-first event-driven scheduler. Coordinates N pads competing for a shared fleet pool (crews / pumps / sand silos) on one timeline, honoring per-pad `priority`, per-pad `padReadyMin`, per-resource `transitionMin` (crew/pump rig-up when a shared resource flips pads), and a cross-pad `zipperStaggerCrossPad` helper. Reports per-pad totalMin, critical-pad id, peak fleet usage, and per-resource transition lockout minutes. UI surface is `/multi-pad` (Layers icon, sidebar Run section, `isNew: true`) — Gantt strip + per-pad rollup table + CSV export via `buildMultiPadScheduleCsv` (RFC 4180, `,` / `;` delimiter, `# total_min` / `# critical_pad` / `# peak_usage:*` / `# transition_lockout_min:*` trailer rows). Distinct from `padScheduling.ts` (single-pad) and `surrogatePadAutoTuner.ts` (per-pad surrogate-driven knob tuning) — pair them by tuning each pad first, then coordinating. Drift-guard: `multiPadCoordination.test.ts` (11 tests: capacity-ample, contended-serialise, priority tiebreak, padReadyMin honored, transition lockout, peak usage, critical-pad id, zipper helper, empty input, CSV header + summary lines, semicolon delimiter).
Honest scope: greedy priority-first, NOT the NP-hard global optimum. Out of scope today: per-unit (not per-class) transition cost, MILP global re-sequencing, joint optimisation with surrogate cost model, fleet-aware sand logistics (silo refills, hot-shot trucking). Pairs with `surrogatePadAutoTuner.ts` — tune each pad's stage durations first, then coordinate.
- MILP global re-sequencing for the NP-hard global optimum
- Per-unit (not per-class) transition cost
- Joint optimisation with surrogate cost model
- Fleet-aware sand logistics (silo refills, hot-shot trucking)
No phase markers extracted from this row's prose yet.
- No published error band yet — use with engineering judgment.