Tier 1 · Capital Solvency Assessment

Counterparty Concentration & Network Risk

M-052 · lifecycle: monitoring · RAT-052-v1.0.1

Intended Use

Counterparty Concentration & Network Risk Quantify counterparty credit exposure and concentration across affiliated and external reinsurance and derivative counterparties.

Network-graph analysis of counterparty exposures. Output feeds RBC counterparty concentration charges and ORSA risk assessment.


Components

Inputs, processing, outputs

data sources
DS-021 · DS-008
assumptions
A-100, A-101, A-090
engines
insmodel.L3.counterparty_network
contracts
counterparty_exposure_v1
dimensions
D3

Methodology & Mechanics

Methodology

M-052 models reinsurance counterparty credit and contagion risk across the 15-firm life-insurance peer set. The engine (CounterpartyNetwork, insmodel.L3.counterparty_network) is a directed weighted graph, not an actuarial projection: nodes are firms and external reinsurers, and edges are ceded reinsurance recoverables (the cedant's credit exposure to the reinsurer). The model answers three questions — how concentrated is the network, what does a single counterparty downgrade cost the system, and does that loss cascade when an impaired counterparty is itself a reinsurer to others.

Graph construction (build_from_filing_data). Firm nodes are created from FIRM_PROFILES (the calibration profiles carrying disclosed-figure total_assets_B and reinsurance_recoverables_M per firm). Edges come from the hard-coded KNOWN_RELATIONSHIPS table — ~35 cedant→reinsurer pairs with a dollar exposure_M and a structure string (coinsurance, modco, funds_withheld, indemnity, etc.) transcribed from FilingAnalysis D2 counterparty maps (e.g. CRBG→Fortitude Re $24.1B modco/funds-withheld; JXN→Athene(APO) $15.5B; PFG→Talcott Resolution $18.3B). Two non-credit edge types — asset_management (e.g. CRBG→Blackstone $71.2B) and parent (GA→KKR) — are excluded from the credit graph because they are not recoverables exposures. An edge is flagged collateralized when its structure string contains funds_withheld or modco, the rationale being that modco/funds-withheld structures retain assets on the cedant's balance sheet and so materially reduce loss-given-default.

Residual "Other Reinsurers" plug. After mapping named relationships, the engine compares each firm's total disclosed reinsurance_recoverables_M against the sum of its named edges. Any residual above $100M is booked as a single synthetic edge to an Other Reinsurers node (credit quality 0.90, collateralized). This closes the disclosed total but collapses the entire unnamed long tail of each firm's reinsurance program into one node — a material modelling choice (see Limitations 1 and is visible in the snapshot: Other Reinsurers is both the largest single edge ($45.3B, GA) and the largest aggregate counterparty ($114.0B).

Concentration metrics (get_concentration_metrics). Exposure is aggregated per counterparty across all cedants. The engine reports: the largest single edge; a system-wide HHI computed as the sum of squared percentage shares of each counterparty's aggregate exposure (0–10,000 scale); a per-firm HHI and per-firm single-name concentration (max counterparty share); and the top-3 counterparties by aggregate. HHI is the standard Herfindahl-Hirschman concentration measure applied to counterparty shares rather than market shares.

Single-counterparty stress (stress_counterparty). A named counterparty is downgraded by rating_downgrade notches (clamped to 1–6). The notch count maps to a base_haircut via the fixed DOWNGRADE_HAIRCUTS schedule (1→5%, 2→10%, 3→20%, 4→35%, 5→50%, 6→75%) — a convex severity curve. The effective haircut applied to each exposure is base_haircut × collateral_factor × quality_factor, clamped so the effective haircut never exceeds 1.0 (min(1.0, …)). The collateral_factor is 0.5 for collateralized (modco / funds-withheld) edges and 1.0 otherwise. The quality_factor is 1 + QUALITY_SENSITIVITY × (1 − credit_quality) with QUALITY_SENSITIVITY = 0.50, so a weaker counterparty (lower credit_quality) suffers a larger recoverable loss on the same downgrade — e.g. a counterparty at credit_quality = 0.85 (Fortitude Re) carries quality_factor = 1.075, while a credit_quality = 1.0 counterparty leaves the haircut unchanged (quality_factor = 1.0). Per-firm losses are exposure_M × effective_haircut, summed to total_system_loss_M. The haircut is a proxy for loss-given-default: it represents the writedown a cedant takes on recoverables when the reinsurer's credit deteriorates, not a probability of default.

Contagion cascade (compute_cascade_impact). After the direct stress, the engine looks for second-order losses. For each firm impaired by the direct event, it computes a credit-quality hit loss_M / total_assets_M (capped at 0.5, i.e. ~3 notches). If that impaired firm is itself named as a reinsurer to other firms in the graph, those downstream cedants take a secondary haircut quality_hit × (0.5 if collateralized else 1.0) on their exposure to it. Secondary losses above a $10K floor are recorded in a cascade_chain of (source_firm, target_firm, loss) tuples. The cascade is single-hop — it does not iterate to third-order effects, and it only fires when an impaired firm's ticker coincides with a reinsurer name in the graph (in this peer set, only RGA satisfies that). This is why the Fortitude Re stress produces zero cascade (CRBG/LNC/UNM are not reinsurers to others) and the snapshot deliberately routes its cascade demonstration through Other Reinsurers, whose cedants include RGA.


Key Assumptions

Key Assumptions and Their Justification

ID / param Name Canonical value Derivation Justification
(table) Downgrade→haircut schedule 1→5% · 2→10% · 3→20% · 4→35% · 5→50% · 6→75% management_target Convex LGD-proxy curve: deterioration accelerates non-linearly with notches, consistent with credit-spread widening behaviour. Hard-coded in DOWNGRADE_HAIRCUTS.
(rule) Collateral credit 50% haircut reduction for modco / funds-withheld structural Modco and funds-withheld retain assets on the cedant's balance sheet, halving loss-given-default versus an unsecured coinsurance recoverable.
(data) Edge exposures KNOWN_RELATIONSHIPS (~35 pairs, $M) published_source Transcribed from disclosed 10-K reinsurance footnotes via FilingAnalysis D2 counterparty maps (e.g. CRBG→Fortitude Re $24.1B).
(plug) Residual "Other Reinsurers" firm recoverables − named edges, if > $100M data_calibrated Forces each firm's named edges to reconcile to disclosed total recoverables; the unnamed tail is collapsed to one synthetic node.
(data) Counterparty credit quality COUNTERPARTY_CREDIT 0.75–0.95 published_source S&P / AM Best ratings as of 2024-12-31 mapped to a 0–1 quality scalar (Swiss Re 0.95 ≈ AA-, Somerset Re 0.75 ≈ BBB+). Consumed by the single-counterparty stress (as of commit aa4d2eb, 2026-06-05): it amplifies the effective haircut via quality_factor = 1 + QUALITY_SENSITIVITY × (1 − credit_quality), so a weaker counterparty loses more on the same notch shock (see Limitation 4 for the residual coarseness).
(param) Quality sensitivity QUALITY_SENSITIVITY = 0.50 management_target Slope of the linear haircut amplifier: at the BBB+ floor (credit_quality 0.75) the haircut is scaled by quality_factor = 1.125. A design parameter, not calibrated experience; the effective haircut is clamped to ≤ 1.0. Hard-coded in counterparty_network.py.
(param) Cascade quality-hit cap 0.5 (≈ 3 notches) management_target Bounds the secondary credit degradation so a single firm loss cannot fully default a downstream counterparty in one hop.
(threshold) Cascade loss floor $10K (0.01 $M) operational Suppresses immaterial second-order noise from the cascade chain.

Operational notes. The haircut schedule and the 50% collateral credit are model-design parameters, not calibrated experience: counterparty risk here is the risk that these LGD proxies are mis-set relative to true recovery, not parameter-estimation error on a fitted distribution. The exposure figures are point-in-time disclosed recoverables (FY2024 10-Ks), so the network is a single as-of snapshot with no roll-forward. As of the 2026-06-05 engine change (commit aa4d2eb / PR #75), the per-node credit_quality / COUNTERPARTY_CREDIT scalar is consumed by the single-counterparty stress: it enters the effective haircut as a linear amplifier quality_factor = 1 + QUALITY_SENSITIVITY × (1 − credit_quality) (QUALITY_SENSITIVITY = 0.50), so a BBB+ name and an AA name no longer produce identical losses for the same notch shock. It remains a coarse single-parameter use of the rating — not a PD/LGD term structure (see Limitation 4) — and the cascade path is still driven by notch count, collateral flag, and loss/assets rather than the standing quality scalar.


Output Snapshot

Output Snapshot

REFRESHED 2026-06-06 — re-run via scripts/model_snapshots.py M-052 against the current engine (post commit aa4d2eb / PR #75, where credit_quality entered the loss math via quality_factor). The prior table (captured 2026-06-04) predated that change and was flagged STALE; the stress/cascade figures below are now reproduced directly from the engine and the gold baseline is re-frozen to match. Structural metrics (counts, edges, total exposure, HHI, collateralized %) are unchanged from the 2026-06-04 capture; only the quality_factor-amplified stress and cascade losses moved. No values were hand-edited — every figure is the deterministic engine output (see the diff in M-052-changes.md).

Deterministic run of CounterpartyNetwork on the 15-firm reinsurance graph — reproducible, requires no live firm data beyond the disclosed 10-K figures baked into FIRM_PROFILES and KNOWN_RELATIONSHIPS (python scripts/model_snapshots.py M-052 in InsModel; mechanics asserted by tests/test_counterparty_network.py, 40 tests across construction, exposure matrix, stress, cascade, concentration, and known-relationship validation).

Input: 15-firm graph (3 Tier-1: PRU/MET/APO; 12 Tier-2) · 18 external counterparty nodes · 40 edges · $296.2B total ceded exposure. Stress: Fortitude Re downgraded 2 notches (10% base haircut, 50% collateral credit). Cascade: Other Reinsurers downgraded 4 notches — chosen to exercise the contagion path, which routes through RGA (the one firm in the set that is also a named reinsurer).

output value meaning
firm_count 15 insurer nodes built from FIRM_PROFILES
external_counterparty_count 18 external reinsurer nodes (incl. the synthetic "Other Reinsurers")
total_edges 40 directed credit-exposure edges
total_exposure_M 296,155.00 aggregate ceded recoverables across the network ($296.2B)
collateralized_pct 0.76 76.2% of exposure is modco / funds-withheld (collateral credit applies)
largest_single_exposure_M 45,271.00 largest single edge — GA → "Other Reinsurers" residual plug
top_counterparty_aggregate_M 113,975.00 largest aggregate counterparty — "Other Reinsurers" (the collapsed tail)
fortitude_re_aggregate_M 49,421.00 Fortitude Re aggregate across CRBG/LNC/UNM ($49.4B)
system_hhi 1,996.26 system-wide counterparty HHI (0–10,000); ~2,000 ≈ "highly concentrated"
stress_base_haircut 0.10 2-notch downgrade → 10% base haircut
stress_total_system_loss_M 3,420.76 system loss from a 2-notch Fortitude Re downgrade ($3.42B) — quality_factor-amplified
stress_firms_affected 3 CRBG, LNC, UNM
cascade_direct_loss_M 20,942.91 direct loss from a 4-notch "Other Reinsurers" downgrade ($20.9B)
cascade_secondary_loss_M 20.98 second-order loss propagated through RGA ($21.0M)
cascade_combined_loss_M 20,963.88 direct + cascade ($20.96B)
cascade_chain_links 2 RGA→UNM and RGA→EQH secondary hops

The snapshot makes the model's signature features legible. Concentration is dominated by the synthetic residual node: "Other Reinsurers" is simultaneously the largest single edge ($45.3B from GA) and the largest aggregate counterparty ($114.0B, 38% of system exposure) — an artefact of the plug logic, not a real single name (Limitation 1). The largest real named counterparty is Fortitude Re at $49.4B. The system HHI of ~1,996 sits at the threshold the DOJ would call "highly concentrated" for markets, signalling that reinsurance recoverables in this peer set are not diffuse. The Fortitude Re 2-notch stress costs $3.42B across exactly three cedants, with collateral credit visibly halving the blow on the modco/funds-withheld portion and the quality_factor amplifying it for Fortitude Re's sub-1.0 credit quality (0.85 → ×1.075). The cascade demonstration shows the mechanism works but is small: a $20.9B direct hit propagates only $21.0M of second-order loss (0.1%), because the contagion path requires an impaired firm to also be a named reinsurer and only RGA qualifies (Limitation 3).

Captured 2026-06-06 · deterministic, no live data (scripts/model_snapshots.py M-052).


Limitations

Limitations and Known Gaps

  1. The "Other Reinsurers" residual plug dominates concentration and distorts every aggregate metric. It is the largest single edge ($45.3B) and the largest aggregate counterparty ($114.0B, ~38% of system exposure), yet it is a synthetic node that collapses each firm's entire unnamed reinsurance tail into one bucket. System HHI, top-3, and largest-single all reflect this artefact rather than a real counterparty. Any concentration read must explicitly exclude or footnote it.

  2. Haircuts are an LGD proxy, not a default model. The downgrade→haircut schedule is a hard-coded deterministic curve. There is no probability of default, no transition matrix, no correlation between counterparty downgrades, and no time dimension — the model answers "if this name is downgraded N notches, what is the writedown" but not "how likely is that" or "what if two correlated names move together."

  3. Cascade is single-hop and structurally near-inert in this peer set. The contagion fires only when a firm impaired by the direct event is itself named as a reinsurer to other firms. In the 15-firm graph only RGA satisfies that (the firm ticker coinciding with a reinsurer name); large counterparties like Athene appear as the external node "Athene (APO)" rather than the firm "APO", so a JXN→Athene loss never degrades the APO firm node. The result is that cascades are tiny (snapshot: $20.0M on a $19.9B direct event) and most stresses — including the canonical Fortitude Re case — produce zero cascade. The model under-states true reinsurance contagion.

  4. Credit quality enters only as a coarse single-parameter haircut amplifier. As of the 2026-06-05 engine change (commit aa4d2eb / PR #75), the per-node 0–1 credit_quality scalar is consumed by the single-counterparty stress: it scales the effective haircut by quality_factor = 1 + 0.50 × (1 − credit_quality), so a weaker (lower-quality) counterparty now loses more than a strong one on the same notch shock. But this is a single linear amplifier, not a credit model: there is no PD/LGD term structure, no rating-transition matrix, and no PD-vs-LGD separation — the rating influences only the severity multiplier, not the probability or the recovery curve. The cascade path, moreover, still ignores the standing quality scalar (it is driven by notch count, collateral flag, and loss/assets). Turning credit quality into a true PD/LGD term structure remains unbuilt (the still-open part of INV-013's spirit).

  5. Single point-in-time snapshot, no roll-forward. Exposures are FY2024 disclosed recoverables. There is no temporal evolution, no new-business accretion, and no novation/recapture dynamics. The graph is a still photograph.

  6. Collateral credit is a flat 50% by structure string. Modco/funds-withheld edges get exactly half the haircut regardless of actual collateral adequacy, over-collateralisation, or asset quality of the withheld funds. The collateral flag is a binary substring match ("funds_withheld" in structure or "modco" in structure), so a partially collateralized structure is treated as fully collateralized.

  7. No live firm-data path (BV-032). All figures derive from documented canonical inputs (FIRM_PROFILES disclosed figures + KNOWN_RELATIONSHIPS), not a live firm-data feed, and the firm-data path is divergent under BV-032. The exposure totals have not been independently 10-K-validated end to end; the known-relationship tests assert individual transcribed values (CRBG→Fortitude Re $24.1B, PRU→Wilton Re $7.5B, PFG→Talcott $18.3B) but not the completeness of each firm's full reinsurance program.

Remediation status (RAT-052-v1.0.0, 2026-06-06). Closed in this pass: the Output Snapshot was re-run + the gold baseline re-frozen against the current engine (scripts/model_snapshots.py M-052); the quality-driven loss is asserted by test_stress_collateralized_reduces_haircut; and a Tier-1 validation evidence pack was assembled at insightalm/modelling/validation_evidence/M-052/v1.0.0/README.md (COND-001) plus a change log at M-052-changes.md (COND-002).

Still genuine engine-builds (honest-conditional, not faked): unify external-counterparty identity with firm nodes and remove/exclude the "Other Reinsurers" residual plug from concentration metrics (INV-021); make LGD a true function of credit_quality via a PD/LGD transition-matrix term structure rather than the current single linear amplifier (deeper INV-013); add probability-of-default / correlated-downgrade scenarios (Limitation 2); and a disclosed-firm end-to-end 10-K back-test of program completeness — pending BV-032 firm-data, not fabricated (Limitation 7). These remain carried Limitations until built; they do not block COND-001/COND-002.


Validation Evidence

Validation Packet

evidence status reference
Construction tests present tests/test_counterparty_network.py::TestNetworkConstruction — 15-firm node count, ≥5 externals, >20 edges, built-flag, unbuilt-raises, node attributes.
Exposure-matrix tests present TestExposureMatrix — 15×N shape, DataFrame type, non-negativity, known cell values (CRBG/Fortitude $24.1B, LNC/GA $9.5B).
Stress tests present TestStressCounterparty — haircut mapping, positive losses, total = Σ impacts, severity monotonicity (1<3<6), collateral 50% credit, notch clamp 1–6, unknown-name raises.
Cascade tests present TestCascadeImpact — direct+cascade keys, combined ≥ direct, chain tuple structure, Global Atlantic ≥4 cedants, unbuilt-raises.
Concentration tests present TestConcentrationMetrics — metric keys, HHI bounded 0–10,000 (system + per-firm), largest-single, descending top-3, single-name conc 0–1, Fortitude aggregate > $35B.
Known-relationship tests present TestKnownRelationships — 6 transcribed exposures cross-checked (Fortitude/GA cedant sets, PRU/Wilton $7.5B, CRBG/Fortitude $24.1B, JXN/Athene $15.5B, PFG/Talcott $18.3B).
Deterministic snapshot present (refreshed 2026-06-06) scripts/model_snapshots.py M-052 — the table below; re-run against the current engine (post-quality_factor), gold baseline re-frozen. Structural metrics unchanged; stress/cascade losses moved (see M-052-changes.md for the diff).
Credit-quality-driven loss present Engine consumes credit_quality via quality_factor as of commit aa4d2eb (2026-06-05, PR #75) and the loss math is asserted by tests/test_counterparty_network.py::TestStressCounterparty::test_stress_collateralized_reduces_haircut — it pins the CRBG/Fortitude loss to 24,100 × base_haircut × 0.5 × quality_factor (the quality_factor = 1 + QUALITY_SENSITIVITY × (1 − credit_quality) formula). The refreshed snapshot reproduces the amplified system loss ($3.42B vs the pre-change $3.18B). Remaining depth (a true PD/LGD term structure) stays a carried Limitation (4), not a closed item.
Default-probability / correlation model absent No PD, transition matrix, or correlated-downgrade scenarios (Limitation 2).
Multi-hop contagion absent Cascade is single-hop; iterated contagion not implemented (Limitation 3).
End-to-end 10-K validation absent BV-032; individual exposures asserted, program completeness not validated (Limitation 7).
Validation evidence pack present insightalm/modelling/validation_evidence/M-052/v1.0.0/README.md — maps each MRM §10.5 item 5 sub-requirement to the 40 InsModel tests, the disclosed-relationship reconciliations, and the refreshed snapshot (closes RAT-052 COND-001).
Change log present insightalm/modelling/model_cards/M-052-changes.md (closes RAT-052 COND-002).
Independent challenge (2L) per registry RAT-052-v1.0.0 (conditionally_approved); re-review pending after this remediation. See ratification registry.

References

References

Engine source: - ecosystem/InsModel/Models/firmmodel/engines/counterparty_network.pyCounterpartyNetwork (insmodel.L3.counterparty_network), with CounterpartyNode, ReinsuranceEdge, the DOWNGRADE_HAIRCUTS schedule, the KNOWN_RELATIONSHIPS table, and COUNTERPARTY_CREDIT ratings. - firmmodel/config/firm_calibration_profiles.pyFIRM_PROFILES, TIER_1_FIRMS, TIER_2_FIRMS (disclosed total_assets_B / reinsurance_recoverables_M per firm). - firmmodel/governance/legacy_metadata/CounterpartyNetwork.yaml — component legacy metadata.

Tests: tests/test_counterparty_network.py — 40 tests across six classes (construction, exposure matrix, stress, cascade, concentration, known relationships); 40 passing. Snapshot: scripts/model_snapshots.py M-052.

Standards / supervisory frameworks: - NAIC Credit for Reinsurance Model Law (#785) / Regulation (#786) and Schedule S — the disclosure and collateral framework underlying ceded recoverables and collateralised (funds-withheld / modco) treatment. - NAIC RBC R3 reinsurance-credit-risk charge — the regulatory analogue to counterparty haircuts on recoverables (cross-reference to M-050 capital model). - IAIS Insurance Core Principle (ICP) 13 — Reinsurance and Other Forms of Risk Transfer (counterparty and concentration risk management). - Basel Committee counterparty-credit and large-exposure framework — source of the HHI concentration discipline and the single-name / aggregate-exposure concentration concepts applied here to reinsurance. - ASOP No. 56 — Modeling (cross-cutting: intended use, sensitivity, reliance, documentation).

Internal: - M-001 — engine-card depth exemplar. - M-050 — RBC / C-3 capital model (R3 reinsurance-credit charge cross-reference). - BV-032 — firm-data divergence (live-data path not used; deterministic inputs only).


Change Log

Change Log

Card change history. Code-side change history lives in git log of the component files.

  • 2026-05-08 — stub created from registry data per Decision 023 Phase 5 / B-07.
  • 2026-06-04 — Tier-1 hand-authoring of the Methodology, Key Assumptions and Their Justification, Output Snapshot, Limitations and Known Gaps, Validation Packet, and References sections from counterparty_network.py + CounterpartyNetwork.yaml legacy_metadata + FIRM_PROFILES / KNOWN_RELATIONSHIPS. Stub marker advanced to ``.
  • 2026-06-05 — engine change: commit aa4d2eb / PR #75 added QUALITY_SENSITIVITY = 0.50 and a quality_factor that consumes per-node credit_quality in the single-counterparty stress loss math (previously the rating was carried but inert). The card narrative and Output Snapshot were authored against the pre-change engine and are pending re-stamp / re-run.
  • 2026-06-06 (remediation of RAT-052-v1.0.0) — 1L remediation pass (Decision 053 charter §2.2). Re-ran scripts/model_snapshots.py M-052 against the current engine and re-froze the Output Snapshot gold: quality_factor moved stress_total_system_loss_M 3,182.10 → 3,420.76, cascade_direct_loss_M 19,945.62 → 20,942.91, cascade_secondary_loss_M 19.98 → 20.98, cascade_combined_loss_M 19,965.60 → 20,963.88; structural metrics unchanged. Removed the STALE banner. Moved the credit-quality-driven-loss Validation-Packet row to present (asserted by test_stress_collateralized_reduces_haircut). Assembled the Tier-1 validation evidence pack (validation_evidence/M-052/v1.0.0/README.md, closes COND-001) and the per-version change log (M-052-changes.md, closes COND-002). Reconciled registry documentation_pack flags to disk. No values were fabricated — every refreshed figure is deterministic engine output (§4 no-fabrication rule); the PD/LGD term structure, residual-plug removal, correlated-downgrade scenarios, and disclosed-firm back-test (BV-032) remain honest carried Limitations.
  • 2026-06-06 — code-grounded documentation-accuracy pass against counterparty_network.py (lines 32–38, 354–366). Corrected the Methodology stress paragraph + operational note to the actual effective-haircut formula (base_haircut × collateral_factor × quality_factor, clamped ≤ 1.0) and removed the false "credit_quality is not an input to any loss number" claim; updated the Key Assumptions credit-quality row and added a QUALITY_SENSITIVITY row; rewrote Limitation 4 from "carried but inert" to "coarse single-parameter amplifier, not a PD/LGD term structure"; moved the Validation-Packet credit-quality-driven-loss row out of the absent block to "present-in-code, pending" with an honest sign-off requirement; added a STALE banner to the Output Snapshot (numbers retained, not edited — re-run is gated); added discrete Standards Coverage and Dependencies sections for 13-section structural alignment with M-001; noted gated/ratification items under Limitations. No model outputs, snapshot figures, back-test numbers, or validation results were fabricated or changed.

2L Inventory Review

Open findings (2)

Independent 2nd-line review (INV-2026-06) — implemented capability vs registered scope. Each carries a recommended fix and is tracked in insightalm-mrm until closed.

HIGH INV-029 · P5 · validation-gap

Validation evidence + change logs missing across most of the inventory

Only M-001/M-020/M-050 carried full documentation packs before this pass. Most models record validation_evidence: missing and change_log: missing with peer_review: pending. Gold tests freeze behaviour but many assert only structural invariants (e.g. reserve>0), not correctness against external truth. The flagship T0-vs-10-K match is circular (BV-032).

Recommendation: For each Tier-1 model: produce a validation-evidence pack (back-test vs disclosed results once BV-032 re-calibration lands, sensitivity suite, challenger comparison), a change log, and a 2L ratification. Sequence behind BV-032 (firm-data) for anything needing 10-K reconciliation.

MEDIUM INV-021 · P3 · proxy

Counterparty contagion is single-hop and near-inert; 'Other Reinsurers' plug dominates concentration

The cascade fires only when a firm impaired by the direct event is itself a named reinsurer; external nodes like 'Athene (APO)' don't map to firm node 'APO', so contagion rarely propagates (canonical Fortitude stress -> zero cascade). Haircuts are a deterministic LGD proxy (no PD, no transition matrix, no correlated downgrades, no time dimension); collateral credit is a flat 50% via substring match. The 'Other Reinsurers' residual plug is the largest single edge AND largest aggregate counterparty (~38% of system), so HHI/concentration are driven by an artefact, not a real name.

Recommendation: Unify external-counterparty identity with firm nodes so cessions to a modeled firm degrade that firm; add a correlated default model (PD + transition matrix + correlation); replace the residual plug with named exposures where disclosed, or exclude it from concentration metrics.


Validation Coverage

Per-tier expectations

Per MRM Framework §10.2 + §10.3, this model's regulatory_frameworks tag list activates the following overlays:

asop_56 naic_orsa internal
component tier-1 expectation status
Registry entry required present
Model card (§10.5 doc pack) required present
Validation evidence required present
Change log required present
Independent effective challenge (2L) required attested

Ratification

Ratified — RAT-052-v1.0.1

Latest ratification on file: RAT-052-v1.0.1. Authored by 2L (mrm-peer-reviewer) per Decision 028 charter §5 Pattern A.