Technical notes

How the reconstruction of RP’s GCR fund model was built: the chain, the files, what we inferred and assumed, how close it gets

Unofficial reconstruction from RP's public documentation, not RP's model. Draft for review: exploratory and premature. It was largely generated by AI and hasn't been verified by us or reviewed by Rethink Priorities. Don't cite these numbers as RP's, or use them for giving decisions.
Help improve this draftComment with Hypothes.is; flag @daaronr for a response.

Select any text, chart or number and annotate it with Hypothes.is (the tab at the top right) to flag errors, missing sources, or a clearer way to show something. David plans to respond, especially where a comment mentions @daaronr. Public Hypothes.is annotations can be read by anyone who opens this page, so don't post anything confidential.

How this was made: an AI agent (Claude, working for The Unjournal) rebuilt Rethink Priorities' GCR fund model from RP's public write-up, update log and Donor Compass data, and built these pages. David Reinstein set the task. Neither he nor RP has checked the numbers yet, and RP hasn't seen this page.

How to use Hypothes.is Read comments on this page

These are the working notes behind the reconstruction, written before the interactive pages. They are dense on purpose. For a gentler route, start with the model, then how close it is and what drives the result.

File names refer to the folder rp_gcr/ in the repository. The tables of numbers are from runs of 10 million draws (replication) and 500,000 to 1 million draws (sensitivity), so they are steadier than what the interactive page shows at its default of 100,000.

RP’s GCR fund model: a first-pass rebuild

Unofficial reconstruction from public documentation, not RP’s model. It is built from Rethink Priorities’ working-draft write-up of the Cross-Cause Fund frameworks (section “Global Catastrophic Risk Funds”), their update log, and their Donor Compass data. Where RP’s text is silent, we made choices; every one is listed below. The code is in the folder rp_gcr/ of the repository; the interactive pages under “RP 2026 GCR model” on the site (a private draft, not yet on the public site) run the same engine in the browser.

Written for David, 21 October 2026. Purpose: have something concrete to show RP before asking for their code or parameter files.

Bottom line

  • The structure in RP’s write-up is enough to rebuild the model to within about 5% in every window up to 500 years, for all three funds, and to within about 20% on the 500+ window (which RP’s own runs move around by more than that).
  • Several things RP doesn’t state can be pinned down from their published numbers. The cause shares are almost certainly a Dirichlet(9, 0.3, 0.3, 0.4); the fund outcome probabilities (no effect / raises risk / lowers risk) behave like a Dirichlet with concentration 5; the long-run risk and the settlement speed are log-uniform rather than lognormal; the three funds share random draws.
  • Two things we could only fit, not read off: the exact shape of the “time of perils” hazard curve, and the life-years lost per death in non-existential catastrophes (about 26).
  • The 500+ window is about 10^20 life-years per $1M because the expected value of the future is about 6 x 10^26 life-years, nearly all of it from the roughly 6% of draws where humanity settles the stars and long-run risk is very low. Per $1M, a fund shifts survival by about 10^-7.
  • The walkthrough’s “10^32” can’t come from the current parameters. We get the right order of magnitude for the value of the future (not per $1M) only by switching long-run risk to a lognormal, which makes the mean unstable. Best guess: the walkthrough’s figure is from an older model version, or describes the value of the future rather than a per-$1M effect. Worth asking.

What the model is (the chain, in words)

