feat(@projects): ✨ clarify inline movement separation docs
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
parent
502a77a49b
commit
8dcab6df6e
1 changed files with 37 additions and 0 deletions
|
|
@ -186,3 +186,40 @@ produce live-grade games (**2531 kills**, conquest, 47-city winner over 250
|
|||
turns). Use those as the convergence harness for the cutover; leave
|
||||
`dominion_bench` as the fast inline-AI economic/expansion bench it was designed
|
||||
to be. The real-AI viability question (step 1) is **already answered** there.
|
||||
|
||||
---
|
||||
|
||||
## Task #2 finding (2026-06-08) — inline movement runs in the AUTHORITATIVE path, not bench-only
|
||||
|
||||
Corrects an earlier framing. The inline bench movement (Phase-5: nearest enemy
|
||||
unit → enemy city → lair, `processor.rs:2009-2031`) is **bundled into**
|
||||
`process_fauna_encounters_inner(state, result, move_units)` — the `move_units`
|
||||
flag (`processor.rs:1994`) gates the Phase-5 loop:
|
||||
- `TurnProcessor::step()` → `move_units=true` → inline movement runs.
|
||||
- `TurnProcessor::step_encounters_only()` → `move_units=false` → movement
|
||||
skipped, **but it also skips production/growth** (it is encounters-only; see
|
||||
`bridge_contract_tests.rs:256,279`).
|
||||
|
||||
**Caller map (`grep '\.step('`):**
|
||||
- **Authoritative/harness path:** `mc_player_api::dispatch::apply_end_turn`
|
||||
(`dispatch.rs:415`) calls `processor.step(state)` — `move_units=true`. So the
|
||||
authoritative turn runs the inline heuristic movement **on top of**
|
||||
`run_ai_turn`/`drive_ai_slot` (which already moved units). The dumb heuristic
|
||||
re-moves what the real AI positioned. (`full_game_transcript` still produces
|
||||
2531 kills — the combination works, but the inline pass is redundant and can
|
||||
undermine the real AI's tactical placement.)
|
||||
- **Benches:** `dominion_bench`, `solo_dominion`, `tournament_bench`,
|
||||
`fauna_pressure_bench`, `mc-sim/lib.rs`, `processor_invariants` — all
|
||||
`step()` (`move_units=true`), relying on the inline AI as their only mover.
|
||||
|
||||
**Precise cutover fix (next increment — pure-Rust, benched on
|
||||
`full_game_transcript`):** give the authoritative path a way to run the FULL
|
||||
turn (production/growth/combat/victory) with `move_units=false`, so movement
|
||||
comes ONLY from `run_ai_turn`. Options: (a) add `move_units: bool` param to a
|
||||
`step_full(move_units)` and have `apply_end_turn` pass `false`; (b) a dedicated
|
||||
`step_no_inline_move()`. Then `run_ai_turn` owns all movement and the inline
|
||||
heuristic is genuinely bench-only (only the `mc-sim` benches keep `move_units=true`).
|
||||
Verify: `full_game_transcript` / `long_game_transcript` still produce combat +
|
||||
sane shape with movement driven solely by `run_ai_turn`. Acceptance for task #2
|
||||
(documented separation: authoritative=run_ai_turn, inline=bench-only) is met
|
||||
once `apply_end_turn` no longer triggers the inline movement.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue