Skip to content

docs(resilience): PR 4a — SWF classification rubric (tiers + precedents, no manifest changes)#3376

Merged
koala73 merged 2 commits into
mainfrom
fix/resilience-pr4a-swf-rubric
Apr 24, 2026
Merged

docs(resilience): PR 4a — SWF classification rubric (tiers + precedents, no manifest changes)#3376
koala73 merged 2 commits into
mainfrom
fix/resilience-pr4a-swf-rubric

Conversation

@koala73

@koala73 koala73 commented Apr 24, 2026

Copy link
Copy Markdown
Owner

Summary

PR 4a of the cohort-audit plan (docs/plans/2026-04-24-002-fix-resilience-cohort-ranking-structural-audit-plan.md §PR 4). Splits the plan's PR 4 (full-manifest re-rate) into:

  • PR 4a (this): pure documentation — central rubric defining tiers + concrete precedents per axis. No manifest changes.
  • PR 4b (deferred): apply the rubric to revise specific coefficients in scripts/shared/swf-classification-manifest.yaml. Behaviour-changing; belongs in a separate PR with cohort snapshots and methodology review.

The split addresses the plan's anti-pattern note (rank-targeted acceptance criteria): PR 4a makes every current manifest value evaluable against an explicit benchmark; PR 4b applies the benchmark as a separate decision.

Cut from origin/main — not stacked. Pure docs; doesn't depend on any other in-flight PR.

What shipped

docs/methodology/swf-classification-rubric.md — new doc:

  1. Introduction + scope — rubric vs manifest boundary; scope boundary explicit.
  2. Axis 1 — Access — 5 tiers with precedents: Nil (sanctioned SWFs) / Intergenerational (ADIA) / Hybrid (PIF, QIA, Mubadala) / Rule-based stabilization (KIA, GIC via NIRC) / Pure automatic (Chile ESSF). Edge cases: fiscal-rule caps (Norway GPFG), state holding companies (Temasek).
  3. Axis 2 — Liquidity — 6 tiers with precedents: Illiquid-strategic / Private-majority (PIF) / Mid-liquid (Mubadala, Temasek, QIA) / Majority public (ADIA) / Predominantly liquid (KIA, GIC) / Fully liquid (GPFG). Edge case: listed vs directly-owned real estate.
  4. Axis 3 — Transparency — 6 tiers grounded in LM Transparency Index + IFSWF membership + annual-report granularity. Edge cases: LM=10 without holdings-level disclosure (Mubadala/Temasek); sealed filings (KIA).
  5. Current manifest × rubric alignment — 24 coefficients reviewed; 6 flagged as "arguably higher/lower under the rubric" with directional-impact analysis marked INFORMATIONAL, not motivation for revision.
  6. How-to-use playbook — add-fund, revise-fund, and revise-rubric workflows.

Findings (informational — no PR changes)

Six ratings flagged as potentially off-tier under the rubric:

Fund Axis Current Rubric tier Directional impact if revised
Mubadala access 0.4 0.5 (hybrid)
Mubadala transparency 0.6 0.7 (LM=10 + audited) access×transparency +46% combined
PIF access 0.4 0.5 small
PIF liquidity 0.4 0.3 (top-of-tier) small (opposite direction — partially cancels)
KIA transparency 0.4 0.5 (LM=6 + IFSWF) haircut +25%
QIA access 0.4 0.5
QIA transparency 0.4 0.5 (LM=5 + IFSWF full member) combined +56%
GIC access 0.6 0.7 (NIRC framework) haircut +17%

Not flagged (rubric-aligned): GPFG (all 3 axes), ADIA (all 3), Temasek (all 3).

Per the plan's anti-pattern note: the flags are INFORMATIONAL. A future manifest-edit PR (PR 4b) should revise only when the rubric + cited evidence support the change, not to hit a target ranking.

Testing

  • npm run test:data6694 pass / 0 fail (unchanged — pure docs PR from origin/main base)
  • npm run typecheck / typecheck:api — green
  • npm run lint:md — clean

