babylon.models.events.balkanization_payloads

Spec-070 balkanization event payloads (T033, FR-022, FR-023, FR-026, FR-028, FR-029a, FR-031, FR-034, FR-035).

Each payload is a frozen Pydantic model mirroring its JSON Schema in specs/070-balkanization/contracts/balkanization_events.json. The SimulationEvent base owns the common event_type + tick + timestamp fields; spec-070 payloads inherit it.

Naming convention: {EventType}Payload to disambiguate from the GameOutcome enum values (e.g., RedOgvEndgamePayload carries data for the EventType.RED_OGV_ENDGAME event, NOT the GameOutcome.RED_OGV enum literal).

Classes

CivilWarDeclaredPayload(**data)

FR-028 civil-war-declared event payload.

DualPowerActivePayload(**data)

FR-035 dual-power-active diagnostic event payload.

FactionVictoryPayload(**data)

FR-026 faction-victory event payload.

FragmentedCollapseEndgamePayload(**data)

FR-032a FRAGMENTED_COLLAPSE endgame event payload.

RedOgvEndgamePayload(**data)

FR-031 RED_OGV endgame event payload (the settler-socialist trap).

RedSettlerTrapDetectedPayload(**data)

FR-034 red-settler-trap diagnostic event payload.

SecessionDeclaredPayload(**data)

FR-029a (2) secession-declared event payload.

SovereignCollapsePayload(**data)

FR-023 sovereign-collapse event payload.

TerritoryTransitionPayload(**data)

FR-022 territory-transition event payload.

class babylon.models.events.balkanization_payloads.CivilWarDeclaredPayload(**data)[source]

Bases: SimulationEvent

FR-028 civil-war-declared event payload.

Parameters:
  • event_type (Literal[EventType.CIVIL_WAR_DECLARED])

  • tick (int)

  • timestamp (datetime)

  • parent_sovereign_id (str)

  • secessionist_faction_id (str)

  • contested_territory_count (int)

