ai-opponents.md · non-normative

AI Opponents — Difficulty, Personality, and Being Worth Playing

Status: Design proposal v0.1 · Angle: difficulty, personality, legibility, multiplayer roles · Depends on: 00-direction.md, 01-decision-turn-model.md, and the specification set — 01-game-rules (GR), 02-units-and-industry (US), 10-turn-model (TM), 11-combat (CB), 12-economy (EC), 13-command (CM), 14-victory (VC). Clean-room: every number here is mine and is argued on its own terms.

This document owns the difference between a strong AI and a good opponent. It does not own the AI's internal architecture, its plugin ABI, or its search implementation; where it names a mechanism it does so because the difficulty ladder or a personality has to hang on something concrete, and the architecture angle governs how that mechanism is actually built.

The thesis, stated once so everything below can be tested against it:

An opponent is worth playing when you can lose to it and learn something. That requires three things and they are the three sections of this document. The difficulty must be honest, or the lesson is false. The opponent must have a character you can read, or there is nothing to learn from. And the game must be able to tell you afterwards what it was doing, or you cannot collect the lesson even when it is there.


0. Naming, and three collisions that already exist

This document introduces vocabulary into a set that has run out of good words. It uses these, and they collide with nothing:

Term Means
Rank An AI difficulty level. Six of them: Cadet, Lieutenant, Captain, Colonel, General, Marshal.
Personality A named set of parameter offsets giving an opponent strategic preferences. Seven shipped.
Aim / Operation / Point The three levels at which an AI decides: empire, theatre, and the individual decisive action.
Decisive Point A unit or small group the AI hand-orders outside the command layer.
Intent Record The per-turn audit artifact of an AI seat's reasoning, sibling to CM's CommandDecisionRecord.
Caretaker / Substitute The two mandates under which an AI may run an absent human's seat.

Rank, deliberately, is not Tier (US owns Tier for the Industry ladder 1–4), not Grade (CB owns Grade for Green/Trained/Veteran/Elite veterancy), not Class (US owns unit class), not Level (works level), and not Band (VC owns the Rumour/Report/Alarm bands). An AI difficulty level called "Veteran" would be a word already carrying a combat meaning, and CM-007 already had to spend a naming note on exactly that kind of overload. One is enough.

Three collisions in the existing set that this document had to navigate and that the spec editors should settle rather than inherit:

  1. Posture is CM's standing job (Hold/Garrison/Screen/Survey/March/Attach), Stance is TM's per-turn tactical setting (March/Advance/Hold/Entrench), and CB §4 uses posture for a third enum (Assault/Guarded/Entrenched/Withdraw). CM-007 reconciled the first two. The third is unreconciled. This document uses CM's names throughout and treats CB's four values as the combat-facing projection of TM's Stance.
  2. Doctrine is CM-770's Posture-plus-Sanctions bundle and EC §5's named production ratio. This document uses CM's meaning, and calls EC's object a production Template, which is what CM-1310 already names it.
  3. Initiative is TM's activation score, and CM-007 already renamed the Sanction that wanted the word. No further action; noted so the AI's initiative-shaped reasoning is unambiguous.

1. The problem

Three problems, and the industry solves all three badly.

Problem A — difficulty is usually a lie. The standard difficulty slider does not make the opponent play better. It gives the opponent more resources, better combat odds, or an unfogged map, and calls that Hard. This is worse than it looks. It teaches the player nothing, because the thing that beat them was not a decision. It makes every AI success suspect, because the player cannot tell competence from subsidy. And it destroys the only feedback loop that matters: you cannot improve against an opponent whose advantage is not reproducible by you.

Worse in the other direction: Easy is usually implemented as noise. The AI is given a probability of doing something stupid. The result is an opponent that plays a decent turn and then walks a battalion into a mountain for no reason. Nobody has ever met a human who plays like that. Easy should be a weaker mind, not the same mind with a seizure.

Problem B — personality is usually a label. Games ship "Aggressive Genghis" and "Builder Gandhi" and the difference is a couple of weights that wash out by turn 40, because the underlying evaluation dominates and every AI converges on the same locally-optimal play. The player learns within three games that the label means nothing, and then the roster is decoration. A personality that does not change what the AI does, observably, for the whole game, is a cosmetic.

Problem C — you cannot read your opponent. In a fog game with a competent opponent, the player sees effects without causes. Something is massing in the north. Why? What does it want? A human opponent at least has a plan you could in principle have deduced; most AIs do not have a plan, they have a per-turn utility sum, so there is nothing to deduce and the player's attempts to model them are wasted effort. This is not fog doing its job. Fog should hide where the enemy is, not whether the enemy is a thing that can be understood.

Every one of these is a design failure rather than a technology failure, and each has a design fix.

1.1 The one asset this design has that others do not

13-command.md exists. It specifies, normatively and core-side, how a unit behaves under a standing job: how a Screen picks its tile (CM-460), how a Survey chooses where to look (CM-500), when a unit withdraws (CM-660), what happens when a plan meets an obstruction (CM-1340), how production is routed to a front without per-city clicks (CM-1190). All of it is deterministic (CM-110), integer (CM-120), fog-honest (CM-130), and — this is the load-bearing part — identical for every player, every client, and every AI seat (CM-100).

That changes the AI problem from "produce 150 good unit orders" to "produce about a dozen good command-object decisions and hand-order the four or five units where the command layer is not good enough." It is the difference between a problem nobody has solved and a problem that is mostly bookkeeping.

Three of the four properties named in the brief follow from it or reinforce it: the collapsed branching factor is CM; the clean bounded turn function is TM's Orders phase; the deterministic headless core is AR and CB's 0.45 µs exact predictor. The fourth — event-sourced games as training data — matters most for the top of the ladder and I treat it honestly in §11.


2. The three decisions that shape everything else

I want to argue these before describing machinery, because everything downstream follows and each is contestable.

2.1 Weakness is a smaller world model, not a noisier one

Decision: an AI at a low Rank is weak because its evaluation function is missing terms and its planning is slow to re-aim — never because a random draw corrupts its output.

The alternative — utility noise, the standard approach and the one the earlier AI draft specified — fails on its own terms. Noise applied to a good evaluation produces a specific and recognisable artefact: mostly-good play punctuated by decisions with no possible rationale. A human novice does not play like that. A human novice plays consistently, from a model that is smaller than yours. They over-expand, because their model has no term for occupation cost. They assault entrenched infantry, because their model has odds in it but not resolve. They react late, because they only look at a front when something has already gone wrong there. Every one of those errors is systematic, explicable, and learnable-from — which is exactly what noise is not.

So the ladder is built by structured omission. Each Rank's evaluation is a strict superset of the one below, and the terms that are absent are named. This buys four things:

There is one thing omission cannot produce and I add it deliberately: latency. A weak player is not only ignorant, they are slow to change their mind. So each Rank carries a re-plan interval k (the empire-level Aim is reconsidered every k turns) and a commitment lock C (an Operation is held for C turns after its trigger has cleared). Both are deterministic, both are recognisably human, and both produce the single most characteristic weak-player behaviour — arriving with the right plan two turns after it stopped being the right plan.

What is forbidden, at every Rank, and this list is normative for whoever implements it:

2.2 The AI plays through the command layer, and departs from it only at the decisive point

Decision: an AI seat's default output is Postures, Sanctions, Formations, Postings and Requisitions — the same objects a human commits — and the number of units it is permitted to hand-order outside that vocabulary is a per-Rank budget.

This is the spine of the ladder and it deserves the argument.

CM-130's rationale already predicts the human skill curve: "expert players will hand-order at the decisive point. That is the design working, not failing." The command layer is deliberately good enough that delegating costs you little and deliberately fog-honest enough that delegating costs you something at the point where it matters. That is precisely a difficulty axis, already specified, already balanced, and free.

So: Cadet has a Decisive-Point budget of zero. It sets Postures and Sanctions and lets the Cascade run. It is a real opponent — CM's Screen spreads, its Sanctions pick off stragglers, its Requisitions keep production flowing, its Reflexes preserve its units — and it will never win a battle it should have lost, because it never chooses one. Marshal has a budget of sixteen and spends it exactly where a strong human would: the assault that must be timed, the encirclement that must close, the artillery that must be concentrated, the transport that must not be caught.

Four consequences, all good:

  1. The floor of AI quality is the floor of automation quality. Every improvement to CM improves every Rank, and every Rank's baseline behaviour is behaviour the design has already reviewed.
  2. The AI has no private tactics. Everything it does at low Rank is expressible by a player, which makes it readable (§7) and makes fairness checkable.
  3. The compute story becomes honest. The expensive part of a turn — 150 units' movement, pathing, coverage, reflexes — is already paid for by the core (CM-2100: 400 units in 50 ms) and is not the AI's problem at all.
  4. The ladder has a natural top. Knowing when to leave the command layer is genuinely the last skill a strong player acquires, so a Rank defined by that budget is defined by the right thing.

The rule that keeps this honest, stated hard because it is the fairness contract:

The shared vocabulary rule. An AI's only effect on the world is an order set, identical in kind and legality to one a human could submit in the same state (CM-2040 already guarantees the command layer is entirely expressible as orders). Any AI behaviour that no player can express is a bug and a fairness violation, not a feature.

2.3 Personality is a priced, published offset from a tuned baseline

Decision: one neutral, self-play-tuned parameter set is the baseline. Every personality is a signed offset from it, and the win-rate cost of that offset is measured and published.

The failure mode of personality systems is that nobody knows what the flavour costs, so either it costs nothing (the dials are too small to matter and the personality is cosmetic) or it costs everything (the aggressive one loses every game and the roster is a difficulty selector with extra steps). Both are avoidable by measuring.