For each of 10 million simulated worlds:

  1. Risk trajectory. Draw the chance of an existential catastrophe in the next 100 years (mean 20%), the year risk peaks (mean 17), how long the “time of perils” lasts after the peak (mean 90 years) and the long-run annual risk afterwards (mean 8e-6, i.e. an average lifespan of about 120,000 years). Build an annual hazard curve with those features, scaled so that the 100-year cumulative risk matches the draw.
  2. Who causes the risk. Split the hazard among AI (mean 90%), bio (3%), nuclear (3%) and other (4%).
  3. Value trajectory. Civilization’s value starts at about 8.1 billion life-years a year and grows logistically to 1.6x that (Earth’s carrying capacity). With probability about 6%, humanity also starts settling the stars (mean year 250) at a fraction of light speed; each settled star is then worth one Earth at carrying capacity, and the number of settled stars grows with the cube of time (Milky Way density first, then the much sparser Virgo Supercluster; Tarsney 2020).
  4. Value of the future = value each year x the probability civilization is still around that year, summed over time and split into windows 0-5, 5-10, 10-20, 20-100, 100-500, 500+ years.
  5. The fund. Per $1M, a fund either does nothing, raises risk, or lowers risk. If it acts, it cuts (or raises) its own cause’s share of the hazard by a small relative amount (0.02% for bio and nuclear, 0.004% for AI, per $1M), starting a few years from now and lasting about 11 years, scaled by the share of the impact that is counterfactual.
  6. Existential effect = the change in expected value of the future from that small shift in survival, by window. Because survival compounds, a cut in hazard in years 4-15 raises the chance of being alive in every later year, so most of the effect lands in the 500+ window.
  7. Non-existential effect. Separately, for the next 100 years: the same relative cut applied to the yearly chance of catastrophes killing 10M-100M, 100M-1B or 1B-8B people, times the life-years such a catastrophe destroys.
  8. Output: expected life-years per $1M, existential plus non-existential, by window. These are the numbers in RP’s Donor Compass data, which the Cross-Cause Fund’s worldviews then discount and weigh.

What we built

File What
model.mjs The engine. Continuous time; window integrals by Gauss-Legendre with splits at kinks; closed-form tails for the long run (logistic series for Earth, incomplete-gamma form of Tarsney’s cubic growth for stars). Seeded, reproducible, about 10 s per million draws.
params.mjs Distribution choices (below).
dists.mjs PRNG (xoshiro128**), inverse-CDF sampling for every input, distribution fitting.
rp_stated.mjs, rp_data.mjs RP’s stated inputs and published results; RP’s per-window values read from dashboard/rp-donor-compass.json.
model.test.mjs node --test rp_gcr/model.test.mjs: invariants and replication targets.
scripts/replicate.mjs Replication check, writes results/replication.md and .json.
scripts/sensitivity.mjs One-at-a-time, rank-based and structural-variant sensitivity, writes results/sensitivity.md.
scripts/calibrate_shape.mjs, fit_explore.mjs, explore_tail.mjs, walkthrough_1e32.mjs How the undocumented choices were made.

Every random input is drawn from one uniform by inverse CDF, so a draw is a fixed vector of uniforms. That gives common random numbers across funds and across sensitivity runs. For the mean of the 500+ window we also report a lower-variance estimate (“RB”) that averages analytically over the settle-the-stars coin flip instead of sampling it; it has the same expectation.

Assumptions and inferences

“Inferred” means RP’s published numbers point to it; “assumed” means we chose it and it could be wrong.

