babylon.engine.systems.struggle

Struggle system for the Babylon simulation - The Agency Layer.

Implements the “George Floyd Dynamic”: State Violence (The Spark) + Accumulated Agitation (The Fuel) = Insurrection (The Explosion).

This system solves the “Spectator Problem” where entities suffer but don’t react. It gives political agency to oppressed classes by modeling:

  1. The Spark: Police brutality (EXCESSIVE_FORCE) is a stochastic function of Repression

  2. The Combustion: A spark becomes an UPRISING if population is agitated and hopeless

  3. The Result: Uprisings destroy wealth but permanently increase solidarity infrastructure

Key Insight: The explosion is what builds the solidarity bridges that enable consciousness transmission in subsequent ticks. Revolution is built through shared struggle, not spontaneous awakening.

Target Social Roles: - PERIPHERY_PROLETARIAT: Exploited workers in the global periphery - LUMPENPROLETARIAT: Outside formal economy, precarious existence

These classes face the highest repression and have the most agency in creating revolutionary conditions through collective action.

Classes

StruggleSystem()

Agency Layer - The Struggle System ("George Floyd Dynamic").

class babylon.engine.systems.struggle.StruggleSystem[source]

Bases: object

Agency Layer - The Struggle System (“George Floyd Dynamic”).

This system runs AFTER SurvivalSystem (needs P values) and BEFORE ContradictionSystem. It gives agency to oppressed classes through the Stochastic Riot mechanic:

  1. Calculate EXCESSIVE_FORCE probability: spark_prob = repression * spark_scale

  2. Roll for spark occurrence

  3. Check uprising condition: (Spark OR P(S|R) > P(S|A)) AND agitation > threshold

  4. Execute uprising:

    • Economic damage: wealth *= (1 - destruction_rate)

    • Solidarity gain: Increase solidarity_strength on incoming SOLIDARITY edges

    • Class consciousness gain: All nodes in uprising gain consciousness

  5. Emit events for narrative layer

The solidarity built in Tick N enables SolidaritySystem transmission in Tick N+1.

name = 'Struggle'
step(graph, services, context)[source]

Apply struggle dynamics to all eligible entities.

Processes PERIPHERY_PROLETARIAT and LUMPENPROLETARIAT nodes, checking for spark events and uprising conditions.