So: Aurel is the baseline — no preferences, dials at the tuned optimum. Every other personality declares its offsets, and the self-play pipeline reports its Elo price: its rating loss against Aurel at the same Rank over ≥1000 games. The price is capped at 60 Elo (roughly 58:42 in Aurel's favour), which is large enough for the character to be real and small enough that choosing a personality is choosing an opponent rather than choosing a handicap. A personality whose measured price exceeds the cap is re-tuned or retired; it is not shipped with an apology.

Two corollaries that make personality survive contact with a strong opponent:


3. What the AI actually decides

Enough architecture to hang the ladder on. Three levels, matching the granularity the rest of the design already uses.

Level Scope Output Cadence
The Aim The empire Which Track(s) to pursue; expand-versus-digest; the split of Works between units, Cadre (EC §6) and Industry (US §2.2); Posting weights (CM-1130) Every k turns
The Operation One theatre — one Posting or Group One named Operation per theatre, with its geometry, force allocation, and Requisition rows Every turn, subject to commitment lock C
The Point A unit or handful Hand-issued Tasks outside the command layer Every turn, up to budget P

Operations are a closed, named vocabulary, for the same reason CM-330 fixes six Postures: a larger set would look richer and be used less, and a named set is legible to the player afterwards. Eight:

Operation What it is Chiefly expressed as
Hold the Line Deny a frontage; trade space grudgingly Formation Screen, Pace Concentrated, Risk Cautious
Push Axis Advance along one axis to a named objective Group March with a Van, Requisition topped up
Descent Cross water and land a force Ferry Shuttle (CM-535), Landing Ship, then March follow-on
Reduce Take a fortified place by bombardment and assault Concentrated guns (CB §7.2), then Points
Interdict Cut supply, Cadre, or Depots rather than fight the army Dispersed raiders on Survey/March, Leash Loose
Digest Stop; garrison, integrate, repair, rebuild Requisitions Cadre routing, Militia builds, Garrison Postures
Relieve Break an encirclement or reinforce a threatened place High-weight Posting, March with pressHome
Deny Remove a specific opponent's specific Track progress Whatever the Track's geography demands

Deny is the one that would not exist in a game without VC. It is worth having as a first-class Operation because the victory system publishes enough (the Watch, the Alarm, the Ebb schedule) for denial to be a plannable objective rather than a reaction.

3.1 The Dispatch is the AI's attention budget

CM-1610 requires the core to emit Attention Events deterministically, per player, from that player's fog-filtered view (CM-1850). CM-1660 ranks them by an integer Urgency U = S + T + A + P. CM-090 guarantees the presented count does not grow with unit count — median ≤ 5, p95 ≤ 12, at every unit count from 20 to 400.

So the AI reads its own Dispatch and spends its Decisive-Point budget on it, in the same order the human sees. This is not a convenience; it is three separate wins:

Two adjustments for an AI seat:

3.2 The branching factor, arithmetically

The naive statement of the problem: 150 units, each with roughly 24 legal action-and-destination combinations at typical movement allowances on eight-way movement, is 24¹⁵⁰ joint order sets. This is the number that makes people say strategy AI is intractable, and it is the wrong number.

The real statement, through the command layer:

Quantity Value Source
Theatres (Postings) ~4, warned at 13 CM-1150
Named Operations 8 §3 above
Independently scored Operations 4 × 8 = 32
Joint plans (one Operation per theatre) 8⁴ = 4096
After force- and production-budget feasibility pruning ~500 measured, §11.1
Decisive Points ≤ 16, from a Dispatch capped at ~12 items CM-090, §4

A few hundred coherent plans and a dozen local decisions. That is a tractable problem, and the reason it is tractable is that CM already collapsed it. This is the single most important feasibility fact in the document, and it is worth saying plainly that most 4X AIs do not have it — they lack the command abstraction, so their unit layer and their strategy layer are the same layer and neither can be done well.


4. The ladder

Six Ranks. The one-line descriptions are the difficulty selector copy, and they are honest:

Rank It understands…
Cadet its orders
Lieutenant a fight
Captain an economy
Colonel a map
General a clock
Marshal you

4.1 The knobs

Knob Meaning
H Forecast horizon in turns for the closed-form economy and Track projection
B Candidate joint plans scored at the Aim level
R Full-Cascade rollouts spent per turn verifying the chosen plan
P Decisive-Point budget: units hand-ordered outside the command layer, per turn
A Dispatch items examined per turn
k Aim re-plan interval, in turns
C Commitment lock: turns an Operation is held after its trigger clears
S Staleness tolerance: observation age, in turns, the AI will treat as current
Cadet Lieutenant Captain Colonel General Marshal
H 3 6 10 16 24 to the Horizon
B 8 32 128 512 1536 4096
R 0 0 0 1 2 4
P 0 1 3 6 10 16
A 3 5 7 12 all all
k 8 5 3 2 1 1
C 10 6 3 1 0 0
S 12 8 5 3 2 2

S deserves a note because it produces the most recognisable weak-player behaviour in the game. CM-160 already sets the fog-honest guard: a predictor with no current observation returns a conservative 400‰ and flags estimated, and Engagement Favourable will not fire on it. A Cadet with S = 12 treats a twelve-turn-old contact marker as live and plans against a ghost. That is exactly what a beginner does, it is entirely fog-honest, and it costs nothing to implement: it is one comparison.

4.2 What each Rank fails to notice

Cumulative. Each row is a set of evaluation terms; a Rank has every term at or below its row.

Added at Terms, and the mechanic each reads
Cadet City count and class (EC §4); own and visible enemy strength; adjacency threat within CM-680's threat radius; free-city detection (CM-1370). One Track only, and only as "hold more cities".
Lieutenant CB's break check, not just the odds ratio (CB §5 step 7) — the difference between "I have better odds" and "they will actually leave"; terrain cover and chaos (CB §6); garrison sufficiency against EC §4's table; observation-age discounting.
Captain The occupation economy: Integration, Unrest, the Cadre cost curve, garrison burden, and Loyalty memory (EC §6); Works-to-Manpower balance and the forced army mix (EC §8); production payback; the Industry climb decision (US §5.5).
Colonel The map: supply Reach and grades (EC §7), Depot chains and their weakest link; encirclement and retreat-tile denial (CB §5 step 8); disorder, rotation and the cost of fighting worn (CB §5 step 9); combined arms and the role × terrain table (CB §6).
General The clock: every enabled Track with its threshold and Vigil (VC §3); the Ebb schedule and counting backwards to a date (VC T1); the Tally calendar and Warrant windows (VC T6, T13); Tenure trajectory and VC §8.2's elimination arithmetic; the Alarm as a priced decision rather than an event.
Marshal You: a per-seat opponent model inferred from its own observation stream; feints and false axes; counter-Vigil timing (choosing when to force an opponent to start a Vigil they cannot hold); second-order plans that advance nothing of its own and remove something of yours.

Read that table as a description of six opponents rather than six settings, because that is what it is. A Captain will out-economy you and then attack a mountain. A Colonel will cut your road instead, and will still not notice that the Ebb reaches you on turn 178. A General will be there on turn 178.

Human novice errors, and the omission that produces each. This is the plausibility argument made concrete:

The mistake Produced by lacking
Expands past what it can hold; rear cities revolt around turn 80 Integration/Cadre terms (below Captain)
Assaults entrenched infantry and is thrown back the break check (below Lieutenant)
Fights on the enemy's ground role × terrain and cover (below Lieutenant/Colonel)
Attacks a stale contact marker that is no longer there low S discipline (below Colonel)
Feeds reinforcements in piecemeal Pace and arrival-synchronisation terms (below Colonel)
Never concentrates artillery, so bombardment does nothing combined-arms terms and CB §7.2's three-battery equilibrium (below Colonel)
Ignores an opponent three turns from a Vigil Track terms (below General)
Never cuts a supply line Reach terms (below Colonel)
Keeps pushing an offensive two turns after it stopped working high C (below Colonel)

Every one of those is a mistake I have watched people make. None of them is a mistake nobody makes.

4.3 The floors — what every Rank does, including Cadet

Plausible weakness has a lower bound, and it is not negotiable. At every Rank:

  1. Never leave a city ungarrisoned when a visible enemy is within its threat radius and a garrison-capable unit is idle or in reach. This is arithmetic under CM-010, not a decision.
  2. Never leave a city's production empty. CM-1220's surplus rule and EC §5's standing production make this free.
  3. Never strand a unit by rule — an air unit that exceeds endurance (US §4.2), a transport left in reach of a submarine with no escort, a Cadre moved adjacent to a known enemy (EC forbids it mechanically anyway).
  4. Never decline a genuinely free adjacent city. CM-710's Seize: Undefended default already does this and CM-301 argues at length why it is arithmetic rather than a decision.
  5. Never make a provably pointless attack — 0‰ break probability with a worse loss trade than not attacking. CB's exact predictor makes this checkable at 0.45 µs.
  6. Never let a unit sit Idle. CM-540 makes Idle deliberately uncomfortable for a human; for an AI it must be unreachable.

An AI that violates any of these reads as broken, and "broken" is not a difficulty. A beginner who loses a city because they forgot it existed feels bad about themselves; a beginner who watches the AI forget a city feels bad about the game.

4.4 Monotonicity, and the honest gate

Requirement: each Rank beats the Rank below it with ≥ 60% win rate over ≥ 1000 farm games across the benchmark map and preset suite. Structural monotonicity (each evaluation set is a superset) makes this likely, not guaranteed — a new term with a badly-tuned weight can make a Rank worse. So each newly added term is A/B'd at the Rank that introduces it before the ladder gate runs, and a term that does not improve its own Rank is either re-weighted or is not added.

4.5 The selector says the measured number

The difficulty selector shows, for each Rank: the one-line description from §4.1, the named blind spots from §4.2, and — where the services platform has enough games — its measured win rate against human players in the selecting player's own rating band.

Colonelunderstands a map. Does not track victory conditions or plan around the Ebb. Wins 61% against players rated 1400–1600.

I want to defend this, because it is unusual and the commercial objection is obvious. Adjectival difficulty ("Hard") is an unfalsifiable promise, and the moment a player suspects it is inflated the whole ladder loses meaning. A number is falsifiable, and falsifiable is what makes the ladder worth climbing. It also solves the calibration-drift problem: a Rank whose measured rate moves more than 8 points between releases is a release-blocking alarm rather than a slow silent lie, which is exactly the failure VC §12 fears for its own calibration table.

The honest cost: some players will read "wins 61% against players like you" as discouraging. The mitigation is that the sentence above it names the blind spot, which reads as an invitation.


5. Weakness that reads as human

§2.1 made the argument; this section is the specification.

5.1 The three mechanisms, and nothing else

Omission. §4.2's table. Terms are absent, not corrupted. An AI without a supply term does not mis-evaluate supply, it does not evaluate supply — so it will cheerfully drive an offensive forty tiles past its Reach and be surprised when it melts, which is what happens to people.

Latency. k and C. The Aim is stale by up to k − 1 turns; an Operation persists C turns past its trigger. A Cadet at k = 8, C = 10 is committed to a plan formed eight turns ago and will hold it for ten turns after it stopped making sense. That single pair of integers produces tunnel vision, sunk-cost persistence, and late reaction — three of the four things that most reliably mark a weak player — deterministically, with no randomness anywhere.

Attention. A and S. A Cadet examines three Dispatch items and acts on none of them outside the command layer. Things happen in the parts of its empire it is not looking at. This is not a simulation of inattention; it is inattention, produced by a budget.

5.2 What is forbidden

Restating §2.1's list as a rule set because it is the part most likely to erode under schedule pressure:

And one that matters for the fiction: no Rank may play inconsistently with itself. If a Cadet does not evaluate supply, it must never accidentally do the supply-aware thing because a different term happened to point that way in a manner the player will read as competence. In practice this is a consequence of omission rather than an extra rule, and it is why omission is better than noise: a noisy AI is inconsistent by construction, and inconsistency is the specific thing that makes an opponent unreadable.

5.3 The one deliberate imperfection, and why it is not noise

There is a real gap in the omission model. An AI at Cadet plays a small game, but within that small game it plays flawlessly — it never mis-executes, because the command layer executes for it. That produces an odd opponent: narrow but mechanically perfect, which is not what a beginner is either.

The answer is commitment bias, already present as C, plus one addition: the Aim's chosen plan is re-scored at re-plan time using the forecast it made k turns ago, not a fresh forecast, for Ranks with k ≥ 3. The AI evaluates whether its plan is working against what it expected to happen, not against what did happen. This produces the most human failure available: continuing a plan because it is close to the projection, when the projection was wrong. It is deterministic, it costs one stored integer vector per theatre, and it disappears at Colonel and above where k ≤ 2.


6. Personality

6.1 The vector

Fourteen dials. Every one changes something a partner document specifies; none is a mood.

Dial Range Aurel What it actually changes
expansion 0–1000 500 Gate. Offensive Operations are illegal while unintegrated × 1000 > integrated × expansion (EC §8's Blitzer/Consolidator axis, made into a rule)
cadre 0–1000‰ 120 Share of Works budgeted to Administrative Cadre (EC §6)
climb 0–1000‰ 180 Share of Works budgeted to Industry upgrades (US §2.2)
engage 1–999‰ 700 The Favourable(N) written into its Doctrines (CM-590)
prudence 1–999‰ 334 The Prudent(N) value (CM-670)
leash ×⅓ – ×3 ×1 Multiplier on Posture-default Leash (CM-640)
mass 0–1000 500 Preference for Pace Concentrated (CM-1000) and the minimum battery count it will bombard with (CB §7.2)
opportunism 0–1000 500 Weight on Opportunity Dispatch items (CM-1370) and the Seize default it chooses
grudge 0–1000 200 Target weight added per city a seat has taken from it
predation −1000…+1000 0 Positive: prefers weak targets. Negative: prefers the leader
nerve 0–1000 500 Willingness to enter Alarm (VC §6.2) before it is airtight
homeland 0–1000 500 Weight on retaking its own cities, where Loyalty memory restores Integration in full (EC §6.4)
track[14] 0–1000 each 500 Per-Track affinity across VC's catalogue
P[class] −30…+30 0 Dispatch class weights (CM-1770), fixed and non-adaptive for an AI seat

Two of these are structurally different from the rest and that is deliberate. expansion is a gate, not a weight: it makes whole Operations illegal, which is how you get a personality that holds its shape under pressure instead of drifting to the optimum when the numbers get large. predation is signed, which lets one dial produce two opposite and equally coherent opponents — the one that finishes the wounded and the one that fights the leader.

6.2 The roster

Names are drawn from the register the design already uses in its worked examples — Meridian, Karsk and Ostry from TM §4, Vela and Corvain from EC §8 — because those examples already gave two of them characters and it would be perverse to invent new ones.

Offsets shown as absolute values; anything not listed is Aurel's.

expansion cadre climb engage prudence leash mass opportunism grudge predation nerve homeland
Aurel 500 120 180 700 334 ×1 500 500 200 0 500 500
Corvain 900 60 100 600 200 ×2 350 800 150 +500 750 250
Vela 200 320 300 850 450 ×½ 700 250 400 −100 300 900
Karsk 400 200 220 800 300 ×½ 900 300 700 0 400 600
Ostry 550 140 160 650 250 ×3 200 900 250 +700 600 300
Meridian 450 240 260 750 350 ×1 750 400 300 0 250 500
Sabar 500 200 200 720 334 ×1 550 450 100 −900 350 500

Track affinities, showing only the departures from 500:

Raised Lowered
Corvain Dominion 900, Throne 700 Hegemony 200, Prosperity 150
Vela Prosperity 900, Horizon 850 Dominion 250, Every Last City 100
Karsk Hegemony 900, Dominion 600 Ascendancy 200, Warrants 250
Ostry Warrants 900, Keys 700, Ascendancy 700 Great Work 150, Prosperity 200
Meridian Ascendancy 950, Keys 900, Warrants 850, Horizon 700 Every Last City 150
Sabar — (scores denial of the leader's Track, not its own) Great Work 200

And the characters, which is what a player actually reads:

Aurel — the baseline. No preferences. The best play the tuning pipeline has found. Present so that "I want a good opponent, not a character" is answerable, and so that every other personality has a price.

Corvain — the Mortgage. Takes more than he can govern, and dares you to punish it. He is EC §8's Blitzer as a person: expansion 900 and cadre 60 mean he will hold forty cities at Integration 20 and pay for it with a garrison bill and a manpower crisis. predation +500 sends him at whoever is weakest. You will see: cities changing hands fast, revolt countdowns in his rear from about turn 70, an army that is armour-heavy because his Manpower is starved (EC's forced 2.3:1 mix). Counterplay: do not fight his line. Raid the Cadre column and retake your own cities, where Loyalty memory gives you everything back the turn you walk in.

Vela — the Household. Small, dense, and impossible to kill at home. expansion 200 is a hard gate: she will refuse profitable conquests while she has anything undigested. homeland 900 means every city you take from her is immediately and expensively contested. She wins on Prosperity and on the Horizon, by Tenure, which she accumulates while you are busy. You will see: never more than two un-integrated cities; short Depot chains; instant counterattacks. Counterplay: she compounds, so you must be ahead early and you must beat her on the clock, never in her homeland.

Karsk — the Anvil. Fights where the ground pays, and starves what he cannot storm. mass 900 means he will not bombard with fewer than three batteries and will not attack without them — CB §7.2's equilibrium is a rule he obeys. He chooses Hills, Forest and Mountain, entrenches, and reaches for CB §8's supply-cut result (cutting the road beats three extra battalions) rather than assaulting the cell that resists everything. grudge 700: hurt him and he will finish that argument before starting another. You will see: a very high Entrench rate; long sieges; roads cut behind positions. Counterplay: do not let him pick the ground, and race him — his tempo is his weakness.

Ostry — the Rasp. Attacks the machinery, not the army. opportunism 900, leash ×3, Pace Dispersed. His target weights are the design's soft spots: Cadre ×6, Academy city ×5, Great Work site ×5, Depot ×4, Arsenal or Foundry ×4. He is predation +700 and will strip a collapsing player for parts. You will see: fast units a long way behind your line, your Integration bars stopping, a Depot chain collapsing from the middle, an Academy lost. Counterplay: escort Cadre, garrison rear Industry, and give your Screens a real Leash.

Meridian — the Calendar. Turns up on the day, with everything. VC publishes the Tally rotation 24 turns ahead, Warrants 5 turns ahead with 15-turn deadlines, and the Ebb schedule from turn 1. Meridian's Aim is anchored on the next scheduled event and its March routes are timed to arrive on the day, not before. nerve 250 means it will not enter Alarm until it is airtight. You will see: ten quiet turns, then a corps at the Lit Landmark on the exact Tally turn. Counterplay: read the same calendar. It is public. This is the personality that teaches the victory system.

Sabar — the Balance. Fights whoever is winning, including you. predation −900. Sabar scores an Operation by the leader's Track progress it removes, not by what it gains, and will abandon a profitable front to hit whoever entered Alarm. It is the reason a four-player game with AI seats does not produce a runaway. You will see: a neighbour that ignores you entirely until you lead the Watch, and then does not ignore you. Counterplay: do not lead visibly — which makes VC's banded visibility (§6.1) a live strategic concern, exactly as VC hopes. Honest cost: Sabar is the personality most able to kingmake in a game with more than one human, and it is off by default in any game with two or more human seats. §9.5 says why.

6.3 Personality is orthogonal to Rank, with a stated degradation

A Cadet Karsk and a Marshal Karsk are both meaningful: Rank is how well it executes, personality is what it wants. Six Ranks × seven personalities is 42 opponents from thirteen data files.

The complication is honest and must be surfaced: a dial that references a term the Rank does not have cannot express itself. Meridian's calendar needs the Track terms that arrive at General. Karsk's road-cutting needs the Reach terms that arrive at Colonel.

The rule: a personality dial whose feature is absent degrades to its nearest expressible proxy, and the proxy is named on the setup card. Meridian below General cannot time an arrival to a Tally, but its Track affinity still biases which cities it wants — Landmarks, and regional completeness — which is observable and recognisably Meridian. Karsk below Colonel cannot cut a road but still chooses defensible terrain and still refuses to bombard with fewer than three batteries, because mass reads CB terms that exist at Lieutenant.

Each personality therefore declares a full-expression Rank:

Personality Fully expressed at Below that, dormant
Corvain Captain nothing important; he is a Cadet-legible character
Vela Captain homeland is a target preference only
Karsk Colonel starvation Operations; supply-cut targeting
Ostry Colonel Depot-chain targeting; Cadre interdiction is Captain
Meridian General the calendar; timing; Vigil arithmetic
Sabar General leader identification degrades to "largest visible empire"

Corvain and Vela are fully expressed at Captain, which is the default Rank, and that is not an accident — the two personalities that read most clearly to a new player are the two that need the least machinery.

6.4 The Override — personality never authorises losing

Without this rule, a personality with low nerve and low Track affinity watches an opponent complete a Vigil and does nothing, and the player's reaction is not "what a distinctive opponent" but "that AI is broken".

The Override. At any Seal where an opponent holds an active Vigil on a Track the AI projects to complete before the AI can complete one of its own, the AI MUST allocate no less than one quarter of its uncommitted force to the plan with the highest deny value available to it, and MUST NOT allocate to any plan with deny = 0 until that quarter is committed. Personality weights are otherwise untouched.

The design is deliberate in three ways. It forces a contribution, not a conversion — Vela still digests, Corvain still eats Green, and neither becomes Sabar for a turn. It uses a quarter, which is enough to matter and not enough to lose a front. And it operates on the projection, not on the Alarm banner, so it fires slightly before the banner does for high Ranks and slightly after for low ones, which is correct: noticing early is a competence.

It is also the rule that makes VC's Vigil do the work VC wants. VC §2.2 argues that the Vigil's asymmetry — the leader must be airtight for V turns; the challenger needs one successful attack — is the anti-snowball mechanism. That argument is only true if the challengers actually challenge. In a game with AI seats, the Override is what makes it true.

6.5 The preference margin

Personality expressed purely as weights has a failure mode I found while working the example in §8: two plans can score 1531 and 1529, and which one a "personality" picks is then noise wearing a character's name. A one-point margin on a 1500-point score is not a preference.

The margin. A plan is preferred over another only if it exceeds it by at least 50‰ of the leading score. Within the margin, the personality's declared tie-break list decides. Beyond that, CM-170's terminal tie-break chain applies.

Each personality declares an ordered tie-break list of at most four clauses, and this is where a lot of its character actually lives:

Personality Tie-break order
Aurel lower cost; then sooner; then lower entity id
Corvain more cities gained; then sooner; then lower cost
Vela lower cost; then higher yield; then nearer home
Karsk better ground (higher defender cover at the decisive tile); then lower cost; then sooner
Ostry more targets of opportunity on the route; then sooner; then lower cost
Meridian better prepared (higher combined-arms score); then closer to a scheduled date; then lower cost
Sabar higher deny; then sooner; then lower cost

Converting a fragile numeric knife-edge into a declared, legible preference is worth more than the precision it costs, and it means a personality's behaviour at the margin is stated rather than emergent — which is what makes it survive a re-tuning of the weights.


7. Legibility

Two halves: reading an opponent well enough to plan against it during the game, and understanding afterwards why it did what it did.

7.1 During play, without breaking fog

The shared vocabulary rule does most of the work for free. Because the AI has no private movement policy (§2.2), every enemy behaviour a player observes is a behaviour they can name. A player who watches an enemy unit shuffle sideways to keep a frontage in view is watching a Screen, and they know it, because they have issued one. A player who watches an enemy column halt on contact rather than attack is watching Engagement Defend. This is enormous and it is free: the entire command vocabulary is a shared language for describing what the enemy is doing, and it exists whether the opponent is a human or an AI.

The Dossier. A per-opponent panel built only from the observing player's own observation log. It is not a window into the AI; it is a staff summary of what this player has actually seen, and it must be available for human opponents on identical terms — if it were AI-only, players would use its presence to identify AI seats, which matters for substitution (§9).

KARSK — 41 turns observed, 63 sightings, 9 engagements witnessed · Entrenched on 7 of the last 9 turns you observed him. · Has not initiated an attack on a tile you held with 2 or more units. · 6 of 9 engagements you witnessed were in Hills, Forest or Mountain. · Artillery seen: never fewer than 3 together. · Cities taken from you: 2 (Ashford t91, Rill Ford t104).

Every line is derived from the player's own log. Nothing is revealed. And it turns two hundred turns of scattered glimpses into the thing a general's staff exists to produce, which is a pattern.

Named opponents, as an option. VC publishes Landmark locations from turn 1 on the argument that fog exists to hide what your opponent is doing, not what the world is (VC T5). A named opponent with a published one-line character is world, not action. So: Opponents: Named / Anonymous, Named by default in solo and skirmish, Anonymous in Tournament. Under Named, the setup screen shows each AI seat's personality name, its character line, and its full-expression note. Under Anonymous, you get the Dossier and nothing else, and the Dossier is where the game gets good.

Track affinity is banded like everything else. An AI's preferred Track becomes visible through VC's existing Rumour/Report/Alarm precision (VC §6.1). No new channel and no new leak.

7.2 The Intent Record

The AI's sibling to CM-1940's CommandDecisionRecord. Emitted per AI seat per turn, carrying:

Versioning follows CM's split exactly: Intent Records ride the advisory stream (CM-190, CM-2080), not the rules hash. They are re-derivable from a replay and never authoritative.

7.3 The Debrief

At game end, the player may read every AI seat's Intent Records in full. During the game they may read a redacted version limited to facts they observed — which for a well-scouted theatre is most of it, and for an unscouted one is nothing, which is correct.

The Debrief's best feature is one that only exists because §4.2 names the blind spots:

Turn 148 — Sable Reach. Your encirclement worked. Colonel evaluates supply Reach, so it saw the road being cut; it committed anyway because its projected relief force arrived on turn 149 and the pocket broke on 148. Turn 91 — Ashford. Your encirclement worked because Lieutenant does not evaluate supply Reach at all. Against Colonel that move does not work twice.

That is teaching. It names what happened, distinguishes being outplayed from exploiting a gap, and sells the next Rank honestly rather than by adjective.

The Second Opinion. Because the core is deterministic and headless and a Cascade is milliseconds, the player may, after the game, pick a past turn, change one of their own orders, and watch what the AI does in response. It must be labelled precisely — it is the AI's response to a changed world, not a claim about what would have happened, because every other seat re-derives too. Post-game and solo only; it is a study tool, not a save-scum.


8. Worked example: four personalities, one Alarm

VC's reference game (VC §7): medium map, 48 cities, 5 Landmarks, 8 regions, 4 players, Horizon 200. Tracks: Dominion (625‰, Vigil 3), Keys (3 of 5, Vigil 6), Horizon (Tenure). Red is the human. Blue is the AI seat, at Rank Colonel. Blue holds 14 cities, 2 Keys, Tenure 11,410.

Turn 131. Red takes Kestrel Bay, his third Key. Keys 3/3, Vigil 6 begins. ALARM. Under VC §6.2 every player receives the banner, the three site names, and live vision of Kestrel Bay, the Iron Gate and Sable Reach, including garrisons. Everyone sees the same thing. What they do about it is the personality.

What Blue can see. Kestrel Bay: urban, works 1, garrison of one Rifle Company (Trained, strength 100, Entrenched, dig-in 2, supply Adequate) plus three lesser units. Blue's staging port is nine tiles away and holds a Landing Ship, an Armoured Battalion (Veteran, strength 90), two Rifle Companies, three Field Batteries and a Destroyer. Blue's northern front is three units short on its Requisition and Green has six units massing against it. Blue has four cities taken between turns 120 and 128, all below Integration 25.

8.1 The candidate plans

The Aim level scores five plans. The term values are engine-computed and identical for every personality — that is the point of separating values from weights.

Plan deny advance hold yield cost tempo
A Descent on Kestrel Bay, assault t134, no guns 900 150 0 −180 −230 40
A′ Descent prepared: land t133, bombard t134, assault t135 860 150 0 −200 −90 20
B Hold the North against Green 0 0 260 −40 −60 60
C Digest the four new cities 0 40 60 230 0 5
E Roll up Green's collapsing border 0 240 0 320 −70 40

deny is the projected reduction in the leader's best-Track progress over H = 16; advance is Blue's own; hold is projected own-city losses avoided; yield is the EC closed-form Works and Manpower delta; cost is the CB predictor's median own strength lost; tempo is VC §11's Tempo band (60 this turn, 40 next, 20 within three, 5 beyond).

deny is large for A and A′ because breaking a Vigil that would otherwise end the game is not a marginal gain — the terms are scaled so that the loss of the game dominates, which is a scaling decision, not a personality one.

8.2 The weights, and the scores

Weights are per-mille; Aurel is 1000 everywhere.

deny advance hold yield cost tempo
Aurel 1000 1000 1000 1000 1000 1000
Sabar 1900 700 900 800 800 1100
Meridian 1200 1400 900 900 1300 1400
Corvain 600 1500 600 900 500 1200
Vela 700 800 1600 1400 1500 900

Scores, Σ w × v / 1000:

A A′ B C E Chooses
Aurel 680 740 220 335 530 A′
Sabar 1531 1529 220 271 412 A (see below)
Meridian 885 973 204 324 589 A′
Corvain 536 540 162 309 661 E
Vela 189 325 324 454 illegal C

Each term is floored independently before summing, so the totals are reproducible integers.

Three things in that table are worth stopping on.

Sabar's 1531 against 1529. Two points on a fifteen-hundred-point score is not a preference, it is arithmetic dust — exactly the failure §6.5 exists to prevent. The margin is 50‰ of the leading score, so ceil(1531 × 50 / 1000) = 77, and the two plans differ by 2. They are therefore indistinguishable by score, and Sabar's declared tie-break list decides instead: higher deny, then sooner, then lower cost. A's deny is 900 against A′'s 860, so the first clause settles it and Sabar goes immediately, without the guns. That is Sabar's character, arrived at by a stated rule rather than by two points of noise — and had the weights shifted by one per cent in either direction, Sabar would still go early, which is the whole point of having the rule.

Vela's illegal E. Blue holds four un-integrated cities against roughly ten integrated. Vela's expansion gate is 4 × 1000 > 10 × 200, which is 4000 > 2000 — true, so every offensive Operation is illegal for her. She does not score E at all. This is what a gate buys that a weight cannot: a personality that holds its shape when the numbers get tempting.

Vela chooses C. Digest, while Red runs a six-turn Vigil. Left alone that is a losing move, and it is precisely the case §6.4 exists for.

8.3 The Override fires

Red holds an active Vigil on Keys, and Blue's H = 16 projection says it completes at turn 137. Blue is in no Vigil of its own. So the Override binds every personality: a quarter of uncommitted force to the highest-deny plan, before anything with deny = 0.

Main effort Override allocation Result at Kestrel Bay
Aurel A′ prepared descent — (main effort already denies) Takes it t135. Red's Vigil breaks at 4/6
Sabar A immediate descent Falters t134. Re-attacks t136 with the guns it should have brought; breaks at 5/6
Meridian A′ prepared descent Takes it t135, and books the t139 Tally on the way
Corvain E, roll up Green Destroyer + Corvette blockade the sea approach; raiders cut the land route Blockade closes t135; garrison Isolated t135–136; Red withdraws it t136 rather than lose it. Breaks at 5/6
Vela C, digest The three Field Batteries and one Rifle Company, shipped as a reduced A′ Takes it t136. Breaks at 5/6 — one turn from losing the game

(The Vigil counter is t − 131, so completion falls at the Seal of t137. Three of the five personalities break it with one turn to spare, which is a good deal closer than it should be and is the Vigil doing exactly the job VC §2.2 designed it to do.)

Corvain's line is the one I like most, because it is cheap and it is the design's own best answer. He never assaults. He applies CB §8's result — cutting the road does more than three extra battalions — and EC §7's isolation attrition, and Red has to choose between relieving a Landmark and holding a front. That is a personality that does not fight and still contests, and it exists because the Override forces a contribution and lets the personality choose its shape.

8.4 Why Sabar's turn-134 assault falters, in CB's own arithmetic

Worth working, because the whole difference between Sabar and Meridian is one turn of preparation and the numbers are the argument.

The defender, Rifle Company (atk 30, def 44, tough 100), Trained (+80 power, +5 resolve, vol 850), strength 100, disorder 0, Entrenched, dig-in 2, works 1, in a city Red now owns, supply Adequate. Foot in Urban is +200.

D_raw = floor(44 × 100 × (1000 + 80 + 200) × 1000 / 1e8) = 56
defenderMods = urban cover +500, Entrenched +300, dig-in 2 +200        = +1000
D     = floor(56 × 2000 / 1000)                                        = 112
Resolve = 40 + 5 (Trained) + 15 (Entrenched) + 6 (works 1) + 10 (own city) = 76

Sabar's attack, t134. Lead Armoured Battalion (atk 62, tough 130), Veteran (+180), strength 90, Armor in Urban −250. Two Rifle Companies in support at factor 400.

lead        = floor(62 × 90 × (1000 + 180 − 250) × 1000 / 1e8)          = 51
each rifle  = floor(30 × 100 × (1000 +  80 + 200) ×  400 / 1e8)         = 15
A_raw = 51 + 15 + 15                                                    = 81
attackerMods = Assault +250, combined arms (Armor + Foot) +120          = +370
A     = floor(81 × 1370 / 1000)                                         = 110

Odds 110 : 112, essentially even. Volatility: lead Veteran 700, defender 850, mean 775, urban chaos +350 → 1125, a swing of ±281‰. At the median draw the swing is zero:

shareA = floor(110 × 1000 / 222) = 495          shareD = 505
Ld     = floor(60 × 495 × 100 / (1000 × 100))   = 29
La     = floor(60 × 505 × 100 / (1000 × 130))   = 23

shockDefender = 29 + 8 × min(4, 2 flankers) + 6 assault = 51   vs resolve 76 → holds
shockAttacker = 23 + 10 entrenched + min(16, 8 × 1 works) = 41 vs resolve 37 → BREAKS

Attacker resolve is 40 + 12 (Veteran) − 10 (Assault) − floor((100−90)/2) = 37. So Sabar's assault falters: it deals 29, takes 23, gains no ground, picks up +25 disorder and may not attack again this turn. An even-odds attack against an entrenched defender in works is a bad attack, and CB says so before the button is pressed.

Meridian's version. Three Field Batteries bombard on t134. One battery against D = 112:

A_bombard = floor(48 × 100 × (1000 + 80 − 100) × 1000 / 1e8)            = 47
shareA    = floor(47 × 1000 / 159) = 295
Ld        = floor(22 × 295 × 100 / (1000 × 100))                        = 6
disorder  = 3 × 6 + 5                                                   = 23

Three batteries: −18 strength, +69 disorder, against a city's −45 disorder recovery halved to −22 because the defender was engaged. Net at the Seal: strength 82, disorder 47. This is CB §7.2's equilibrium obeyed exactly — one battery would have accomplished nothing, which is why Meridian's mass 750 refuses to fire with fewer than three.

t135, the assault Meridian actually makes, armour plus a rifle company plus a battery in support — three roles, so combined arms is +260:

D_raw = floor(44 × 82 × 1280 × 1000 / 1e8) = 46      D = floor(46 × 2000/1000) = 92
Resolve = 76 − 47 disorder − floor((100−82)/2) = 20

A_raw = 51 (armour) + 15 (rifle) + 18 (battery) = 84
A     = floor(84 × (1000 + 250 + 260) / 1000)   = 126

shareA = floor(126 × 1000 / 218) = 577          shareD = 423
Ld = floor(60 × 577 × 100 / (1000 × 100)) = 34
La = floor(60 × 423 × 100 / (1000 × 130)) = 19
shockDefender = 34 + 8 × min(4, 3) + 6 = 64   vs resolve 20  →  BREAKS

The garrison breaks. It is in works, so CB §8 says it cannot retreat and instead fights on at −20 resolve; Kestrel Bay falls to strength loss over that turn and the next. Meridian pays 19 instead of 23, gains the city instead of nothing, and spends one extra turn of Red's Vigil to do it.

The lesson the Debrief will print: Sabar attacked at 0.98:1 into works. Meridian removed 56 points of resolve for 18 points of damage and then attacked at 1.37:1. Neither had better odds by much. One of them understood that odds and resolve are different levers.


9. Multiplayer roles

9.1 Three levels of absence, and why conflating them is the usual mistake

Most games have one substitution state and it is too blunt. This design has three, and the first one requires no AI at all.

State Trigger Who is playing Mandate
Standing A player did not commit this turn Nobody. The command layer. Whatever the player's own Postures and Sanctions already authorise (CM-2010)
Caretaker 2–3 consecutive missed turns, or an explicit Away setting An AI, restricted §9.2
Substitute The player has left; automatic in ranked after the declared count An AI, unrestricted, at a declared Rank and personality Full

Standing costs nothing and covers most cases, and this is a genuine structural advantage of the turn model. Because orders are policies evaluated at activation (TM §3.2) rather than scripts, a player who misses a turn is not absent from the board. Their Screens still spread, their Requisitions still fill, their garrisons still hold, their Reflexes still fire. CM-2010 and CM-2020 already specify it: units with no Posture take their Fallback Posture for that turn only, the stored Posture is not changed, and Dispatch items persist to the player's next session rather than being consumed. In correspondence play, where a missed turn is a missed day, this is the difference between a mode that works and a mode that does not.

9.2 The Caretaker mandate

A Caretaker exists to stop a seat decaying while its player is briefly gone, and its design constraint is the one that makes it acceptable to everyone else at the table: a Caretaker must be unable to lose your game for you, and equally unable to win it.

May May not
Keep production running; fill Requisitions; re-post reinforcements Change any Doctrine, Requisition target, or Posting weight
Respond defensively to threats: reposition Screens, relieve a threatened city, entrench Initiate an offensive Operation of any kind
Take a city the seat's own Seize Sanctions already authorise Change a Seize Sanction, or take a defended city
Repair, rotate worn units, resupply Disband a unit, abandon a Garrison, raze a city
Move Cadre along already-planned routes Re-site a Great Work, or start a new one
Abstain in a Verdict (VC §8.3) Vote in a Verdict; concede; capitulate voluntarily
Enter a Vigil it is not already in

The last row is the sharpest and the most important. Entering a Vigil is a commitment that hands every other player vision of your holdings for as long as it lasts (VC §6.2). No absent player's game should acquire that on their behalf.

VC's open question 10 asks how the Verdict works in async, where a vote may take days. The answer falls out of this table: Caretakers abstain, abstention counts as play on, so a Verdict in async requires present players. That is the correct outcome and it is also, honestly, a weakening of the Verdict in exactly the mode where long games hurt most. The concrete mitigation I would offer VC: a Verdict vote's window is one full turn-deadline rather than "at their next turn start", and a seat in Substitute (not Caretaker) votes by the policy in §9.6.

9.3 What makes a Substitute acceptable to the other humans

Four things, and none of them is about the AI's strength.

1. It was declared before the game started. The substitution policy — trigger count, Rank, personality, mandate — is part of the game's Terms at setup, in VC's generated-prose style, visible to everyone:

A player who misses three consecutive turns is replaced by a Caretaker. A player who leaves is replaced by Aurel at Colonel, which inherits their Postings and Doctrines for 5 turns.

Nobody discovers on turn 90 that the empire next door has become something else.

2. Its strength is pegged to a declared constant, not to an estimate. The seductive option is to estimate the departed player's strength from their play and match it. I am rejecting it. You cannot estimate a player's strength from forty turns of a fog game with any reliability — the variance is enormous, position confounds everything, and an estimator that is wrong is worse in both directions: too strong and the substitution punishes the departed player's neighbours; too weak and it hands someone a free win. Fixed declared Rank, default Captain, which is the median and is stated in the Terms.

3. The continuity window. For the first 5 turns the Substitute inherits and does not replace: it keeps the seat's Postings, Doctrines, Requisition rows and Formation structure and issues orders within them, and only afterwards begins re-planning at its own Aim level. Neighbours' plans are not invalidated overnight, and the transition is gradual rather than a discontinuity in the middle of someone else's operation.

4. Its personality is Aurel by default. A Substitute with predation or grudge kingmakes by preference: Ostry would strip the weakest neighbour, Sabar would attack the leader, and either outcome redistributes a game the departed player did not agree to redistribute. A neutral substitute cannot be fair — nothing can — but it can at least be unmotivated.

And what a Substitute receives: that seat's fog-filtered view and its order history. Never the human's chat, map annotations, notes, or anything the seat itself did not observe.

9.4 Reclamation

A player who returns reclaims the seat (TM §3.5). Two additions:

9.5 Kingmaking, stated rather than solved

In a game with three or more seats, any AI seat's preferences redistribute the game. This cannot be eliminated, and I am not going to pretend the Override or the Aurel default solves it. What can be done:

9.6 AI seats are always declared

An AI seat is never concealed. Not in setup, not in the Watch, not in the player list. I want to argue this rather than assert it, because concealment is genuinely tempting — "you don't know which of the six are people" is an interesting game.

It is the wrong trade for three reasons. It requires the AI to fake human behaviour it does not have, starting with commit timing: TM §3.6 makes presence (who has committed, how long remains) visible ephemeral data, and an AI seat that commits in 40 ms every single turn is identifiable within three turns unless we add artificial latency, which is a lie with a code path in it. It corrupts the terms of the contest, which every other document in this set treats as the thing that must be public — VC publishes the Ebb schedule and the Landmark locations on exactly this principle. And it makes the Debrief impossible to offer, because the Debrief's existence would reveal the seat.

What may be concealed is which personality an AI seat is running, under the Opponents: Anonymous option (§7.1). That is precisely VC's Sealed Orders shape — existence public, content hidden — and it is the version of the idea that survives scrutiny.

9.7 Solo and two-player play

01-decision-turn-model.md amendment 1 is binding and it is the common case: in solo and two-player games the Cascade must be able to run instantly with optional step-through, and the Orders phase has no deadline unless one is asked for. The consequence for AI seats is that the AI's wall-clock budget in solo play is not the turn gap — it is the Cascade playback, which the player is watching anyway and which TM §3.8 already opens for rolling planning. §11 relies on this heavily and it is the single biggest reason the compute story is comfortable.


10. Handicaps

10.1 Why labelling matters, stated at the level it deserves

The shallow reason is fairness. The real reason is epistemic: a player who beats a handicapped AI and does not know it has been lied to about their own skill, and the game has spent their time teaching them something false. Everything else in this design is built to make the player's model of the world correct — CB's exact preview, CM's decision records, VC's published Ebb schedule, EC's visible Integration bars. A hidden AI bonus is the same sin as EC §1's "invisible production tax", committed against the player's model of themselves rather than of the economy.

Two further reasons, both practical. An undisclosed advantage is indistinguishable from a bug, so every unexplained AI success becomes a support ticket. And in any game with more than one human, an undisclosed handicap is a rigged contest.

So: every handicap is disclosed at setup, in the Terms paragraph, in the in-game rules review, and in the replay header. Both directions — a handicap may favour the AI or the human — and it applies to human seats identically.

10.2 What is offered

Handicap Range Why it is legitimate
Extra starting cities ±3 Visible, positional, and reasonable-about from turn 1
Starting Industry Tier 1–3 US §2.3 already offers a per-player Industry cap as "a real, legible handicap ladder that costs no extra content"
Industry cap Tier 1–4 Same, from the other end. A veteran capped at Workshop against a newcomer at Arsenal
Opening stock ±400 Works, ±200 Manpower, once A finite, spendable, visible head start
Cadre discount 50–200‰ of the escalating cost Dials the anti-snowball brake directly and visibly (EC §6)
Start position quality seeded, labelled Map generation already ranks starts; saying so is free
Foreknowledge terrain and city locations revealed at turn 0; no units See §10.4

Opening stock rather than a production rate multiplier, deliberately. A rate multiplier distorts every derived number in EC — the 25-to-35-turn payback window, the Cadre curve's N ∝ sqrt(spend) shape, the Works-to-Manpower ratio that determines the forced army mix — so a handicapped game is quietly playing different economics, and none of EC's worked reasoning holds. A one-time stock is a head start that leaves the economy's arithmetic intact and can be understood as "they started with an army", which is a sentence.

10.3 What is not offered, and one that is offered only under a condition

Not offered: production-rate multipliers, movement bonuses, vision bonuses, or upkeep discounts on one seat only. All of them are invisible in play and all of them corrupt a derived system.

Combat odds modifiers are offered only inside the predictor. This is the sharpest case and it is worth stating why. CB §9.1 establishes that the pre-attack preview is exact, not sampled — the loss bands come from evaluating the exchange at r = 0, 500, 999 and the break probability from a binary search over the draw, verified against a brute-force oracle with zero mismatches — and CB §13 puts "the actual outcome must lie inside the displayed band" in CI as an assertion rather than a playtest metric. A hidden combat handicap breaks that invariant. It makes the preview lie, and it turns a CI gate into a false alarm.

So if a combat handicap exists at all, it is a force modifier like any other, visible to the predictor, and enumerated in the preview's line items exactly as CB §9.3 requires of every contribution:

    force           +25% assault  +12% combined arms  +15% handicap (Marshal)

Honest, checkable, and it keeps the invariant. And because it appears in the panel every single time, nobody forgets it is on.

10.4 Omniscience is not a difficulty option

The earlier AI draft offered a labelled AI Full Vision cheat. I am removing it, and not on fairness grounds — it was labelled, which answers fairness.

It is removed because it destroys the opponent. An AI that knows where everything is does not scout, does not screen, does not misjudge, does not lose a unit to something it could not see, and never plans against a contact that turns out to be stale. Every behaviour that makes an opponent readable (§7.1) comes from it operating under the same uncertainty you do. An omniscient AI is not a harder version of the same opponent; it is a different and much less interesting one, and it violates the shared vocabulary rule outright — no player can express march confidently through fog to the exact tile where the thing you cannot see is standing.

Foreknowledge replaces it: the AI begins with terrain and city locations revealed, and no unit information ever. That is a legible head start equivalent to very good early scouting, it does not change how the AI behaves once contact is made, and a player can look at it and understand exactly what it means. It is also, incidentally, the handicap most players actually wanted when they asked for full vision — they wanted an opponent that does not waste twenty turns exploring.


11. Feasibility, honestly

This is the section the brief demanded be rigorous, and it contains one conclusion that constrains everything above.

11.1 You cannot search this game. You can forecast it.

The numbers:

Operation Cost Source
One exact combat preview 0.45 µs CB §9.2, measured
One combat resolution 0.016 µs CB §9.2, measured
Command-layer evaluation, 400 units, one Cascade ≤ 50 ms, excluding pathfinding CM-2100
Dispatch ranking, 200 live events ≤ 16 ms CM-2130
Economy tick for one city for one turn integer, closed form EC §12
Track progress and the Ebb for one turn integer, closed form VC §2.4

The conclusion falls straight out. A full-Cascade rollout costs 50–80 ms. A client turn budget of a few hundred milliseconds therefore affords single-digit rollouts. Any architecture premised on thousands of simulated futures — MCTS over Cascades, deep minimax, rollout-heavy planning — is not available, and a document that promised one would be lying.

What is cheap is the thing this game happens to need most:

So the AI's strength comes from evaluation and forecasting, not from tree depth. That is a limitation and it is also, for this particular game, a good fit: most of what separates a strong player from a weak one here is economic and positional judgement over a 16-to-24 turn horizon, and that horizon is computable rather than searchable.

The rollouts that remain are spent on verification, not exploration. At Marshal, R = 4 means: run the chosen plan forward one Cascade against the two most likely opponent responses and against the worst plausible one, and if it fails, take the runner-up. Four rollouts a turn, spent checking, not looking.

11.2 A turn budget that adds up

Rank Colonel (B = 512, R = 1, P = 6), on the reference desktop, 40 cities, 150 units:

Stage Work Cost
Knowledge update fold ~200 sightings, age observations, update per-seat ledgers 2 ms
Threat and Reach projection bounded flood fill, incremental per EC §12's dirty-flag rule 8 ms
Economy forecast, once 40 cities × 16 turns, integer < 1 ms
Track forecast, once 3 Tracks × 4 seats × 16 turns, closed form < 1 ms
Aim scoring 512 plans × ~30 µs (deltas against the shared forecast) 15 ms
Operation geometry 4 theatres; reuses CM's ≤ 256-candidate bounded sets 12 ms
Decisive Points 12 Dispatch items × ≤ 400 previews × 0.45 µs 3 ms
Verification rollout 1 × full Cascade 60 ms
Production and Requisitions incremental shortfalls (CM-2120) 1 ms
Order emission and validation ~40 order changes 2 ms
Total ≈ 105 ms

The trick that makes B = 512 affordable is in the table and is worth naming: forecast once, apply deltas per plan. The shared 16-turn economy and Track projection is computed a single time; each candidate plan is scored as a delta against it. Recomputing the forecast per plan would be 512 × 640 integer steps and would dominate everything.

Marshal (B = 4096, R = 4) comes to roughly 420 ms on the same reference. Three AI seats is 1.3 s. Against a Cascade playback of thirty to sixty seconds that the player is watching anyway (TM §3.8), this is invisible. On a phone at roughly four times slower it is 1.7 s per seat, 5 s for three — still comfortably inside the playback, and comfortably outside it only if the player skips the animation, in which case a brief "resolving" state is acceptable.

11.3 The budget is not an input

This is a hard rule and it is the one most likely to be violated by a well-meaning optimisation.

The AI's decision procedure MUST be a total function of (view, configuration, Rank). No anytime behaviour, no iterative deepening cut off by elapsed time, no "spend the remaining milliseconds". A Rank's work is a fixed count of scored plans, rollouts and Points, declared in the Rank table. A slow device takes longer; it does not play worse.

The reasons are the same ones CM-110 and CM-120 give for the command layer, and one more. If the budget were an input, a farm-tuned AI would play differently on a client, the self-play results would not transfer, and a replay computed on one machine could diverge from the same replay on another — which is exactly the desync class TM §3.7 says is the most likely and the most important to catch early. It also means an AI is never silently downgraded on a weak device: if a Rank cannot meet the platform's turn-time target, that Rank is disclosed as slow on that platform rather than quietly becoming a different opponent.

11.4 AI seats do not break replays, and this is a large practical win

The AI is a client, not part of the core. Its orders enter the authoritative order log like any player's (CM-2040 forbids any other path into the simulation). Therefore:

11.5 What the self-play farm actually costs

Honest arithmetic, because VC depends on this pipeline for its length-estimate table and its linter thresholds and warns that "if regenerating it is not automated, the estimates will silently become lies."

A 200-turn, 4-seat game, at the same reference:

Rank calibrated AI cost per seat-turn Game cost 2,000 games On 64 cores
Captain (B=128, R=0) ~5 ms ~14 s 7.8 CPU-hours ~7 minutes
Colonel (B=512, R=1) ~105 ms ~94 s 52 CPU-hours ~50 minutes
Marshal (B=4096, R=4) ~420 ms ~346 s 192 CPU-hours ~3 hours

Three consequences, all of which someone needs to plan around:

  1. Calibration runs at Captain, not at Marshal. VC's median_turns[track][map_class][players] table should be generated at the median Rank because that is what most games are played at and because it is 25 times cheaper. But it must then carry a Rank column, because a Marshal game is a materially shorter game than a Captain game and a length estimate that ignores that is one of the lies VC is worried about. This is a concrete addition to VC's contract.
  2. The full sweep is a nightly job, not a per-commit gate. Twenty cells at Colonel is roughly a day of a 64-core machine. A per-commit gate runs a much smaller smoke suite; the full regeneration runs nightly and blocks a release, not a merge.
  3. Marshal is expensive to tune, which is part of why it is the last thing to arrive.

11.6 What I will and will not promise

Rank Confidence Basis
Cadet → Captain High Hand-authored evaluation over the terms in §4.2, plus the command layer doing the unit-level work. The hard part is already specified and tested by CM's own acceptance criteria.
Colonel High Same, plus supply and encirclement terms. All the inputs are closed-form or exactly predictable.
General Medium-high Requires self-play-tuned weights over ~100 parameters and a correct Track projection. The projection is easy; the weights need the farm to work.
Marshal Not promised at launch. See below.

The honest statement about Marshal. No shipped strategy game has an AI that reliably beats strong human players at a fog-of-war 4X without material advantages. The systems that have beaten strong humans at anything comparable had either perfect information (chess, Go) or enormous inference budgets and years of training (StarCraft), and none of them ran in a browser tab on a phone.

What this design has that those attempts at 4X AI did not: a command abstraction that collapses the action space by orders of magnitude (§3.2), a deterministic headless core that makes self-play a compute problem, an exact combat predictor rather than a sampled one, closed-form economic and victory forecasting, and event-sourced games that are training data by construction.

What it still does not have: a demonstrated method for long-horizon planning under fog at a client budget. The three candidate paths, with my honest odds:

So Marshal is defined as a measured Rank, not an aspiration. It appears in the selector when, and only when, it has demonstrated a stated win rate against human players in the top rating band on the services platform. Until then the selector shows five Ranks and a line saying a sixth is being measured. We should not ship a difficulty called beats strong humans until it has beaten strong humans, and §4.5's measured-number selector is what makes that promise checkable rather than rhetorical.


12. Why this beats the classic approach


13. Tradeoffs and honest costs

The ladder's low end may be stronger than intended. Cadet plays purely through the command layer, and the command layer is good — CM-460's Screen spreads correctly, CM-660's Risk preserves units, CM-1190's scheduler keeps reinforcements flowing. A Cadet may be a harder first opponent than a beginner wants. The dial if so is not to break it but to give Cadet worse Sanctions: a higher engage threshold so it rarely fights, a tighter Leash so it rarely arrives. That is still competence-shaped weakness, but it is a second mechanism I have not specified and would rather not need.

Six Ranks and seven personalities is 42 combinations and a real test matrix. The mitigation is that personality is data and Rank is data and neither forks code, but 42 combinations × the map and preset suite is a large nightly farm bill, and the tier-monotonicity gate (≥1000 games per step) is only defined for Aurel. Personalities are gated on the Elo-price measurement instead, which is a weaker guarantee, and I am not certain it is enough.

Personality erodes under tuning unless it is protected, and protecting it makes it go stale. The rule in §2.3 freezes personality dials and tunes only the baseline. But when the baseline moves, every personality's offset now points somewhere slightly different, and after four or five promotions Karsk may be a character nobody designed. Re-measuring the price catches the magnitude of the drift and not its direction. I do not have a good answer beyond periodic hand review.

Omission-based weakness makes some Ranks feel identical. Captain and Colonel differ by supply and encirclement terms, which are enormously important to a strong player and nearly invisible to a casual one. There is a real risk that the middle of the ladder feels like one opponent with a different number attached. The measured-selector helps (the numbers will differ even when the feel does not) but it does not fix it.

A fog-honest AI that guesses right looks like cheating. This is the complaint the design will get most, and it is unfalsifiable from the player's side during a game. The Debrief answers it after the fact — the Intent Record shows what the AI knew — but "read the debrief" is a poor reply to "it knew where my transport was". CM-130 accepted this cost for automation and it is the same cost here.

The Dossier is a lot of interface for a feature some players will never open. It is also the only answer to Problem C, and a game where reading your opponent is impossible is a game where the fog is doing more harm than good. I would build it and measure whether it is opened.

Publishing measured win rates is commercially risky. "Wins 61% against players like you" is an honest sentence and a discouraging one. It also makes every balance change visible as a number moving, which will produce arguments. I think the honesty is worth it and I acknowledge that is a judgement call rather than a derivation.

The Override is a rule that overrides the player's chosen opponent. Someone who selected Vela because they wanted a passive neighbour will, once per game, get a Vela who ships three batteries across a strait. That is correct — it prevents a broken-looking loss — but it is a designer overruling a player's selection, and the setup card must say so.

Three levels of absence is three code paths and three sets of edge cases, in a subsystem that by definition runs when nobody is watching. The mandate table is a specification of forbidden actions, which is the hardest kind to test, and a Caretaker that quietly does something it should not is exactly the class of bug that surfaces as a furious support ticket from someone who came back after a week.


14. What could go wrong, and how playtesting would show it

Every row is a measurable quantity with a target, so a regression is a failing number rather than a feeling.

Risk Metric Target If it fails
Personality is cosmetic Identifiability: a classifier over observable-only behaviour from the first 60 turns must name the personality ≥ 70% at Colonel This is the headline metric. If a human's staff cannot tell Karsk from Vela from what they saw, the roster is decoration and the dials are too small
Personality costs too much Elo price of each personality vs Aurel at the same Rank, ≥1000 games ≤ 60 Elo Re-tune or retire. A personality above the cap is a handicap wearing a name
Personality costs nothing Same measurement ≥ 10 Elo A price near zero means the dials are not reaching the decisions. Widen the gates, not the weights
Ladder not monotone Win rate of Rank n vs Rank n−1, ≥1000 games per step ≥ 60% each step The newly added term is mis-weighted. A/B it at its own Rank before touching the ladder
Weakness reads as broken Rate of floor violations (§4.3) per 1000 unit-turns 0 Any non-zero value is a release blocker, not a tuning issue
Weakness reads as robotic Blind panel: 20 anonymised AI turn summaries against 20 human ones from the matching rating band, "human or AI?" ≤ 65% correct at Colonel and above Qualitative and unavoidable. If raters are at 90%, latency and commitment bias are not producing what §5 claims
Ranks feel identical Player survey after a Captain and a Colonel game: "was your opponent noticeably better?" ≥ 70% yes Middle of the ladder needs a differentiating mechanism beyond omission
Difficulty claim is a lie Measured Rank win rate vs human rating bands, per release drift < 8 points between releases The selector is publishing a stale number, which is worse than publishing none
Legibility fails Mid-game, show the player the Dossier and ask "what is this opponent trying to do?" ≥ 70% correct by turn 80 Not automatable and the most important test in the table. VC has the same test for the Watch and for the same reason
Debrief not read Share of completed solo games where the Debrief is opened ≥ 40% If nobody reads it, the teaching claim is unsupported and the feature is expensive
Override too blunt Share of games where the Override redirected ≥ 50% of a personality's force for ≥ 5 turns < 10% The quarter-of-force constant is too high, or the projection fires too eagerly
Override too weak Share of games where an AI seat lost to a Vigil it never contested < 3% Raise the quarter, or fire on the Alarm rather than the projection
Substitution feels unfair Post-game survey in games where a Substitute ran: "did the substitution change the outcome unfairly?" < 15% Lengthen the continuity window, or lower the default Rank
Caretaker overreaches Audit: any Caretaker action outside the §9.2 mandate 0 Release blocker
Kingmaking In 3+ seat games, correlation between AI seat personality and final placings of human seats indistinguishable from zero for Aurel If Aurel kingmakes, the neutral baseline is not neutral and the substitution default is wrong
AI turn cost p95 AI seat turn time on the reference desktop and the reference phone, per Rank inside the Cascade playback If a Rank exceeds it, disclose the Rank as slow on that platform. Never silently reduce its work
Budget leaking into decisions Bit-identical order logs for the same game replayed on desktop, phone, and farm exact Any mismatch is a §11.3 violation and a release blocker. This is a gate, not a metric
Farm calibration goes stale Age of the newest calibration run against the newest balance change < 7 days VC's own warning. Automate the nightly, or the length estimates become lies

The two I would watch first are identifiability and floor violations. Identifiability is the only metric that directly measures whether the whole personality thesis is true. Floor violations are the only ones that can make the game look broken to someone who has played it for an hour.


15. Open questions I could not settle

  1. Is a zero-budget Cadet too strong? The command layer is good enough that an AI which merely sets sensible Postures may be a harder first opponent than a beginner should meet. I would rather discover this in playtest than pre-emptively cripple it, but the fix (worse Sanctions rather than fewer overrides) is a second weakness mechanism and I do not love having two.

  2. Do Captain and Colonel feel different to a player who does not understand supply? The terms that separate them are the ones a strong player values most and a casual player notices least. If the middle of the ladder is flat, something other than omission has to differentiate it, and I do not know what.

  3. Should personalities be named by default? §7.1 decides Named in solo and Anonymous in Tournament, on VC's "fog hides what your opponent is doing, not what the world is" principle. The counter-argument is decent: an unnamed opponent that you deduce is Karsk is a better experience than one that was labelled Karsk in setup, and the Dossier is what makes the deduction possible.

  4. Is Sabar a good addition to a multiplayer game or a rigged one? §9.5 turns it off by default above one human seat and clamps predation. In solo it is clearly good — it is the thing that stops a runaway and keeps the middle third live. Between humans I genuinely do not know, and it interacts with VC's own unresolved question about Contested Warrants, which is the same argument.

  5. Can a fog-honest AI ever stop looking like a cheat? The Debrief answers it after the game. Nothing answers it during. I suspect the real answer is a short in-game explanation attached to any AI action that surprised the player — "it did not see your transport; it was screening that ford already" — but that is an information channel and it needs a fog review I have not done.

  6. What is the right preference margin M? 50‰ is a guess. Too small and personality is noise; too large and everything is decided by the tie-break list, which makes the weights decorative. Measurable: the share of Aim decisions resolved by tie-break rather than by score should sit somewhere around a fifth, and I have no evidence for that number either.

  7. The Override's quarter. One quarter of uncommitted force is a guess with no derivation. It is also the constant that decides whether a personality survives contact with a leader, so it wants the counterfactual-replay treatment VC §13 uses: re-run each game with the Override disabled and measure how many AI seats lose to an uncontested Vigil.

  8. Does personality survive repeated tuning? §2.3's freeze protects the offsets but not their meaning. After several baseline promotions the characters may drift into things nobody designed, and the Elo price measures the size of the drift but not its direction. Periodic hand review is not a system.

  9. Is the measured-strength selector right? It is honest and it may be discouraging. It is also irreversible as a commitment: publishing a number and then withdrawing it reads as an admission.

  10. Should a Substitute's Rank track the game's other AI seats rather than a fixed default? In a game already containing a General, replacing a departed human with a Captain changes the balance of the table. Matching the other AI seats is more consistent and less predictable; a fixed declared constant is more honest. I chose honest and I am not sure.

  11. What does an AI seat do about Sealed Orders (VC T12)? It must not act as though it knows another seat's hidden objective. Inferring one from unexplained behaviour is legitimate and is exactly what Marshal's opponent model is for — but the line between "inferred from observed behaviour" and "read the game state" is one bad import away, and it needs an explicit test rather than an assurance.


16. Contracts — what this angle needs from other documents

Recorded so that a change on either side is detectable.

From What is needed
10-turn-model (TM) Rolling planning (TM §3.8) opened for AI seats specifically, so an AI turn may be computed during the previous Cascade's playback — §11.2's whole budget argument rests on it. The three-band initiative display of TM's open question 2 must be available to an AI seat on the same terms as to a player, and no finer. The presence/commit signal must not carry anything beyond the declared AI label.
11-combat (CB) The exact per-mille predictor with its estimated flag (already promised via CM-2150), and the pivot analysis of CB §10 — "they break unless they are Veteran or better" is the decision-relevant fact, and an AI that only gets the 0–1000‰ band under fog is strictly worse than a player who is shown the pivot. Any handicap touching combat must be a force modifier visible to the predictor and enumerated in the preview (§10.3).
12-economy (EC) The closed-form projections this document forecasts against, exposed as pure functions over a hypothetical state: effective Works, Levy, Integration and Unrest ticks, the Cadre cost curve, Reach propagation and supply grade. EC's Order Board exception list (§5) as a machine-readable stream, since it is the economic half of the AI's attention budget.
13-command (CM) The Attention Event stream readable by an AI seat for its own position (CM-1610 already emits it deterministically per player). CM-1770's P for an AI seat is personality data recorded in the game configuration, not adaptive client state, and CM-1780 does not apply to it. Confirmation that every command object is submittable as an ordinary order, which CM-2040 already gives.
14-victory (VC) Track progress and threshold functions evaluable at hypothetical states, which VC §2.1 already promises the AI evaluator. The Ebb closed form, the Tally rotation and the Warrant schedule as forward-readable data. The deterministic Verdict vote policy VC's contract asks this document for is supplied in §9.2 and below. The calibration table needs a Rank column (§11.5).
02-units-and-industry (US) Capability flags rather than unit identities, so the AI plays custom rosters without hard-coded knowledge. The per-player Industry cap as a handicap lever (§10.2).
Architecture / services The headless self-play farm at the scale in §11.5; an Elo ladder over human games to feed §4.5's measured selector; the nightly regeneration gate; and the AI version + weight version pinned in the game configuration and the replay header (§11.4).
04-ui-ux The difficulty selector's measured-number layout (§4.5), the personality setup cards including the full-expression note (§6.3) and the Override warning (§13), the Dossier (§7.1), the Debrief and the Second Opinion (§7.3), and the Terms-paragraph disclosure of substitution policy and every active handicap (§9.3, §10.1).

The Verdict vote policy, supplied. At a Verdict offer (VC §8.3) an AI seat votes to end the game if and only if all three hold, evaluated from that seat's own view using only the public Standing and banded Track information VC §6.1 already publishes:

  1. For every enabled Track, its projected best progress at the Horizon — computed at its Rank's H, using VC §8.2's own ceiling arithmetic — is below the leader's current progress by more than the maximum it can still gain; and
  2. its Standing has not increased in the last 8 turns; and
  3. it holds no city it projects it could convert into a Vigil within 20 turns.

Otherwise it abstains, which VC counts as play on. A Caretaker always abstains. The policy is deterministic, uses no information the seat does not have, and is deliberately conservative — it plays on unless the arithmetic says it cannot win, which is what VC §8.3 wants when it says a beaten AI should concede when it should and the single-player mop-up should largely disappear.