Couplings & Lineage
The graph layer of Prime Radiant is built from two coupling types (intra-era and cross-era) and a lineage system that tracks how machines succeed, branch, and merge across historical time. Cross-era couplings form the load-bearing structure of the simulator — they describe how the Modernity Machine, Divergence Machine, and Liveness Machine are entangled right now.
Coupling (intra-era)
Edges within a single world-machine era. The target_id must share the same parent_machine as the source. Required for all cards with lifecycle_status ≥ proposed.
| Field | Type | Required | Notes |
|---|---|---|---|
| id | str |
yes | Unique coupling identifier within the card. |
| target_id | str (machine id) |
yes | Same parent_machine as source card. Resolved to a card slug in the graph. |
| kind | CouplingKindIntra enum | yes | Functional coupling kind within the era graph. Distinct from cross-era typology. |
| strength | float [0,1] |
optional | Edge weight for PageRank. High-strength couplings drive gravitational_type. |
| temporal_window | tuple[int, int|null] |
optional | Active year range. Null second element = ongoing as of authoring. Patched in surface S2. |
| causal_kind | structural | behavioral | associational |
optional | Pearl rung promotion gate. |
| canon_flag | CanonFlag enum | yes | [CANON], [EXTRAP], or hybrid form. |
| wave_source | str |
yes | Research wave that grounded this coupling. |
CrossEraCoupling (10-kind enum)
The target_id must have a DIFFERENT parent_machine from the source. DM cards require ≥1 cross-era coupling; LM cards require ≥3. Patched per oq-6-5.
| Value | Meaning | Observable signal |
|---|---|---|
| zombie_dependency | Newer era machine needs older; older cannot reproduce conditions | Target's zombie_persistence_index > 0.60 |
| adapted_inheritance | Older reterritorializes to serve new era | delanda_coding delta > 0.30 + machine_lifespan continuity |
| hostile_inheritance | Older actively blocks or taxes newer via OPP position | purification_index > 0.60 on older machine |
| parasitic_extraction | Newer extracts older's value flows without sustaining them | Older throughput declines; newer grows in same niche |
| substrate_provision | Older's outputs are foundational substrate; no backflow | No substitute path; disruption halts newer |
| sublimation_coupling | Newer renders older's OPP irrelevant; passive obsolescence | Older's gravitational_type degrades without coupling signal from newer |
| black_hole_dependency | Single-node existential dependency (≥0.85 severity; no viable substitute) | Target's gravitational_type = black_hole |
| withholds_from | Directed denial via export controls / sanctions | Regulatory/legal action denying access |
| tool_set_evolution_of | Same institutional identity across cards; different tool sets | Use only between cards sharing identity_lineage_id |
| mutualistic_coupling | Both sides materially reinforce; symmetric directionality | Maps to Bryant Path relation_type: symbiotic; both ends carry same label |
Key discriminator: mutualistic_coupling is symmetric — both machines reinforce each other. adapted_inheritance is asymmetric — the older reterritorializes to serve the newer, with no required backflow. Conflating them is the most common cross-era authoring error.
CrossEraCoupling additional fields
| Field | Type | Required | Notes |
|---|---|---|---|
| path_type | corporeal | technological | semiotic | energetic |
yes | Orthogonal to kind. Determines programmer-machine Castells rule. |
| temporal_window | tuple[int, int|null] |
yes | Cross-era temporal_window is required (unlike intra-era where it is optional). |
| strength | float [0,1] |
yes | Required on cross-era couplings. |
| confidence | float [0,1] |
yes | Confidence < 0.5 implies canon_flag = [EXTRAP]. |
| observable_signal | str |
optional | Qualitative discriminator — the empirical observable that would distinguish this coupling kind from an alternative. |
Lineage & Succession
When a machine structurally transforms enough that it requires a new card, the successor_of / preceded_by chain links the two cards. The identity_lineage_id groups all cards in a chain under a single UUID cluster.
| Field | Type | Required | Notes |
|---|---|---|---|
| successor_of | list[str] |
optional | Predecessor card ids. List supports merger patterns (≥2 predecessors). |
| preceded_by | list[str] |
optional | Successor card ids. List supports branching patterns. |
| identity_lineage_id | str (UUID) |
required if successor_of non-empty |
Shared across entire lineage chain. Enables cross-card lineage graph traversal. |
| succession_type | SuccessionType (9 values) | required if successor_of non-empty |
evolution deliberately absent — use adaptation instead. |
| succession_date_range | tuple[int, int] |
required if successor_of non-empty |
Typology break spans 5–20 years. |
| typology_break_pattern | list[TypologyBreakPattern] | required (≥1; canonically ≥2) | What structurally changed to require a new card. |
| lineage_substrate | institutional | technical_memory | hybrid |
required if successor_of non-empty |
Per Stiegler: technical_memory lineages are susceptible to proletarianization_terminus. |
SuccessionType enum — 9 values
| Value | Meaning |
|---|---|
| substitution | Niche matures and displaces predecessor (predecessor expires independently) |
| adaptation | Predecessor restructures under pressure; restructured form requires new card |
| hostile_takeover | Successor captures predecessor's infrastructure; predecessor dissolves into successor |
| branching | One predecessor → ≥2 simultaneous successors; all share identity_lineage_id |
| merger | Two predecessors → one successor |
| vestigial | Predecessor persists as Dusk zombie while successor takes function |
| crypto_continuation | Structurally continuous but genealogical link denied |
| de_alignment_reconfig | Shock collapses predecessor pre-successor-ready; interregnum then re-alignment |
| proletarianization_terminus | Lineage terminates while artifact persists; no living competence re-internalizes (Stiegler) |
TypologyBreakPattern enum — 6 values
| Value | Meaning |
|---|---|
| substrate_replacement | The material substrate the machine runs on has changed |
| substrate_addition | A new substrate layer was added without removing the old one |
| input_set_replacement | Primary inputs have been fundamentally replaced |
| output_category_replacement | The category of outputs produced has shifted |
| coupling_typology_shift | The dominant coupling kind to other machines has changed |
| operational_grammar_collapse | The machine's operational grammar has been replaced wholesale |