[BE] Bind planet.#/star.#/moon.# on the GameEvents queue + binding guard test #934

Closed
opened 2026-08-06 16:11:58 +00:00 by spikerj · 2 comments
Owner

Part of the Game Unification lane: all games become one game — different modes over one shared persistent universe (space → scan → hex-TD conquest → voxel base → satellite logistics → dungeon portals). Clients = Angular web + Godot (iOS/Android embed Godot). Full plan: ~/.claude/plans/i-want-a-plan-breezy-eclipse.md on the 4090.

Part of EPIC #926.

SpikerSoft.EventHandlers.GameEvents/Services/GameEventsConsumer.cs:161: add ConfigureQueueWithDlqAsync bindings for planet.#, star.#, moon.#. The dispatch switch (DispatchByRoutingKeyAsync ~line 216), GamePersistenceService handlers, and RedisPlanetCacheWriter/RedisStarCacheWriter/RedisMoonCacheWriter already exist and are unreachable.

Also: guard test asserting bound patterns cover every routing-key family the dispatcher handles (allow-list the known-dead ship/inventory keys with a comment); make drops loud (mandatory publish or alternate exchange); rewrite the README known-defect section.

Verify (docker-compose gameserver stack, lines ~809-870): first boot writes game_planets docs; restart gameserver → "Loaded N planets from Redis", same ids; flush Redis + rerun initializer → same ids from Mongo.

Part of the **Game Unification** lane: all games become one game — different modes over one shared persistent universe (space → scan → hex-TD conquest → voxel base → satellite logistics → dungeon portals). Clients = Angular web + Godot (iOS/Android embed Godot). Full plan: `~/.claude/plans/i-want-a-plan-breezy-eclipse.md` on the 4090. Part of EPIC #926. `SpikerSoft.EventHandlers.GameEvents/Services/GameEventsConsumer.cs:161`: add `ConfigureQueueWithDlqAsync` bindings for `planet.#`, `star.#`, `moon.#`. The dispatch switch (`DispatchByRoutingKeyAsync` ~line 216), `GamePersistenceService` handlers, and `RedisPlanetCacheWriter`/`RedisStarCacheWriter`/`RedisMoonCacheWriter` already exist and are unreachable. Also: guard test asserting bound patterns cover every routing-key family the dispatcher handles (allow-list the known-dead ship/inventory keys with a comment); make drops loud (mandatory publish or alternate exchange); rewrite the README known-defect section. Verify (docker-compose gameserver stack, lines ~809-870): first boot writes `game_planets` docs; restart gameserver → "Loaded N planets from Redis", same ids; flush Redis + rerun initializer → same ids from Mongo.
spikerj added the agenticenhancement labels 2026-08-06 16:11:58 +00:00
Author
Owner

Fix is up: spikersoft-backend PR #521 (CI green 13/13). Verified on the local compose stack: synthetic planet.created publish now reaches Mongo (game_planets) + Redis; binding guard test (GameEventsConsumerBindingCoverageTests) keeps publisher/bindings/dispatch in lock-step. Will close after merge.

Fix is up: spikersoft-backend PR #521 (CI green 13/13). Verified on the local compose stack: synthetic `planet.created` publish now reaches Mongo (`game_planets`) + Redis; binding guard test (`GameEventsConsumerBindingCoverageTests`) keeps publisher/bindings/dispatch in lock-step. Will close after merge.
Author
Owner

Resolved in spikersoft-backend PR #521 (merged to master). planet.#/star.#/moon.# bindings live + GameEventsConsumerBindingCoverageTests guard. Celestial bodies persist for the first time. Closing.

Resolved in spikersoft-backend PR #521 (merged to master). planet.#/star.#/moon.# bindings live + GameEventsConsumerBindingCoverageTests guard. Celestial bodies persist for the first time. Closing.
Sign in to join this conversation.