2.8 KiB
2.8 KiB
| id | title | priority | status | scope | updated_at | evidence | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| p0-06 | Fold gold income / upkeep / improvement yields into turn loop | p0 | done | game1 | 2026-04-17 |
|
Summary
mc-economy::process_gold() is now called from mc-turn::TurnProcessor::process_economy() each turn. Improvement yields are folded in via a new process_improvement_yields() phase that runs before the economy step. All iteration is over BTreeMap-sorted keys for determinism. 807 tests passing, 0 failures on apricot.
Acceptance
-
✓ Per-turn gold income = Σ(city marketplace yield + trade route yield).
processor.rs::process_economy()buildsCityGoldInputper city, looks upbuilding_gold_tablefor flat gold + gold_percent per building type, uses wealth-axis proxy for tile gold, then callsmc_economy::process_gold(&city_inputs, &unit_inputs).- Test:
t7b_building_gold_table_adds_to_income— marketplace (+3 gold, +25%) on 10-gold base → asserts 13 net gold.
-
✓ Unit upkeep deducted per turn; negative treasury triggers unit disbanding per
difficulty.jsonrule.process_economy()collectsUnitMaintenanceInputfromplayer.unit_upkeep.process_gold()computes net_gold including upkeep; insolvency path disbands cheapest unit.- Test:
t7b_building_upkeep_deducted_and_insolvency— forge (20 upkeep) on 0-gold treasury → unit count drops by 1.
-
✓ Improvement yields (farm, mine, hunting_grounds) fold into owning city's stockpile.
- New
process_improvement_yields()inprocessor.rsiteratesplayer.city_improvements(Vec<Vec>), looks upimprovement_yield_tablefor food/production deltas, adds tocity.food_yield/city.prod_yieldeach turn. - Test:
t7b_improvement_yields_fold_into_city— farm(+2 food) + mine(+2 prod) each turn; after 2 turns pop and production are elevated vs baseline.
- New
-
✓ Deterministic across seeds (BTreeMap iteration; no floating-point accumulation order issues).
process_economy()builds aBTreeMap<&str, &BuildingGoldEntry>from city buildings before iterating.process_improvement_yields()builds aBTreeMap<&str, count>from improvement lists before applying yields.- No floating-point accumulation; all gold arithmetic is integer (
i32).
-
✓
mc-turntests exercise the full income/upkeep/yield path.- Three new tests added at
processor.rst7b block:t7b_building_gold_table_adds_to_income,t7b_building_upkeep_deducted_and_insolvency,t7b_improvement_yields_fold_into_city. cargo test --workspaceon apricot: 807 passing, 0 failures.
- Three new tests added at