babylon.engine.interceptor

Event Interceptor pattern for Epoch 2 adversarial mechanics.

Chain of Responsibility for event processing. Interceptors can: - Allow: Pass event unchanged - Block: Stop event with narrative reason - Modify: Transform event before emission

Enables State, Fascist factions, and adversarial actors to interfere with player actions before they take effect.

Classes

BlockedEvent(event, interceptor_name, reason)

Audit record for blocked events.

EventInterceptor()

Abstract base for event interceptors.

InterceptResult(event[, reason])

Immutable result of interceptor processing.

SimpleWorldContext([tick, data])

Basic WorldContext for testing.

WorldContext(*args, **kwargs)

Read-only world state for interceptor decisions.

class babylon.engine.interceptor.WorldContext(*args, **kwargs)[source]

Bases: Protocol

Read-only world state for interceptor decisions.

property tick: int

Current simulation tick.

__init__(*args, **kwargs)
class babylon.engine.interceptor.SimpleWorldContext(tick=0, data=<factory>)[source]

Bases: object

Basic WorldContext for testing.

Parameters:
tick: int = 0
data: dict[str, Any]
__init__(tick=0, data=<factory>)
Parameters:
Return type:

None

class babylon.engine.interceptor.InterceptResult(event, reason='')[source]

Bases: object

Immutable result of interceptor processing.

Parameters:
event

Event to continue with, or None if blocked.

reason

Narrative explanation (required if blocked).

event: Event | None
reason: str = ''
__post_init__()[source]

Validate blocked events have a reason.

Return type:

None

classmethod allow(event)[source]

Allow event unchanged.

Return type:

InterceptResult

Parameters:

event (Event)

classmethod block(reason)[source]

Block event with narrative reason.

Return type:

InterceptResult

Parameters:

reason (str)

classmethod modify(new_event, reason='')[source]

Modify event, optionally with reason.

Return type:

InterceptResult

Parameters:
property is_blocked: bool

True if event was blocked.

property is_modified: bool

True if event was modified with reason.

__init__(event, reason='')
Parameters:
Return type:

None

class babylon.engine.interceptor.BlockedEvent(event, interceptor_name, reason, blocked_at=<factory>)[source]

Bases: object

Audit record for blocked events.

Parameters:
event: Event
interceptor_name: str
reason: str
blocked_at: datetime
__init__(event, interceptor_name, reason, blocked_at=<factory>)
Parameters:
Return type:

None

class babylon.engine.interceptor.EventInterceptor[source]

Bases: ABC

Abstract base for event interceptors.

Priority ranges (higher runs first): - 90-100: Security/State (block first) - 50-89: Faction/adversarial - 10-49: Resource/validation - 1-9: Logging/audit (run last)

abstract property name: str

Interceptor name for logs and audit.

property priority: int

Chain priority (higher = earlier). Default 100.

abstractmethod intercept(event, context)[source]

Process event. Return allow/block/modify result.

Return type:

InterceptResult

Parameters: