From 74e50caf702d13f1f6d2eb1e749b55b9f7478359 Mon Sep 17 00:00:00 2001 From: Josh Creek <8179928+jcreek@users.noreply.github.com> Date: Tue, 1 Sep 2026 16:31:17 +0100 Subject: [PATCH] feat(multiplayer): publish allocation state events --- multiplayer-next.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/multiplayer-next.md b/multiplayer-next.md index 6d9b24a8..c428db2b 100644 --- a/multiplayer-next.md +++ b/multiplayer-next.md @@ -1418,3 +1418,5 @@ The durable no-show boundary is now implemented by `ApplyInitialConnectPlan`: it The maintenance command now invokes a bounded `ReconcileInitialConnect` sweep for `ASSIGNMENT_READY`/`ASSIGNED`/`CONNECTING` matches, carrying ranked no-show history into the domain ladder and skipping non-actionable WAIT plans. This closes the local control-plane trigger for task 8.35; actual allocated-server bot spawning, shutdown signaling, and live Agones integration remain separate gates. Allocation registration now writes a participant-targeted, revisioned `state_changed` outbox event for both `PROCESS_READY` and `ASSIGNMENT_READY` transitions. The production and test API binaries run a type-scoped dispatcher with delivery-before-ack semantics, so allocation lifecycle events survive WebSocket outages without competing with proposal or result consumers. Store/API adversarial tests cover event-type isolation, target validation, and revision mismatches; live allocator/Agones delivery remains an integration gate. + +The state-event implementation is now complete through the registration boundary: the durable registration SQL returns the authoritative match revision, includes every participant target in the payload, and the dispatcher validates aggregate/revision/state consistency before fan-out. Full Go tests, race checks, and vet pass after an adversarial database-cursor review.