What this PR explicitly does NOT do

  • No manifest edits
  • No cohort-audit snapshot (PR 4b will)
  • No live-data audit of current IFSWF membership / LM index values (requires web fetch + is better suited to PR 4b which will use that evidence)

Post-Deploy Monitoring & Validation

No additional operational monitoring required: pure docs + no behaviour change, no endpoints/crons/flags/Redis writes touched.

Follow-up (PR 4b, deferred)

A separate manifest-edit PR applies the rubric to revise the 6 flagged coefficients, cites the evidence, publishes cohort-sanity audit snapshots before/after, and updates the rationale blocks in the YAML.

Related


🤖 Generated with Claude Opus 4.7 (1M context) via Claude Code + Compound Engineering v2.49.0

Co-Authored-By: Claude Opus 4.7 (1M context) [email protected]

…ts, no manifest changes)

PR 4a of cohort-audit plan 2026-04-24-002. First half of the plan's PR 4
(full-manifest re-rate) split into:

- PR 4a (this): pure documentation — central rubric defining tiers
  + concrete precedents per axis. No manifest changes.
- PR 4b (deferred): apply the rubric to revise specific coefficients
  in `scripts/shared/swf-classification-manifest.yaml`. Behaviour-
  changing; belongs in a separate PR with cohort snapshots and
  methodology review.

This split addresses the plan's concern that PR 4 "may not be outcome-
predetermined" by separating the evaluative framework from its
application. PR 4a makes every current manifest value evaluable against
a benchmark; PR 4b applies the benchmark.

Shipped

- `docs/methodology/swf-classification-rubric.md` — new doc.
  Sections:
    1. Introduction + scope (rubric vs manifest boundary)
    2. Access axis: 5 named tiers (0.1, 0.3, 0.5, 0.7, 0.9) w/
       concrete precedents per tier, plus edge cases for
       fiscal-rule caps (Norway GPFG) and state holding
       companies (Temasek)
    3. Liquidity axis: 6 tiers (0.1, 0.3, 0.5, 0.7, 0.9, 1.0) w/
       precedents + listed-vs-directly-owned real-estate edge case
    4. Transparency axis: 6 tiers grounded in LM Transparency
       Index + IFSWF membership + annual-report granularity, plus
       edge cases for LM=10 w/o holdings-level disclosure and
       sealed filings (KIA)
    5. Current manifest × rubric alignment — 24 coefficients reviewed;
       6 flagged as "arguably higher/lower under the rubric" with
       directional-impact analysis marked INFORMATIONAL, not
       motivation for revision
    6. How-to-use playbook for manifest-edit PRs (add/revise/rubric-
       revise workflows)

Findings (informational only — no PR changes)

Six ratings flagged as potentially under-/over-stated against the
rubric. Per the plan's anti-pattern note (rank-targeted acceptance
criteria), the flags are INFORMATIONAL: a future manifest-edit PR
should revise only when the rubric + cited evidence support the
change, not to hit a target ranking.

Flagged (with directional impact if revised upward):

  - Mubadala access 0.4 → arguably 0.5; transparency 0.6 → 0.7
    (haircut 0.12 → 0.175, +46% access × transparency product)
  - PIF access 0.4 → arguably 0.5; liquidity 0.4 → arguably 0.3
    (net small effect — opposite directions partially cancel)
  - KIA transparency 0.4 → arguably 0.5 (haircut +25%)
  - QIA access 0.4 → arguably 0.5; transparency 0.4 → arguably 0.5
    (haircut +56%)
  - GIC access 0.6 → arguably 0.7 (haircut +17%)

Not flagged: GPFG, ADIA, Temasek (all 9 coefficients align with
their rubric tiers).

Verified

- `npm run test:data` — 6694 pass / 0 fail (unchanged — pure docs PR)
- `npm run typecheck` / `typecheck:api` — green
- `npm run lint:md` — clean