Item RP’s text What we did Status
Distribution families Mean and 90% interval only Bounded (0,1) inputs: beta fitted to mean, 5th, 95th. Positive inputs: lognormal through the 5th and 95th. Means then match RP’s stated means to within about 2-3% (growth rate is the exception: 1.17% vs 1%; no two-parameter family gives a 1% mean with a 0.6%-2% interval). Assumed, checks well
Cause shares 90% (72-99), 3% (0.0003-14), 3%, 4% (0.004-16) Dirichlet(9, 0.3, 0.3, 0.4). Its marginals reproduce all eight stated percentiles to two significant figures. Inferred, strong
Outcome probabilities P(zero) 50% (17-84), P(raise) 5% (0.0001-24) bio/nuclear, 15% (0.4-45) AI Dirichlet(2.5, 0.25, 2.25) and (2.5, 0.75, 1.75) over (zero, raise, lower). The best beta fits to RP’s numbers are exactly these marginals. Independent draws (clipped when they sum past 1) put the AI fund about 10% too high relative to bio; the Dirichlet matches RP’s AI/bio ratio and RP’s non-existential percentiles (1st: -57,185 vs RP -57,000; 5th: -509 vs -600). Inferred, strong
Long-run annual risk Mean 8e-6 (images in the doc), 1e-8 to 5e-5, “about 120,000 years (20,000 to 100M)” Log-uniform through the 5th and 95th (range 6.2e-9 to 8.1e-5; mean 8.5e-6). A lognormal has mean 2e-5, i.e. a 50,000-year lifespan, and blows up the value of the future. Inferred
Settlement speed 0.002c (0.00004c to 0.007c) Log-uniform through the 5th and 95th (max 0.0093c). With a lognormal the mean value of the future is about 8e27 and unstable; with the log-uniform it is 6.0e26, matching RP’s table (6e26). Inferred
Start and persistence of effects Means and intervals Lognormal. The non-existential window shares, which depend only on timing, then match RP’s to within 0.002 in every cell; log-uniform does five to ten times worse. Inferred, strong
Shared draws across funds Not stated The three funds use the same uniforms (each mapped through its own distributions). RP’s bio and nuclear non-existential totals agree to five digits (16,375 vs 16,376), which independent draws would not give. Inferred
Hazard shape Peaks in a few decades, stays elevated, “about 90 years from the time risk peaks” Linear rise from 0.8 of the peak excess hazard now to the peak, then a linear fall to the long-run level over the perils length, scaled so the 100-year risk matches the draw. In the central case that is about 0.30% a year now and 0.37% at year 17. The 0.8 is a fit: we searched tent and plateau shapes and current-to-peak ratios from 0 to 1 against RP’s existential values in the 0-5 to 100-500 windows. A plateau, or a tent starting from the long-run level, misses some windows by 15-60%. Assumed, fitted
How a fund’s cut applies “relative reductions in their cause’s peak risk levels during the time of perils” The cut is relative to the cause’s hazard in each year while the effect lasts. A constant cut equal to the same share of the peak hazard fits slightly worse. Assumed, fitted
Harm when a fund raises risk Not stated Same size distribution as the benefit, opposite sign. Matches RP’s negative percentiles. Assumed, checks well
Space value Each settled star worth Earth’s carrying capacity (June 2026 fix); density of the Milky Way and Virgo; year star formation ends Tarsney’s (2020) cubic growth model as written: 2.2e-5 stars per cubic light year within 130,000 ly, 2.9e-9 in the Virgo Supercluster beyond, end at 10^14 years, settlement at constant speed from the start year. RP’s text doesn’t give the formula, so this is Tarsney’s. Assumed (from Tarsney)
Risk after settlement Not stated Unchanged (Tarsney’s constant long-run rate). Assumed
Non-existential timing “For each year in the next 100 years” Constant yearly chance = 10-year chance / 10, for years 0-100. RP’s data have tiny non-zero values in the 100-500 window, which fits year 100 being included and counted in 100-500; we do the same. Assumed, small
Deaths and life-years per tier “expected damage … in years of life lost” Deaths = mean of a log-uniform over each tier’s range (39M, 391M, 3.37B); 25.6 life-years per death, calibrated to Sentinel Bio’s non-existential mean. Not weighted by survival. The ratios between RP’s tiers fit damages about 10x apart per tier, consistent with this. Assumed, one parameter fitted
Discrete vs continuous time Not stated Continuous; effects of the choice are well under 1% outside the 0-5 window. Assumed

How close we get

From results/replication.md (10 million draws; RP data = Donor Compass dataset of 4 June 2026, risk-neutral column). Life-years per $1M, existential plus non-existential. “Seed range” is the spread of ten further 1-million-draw runs.

