No man's land: TurnResult.unowned + release/re-claim in applyTurnResult + distinct grey map rendering (#16 P3)
- shared/protocol.ts: TurnResult.unowned (keys released this turn) + the map presentation contract (regionFillStyle / unownedTooltipLabel, hue-less grey) - shared/types.ts: required GameState.unowned (cumulative mid-game releases; [] at init, distinct from preset-unassigned regions) - server/engine.ts: applyTurnResult applies releases first (sole-owner only, never fabricating no man's land from unassigned keys), then claims against the post-release snapshot (gain on an ownerless key = re-claim); lone release is isMeaningful; prompts + user payload carry the unowned field - server/stub.ts: unchanged behavior (never releases; e2e stays stable) - server/db.ts: legacy rows load with unowned defaulted to [] - server/index.ts: create-game sets []; jump reference table includes released keys so the model can name them for re-claim - WorldMap/App: unowned prop -> visible grey + 'No man's land' tooltip - unit tests: 105 -> 127 (release/re-claim suites, presentation contract, legacy-row normalization)
This commit is contained in:
@@ -120,6 +120,19 @@ export interface GameState {
|
||||
* in src/App.tsx. Starts at 1 on game creation.
|
||||
*/
|
||||
version: GameVersion;
|
||||
/**
|
||||
* (v0.22, #16 P3) Region keys that became **unowned** — "no man's land" —
|
||||
* during play: a region that was owned and was released to no owner by a
|
||||
* committed turn (the LLM narrates the cause in that turn's events). This is
|
||||
* deliberately distinct from the many regions a preset never assigns, which
|
||||
* are also unowned but were never *released* mid-game; only the keys in this
|
||||
* list render as the distinct visible no-man's-land grey (see
|
||||
* protocol.regionFillStyle). A region leaves the list when any nation
|
||||
* re-claims it (an ordinary `gain`). Always `[]` on a fresh game — no
|
||||
* man's land can only arise mid-game. Rows saved before v0.22 load with
|
||||
* this defaulted to `[]` (see server/db.ts).
|
||||
*/
|
||||
unowned: string[];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user