Not in this PR

- Manifest coefficient changes (PR 4b)
- Cohort-sanity snapshot before/after (PR 4b)
- Live-data audit of IFSWF engagement + LM index current values
  (requires web fetch — not in scope for a doc PR)
@vercel

vercel Bot commented Apr 24, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
worldmonitor Ready Ready Preview, Comment Apr 24, 2026 2:05pm

Request Review

@greptile-apps

greptile-apps Bot commented Apr 24, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds a new methodology document (docs/methodology/swf-classification-rubric.md) defining tier definitions and fund-level precedents for the three SWF classification axes (access, liquidity, transparency) that feed the sovereignFiscalBuffer haircut. No manifest or code changes are included.

Two internal self-contradictions need resolution before PR 4b authors can use this rubric reliably: GIC is simultaneously listed as the canonical 0.7-tier access precedent in the tier table and rated only "arguably 0.7" in the alignment section, and Mubadala's transparency target tier is stated as 0.9 in the tier table inline note but 0.7 in the alignment table (the edge-case section resolves this as 0.7-0.8, but the tier-table note is never corrected). A third minor inconsistency: PIF liquidity is labeled "AT BOUNDARY" between 0.3 and 0.5 tiers when ~40% public sits solidly inside the 0.3-tier range (30-50%), contradicting the alignment table's own assessment.

Confidence Score: 4/5

Pure docs PR; no code or manifest changes, but two internal contradictions should be resolved before this rubric is cited as an authoritative reference in PR 4b.

The GIC-as-precedent contradiction and the Mubadala 0.9-vs-0.7 discrepancy are P1 issues because this document is explicitly designed to be the authoritative benchmark for PR 4b manifest edits — internal contradictions will directly cause inconsistent rating decisions in the next PR. Both are straightforward one-line fixes.

docs/methodology/swf-classification-rubric.md — lines 58, 137, and 105 contain contradictions between the tier-definition tables and the alignment table.

Important Files Changed

Filename Overview
docs/methodology/swf-classification-rubric.md New 282-line methodology doc establishing tier rubric for SWF access/liquidity/transparency axes; contains two internal self-contradictions (GIC used as 0.7-tier precedent while rated "arguably 0.7"; Mubadala transparency target tier stated as 0.9 in tier table vs 0.7 in alignment table) and a misleading "AT BOUNDARY" label for PIF liquidity that conflicts with the defined tier ranges and the alignment table's own assessment.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[New Fund / Revised Fund] --> B{Axis 1 — Access}
    B --> B1["0.1 Nil (sanctions/freeze)"]
    B --> B2["0.3 Intergenerational (ADIA)"]
    B --> B3["0.5 Hybrid/constrained (PIF, QIA, Mubadala)"]
    B --> B4["0.6 Boundary: fiscal-rule-capped (GPFG)"]
    B --> B5["0.7 Rule-based stabilization (KIA, GIC⚠)"]
    B --> B6["0.9 Pure automatic (Chile ESSF)"]
    A --> C{Axis 2 — Liquidity}
    C --> C2["0.3 Private-majority (30-50%, PIF⚠)"]
    C --> C3["0.5 Mid-liquid (50-65%, Mubadala, QIA)"]
    C --> C4["0.7 Majority public (65-85%, ADIA)"]
    C --> C5["0.9 Predominantly liquid (85-95%, KIA, GIC)"]
    C --> C6["1.0 Fully liquid (GPFG)"]
    A --> D{Axis 3 — Transparency}
    D --> D2["0.3 Partial disclosure (LM 2-4, PIF)"]
    D --> D3["0.5 Asset-class disclosed (LM 5-6, ADIA, QIA⚠, KIA⚠)"]
    D --> D4["0.7 Audited AUM+returns (LM 7-8, GIC, Mubadala⚠)"]
    D --> D5["0.9 Holdings-level (LM 9-10, Temasek)"]
    D --> D6["1.0 Full holdings daily (GPFG)"]
    B5 -.->|"⚠ GIC rated 0.6 in alignment"| WARN1["Contradiction: precedent vs manifest"]
    D4 -.->|"⚠ note says 0.9; alignment says 0.7"| WARN2["Contradiction: tier note vs alignment"]
    E1["access"] --> F["access × liquidity × transparency"]
    E2["liquidity"] --> F
    E3["transparency"] --> F
    F --> G["effectiveMonths = rawSwfMonths × haircut"]
    G --> H["score = 100 × (1 − exp(−effectiveMonths / 12))"]
