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.
GameEventPublisher.PublishSurveyReportAsync → routing key survey.recorded; consumer binding survey.# + UpsertSurveyReportAsync into game_survey_reports (unique (CharacterId, BodyId), keep best quality); RedisSurveyReportCacheWriter (consumer) + RedisSurveyReportCache (gameserver reader, survey:{characterId}:{bodyId}); zone-join sends SurveyReportListEvent after celestial lists; Initializer syncs the survey: prefix. Per-player + shareable model: include UserId + provenance field now; share command is a later ticket (P4).
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 #927.
`GameEventPublisher.PublishSurveyReportAsync` → routing key `survey.recorded`; consumer binding `survey.#` + `UpsertSurveyReportAsync` into `game_survey_reports` (unique (CharacterId, BodyId), keep best quality); `RedisSurveyReportCacheWriter` (consumer) + `RedisSurveyReportCache` (gameserver reader, `survey:{characterId}:{bodyId}`); zone-join sends `SurveyReportListEvent` after celestial lists; Initializer syncs the `survey:` prefix. Per-player + shareable model: include UserId + provenance field now; share command is a later ticket (P4).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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.mdon the 4090.Part of EPIC #927.
GameEventPublisher.PublishSurveyReportAsync→ routing keysurvey.recorded; consumer bindingsurvey.#+UpsertSurveyReportAsyncintogame_survey_reports(unique (CharacterId, BodyId), keep best quality);RedisSurveyReportCacheWriter(consumer) +RedisSurveyReportCache(gameserver reader,survey:{characterId}:{bodyId}); zone-join sendsSurveyReportListEventafter celestial lists; Initializer syncs thesurvey:prefix. Per-player + shareable model: include UserId + provenance field now; share command is a later ticket (P4).Implementation up: spikersoft-backend PR #523 (stacked on #522). survey.recorded → game_survey_reports best-quality upsert + Redis cache + zone-join replay + Initializer sync. Compose-verified: quality-0 re-scan did not downgrade a stored quality-2 report. Will close after merge.
Resolved in spikersoft-backend PR #523 (merged to master). survey.recorded → game_survey_reports best-quality upsert + Redis cache + zone-join replay + Initializer sync. Closing.