Window Sentinel Bio: RP / ours LV Nuclear: RP / ours LV Frontier AI: RP / ours
0-5 2,265 / 2,265 (1.00) 1,953 / 1,954 (1.00) 1,368 / 1,423 (1.04)
5-10 6,654 / 6,610 (0.99) 6,217 / 6,175 (0.99) 5,161 / 5,159 (1.00)
10-20 11,381 / 11,131 (0.98) 11,489 / 11,220 (0.98) 16,184 / 15,729 (0.97)
20-100 65,751 / 62,859 (0.96) 66,017 / 62,719 (0.95) 159,038 / 152,565 (0.96)
100-500 380,200 / 358,653 (0.94) 380,501 / 356,333 (0.94) 958,300 / 909,541 (0.95)
500+ (RB) 6.6e19 / 5.4e19 (0.82) 6.1e19 / 5.3e19 (0.88) 1.6e20 / 1.4e20 (0.84)

Monte Carlo error: batch standard errors are 0.1-0.2% for the windows up to 500 years and 2-5% for the 500+ window; the seed ranges for 500+ (RB) are 5.0-5.8e19 (bio), 5.3-5.7e19 (nuclear) and 1.3-1.5e20 (AI) at a million draws. The batch errors understate the true error in the 500+ window, whose mean rests on a few hundred draws. For scale, RP’s own 500+ values moved 3-4x between their May and June 2026 datasets, and they say they can’t separate the effect of their June fix from resampling noise.

Other checks (same file):

  • Non-existential means: 16,427 vs RP 16,375 (bio and nuclear; calibrated), 5,457 vs 5,181 for AI (+5%, not calibrated). Percentiles match closely; e.g. AI 1st/10th/90th/99th: -77,380 / -9,469 / 28,044 / 119,453 vs RP -80,000 / -7,200 / 26,000 / 120,000.
  • All-effects percentiles (write-up table): 90th and 95th match to within 20% (bio 1.0e10 and 7.3e10 vs RP 1e10 and 6e10); the 99th is 7-8e15 vs RP’s 1e16; the 1st is -1.4e10 vs -1e10 (bio) and -1.7e12 vs -2e12 (AI).
  • Value of the future percentiles (0.1st to 99th): 9.1e13, 1.3e14, 2.1e14, 1.8e16, 1.7e18, 1.3e27 vs RP 9e13, 1e14, 2e14, 2e16, 2e18, 2e27. Mean 6.0e26 vs RP 6e26 (RP’s prose says “about 10^26”). The median matches RP’s description (“humanity, at roughly present population levels, existing on Earth for another 1 million years”).

What doesn’t match:

  1. Every window from 10 to 500 years is 2-6% low, getting worse with time; 500+ is 12-18% low. We couldn’t remove this with the hazard-shape choices we tried without making the early windows too high. Likely a detail of RP’s hazard or value curve we don’t have.
  2. The 99.9th percentile of the value of the future: ours 1.7e29, RP 2e28. Our extreme tail has more draws in which the Milky Way is fully settled and long-run risk is very low. None of the variants we tried (speed family, no Virgo, pre-June star value) moves it. Since the mean matches, RP’s tail must be thinner at the 99.9th and similar further out, or the table is from a different run. Worth asking.
  3. The AI fund’s non-existential value is 5% high and its 0-5 window 4% high.
  4. The growth rate: our lognormal has mean 1.17%, RP states 1%.

Sensitivity

Full tables in results/sensitivity.md (one-at-a-time runs of 500,000 draws with common random numbers; a rank-based run of 1 million draws; twelve structural variants of 1 million draws each).

500+ window. Setting one input at its 5th and then its 95th percentile, Sentinel Bio’s 500+ mean moves by these factors (AI and nuclear are similar except where noted):