Loading

Reviews (2): Last reviewed commit: "docs(resilience): PR 4a — SWF classifica..." | Re-trigger Greptile


### Edge case — LM score vs disclosure depth

The LM index measures 10 governance signals (publication of

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 ADIA liquidity midpoint contradicts stated tier

The rubric intro for Axis 2 says tier assignment uses "a published range midpoint (ADIA 55-70% → 0.7 tier)", but the midpoint of 55–70% is 62.5%, which falls in the Mid-liquid mix (0.5) tier band (50–65%), not the Majority public (0.7) tier band (65–85%). Either the stated methodology should be "upper-bound of the range" (70% does clear 65%) or the ADIA row belongs at the 0.5 tier with a boundary note. As written, the rule and the assignment are internally inconsistent, which will confuse PR 4b reviewers evaluating future boundary calls.

Combined with unchanged liquidity 0.5: haircut multiplier
0.12 → 0.175. UAE gains material SWF-months.
- PIF access 0.4 → 0.5: modest lift. PIF liquidity 0.4 → 0.3:
modest dampening. Net: small.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Flag count header says 6 but the list enumerates 8

The section header reads "(6 of 24 coefficients)" yet the bullet list immediately below it contains eight distinct flags: Mubadala (access + transparency), PIF (access + liquidity), KIA (transparency), QIA (access + transparency), and GIC (access). The PR description intro also says "Six ratings flagged" while the findings table has eight rows. This discrepancy will mislead PR 4b authors who rely on the rubric as the authoritative count of pending revisions.

@mintlify

mintlify Bot commented Apr 24, 2026

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
WorldMonitor 🟢 Ready View Preview Apr 24, 2026, 9:46 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@koala73

koala73 commented Apr 24, 2026

Copy link
Copy Markdown
Owner Author

Converted to draft — out of plan order.

Per the plan's Gantt (docs/plans/2026-04-24-002-fix-resilience-cohort-ranking-structural-audit-plan.md), PR 4 sequences after PR 3A (net-imports denominator). Shipping PR 4a ahead of PR 3A creates the special-pleading optic the plan explicitly warns against: the rubric's directional-impact table pre-announces 6 flagged coefficients that happen to lift UAE (Mubadala +46% haircut, QIA +56%) before the underlying construct fix lands.

Holding as draft until #PR3A merges. The rubric content stands; the ordering is wrong. Will mark ready after PR 3A cohort snapshots ship.

@koala73

koala73 commented Apr 24, 2026

Copy link
Copy Markdown
Owner Author

PR 3A now exists as #3380. Keeping this in draft until #3380 merges, then will mark ready. The rubric content is unchanged; the sequencing constraint is all that's pending.

@koala73
koala73 marked this pull request as ready for review April 24, 2026 13:22
| Nil access | **0.1** | Sanctions, asset freeze, or political paralysis makes deployment effectively impossible within a crisis window | Russia NWF (post-2022 asset freeze), Libya LIA (sanctions + frozen assets), Iran NDFI (sanctions + access concerns). Currently deferred from v1 for this reason. |
| Intergenerational savings | **0.3** | Pure long-horizon wealth-preservation mandate; no explicit stabilization rule; withdrawal requires ruler / head-of-state / parliamentary discretion with no codified trigger | ADIA (Abu Dhabi, intergenerational mandate, ruler-discretionary); Brunei BIA (deferred candidate) |
| Hybrid / constrained | **0.5** | Mandate mixes strategic + savings + partial stabilization; deployment is mechanically possible but constrained by strategic allocation locked to policy objectives (Vision 2030, industrial policy, geopolitical holdings) | PIF (Saudi Arabia, Vision 2030-locked), QIA (Qatar, long-horizon wealth-management with amiri-decree deployment), Mubadala (UAE, strategic + financial hybrid), Ireland ISIF (strategic-development mandate) |
| Explicit stabilization with rule | **0.7** | Legislated or rule-based mechanism for fiscal support during specific shock classes, with historical precedent of actual deployment | KIA General Reserve Fund (legislated finance of budget shortfalls from oil-revenue swings); GIC via Singapore's NIRC framework (explicit formula contributing fund returns to the budget); NO GPFG is BORDERLINE — has a fiscal rule capping withdrawal at ~3% expected real return, which is an access MECHANISM but also an access CONSTRAINT (see below) |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 GIC listed as a 0.7-tier canonical precedent yet rated "arguably 0.7" in alignment

The Axis 1 tier table lists GIC as a concrete precedent for the 0.7 ("Explicit stabilization with rule") tier. But the alignment table (line 191) rates GIC access at 0.6 and hedges: "NIRC framework is explicit fiscal-contribution — arguably 0.7 tier." A fund cannot simultaneously be the rubric's named example of a tier and be ambiguously placed at a lower value — the two statements are mutually contradictory. PR 4b authors who read the tier-definition table will conclude GIC is definitively 0.7; those who read the alignment table first will conclude 0.6 is defensible.

Either remove GIC from the 0.7-tier precedents and keep it as a boundary-case example in the edge-case prose, or strengthen the alignment-table flag from "arguably 0.7" to "clearly misaligned — manifests 0.6, rubric places GIC at 0.7."

…s + flag-count

Addresses P1 + 2 P2 Greptile findings on #3376 (draft).

1. **P1 — GIC tier contradiction.** GIC was listed as a canonical 0.7
   ("Explicit stabilization with rule") precedent AND rated 0.6 in
   the alignment table with an "arguably 0.7" note. That inconsistency
   makes the rubric unusable as-is for PR 4b review. Removed GIC from
   the 0.7 precedent list and explicitly marked it as a 0.7 *candidate*
   (pending PR 4b evaluation), not a 0.7 *precedent*. KIA General
   Reserve Fund stays as the canonical 0.7 example; Norway GPFG
   remains the borderline case for fiscal-rule caps.

2. **P2 — ADIA liquidity midpoint inconsistency.** Methodology text
   said the rubric uses "midpoint" for ranged disclosures and cited
   ADIA 55-70% → 0.7 tier. But midpoint(55-70) = 62.5%, which sits
   in the 0.5 tier band (50-65%). Fixed the methodology to state the
   rubric uses the **upper-bound** of a disclosed range (fund's own
   statement of maximum public-market allocation), which keeps ADIA
   at 0.7 tier (70% upper bound fits 65-85% band). Added forward-
   compatibility note: if future ADIA disclosures tighten the range
   so the upper bound drops below 65%, the rubric directs the rating
   to 0.5.

3. **P2 — Flag-count header.** "(6 of 24 coefficients)" was wrong;
   the enumeration below lists 8 coefficients across 5 funds.
   Corrected to "8 coefficients across 5 funds" with the fund-by-fund
   count inline so the header math is self-verifying.

Verified

- `npm run lint:md` — clean
- `npm run typecheck` — green (pure docs PR, no behaviour change)

This PR remains in draft pending #3380 (PR 3A — net-imports denominator)
merge per the plan's PR 4 → after PR 3A sequencing.
@koala73
koala73 merged commit 1dc807e into main Apr 24, 2026
11 checks passed
@koala73
koala73 deleted the fix/resilience-pr4a-swf-rubric branch April 24, 2026 14:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant