A House Divided A House DividedDocumentation
Changelog
Game Design/Other

Global response crises (as shipped)

Last updated 2026-08-23
Player wikiGlobal Response Crises
Source files

Release 1.3 replaces isolated historical crisis cards with a persistent international campaign layer. It sits between the ordinary crises decision system, the livingConflicts phase engine, shooting wars, Cold War tension, and national nuclear programs. The feature deliberately has no negotiation mini-game.

Player surfaces#

The combined board does not render an empty world map when there are no shooting wars. Its tension scale, pressure floor, driver cards, consequence bars, intensity markers, lean bars, and summary counts all carry inline help.

The International Response Desk on /world/conflicts lists every active crisis carrying a globalResponse definition. These records are often stored with scope: "country" because each eligible government owns a separate national decision. The National label therefore describes response ownership, not geographic reach. The desk explains that distinction, shows turn progress and participating governments, and links into the full response page. Ordinary domestic crises without a global-response definition, such as a national industrial strike, remain on the crises and actions surfaces rather than appearing on the strategic world board.

Module boundary#

The deep module is src/lib/livingConflict/.

The ordinary crisis resolver remains the command boundary for submitting a response. This keeps treasury debits, expiry defaults, response idempotency, and role authorization in one path.

Persistent state#

Each livingConflicts row carries the phase state and an optional campaign. normalizeCampaignState is the compatibility seam for worlds created before campaign depth existed. The release migration also writes normalized state onto legacy rows so live data does not depend on a later read to heal.

The campaign state contains:

recordCampaignCommitment rejects duplicate response ids. It changes only the responding country's memory. Consequence values and country-memory values are clamped from 0 to 100.

Stage drift#

advanceCampaignTurn applies slow motion between response windows:

Stage Per-turn drift
Posture No automatic consequence change
Mobilization Arms proliferation +0.4, regional spillover +0.2
Operations Civilian strain +0.7, refugees +0.4, infrastructure damage +0.45, casualties +0.6, regional spillover +0.25, settlement momentum +0.15
Settlement Civilian strain -0.35, refugees -0.15, settlement momentum +0.5
Aftermath Civilian strain -0.5, refugees -0.25, infrastructure damage -0.15, regional spillover -0.2, settlement momentum -0.25

Authored outcomes can move stages, begin a new cycle, or apply additional consequence deltas. Aftermath is therefore recovery state, not deletion of campaign history.

Capability requirements and information#

An authored option may require a stage plus minimum treasury as a share of GDP, military readiness, logistics, domestic support, or intelligence confidence. assessCampaignRequirement is shared by read and command paths. The server checks requirements again during submission, so stale client eligibility cannot authorize a response.

Briefings are asymmetric. projectCampaignBriefing uses the country's role, live capability snapshot, and campaign exposure to decide which intelligence notes and consequence detail it may see. Covert commitments raise covertExposure; they do not create a separate negotiation or secret-deal system.

Global tension#

stores one coldWarTension row keyed current. The current value is 0 to 100, with bands:

Range Band
0 to below 15 Detente
15 to below 35 Calm
35 to below 60 Elevated
60 to below 80 Crisis
80 to 100 Brink

Discrete events apply immediate deltas and enter a 24-item ledger. Between events, runTensionTurn moves the value toward a standing floor. The floor is:

12
+ min(30, Vietnam escalation level * 4)
+ min(12, active international response crisis count * 3)
+ min(18, sqrt(total world warheads) * 1.2)

The relaxation fraction is 0.08 per turn. Motion toward a higher floor is doubled. derives the displayed DEFCON, strategic procurement multiplier, and detente goodwill penalty.

Global response outcomes call applyTensionEvent, so campaign decisions can raise or reduce the shared reading. The page shows the current reading, band, floor, direction, each floor component, derived dials, and recent event ledger.

Nuclear integration#

owns the program tree. Device nodes are public tests and delivery nodes are quiet adoptions. The conventional Nuclear Delivery doctrine node gates program actions. Deterrence is zero without both warheads and at least one delivery node.

Nuclear mechanics connect to the crisis layer in three places:

  1. A device test applies an immediate global-tension event.
  2. Total world warheads raise the standing tension floor.
  3. The nuclear_incident living conflict cannot open until nuclearStandoffPossible finds at least two credible programs. A calendar year alone cannot create a bilateral nuclear alert.

Warhead counts are game-scaled balance units, not literal historical inventories. seedColdWarFoundations inserts missing era-appropriate programs for the United States, Soviet Union or Russia, and United Kingdom. It sets production to zero, so later buildup remains a player budget decision. It also inserts or completes the Nuclear Delivery doctrine prerequisite where absent. Existing program rows are never overwritten.

Seeding and release migration#

Fresh worlds call seedColdWarFoundations after initializeGameState. Release 1.3 also registers 2026-08-23-seed-global-response-foundations in the deploy migration runner. The operation is idempotent and does the following:

DEFAULT_GAME_STATE_FLAGS.livingConflictsEnabled is true, so later fresh worlds use the same release posture.

The player wiki source is . Production rollout uses npm run seed:wiki:force after the code deploy so the database copy matches the shipped source.

Vietnam compatibility#

Vietnam remains the first full authored family. Its existing ladder is imported into the generic campaign state. The United States and Soviet Union receive independent country-scoped response windows. At the air campaign rung the engine can open a real North Vietnam versus South Vietnam conflict while the superpowers remain patrons. Dropping below that rung winds the front down, and reaching zero ends the family without allowing a restart.

Missed response windows resolve through the authored cautious default. An inactive office holder cannot freeze the campaign.

Operational checks#

After migration and wiki reseed, verify: