Switches the map to render the finer sub-national regional dataset (public/regions.geo.json, 2,597 regions) instead of whole countries, so the borders are visible at the ~100–200 km sub-region level.
src/components/WorldMap.tsx: choropleth source now regions.geo.json; the regions-fill layer paints each sub-region with its parent country's owning-nation color (all sub-regions of a country share the color), and a thin regions-line layer (0.75 px) draws the internal sub-region borders. Click/hover resolve a sub-region's owner via properties.parent → RegionMap (never the sub-region id or the MapLibre-repacked feature.id). A territory-change flash lights up all of a changed country's sub-regions.
shared/protocol.ts: kept regionOwner (now a pure ISO_A3 lookup) and added mapFeatureOwner(regions, feature) which reads feature.properties.parent and delegates — the "resolve via parent, never sub-region id" rule lives in one tested shared place.
src/App.tsx: a small "Selected: sub-region (PARENT) → Nation" label under the Inspect selector when a map click sets the target.
server/map.ts / RegionMap: intentionally unchanged — ownership and the LLM stay at country granularity, so a nation owns whole countries and a whole-country transfer flips all its sub-regions at once. No LLM/prompt change.
server/map.test.ts: updated the #6 regression guard + added mapFeatureOwner tests (resolve-via-parent, never sub-region id).
AGENTS.md: documented the sub-national choropleth + parent-resolution rule.
No behavior change to the LLM or ownership model — this is the visual/data foundation. PR 3 will let the LLM move individual sub-regions (partial country capture) for true small-scale border shifts and will close#16.
Part of #16
Switches the map to render the finer sub-national regional dataset (`public/regions.geo.json`, 2,597 regions) instead of whole countries, so the borders are visible at the ~100–200 km sub-region level.
- **`src/components/WorldMap.tsx`:** choropleth source now `regions.geo.json`; the `regions-fill` layer paints each sub-region with its **parent country's owning-nation color** (all sub-regions of a country share the color), and a thin `regions-line` layer (0.75 px) draws the internal sub-region borders. Click/hover resolve a sub-region's owner via `properties.parent` → `RegionMap` (never the sub-region id or the MapLibre-repacked `feature.id`). A territory-change flash lights up all of a changed country's sub-regions.
- **`shared/protocol.ts`:** kept `regionOwner` (now a pure ISO_A3 lookup) and added `mapFeatureOwner(regions, feature)` which reads `feature.properties.parent` and delegates — the "resolve via parent, never sub-region id" rule lives in one tested shared place.
- **`src/App.tsx`:** a small "Selected: *sub-region* (*PARENT*) → *Nation*" label under the Inspect selector when a map click sets the target.
- **`server/map.ts` / `RegionMap`:** intentionally **unchanged** — ownership and the LLM stay at **country** granularity, so a nation owns whole countries and a whole-country transfer flips all its sub-regions at once. No LLM/prompt change.
- **`server/map.test.ts`:** updated the #6 regression guard + added `mapFeatureOwner` tests (resolve-via-parent, never sub-region id).
- **`AGENTS.md`:** documented the sub-national choropleth + parent-resolution rule.
**No behavior change to the LLM or ownership model** — this is the visual/data foundation. PR 3 will let the LLM move *individual* sub-regions (partial country capture) for true small-scale border shifts and will close #16.
Part 2 of 3 for #16.
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 #16
Switches the map to render the finer sub-national regional dataset (
public/regions.geo.json, 2,597 regions) instead of whole countries, so the borders are visible at the ~100–200 km sub-region level.src/components/WorldMap.tsx: choropleth source nowregions.geo.json; theregions-filllayer paints each sub-region with its parent country's owning-nation color (all sub-regions of a country share the color), and a thinregions-linelayer (0.75 px) draws the internal sub-region borders. Click/hover resolve a sub-region's owner viaproperties.parent→RegionMap(never the sub-region id or the MapLibre-repackedfeature.id). A territory-change flash lights up all of a changed country's sub-regions.shared/protocol.ts: keptregionOwner(now a pure ISO_A3 lookup) and addedmapFeatureOwner(regions, feature)which readsfeature.properties.parentand delegates — the "resolve via parent, never sub-region id" rule lives in one tested shared place.src/App.tsx: a small "Selected: sub-region (PARENT) → Nation" label under the Inspect selector when a map click sets the target.server/map.ts/RegionMap: intentionally unchanged — ownership and the LLM stay at country granularity, so a nation owns whole countries and a whole-country transfer flips all its sub-regions at once. No LLM/prompt change.server/map.test.ts: updated the #6 regression guard + addedmapFeatureOwnertests (resolve-via-parent, never sub-region id).AGENTS.md: documented the sub-national choropleth + parent-resolution rule.No behavior change to the LLM or ownership model — this is the visual/data foundation. PR 3 will let the LLM move individual sub-regions (partial country capture) for true small-scale border shifts and will close #16.
Part 2 of 3 for #16.