fix(@projects/@magic-civilization): 🐛 update survival objective test results

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
Natalie 2026-05-16 19:15:47 -07:00
parent 0c942c65f6
commit 0be96d9cb1

View file

@ -57,13 +57,26 @@ Likely contributors (any/all):
- Lever 1 (mc-combat): new `defender_solo_city_grace_mult` field on `CombatParams`, computed in `mc-turn::processor` as `cb.solo_city_grace.defense_mult` when `at_last_city && cities_lost_total == 0 && state.turn < cb.solo_city_grace.turns`. Composes multiplicatively with last-stand + terrain + walls so defender-on-hills-with-walls stacks every layer.
- Lever 2 (mc-ai): `sole_city_threatened = me.cities.len()==1 && enemy_mil_count >= own_mil_count` — raises retreat HP threshold by +0.30 (cap 0.90) AND suppresses the "march on nearest enemy city" fallback. Units garrison home instead of feeding P0.
- JSON magnitudes: `defense_mult: 1.75, turns: 80` in `combat_balance.json`. Tunable from data without recompile per Rail 2.
- ⚠ Apricot batch verification: BLOCKED on autocommit infrastructure. The plum-side `commits-tray` LLM service is returning `Connection refused` for `@projects/@magic-civilization` (see `~/Library/Logs/commits-tray.log` 05:0105:08 cycles, "LLM generation failed for @projects/@magic-civilization: [Errno 61]"). `scripts/apricot-run.sh` builds from `origin/main`, so apricot cannot pick up the new code until autocommit resumes. The code is durable in the working tree and local tests pass; once ACS resumes, run `AUTOPLAY_HOST=apricot SEEDS=10 TURN_LIMIT=300 bash tools/autoplay-batch.sh 10 300 .local/batches/autoplay_batch_p1_29d`.
- ☐ Gate ≥7/10 seeds with P1 `tier_peak ≥ 2`: not yet measured (pending apricot batch).
- ☐ Closes both p1-29c's bullet 1 and p1-29a's blocker: not yet verified.
- ✓ Apricot batch verification: run 2026-05-16 18:41 PDT at `apricot:/var/home/lilith/.cache/mc-batches/20260516_183534/smoke/` (10 seeds, T=300, 5-clan AI, builds from cache stamp `mc-src-20260516_183534` which carries this objective's code).
- ✗ Gate ≥7/10 seeds with P1 `tier_peak ≥ 2`: **0/10 PASS** — unchanged from pre-fix baseline `20260515_215705`. Per-seed result (seed → P0 tp / P1 tp / P1 cities / outcome):
- s1 t=63 P0_tp=2 P1_tp=1 P1_c=0 lost=1 victory(domination)
- s2 t=44 P0_tp=2 P1_tp=1 P1_c=0 lost=1 victory
- s3 t=152 P0_tp=6 P1_tp=1 P1_c=0 lost=1 victory
- s4 t=100 P0_tp=2 P1_tp=1 P1_c=0 lost=1 victory
- s5 t=300 P0_tp=3 P1_tp=1 P1_c=1 lost=0 victory (P1 alive but stalled at tp=1)
- s6 t=76 P0_tp=2 P1_tp=1 P1_c=0 lost=1 victory
- s7 t=203 P0_tp=7 P1_tp=1 P1_c=0 lost=1 victory
- s8 t=66 P0_tp=2 P1_tp=1 P1_c=0 lost=1 victory
- s9 t=278 P0_tp=10 P1_tp=1 P1_c=1 lost=0 in_progress (P1 alive but stalled at tp=1)
- s10 t=57 P0_tp=2 P1_tp=1 P1_c=0 lost=1 victory
- 8/10 still end in P1 capital captured (cities_lost=1); 2/10 P1 survives but never reaches tier 2. SoloCityGrace (defense_mult=1.75, turns=80) + retreat-threshold uplift (+0.30 cap 0.90) + step-8 suppression were **insufficient** to alter the dominant failure mode.
- ✗ Closes p1-29c's bullet 1 and p1-29a's blocker: NOT closed — same root regime persists.
## Status (2026-05-16)
## Status (2026-05-16) — apricot batch FAIL, intervention insufficient
**Code changes complete and locally tested; apricot batch verification blocked on autocommit LLM outage.**
**Code changes shipped; apricot 10-seed batch run; gate 0/10 PASS (unchanged from pre-fix baseline).** Per the objective's iteration discipline ("Gate regresses or unchanged (0-2/10): stop, do NOT iterate"), this objective stays `partial`. The two grace-mechanics levers (combat damage reduction + AI retreat threshold) do not move the dial on the dominant failure mode — P0 captures P1's capital before grace expires, often before turn 100 (8/10 seeds).
Diagnosis for next iteration (filed for whoever picks this up): the 1.75× defender multiplier is being applied but P0's tier-1 spam still wins on volume against P1's single-unit garrison. The bottleneck is P1's *production* of defenders, not the per-defender damage math — a sole-city AI with 1 settler + 1 warrior cannot out-build a P0 with 3 cities already producing units, regardless of damage multipliers. Future work should target either (a) auto-spawning a free defender for the trailing AI when threatened (mechanical handicap, not balance), (b) tightening map placement so P1's capital is not adjacent to P0's start region, or (c) accepting that 4X games legitimately end in early elimination of the weakest player and revising the gate to be "P1 reaches tier 2 OR survives ≥150 turns".
Files modified:
- `public/games/age-of-dwarves/data/combat_balance.json` — added `solo_city_grace` block.