event_type: Literal[EventType.CIVIL_WAR_DECLARED]
parent_sovereign_id: str
secessionist_faction_id: str
contested_territory_count: int
model_config: ClassVar[ConfigDict] = {'frozen': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class babylon.models.events.balkanization_payloads.DualPowerActivePayload(**data)[source]

Bases: SimulationEvent

FR-035 dual-power-active diagnostic event payload.

Parameters:
  • event_type (Literal[EventType.DUAL_POWER_ACTIVE])

  • tick (int)

  • timestamp (datetime)

  • territory_id (str)

  • competing_sovereign_ids (tuple[str, ...])

  • control_level_sum (float)

event_type: Literal[EventType.DUAL_POWER_ACTIVE]
territory_id: str
competing_sovereign_ids: tuple[str, ...]
control_level_sum: float
model_config: ClassVar[ConfigDict] = {'frozen': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class babylon.models.events.balkanization_payloads.FactionVictoryPayload(**data)[source]

Bases: SimulationEvent

FR-026 faction-victory event payload.

Parameters:
  • event_type (Literal[EventType.FACTION_VICTORY])

  • tick (int)

  • timestamp (datetime)

  • faction_id (str)

  • aggregate_influence_share (float)

event_type: Literal[EventType.FACTION_VICTORY]
faction_id: str
aggregate_influence_share: float
model_config: ClassVar[ConfigDict] = {'frozen': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class babylon.models.events.balkanization_payloads.FragmentedCollapseEndgamePayload(**data)[source]

Bases: SimulationEvent

FR-032a FRAGMENTED_COLLAPSE endgame event payload.

Parameters:
  • event_type (Literal[EventType.FRAGMENTED_COLLAPSE_ENDGAME])

  • tick (int)

  • timestamp (datetime)

  • surviving_sovereign_count (int)

  • configuration_duration_ticks (int)

  • insurgent_or_occupation_count (int)

event_type: Literal[EventType.FRAGMENTED_COLLAPSE_ENDGAME]
surviving_sovereign_count: int
configuration_duration_ticks: int
insurgent_or_occupation_count: int
model_config: ClassVar[ConfigDict] = {'frozen': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class babylon.models.events.balkanization_payloads.RedOgvEndgamePayload(**data)[source]

Bases: SimulationEvent

FR-031 RED_OGV endgame event payload (the settler-socialist trap).

Parameters:
  • event_type (Literal[EventType.RED_OGV_ENDGAME])

  • tick (int)

  • timestamp (datetime)

  • ignore_aligned_sovereign_share (float)

  • class_tension (float)

  • aggregate_habitability (float)

  • habitability_slope (float)

  • user_facing_message (str)

event_type: Literal[EventType.RED_OGV_ENDGAME]
ignore_aligned_sovereign_share: float
class_tension: float
aggregate_habitability: float
habitability_slope: float
user_facing_message: str
model_config: ClassVar[ConfigDict] = {'frozen': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class babylon.models.events.balkanization_payloads.RedSettlerTrapDetectedPayload(**data)[source]

Bases: SimulationEvent

FR-034 red-settler-trap diagnostic event payload.

Parameters:
  • event_type (Literal[EventType.RED_SETTLER_TRAP_DETECTED])

  • tick (int)

  • timestamp (datetime)

  • faction_id (str)

  • class_reduction (float)

  • colonial_stance (Literal['uphold', 'ignore'])

event_type: Literal[EventType.RED_SETTLER_TRAP_DETECTED]
faction_id: str
class_reduction: float
colonial_stance: Literal['uphold', 'ignore']
model_config: ClassVar[ConfigDict] = {'frozen': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class babylon.models.events.balkanization_payloads.SecessionDeclaredPayload(**data)[source]

Bases: SimulationEvent

FR-029a (2) secession-declared event payload.

Parameters:
  • event_type (Literal[EventType.SECESSION_DECLARED])

  • tick (int)

  • timestamp (datetime)

  • secessionist_faction_id (str)

  • parent_sovereign_id (str)

  • contiguous_territory_ids (tuple[str, ...])

  • observer_triggered (bool)

event_type: Literal[EventType.SECESSION_DECLARED]
secessionist_faction_id: str
parent_sovereign_id: str
contiguous_territory_ids: tuple[str, ...]
observer_triggered: bool
model_config: ClassVar[ConfigDict] = {'frozen': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class babylon.models.events.balkanization_payloads.SovereignCollapsePayload(**data)[source]

Bases: SimulationEvent

FR-023 sovereign-collapse event payload.

Parameters:
  • event_type (Literal[EventType.SOVEREIGN_COLLAPSE])

  • tick (int)

  • timestamp (datetime)

  • sovereign_id (str)

  • trigger (Literal['legitimacy_zero', 'ecological_overshoot', 'nuclear_exchange', 'general_uprising'])

  • claimed_territories_count (int)

event_type: Literal[EventType.SOVEREIGN_COLLAPSE]
sovereign_id: str
trigger: Literal['legitimacy_zero', 'ecological_overshoot', 'nuclear_exchange', 'general_uprising']
claimed_territories_count: int
model_config: ClassVar[ConfigDict] = {'frozen': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class babylon.models.events.balkanization_payloads.TerritoryTransitionPayload(**data)[source]

Bases: SimulationEvent

FR-022 territory-transition event payload.

Parameters:
  • event_type (Literal[EventType.TERRITORY_TRANSITION])

  • tick (int)

  • timestamp (datetime)

  • territory_id (str)

  • from_sovereign_id (str | None)

  • to_sovereign_id (str | None)

  • from_winning_faction_id (str | None)

  • to_winning_faction_id (str | None)

  • reason (Literal['influence_flip', 'collapse_partition', 'fracture', 'conquest'])

event_type: Literal[EventType.TERRITORY_TRANSITION]
territory_id: str
from_sovereign_id: str | None
to_sovereign_id: str | None
from_winning_faction_id: str | None
to_winning_faction_id: str | None
reason: Literal['influence_flip', 'collapse_partition', 'fracture', 'conquest']
model_config: ClassVar[ConfigDict] = {'frozen': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].