Input At 5th / 95th percentile
Long-run annual risk (1e-8 / 5e-5) 6.7x / about 0
Cause share (bio 0.0000034 / 0.14; AI 0.72 / 0.99) about 0 / 4.3x (AI: 0.80x / 1.11x)
Settlement speed (0.00004c / 0.007c) about 0 / 3.1x
Probability of settling the stars (1% / 15%) 0.15x / 2.3x
Persistence of the effect (2.5 / 30 years) 0.22x / 2.4x
Risk reduction per $1M 0.24x / 2.4x
100-year catastrophe chance (5% / 40%) 0.29x / 1.8x
P(no effect) (0.17 / 0.83) 1.6x / 0.35x
P(raises risk) 1.15x / 0.33x (AI: 2.0x / -1.1x, i.e. the AI fund’s expected effect turns negative)
Perils length (30 / 200 years) 1.6x / 0.56x
Year of peak (5 / 40) 1.2x / 0.68x
Carrying capacity, counterfactual share within 0.7x-1.25x
Start year of the effect, start year of settlement, growth rate, initial value under 2%

Where the mean comes from: 82% of the 500+ mean comes from draws in the lowest tenth of long-run risk; 53% of Sentinel Bio’s from the top tenth of the bio share; 32% from the top tenth of settlement speed. The top 0.1% of draws carry about 60% of the mean and the top 1% all of it (the rest roughly cancels between positive and negative draws). So the 500+ number is a statement about a thin corner of the input space: very low long-run risk, settlement of the stars, fast expansion, and (for bio and nuclear) a large cause share.

20-100 window. Long-run risk and everything about space drop out. What matters is the cause share (bio 0.05x / 4.4x), persistence (0.22x / 2.7x), risk reduction per $1M (0.25x / 2.5x), the 100-year catastrophe chance (0.31x / 1.85x), P(no effect), P(raises risk) (again flipping the AI fund negative at its 95th percentile), perils length and year of peak.

Rank-based view. Across draws, whether the fund had any effect, and its sign, explains about 90% of where a draw ranks, for both windows. Every other input explains a few percent at most. This is why the percentiles in RP’s tables (zero at the median, 10th percentile zero for bio) say little about the long-run inputs: those inputs drive the mean, not the typical draw.

Rankings. In every structural variant and every seed, the AI fund comes first, by about 2.3-2.6x in both the 20-100 and 500+ windows. Bio and nuclear are effectively tied (they share every input except the effect’s start year); their order flips between variants and seeds, as it does between RP’s own windows (nuclear ahead in 20-100, bio ahead in 500+). The AI fund’s lead rests on two things: the 30-to-1 ratio of AI to bio cause share (at the 95th percentile of the bio share, bio would beat AI), and the AI fund’s chance of raising risk (at its 95th percentile, 45%, the AI fund’s expected value is negative). The structural choices we had to make (hazard shape, how the cut applies, outcome model, Virgo or not, pre- or post-June star value) shift all three funds’ levels together by up to 30% but don’t change the ranking. Changing long-run risk to a lognormal scrambles it (see below).

The walkthrough’s 10^32

The walkthrough says GCR funds “have effects in the 500+ year column on the order of 10^32 human life-years (representing the value of all future generations if extinction is averted)”, with scores around 1.1e31 after a 0.10 discount (so 500+ values of about 1.1e32 for Sentinel and nuclear and 1.1e31 for AI). It says it uses a 31 March 2026 dataset, which is not in the data viewer. All four datasets that are in the viewer (17 April to 4 June) put the 500+ value at 1.3e19 to 1.6e20 per $1M, as does the write-up.

What the rebuild says (results/walkthrough_1e32.md, three seeds of a million draws per case):

  • With the current parameters, 10^32 per $1M is out of reach. The value of the future itself averages 6e26, and a $1M grant shifts survival by around 10^-7, giving 5e19-1.4e20.
  • If long-run annual risk is lognormal instead of log-uniform (same 5th and 95th percentiles), the mean value of the future becomes 5e31 to 4e32 across seeds (realized; the variance-reduced estimate is 1e33 to 2e36, i.e. no stable mean). That is the walkthrough’s order of magnitude, and it matches the walkthrough’s own gloss: “the value of all future generations”. The per-$1M 500+ values then swing between 1e25 and 1e30 across seeds, and the AI fund’s sign flips from seed to seed.
  • So our best guess is one of: (a) the walkthrough quotes the value of the future rather than a per-$1M effect, from a version with a heavier-tailed long-run risk; or (b) the March dataset had a much heavier tail and the walkthrough reports its per-$1M numbers. We can’t tell which. Neither explains why AI is ten times below Sentinel in the walkthrough’s scores when it is 2.5 times above in every later dataset; that looks like a different model version, and is worth asking about directly.

