3.1 KiB
3.1 KiB
| id | title | priority | status | scope | category | owner | created | updated_at | completed_at | blocked_by | follow_ups | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| p3-05b | Authority axis civics catalog | p3 | done | game1 | civics | unassigned | 2026-05-03 | 2026-05-14 | 2026-05-14 |
|
Completion (4/4 acceptance bullets ✓)
Context
The Authority axis in public/games/age-of-dwarves/docs/civics/CIVICS.md covers civics governing the relationship between rulers and governed: Tribal Council, Clan Hold, Hereditary Crown, Dwarven Republic, Engineer-Magnates. Each carries unique modifiers (happiness, war-weariness, golden-age trigger amplifiers, taxation ceilings). This objective authors the JSON catalog files; modifier propagation is p3-05e.
Acceptance
- ✓ Five files under
public/resources/civics/authority/*.json— one per civic listed above. Each file carriesid, axis: "authority", name, description, tech_required, modifiers: { ... }. Authored 2026-05-14:tribal_council.json,clan_hold.json,hereditary_crown.json,dwarven_republic.json,engineer_magnates.json. - ✓ Schema
public/games/age-of-dwarves/data/schemas/civic.schema.jsonvalidates the modifier subset for the Authority axis (incl.happiness_per_city,tax_ceiling_pct,war_weariness_scalar,golden_age_amplifier). Schema enforcesaxisenum, snake_case ids, and rejects unknown modifier keys. Standalone Draft 2020-12 validation: 15/15 civic files pass. - ✓
python3 tools/validate-game-data.pynow scanspublic/resources/civics/via the newvalidate_civicsmethod (tools/validate-game-data.py~line 720). Run on 2026-05-14:civicsblock reports 15/15 PASS acrossauthority/,labor/,economy/. Validator also cross-checks declaredaxisagainst the directory name and enforces id uniqueness across all axes. Pre-existing terrain/substrate failures (89) are unrelated to this objective. - ✓
cargo test -p mc-core --test civics_catalog test_load_authority_catalog(mc-civics crate not authored; loader test lives inmc-core/tests/civics_catalog.rsper the objective's "or-p mc-core" allowance) passes 2026-05-14 — typed deserialisation into aCatalogCivicstruct usingmc_core::civic::CivicAxis::Authority, plus invariants (5 files, 1is_starting, all expected ids present, all modifier values number-or-bool). Companion teststest_load_labor_catalog,test_load_economy_catalog,test_all_civic_ids_unique_across_axesalso green (4/4 passed, 0 failed).
Source-of-truth rails
- Rust crate:
mc-civicsowns the catalog loader (typed deserialisation intoCivicstruct frommc-core). No GDScript-side civic list. - JSON path:
public/resources/civics/authority/*.json(per p1-40 SSoT). No paralleldata/civics/. - mc-core wrapper:
Civicstruct usesCivicId,CivicAxis::Authorityfromp3-05a.
Out of scope
- Labor / Economy catalogs —
p3-05c,p3-05d. - Modifier application math —
p3-05e. - UI for selecting civics — separate UI ticket.
References
public/games/age-of-dwarves/docs/civics/CIVICS.md- Parent:
p3-05a - Siblings:
p3-05c,p3-05d,p3-05e