Model › Technical Specification

Bond Strength Canonical — v2.3

Specification version: 2.3 Supersedes: v2.1 pairwise geometric form, Scale Invariance page derived quantity Last updated: May 2026
Purpose of this page
This page is the single authoritative definition of Bond Strength in CAMS v2.3. Where earlier site pages, papers, or repository documents give a different formula or a different scale, this specification takes precedence. Superseded formulations are documented in the Version History section below.
Contents
  1. What Bond Strength measures
  2. Canonical formula (v2.3)
  3. Scale and interpretation
  4. Worked example
  5. System-level coupling index Λ
  6. Version history and superseded formulations
  7. Frequently asked questions

1. What Bond Strength measures

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.

Mythic
Lore
Meaning & identity
Mythic
Archive
Memory & knowledge
Interface
Helm
Executive authority
Interface
Stewards
Resource allocation
Material
Shield
Security & order
Material
Craft
Production & innovation
Material
Hands
Labour & population
Material
Flow
Logistics & exchange

2. Canonical formula (v2.3)

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.

Step 1 — Compute node values

For each node i, node value is:

Vi = Ci + Ki + (Ai / 2) − Si
C = Coherence  |  K = Capacity  |  A = Abstraction  |  S = Stress

Step 2 — Construct the weighted adjacency matrix

For each pair of nodes (i, j), compute the pairwise edge weight:

Bij = √(max(Vi + 8, 0) · max(Vj + 8, 0)) / 32
+8 shift handles negative node values  |  /32 normalises to approximately [0, 1]

Step 3 — Per-node Bond Strength

The value written to the CSV for each node is the mean pairwise bond across all other nodes in the same society-year:

BSi = meanj≠i Bij
Averaged over all 7 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.

Note for replicators
The canonical implementation is 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.
Network-level extension
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.

3. Scale and interpretation

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:

Fragmented
0 – 0.15
Stressed
0.15 – 0.35
Transitional
0.35 – 0.55
Functional
0.55 – 0.75
High cohesion
0.75 – 1.0
RangeLabelInterpretationRepresentative 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
Important — scale compatibility
These ranges apply to the v2.3 formula only. Bond Strength values from 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.

4. Worked example

Two reference cases, computed using cams_framework_v2_3.py.

Case A — Germany, 1945 (collapse)

NodeLayerCKASViVi+8BS
LoreMythic2238−2.55.50.153
ArchiveMythic33270.08.00.175
HelmInterface1129−7.01.00.071
StewardsInterface2228−5.03.00.118
ShieldMaterial2329−3.05.00.144
CraftMaterial3338−0.57.50.174
HandsMaterial3328−1.07.00.169
FlowMaterial2229−6.02.00.099
Mean Bond Strength0.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.

Why the +8 floor matters
A node at exactly V = −8 produces a shifted value of zero — its bond with every other node is zero regardless of their health. This is the formula's definition of institutional disconnection. Any node below −8 behaves identically: completely severed. The floor is intentional, not a rounding artefact.

Case B — Post-war West Germany, 1960 (functional reference)

NodeVi (approx.)Vi+8BS
Lore17250.78
Archive16240.77
Helm18260.80
Stewards15230.75
Shield19270.82
Craft21290.85
Hands16240.77
Flow18260.80
Mean Bond Strength0.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.

5. System-level coupling index Λ

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) = mean bond strength over all cross-layer edges at time t

Λ(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.

6. Version history and superseded formulations

Why this matters
Bond Strength has been defined differently at different stages of CAMS development. If you are working from downloaded CSVs, check which formula produced them before comparing values to current v2.3 outputs.

v2.3 — Geometric mean with +8 shift Current

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.

v2.0 — Weighted Coherence/Abstraction formula Superseded

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).

Spectral / Fiedler extension Separate module

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.

7. Frequently asked questions

Can Bond Strength exceed 1.0?

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.

What happens when a node value is below −8?

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.

Why the +8 shift specifically?

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.

Is per-node Bond Strength the same as Λ(t)?

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.

Where is this computed in the codebase?

Canonical implementation: compute_node_bond_strength() in cams_framework_v2_3.py. See the Reproducibility Guide for run instructions.

← Back to Model Datasets Validation & Limits Paper 1 (PDF) GitHub Repository