mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-10 16:04:04 +00:00
docs(multiplayer): flag the real root blocker of the allocation pipeline
Found while investigating why the connect-wiring fix (§8.41, ControlPlaneClient._connect_when_assigned) would still not work end to end in a real deployment: nothing in production ever publishes a player's signed match assignment. store.SaveAssignment/SaveAssignments/SaveVerifiedAssignmentRoster -- the only functions that ever write the assignments table -- are called only from tests, never from allocator/worker.go, cmd/allocator, or anywhere else in the real service. allocator.Service.PublishRoster (wired to store.PostgresRosterStore) is likewise never called from production code. allocation_match_sql.go's AdvanceServerRegistration SQL requires an assignments row for every match participant before allowing the ASSIGNMENT_READY transition. With nothing ever creating those rows, a real match cannot advance past PROCESS_READY -- no player can ever receive a real assignment or connect, regardless of how correct the client-side connect-wiring fix from earlier this session is. TestRealSupervisorRegistersAllocatedServerThroughControlPlane -- the test that was supposed to prove this end to end -- manually seeds store.SaveAssignment in its own setup rather than exercising the real production write path, which is why this was never caught. Per the user's explicit direction, this is flagged rather than fixed: closing it needs new security-relevant design (a join-signing key shared between the allocator, which would sign, and the game server, which fleet.yaml already mounts a verification key for via --join-authorisations-key-file but which no control-plane binary has a matching signing flag for; roster-digest computation; per-player domain.JoinAuthorisation construction from match_participants/identities via the already-built domain.SignJoinAuthorisationHMAC), not a simple wiring fix -- a wrong design choice here is a join-authorization forgery risk, not just a UX gap, so it isn't something to build unprompted the way the smaller fixes earlier this session were. Recorded in three places for visibility: a new root-blocker callout in §0 (the outstanding-work index), the top Status line, and expanded detail in §8.31's own row, which previously undersold this as merely 'production signer... remain'. No code changes. Verified the doc edit didn't touch anything else: go build/vet/test -race clean, full Godot suite 220/220 clean (unchanged, as expected).
This commit is contained in:
+4
-2
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user