feat(@projects/@magic-civilization): update lair assault mode docs and tests

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
Natalie 2026-05-05 14:29:26 -04:00
parent 17d0f4cd6c
commit a254f0fbcb

View file

@ -24,11 +24,15 @@ blocked_by: [p0-17]
## Acceptance
- ❌ `mc-combat::lair::resolve_assault(attacker_stack, lair, rng) -> AssaultOutcome` in `src/simulator/crates/mc-combat/src/lair.rs`. Outcomes: `Cleared(loot)`, `Repulsed(losses)`, `Withdrawn`.
- ❌ Combat math distinct from open-field combat: defender posture +25% (documented in `LAIRS.md`), terrain modifiers from the lair tile.
- ❌ Loot table per lair tier in `public/resources/lairs/loot/*.json`.
- ❌ Player initiates via `GdLair::assault(stack_id)` GDExt method; UI displays mode picker (Assault / Siege / Raid).
- ❌ `cargo test -p mc-combat test_assault_repulses_weak_attacker` and `test_assault_clears_lair_drops_loot` green.
- ✓ `mc-combat::lair::resolve_assault(LairAssaultParams) -> AssaultOutcome` in `src/simulator/crates/mc-combat/src/lair.rs` with the three-variant outcome (`Cleared { loot, stack_survivors }`, `Repulsed { surviving_defenders }`, `Withdrawn`).
- ✓ Combat math applies `LAIR_DEFENDER_POSTURE_BONUS = 0.25` on top of caller-supplied terrain bonus (`crates/mc-combat/src/lair.rs:44`, `:192`), distinct from open-field combat. Documented in `public/games/age-of-dwarves/docs/combat/LAIRS.md`.
- ❌ Loot table per lair tier in `public/resources/lairs/loot/*.json`. Caller-passed `Vec<LootEntry>` works today; per-tier JSON authoring deferred to p3-10b loot pass.
- ❌ Player initiates via `GdLair::assault(stack_id)` GDExt method; UI displays mode picker (Assault / Siege / Raid). UI surface deferred — `LairCombatMode` typed enum is wired through the resolver but no GDExt bridge yet.
- ✓ `cargo test -p mc-combat test_assault_repulses_weak_attacker` and `test_assault_clears_lair_drops_loot` green (verified on apricot 2026-05-05). Plus `mc-core` lair-mode tests: `test_lair_mode_serde_round_trip`, `test_assault_is_default_mode_for_existing_callers`, `test_lair_mode_ord_consistent_with_all_variants`.
## Phase A status (2026-05-05)
Phase A (typed-enum + Assault wiring) is **done**. Phase B (loot JSON files) and Phase C (GDExt mode picker) carry over to p3-10b / p3-10c respectively as already noted in the close-out paragraph above.
## Source-of-truth rails