fix(@projects/@magic-civilization): 🐛 update combat dev work log with skipped levers and test results

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
Natalie 2026-04-30 01:12:39 -04:00
parent 5875311197
commit bda82df594

View file

@ -51,17 +51,25 @@ Three-round hypothesis tree:
- ❌ p0-01's evidence updated to cite this objective's closure as the source of v1-style symmetry/unit-tier gate satisfaction
- ❌ Per-difficulty validation: `AI_DIFFICULTY=hard tools/autoplay-batch.sh 10 500` shows median winner `tier_peak ≥ 10` reached by T200 (per user directive). `AI_DIFFICULTY=insane` same or stronger. `AI_DIFFICULTY=easy` shows clearly weaker progression. Use `tools/time-to-peak-unit.py` and a new `tools/time-to-tier-peak.py` (analogous metric for `tier_peak` not just unit) to measure.
## combat-dev work log (2026-04-29)
## combat-dev work log (2026-04-29/30)
**R10 canonical baseline** (`p1-39-r10-canonical-hard-20260428_151849`):
- median `tier_peak_gap = 5.0` FAIL (target ≤4)
- median `winner_tier_peak = 4.5` PASS
- Levers 1+2 (city HP / walls) already at aggressive R5a values: `BASE_CITY_HP=500`, `melee_wall_penalty` tier1=0.40/tier2=0.25. Further bumps risk stalemate (documented in siege.rs code comments).
- combats = 454 median, wonders 7/10, peak_unit ≥3 in 10/10
**Levers implemented (batch `p1-29-stack-occ-20260430_004304` running on apricot):**
- **Lever 3 — Stack-of-doom cap**: `MAX_CITY_ATTACKS_PER_TURN=3` in `auto_play.gd`. Limits how many times a player's units can attack the same city in one turn. Counter reset each player turn, keyed by city position.
- File: `src/game/engine/scenes/tests/auto_play.gd` (vars at line ~49, reset at ~952, check at ~2054)
- **Lever 4 — Occupation penalty**: Captured cities produce at 50% for 20 turns. `captured_turn` field added to `city.gd`, set in `combat_utils.gd::capture_city`, multiplier applied in `turn_processor.gd::_process_production`.
- Files: `src/game/engine/src/entities/city.gd`, `src/game/engine/src/modules/combat/combat_utils.gd`, `src/game/engine/src/modules/management/turn_processor.gd`
**Levers 1+2 — skipped, already at R5a max:**
- `mc-city::BASE_CITY_HP = 500` (was 260, bumped across multiple prior passes)
- `mc-combat::melee_wall_penalty` tier1=0.40, tier2=0.25 (tightened from 0.70/0.55 in R5a)
- Code comment in `resolver.rs` explicitly warns: "0.40-0.33 stalled all seeds at max_turns and regressed checklist results"
- Citation: `src/simulator/crates/mc-combat/src/resolver.rs` line ~448, `src/simulator/crates/mc-combat/src/siege.rs` lines 30-40
**Batch status**: Running. Will update with results when complete.
**Lever 3 — stack-of-doom damage clamp** (batch running):
- Change: `mc-combat/src/resolver.rs::compute_predicted_damage``damage_to_defender = raw.min(2.0 * defender.hp)`
- All 88 unit + golden tests pass; golden fixture updated (`stress_first_strike_one_round_kill` defender_damage 122→40)
- Note: clamp fires only when attacker_strength exceeds defender by 35+ pts (warrior vs warrior: raw≈30, cap=120, never fires in normal play). Batch will confirm whether it moves `tier_peak_gap`.
- Batch: `p1-29-lever3-dmg-clamp-20260430_010550` on apricot, pid 865847, 10 seeds × T300
**Lever 4 — occupation penalty:** pending lever-3 result.
**Batch status**: Lever-3 batch running. Will update acceptance bullets with evidence when complete.