Carceral Geography
==================
Carceral Geography models the spatial dimensions of state repression:
where populations are detained, displaced, and eliminated. It implements
the **detention pipeline** and **displacement routing** systems.
Overview
--------
The carceral geography system tracks how the state uses space as a tool
of class management:
- **Detention** - Removing populations from economic circulation
- **Displacement** - Forcing populations to move between territories
- **Elimination** - Permanent removal from the simulation
This models real-world patterns: mass incarceration, gentrification,
border enforcement, and colonial dispossession.
The Detention Pipeline
----------------------
When state repression targets a class, it enters a three-stage pipeline:
.. mermaid::
stateDiagram-v2
[*] --> DETENTION: Arrest
DETENTION --> INCARCERATION: After detention_duration
INCARCERATION --> ELIMINATION: displacement_priority
DETENTION --> [*]: Release
INCARCERATION --> [*]: Labor scarce mode
note right of DETENTION: Short-term hold
Can be released
note right of INCARCERATION: Long-term hold
Reduced capacity
note right of ELIMINATION: Removed from
simulation
**Stage Transitions:**
1. **Detention → Incarceration**
After ``detention_duration`` ticks, detained classes move to incarceration.
2. **Incarceration → Elimination/Release**
Based on ``displacement_priority`` mode:
- ELIMINATION mode: Classes are eliminated
- LABOR_SCARCE mode: Classes are released (needed for production)
- BALANCED mode: Probabilistic outcome
Displacement Priority Modes
---------------------------
The ``displacement_priority`` parameter controls how the state manages
surplus populations:
.. list-table:: Displacement Priority Modes
:header-rows: 1
:widths: 20 40 40
* - Mode
- Logic
- Historical Parallel
* - LABOR_SCARCE
- Prefer release; labor is valuable
- Post-war labor shortages
* - BALANCED
- Mixed approach based on conditions
- Normal capitalist state
* - ELIMINATION
- Prefer elimination; populations disposable
- Settler colonialism, fascism
**Dynamic Mode Selection:**
The mode can be set statically or computed dynamically based on
economic conditions:
.. code-block:: python
def calculate_displacement_priority(territory, graph):
"""Dynamic priority based on labor market."""
labor_supply = count_available_workers(territory, graph)
labor_demand = calculate_production_needs(territory, graph)
if labor_supply < labor_demand * 0.5:
return DisplacementPriority.LABOR_SCARCE
elif labor_supply > labor_demand * 1.5:
return DisplacementPriority.ELIMINATION
else:
return DisplacementPriority.BALANCED
Territory Heat System
---------------------
Territories accumulate **heat** from high-profile activities:
.. math::
H_{t+1} = H_t + \Delta H_{activity} - \Delta H_{decay}
**Heat Sources:**
- Protests, strikes (high heat gain)
- Organizing activities (medium heat gain)
- Normal economic activity (no heat change)
**Heat Consequences:**
.. list-table:: Heat Thresholds
:header-rows: 1
:widths: 20 80
* - Heat Level
- Consequence
* - < 0.4
- Normal operations
* - 0.4 - 0.8
- Increased surveillance
* - >= 0.8
- **Eviction trigger** - classes must relocate
Eviction and Spillover
----------------------
When territory heat reaches 0.8, the **eviction pipeline** activates:
1. **Mark for Eviction**
Classes with TENANCY edges to hot territory are flagged.
2. **Find Adjacent Territory**
System searches ADJACENCY edges for relocation targets.
3. **Execute Displacement**
Classes move to adjacent territory; heat spillover occurs.
.. code-block:: python
def process_eviction(class_id, hot_territory, graph):
"""Execute eviction from hot territory."""
# Find adjacent territories
adjacent = [
t for t in graph.neighbors(hot_territory)
if graph.edges[hot_territory, t].get("edge_type") == EdgeType.ADJACENCY
]
if adjacent:
# Move to lowest-heat adjacent territory
target = min(adjacent, key=lambda t: graph.nodes[t]["heat"])
relocate_class(class_id, hot_territory, target, graph)
# Heat spillover
graph.nodes[target]["heat"] += SPILLOVER_COEFFICIENT
else:
# No escape route - enter detention
enter_detention(class_id, hot_territory, graph)
Operational Profiles
--------------------
Territories have operational profiles that affect heat dynamics:
.. list-table:: Operational Profiles
:header-rows: 1
:widths: 20 30 50
* - Profile
- Heat Gain Rate
- Description
* - HIGH_PROFILE
- High
- Visible areas (city centers, protest sites)
* - MIXED
- Medium
- Normal urban/suburban areas
* - LOW_PROFILE
- Low
- Hidden areas (rural, underground)
**Strategic Implications:**
- Organize in LOW_PROFILE territories to avoid heat
- HIGH_PROFILE territories draw state attention but enable mass mobilization
- Movement between profiles affects surveillance exposure
Integration with Other Systems
------------------------------
Carceral geography interacts with:
**Survival System**
Detention reduces P(S|A) - survival by acquiescence becomes impossible
while detained. This can trigger revolutionary consciousness.
**Solidarity System**
Detained classes lose SOLIDARITY edges (network fragmentation).
Prison organizing can rebuild them.
**Contradiction System**
Mass incarceration increases systemic tension. When detention
capacity is exceeded, contradictions intensify.
Implementation
--------------
The carceral geography system is implemented in ``TerritorySystem``:
.. code-block:: python
# src/babylon/engine/systems/territory.py
class TerritorySystem:
def process(self, graph, services, context):
# 1. Update heat based on activities
self._update_heat(graph)
# 2. Process evictions from hot territories
self._process_evictions(graph)
# 3. Advance detention pipeline
self._advance_detention(graph, context.config)
# 4. Route displaced populations
self._route_displacement(graph, context.config)
Key Configuration
-----------------
``GameDefines`` parameters for carceral geography:
.. list-table:: Configuration Parameters
:header-rows: 1
:widths: 35 15 50
* - Parameter
- Default
- Effect
* - ``territory.heat_threshold``
- 0.8
- Heat level triggering eviction
* - ``territory.heat_decay``
- 0.1
- Heat reduction per tick
* - ``territory.spillover_coefficient``
- 0.2
- Heat transferred on spillover
* - ``territory.detention_duration``
- 5
- Ticks before detention → incarceration
* - ``territory.displacement_priority``
- BALANCED
- Default displacement mode
See Also
--------
- :doc:`/concepts/topology` - Territory nodes and ADJACENCY edges
- :doc:`/concepts/survival-calculus` - How detention affects survival
- :doc:`/concepts/george-jackson-model` - Prison as consciousness crucible
- :doc:`/reference/formulas` - Heat and territory formulas
- :doc:`/reference/configuration` - Territory GameDefines parameters
- :py:mod:`babylon.engine.systems.territory` - Implementation details