Expand the old "espionage" idea into hybrid war — the full non-kinetic warfare spectrum. Nations wage war short of open conquest: covert action against an adversary plus cyber/economic/information/proxy pressure, each with a chance of exposure that backfires on the attacker's relations.
Each op resolves a success/exposure roll (the LLM declares an intended outcome, but the engine applies a deterministic rule: e.g. an assassinate succeeds only if the target's stability is below a threshold, and any failed/caught op penalizes the attacker's relation with the target and/or the public).
Effects: spy → reveals a stat/region; sabotage → small stat delta on target; assassinate → kills a named leader (ties into the Named-leaders feature) or, absent one, a stability hit; cyber → target stat dip + possible disruption of a marker; economic → target economy down (ties into Trade/embargo); information → relation shift on a third party (disinformation); proxy → support a non-nation or push a third nation toward war.
Builds on: relations, per-region stats, the military gate (espionage can weaken a target to enable a later conquest).
Acceptance
e2e safety (critical): stub returns hybrid: { ops: [] }, stays deterministic; additive (legacy games load with no hybrid); must not break the UK-in-wwii-1939 e2e (empty frontier, military 80→85, 7-item legend).
Unit tests in server/engine.test.ts (each op type, exposure/backfire, interaction with the military gate).
System prompt documents hybrid + the op types; user prompt carries relevant current state. Version bump at PR time.
## What
Expand the old "espionage" idea into **hybrid war** — the full non-kinetic warfare spectrum. Nations wage war short of open conquest: covert action against an adversary plus cyber/economic/information/proxy pressure, each with a **chance of exposure** that backfires on the attacker's relations.
## Mechanism
- `TurnResult` gains `hybrid: { ops: HybridOp[] }` — required, default `[]`. `HybridOp = { type: 'spy'|'sabotage'|'assassinate'|'cyber'|'economic'|'information'|'proxy'; from: string /* nationRef */; target: string /* nationRef or regionKey */; detail?: string }`.
- Each op resolves a **success/exposure roll** (the LLM declares an intended outcome, but the engine applies a deterministic rule: e.g. an `assassinate` succeeds only if the target's `stability` is below a threshold, and any failed/caught op **penalizes the attacker's relation** with the target and/or the public).
- Effects: `spy` → reveals a stat/region; `sabotage` → small stat delta on target; `assassinate` → kills a named leader (ties into the Named-leaders feature) or, absent one, a stability hit; `cyber` → target stat dip + possible disruption of a marker; `economic` → target economy down (ties into Trade/embargo); `information` → relation shift on a third party (disinformation); `proxy` → support a non-nation or push a third nation toward war.
- Builds on: relations, per-region stats, the military gate (espionage can *weaken* a target to enable a later conquest).
## Acceptance
- **e2e safety (critical):** stub returns `hybrid: { ops: [] }`, stays deterministic; additive (legacy games load with no `hybrid`); must **not** break the UK-in-`wwii-1939` e2e (empty frontier, military 80→85, 7-item legend).
- Unit tests in `server/engine.test.ts` (each op type, exposure/backfire, interaction with the military gate).
- System prompt documents `hybrid` + the op types; user prompt carries relevant current state. Version bump at PR time.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What
Expand the old "espionage" idea into hybrid war — the full non-kinetic warfare spectrum. Nations wage war short of open conquest: covert action against an adversary plus cyber/economic/information/proxy pressure, each with a chance of exposure that backfires on the attacker's relations.
Mechanism
TurnResultgainshybrid: { ops: HybridOp[] }— required, default[].HybridOp = { type: 'spy'|'sabotage'|'assassinate'|'cyber'|'economic'|'information'|'proxy'; from: string /* nationRef */; target: string /* nationRef or regionKey */; detail?: string }.assassinatesucceeds only if the target'sstabilityis below a threshold, and any failed/caught op penalizes the attacker's relation with the target and/or the public).spy→ reveals a stat/region;sabotage→ small stat delta on target;assassinate→ kills a named leader (ties into the Named-leaders feature) or, absent one, a stability hit;cyber→ target stat dip + possible disruption of a marker;economic→ target economy down (ties into Trade/embargo);information→ relation shift on a third party (disinformation);proxy→ support a non-nation or push a third nation toward war.Acceptance
hybrid: { ops: [] }, stays deterministic; additive (legacy games load with nohybrid); must not break the UK-in-wwii-1939e2e (empty frontier, military 80→85, 7-item legend).server/engine.test.ts(each op type, exposure/backfire, interaction with the military gate).hybrid+ the op types; user prompt carries relevant current state. Version bump at PR time.