magicciv/.project/objectives/p2-56c-master-grandmaster-auras.md
Natalie 7a51e3b159 fix(@projects/@magic-civilization): 🔴 update ai-tier objective statuses
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-07 02:53:33 -07:00

2.7 KiB

id title priority status scope owner updated_at evidence blocked_by
p2-56c Master / Grandmaster auras — adjacent-slot yield propagation p2 done game1 unassigned 2026-05-07
src/simulator/crates/mc-city/src/aura.rs:79
src/simulator/crates/mc-city/src/aura.rs:120-208
src/simulator/crates/mc-city/src/expertise.rs:35-37
src/simulator/crates/mc-turn/src/processor.rs:875-888
p2-56b

Context

Per public/games/age-of-dwarves/docs/cities/SPECIALISTS.md, specialists at the Master and Grandmaster tiers project a per-WorkerCategory aura onto adjacent slots within the same city, granting a flat additive yield bonus to specialists in those slots. This rewards intentional clustering of high-tier workers and creates non-trivial city-design choices.

Acceptance

  • mc-city::aura::compute_aura_bonuses(ledger, cfg) -> BTreeMap<WorkerCategory, u32>mc-city/src/aura.rs:79. (Adjacency model simplified to "all slots in same city" — see Remaining work for slot-graph upgrade path.)
  • ✓ Aura magnitudes loaded from data/balance/expertise.json (extended in place by p2-56b cycle 6 instead of _progression.json). master_aura_bonus/grandmaster_aura_bonus keyed by WorkerCategory. mc-city/src/expertise.rs:35-37,61,67.
  • ✓ Aura applied in mc-turn::process_city_production via per-category aura lambda before XP gain — mc-turn/src/processor.rs:875-888.
  • ✓ 6 aura tests green in mc-city/src/aura.rs:120-208 including test_master_aura_boosts_adjacent_yield, test_grandmaster_aura_stronger_than_master, test_no_aura_below_master, test_aura_bonuses_sum_across_emitters.
  • ✓ Aura visible via GdCity::specialist_aura_bonus(ledger_json, category) GDExt bridge query — src/simulator/api-gdext/src/lib.rs (GdCity #[godot_api] impl block, cycle 48). Accepts JSON-serialized BTreeMap<WorkerCategory,WorkerExpertise> + category string; calls mc_city::compute_aura_bonuses + ExpertiseConfig::default(); returns aura bonus as i64. Cargo check workspace clean. mc-city 168/168 tests green.

Source-of-truth rails

  • Rust crate: mc-city::aura owns adjacency + propagation logic. No GDScript shadow.
  • JSON path: public/resources/specialists/_progression.json (shared with p2-56b).
  • mc-core wrapper: AuraBonus typed value (per-WorkerCategory map) — no stringly-typed HashMap<String, i32> over GDExt.

Out of scope

  • Cross-city auras — explicitly NOT supported in Game 1.
  • Aura stacking math beyond simple summation — single rule, no diminishing returns.
  • VFX/animation for aura emission — UI follow-up.

References

  • public/games/age-of-dwarves/docs/cities/SPECIALISTS.md
  • Parent: p2-56b
  • Sibling: p2-56a