Goal
A read-only wire surface for mustering, so the frontend has something to render.
Context
Step 4 of the mustering series. Implementation on claude/game-mustering-state-ah1fw2 (PR #1235).
Approach
muster_required, muster_deadline and a muster_status method field on both GameListSerializer and GameRetrieveSerializer (service/game/serializers.py). muster_status is null unless the game is mustering and the requester is a member; otherwise confirmation_required or confirmed.
Regenerated schemas and clients: docker compose up codegen, then npx tsc -b --noEmit in packages/web.
Frontend mock plumbing, so the fixtures stay type-valid and step 5 has something to render against:
musterRequired/musterDeadline/musterStatus on the makeGame builder (packages/web/src/mocks/fixtures/builders.ts) and on the eight game literals in packages/web/src/mocks/legacy.ts — indent these to match their neighbours; the branch's copies are two spaces short.
- comma-separated status filtering in the MSW games-list handler (
packages/web/src/mocks/handlers.ts), which currently does an exact g.status === status match. The real GameFilter.filter_status (service/game/filters.py:57) already splits on commas and validates against GameStatus.STATUS_CHOICES, so only the mock needs changing.
- the
musteringGame fixture in packages/web/src/mocks/fixtures/games.ts, exported from fixtures/index.ts.
Tests: TestMusterSerializerFields from service/game/tests/test_mustering.py.
Note that the branch duplicates the get_muster_status getter verbatim across both serializers. It should be a shared mixin, and this is the step to do that in.
Goal
A read-only wire surface for mustering, so the frontend has something to render.
Context
Step 4 of the mustering series. Implementation on
claude/game-mustering-state-ah1fw2(PR #1235).Approach
muster_required,muster_deadlineand amuster_statusmethod field on bothGameListSerializerandGameRetrieveSerializer(service/game/serializers.py).muster_statusis null unless the game is mustering and the requester is a member; otherwiseconfirmation_requiredorconfirmed.Regenerated schemas and clients:
docker compose up codegen, thennpx tsc -b --noEmitinpackages/web.Frontend mock plumbing, so the fixtures stay type-valid and step 5 has something to render against:
musterRequired/musterDeadline/musterStatuson themakeGamebuilder (packages/web/src/mocks/fixtures/builders.ts) and on the eight game literals inpackages/web/src/mocks/legacy.ts— indent these to match their neighbours; the branch's copies are two spaces short.packages/web/src/mocks/handlers.ts), which currently does an exactg.status === statusmatch. The realGameFilter.filter_status(service/game/filters.py:57) already splits on commas and validates againstGameStatus.STATUS_CHOICES, so only the mock needs changing.musteringGamefixture inpackages/web/src/mocks/fixtures/games.ts, exported fromfixtures/index.ts.Tests:
TestMusterSerializerFieldsfromservice/game/tests/test_mustering.py.Note that the branch duplicates the
get_muster_statusgetter verbatim across both serializers. It should be a shared mixin, and this is the step to do that in.