docs(workshops): canonical D-237 heritage taxonomy (47 values, approved)
Reconciles the ~30 inconsistent heritage proposals from the 6-sector #1016 content pass into one canonical cultural_specialization heritage vocabulary (47 values). Key reconciliations: norse_compact->nordic (un-fuses people from faction), spanish_iberian+spanish_hispanic->spanish, brazilian_portuguese+ lusophone_frontier->brazilian, italian_northern->italian, afrikaans_cape-> afrikaans, french_provencal+french_canadian->french. No compound values; one token per system (blends take dominant heritage or the cosmopolitan activity value). Maintainer decisions (2026-06-01): keep ALL values distinct (no lumping — welsh/afro_brazilian/cape_malay/xhosa/luxembourgish/konkan all retained); keep empty-but-complete slots (yoruba/hausa/hungarian/persian/turkic). Fills the Middle-East gap the pass exposed: arab/persian/turkic added even at near- zero current usage so the canon is complete. Logs the southern-African overrepresentation (~25/300, afrikaans=15) as a DLC content-rewrite rebalancing task (#1019) rather than lumping the taxonomy. Migration note included: 4 already-shipped hero cultural values use old suffix forms (afrikaans_cape, french_provencal, italian_northern, norse_compact) and will be renamed in the culture-write pass when _CULTURAL_HERITAGE is replaced. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,199 @@
|
||||
# Canonical Heritage Taxonomy — APPROVED 2026-06-01
|
||||
|
||||
*D-237 `cultural_specialization` heritage-type values. Drafted from the 6-sector
|
||||
#1016 content pass (which read heritage off the authored system names) +
|
||||
reconciliation of ~30 inconsistent agent proposals + gap-fill. Maintainer
|
||||
decisions applied 2026-06-01: keep all values distinct (no lumping), keep
|
||||
empty-but-complete slots. Final set: **47 heritage values** (token list at bottom).*
|
||||
|
||||
## ⚠ Heritage balance note (DLC follow-up)
|
||||
|
||||
The southern-African heritages are **overrepresented**: ~25 of ~300 named systems
|
||||
(~8%) read southern-African, with `afrikaans` alone on **15 systems** — more than
|
||||
french + italian + russian + arab *combined*. `arab` sits at 2, `persian`/`turkic`
|
||||
at 0. This is an artifact of the original name-balancing overcorrecting in one
|
||||
direction. The fix (rewrite a subset of afrikaans/zulu systems into arab/persian/
|
||||
turkic heritage) is a **full index.md + gttr.md content rewrite per system**, not a
|
||||
TOML value flip — so it is **out of scope for #1016** and logged as a DLC/content
|
||||
rebalancing task. The taxonomy below keeps every value distinct so the rebalance
|
||||
has targets to write *into* when it happens.
|
||||
|
||||
## What this is
|
||||
|
||||
`cultural_specialization` is ONE field carrying EITHER an **activity** value OR a
|
||||
**heritage** value (heritage wins when both apply). This document fixes the
|
||||
**heritage** half. The activity half is unchanged (see bottom).
|
||||
|
||||
Heritage is pinned only when a system's founding culture **diverges from its
|
||||
corridor baseline** (D-167) or is a distinct cross-corridor founder. Corridor-
|
||||
typical systems stay NULL → D-232 corridor default. This is a menu of *available*
|
||||
values, not a quota.
|
||||
|
||||
## Design rules (why the agent proposals were reconciled, not adopted as-is)
|
||||
|
||||
1. **One granularity:** real-world people/nationality level, `lowercase_snake`.
|
||||
2. **Heritage ≠ activity ≠ faction.** `norse_compact` illegally fused a people
|
||||
(Nordic) with a faction (Compact) → split to `nordic`. `*_frontier` /
|
||||
`*_cooperative` smuggled an activity register → dropped.
|
||||
3. **Collapse synonyms:** `spanish_iberian`+`spanish_hispanic`→`spanish`;
|
||||
`brazilian_portuguese`+`lusophone_frontier`→`brazilian`;
|
||||
`italian_northern`→`italian`; `afrikaans_cape`→`afrikaans`;
|
||||
`french_provencal`+`french_canadian`→`french`; `polish_czech`→`polish`+`czech`;
|
||||
`akan_ghanaian`→`akan`; `anglo_australian`+`english_cooperative`→`anglo`.
|
||||
4. **No compound values.** `japanese_vietnamese`, `english_french` rejected — a
|
||||
blended system takes its **dominant** heritage, or the `cosmopolitan` activity
|
||||
value if genuinely fused. One token per system.
|
||||
5. **Fill gaps from the map, not just from current hits.** Arab/Persian/Turkic
|
||||
added even though few systems use them now (accepted 300-system reality;
|
||||
DLC-flagged). The taxonomy is the canon; names can grow into it.
|
||||
|
||||
---
|
||||
|
||||
## Canonical heritage values (38)
|
||||
|
||||
Grouped by macro-region. "Absorbs" = agent proposals folded in. "Corridor" =
|
||||
where it's *baseline* (so usually NULL there) vs *divergent* (pin-worthy).
|
||||
|
||||
### British Isles & Anglo-diaspora
|
||||
| value | scope | corridor | absorbs | example |
|
||||
|---|---|---|---|---|
|
||||
| `anglo` | English / Australian / Canadian-anglo / NZ-pākehā Commonwealth-anglo | **baseline: north_reach** | english, anglo_australian, english_cooperative | Thornfield, Clearwater (cross-corridor in east) |
|
||||
| `scottish` | Scottish / Highland | divergent | scottish | Calloway Reach, Braemar |
|
||||
| `irish` | Irish | divergent | irish | Brennan's Drift |
|
||||
| `welsh` | Welsh | divergent | — | Pemberton *(LUMP? → anglo)* |
|
||||
|
||||
### Iberian, Latin & Lusophone
|
||||
| value | scope | corridor | absorbs | example |
|
||||
|---|---|---|---|---|
|
||||
| `portuguese` | Iberian Portuguese | **baseline: south_reach** | portuguese_iberian | Espinho, Ribeiro's Star |
|
||||
| `brazilian` | Brazilian Portuguese (sertão/várzea register) | divergent (south) | brazilian_portuguese, lusophone_frontier | Sertão, Várzea, Retiro |
|
||||
| `afro_brazilian` | quilombo / Afro-Brazilian maroon heritage | divergent | afro_brazilian | Quilombo *(LUMP? → brazilian)* |
|
||||
| `cape_verdean` | Cabo Verde (morna) | divergent | cape_verdean | Velha Guarda |
|
||||
| `angolan` | Angolan-Portuguese | divergent | angolan_portuguese | Moçâmedes |
|
||||
| `sao_tomean` | São Toméan (roça) | divergent | são_toméan | Roça Nova |
|
||||
| `spanish` | Iberian Spanish + Latin-American Hispanic | divergent (south) | spanish_iberian, spanish_hispanic | Puerto Último, Morales' End, Fragua |
|
||||
| `canarian` | Canary Islands maritime (cofradía) | divergent | canarian | Aguas Bravas, Punta del Sol |
|
||||
| `italian` | Italian | divergent | italian_northern | Nova Roma |
|
||||
| `french` | French (incl. Québécois) | divergent | french_provencal, french_canadian | Confluent, Bout du Chemin, Dernier Quai |
|
||||
|
||||
### Northern / Central / Eastern European
|
||||
| value | scope | corridor | absorbs | example |
|
||||
|---|---|---|---|---|
|
||||
| `german` | German / Austrian | **baseline: west_reach** | german_frontier | Altgrund, Tiefenbach (deep-frontier divergent) |
|
||||
| `dutch` | Dutch / Flemish | baseline-adjacent (west) | dutch_frontier | Schuilhoek, Bestevaer |
|
||||
| `nordic` | Norwegian / Swedish / Danish | baseline-adjacent (west) | norse_compact | Havnfjord, Holmgren's Passage |
|
||||
| `finnish` | Finnish | divergent | finnish | Uusi Vantaa, Koskinen's Reach |
|
||||
| `polish` | Polish | divergent | polish, polish_czech | Nowa Huta, Kraków Junction |
|
||||
| `czech` | Czech | divergent | czech, polish_czech | Nová Tržnice |
|
||||
| `russian` | Russian successor states | secondary (west) | russian | Novaya Zarya |
|
||||
| `luxembourgish` | Luxembourgish | divergent | luxembourgish | Echternach *(LUMP? → german)* |
|
||||
| `hungarian` | Hungarian | divergent | — | Kovács Loop *(or NULL)* |
|
||||
|
||||
### Sub-Saharan African
|
||||
| value | scope | corridor | absorbs | example |
|
||||
|---|---|---|---|---|
|
||||
| `afrikaans` | Afrikaner / Cape | divergent (north/south) | afrikaans_cape | Eerste Wacht, Oude Kraal |
|
||||
| `cape_malay` | Cape Malay | divergent | (part of southern_african_mixed) | Kaapse Baai, Koeberg *(LUMP? → afrikaans)* |
|
||||
| `zulu` | Zulu | divergent | zulu | Nkosi's Bridge, Isibaya, Mavela |
|
||||
| `xhosa` | Xhosa | divergent | (part of southern_african_mixed) | Pedra Seca *(LUMP? → zulu/afrikaans)* |
|
||||
| `herero` | Herero / Namibian | divergent | herero | Okahandja |
|
||||
| `shona` | Shona / Ndebele (Zimbabwean) | divergent | shona_ndebele | Dzimbahwe |
|
||||
| `swahili` | East African coastal (Mozambican/Kenyan) | **secondary: south_reach** | swahili | Inhambane, Mwangaza |
|
||||
| `igbo` | Igbo (Nigerian) | divergent | igbo | Enugu, Okoro's Claim |
|
||||
| `yoruba` | Yoruba (Nigerian) | divergent | yoruba | *(seed; no firm hit yet)* |
|
||||
| `hausa` | Hausa (Sahelian) | divergent | hausa | *(seed; no firm hit yet)* |
|
||||
| `akan` | Akan / Asante (Ghanaian) | divergent | akan_ghanaian | Kumasi |
|
||||
|
||||
### South Asian
|
||||
| value | scope | corridor | absorbs | example |
|
||||
|---|---|---|---|---|
|
||||
| `indian` | pan-Indian multi-tradition | divergent | indian | Chandra Deep |
|
||||
| `bengali` | Bengali | divergent | bengali | Purnima |
|
||||
| `punjabi` | Punjabi | divergent | punjabi | Singh's Landing |
|
||||
| `konkan` | Konkan / Marathi coast | divergent | konkan | Ratnagiri *(LUMP? → indian)* |
|
||||
|
||||
### East & Southeast Asian
|
||||
| value | scope | corridor | absorbs | example |
|
||||
|---|---|---|---|---|
|
||||
| `chinese` | Han Chinese | **baseline: east_reach** | chinese | Suzhou, Haodu, Songjiang |
|
||||
| `korean` | Korean | **baseline: east_reach** | korean | Changwon, Miryang |
|
||||
| `japanese` | Japanese | **baseline: east_reach** | japanese | Oshima, Kurashiki |
|
||||
| `vietnamese` | Vietnamese | divergent (east) | vietnamese | Dài Lộ, Hạ Long, Xa Vời |
|
||||
| `tagalog` | Filipino / Tagalog | divergent (east) | tagalog | Dagat, Mabuhay, Marunong |
|
||||
|
||||
### Pacific
|
||||
| value | scope | corridor | absorbs | example |
|
||||
|---|---|---|---|---|
|
||||
| `maori` | Māori / Polynesian voyager | divergent | maori | Rekohu, Ngata's Star, Kelburn Crossing |
|
||||
|
||||
### Middle East / North Africa / Central Asia — THE GAP
|
||||
| value | scope | corridor | absorbs | example |
|
||||
|---|---|---|---|---|
|
||||
| `arab` | Arabic (Levantine / Gulf / Maghreb) | divergent | — | Dalim, Errai (Ghadames) |
|
||||
| `persian` | Iranian / Persian | divergent | — | *(none yet — DLC)* |
|
||||
| `turkic` | Turkish / Central Asian Turkic | divergent | — | *(none yet — DLC)* |
|
||||
|
||||
> **Naming-gap note:** Only ~4 of 300 systems currently read Middle-Eastern, and
|
||||
> Persian/Turkic have zero. Accepted as a 300-system limitation per the maintainer;
|
||||
> logged for possible **DLC** rebalancing (rename/add systems). The values exist so
|
||||
> future content can use them without another taxonomy change.
|
||||
|
||||
---
|
||||
|
||||
## Activity values (UNCHANGED — for reference)
|
||||
|
||||
`scholarly | artistic | institutional | commercial | agrarian |
|
||||
industrial_heritage | medical_elite | ecological | military |
|
||||
financial_technocratic | cosmopolitan | compact_cooperative`
|
||||
|
||||
(Heritage wins when both an activity and a heritage apply.)
|
||||
|
||||
---
|
||||
|
||||
## Migration impact (must do before the culture write)
|
||||
|
||||
The 27 hero systems already shipped `cultural_specialization` values that use the
|
||||
OLD suffix forms. Renames touch these and require a TOML edit + regen:
|
||||
|
||||
| old (shipped) | new (canonical) | hero systems affected |
|
||||
|---|---|---|
|
||||
| `afrikaans_cape` | `afrikaans` | Vuurkloof |
|
||||
| `french_provencal` | `french` | Confluent/VGV |
|
||||
| `italian_northern` | `italian` | Nova Roma |
|
||||
| `norse_compact` | `nordic` | Nyrheim |
|
||||
|
||||
`scottish`, `chinese`, `tagalog`, `vietnamese`, `zulu` and all activity values are
|
||||
already canonical — no change. The CI constant `_CULTURAL_HERITAGE` in
|
||||
`import_economics.py` gets replaced with this 38-value set.
|
||||
|
||||
---
|
||||
|
||||
## Maintainer decisions (resolved 2026-06-01)
|
||||
|
||||
1. **welsh** → KEEP distinct.
|
||||
2. **afro_brazilian** → KEEP distinct.
|
||||
3. **cape_malay / xhosa** → KEEP distinct (southern Africa stays fine-grained;
|
||||
overrepresentation is addressed by the DLC rebalance above, not by lumping).
|
||||
4. **luxembourgish** → KEEP distinct.
|
||||
5. **konkan** → KEEP distinct.
|
||||
6. **hungarian, yoruba, hausa, persian, turkic** → KEEP as available-but-unused
|
||||
slots (canon should be complete; CI accepts them).
|
||||
|
||||
**Result: all 38 values retained, nothing folded.** Everything else is mechanical
|
||||
reconciliation, not a judgment call.
|
||||
|
||||
## Final value list (38) — the CI `_CULTURAL_HERITAGE` set
|
||||
|
||||
```
|
||||
anglo scottish irish welsh
|
||||
portuguese brazilian afro_brazilian cape_verdean angolan sao_tomean
|
||||
spanish canarian italian french
|
||||
german dutch nordic finnish polish czech russian luxembourgish hungarian
|
||||
afrikaans cape_malay zulu xhosa herero shona swahili igbo yoruba hausa akan
|
||||
indian bengali punjabi konkan
|
||||
chinese korean japanese vietnamese tagalog
|
||||
maori
|
||||
arab persian turkic
|
||||
```
|
||||
**47 values, no duplicates** — this token list is authoritative (it replaces
|
||||
`_CULTURAL_HERITAGE` in `import_economics.py`).
|
||||
Reference in New Issue
Block a user