docs(military): 📝 Add capital blackout rules and phase 3 military communication protocols to documentation

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
autocommit 2026-05-18 23:01:22 -07:00
parent 7014e003b6
commit 3189dc7b3f
2 changed files with 4 additions and 4 deletions

View file

@ -72,7 +72,7 @@ These events are the AI's only asynchronous inputs. The perception filter materi
### 7. Capital-loss blackout
When a player loses their capital, all in-flight outbound envelopes are dropped, comm_tier on remaining links drops by 1, and decay timers accelerate by 50% until a new seat-of-power is named. A capital siege is not just symbolic; it deafens an entire civilization for the duration of the interregnum.
When a player loses their capital, all in-flight outbound envelopes are dropped, comm_tier on remaining links drops by 1, and decay timers accelerate by 50% until a new seat-of-power is named. **The player names a new capital on their next turn** — it is a forced choice surfaced at start-of-turn (pick any surviving city). Blackout lasts a single turn unless the player ends turn without choosing; an auto-promote fallback (highest-pop city, tie-break by lowest `city_id`) prevents AI stalls. A capital siege is not just symbolic; it deafens an entire civilization for the duration of the interregnum, but the interregnum is short by design.
### 8. Beacon-tap counter-intel

View file

@ -34,10 +34,10 @@ pub struct BlackoutState {
### Duration and recovery
Blackout ends when the player names a new seat-of-power. Two paths:
Blackout ends when the player names a new seat-of-power. **The player names a new capital on their very next turn** — this is a forced choice surfaced at start-of-turn while the blackout is active. Two paths exist:
- **Player / AI explicit action**: a new `PlayerAction::NameSeatOfPower { city_id }` becomes legal whenever `blackout.is_some()` and the player owns at least one city. The action consumes nothing (no gold, no production); it is a one-click civics declaration. On execution it sets `player.capital_position` to the named city's hex, flips that city's `is_capital = true`, and calls `mc_comms::blackout::end_blackout`.
- **Auto-promote fallback**: if `turn >= blackout.auto_promote_at_turn` and the player still has cities, the turn processor auto-selects the highest-population surviving city (ties broken by lowest `city_id` for determinism) and runs the same `NameSeatOfPower` effect. This guards against AI stalls and surfaces a "capital auto-relocated" event in the replay log.
- **Player / AI explicit action (primary path)**: a new `PlayerAction::NameSeatOfPower { city_id }` becomes legal whenever `blackout.is_some()` and the player owns at least one city. While blackout is active, this action is **required before end-turn** for human players — the end-turn button surfaces a "you must name a new seat of power" gate. The action consumes nothing (no gold, no production); it is a one-click civics declaration. On execution it sets `player.capital_position` to the named city's hex, flips that city's `is_capital = true`, and calls `mc_comms::blackout::end_blackout`.
- **Auto-promote stall guard**: with `auto_promote_after_turns: 1` in `comms.json`, if a player ends their next turn without naming a seat-of-power (AI stall, human mis-click past the gate, headless test), the turn processor auto-selects the highest-population surviving city (ties broken by lowest `city_id` for determinism) and runs the same `NameSeatOfPower` effect. This is a safety net, not a design feature — the intended experience is "you pick on the next turn, blackout lasts one turn".
`end_blackout(state, player, turn, new_capital_city_id)` clears `player.blackout = None` and emits the `CapitalBlackoutEnded` event below. Comm-tier penalty disappears at view-time; decay thresholds revert. Future `LastSeen` entries age at full duration again.