CAMS models a society as a network of eight institutional nodes across three coordination layers. Node Value (Vi) captures the health of each node at a point in time. Bond Strength captures how well the network as a whole holds together — specifically, whether a perturbation at one node will propagate coherently through the system or instead fragment into isolated failure.
The core intuition: a society with healthy individual nodes but weak inter-node bonds is brittle. High Bond Strength does not mean every node is strong; it means the institutional network has sufficient algebraic connectivity to absorb and redistribute stress rather than fracture at the weakest edge.
Bond Strength is therefore a network-level property, not a node-level one. It is calculated from the full matrix of node values, not from any single node score.
The v2.3 canonical formulation is Laplacian-based, following Paper 1. It derives Bond Strength from the algebraic connectivity of the CAMS institutional network — specifically, the second-smallest eigenvalue (Fiedler value) of the graph Laplacian constructed from node values.
For each node i, node value is:
For each pair of nodes (i, j), compute the pairwise edge weight:
The value written to the CSV for each node is the mean pairwise bond across all other nodes in the same society-year:
This gives one Bond Strength value per row in the CSV, directly comparable across nodes, societies, and time periods.
compute_node_bond_strength() in
cams_framework_v2_3.py in the
GitHub repository.
Run python cams_framework_v2_3.py <raw_scores.csv> <output.csv>
to reproduce any v2.3 dataset from scratch.
cams_spectral.py in the repository implements a full spectral pipeline —
graph Laplacian, Fiedler vector, and algebraic connectivity (λ₂) — using the same
pairwise formula as a building block. The Fiedler value gives a single scalar per
society-year summarising whole-network cohesion and is used in advanced phase-space
and coordination analysis. It is distinct from the per-node Bond Strength in the CSVs.
See the Coordination Diagram page.
The +8 shift and /32 normalisation constrain Bond Strength to approximately [0, 1]. The theoretical maximum (all nodes at maximum NV ≈ 25) is ≈ 1.03. Values below zero are not possible. The following reference ranges are calibrated against the validated dataset:
| Range | Label | Interpretation | Representative cases |
|---|---|---|---|
0.00 – 0.15 |
Fragmented | Most node values near or below −8. Pairwise bonds near zero. Institutional coordination has broken down systemically. | Germany 1945 (mean ≈ 0.14), acute collapse scenarios |
0.15 – 0.35 |
Stressed | Significant negative node values pulling bonds down. Cross-layer coupling degraded. Recovery requires external stabilisation. | Late-stage imperial fragmentation, severe fiscal crises |
0.35 – 0.55 |
Transitional | Mixed node health — some layers functional, others stressed. Coordination failures localised rather than systemic. | Iran 1875 (mean ≈ 0.43), post-revolutionary states, inter-war periods |
0.55 – 0.75 |
Functional | All or most nodes positive. Normal operating range for a coherent society. Stress absorbed and redistributed. | Most stable post-1945 democracies, consolidated empires at peak |
0.75 – 1.0 |
High cohesion | All nodes strongly positive. Robust cross-layer coordination. Historically unusual to sustain. | Small high-trust polities, brief peak periods of major powers |
data/cleaned/ CSV files produced under the v2.0 weighted formula
formulation are not comparable to these values. See the
Version History section for conversion guidance.
Two reference cases, computed using cams_framework_v2_3.py.
| Node | Layer | C | K | A | S | Vi | Vi+8 | BS |
|---|---|---|---|---|---|---|---|---|
| Lore | Mythic | 2 | 2 | 3 | 8 | −2.5 | 5.5 | 0.153 |
| Archive | Mythic | 3 | 3 | 2 | 7 | 0.0 | 8.0 | 0.175 |
| Helm | Interface | 1 | 1 | 2 | 9 | −7.0 | 1.0 | 0.071 |
| Stewards | Interface | 2 | 2 | 2 | 8 | −5.0 | 3.0 | 0.118 |
| Shield | Material | 2 | 3 | 2 | 9 | −3.0 | 5.0 | 0.144 |
| Craft | Material | 3 | 3 | 3 | 8 | −0.5 | 7.5 | 0.174 |
| Hands | Material | 3 | 3 | 2 | 8 | −1.0 | 7.0 | 0.169 |
| Flow | Material | 2 | 2 | 2 | 9 | −6.0 | 2.0 | 0.099 |
| Mean Bond Strength | 0.138 | |||||||
All eight node values are negative. The +8 shift keeps bonds non-zero for nodes above −8, but the shifted values are small (1–8), producing pairwise bonds in the 0.04–0.24 range. Helm (executive authority, V = −7, shifted = 1) is the worst-bonded node: its near-zero shifted value drags every pairwise bond it contributes to toward zero. Mean BS ≈ 0.14 — deep Fragmented band.
| Node | Vi (approx.) | Vi+8 | BS |
|---|---|---|---|
| Lore | 17 | 25 | 0.78 |
| Archive | 16 | 24 | 0.77 |
| Helm | 18 | 26 | 0.80 |
| Stewards | 15 | 23 | 0.75 |
| Shield | 19 | 27 | 0.82 |
| Craft | 21 | 29 | 0.85 |
| Hands | 16 | 24 | 0.77 |
| Flow | 18 | 26 | 0.80 |
| Mean Bond Strength | 0.79 | ||
All nodes positive, shifted values 23–29. Pairwise bonds are high and balanced across the network. Mean BS ≈ 0.79 — high-cohesion band. Note the contrast with Germany 1945: the same formula, a fifteen-year gap, a factor-of-six difference in Bond Strength.
Bond Strength as defined above is a single scalar summarising the network's algebraic connectivity at one point in time. The cross-layer coupling index Λ(t) extends this to time series analysis:
Λ(t) is the primary coordination indicator used in phase-space analysis and in the crisis-detection claims on the Results page. A sustained decline in Λ(t) before a documented historical crisis event is the core empirical pattern CAMS is designed to detect.
See the Coordination Diagram page for the full cross-layer coupling model.
The formula on this page: Bij = sqrt(max(Vi+8,0) * max(Vj+8,0)) / 32.
Per-node Bond Strength is the mean of Bij across all other nodes in the same society-year.
Scale: approximately [0, 1]. Implemented in cams_framework_v2_3.py.
All datasets in data/v2.3/ use this formula.
The v2.0 formulation in cams_scoring_engine.py computed pairwise bond
strength as a weighted average of raw scores dampened by stress:
Bond = [(C_a + C_b) * 0.6 + (A_a + A_b) * 0.4] / (1 + avg_stress)
Per-node Bond Strength was then the mean of pairwise bonds across all other nodes.
This formula operated on raw Coherence and Abstraction scores rather than derived Node
Values, making it sensitive to scoring scale in ways the v2.3 formula is not.
All datasets in data/cleaned/ were produced by this formula.
Values are not comparable to v2.3 output — the scales differ
significantly (v2.0 typical range 8–16; v2.3 typical range 0.35–0.80).
cams_spectral.py implements a full spectral pipeline using the same
pairwise formula as a building block: graph Laplacian, Fiedler vector, and algebraic
connectivity λ₂. The Fiedler value gives a single scalar per society-year summarising
whole-network cohesion. It is a network-level measure, distinct from the per-node
Bond Strength in the CSVs. It is not a replacement for v2.3 — it is an extension
for advanced coordination analysis. See the
Coordination Diagram page.
Marginally. The theoretical maximum (all eight nodes at NV ≈ 25) produces pairwise bonds of √(33×33)/32 ≈ 1.03. In practice, values above 0.95 are rare. The scale is effectively [0, 1] for all empirically observed cases.
The max(Vi + 8, 0) floor sets the shifted value to zero. That node
contributes zero to every pairwise bond it is part of. It is treated as institutionally
disconnected — not merely weak, but severed. Nodes between −8 and 0 produce small but
non-zero bonds.
NV can range from approximately −10 (all stress, zero capacity) to +25 (maximum scores). A +8 shift means nodes down to −8 retain some bond-forming capacity, while the most severely collapsed nodes (below −8) are treated as fully disconnected. The /32 normalisation then maps the typical healthy range to approximately [0.5, 1.0]. Both constants are empirically set, not theoretically derived — they will be reviewed as the v2.3 dataset grows.
No. Per-node BS (mean pairwise bond, one value per row in the CSV) is a local
measure of how well a given node couples to the rest of the network. Λ(t) is the
mean bond strength restricted to cross-layer edges only, used for coordination
analysis. The spectral Fiedler value λ₂ from cams_spectral.py is a
third, network-level measure. All three use the same pairwise formula as the
building block but aggregate it differently.
Canonical implementation: compute_node_bond_strength() in
cams_framework_v2_3.py. See the
Reproducibility Guide for run instructions.