The broader point for the conversation with RP: the 500+ number is extremely sensitive to the lower tail of long-run risk. A choice that looks innocuous (log-uniform vs lognormal through the same two percentiles) moves the mean by five or more orders of magnitude.

Questions for RP

These are the ones that would most reduce our uncertainty, roughly in order:

  1. The hazard trajectory. What functional form do you use for the time of perils (what is the hazard now relative to the peak, and how does it fall after the peak)? We had to fit this; it sets the level of every window.
  2. The fund effect. Is the relative reduction applied to the cause’s hazard in each year of the effect, or to the peak level? Does it apply to the long-run hazard as well as the perils excess?
  3. Distributions. Can you share the sampling code or the list of distribution families? We inferred Dirichlets for the cause shares and outcome probabilities and log-uniforms for long-run risk and settlement speed; are those right? Is the growth rate’s mean 1% or about 1.2%?
  4. Space settlement. The exact formula for the value of a settled-stars future after the June 2026 fix (densities, radii, end date, whether risk changes after settlement), and what the algebraic error was.
  5. Non-existential damages. Life-years lost per death, and how deaths within a tier are set. Are the 10-year probabilities spread evenly over 100 years, or do they follow the time-of-perils shape?
  6. The value-of-the-future table. Is it from the same run as the June 2026 fund numbers? Our 99.9th percentile is 8x yours while the mean and the rest match.
  7. The walkthrough. Where does “on the order of 10^32” come from, and why is the AI fund ten times below Sentinel there (1.1e30 vs 1.1e31) when it is 2.5 times above in all four datasets in the data viewer? What changed between the 31 March dataset and 17 April?
  8. Monte Carlo stability. With 10 million draws, how much do the 500+ means move between seeds in your runs? Our 500+ means move about 10-15% across 1-million-draw seeds even with variance reduction.

How to run

node --test rp_gcr/model.test.mjs
node rp_gcr/scripts/replicate.mjs 1e7 10 1e6     # about 4 minutes
node rp_gcr/scripts/sensitivity.mjs 5e5 1e6 1e6  # about 8 minutes
node rp_gcr/scripts/quick.mjs 1e6 keepDraws=1    # one run, printed

Sources

  • RP, Cross-Cause Fund frameworks working draft (Google Doc, tab “frameworks”), GCR section; text export of 12 October 2026 and fresh text, HTML and DOCX exports of 21 October 2026 (text identical; the HTML export gives the values shown as images: long-run risk 8e-6 / 1e-8 / 5e-5; value of the future mean 6e26 and percentiles 9e13, 1e14, 2e14, 2e16, 2e18, 2e27, 2e28; 10^27, 10^69, 10^55 in the atoms comparison). Saved in .private/sources_2026-10-21/ (git-ignored).
  • RP update log (June 2026 stellar-expansion fixes; 1M to 10M draws).
  • RP Donor Compass data (dashboard/rp-donor-compass.json, retrieved 19 October 2026; re-fetched 21 October 2026, unchanged), walkthrough and methodology pages (saved 21 October 2026).
  • Tarsney (2020), “The epistemic challenge to longtermism”, GPI working paper, section 4 (cubic growth model and parameter values). Saved in .private/sources_2026-10-21/tarsney/.
  • Thorstad (2022) and Muñoz Morán (2023) are cited by RP as influences; we didn’t need anything specific from them beyond the time-of-perils idea.