Phase 6 — The Expert Coverage Market (M3)
Weak nodes see which (layer, expert-range) is scarcest and highest-reward, and fill it themselves — the proven layer market, regrained.
Kvasir's layer-shard market — demand map, max-reward self-enrollment, partial download, per-node rewards — was already device-verified. M3 re-parameterizes the same mechanism at the (layer, expert-range) grain, so coverage self-heals toward the most under-replicated, highest-reward expert ranges.
Scarcity aggregation → max-reward range assignment
Three workers register on layer 0: A = [0,128), B = [128,256), C = [0,128) as a second replica, with target_replicas = 2:
| layer | experts | replicas | scarcity |
|---|---|---|---|
| 0 | [0, 128) | 2 | 0.0 (target met) |
| 0 | [128, 256) | 1 | 0.5 (under target) |

volunteer(max_experts=64) → clips the scarcest range to the node's budget.
POST /api/expert-volunteer {"max_experts": 64}
→ {layer: 0, experts: [128, 192], scarcity: 0.5, replicas: 1, target: 2}A supply/demand market at expert grain
POST /api/expert-coverage— workers heartbeat their (layer, expert-range) holdings.GET /api/expert-demand— per-expert replica aggregation → contiguous expert-range segments with scarcity scores.POST /api/expert-volunteer— assigns the scarcest range clipped to the node's budget.- The existing layer market (self-enroll · partial download · rewards) re-parameterized to (layer, expert-range).
What follows in M4: batched dispatch for concurrent requests plus a hot-expert cache — tokens/s proportional to worker count — and replica routing (nearest/fastest worker) with churn fallback.