Where is everybody? · Working papers
Red team, round 3: the model and the main page
These are the critics’ reports as filed. The critics were separate runs of Claude given opposing briefs; none is a human specialist. File names refer to the project’s working folder. Where a report cites a brief by subject, such as “the abiogenesis brief”, it means one of the project’s summaries of the published literature. Notes about where working files were stored have been removed; the findings are unedited.
Critic: the studies as
quoted on the page
Overall verdict
Not ready to publish from the fact-checking lens, though it is close.
Every headline study number in sections 04, 05, 06 and 11 matches its
revised study report and data.js, the round-2 fixes held (no "first", no
"any temperature", revised uncertainties, hedged Snyder-Beattie wording,
prior-work credits), and I independently reproduced the new "Moves the
answer by" column with my own paired model runs. But the prose around
the numbers contains statements a specialist would catch as wrong: the
"thousand crossings at one ten-thousandth of light speed" arithmetic is
off by about 250 times (and is echoed in section 01), the red-dwarf
sentence contradicts the revised study and is stronger than the claim
its referee withdrew, the fossil-dolphin sentence is not what the data
show, Kipping (2025) is credited with the opposite of his conclusion,
and the caption calling the inspected dim ellipticals "measurement
failures" is false for at least one plotted object. There is also
selective quoting: only the most favourable Vermeij grouping, "about
100" star-power beacons without its 55 to 18,000 range, and Zackrisson's
limit without his tentative 0.3%. The single most important change is to
fix the three wrong statements of fact (crossing arithmetic, red-dwarf
sentence, dolphin sentence) and then restate each limit with its
conditions and the prior-work numbers exactly as the revised study
reports give them. page_draft.md is also stale against the live page in
section 11 and still contains a sentence that is false ("two points or
less").
Objections
- major / Section 04: "Four billion years is enough to cross
the Galaxy a thousand times at one ten-thousandth of the speed of
light." Also section 01: "crossing it takes a few million years even at
the speed of our slowest probes" and the section 01 figure note "a
Galaxy that has had time to be crossed thousands of times".
- Argument: The arithmetic is wrong by about 250 times. One
ten-thousandth of light speed is 30 km/s; the Galaxy is about 100,000
light-years across, so one crossing takes 1 billion years (the headstart
study itself uses settling time = 1e5 ly / v, i.e. 1 Gyr at 1e-4 c).
Four billion years is four crossings, not a thousand; a thousand
crossings needs about 2.5% of light speed. The section 01 sentence has
the same error: Voyager 1 moves at 17 km/s (5.7e-5 c), which gives about
1.8 billion years for a straight crossing; the flyby study gets 0.2 to
0.5 billion years for 30 km/s ships only by letting stars carry
settlers. "A few million years" is right only for ships at a few percent
of light speed.
- Proposed change: Section 04: "Four billion years is enough
to cross the Galaxy four times at one ten-thousandth of the speed of
light (30 km/s, about twice the speed of Voyager 1), and four hundred
times at 1% of light speed." Section 01: "The Galaxy is more than ten
billion years old, and settling it takes well under a billion years even
with ships no faster than our own probes, if settlers hop between
passing stars." Section 01 figure note: "in a Galaxy that has had time
to be settled many times over".
- Tested: Computed: 1e5 ly / 1e-4 c = 1e9 yr; 4e9/1e9 = 4.
studies/headstart/report.md gives settling time 1 Gyr at 1e-4 c;
studies/flyby/report.md gives 0.2-0.5 Gyr crossing for 30 km/s ships.
Confirmed all three sentences are still in site/index.html at
06:43.
- major / Section 06 rank-chart note: "Writing off red dwarfs
removes the puzzle only if there is a single hard step; long-lived
orange dwarfs keep us early otherwise."
- Argument: This contradicts the revised mdwarf_early study
and is stronger than the first-pass claim ("n >= 4") that the referee
made the analyst withdraw. With red dwarfs excluded outright, our rank
is 12 to 45% with two hard steps, 3.6 to 31% with three and 1.0 to 21%
with four (host cuts 0.6 to 0.8 solar masses). We are in the first 1%
only from five, six or seven steps (cuts 0.60, 0.65, 0.70) and never for
a 0.8 cut; with a 60% habitable window it takes seven, ten, or never.
The "single hard step" result belongs to a different question: how far
the atmosphere evidence would have to discount red-dwarf planets (below
0.053 for one step, 5.3e-5 for two, 5.3e-8 for three). The chart's own
right-hand panel (data.js rank.noM) shows 0.38, 0.12, 0.036, 0.010 for
one to four steps, so the caption contradicts the figure beside it.
- Proposed change: "The atmosphere evidence by itself can
remove the puzzle only if there is a single hard step: red-dwarf planets
would have to be discounted about 20-fold for one step and about
20,000-fold for two. Writing red dwarfs off altogether does more. We are
then among the first 1% only if there are five or more hard steps and
orange dwarfs as small as 0.6 solar masses stay habitable for tens of
billions of years; if only stars above 0.8 solar masses count, we are
never that early."
- Tested: Read studies/mdwarf_early/report.md and
data/rank_noM_cut_window.csv: n=1..4 at 0.6 Msun cut = 0.376, 0.122,
0.036, 0.0103; smallest n with rank <1% = 5/6/7/9/none for cuts
0.60/0.65/0.70/0.75/0.80. data.js rank.noM matches.
- major / Section 06 brains note: "Near-human relative brain
size arose in three or four mammal lineages, and dolphins reached about
three quarters of the human value tens of millions of years before
humans existed."
- Argument: The second half is not supported by the study's
data. The largest fossil cetacean value in the 1,818-row table is 3.46
at 16 million years ago (Kentriodon), which is 0.54 of the human 6.41;
it is 3.56 (0.56) at 4 million years ago. The 0.73 figure is the
best-measured living dolphin (Pacific white-sided, four brains).
"Near-human" means within a factor of two; only dolphins are within a
factor of 1.5, and the other lineages are fellow primates (spider
monkeys, capuchins, macaques, some on single records). The study also
records that no non-human species has a measured cortical neuron count
within a factor of two of ours, which was the referee's strongest
objection to reading brain size as hardware.
- Proposed change: "Relative brain size within a factor of
two of ours arose in three or four mammal lineages: dolphins and two or
three groups of monkeys. Dolphin relatives had reached about half the
human value 16 million years ago, and the best-measured living dolphin
stands at about three quarters. No other species has a measured count of
cortical neurons within a factor of two of ours, so this shows that
large brains recur, not that human-level intelligence does."
- Tested: Loaded
studies/convergence/data/part2_brain_size_through_time.csv: fossil
cetacean maxima 3.456 at 16 Ma and 3.563 at 4 Ma; human 6.41. Report
gives best dolphin 0.73 (>=3 brains) to 0.86 (single record), living
species; lineages within factor 1.5/2/3 = 1/4/10.
- major / Section 06: "Hanson's paper and Kipping (2025, a
preprint) already showed that the argument turns on how long planets
stay habitable." Section 11 table cell: "Depends on planet lifetimes
(Hanson 2021; Kipping 2025, preprint)".
- Argument: This misstates Kipping (2025), arXiv:2510.01215,
"Solar Hegemony: M-Dwarfs Are Unlikely to Host Observers Such as
Ourselves". Its abstract says that lowering the habitable window alone
"cannot well-explain the observations"; it concludes that low-mass stars
must be truncated (critical mass above 0.34 solar masses at 2 sigma) and
disfavours luck with a Bayes factor of about 1,600. That is close to the
opposite of "it turns on how long planets stay habitable". Hanson et al.
(2021) is correctly described (abstract: more than 99% of advanced life
appears after today unless n<3 and maximum planet duration is under
50 Gyr). Kipping also deserves the credit for the point the page makes
next, that a short lifetime still leaves our yellow host star
unusual.
- Proposed change: "Hanson's own paper showed that the
argument needs planets that stay habitable for tens of billions of
years. Kipping (2025, a preprint) argued that a shorter planetary
lifetime is not enough by itself: red dwarfs must also fail to produce
observers, which is the same residual I find below." Table cell:
"Depends on planet lifetimes (Hanson 2021) and on whether red dwarfs
host observers (Kipping 2025, preprint)".
- Tested: Fetched arXiv abstracts 2510.01215 (still
"Submitted to AAS Journals") and 2102.01522 and compared with the page
sentence.
- major / Section 05 figure note: "The objects there that I
inspected are measurement failures: blends, bad fits, galaxies behind
dust. A few dozen outliers across both samples remain
unexplained..."
- Argument: False for at least one object in the plotted
sample. Six of the 114,210 SDSS galaxies lie beyond 0.60 dex (data.js
bins: 1, 1, 3, 1); the vetting file marks five as explained and one, S06
(RA 157.816, Dec +25.861, dI = -0.605), as "isolated face-on S0/Sa,
smooth bulge plus faint outer disc/arm; no artefact seen". Four more
objects with a 75% or larger deficit are unexplained in the southern 6dF
sample (D02 to D05). The study also reports an asymmetric tail (11 dim
versus 1 bright beyond 0.60 dex, p = 0.003). The caption as written
tells the reader the red zone is empty of real candidates, which the
study does not claim.
- Proposed change: "Six of the 114,210 fall there. Five are
measurement failures: blends, bad fits, galaxies behind dust. One, an
isolated face-on galaxy with a faint outer disc, has no identified
fault, and four more like it sit in the smaller southern sample. In all,
23 dim early-type galaxies and 34 dim spirals remain unexplained. None
shows excess infrared heat, and none has been followed up with new
observations."
- Tested: Read
studies/fp_kiii/data/candidates_sdss_vetted.csv (S06 row) and
fp_kiii/report.md (17 SDSS + 6 6dF unexplained below -0.45 dex; five at
>=75% deficit); summed data.js fp.counts for bins <= -0.6.
- moderate / Section 04: "These two studies reproduce
published results with newer data; their value is that the model's
inputs are now measured." Section 11 table: "Under half a point" for the
stars-passing, head-start and dimmed-ellipticals rows.
- Argument: In model version 4 neither study's number is an
input. The head start comes from the model's own birth tables (model4.py
docstring); the encounter rate and the 21,000 count never enter; the
flyby study appears only as a comment justifying a 0.3 Gyr floor on the
fill time. The elliptical limit is not in the model either: the
galaxy-survey curve is labelled "disc galaxies only [STUDY tf_kiii]". So
"Under half a point" in those three rows is true by construction, not a
finding, and the hard-coded head-start and ellipticals cells are not
tied to any leverage run.
- Proposed change: Section 04: "These two studies reproduce
published results with newer data. Neither number is fed into the model,
which draws stellar ages from its own tables; their value is as an
independent check that neither time nor distance is what keeps the
Galaxy empty." Table: head-start row "Not used in the model (a check)";
ellipticals row "Not used in the model; the spiral limit stands in for
both, and removing it moves the answer by under half a point".
- Tested: Read models/model4.py (tau_over_T, mid_curve,
d_beacon, c_leak are the only study-fed parameters; T_fill = max(0.3,
1e-4/v) comment). My paired runs: mid_curve removed -0.000; v_gal forced
>=1e-2 or <=1e-3: 0.000.
- moderate / Section 04: "since oxygen first accumulated in
Earth's atmosphere and made life here detectable from a distance, about
21,000 systems (11,000 to 59,000) have drifted that close. Nobody needs
to cross the Galaxy to reach us. They only need to wait."
- Argument: The study labels the 2.33-billion-year count "the
generous case" because whether mid-Proterozoic oxygen was detectable
from afar is contested (it cites Reinhard et al. 2017); the cautious
eras give 6,000 (3,300 to 13,000) and 4,100 (2,600 to 8,000). "They only
need to wait" overclaims: passing stars move at a mean 48 km/s relative
to the Sun, only 12% are slower than 30 km/s, and one parsec is still a
3.3-light-year crossing with a stop at the end, which was the referee's
strongest objection. The wait-for-a-close-passage idea is Hansen and
Zuckerman (2021, AJ 161, 145), cited in the study but not on the page;
Zuckerman (2026) used 100 light-years and solar-type stars, not one
parsec.
- Proposed change: "Following an argument made by Hansen and
Zuckerman (2021) and Zuckerman (2026), that adds up: since oxygen first
accumulated in Earth's atmosphere, about 21,000 systems (11,000 to
59,000) have drifted that close, or about 5,000 if life here became
detectable only when oxygen rose to modern levels. Nobody needs to cross
the Galaxy to reach us. They need only cross the last parsec, which is
still an interstellar journey, and most passing stars go by at about 50
km/s."
- Tested: flyby/report.md exposure table and data.js
flyby_exposure (20,878; 11,188-58,813; shorter eras 6,000 and 4,100);
web search confirmed arXiv:2102.05703 (Hansen & Zuckerman) argues
for waiting for a close stellar passage.
- moderate / Section 04: "From the measured ages of about
8,500 Sun-like stars, about 70% (64 to 78% across four age scales) of
Sun-like stars at the Sun's distance from the Galaxy's centre formed
before the Sun"
- Argument: The 8,525 stars are subgiants used as age
tracers, not Sun-like stars. The 64 to 78% range is not "across four age
scales" of that sample: the two good samples on four published age
scales span 0.66 to 0.74, and the outer edges (0.636 and 0.779) come
from two bracketing samples. The 8,500-star sample alone gives 0.69 to
0.74.
- Proposed change: "From the measured ages of about 8,500
subgiants (stars just leaving the Sun-like phase, whose ages can be
measured well), checked against a second catalogue of 17,000, about 70%
(64 to 78% across samples and age scales) of Sun-like stars at the Sun's
distance from the Galaxy's centre formed before the Sun"
- Tested: headstart/report.md: LAMOST 8,525 subgiants 0.725
(0.692-0.759); Nataf+24 17,107 stars; core 0.66-0.74; edges 0.636 (Gaia
200 pc rescaled) and 0.779 (Nataf annex).
- moderate / Section 04: "Lineweaver (2001) estimated 74 ± 9%
from the Galaxy's chemical history; the stellar ages agree."
- Argument: Lineweaver's 74 ± 9% is for Earth-like planets in
the Universe, derived from the cosmic star-formation rate and the
build-up of metals, not from the Galaxy's chemical history. And the
study itself says its result "does not test [Lineweaver] more sharply",
so "agree" should be "are consistent with".
- Proposed change: "Lineweaver (2001) estimated that 74 ± 9%
of Earth-like planets in the Universe are older than Earth, from the
history of star formation and metal enrichment; the measured stellar
ages near the Sun are consistent with that."
- Tested: Fetched the arXiv abstract and PDF text of
Lineweaver (2001, Icarus 151, 307): "Among these earths, 74 ± 9% are
older than our Earth" and "three quarters of earths in the Universe are
older than our Earth".
- moderate / Section 05: "fewer than 2.6% of spiral discs (1.9
to 3.5%), against 3 to 4.6% from the earlier sample of spirals." Section
11 cells: "Fewer than 3 to 4.6% of 1,359 (Zackrisson 2015)", "Fewer than
0.29% of 114,000", "Fewer than 2.6% of 9,400".
- Argument: Zackrisson et al. state two numbers: a
conservative limit of about 3% (11 candidates among roughly 400 discs
that would have stayed detectable) and a tentative limit of about 0.3%
after inspection. The 4.6% is this project's Poisson recomputation, not
theirs. Omitting the 0.3% hides that their tentative limit is about nine
times tighter than 2.6%. The study also says the larger sample by itself
gains nothing ("before vetting the outlier limit equals that of
Zackrisson et al. 2015 (4.6%), so the gain comes from vetting, not
sample size"), that the cleanly selected ALFALFA subsample gives 4.5%,
and that the selection efficiency is modelled, not measured. "Of
114,000" and "of 9,400" mislead: the limits rest on effective samples of
about 14,900 and 1,770 galaxies in which the dimming would have been
detectable. The elliptical study's own conclusion quotes "0.3-1.4%"; the
pessimistic 1.4% has been dropped.
- Proposed change: Section 05: "Fewer than 0.29% of
ellipticals (0.24 to 0.45%, or 1.4% under the most pessimistic noise
assumption) can have 75% of their light intercepted, and fewer than 2.6%
of spiral discs (1.9 to 3.5%). Zackrisson and colleagues gave about 3%
as their conservative limit and 0.3% as a tentative one after inspecting
their candidates; my limit improves on the conservative figure because
more outliers could be explained away, not because the sample is
larger." Table: "About 3% conservative, 0.3% tentative, of 1,359
(Zackrisson 2015)"; "Fewer than 0.29%, from 114,000 galaxies of which
15,000 are bright enough to show it"; "Fewer than 2.6%, from 9,400 discs
of which 1,800 could show it, for waste heat below about 250 K".
- Tested: Downloaded Zackrisson et al. 2015 full text
(z15.txt): 1,359 discs, <~3% conservative, <~0.3% tentative.
tf_kiii/report.md: 34/1,766, 2.6% (1.9-3.5%), ALFALFA gold 4.5%. fp
limits_final.csv: N_eff 14,853, n_obs 16, q95 0.00285.
- moderate / Section 05: "A civilisation that enclosed only
dim red stars would remove 20 to 36% of the light and is barely
constrained here."
- Argument: The 20 to 36% in the study is for cloaking every
dwarf and subgiant, that is everything except the giants, and it is the
analyst's approximate reading of Lacki (2019), whose abstract gives no
such fraction. Enclosing only red dwarfs removes far less. The source is
not credited on the page.
- Proposed change: "A civilisation that enclosed every star
except the bright giants would remove only about 20 to 36% of an old
galaxy's light (my approximate reading of Lacki 2019) and is barely
constrained here. One that enclosed only red dwarfs would remove a few
percent and is not constrained at all."
- Tested: fp_kiii/report.md: "cloaking all dwarfs and
subgiants removes ~20-36% of light (Lacki 2019)", limit 7-17% or absent
there. Fetched Lacki 2019 abstract: no fraction stated. The "few
percent" for red dwarfs alone is my own estimate from memory of
old-population luminosity functions; check before using.
- moderate / Section 05 radio paragraph: "For beacons with the
power of all the sunlight striking Earth ... up to about 400,000 in the
Galaxy (170,000 to 2.6 million). For beacons with the full power of a
star they allow about 100. For anything like our own transmitters there
is no limit at all"
- Argument: (a) "About 100" drops the revised range that both
round-2 critics put in their corrected wording: 113 (55 to 18,000), and
2,000 to 9,000 from post-2015 searches alone, because 94% of the
coverage comes from one 1990s survey (BETA) at its nominal threshold.
(b) The 400,000 figure is for 1e17 W narrowband beacons; sunlight
striking Earth is 1.7e17 W, where the chart's own curve reads about
330,000. (c) The limits apply to always-on, all-direction, narrowband
beacons; the page omits "narrowband". (d) The chart curve passes through
about 800 million at the marker labelled "Arecibo radar" while the text
says "no limit at all" for our own transmitters; a reader will see a
contradiction. (e) The chart draws "one per star" at 2.5e11 stars while
the study's Galaxy model has 7.5e10.
- Proposed change: "For always-on narrowband beacons
radiating in all directions with roughly the power of the sunlight
striking Earth, the searches allow up to about 400,000 in the Galaxy
(170,000 to 2.6 million). For beacons with the full power of a star they
allow about 100, but that rests almost entirely on one 1990s survey
taken at face value; modern searches alone allow several thousand (the
full range is 55 to 18,000). For transmitters like our own, which are
beamed and intermittent, there is no limit at all: if every star hosted
an Earth-2025, the searches would expect 0.7 detections." Add to the
chart note: "The curve assumes beacons that shine in all directions all
the time; the Arecibo marker shows its beamed power, which reaches only
a sliver of sky."
- Tested: seti_meta/report.md: 4.35e5 (1.7e5-2.6e6) at 1e17
W; K-II 113 (55-18,000; 2,000-9,000 post-2015; 94% via BETA). data.js
seti.band: 435,400 at 1e17 W, 329,600 at 1.78e17 W, ~7.9e8 at 2e13 W.
charts2.js line 95 NSTAR=2.5e11, line 112 markers.
- moderate / Section 06: "weakens from an odds ratio of 3.2 to
1.4 (0.5 to 5.0) once traits inherited together from three early
ancestors are each counted once. That leaves fewer independent one-off
events than hard-steps models usually assume"
- Argument: Only the most favourable grouping is quoted.
Under the body-plan-only grouping the odds ratio is 2.94 (1.05 to 9.29,
still significant) and under the stem-lineage grouping 1.75 (0.64 to
5.73). "Three early ancestors" should be three clusters of traits (the
last universal ancestor, the first complex cell, the animal body plan).
The final clause is unsupported: collapsing leaves 13 one-off rows out
of 23, and of 13 proposed hard steps the study classes 8 as singular, 2
contested and 3 repeated, which is not fewer than the three to five that
hard-steps models assume. "Odds ratio" is per tenfold increase in age
and is not explained. The information-loss reading is Vermeij's own (his
abstract: the "appearance of singularity results from information loss
through time"), so it should be credited to him.
- Proposed change: "Vermeij (2006) found that one-off
innovations are older than repeated ones and suggested, as he himself
argued, that old one-offs may only look unique because the evidence of
repeats has been lost. In my re-analysis the tendency is real but
fragile: a tenfold older innovation is 3.2 times as likely to be a
one-off, and that falls to between 1.4 and 2.9 (and is no longer clearly
different from 1 in two of three groupings) once traits that came as a
package from the first cell, the first complex cell and the first
animals are each counted once. Of 13 proposed hard steps, 8 still look
like one-offs. The study could not settle how many hard steps there
were."
- Tested: convergence/report.md: OR 3.20 (1.20-9.82);
three-cluster 1.44 (0.51-5.00, p=0.47); body-plan-only 2.94 (1.05-9.29);
stem-lineage 1.75 (0.64-5.73); singular rows 23 to 13; hard steps 8/2/3.
Fetched Vermeij 2006 (PNAS 103:1804) abstract.
- moderate / Section 06: "I re-derived the published
calculations. They hold up, and they are worth less than their
headlines." and "An independent referee reproduced this"
- Argument: "They hold up" is too strong. The Snyder-Beattie
table reproduces only under a reading different from the printed one,
and two of Kipping's 2020 odds (1.545 and 1.490 recomputed against 1.638
and 1.572 published) are recorded in the study as "Still unexplained";
round 2 asked for that to be resolved or disclosed. "An independent
referee" will be read as an outside expert; it was a second AI analysis
inside this project. The four authors have still not been contacted,
which round 2 asked for before the report circulates.
- Proposed change: "I re-derived the published calculations.
The main results reproduce, with two exceptions described below, and
they are worth less than their headlines." Add: "Two of the odds in
Kipping (2020) come out about 6% lower in my recomputation, for reasons
I have not identified." Replace "An independent referee reproduced this"
with "A second, separate analysis run for this project reproduced
this".
- Tested: timing/report.md: Kipping 2020 Jeffreys-prior odds
1.545/1.490 vs published 1.638/1.572, "Still unexplained"; Table 2 rms
0.022 dex (e^-k) vs 0.569 dex (10^-k); authors not contacted. Fetched
Snyder-Beattie et al. 2021 from PMC7997718 and confirmed Table 2 prints
10^-2, 10^-12, 10^-24.
- moderate / Section 06 rank-chart note: "we are not early
under any assumption. If they last as long as their stars, we are
extremely early whenever intelligence needs several hard steps. The
James Webb telescope has so far found no thick atmosphere on any of 14
rocky planets around red dwarfs with a clear verdict"
- Argument: (a) "Under any assumption" is false in the
study's own robustness table: with a 10-billion-year cap the rank is 42
to 71% under the standard star-formation history, but "under the
Behroozi & Peeples upper bound the rank is below 10% even at Lmax =
10 Gyr". (b) "Whenever intelligence needs several hard steps"
understates: with red dwarfs counted and star-limited lifetimes the rank
is 0.3% even with one step. (c) The 14 verdicts are JWST and Spitzer,
not JWST alone (GJ 1252 b rests on Spitzer only; LHS 3844 b on both).
(d) Round 2 asked for "3 of 17 if ambiguous results count", which is
missing.
- Proposed change: "If planets stay habitable for only about
10 billion years, we are not early for any number of hard steps from one
to ten, under the standard history of star formation. If they last as
long as their stars and red dwarfs count, we are among the first 1% even
with a single hard step. JWST and Spitzer have so far found no thick
atmosphere on any of 14 rocky red-dwarf planets with a clear verdict (3
of 17 if ambiguous results are counted), none of them in the habitable
zone."
- Tested: mdwarf_early/report.md and data/rank_robustness.csv
(10 Gyr cap: 0.71/0.56/0.47 for n=1/3/6 under MD14; Behroozi &
Peeples note); rank with p_M=1: 0.30% at n=1. data.js census: 11
bare-rock + 3 thick-atmosphere-ruled-out = 14; census reference for GJ
1252 b is Crossfield et al. 2022 (Spitzer).
- moderate / Section 11 intro (live page): "The studies
replaced assumed inputs with measured ones, corrected several published
numbers, and found a few things that appear to be new." Table: timing
row labelled "new"; one-off inventions row "−9 to +14 points, between no
hard steps and three or four". page_draft.md section 11: "removing any
one of them changes the chance that we are alone by two points or
less".
- Argument: "Corrected several published numbers" overclaims:
there is one apparent slip that the authors have not confirmed, one
limit recomputed by this project, and one re-analysis. The timing row is
tagged "new", but the study says the 6 to 9 to 1 values are "a corollary
of hard-steps order statistics ... Not new as results"; only the
apparent units slip is new. The leverage shown for the hard-steps and
timing rows is the leverage of the open question, not of the study: the
hard-step weights in the model are a judgement ("the convergence study
leaves 0-4 open"), and neither study narrowed its range. The draft file
still carries the old sentence, which is false: dating life from the
molecular-clock ancestor alone moves the answer by 5.4 points.
- Proposed change: Intro: "The studies replaced some assumed
inputs with measured ones, questioned one published table, qualified two
published results, and found a few things that appear to be new." Timing
row label: "new (the apparent slip); a known corollary (the multi-step
odds)". One-off row: "−9 to +14 points, between no hard steps and three
or four; the study could not narrow this range". Regenerate
page_draft.md from the live page, or delete the "two points or less"
sentence.
- Tested: Own paired runs (4 seeds x 60,000, lev.py):
LUCA-only dating -0.055, fossils-only +0.021, no hard steps -0.097,
three or four +0.142; owner's leverage4.json gives -0.054, +0.022,
-0.089, +0.143. timing/report.md novelty note. grep: "two points or
less" present in page_draft.md, absent from index.html.
- minor / Section 04: "in line with 11.7 ± 1.3 from
García-Sánchez and colleagues (2001) and 10.6 ± 4.5 from Fernández-Puig
and colleagues (2026)"
- Argument: The comparison is selective. The best-known
Gaia-based value, 19.7 ± 2.2 from Bailer-Jones et al. (2018), is nearly
twice the study's rate (ratio 0.56 in the study's results table) and is
left out. A specialist will know that number and wonder why it is
missing. The study has the explanation: Fernández-Puig et al. attribute
the 2018 excess mainly to spurious parallaxes.
- Proposed change: "...in line with 11.7 ± 1.3 from
García-Sánchez and colleagues (2001) and 10.6 ± 4.5 from Fernández-Puig
and colleagues (2026), and about half the 19.7 ± 2.2 of Bailer-Jones and
colleagues (2018), which Fernández-Puig and colleagues trace mainly to
faulty distance measurements."
- Tested: flyby/report.md lines 15 and 101. Fernández-Puig
2026 verified at arXiv:2605.16496. The 19.7 ± 2.2 figure is from the
study report and my memory of Bailer-Jones et al. 2018; not
re-fetched.
- minor / Section 06 timeline note: "Life is present within a
few hundred million years of the first oceans. Complex cells take two
billion more, animals another billion. The biosphere has roughly one
billion years left."
- Argument: "Within a few hundred million years" rests on the
molecular-clock date for the last universal ancestor (4.2 billion years,
flagged "model" in events.csv); the oldest accepted fossils (3.48
billion years) come about 900 million years after the first evidence of
water (4.40). From that ancestor to the first complex cell (1.74 billion
years ago) is 2.5 billion years, not two. Estimates of the remaining
lifetime in the same file run from 0.9 to 1.8 billion years.
- Proposed change: "On molecular-clock dates, life is present
within a few hundred million years of the first oceans; the oldest
undisputed fossils come about 900 million years after. Complex cells
take roughly two and a half billion years more, animals another billion.
The biosphere has roughly one to two billion years left."
- Tested: data.js events: zircon water 4.404, oceans 4.25,
LUCA 4.2 (status model), Dresser 3.48 (accepted), LECA 1.735, Metazoa
0.6-0.8, future -0.9 to -1.84.
- minor / Section 06 figure title "The early start of life is
worth a few bits at most" and the chart's y-axis label "Odds for fast
over slow origin of life (best case)".
- Argument: "At most" and "best case" bring back the ceiling
claim the timing study withdrew ("neither a floor nor a ceiling"; "no
general bound"; the range is 3 to 30 depending on the date used). The
caption cites 20 to 26 when the later step is not hard, but the y-axis
stops at 20, so the chart cannot show the figure its caption
quotes.
- Proposed change: Title: "The early start of life is worth a
few bits". Axis label: "Odds for fast over slow origin of life, if every
later step is hard". Raise the y-axis maximum to 30 or drop the 20 to 26
clause from the caption.
- Tested: timing/report.md; charts2.js line 146; data.js bmax
13.0/8.87/6.81/5.58.
- minor / Section 04 flyby figure subtitle: "Every star in the
Gaia catalogue with a measured velocity that passes within 10 parsecs of
the Sun between one million years ago and one million years from
now."
- Argument: The census is restricted to systems now within
100 parsecs with clean radial velocities: 133,876 of 274,150 systems,
carrying about 65% of the encounter flux. The headline rate does not
come from correcting this census; it comes from a separate estimator
that needs no radial velocities. Also, 9 passages within 1 parsec are
plotted against 13 expected, and 0 within half a parsec against 3.3,
which the note should not present as complete.
- Proposed change: "Stars now within 100 parsecs, with a
well-measured velocity in the Gaia catalogue, that pass within 10
parsecs of the Sun between one million years ago and one million years
from now. About half the nearby systems lack such a velocity and are not
shown; the rate in the text comes from a separate count that does not
need one."
- Tested: flyby/report.md (census limits, 9 vs 13.1 and 0 vs
3.3); data.js flyby n=1300, 9 within 1 pc.
- minor / Section 05: "They had about a hundred ellipticals
and 1,359 spirals. I applied the same idea to 114,000 elliptical
galaxies" / "used a test that does not care about temperature". Section
11 cell: "No outliers among 106 ellipticals (Annis 1999)".
- Argument: The 106 is second-hand: Zackrisson et al. write
"a sample of 57 disk galaxies and 106 ellipticals", while Annis's own
abstract says "For a sample of 137 galaxies, no such outliers are found"
(57 + 106 = 163, not 137). The project's sample is early-type galaxies
(ellipticals and lenticulars), not ellipticals only. "Does not care
about temperature" is true for the elliptical test but not for the
spiral test, where the same section gives a 250 K condition. The
mass-offset screen proposed two months earlier by Curtis et al. (2026,
arXiv:2608.12458) is listed in the Sources line of section 12 but not
credited here, which round 2 asked for.
- Proposed change: Text: "...used a test that depends little
on temperature... They had about a hundred ellipticals and 1,359
spirals. I applied the same idea to 114,000 elliptical and lenticular
galaxies and 9,400 gas-rich spirals. Curtis and colleagues (2026, a
preprint) independently proposed a similar screen." Table: "No outliers
among about a hundred ellipticals (Annis 1999)".
- Tested: z15.txt (Zackrisson full text) quote; fetched Annis
1999 JBIS abstract (137 galaxies); fp_kiii/report.md (early types;
"independent of the temperature of the waste heat"); tf_kiii 250 K;
index.html line 296 lists Curtis only under Sources.
- minor / Section 04 callout: "fewer than about one habitable
planet in a billion ... (a few in a billion once the uncertain number of
planets is allowed for)"
- Argument: Numbers match the study (1.05e-9 to 1.21e-9
fiducial; 3.4e-9 to 7.9e-9 marginalised). "Habitable planet" here means
a rocky planet in the habitable zone of a Sun-like star, and the limit
assumes settlers would have filled the Galaxy and that none did. Without
those words the callout reads as a general limit.
- Proposed change: "...fewer than about one in a billion
rocky habitable-zone planets of Sun-like stars can have produced a
civilisation that settled the Galaxy (a few in a billion once the
uncertain number of such planets is allowed for)."
- Tested: headstart/report.md per-planet limits and
assumptions (1.07e10 Sun-like stars x eta_Earth 0.37).
Checked and found correct
- Section 04: 11.1 ± 1.0 per million years within one parsec matches
flyby/report.md (variants 9.9-11.9).
- Section 04: about 21,000 systems (11,000 to 59,000) matches flyby
exposure_table.csv and data.js flyby_exposure (20,878; 11,188-58,813)
for the 2.33 Gyr era.
- Fernández-Puig et al. 2026 exists (arXiv:2605.16496; A&A 710,
A252) and gives 10.6 ± 4.5 per Myr within 1 pc; arXiv spells the name
Fernandez-Puig.
- Zuckerman 2026 exists (arXiv:2603.07333) and draws the Fermi
inference from the absence of probes given stars passing within about
100 light-years over billions of years.
- Hansen & Zuckerman 2021 exists (arXiv:2102.05703): interstellar
migration made easier by waiting for a close stellar passage (web search
result; journal reference AJ 161, 145 taken from a citing paper).
- García-Sánchez et al. 2001 exists (A&A 379, 634-659); a
secondary source (2010 Astronomy Letters paper) quotes its corrected
rate as 11.7 ± 1.3 per Myr within 1 pc.
- Lineweaver 2001 (Icarus 151, 307): PDF text says "74 ± 9% are older
than our Earth" for Earth-like planets in the Universe.
- Section 04: about 70% (64 to 78%) and 4 billion years mean head
start match headstart/report.md (0.70; 0.64-0.78; 4.13 Gyr,
3.4-4.4).
- Section 04 callout: one in a billion fiducial and a few in a billion
marginalised match headstart/report.md (1.05e-9 to 1.21e-9; 3.4e-9 to
7.9e-9).
- data.js flyby: 1,300 plotted passages, 9 within 1 pc, 0 within 0.5
pc, consistent with the study census.
- Zackrisson et al. 2015 (ApJ 810, 23): 1,359 disc galaxies, credits
Annis 1999, conservative limit about 3%, tentative about 0.3% (full text
downloaded).
- Section 05: 114,000 and 9,400 match study sample sizes (114,210 SDSS
early types; 9,379 discs); data.js fp.n = 114,210 and histogram counts
sum to it.
- Section 05: 0.29% (0.24 to 0.45%) at 75% dimming matches fp_kiii
limits_final.csv and data.js (q95 0.00285, N_eff 14,853, n_obs 16).
- Section 05: 2.6% (1.9 to 3.5%) and the 250 K condition match
tf_kiii/report.md (34 unresolved of N_eff 1,766) and data.js tf.
- Section 05 no longer says "first" or "any temperature" for the
galaxy limits; section 12 discloses the withdrawal.
- Wright, Kanodia & Lubar 2018 (AJ 156, 260) makes the
hot-tub-in-the-ocean comparison; Lacki 2024 (ApJ 966, 183) and Lacki
2025 (PASP 137, 114103) exist and give population limits.
- Section 05 radio: 400,000 (170,000 to 2.6 million) matches seti_meta
(4.35e5; 1.7e5-2.6e6) at 1e17 W; star-power value 113; 0.72 expected
detections for Earth-2025 leakage.
- Kipping 2025 (arXiv:2504.05993, accepted in Astrobiology): 13:1 odds
with the 4.2 Ga ancestor date; the study reproduces 13.0.
- Section 06: 13 to 1 falling to 9, 7, 6 with one, two, three later
hard steps matches a1_bmax_table.csv and data.js bmax (13.0, 8.87, 6.81,
5.58); 20 to 26 and 1.5 to 6 match timing/report.md.
- Snyder-Beattie et al. 2021 (Astrobiology 21:265): Table 2 prints
thresholds as 10^-2, 10^-12, 10^-24 and the text says over 90% of
posterior probability below a 1e-12 chance; the page's hedged wording
(apparent slip, authors not contacted, no erratum, qualitative
conclusion stands) follows the round-2 correction.
- Vermeij 2006 (PNAS 103:1804): 23 unique versus 55 repeated
innovations, unique ones older; study values 3.2 and 1.4 (0.5 to 5.0)
are quoted correctly for the three-cluster grouping.
- Hanson et al. 2021 (arXiv:2102.01522): abstract states more than 99%
of advanced life appears after today unless n<3 and maximum planet
duration is under 50 Gyr.
- Kipping 2025 "Solar Hegemony" (arXiv:2510.01215) is still listed as
submitted, so the label "a preprint" is correct.
- Curtis et al. 2026 (arXiv:2608.12458, submitted to ApJ) exists.
- Section 06: 0 of 14 rocky red-dwarf planets with a clear verdict,
none in the habitable zone, matches the census in data.js (11 bare rock
+ 3 thick atmosphere ruled out).
- Section 06: host star unusual by a factor of about eight matches the
study (7.6 to 9.4).
- Section 06: 1,818 fossil and living mammals matches data.js brains
(1,547 living + 271 fossil).
- Section 11 leverage column: my own paired runs (4 seeds x 60,000)
reproduce every bound value to within Monte Carlo noise: optical limits
0.000, radio -0.008, timing -0.055 to +0.021, hard steps -0.097 to
+0.142, planet lifetime and red-dwarf switches under 0.002.
- Section 11: flyby, head-start, galaxy and radio rows quote the same
numbers as sections 04 and 05 and the study reports; uncertainties are
the revised ones.
Not checked
- García-Sánchez et al. 2001, 11.7 ± 1.3: not read in the paper itself
(ADS returned 405, A&A 403); confirmed only through a secondary
source and the study report.
- Annis 1999 primary text: only the JBIS abstract was reachable (137
galaxies, no outliers); the 106 ellipticals / 57 discs split and the 1.5
magnitude threshold come from Zackrisson et al. 2015.
- Lacki 2019, 20 to 36% of light removed: not in the abstract; the
study calls it the analyst's approximate reading. My "few percent" for
red dwarfs alone is from memory.
- Bailer-Jones et al. 2018, 19.7 ± 2.2 per Myr: from the study report
and my memory, not re-fetched.
- The JWST/Spitzer tally of 0 of 14 as of October 2026: hand-curated
in the study; I checked two entries (GJ 1252 b, LHS 3844 b), not all
fourteen, and did not check for results published since.
- Zuckerman 2026 journal reference "ApJ 1001, 167" and Hansen &
Zuckerman "AJ 161, 145": taken from the study report and a citing paper,
not from publisher pages.
- Whether Kipping (2025, Solar Hegemony) has been accepted since its
arXiv listing.
- Whether the four Snyder-Beattie authors have been contacted since
the study report was written; the report says they had not.
- The model's stated sample count on the page: results on disk are
30,000 per run x 8 (n_total 240,000); I did not check the page's bound
text against any larger run.
Tables
A. Change in the chance we are alone (site posterior) when one input
is removed or pushed to its limit. Mine: 4 paired seeds x 60,000
samples, base 0.781 (prior 0.584). Owner: models/leverage4.json.
Input change mine owner
no optical galaxy limits -0.000 -0.0001
no galaxy surveys at all -0.002 -0.0017
no radio searches -0.008 -0.008
life dated from LUCA (tau/T 0.03-0.06) -0.055 -0.0536
life dated from fossils (0.16-0.20) +0.021 +0.0224
settlement speed >= 1% c 0.000 0.0
settlement speed <= 0.1% c 0.000 0.0
no hard steps -0.097 -0.0889
three or four hard steps +0.142 +0.1431
red-dwarf planets dead / alive +0.001 / -0.002 +0.0008 / -0.0019
B. Our rank among observers with red dwarfs excluded
(mdwarf_early/data/rank_noM_cut_window.csv, full window)
host cut (Msun) n=1 n=2 n=3 n=4 smallest n with rank < 1%
0.60 38% 12% 3.6% 1.03% 5
0.65 45% 19% 7.4% 2.8% 6
0.70 53% 28% 13.6% 6.6% 7
0.80 66% 45% 31% 21% none
C. Fossil cetacean relative brain size
(convergence/data/part2_brain_size_through_time.csv); human = 6.41
age max value share of human
16 Ma 3.46 0.54
4 Ma 3.56 0.56
living 0.73 of human (best dolphin with >= 3 brains); 0.86 on a single record
Code errors
- report/site/charts2.js / line 95 (NSTAR) and lines
102-105
- Problem: The radio chart draws the "one per star" line at
NSTAR = 2.5e11, but the seti_meta study's Galaxy model has 7.54e10
stars, so the line sits 3.3 times too high relative to the curve it is
compared with.
- Fix: Set NSTAR to 7.5e10, or label the line "one per star
(250 billion)" and note that the curve is computed for a 75-billion-star
model.
- Impact: Cosmetic on a log axis, but the point where the
curve crosses "one per star" shifts by half a decade in power.
- report/site/charts2.js / line 112
- Problem: The marker "all sunlight hitting Earth" is at
1.7e17 W, where the plotted limit is about 330,000, while the text
beside it quotes 400,000, which is the value at 1e17 W.
- Fix: Either move the text number to the marker ("about
330,000") or say "beacons of 100 million gigawatts, a little less than
the sunlight striking Earth".
- Impact: Text and chart disagree by 25% at the labelled
point.
- report/site/charts2.js / line 146
- Problem: The odds chart's y-axis label says "(best case)"
and the axis tops out at 20, while the caption cites 20 to 26 and the
study withdrew the claim that these odds are a ceiling.
- Fix: Label the axis "if every later step is hard" and
extend the axis to 30, or drop the 20 to 26 clause.
- Impact: Reintroduces a withdrawn claim in a chart
label.
- report/site/index.html / section 11 table, rows for stars
passing, head start, dimmed ellipticals
- Problem: "Under half a point" is hard-coded for flyby and
head start, and the ellipticals row reuses the optical-limits leverage,
although none of the three studies supplies a model input (model4.py
uses only timing, tf_kiii and seti_meta).
- Fix: Replace with "not used in the model" for head start
and ellipticals; keep the flyby cell but bind it to lev_speed.
- Impact: The column implies a test that was not run for
those rows.
- report/page_draft.md / section 11
- Problem: Stale against site/index.html (draft 06:27, page
06:43): it lacks the leverage column and still says "removing any one of
them changes the chance that we are alone by two points or less", which
is false for the timing input (5.4 points).
- Fix: Regenerate the draft from the live page.
- Impact: Anyone reviewing or quoting the draft gets a wrong
sentence.
Advice
Fix the three wrong statements of fact first (crossing arithmetic in
sections 04 and 01, the red-dwarf sentence, the dolphin sentence); each
is checkable by a reader in a minute and would cost the page its
credibility with specialists. Then go through sections 04 to 06 once
more with each study's results table open and add the condition or range
that the study attaches to every quoted limit; the pattern in most of my
moderate objections is a correct number with its qualifier removed.
Before publication, write to the Snyder-Beattie authors and to Kipping
about the two unexplained odds: the page names an apparent error in a
published paper, and round 2 already asked for this. Finally, say
plainly in section 04 and section 11 which studies feed the model
(three) and which are independent checks (the rest); the new leverage
column is honest and I reproduced it, but three of its rows report a
zero that is true by construction.
Critic: the code audit
Overall verdict
The engine is sound; the page is not ready, because several headline
numbers are mislabelled. My independent re-implementation (own chain
solver, own cosmology and birth dates, no cosmo_tables) matches model4
on all seven classes and P(alone) to within 0.004 for site, ssa_all,
ssa_now and ssa_obs. chain4, the timeline likelihood, the gate-delay
weight, the tilted sampler, the SSA denominators, the Shapley
arithmetic, three camps, three future rows and five scan draws all check
out or reproduce exactly. The single most important change is the
headline triple 78 / 16 / 6. The 6% is computed as 1 - alone - stuck,
but the classes the card describes (unnoticed, hiding, on their way) sum
to 11%, and 5.4 points of the 78% are universes where outsiders are
spreading or already here. The clean partition is 73 / 16 / 11. Second,
the page reads identical updates in opposite ways: the barrier (15% to
26%), forced low footprint (5% to 8.4%) and universal hiding (3% to
5.2%) all rise by the same factor of 1.7, yet one is called 'not
reassuring' and another 'simply returns the prior'. Third, 'another
civilisation exists in the Galaxy right now: 8%' excludes the settlers
the page says are here (13 to 15% with them), and the second-origin
forecast of 32% includes the assumed 15% false-positive rate. All
results on disk were still the 30,000-sample trial when I finished
(07:19 UTC); the second-origin row there (ESS 816) is off by 0.02 from
the converged value.
Objections
- major / index.html lines 28-30 and 40 (hero cards and
callout: '78% Nobody else, ever / 16% They arise, and never spread / 6%
Someone did spread ... here in a form we have not noticed, or hiding, or
still on their way'); charts1.js line 17 and line 253, bind.js line 8:
spread = max(1 - alone - stuck, 0)
- Argument: The three cards are not a partition. 'alone' is
N_ever < 1 (model4.py line 455), which is independent of the class
masks. It includes universes classed en_route (0.039), unnoticed
(0.010), hidden (0.004) and excluded (0.002): 5.4 points in which
expanders from other galaxies hold over 1% of the universe or have
already settled the Milky Way. The third card is a residual, not the
probability of what it describes: unnoticed + hidden + en_route +
excluded = 0.044 + 0.022 + 0.040 + 0.005 = 0.111, not 0.056. The stacked
bar directly above the cards shows 39% + 34% = 73% for the two 'nobody'
classes and 11% for the spread classes, so the figure contradicts its
own cards. Line 256 ('If we are alone (78%) ... the Galaxy is
unclaimed') is false for the 1.5 points of 'alone' in which outsiders
have settled it. The prior has the same overlap: prior 'alone' 0.584 =
0.475 (empty + rare) + 0.108 overlap, of which 0.067 is in the excluded
class.
- Proposed change: Make the cards the class partition:
'Nobody else, ever, and nobody on the way: 73% (prior 47%)', 'They arise
and never spread: 16%', 'Someone did spread (here unnoticed, hiding, in
a pocket, or on the way): 11%'. In code: fam = {alone: p.empty_universe
+ p.rare, stuck: p.stuck, spread: p.en_route + p.unnoticed + p.hidden +
p.excluded} in charts1.js lines 17 and 253 and bind.js line 8. Keep
P(N_ever < 1) = 78% as a separately labelled statistic ('no other
civilisation has arisen in the Milky Way itself, wherever any settlers
came from'). Change line 256 to 'If nobody else has arisen here and
nobody has arrived (73%)'.
- Tested: integrate4_results.json (30k x 8): site alone
0.779, empty + rare 0.725, stuck 0.164, other four classes 0.110, 1 -
alone - stuck 0.056. M.run(60k, seed 7, keep=True): alone by class
[0.389, 0.338, 0.039, 0, 0.010, 0.004, 0.002]. Independent
implementation (300k): [0.391, 0.336, 0.038, 0, 0.010, 0.004, 0.002];
alone 0.781, spread classes 0.111, residual 0.057.
- major / index.html line 257 ('The chance that a universal
barrier ... rises from 15% ... to 26% ... The silence is the only
evidence we have about that barrier, and it is not reassuring') against
line 79 ('Right: "here and unnoticed" simply returns the prior you put
in. Nothing observed so far tests it.')
- Argument: The model gives the three universe-level escape
hatches the same update, and the page reads them in opposite ways.
Posterior over prior: barrier 0.255 / 0.15 = 1.70; forced low footprint
0.0835 / 0.05 = 1.67; universal hiding 0.0515 / 0.03 = 1.72. All three
rise only because they survive the deletion of the 'evident settlement'
class (MODEL4_NOTES soft spot 2 says as much). Either all three are
'raised by the silence' or none is 'tested'. The right-hand panel also
does not return the prior: the unnoticed class is 0.039 at dial 0.05,
0.155 at 0.25 and 0.259 at 0.50, half the dial, well under the 'answer =
prior' diagonal drawn on the chart. MODEL4_NOTES line 24 ('about 0.8 x
q_cc') holds only near the base value.
- Proposed change: Line 257: 'The chance that a universal
barrier exists rises from 15% to 26%. This is not a measurement of the
barrier: every hypothesis that escapes the silence gains by the same
factor of about 1.7 (forced low footprint 5% to 8%, universal hiding 3%
to 5%), because the evidence removes evident settlement and nothing
else.' Line 79, right panel: '"Here and unnoticed" tracks the prior you
give it (about four fifths of the dial near 5%, half of it at 50%); the
evidence raises the chance that all expansion is low-footprint by the
same factor of 1.7 as the barrier, and tests neither.' MODEL4_NOTES line
24: replace '0.8 x q_cc' with '0.5 to 0.8 x q_cc; P(low-footprint
regime) itself rises 0.05 to 0.084'.
- Tested: base.schools.site.regime in integrate4_results.json
= {mixed 0.865, low_footprint 0.0835, stealth 0.0515}, p_barrier 0.255.
Independent implementation: P(not mixed | data) 0.135 against prior 0.08
(x1.69), P(barrier | data) 0.254 (x1.70). q_cc lever rows: unnoticed
0.008 / 0.021 / 0.039 / 0.068 / 0.155 / 0.259 at q_cc 0 / 0.02 / 0.05 /
0.1 / 0.25 / 0.5; class prior at 0.5 is 0.204.
- moderate / index.html line 79, middle panel: '"they never
spread" grows with your prior that a universal barrier exists, and the
evidence raises it above that prior'
- Argument: False for the plotted quantity at the upper
settings. Posterior 'stuck' against the dial: 0.063 (0), 0.099 (0.05),
0.173 (0.15), 0.240 (0.30), 0.319 (0.50). At 0.30 and 0.50 the curve is
below the 'answer = prior' diagonal on the same chart. What rises above
the prior at every setting is P(barrier | data): 0.092, 0.259, 0.447,
0.653.
- Proposed change: 'Middle: "they never spread" grows with
your prior that a universal barrier exists. The chance of the barrier
itself ends above your prior at every setting (15% becomes 26%), but a
barrier in an otherwise empty Galaxy counts as "alone", so the "never
spread" answer falls below the dial once the dial passes about
20%.'
- Tested: levers.q_barrier in integrate4_results.json (values
above).
- moderate / index.html line 233: 'The chance that another
civilisation exists in the Galaxy right now is 8%' (bind.js now_site =
p_other_now_in_galaxy; model4.py lines 375 and 478)
- Argument: N_now = N_ever x L_quiet / 1e10 counts only quiet
home-grown civilisations. It does not count expander lineages. In the
unnoticed and hidden classes (6.6%) the page itself says 'they are
here', yet most of that mass has N_now far below 1. The same
understatement feeds the third row of the forecast figure ('a
whole-Galaxy search finds something').
- Proposed change: Either report 'about 14%' (quiet
civilisations or settlers present), or keep 8% and say 'another
home-grown, non-expanding civilisation exists in the Galaxy right now:
8%; adding the cases in which settlers are present makes it about 14%'.
In model4.py add p_other_now_incl_settlers = sum(wn * (1 - (1 - p_now) *
exp(-mu))).
- Tested: M.run(60k, seed 7, keep): coded 0.079; settled
classes 0.071; quiet-or-settled-class 0.128. Independent implementation
(600k): 0.087, 0.072, 0.136; soft version E[1 - (1 - p_now) exp(-mu)] =
0.149.
- moderate / index.html line 107: 'the model expects a second
origin of life in the Solar System with probability 32% ... Weighting
crowded universes more, it expects one with probability 95%' (bind.js
sg_p = future[...].site.predictive; model4.py line 386)
- Argument: The predictive is P(a detection is announced) =
sg_fp + (1 - sg_fp)(1 - exp(-0.3 lambda)) with sg_fp = 0.15. Fifteen of
the 32 points are the assumed false-positive rate. The model's
probability that a second origin is actually there to be found is 0.19.
The trial value is also noisy: the stored row has ESS 816. The HWO row
has the same issue: forecast 0.15, of which 0.10 is hwo_fp, so the
real-biosignature probability is 0.05.
- Proposed change: 'Treating Earth as a given, the model
gives a 19% chance that a second origin is there to be found (31% that
one would be announced, allowing a 15% false-alarm rate). Weighting
crowded universes more, 94% (95% announced).' In the forecast figure
plot (predictive - fp) / (1 - fp), or relabel the axis 'chance a
detection is announced'.
- Tested: Independent implementation (300k): predictive
0.309, true part E[1 - exp(-0.3 lambda)] = 0.187. Six pooled M.run seeds
x 60k with extra_obs='second_genesis': predictive 0.309 (per seed 0.305
to 0.316), alone 0.581, stuck 0.308. Stored trial row: 0.324, 0.557,
0.329.
- moderate / index.html line 260: 'If lasting settlement
beyond the Solar System is ever shown to be feasible for us, "never
spread" all but disappears and "alone" rises to 88%'; forecast column
'59%' for that row (model4.py line 400: f_ex = p_exp > 1e-3)
- Argument: The code conditions on 'more than one
civilisation in a thousand becomes a sustained expander'. That is a
statement about the population mean, far stronger than 'feasible for
us'. Feasibility for us is the negation of the barrier atom. The
'feasible' and 'infeasible' rows have forecasts 0.59 and 0.26, which sum
to 0.85; the missing 0.15 is 'feasible but rarer than 1 in 1000', which
no row covers.
- Proposed change: Set exp_feasible to f_ex = (~barrier).
Text: '... "never spread" falls from 16% to 6% and "alone" rises to 86%;
the model gives this outcome a 74% chance.' Or keep the code and relabel
the row 'Expansion shown to be common (more than 1 civilisation in 1000
does it)'.
- Tested: Independent samples (600k): given p_exp > 1e-3,
predictive 0.586, alone 0.878, stuck 0.039. Given no barrier, predictive
0.743, alone 0.858, stuck 0.063. Six pooled M.run seeds, exp_feasible:
predictive 0.588, alone 0.883, stuck 0.040. q_barrier = 0 lever row:
alone 0.858, stuck 0.063.
- moderate / index.html line 89: '"alone" is the majority
answer in over 99% of [the re-runs]' with scan4.py line 21: w_fast =
lg(0.05, 0.6)
- Argument: The claim is true by construction of the scan
range. w_fast is drawn log-uniformly on 0.05 to 0.6: median 0.17, only
16.5% of draws above 0.4, none above 0.6. The project's own lever table
puts P(alone) at 0.48 for w_fast = 0.8, and the Biology optimist camp at
0.14. Line 83's 'ranges the critics considered defensible' does not
cover the chemistry-optimist position the page itself lists.
- Proposed change: Either scan w_fast uniformly on 0.05 to
0.95 and report the result, or reword: 'Within these ranges
(life-starts-easily prior between 5% and 60%) "alone" is the majority
answer in nearly all re-runs; it stops being the majority once that
prior passes about 75%.'
- Tested: scan4.draw(k) for k = 0..399: w_fast median 0.172,
share above 0.4 = 0.165, max 0.597. Exact cell re-weighting of
cells4.json with everything else at base: alone 0.853 / 0.778 / 0.677 /
0.577 / 0.502 / 0.477 / 0.402 at w_fast 0.05 / 0.2 / 0.4 / 0.6 / 0.75 /
0.8 / 0.95; with w_fast uniform on 0.05 to 0.95, 22% of settings give
alone below 0.5. Only 12 trial draws (15,000 samples each) are on disk;
draws 0, 5 and 11 reproduce exactly.
- moderate / run4.py lines 107-121 (camps, levers, grid and
future rows are single runs with seed 7; the SIA column of each is one
tilted run) and the page numbers taken from them: sg_alone '56%',
sg_stuck '33%', the SIA dots in the forecast figure, Table D SIA
column
- Argument: The base column pools 8 seeds; every other row is
one seed. In the trial the second-origin row has site ESS 816 and is off
by 0.02 on all three numbers. The 'infeasible' row has ESS 651 and
Biology optimist 835. At 250,000 samples those become roughly 6,800,
5,400 and 7,000, a standard error of about 0.006, which can still flip a
printed percent. SIA single runs are worse: ESS 22 to 109 for future
rows and 9 to 24 for the Carter camps in the trial, so about 180 to 900
and 75 to 200 at 250,000. Tables B and C also disagree with each other
because of this: posterior 0.779 pooled against 0.769 in the Shapley
table and 0.77 in the 'Base' camp row.
- Proposed change: Pool at least 4 seeds for the future rows
that feed page text (second origin, feasible, infeasible, HWO) and at
least 4 tilted seeds for every SIA number shown in the forecast figure.
Compute the 16 Shapley subsets on the same pooled seeds as the base.
Print ESS next to each row in tables_v4.md and grey out SIA cells with
ESS below 1,000.
- Tested: Stored ESS read from integrate4_results.json. Six
pooled seeds x 60k for second_genesis: alone 0.581, stuck 0.308,
predictive 0.309, against the stored 0.557 / 0.329 / 0.324; my
independent implementation gives 0.579 / 0.307 / 0.309.
- minor / bind.js lines 9-10 and charts1.js lines 77-78:
Shapley contributions multiplied by shk = (pooled posterior - prior) /
(shapley end - start); page text '-8 ... +23 ... +2'
- Argument: The bars are labelled 'Each bar is a Shapley
value' but are rescaled by 1.052 so that they add up to the pooled
headline. The computed values are -7.7, +2.7, +21.4, +2.2; the page
prints -8, +3, +23, +2. MODEL4_NOTES says +0.21 for the same quantity.
The rescale hides seed noise instead of removing it. Separately, the +2
for 'surveys and radio' is an average over orderings: once 'nobody here'
is in, adding surveys and radio moves P(alone) by +1.1 points (0.758 to
0.7695), and leverage4.json gives -0.2 for dropping the galaxy surveys
and -0.8 for dropping radio.
- Proposed change: Delete the rescale and compute the 16
subsets on the pooled base seeds so that start and end equal the
headline exactly. Caption: 'Surveys and radio add about +2 on average
over orderings, and about +1 once the local silence is already
counted.'
- Tested: Reproduced all 16 ablation runs (n = 30,000, seed
7) with zero difference from the JSON. Shapley recomputed by the subset
formula: site -0.0773, +0.0269, +0.2142, +0.0220, sum 0.1858 = end -
start (0.7695 - 0.5836). shk = 1.052 from data.js.
- minor / model4.py lines 318-321 with 467-468 and 496-501
('prior' class masses and prior_stats); model4.py line 513 (pool keeps
runs[0]['prior_stats'])
- Argument: When both timeline terms are on, the gate delay D
is drawn inside [x - tau, x] and re-weighted by w_D in the likelihood,
but the 'prior' outputs ignore w_D. The published prior column is
therefore not the pure prior in gated universes. The paired difference
at the same seed is +0.0027 on P(alone) and -0.0026 on the excluded
class. Separately, pool() takes prior_stats (prior alone, prior
quantiles, prior sub-classes) from the first seed only.
- Proposed change: Compute prior statistics from a second,
unconditioned delay draw (D0 = ga + uD (gb - ga)) or from the use_early
= use_late = False run, and average prior_stats over seeds in
pool().
- Tested: ablation['prior'] against ablation['early+late'] in
the JSON, same seed 7: alone 0.5836 against 0.5863; excluded 0.3534
against 0.3508.
- minor / model4.py line 88 comment: 'hard_thr=0.3 ...
(labelling only; the chain is exact)'
- Argument: Not labelling only. hard_thr decides which worlds
are 'gated' (lines 307-309): those swap the exact chain for the gate
clock and gain the factor f_gate. It also sets the exponent k in the
Earth-timeline likelihood (line 340), which uses the hard-step-limit
density u^(k-1), not the exact chain. For a step just under the
threshold (p = 0.29) the limit is 15% off.
- Proposed change: Comment: 'threshold for treating a step as
hard: sets the gated branch and the exponent of the timeline likelihood;
yields use the exact chain. P(alone) moves by 0.004 or less for
thresholds from 0.1 to 0.6.'
- Tested: hard_thr = 0.1 / 0.3 / 0.6 at 60k, seed 7: site
alone 0.778 / 0.782 / 0.782; ssa_obs 0.542 / 0.550 / 0.551. Brute-force
chain simulation with lambda = 3 and one step at rate 0.342: 0.330 +-
0.003 against timeline() 0.379.
- minor / chain4.py line 23 (hz = min(h, 4.0)), line 24 (rates
clipped at 45.5), interp_log; model4.py docstring line 17 ('The biology
chain is exact')
- Argument: Three undocumented approximations. (1) The hazard
is clipped at 4.0, but h = -ln(f_persist) reaches 4.6 in the base case
and 6.9 in the Rare Earth camp; hard-step yields are too high by (h/4)^k
there (measured +27% to +41% for two stages). The gated branch and
timeline() use the unclipped h, so the branches are inconsistent. (2)
Off-grid interpolation is biased low by 1% to 11%. (3) Rates above 45.5
per window are clipped, so P(life before death) is 0.919 instead of
0.996 at lambda = 1000, h = 4.6. None moves a headline number.
- Proposed change: Raise LAMBDA to 60 and clip h at 10
(tested: same run time), or state the three approximations in the
docstring: 'exact on the doubling grid; within 11% off it; hazard
clipped at 4.0'.
- Tested: chain_test.py, 13 parameter sets, 2 million draws
each. Patched copy without the clip, paired runs at 60k: base site alone
0.7820 against 0.7820 (3.9% of samples change, at most 0.22 dex in
N_ever); Rare Earth 0.8334 against 0.8339 (13% change, at most 0.98
dex).
- minor / model4.py lines 113 and 372-373: mid_curve = ((0.75,
130.0), (0.9, 214.0)) with zero_above=True
- Argument: Two mismatches with studies/tf_kiii. (1) 130 and
214 equal 3 / 0.023 and 3 / 0.014, the pre-revision limits. The final
study reports 2.6% (34 / 1,766) and 1.5% (5 / 683), which give about 117
and 195. (2) The study's limits are cumulative ('at least a fraction
f'), so f_cov above 0.9 is covered by the f >= 0.9 row, and the
no-optical-counterpart bound (0.23%) covers f near 1. zero_above=True
makes a 95%-harvested galaxy unconstrained while an 80%-harvested one is
constrained.
- Proposed change: mid_curve = ((0.75, 117.0), (0.9, 195.0))
with zero_above=False (np.interp then holds 195 above 0.9). Or keep the
zero and say in the comment that 0.9 to 0.99 is treated as uncovered by
choice.
- Tested: Read studies/tf_kiii/data/limits.csv (PRIMARY rows:
UL95 0.0256 and 0.0154) and report.md lines 7, 19, 226, 283. Effect is
nil: leverage4.json 'no optical galaxy limits' changes site alone by
-0.000.
- minor / model4.py lines 56-58 and 338: _WF = sfr x dt /
sfr_total ('fraction of all planets (ever)') multiplied into Ncls built
from the present-day star count
- Argument: sum(_WF) = 0.9014, so N_ever = present-day
planets x 0.90 x P(civilisation by age). The present-day star count
(10^11 to 10^11.6) is treated as the all-time total including the 10% of
stars not yet formed. Every star that exists today has formed, so the
count to date is 10% low and the all-time count W lacks the future
11%.
- Proposed change: Divide _WF by TAB['frac_sf_done'] for the
count to date and multiply W by 1 / frac_sf_done for all-time totals, or
change the comment on log10_Nstars to 'stars ever formed, including
future star formation'.
- Tested: TAB['frac_sf_done'] = 0.9014; my own cosmology
gives 0.9015. The shift is 0.045 dex in N_ever against a 50-decade
prior, so nothing visible changes.
- minor / MODEL4_NOTES.md line 16: 'empty_universe (expected
civilisations ever in the Galaxy x number of galaxies in reach <
1)'
- Argument: The code uses G = 10^U(10.7, 11.3), Milky-Way
equivalents in the observable universe (model4.py lines 440 and 447),
not N_reach = 5.5e6. CLASS_LABELS is correct; the notes are not.
- Proposed change: 'empty_universe (N_ever x number of
Milky-Way equivalents in the observable universe, 5e10 to 2e11, <
1)'.
- Tested: Read the code. P(N_ever x N_reach < 1) is a
different stored quantity (p_nobody_in_reach = 0.517, against the class
0.388).
- minor / index.html line 70: 'Almost every row ends above
where it started. The exception worth knowing is the biology
optimist'
- Argument: There is no exception. All 26 camps end above
their prior, including the biology optimist (0.06 to 0.14).
- Proposed change: 'Every row ends above where it started.
The row worth knowing is the biology optimist, for whom life and
intelligence are both easy: that camp ends with only 14% on "alone" and
60% on "they arise and never spread".'
- Tested: camps in integrate4_results.json: prior_stats alone
against site alone for all 26 rows.
- minor / index.html line 256: 'In 47% of all cases the Galaxy
holds no other life at all; in 31% it holds life that never reached
technology' (model4.py line 454, life_worlds)
- Argument: life_worlds counts planets on which life ever
starts over the whole habitable window, future included (up to 100 Gyr
on M dwarfs), with no persistence hazard. 'Holds' is present tense. The
31% includes universes where the only other life lies in the future, and
it also includes the 5 points of 'alone' in which outsiders are
spreading or present.
- Proposed change: 'In 47% of all cases no other life ever
starts in the Galaxy, past or future; in 31% life starts somewhere, at
some time, and never reaches technology.' Or compute life to date with
the same age weights as N_ever.
- Tested: Read the code. sub.alone_sterile 0.466 and
alone_inhabited 0.313 in the JSON; independent implementation
0.468.
- minor / index.html line 233 and charts1.js line 276 (count
chart starts at 10^-44); cells4.py line 27 (values below 10^-60 clipped
into the first bin)
- Argument: The caption quotes a 90% range reaching 10^-52,
but the axis starts at 10^-44. 7.5% of the posterior and 5.1% of the
prior lie off the left edge and are not drawn; 3.6% sits in the clipped
first bin.
- Proposed change: Start the axis at 10^-60 with an 'or
fewer' overflow bar, or add to the caption '(7% of the probability lies
to the left of this chart)'.
- Tested: cells4.json N_ever_hist: site mass below -44 =
0.075, prior 0.051, first bin 0.036.
- minor / index.html line 40 and model4.py line 476: 'the
chance that no other civilisation has ever arisen in our Galaxy is 78%'
(threshold N_ever < 1)
- Argument: The number is P(expected count < 1), not the
probability that the count is zero. The code already stores the literal
probability E[exp(-N_ever)] and it is one point lower.
- Proposed change: Use p_no_other_ever_poisson (0.77 in the
trial) for sentences worded as a probability that nobody else arose, or
say 'the chance that fewer than one other civilisation is
expected'.
- Tested: JSON: site 0.779 against 0.769; ssa_all 0.759
against 0.749. Independent implementation: 0.773 against 0.763.
- minor / charts1.js line 240 (playground slider 'Hard
evolutionary steps on the way to us'); index.html line 261 ('no
civilisation exists anywhere in the part of the universe that could ever
reach us'); page_draft.md line 163 ('removing any one of them changes
the chance that we are alone by two points or less')
- Argument: (1) The slider tilts the mean number of candidate
steps (base mean 1.34); the model's hard steps average 1.14 because 14%
of candidates are easy. (2) reach_nobody is P(N_ever x 5.5e6 < 1): no
civilisation has ever arisen to date in the volume we could reach at
0.1c. That is neither 'exists' nor 'could reach us'. (3) page_draft.md
is stale: index.html (06:43) replaced that sentence with leverage
numbers, and leverage4.json contradicts it (timing -5.4 to +2.2 points,
hard steps -8.9 to +14.3).
- Proposed change: (1) Label: 'Candidate evolutionary steps
(some turn out easy)'. (2) 'The chance that no civilisation has yet
arisen anywhere within the volume a 0.1c expansion from here could ever
reach is 52%'. (3) Regenerate page_draft.md from index.html before
anyone reviews it again.
- Tested: cells4.json base_marginals.m;
prior_stats.mean_hard_steps = 1.14; leverage4.json (150,000 x 2 seeds);
ran bind.js under node against the current data.js: lev_timing '-5 to +2
points', lev_steps '-9 to +14 points'.
Checked and found correct
- chain4 against Monte Carlo (chain_test.py; 13 parameter sets, 2
million draws each; plain MC, or truncated-exponential conditional MC
for small rates): exact within noise on grid times for 1 to 5 stages,
with hazards, with rates down to 1e-30 (below R_FLOOR) and windows up to
178. Off-grid values are 1% to 11% low. The only real discrepancies are
the documented clips: hazard above 4.0 and rates above 45.5.
- Independent re-implementation of the base case (indep.py and
indep2.py: batched scipy expm on a rescaled bidiagonal generator, own
LambdaCDM and star-formation history, direct birth-date sums instead of
cosmo_tables, own quadrature for the timeline, own pre-emption
integral). 300,000 samples against the stored 30k x 8: site
0.391/0.336/0.040/0.162/0.043/0.023/0.005 against
0.388/0.337/0.040/0.164/0.044/0.022/0.005, alone 0.781 against 0.779;
ssa_all alone 0.760 against 0.759; ssa_now 0.775 against 0.775; ssa_obs
0.530 against 0.530 with stuck 0.463 against 0.461. Largest class
difference 0.004. Prior 0.262/0.213/0.032/0.098/0.030/0.012/0.352
against 0.262/0.213/0.033/0.098/0.031/0.012/0.352.
- The same with strictly plain sampling of the gate delay (600,000
samples, four seeds): site alone 0.773 (per seed 0.761 to 0.789),
ssa_all 0.752, ssa_now 0.768, ssa_obs 0.519; every class within 0.012 of
model4 and within Monte Carlo noise. This confirms the gate-delay weight
w_D is applied once and correctly.
- timeline() against adaptive quadrature of the exact joint density
(timeline_quad.py): 24 cases (k = 1 to 4, hazard 0 to 4.5, lambda from
1e-30 to 800, early only, late only, both) agree to 5e-5. The gated
likelihood agrees with brute-force simulation to 1.3%.
- Tilted sampler: unbiased. In a narrow-prior test where both samplers
converge (4 x 60k each), prior classes and site/SSA columns agree within
0.008 and the mean importance weight is 1.012 +- 0.008. In the base case
the tilted runs are used only for SIA, as the driver says; their other
columns have ESS 3 to 29 and are correctly discarded.
- Birth-table rescaling Wr = W x clip(f_now/F0, 0.2, 5): the clip
never binds in 60,000 samples. N_ever equals the exact count W x f_now
to 1e-14. The ratio is 0.985 to 1.03 for G hosts and 0.50 to 1.84 (1st
to 99th percentile) for K and M. Replacing the rescaled all-time
denominator by W x F_end changes ssa_all P(alone) from 0.7662 to
0.7660.
- SSA denominators D_all and D_now, the pocket term and the ssa_obs
factor: reproduced by my own pre-emption integral on a different time
grid (SSA columns above). The overflow warning at model4.py line 427
occurs only where E is astronomically large and the term is multiplied
by exp(-700); harmless.
- Class masks are exclusive and exhaustive (assert passes). Every
sampled variable is used; v_gal acts only through T_fill and is inert
(leverage4: +-0.000).
- Driver reproduction at n = 30,000, seed 7: three camps (Biology
optimist, Carter / Snyder-Beattie, Expansion sceptic) and three future
rows (second origin, expansion feasible, artefact null), including
predictive probabilities, reproduce the JSON with zero difference. All
16 ablation subsets reproduce with zero difference.
- Shapley arithmetic: recomputed with the subset-weight formula. Site
-0.0773 / +0.0269 / +0.2142 / +0.0220, sum 0.1858 = end - start; ssa_all
and ssa_now also sum to end - start.
- cells4.json marginal re-weighting to w_fast = 0.6, q_barrier = 0.4
against a direct pooled run (4 x 60k; 2 x 60k tilted for SIA): site
alone 0.444 against 0.454, stuck 0.502 against 0.491; ssa_all 0.401
against 0.415; ssa_now 0.430 against 0.443; ssa_obs 0.272 against 0.286;
SIA stuck 0.903 against 0.903. Largest difference 0.016, inside the 0.02
tolerance. Re-weighting 360k fresh base samples gives 0.449, and my
independent implementation re-weighted gives 0.456 / 0.415 / 0.443 /
0.287, so the gap is noise in the trial-size cells file.
- Future-row forecasts independently: P(p_exp > 1e-3 | data) 0.586
to 0.591 against 0.588; second-origin predictive 0.309 from both my
implementation and six pooled M.run seeds.
- bind.js executed under node against data.js: every bound number in
page_draft.md matches its key (78/58/16/6, 35% to under 1%, 57%, 14% to
99%, 60%, 85% to 48%, 32%/95%, 47%/31%, 15% to 26%, 33%, 88%, 52%, 9%,
8%, 10^-2 / 10^-7 / 10^-52 / 10^5). The new leverage bindings match
leverage4.json. build_data.py takes each field from the right JSON
key.
- Three scan draws (k = 0, 5, 11) reproduce integrate4_scan.json
exactly at 15,000 samples per draw.
- seti_meta supports the d_beacon range (1e-6 to 0.5): 4.4e5 beacons
allowed at 1e17 W gives 7e-6, 113 at Kardashev II gives 0.03, 4.3 on the
21-cm line gives about 0.5. The w_fast comment E[3/(A+3)] = 0.19 is
right (0.189).
- Tried to break and could not: (a) hard-step threshold 0.1 / 0.3 /
0.6 moves site P(alone) by 0.004 at most; (b) removing the hazard clip
moves it by 0.0005 at most, Rare Earth included; (c) un-rescaled
all-time denominators: 0.0002; (d) plain against importance-sampled gate
delay: no bias; (e) tilted against plain sampler: no bias; (f) exactness
of the timeline likelihood; (g) SIA column: my 300k samples give
0.675/0.182/0.142 at ESS 248 and a back-of-envelope gives about
0.71/0.18/0.11, both consistent with the stored 0.688/0.213/0.099 within
its stated error of 0.025; (h) no floor, clip or underflow (1e-300,
exp(-700), lambda clip at 1e-250) is reached by a sample with non-zero
weight in the base case or the Carter camps.
Not checked
- The 250,000-sample run: integrate4_results.json still had n_per_run
= 30,000 at 07:19 UTC, so the final tables, the 400-draw scan (12 trial
draws on disk) and the full-size cells4.json are unchecked. I expect
site alone 0.78, ssa_all 0.76, ssa_now 0.775, ssa_obs 0.53,
second-origin row 0.58 / 0.31 with forecast 0.31.
- warm_curve (Curtis et al. 2026 preprint; Griffith et al. 2015) and
verycold_curve (Lacki 2016): I did not open the sources. Only the (0.85,
1e5) point matches what the tf_kiii report quotes from Griffith.
- cosmo_tables.npz kern and b: not re-derived entry by entry. My own
cosmology reproduces frac_sf_done (0.9015 against 0.9014) and every
class that depends on kern to 0.003, which tests the tables only in
aggregate. F at 3000 Gyr is still 0.947 to 1.032 for L >= 400, the
round-2 item, not fixed and immaterial.
- The SIA column beyond about +-0.03, and all single-run SIA rows
(camps, future): effective sample sizes of 9 to 300 in the trial are too
small to audit.
- index.html line 149 ('one habitable planet in a billion ... a few in
a billion'): hard-coded from the headstart study (1.05e-9; 3.4e-9 to
9.1e-9 marginalised). It is consistent with that report, but it is not
read from model output, so the footer sentence 'Every model number on
this page is read from the model's output' has this exception. I did not
re-derive the study number.
- Study numbers quoted in page text (flyby, headstart, fp_kiii, seti,
timing, convergence): outside this lens, apart from the tf_kiii and
seti_meta values listed under verified.
- run4.py end to end (all 197 jobs, levers, the barrier x
low-footprint grid): I reproduced 22 of the single runs exactly and did
not rerun the rest.
Code errors
- report/site/charts1.js and report/site/bind.js / charts1.js
lines 17 and 253; bind.js line 8
- Problem: spread = max(1 - alone - stuck, 0) is shown as the
probability of 'someone did spread (unnoticed, hiding, on the way)'.
alone = P(N_ever < 1) overlaps the en_route, unnoticed, hidden and
excluded classes by 0.054, so the residual is 0.056 while the classes
sum to 0.111.
- Fix: fam = {alone: p.empty_universe + p.rare, stuck:
p.stuck, spread: p.en_route + p.unnoticed + p.hidden + p.excluded}; show
P(N_ever < 1) separately.
- Impact: Headline cards become 73 / 16 / 11 instead of 78 /
16 / 6. The playground 'leading answer' line and the three-column future
chart change the same way.
- models/model4.py / lines 375 and 478
(p_other_now_in_galaxy)
- Problem: Counts only quiet home-grown civilisations (N_ever
x L_quiet / 1e10). Expander lineages present in the Galaxy (unnoticed
and hidden classes) are not counted, yet the page uses the number as
'another civilisation exists in the Galaxy right now'.
- Fix: Add p_other_now_incl_settlers = sum(wn * (1 - (1 -
p_now) * exp(-mu))) and use it for that sentence and for the
'whole-Galaxy search finds something' forecast, or relabel.
- Impact: 8% becomes 13 to 15%.
- models/model4.py / line 400 (extra_obs ==
'exp_feasible')
- Problem: f_ex = (p_exp > 1e-3) is labelled 'sustained
interstellar expansion shown feasible for us'. It excludes 17% of
no-barrier universes in which expansion is feasible but rarer than 1 in
1000.
- Fix: f_ex = (~barrier).astype(float), or rename the row
'expansion shown to be common'.
- Impact: Forecast 0.59 becomes 0.74; after-observation alone
0.88 becomes 0.86, stuck 0.04 becomes 0.06.
- models/model4.py / line 386 with index.html line 107 and
charts1.js drawForecasts
- Problem: The second-origin predictive includes the
false-positive floor sg_fp = 0.15 (and the HWO one hwo_fp = 0.10), but
is described as the probability that a second origin exists.
- Fix: Store and plot the true-positive part (predictive -
fp) / (1 - fp) alongside, or relabel as 'chance a detection is
announced'.
- Impact: Site 0.31 announced against 0.19 real; HWO 0.15
against 0.05.
- models/model4.py / lines 318-321, 467-468, 496-501,
513
- Problem: Prior class masses and prior_stats are computed
from samples whose gate delay was drawn from the Earth-conditioned
proposal, without w_D. pool() keeps prior_stats from the first seed
only.
- Fix: Use an unconditioned delay draw for prior statistics;
average prior_stats across runs in pool().
- Impact: Prior P(alone) is 0.003 too high and prior
'excluded' 0.003 too low; prior quantiles rest on one seed.
- models/chain4.py / lines 23-24
- Problem: Hazard clipped at 4.0 although model4 passes up to
4.6 (6.9 in the Rare Earth camp); rates clipped at 45.5. The gated
branch and timeline() use the unclipped hazard. Not documented.
- Fix: LAMBDA = 60.0; hz = min(h, 10.0); Rc = clip(R,
R_FLOOR, LAMBDA - 10.5). Tested, same run time.
- Impact: N_ever too high by up to 0.22 dex in 3.9% of base
samples and up to 0.98 dex in 13% of Rare Earth samples. P(alone) moves
by 0.0005 at most.
- models/model4.py / line 88 (comment on hard_thr)
- Problem: The comment says 'labelling only; the chain is
exact', but the threshold selects the gated branch (with f_gate) and
sets the exponent of the timeline likelihood, which uses the hard-step
limit.
- Fix: Correct the comment and quote the measured sensitivity
(0.004 or less).
- Impact: None on numbers.
- models/model4.py / lines 113 and 372-373 (mid_curve,
zero_above=True)
- Problem: The values 130 and 214 are 3 / 0.023 and 3 /
0.014, pre-revision limits; the final study gives 2.6% and 1.5%.
zero_above drops the constraint for covering fractions above 0.9
although the study's limits are cumulative.
- Fix: mid_curve = ((0.75, 117.0), (0.9, 195.0)),
zero_above=False.
- Impact: None visible (leverage of the optical limits is
0.000).
- models/model4.py / lines 56-58 and 338
- Problem: Formation weights are normalised by all-time star
formation (sum 0.9014) but applied to the present-day star count, so the
count to date is 10% low.
- Fix: Normalise _WF by frac_sf_done for counts to date, or
redefine Nstars as stars ever formed.
- Impact: 0.045 dex in N_ever; no visible change.
- report/site/bind.js and charts1.js / bind.js lines 9-10;
charts1.js lines 77-78
- Problem: Shapley values are multiplied by shk (1.052 in the
trial) so that they sum to the pooled posterior minus prior, and are
still labelled Shapley values.
- Fix: Compute the 16 subsets on the pooled base seeds and
remove the rescale.
- Impact: The page prints +23 where the computed value is
+21.4.
- models/run4.py / lines 107-121
- Problem: Camps, levers, grid and future rows are
single-seed runs, and their SIA columns single tilted runs, while the
base pools 8 seeds. Stored ESS is as low as 651 to 835 (site) and 9 to
109 (SIA) in the trial.
- Fix: Pool at least 4 seeds for rows quoted in text and for
every SIA number shown; store ESS per row.
- Impact: Trial second-origin row is off by 0.02; Table C
posterior 0.769 against Table B 0.779.
- models/scan4.py / line 21: w_fast = lg(0.05, 0.6)
- Problem: The scan range for the life-starts-easily prior is
log-uniform with median 0.17 and maximum 0.6, which guarantees the
page's 'majority answer in over 99% of re-runs'.
- Fix: Draw w_fast uniformly on 0.05 to 0.95, or state the
range in the caption.
- Impact: With the wider range about one fifth of draws would
put P(alone) below 50%.
- report/MODEL4_NOTES.md / lines 16 and 24
- Problem: empty_universe is described with 'galaxies in
reach', but the code uses galaxies in the observable universe.
'Unnoticed returns about 0.8 x q_cc' holds only near the base value
(0.52 at q_cc = 0.5).
- Fix: Correct both sentences.
- Impact: Documentation only.
- report/site/charts2.js / lines 204-235 (old drawNever and
drawCamps)
- Problem: Dead version-3 code that reads keys which no
longer exist (M.N_ever_hist, p_no_other_ever_in_galaxy) and says 'eleven
different sets'. It is not in init(), so it never runs.
- Fix: Delete it.
- Impact: None at run time; it is a trap for the next
edit.
Tables
A. Independent re-implementation against model4 (classes: empty, rare, en_route, stuck, unnoticed, hidden, excluded | P(N_ever < 1))
prior mine (600k plain) 0.262 0.211 0.032 0.098 0.030 0.012 0.355 | 0.581
prior model4 (30k x 8) 0.262 0.213 0.033 0.098 0.031 0.012 0.352 | 0.584
site mine, plain D (600k) 0.386 0.335 0.039 0.168 0.045 0.023 0.005 | 0.773 ESS 28,125
site mine, efficient D (300k) 0.391 0.336 0.040 0.162 0.043 0.023 0.005 | 0.781 ESS 123,046
site model4 (30k x 8) 0.388 0.337 0.040 0.164 0.044 0.022 0.005 | 0.779 ESS 61,750
site model4 (60k x 4, mine) 0.389 0.337 0.041 0.163 0.044 0.021 0.005 | 0.781
ssa_all mine, efficient D 0.390 0.312 0.041 0.171 0.047 0.023 0.016 | 0.760
ssa_all model4 (30k x 8) 0.387 0.314 0.041 0.170 0.047 0.023 0.018 | 0.759
ssa_now mine, efficient D 0.399 0.323 0.039 0.162 0.044 0.022 0.012 | 0.775
ssa_now model4 (30k x 8) 0.396 0.324 0.039 0.162 0.044 0.022 0.014 | 0.775
ssa_obs mine, efficient D 0.232 0.295 0.006 0.463 0.003 0.001 0.001 | 0.530 ESS 28,557
ssa_obs model4 (30k x 8) 0.236 0.291 0.005 0.461 0.004 0.001 0.001 | 0.530 ESS 7,104
Posterior side statistics (site), mine / model4: P(fast) 0.199 / 0.203; gated 0.338 / 0.340; barrier 0.254 / 0.255; mean hard steps 1.57 / 1.57; sterile 0.468 / 0.466; other-now 0.081 / 0.081.
B. The headline is not a partition (site column)
as printed clean classes prior (clean)
nobody else (empty + rare) 0.779* 0.725 0.475
arise, never spread (stuck) 0.164 0.164 0.098
someone spread (4 classes) 0.056** 0.111 0.428
* P(N_ever < 1); includes en_route 0.039, unnoticed 0.010, hidden 0.004, excluded 0.002. ** 1 - alone - stuck.
Clean partition, other columns: ssa_all 0.701 / 0.170 / 0.129; ssa_now 0.720 / 0.162 / 0.118; ssa_obs 0.527 / 0.461 / 0.012; SIA 0 / 0.688 / 0.312.
C. Same Bayes factor for every hypothesis that escapes the silence (site)
universal barrier prior 0.150 posterior 0.255 x1.70
forced low footprint prior 0.050 posterior 0.0835 x1.67
universal hiding prior 0.030 posterior 0.0515 x1.72
D. chain4 against Monte Carlo (ratio chain4 / MC)
on-grid times (s = 1, 2, ...), every case without a clip 0.996 to 1.002
off-grid: B s=0.77 0.985; D s=0.77 0.938; E s=1.6 0.971; H s=1.6 0.891; H s=2.7 0.894; J s=53.6 0.984; L s=1.25 0.977
hazard 4.605 (clipped to 4.0), two hard stages: s=1 1.27; s=1.6 1.29; s=3 1.32; s=17.9 1.41
lambda = 1000, h = 4.605, one stage: 0.923 (s >= 0.2); 0.666 at s = 0.026
lambda = 500, 0.1; h = 4.6: 1.04 to 1.07 for s >= 1; 0.44 at s = 0.026
E. Sensitivity runs (site P(alone); 60k, seed 7, common random numbers)
hard_thr 0.1 / 0.3 / 0.6: 0.778 / 0.782 / 0.782
hazard clip 4.0 against none, base: 0.7820 / 0.7820
hazard clip 4.0 against none, Rare Earth: 0.8334 / 0.8339
all-time denominator rescaled against W x F_end (ssa_all): 0.7662 / 0.7660
prior with the conditioned gate-delay proposal against the true prior (30k, seed 7): 0.5863 / 0.5836
F. Future rows: trial against converged (site)
stored 30k (ESS) 6 x 60k pooled independent
second origin alone 0.557 (816) 0.581 0.579
second origin stuck 0.329 0.308 0.307
second origin forecast 0.324 0.309 0.309 (real part 0.187)
feasible (p_exp > 1e-3) 0.878 / 0.041 / 0.588 0.883 / 0.040 / 0.588 0.878 / 0.039 / 0.586
no barrier (proposed) - - 0.858 / 0.063 / 0.743
artefact null 0.783 / 0.175 / 0.974 0.795 / 0.165 / 0.973 -
G. cells4.json re-weighting to w_fast 0.6, q_barrier 0.4 (alone / stuck)
cells file direct 4 x 60k independent, re-weighted
site 0.444 / 0.502 0.454 / 0.491 0.456 / 0.486
ssa_all 0.401 / 0.534 0.415 / 0.518 0.415 / 0.516
ssa_now 0.430 / 0.509 0.443 / 0.494 0.443 / 0.493
ssa_obs 0.272 / 0.725 0.286 / 0.711 0.287 / 0.711
sia 0 / 0.903 0 / 0.903 -
H. All 16 ablation subsets, site P(alone), n = 30,000, seed 7
(reproduced exactly) prior 0.5836; early 0.4879; late 0.6160; local
0.8014; surveys 0.6167; early+late 0.5260; early+local 0.7395;
early+surveys 0.5252; late+local 0.8247; late+surveys 0.6483;
local+surveys 0.8099; early+late+local 0.7584; early+late+surveys
0.5615; early+local+surveys 0.7506; late+local+surveys 0.8310; all
0.7695. Shapley: early -0.0773, late +0.0269, local +0.2142, surveys
+0.0220; sum 0.1858.
Advice
- Fix the cards first: one line in charts1.js and one in bind.js.
Decide whether the headline quantity is 'nobody arose here' (78%,
overlapping) or the clean class (73%), then use that one definition for
the cards, the camps, the levers, the scan and the playground. 2. Tell
the redistribution story once and apply it evenly: the silence deletes
evident settlement, and everything that escapes (barrier, forced low
footprint, universal hiding, empty Galaxy) gains by the same factor. The
page currently applies it to 'unnoticed' and not to the barrier. 3. A
free variance reduction: draw the gate delay from the truncated
exponential in x - D (rate lambda + h on [0, tau]) instead of uniformly.
In my implementation that lifts the site ESS from 26% to 41% of samples
and removes the spikes from fast-life gated worlds. 4. Pool seeds for
every row that feeds a sentence, and print ESS in tables_v4.md. 5.
Regenerate page_draft.md from index.html; they have already diverged
(studies section). 6. Once the 250,000-sample run lands, re-run
make_tables.py and build_data.py, then check that Table B's posterior,
Table C's posterior and the Base camp row agree to 0.003.
Critic: a statistician
Overall verdict
Not ready to publish as worded. The model's arithmetic reproduces (my
independent seeds give prior 0.586, posterior 0.777 to 0.781), but the
headline "78%, up from 58%" is a prior restated plus one deletion.
Removing the contradicted class from the prior and renormalising, with
no likelihood at all, already gives 0.800; the full posterior is 0.777.
The evidence multiplies the odds on being alone by about 2.5, and its
Bayes factor on the dial the headline hangs on (whether life starts
easily) is 1.00: that probability is 0.20 before and 0.20 after. The
scan's "alone is the majority answer in over 99% of re-runs" is
circular: it holds because 83% of draws have w_fast below 0.4, and it
falls to 94% in my re-run of the project's own first 70 draws and to 75%
(54% for a typical civilisation) when w_fast is drawn uniformly on 0.05
to 0.9. Three statements are wrong as written: the hero's "6% someone
did spread" (the model's own classes sum to 11%), "the first three
conventions agree to within a few points" (0.77 against 0.46 if planets
live as long as their stars), and "the evidence raises it above that
prior" for the barrier panel. The single most important change is to
lead with the odds multiplier and the conditional ("about 3 to 1 alone
if you think life is hard to start, about evens if you think it is
easy") in place of an unconditional 78%. All numbers below are from the
30,000-per-run trial on disk and my own runs; the 250,000 run and the
400-draw scan had not landed when I finished.
Objections
- major / page_draft.md and index.html line 40: "The result:
the chance that no other civilisation has ever arisen in our Galaxy is
78%, up from 58% before looking at any evidence"; lede "Most likely
there has never been anybody else in our Galaxy"
- Argument: The 0.58 is built from four prior choices, and
the 78% inherits them. Decomposition of prior P(N_ever<1) = 0.586:
the slow-abiogenesis camp supplies 0.558 and the fast camp 0.027
(P(alone|slow) = 0.70, P(alone|fast) = 0.14). Removing one ingredient at
a time: no slow camp 0.135; no candidate steps 0.453; all four f factors
set to 1 gives 0.452; slow range capped at 30 decades 0.49. So the
judgement-set f factors (f_site, f_persist, f_gate, f_c) contribute as
much as the hard steps. The implied prior on civilisations per
habitable-zone planet has median 1e-12, 5% point 1e-55, 28% of its mass
below 1e-20 and 16% below 1e-30, and it is not printed anywhere on the
page (bind.js computes planet_med, planet_lo and planet_hi but
index.html never uses them). The data do not test this prior: the
marginal likelihood is flat in w_fast (1.00, 1.00, 1.00, 1.00, 1.00,
1.01, 1.01 for w_fast 0.05 to 0.8, Earth-given), and posterior P(fast)
equals the prior at every setting (0.20 to 0.20 in the base). The
evidence multiplies the odds on being alone by 2.5 (prior odds 1.41,
posterior odds 3.5), which is weak evidence by any conventional scale.
Prior P(alone in the Milky Way) of 0.58 is also close to Sandberg,
Drexler and Ord's 0.52 as recorded in the project's own behavioural
brief, with the same mechanism, and the page credits them only for the
width of the distribution.
- Proposed change: Replace the callout with: "If you think
life is hard to start (at most a one-in-five chance that it starts
easily), the chance that no other civilisation has ever arisen in our
Galaxy is about three in four. If you think life starts easily it is
about evens, and the alternative is that others arose and none spread.
The observations multiply the odds of being alone by about 2.5, whatever
you believe about biology; they do not tell us which belief about
biology is right (20% before, 20% after)." Print next to it the implied
prior: "my priors put the chance that a habitable planet ever produces a
civilisation at a median of one in a trillion, with a 5% chance that it
is below 1e-55". Credit Sandberg, Drexler and Ord for the prior result,
after re-checking their numbers.
- Tested: base_diag.py (3 x 60,000), extra.py (40,000 per
variant), sens.py (2 x 60,000 per variant). Asked variants, prior to
posterior (Earth given): slow 3-30 0.49 to 0.71; slow 3-60 0.55 to 0.76;
slow 3-200 0.62 to 0.80; step depth 2-5 0.55 to 0.75; w_fast 0.5 0.42 to
0.63; w_fast 0.5 + slow 3-30 + steps 2-5 0.31 to 0.49; w_fast 0.8 0.25
to 0.485. Marginal likelihoods read from the levers in
integrate4_results.json.
- major / Hero cards (index.html lines 28-30; charts1.js line
17 fam(); bind.js line 8 spread): "78% Nobody else, ever", "16% They
arise, and never spread", "6% Someone did spread. They are here in a
form we have not noticed, or hiding, or still on their way from another
galaxy"; also "shares the remaining 6%" and "If we are alone (78%) ...
the Galaxy is unclaimed"
- Argument: The third number is computed as 1 - alone -
stuck, not from the classes its label names. The model's posterior for
en route + unnoticed + hidden + contradicted is 0.108 (Table A: 0.040 +
0.044 + 0.022 + 0.005 = 0.111), and 0.053 of it lies inside the 78%,
because "alone" means only that nobody else arose in our Galaxy and
settlers can come from other galaxies. Almost all of "still on their way
from another galaxy" (0.038 of 0.040) is counted in the 78% card, not
the 6% card. The bar directly above the cards shows the seven classes,
so a reader can see blue segments of 72.5% beside a card saying 78%.
"The Galaxy is unclaimed" is false for 7% of the alone mass.
- Proposed change: Either (a) make the cards a true
partition: "72%: nobody else has arisen in our Galaxy and nobody is here
or on the way" (empty + rare), "17%: they arise and never spread", "11%:
someone did spread (here unnoticed 4%, hiding 2%, on the way from
another galaxy 4%, other under 1%)"; or (b) keep 78% but relabel the
third card "6%: others arose in our Galaxy and someone spread" and add
"in about 5 of the 78 points, expanders from another galaxy are already
here unseen or on their way". Change fam() and spread to sum the
posterior classes. In the consequences callout replace "and the Galaxy
is unclaimed" with "and in most of these cases the Galaxy is
unclaimed".
- Tested: base_diag output and a class-by-alone
cross-tabulation on 180,000 samples: posterior alone by class = empty
0.388, rare 0.336, en route 0.038, unnoticed 0.010, hidden 0.004,
contradicted 0.002; 1 - alone - stuck = 0.054; spread classes =
0.108.
- major / Scan paragraph and caption (index.html lines 83-89):
"To check that the result is not a product of my own choices, I drew 400
complete alternative sets of priors at random, from ranges the critics
considered defensible"; "The evidence raises the chance that we are
alone in over 99% of the re-runs, by a typical 20 points ... 'alone' is
the majority answer in over 99% of them"; also "the evidence lifts it at
every setting" and "Almost every row ends above where it
started"
- Argument: Two different problems. (1) The lift is an
identity, not a regularity. Lift = P(E) x [P(alone | not E) - P(alone |
E)], where E is the contradicted class. In the base that is 0.353 x
(0.800 - 0.193) = +0.214 before any likelihood is used; the actual lift
is +0.19 and the silence-only posterior is 0.805. Since evident
settlement needs settlers, P(alone | E) is always below P(alone | not
E), so "raised in 100% of draws" is guaranteed by construction. Across
the project's own first 70 scan draws the identity lift is
0.13/0.20/0.31 (5/50/95%) against an actual 0.12/0.21/0.35, correlation
0.79; the residual of about 0.04 is the timeline pulling either way (it
lowers P(alone) in 63% of draws). (2) "Majority in over 99%" is
circular. The scan draws w_fast log-uniformly on 0.05 to 0.6 (median
0.17, only 17% above 0.4), the zero-step weight on 0.1 to 0.5, and never
lets the slow range exceed the base value. Posterior alone exceeds 0.5
exactly when prior alone exceeds about 0.35: logit(posterior) = 1.02 +
1.05 logit(prior). In my re-run of the project's own draws 0 to 69 the
share is 94%, not over 99% (draws 20, 26, 37 and 63 give 0.46, 0.32,
0.47, 0.41), and 84% for a typical civilisation. Widening only w_fast to
uniform 0.05-0.9 and the zero-step weight to 0.1-0.7 gives 75% (Earth
given), 54% (typical civilisation) and 13% (typical observer), median
posterior 0.62. The claim that critics considered the ranges defensible
is not documented; round 2 asked for extra knobs (lower bound of W_exp,
p_here, the harvest atom) that are still fixed.
- Proposed change: Replace the paragraph and caption with:
"The evidence works the same way under every set of priors: it deletes
evident settlement and hands its share to the rest. That multiplies the
odds of being alone by 1.6 to 4.7 (typically 2.8), so the answer after
the evidence is fixed by the answer before it. 'Alone' ends above one
half whenever it started above about 0.35. In N sets of priors drawn
around my own that is true of 94%; if the chance that life starts easily
is allowed to be anywhere from 5% to 90%, it is true of about three
quarters, and of about half if we count ourselves a typical
civilisation." Delete "from ranges the critics considered defensible" or
cite who agreed. Replace "the evidence lifts it at every setting" with
"the evidence multiplies the odds by about 2.5 at every setting". Add a
camp column for the Bayes factor on alone: about 2.3 to 2.7 for every
biology camp, 1.35 (expansion sceptic) to 8 (Hart, crossed) across the
expansion and evidentness camps.
- Tested: scan_rt.py and scan_an.py: 70 project draws
(scan4.draw(k), seeds 9000+k, n = 30,000; the first 12 match
integrate4_scan.json within 0.02) and 110 widened draws. Camp Bayes
factors computed from tables_v4.md Table D.
- major / Conventions caption (index.html line 100): "The
first three rows agree to within a few points, so the common worry that
'typicality' changes everything is not borne out."
- Argument: True at the base point only, and it is produced
by three priors added in version 4 that suppress long-lived hosts
(p_cap_short = 0.7, the ultraviolet penalties, the persistence hazard).
With planets living as long as their stars, no ultraviolet penalty and
no hazard, Earth-given stays at 0.77 while typical-civilisation-all-time
falls to 0.46 and to-date to 0.66. With w_fast 0.5 as well it is 0.61
against 0.24. With p_cap_short 0.3 and no ultraviolet penalty it is 0.77
against 0.68. Inside the project's own scan the gap (Earth given minus
typical, all time) is 0.02/0.06/0.15 at 5/50/95%, maximum 0.195, above 5
points in 63% of draws and above 10 points in 20%. The project's own
Table D already shows 0.76 against 0.69 (no ultraviolet penalty) and
0.99 against 0.93.
- Proposed change: Replace with: "With my priors the first
three rows agree to within a few points. That agreement depends on one
astrophysical judgement: that rocky planets stop being habitable after
roughly 6 to 15 billion years (70% in my priors) and that orange and red
dwarfs are poorer cradles. If planets last as long as their stars, a
typical civilisation is one that arises much later than we did, and the
chance that we are alone falls from 77% to about 46%. Across alternative
priors the typical-civilisation answer is lower by 6 points on average
and by more than 10 in a fifth of cases."
- Tested: sens.py variants 'long-lived hosts' (2 x 60,000;
typical-all-time effective sample size 1,970, so 0.46 +/- 0.02),
'long-lived hosts + M alive 0.6' (0.765 / 0.438 / 0.659), 'p_cap_short
0.3, no UV penalty', 'w_fast 0.5, long-lived hosts'; gap distribution
from scan_an.py.
- major / Consequences callout (index.html line 257): "The
chance that a universal barrier to lasting expansion exists rises from
15% before the evidence to 26% after it. The silence is the only
evidence we have about that barrier, and it is not reassuring." Also the
lede "and that would apply to us too" and the card "most likely because
something stops everyone"
- Argument: The rise is the same deletion identity, with a
Bayes factor of 2.0. A barrier universe is immune to the silence; a
no-barrier universe loses its contradicted share (41% of the no-barrier
prior), which alone gives 1/(1 - 0.41) = 1.7, and the timeline adds the
rest. Across the scan the barrier's Bayes factor is 1.4 to 3.6 and
tracks 1/(1 - P(contradicted | no barrier)) with correlation 0.95 in
logs. It is not a property of the barrier: the same silence raises
"everyone hides" from 3.0% to 5.2% and "low footprint forced on
everyone" from 5.0% to 8.4% by the same factor of about 1.7, and would
do the same for any silent hypothesis not on the list. The numerical
claim is robust to W_exp (posterior 0.27, 0.26, 0.24, 0.23 for W_exp
1-4, 1-8, 1-16, 2-20) but not to the biology prior (0.22 at w_fast 0.05,
0.39 at w_fast 0.8) and it is linear in the atom (0.05 gives 0.09, 0.30
gives 0.45). The atom is not needed for the "never spread" answer: with
q_barrier = 0 and a 30-decade continuous tail, stuck is 0.158, the same
as the base 0.165, and nothing in the data separates "impossible for
everyone, us included" from "the population-average chance is tiny". So
"would apply to us too" follows from choosing an atom over a tail. More
than half of the 26% (0.136) sits in universes where we are alone anyway
and the barrier explains nothing. "The only evidence we have" is also
untrue of the model's own inputs: the 0.15 prior is said to come from
studies/expansion_analogs, which has no report yet.
- Proposed change: Replace with: "The silence doubles the
odds that a universal barrier exists, from 15% to about 26% on my priors
(9% if you started at 5%, 45% if you started at 30%). That is the same
modest factor by which it raises every explanation that predicts
silence, including deliberate hiding (3% to 5%). The model cannot tell a
barrier that would stop us too from expansion that is merely very rare;
I have assumed the former." Change the lede's last clause to "and that
might apply to us too", and the card to "either because something stops
everyone or because lasting expansion is extremely rare".
- Tested: base_diag.py (mean likelihood 0.515 with barrier,
0.257 without, 0.435 without and not contradicted; regime posteriors
from integrate4_results.json); sens.py W_exp variants and 'q_barrier 0,
W_exp 1-30'; levers table for q_barrier and w_fast; scan_an.py for the
correlation.
- moderate / Shapley figure and caption (index.html line 48):
"credited fairly to each observation", "-8 points", "+23 points", "+2";
bind.js lines 9-10 (shk)
- Argument: (1) The printed values are not the computed
Shapley values. bind.js multiplies every contribution by shk = (pooled
posterior - prior) / (ablation end - start) = 1.05 so that the bars add
up to the pooled-run total; the stored value for the silence is +0.214,
the page prints +23. Rescaling terms of opposite sign by a common factor
has no justification. (2) On the probability scale the attribution
depends on order: the silence term ranges from +0.18 to +0.25 across the
24 orderings, early life from -0.06 to -0.10, surveys from +0.006 to
+0.037; the early-life x silence interaction is +0.034. On the log-odds
scale the terms are nearly additive and order-free: Bayes factors on
alone of 0.69 (early life; range 0.67-0.71), 1.14 (late arrival), 2.8
(nobody here; 2.6-3.0), 1.10 (surveys and radio), product 2.4. (3) "The
silence here does nearly all the work" is false in the typical-observer
column, where the silence term is +0.013 and the reference-class
weighting has already moved P(barrier) to 0.89 before any observation is
applied.
- Proposed change: Show the four terms as odds multipliers:
"Early life x0.7, late arrival x1.1, nobody evidently here x2.8, surveys
and radio x1.1; together x2.4". If the point-scale bars are kept, print
the unscaled values with their range over orderings ("+18 to +25"),
delete the shk rescale, and add "under the Earth-given and
typical-civilisation conventions" to the bold sentence.
- Tested: shap.py: recomputed all 24 orderings from the 16
stored subsets in integrate4_results.json for four columns; reproduces
the stored Shapley values exactly. 0.2142 x 1.052 = 0.225, which is the
page's +23.
- moderate / Conventions figure, rows four and five, and
caption: "Both move probability from 'alone' to 'they arise and never
spread'"; any printed SIA shares (stuck_sia, unnot_sia in bind.js);
Table D's SIA column
- Argument: The SIA split is the three prior atoms
renormalised and nothing else. Closed form: q_barrier : q_cc(1 -
q_barrier)(1 - E[p_here]) : p_stealth(1 - q_barrier) = 0.695 / 0.187 /
0.118. The model gives 0.688 / 0.213 / 0.099 (pooled, effective sample
size 807), 0.66 / 0.18 / 0.16 (the base row of the camps table, same
quantity, different run) and 0.695 / 0.201 / 0.104 (my tilted run,
effective sample size 238, top 100 samples carry 43% of the weight). The
two project estimates of the same number differ by up to 0.06. "Moves to
never spread" is true only because 0.15 is the largest of the three
atoms; the camp with q_cc = 0.30 gives 0.33 / 0.59 / 0.08. The
typical-observer row is similarly an atom effect: its weighting sets
P(barrier) to 0.89 before any data, and with q_barrier = 0 it gives
alone 0.75, with 0.05 it gives 0.57, with 0.15 it gives 0.51 to
0.53.
- Proposed change: Print no two-digit SIA shares. Replace the
caption's last two sentences with: "The last two rows are different in
kind. Weighting crowded universes rules out an empty Galaxy and leaves
only the explanations that are silent by assumption, in the ratio of the
priors I gave them (about 70 : 19 : 12 for barrier, low footprint,
hiding); change those priors and the split changes with them. Counting
ourselves a typical observer amounts to assuming the barrier exists
(92%), if a barrier is possible at all; with no barrier in the priors
that row gives 75% alone."
- Tested: extra.py (tilted run and closed form);
integrate4_results.json base regime posteriors and the q_barrier lever's
typical-observer values; shap.py prior row for ssa_obs (P(barrier) 0.888
with all observation terms off).
- moderate / Section title and caption: "How many
civilisations? The honest range spans fifty powers of ten"; "with a 90%
range from 10^-52 to 10^5"
- Argument: The lower end is the prior's upper limit on
slow_decades, untouched by any observation. The 5% point of the
per-planet prior is 1e-25, 1e-38, 1e-55, 1e-96 for a maximum of 30, 60,
100, 200 decades. "Fifty" is therefore a number the modeller typed in,
and "honest" claims more than that. The same change moves the headline
only from 0.71 to 0.80, so the width is not what drives the answer
either: a slow camp fixed at 12 decades reproduces the base (prior
0.577, posterior 0.758).
- Proposed change: Title: "How many civilisations? The range
is as wide as the prior allows". Caption: "The left-hand edge is set by
how improbable I allowed the origin of life to be (up to 100 powers of
ten); the evidence does not touch it. What the evidence does is cut away
the right-hand side: the chance of more than a hundred civilisations in
the Galaxy's history falls from X to Y." Give that right-tail number in
place of the 90% range.
- Tested: sens.py log_pp quantiles for slow 3-30, 3-60,
3-100, 3-200; extra.py fixed-range runs (12, 20, 40, 100 decades give
prior 0.58, 0.68, 0.75, 0.80 and posterior 0.76, 0.83, 0.875,
0.90).
- moderate / Seven-class partition summing to 1 (Table A; hero
bar); "What this cannot tell you" paragraph
- Argument: Round 2's request for a catch-all was not taken
up. Every hypothesis that predicts silence gets its odds multiplied by
about 1.7 to 2 (barrier 2.0, hiding 1.75, forced low footprint 1.73), so
an unlisted silent explanation with prior p would receive the same boost
and scale every listed number down. Arithmetic with the model's own
figures (evidence 0.298, a silent class's mean likelihood about 0.5): a
10% prior on "something not on this list" ends at about 16% and takes
the headline from 78% to about 66%.
- Proposed change: Add to "What this cannot tell you": "The
seven explanations are assumed to be exhaustive. Any explanation I have
not thought of that also predicts silence would be boosted by the same
factor of about two as the barrier; giving such explanations 10%
beforehand would lower the headline from 78% to about 66%." Optionally
add an eighth, grey segment to the hero bar.
- Tested: Arithmetic only, from the ablation evidence value
(0.298) and class mean likelihoods in tables_v4.md (hidden 0.538, stuck
0.497); regime posteriors from integrate4_results.json. No model
run.
- moderate / Levers caption (index.html line 80): "Middle:
'they never spread' grows with your prior that a universal barrier
exists, and the evidence raises it above that prior."
- Argument: The plotted quantity is the stuck class, and it
is above the diagonal only for small priors: 0.063 at 0, 0.099 at 0.05,
0.173 at 0.15, then below it: 0.240 at 0.30 and 0.319 at 0.50. What
stays above the prior is P(barrier exists) (0.09, 0.26, 0.45, 0.65),
which is a different quantity and is not what the panel draws.
- Proposed change: "Middle: 'they never spread' grows with
your prior that a universal barrier exists: 6% with no barrier at all,
17% at my 15%, 32% at 50%. It stays below the chance that the barrier
exists (26% at my prior), because in most barrier universes we are alone
anyway."
- Tested: tables_v4.md Table E and the q_barrier lever in
integrate4_results.json.
- minor / model4.py BASE comment on w_fast: "Pre-data: one
log-uniform prior from 3 decades above 1 to A decades below gives
E[3/(A+3)] = 0.19"
- Argument: The arithmetic is right (I get 0.189), but the
result is set by two arbitrary bounds. With the same construction w_fast
is 0.26 for a slow range of 3-30, 0.16 for 3-200, 0.30 if rates up to
1e6 per window are allowed and 0.39 for 1e10. The matching posteriors
are 0.68, 0.82, 0.75 and (6 decades with slow 3-30) 0.64. The derivation
therefore supports "somewhere between 0.16 and 0.40", and the lever and
scan vary w_fast and the slow range independently, which the
single-prior story does not allow.
- Proposed change: Change the comment and the page's
description of this prior to: "a judgement; a single log-uniform prior
on the rate gives 0.16 to 0.40 depending on where it is cut off", and
quote the headline as 0.64 to 0.82 over that family.
- Tested: sens.py: wfast_consistent() by Monte Carlo (2
million draws) and the four 'consistent' variants.
- minor / Printed precision throughout: two-digit percentages
for SIA and typical-observer quantities, single-run camp and future
rows, "from 0.2 million simulated universes"
- Argument: Monte Carlo error is not the binding uncertainty
for the Earth-given numbers (effective sample size 21% of n; standard
error 0.003 on the pooled headline), but several printed numbers are
noisier than two digits. In the trial: camps are single runs with
typical-observer effective sample sizes of 30 to 500 (30 for
'Expansionist, Carter steps, long-lived planets', printed as 0.64) and
SIA sizes of 9 to 297; future rows have SIA sizes of 22 to 109 and
Earth-given sizes down to 651 ('expansion shown infeasible') and 816
('second origin confirmed'). In my scan re-runs the typical-observer
effective sample size is 65 to 2,900 at n = 30,000. The 250,000 run
improves these about eightfold, which fixes the Earth-given rows but
leaves SIA camp rows below 2,500 and as low as about 80.
- Proposed change: Print Earth-given and typical-civilisation
numbers to the nearest point; typical-observer camp numbers to the
nearest 5 points; SIA forecasts as "about 95%" and "about 5%"; no SIA
class shares (see the SIA objection). State the effective sample size,
not the number of universes, in the hero caption.
- Tested: shap.py listing of effective sample sizes for every
camp, lever and future row in integrate4_results.json; base_diag.py
weight concentration (typical observer: 2.2% of n, top 1,000 of 180,000
samples carry 21%; SIA without tilt: 45, top 10 carry 37%).
- minor / index.html line 86 "Four hundred alternative sets of
assumptions"; charts1.js line 200 aria label; page_draft.md "I drew 12
complete alternative sets"
- Argument: The count in the text is bound to the data (12 in
the trial) while the figure title and aria label are hard-coded as four
hundred. If the 400-draw scan does not land, the page contradicts
itself.
- Proposed change: Bind the title and aria label to scan_n,
and do not publish until scan_n is 400.
- Tested: integrate4_scan.json has 12 rows; grep of
index.html and charts1.js.
Checked and found correct
- Headline numbers reproduce with independent seeds (3 x 60,000 and 2
x 60,000): prior P(alone) 0.586-0.587; posterior 0.777-0.781 (Earth
given), 0.757-0.761 (typical, all time), 0.773-0.776 (typical, to date),
0.519-0.527 (typical observer); stuck 0.165-0.169; P(barrier) 0.148 to
0.256-0.259.
- The contradicted class goes from 0.353 prior to 0.005 posterior, and
the six surviving classes have mean likelihoods within a factor 1.5
(0.36 to 0.54). The page's sentence that its share is handed to the
others roughly in proportion to their priors is accurate: renormalised
prior vs posterior is 0.406/0.388, 0.329/0.336, 0.050/0.040,
0.149/0.169, 0.047/0.042, 0.018/0.021.
- The page's statement that the data cannot judge whether life starts
easily is correct and understated: marginal likelihood relative to base
is 1.00-1.01 for w_fast from 0.05 to 0.8 (Earth given) and posterior
P(fast) equals the prior at every lever setting.
- Class boundaries are harmless for the headline: P(N_ever < 0.1,
0.3, 1, 3, 10) posterior = 0.736, 0.756, 0.777, 0.796, 0.815; the
Poisson version exp(-N) gives 0.767 (prior 0.574). Only 'en route' is
threshold-sensitive (0.058, 0.038, 0.019 for x >= 0.001, 0.01, 0.1)
and 'expanders hold 1% of the universe' is 0.105, 0.085, 0.066 for the
same thresholds.
- The Shapley code is correct: recomputing all 24 orderings from the
16 stored subsets reproduces the stored contributions exactly, and the
round-2 bug (SSA columns blowing up with the local term off) is gone
(evidence values are finite, 0.11 to 0.73).
- The slow-range maximum of 100 decades is not what drives the result:
maxima of 30, 60, 100, 200 give posteriors 0.71, 0.76, 0.78, 0.80, and a
slow camp fixed at 12 decades gives prior 0.577, posterior 0.758.
- w_fast provenance arithmetic: E[3/(A+3)] with A log-uniform on 3-100
is 0.189, as the BASE comment says.
- P(barrier) posterior is robust to the continuous expansion prior:
0.266, 0.256, 0.241, 0.227 for W_exp 1-4, 1-8, 1-16, 2-20, and
0.239-0.260 across three c_claim priors.
- Importance sampling is adequate for the Earth-given and
typical-civilisation columns: effective sample size 21.5%, 16.5% and
21.4% of n; the top 1,000 of 180,000 samples carry 6-7% of the
weight.
- The project's scan is reproducible: my re-run of draws 0-11 (n =
30,000) matches integrate4_scan.json within 0.02 on every Earth-given
value.
- Round-2 fixes that held up under test: per-lineage evidentness
(unnoticed is now 0.04 and returns about 0.8 x q_cc), w_fast set to a
pre-data value, all-orders attribution, a tilted sampler for SIA, and
the explicit barrier atom in place of the 30-decade tail.
- Table E's lever values reproduce: w_fast 0.5 gives 0.634 and w_fast
0.8 gives 0.485 in my runs, against 0.57 at 0.6 and 0.48 at 0.8 in the
table.
Not checked
- Every number from the 250,000-sample run: integrate4_results.json
still had n_per_run = 30,000 when I finished, so all page numbers I
checked are the trial's.
- The 400-draw scan: only 12 trial draws were on disk. My statements
about it rest on my own re-run of draws 0-69 at n = 30,000 (the project
uses 100,000), so the 94% majority share is a forecast of what the full
scan will show, not a reading of it.
- q_barrier = 0.15 'range 0.05-0.30 [see studies/expansion_analogs]':
that study has code, data and figures but no report or referee report,
so the prior's stated evidential basis could not be checked.
- 'from ranges the critics considered defensible': I found no record
of any critic agreeing to the scan ranges.
- Sandberg, Drexler and Ord's figures (prior 52% alone in the Milky
Way; 53-99.6% after the Fermi observation): taken from the project's
evidence/behavioral.md and consistent with my memory. The current arXiv
abstract page for 1806.02404 does not print them, so they need checking
against the paper before being cited.
- The SIA forecasts (95% for a second origin, etc.): I did not re-run
the tilted future rows; my judgement that they are qualitatively safe
rests on posterior P(fast) = 0.98 under SIA and one tilted base
run.
- The playground's cell re-weighting (cells4.json): not tested. It
cannot vary the slow range, step depth or f factors, which together
account for more of the prior than the six sliders it does expose.
Code errors
- report/site/bind.js / lines 9-10 (shk and sh)
- Problem: Every Shapley contribution is multiplied by
(pooled posterior - prior) / (ablation end - ablation start) so that the
bars sum to the pooled-run total. In the trial the factor is 1.05, which
turns the stored +0.214 for the silence into the printed +23
points.
- Fix: Print the stored contributions unscaled and quote the
ablation run's own end value, or compute the 16 subsets on the same
pooled seeds as the base.
- Impact: Printed attributions differ from the computed ones
by up to 1.1 points in the trial; smaller, but still unjustified, at
250,000.
- report/site/charts1.js and bind.js / charts1.js line 17
(fam) and line 253 (playground); bind.js line 8 (spread)
- Problem: 'Someone did spread' is computed as 1 - alone -
stuck. That equals 'another civilisation arose in our Galaxy and someone
spread' (0.054), not the classes the label names (en route + unnoticed +
hidden + contradicted = 0.108). 0.053 of the spread classes is inside
'alone'.
- Fix: spread = en_route + unnoticed + hidden + excluded,
with alone shown as empty_universe + rare for the three-card partition;
or relabel the third card.
- Impact: Hero card, callout, playground lead and the
future-observations chart all understate 'someone spread' by about half
(6% printed, 11% in the model).
- models/model4.py / line 513, pool():
prior_stats=runs[0]["prior_stats"]
- Problem: The pooled result takes the prior statistics
(including the headline prior P(alone) and the implied-prior quantiles)
from the first run only, while the posterior pools eight runs.
- Fix: Average prior_stats over runs (plain mean for
probabilities; pooled samples or mean for quantiles).
- Impact: Small: standard error on the prior 58% is 0.003 at
30,000 and 0.001 at 250,000, but 'before' and 'after' are not estimated
from the same samples.
- models/scan4.py / draw(), lines 17-31
- Problem: The hyperprior is one-sided on the two biology
knobs that set the answer: w_fast is log-uniform on 0.05-0.6 (median
0.17, 17% above 0.4) and the slow-range maximum is log-uniform on
10-100, so the base value of 100 is the scan's upper edge. The lower
bound of W_exp, p_here, eps_pocket, fast_decades and the f_gate range
are held fixed.
- Fix: Draw w_fast uniformly on 0.05-0.9 (or report the scan
stratified by w_fast), let the slow maximum range to 200, and add the
fixed knobs. Report the share of draws with alone above one half
separately for each convention.
- Impact: 'Alone is the majority answer in over 99%' becomes
94% on the project's own draws 0-69 and 75% (Earth given), 54% (typical
civilisation), 13% (typical observer) with w_fast uniform on 0.05-0.9
and the zero-step weight on 0.1-0.7.
- report/site/index.html and charts1.js / index.html line 86;
charts1.js line 200
- Problem: 'Four hundred alternative sets of assumptions' is
hard-coded in the figure title and aria label while the body text binds
scan_n (12 in the trial).
- Fix: Bind both to scan_n.
- Impact: Self-contradiction on the page if the full scan is
not in place.
- models/model4.py / line 427: fac = -np.expm1(-np.minimum(dE,
700)) / ...
- Problem: RuntimeWarning 'overflow encountered in expm1' in
several of my runs (for example slow_decades 3-200 and the
all-f-factors-1 variant): dE is occasionally a large negative number,
which means the cumulative pre-emption exposure E decreased between grid
times. The np.where on the next line masks the value, so the result is
finite, but a decreasing cumulative exposure should not occur. I did not
trace the cause.
- Fix: Clip dE to [0, 700] before expm1 and assert E is
non-decreasing, or find why Nlag or the kernel sum decreases.
- Impact: Not traced; affects only the typical-civilisation
denominators (D_all, D_now) for the samples concerned.
Tables
A. Prior sensitivity (model4, 2 x 60,000 samples per row, seeds 1-2;
Earth-given standard error about 0.004) 'identity' = P(alone | not in
the contradicted class) under the prior, with no likelihood applied.
variant prior contradicted identity | Earth-given typical-all typical-now observer | stuck P(barrier)
base 0.587 0.352 0.801 | 0.781 0.761 0.776 0.527 | 0.165 0.256
slow range 3-30 0.490 0.436 0.714 | 0.708 0.674 0.694 0.442 | 0.220 0.291
slow range 3-60 0.552 0.383 0.772 | 0.756 0.732 0.748 0.497 | 0.184 0.268
slow range 3-200 0.624 0.319 0.828 | 0.804 0.789 0.803 0.559 | 0.147 0.245
slow 3-30, w_fast 0.26 (consistent) 0.464 0.453 0.694 | 0.680 0.645 0.666 0.409 | 0.240 0.304
slow 3-200, w_fast 0.16 (consistent) 0.646 0.303 0.840 | 0.823 0.809 0.821 0.592 | 0.133 0.236
fast up to 6 decades, w_fast 0.30 0.532 0.391 0.767 | 0.749 0.740 0.754 0.508 | 0.188 0.267
fast 6 decades, slow 3-30, w_fast 0.40 0.402 0.494 0.646 | 0.639 0.612 0.632 0.379 | 0.270 0.316
step depth 2-5 0.551 0.376 0.776 | 0.746 0.733 0.747 0.492 | 0.190 0.270
zero-step weight 0.5 0.536 0.386 0.771 | 0.741 0.721 0.737 0.471 | 0.190 0.273
w_fast 0.5 0.417 0.470 0.683 | 0.634 0.604 0.628 0.346 | 0.270 0.321
w_fast 0.5, slow 3-30 0.358 0.523 0.605 | 0.578 0.533 0.560 0.301 | 0.312 0.347
w_fast 0.5, steps 2-5 0.372 0.500 0.642 | 0.564 0.551 0.572 0.296 | 0.321 0.350
slow 3-30, steps 2-5 0.445 0.466 0.671 | 0.655 0.629 0.646 0.400 | 0.260 0.313
slow 3-60, steps 2-5 0.513 0.409 0.742 | 0.716 0.698 0.713 0.459 | 0.213 0.284
w_fast 0.5, slow 3-30, steps 2-5 0.306 0.556 0.546 | 0.490 0.464 0.486 0.246 | 0.377 0.384
w_fast 0.8 0.248 0.590 0.494 | 0.485 0.421 0.452 0.209 | 0.375 0.388
W_exp 1-4 0.587 0.374 0.815 | 0.793 0.774 0.789 0.512 | 0.152 0.266
W_exp 1-16 0.587 0.317 0.775 | 0.755 0.735 0.751 0.560 | 0.191 0.241
W_exp 2-20 0.587 0.279 0.749 | 0.728 0.709 0.726 0.568 | 0.218 0.227
q_barrier 0, W_exp 1-30 (no atom) 0.587 0.328 0.786 | 0.777 0.758 0.773 0.599 | 0.158 0.000
q_barrier 0.15, W_exp 1-30 0.587 0.279 0.745 | 0.721 0.702 0.719 0.557 | 0.229 0.226
c_claim log-uniform 1e-6..1 0.587 0.257 0.744 | 0.762 0.750 0.763 0.525 | 0.159 0.239
c_claim uniform 0.5..1 0.587 0.362 0.807 | 0.784 0.763 0.778 0.528 | 0.165 0.260
c_claim uniform 0..0.2 0.587 0.328 0.787 | 0.772 0.756 0.771 0.526 | 0.162 0.249
long-lived hosts (p_cap_short 0, no UV penalty, no hazard) 0.576 0.356 0.795 | 0.767 0.457 0.664 0.207 | 0.175 0.260
long-lived hosts + red dwarfs alive 0.6 0.572 0.358 0.792 | 0.765 0.438 0.659 0.195 | 0.176 0.261
p_cap_short 0.3, no UV penalty 0.575 0.359 0.794 | 0.774 0.682 0.718 0.419 | 0.169 0.259
w_fast 0.5 + long-lived hosts 0.410 0.472 0.677 | 0.613 0.244 0.467 0.094 | 0.286 0.327
(typical-all-time effective sample size is 1,400-2,000 of 120,000 in the three long-lived rows; +/- 0.02)
B. Where the 0.586 prior comes from (base_diag 180,000 samples; extra.py 40,000 per variant)
fast camp (20%): P(alone | fast) = 0.138, contributes 0.027. slow camp (80%): P(alone | slow) = 0.697, contributes 0.558.
by number of hard steps (share; P(alone); given fast; given slow): 0 (0.349; 0.445; 0.000; 0.557), 1 (0.317; 0.526; 0.014; 0.652), 2 (0.204; 0.717; 0.235; 0.839), 3 (0.097; 0.878; 0.576; 0.951), 4 (0.033; 0.967; 0.875; 0.991)
sterile Galaxy (fewer than one inhabited planet) 0.344; inhabited but no other technology 0.242
remove one ingredient: no slow camp 0.135; all slow 0.698; no candidate steps 0.453; all four f factors = 1: 0.452; no steps and slow maximum 12: 0.143
slow range fixed at 12 / 20 / 40 / 100 decades: prior 0.577 / 0.679 / 0.754 / 0.798, posterior 0.758 / 0.831 / 0.875 / 0.896
implied prior, log10 P(civilisation per habitable-zone planet): 1% -80.8, 5% -55.0, 25% -21.8, 50% -11.8, 75% -7.0, 95% -3.6, 99% -2.4; mass below -20: 0.28; below -30: 0.16; below -50: 0.06; between -12 and -9: 0.14; above -9: 0.37
C. Identity check, base (180,000 samples) prior alone 0.586; prior
contradicted 0.353; alone and contradicted 0.068; P(alone | not
contradicted) = 0.800 posterior alone: silence at home only 0.805; all
silence terms 0.814; timeline only 0.525; everything 0.777 Bayes factor
on alone: home silence 2.9; all silence terms 3.1; timeline 0.78;
everything 2.5 barrier: mean likelihood 0.515 with, 0.257 without; Bayes
factor 2.0; identity part 1/(1 - 0.414) = 1.71; posterior split: barrier
and alone 0.136, barrier and stuck 0.123; P(barrier | N_ever >= 1)
0.15 to 0.55 other silent atoms: everyone hides 0.030 to 0.052; low
footprint forced 0.050 to 0.084
D. Attribution, Earth-given, from the 16 stored subsets (trial, n = 30,000)
term Shapley (points) range over 24 orderings Bayes factor on alone (range)
early -0.077 -0.096 to -0.059 0.69 (0.67-0.71)
late +0.027 +0.019 to +0.038 1.14 (1.11-1.17)
local +0.214 +0.183 to +0.252 2.77 (2.61-2.98)
surveys +0.022 +0.006 to +0.037 1.10 (1.05-1.16)
interaction early x local +0.034. Typical-observer column: early -0.100, late +0.017, local +0.013, surveys +0.014; P(barrier) with all terms off 0.888.
E. Scans (n = 30,000 per draw), 5/25/50/75/95%
project draws 0-69 widened (w_fast U(0.05,0.9), zero-step weight U(0.1,0.7)), 110 draws
prior alone 0.31/0.42/0.50/0.60/0.70 0.14/0.28/0.39/0.49/0.59
posterior, Earth given 0.50/0.63/0.76/0.81/0.89 0.34/0.51/0.62/0.72/0.83
posterior, typical all time 0.41/0.56/0.68/0.75/0.84 0.23/0.39/0.51/0.62/0.78
posterior, typical observer 0.19/0.36/0.44/0.56/0.67 0.10/0.20/0.30/0.39/0.56
lift 0.12/0.17/0.21/0.27/0.35 0.11/0.16/0.21/0.28/0.36
identity lift 0.13/0.16/0.20/0.25/0.31 0.14/0.17/0.21/0.26/0.34 (correlation with lift 0.79 / 0.84)
Bayes factor on alone 1.6/2.2/2.8/3.6/4.7 1.7/2.0/2.7/3.5/4.7
share with alone > 0.5 0.94 / 0.84 / 0.39 0.75 / 0.54 / 0.13 (Earth given / typical all time / typical observer)
gap Earth-given minus typical 0.02/0.05/0.06/0.09/0.15 0.02/0.05/0.08/0.13/0.19
barrier Bayes factor 1.4/1.6/2.1/2.5/3.6 1.7/2.1/2.6/3.2/5.1 (log correlation with identity 0.95 / 0.96)
alone > 0.5 by prior alone: [0.2,0.3) 1 of 3; [0.3,0.4) 83%; >= 0.4 100% | <0.2 8%; [0.2,0.3) 57%; [0.3,0.4) 70%; >= 0.4 100%
F. SIA split against the closed form (prior atoms renormalised)
closed form 0.695 / 0.187 / 0.118 (stuck / unnoticed / hidden); pooled
trial 0.688 / 0.213 / 0.099 (effective sample size 807); camps base row
0.66 / 0.18 / 0.16; my tilted run 0.695 / 0.201 / 0.104 (238)
G. Marginal likelihood relative to base (trial camps and levers):
w_fast 0.05 to 0.8: 1.00-1.01 (Earth given), 1.02-0.90 (typical all
time), 0.89-1.39 (typical observer). Largest camp ratios, Earth given:
Carter hard steps 2.4, LUCA dating 0.54, biology optimist 0.57.
Advice
THE HEADLINE I WOULD SIGN
"One thing is established by observation: nobody of the
planet-claiming, evident kind has reached the Solar System, although
there has been time many times over. That removes about a third of what
one could have believed beforehand and multiplies the odds that we are
the only civilisation our Galaxy has produced by about 2.5. Where that
leaves you depends on a judgement the evidence does not touch: if you
think life is hard to start, we are probably alone in the Galaxy, at
about three to one; if you think it starts easily, it is close to evens
between being alone and others having arisen without ever
spreading."
WHAT YOU MUST BELIEVE (Earth-given unless stated; from the levers, my
sensitivity runs and the scans)
OTHER ADVICE
Present the evidence as an odds multiplier. It is nearly constant
across biology priors (2.3 to 2.7), nearly additive across observations
(0.7 x 1.1 x 2.8 x 1.1), and it makes the dependence on the expansion
priors visible (1.35 for the expansion sceptic, 8 for Hart crossed). A
reader can apply it to their own prior in their head, which the "+20
points" framing does not allow.
Say the cancellation out loud. Early life favours an easy origin;
the silence disfavours it; on the model's base priors the two cancel to
a Bayes factor of 1.00. That is a clean, checkable statement and, as far
as I can tell from the briefs, not one the literature makes in this
form. It also depends on the dating: with LUCA dating the timeline wins,
with fossils-only the silence wins, so give it with that range.
Show the implied prior. One sentence and one small chart of the
prior on civilisations per habitable planet would let a reader see at a
glance that the answer is "how much prior mass sits below one in ten
billion".
Make the playground expose the three ingredients that carry the
prior and are currently fixed: the slow range, step depth and the f
factors. The six sliders offered cover less of the prior than those
do.
The page's own candour is uneven. The before-and-after caption
("its share is handed to the others in proportion to what they already
had; that is why the priors matter so much") is exactly right. The scan
paragraph, the first callout and the barrier callout then present the
same redistribution as a robustness finding, as evidence for aloneness
and as bad news respectively. Bring those three into line with the
caption.
Do not publish on the trial numbers. With the 250,000 run and the
400-draw scan in place, re-check three bound sentences that I expect to
change: the scan's "over 99%" (I expect about 94%), the Shapley bars
(the rescale factor should fall to about 1.00), and the playground lead
(17% against the hero's 16%).
Critic: the model as
described on the page
Overall verdict
Not ready to publish from this lens, though the problems are in the
wording and captions, not the arithmetic. Every bound number I
recomputed matches the results file (the 250,000-sample run that landed
at 07:29, and my own independent 360,000-sample rerun agrees to 0.002).
The text around those numbers misdescribes them in about ten places. The
single most important change is the three headline cards: "78% nobody
else / 16% never spread / 6% someone did spread" sum to 100 only because
the third is computed as a remainder. By the model's own classes
"someone did spread" is 11%, and 5 of the 78 "alone" points are
universes where expanders from another galaxy are already here unnoticed
(1.5) or hold over 1% of the universe and are on the way (3.8). The hero
bar directly above the cards shows 39 + 34 = 73, so the mismatch is
visible. Next in importance: the section 09 caption (index.html only)
names the wrong top observation and gets a direction backwards; the
"three dials" caption is contradicted by its own chart in two of three
panels; the second sentence of section 01 is wrong by a factor of
several hundred (crossing the Galaxy at probe speed takes about two
billion years, not a few million); and section 10 states "behind us",
"unclaimed" and "ahead of us" more strongly than the numbers allow. Note
that page_draft.md is stale against index.html (sections 07, 09 and 11
differ), so a reviewer reading only the draft never sees the section 09
error.
Objections
- major / Hero cards and section 01 callout: "78%. Nobody
else, ever ... we are the first" / "16%. They arise, and never spread" /
"6%. Someone did spread. They are here in a form we have not noticed, or
hiding, or still on their way from another galaxy"; "Everything in which
someone did spread, whether unnoticed, hiding or still on the way,
shares the remaining 6%". Code: bind.js line 8
spread = 1 - s.alone - s.posterior.stuck; charts1.js line
17 fam.
- Argument: The three cards are not a partition of the seven
classes. "Alone" is N_ever < 1, which overlaps the spread classes
whenever the expanders come from another galaxy. The third card is a
remainder (1 - alone - stuck), so the sum is 100 by construction, but
its description (unnoticed + hiding + on the way) is the class sum,
which is 11%, not 6%. Of the 78 "alone" points, 3.8 are en-route
universes, 1.0 unnoticed, 0.4 hidden, 0.2 pocket. So "we are the first"
and (section 10) "the Galaxy is unclaimed" are false in about 7% of the
alone cases. The hero stacked bar above the cards shows 39% + 34% = 73%
for the two "nobody" blocks and 4 + 4 + 2 + <1 = 11% for spread, so
the cards contradict their own chart. The camp chart has the same
mismatch, largest for "Expansionist (fast, intergalactic)": printed
alone 87%, bar 75%.
- Proposed change: Make the cards a true partition from the
classes. Card 1: "73%. Nobody else, and nobody coming. No other
civilisation has arisen in the Milky Way and none is expanding toward
us." Card 2: "16%. They arise, and never spread." Card 3: "11%. Someone
did spread. About 4% still on their way from another galaxy, about 7%
already here unnoticed or hiding." Callout: "The chance that no other
civilisation has ever arisen in our Galaxy is 78%, up from 58%. In 73%
nobody has arisen here and nobody is on the way; in the other 5% someone
from another galaxy is already expanding." In code: alone_card =
posterior.empty_universe + posterior.rare; spread = en_route + unnoticed
+ hidden + excluded. Apply the same to the camp chart's right-hand
number, the playground readout and the section 09 columns, or label that
number "no other civilisation ever arose here (includes cases settled
from outside)".
- Tested: integrate4_results.json (n_per_run 250000),
base.schools.site: p_no_other_ever_in_galaxy 0.7819; posterior empty
0.3909 + rare 0.3373 = 0.7282; stuck 0.1625; en_route 0.0403 + unnoticed
0.0425 + hidden 0.0218 + excluded 0.0047 = 0.1093; 1 - alone - stuck =
0.0556. My rerun (6 seeds x 60,000, keep=True; an1.py): alone and
en_route 0.0382, alone and unnoticed 0.0096, alone and hidden 0.0037,
alone and excluded 0.0020, total 0.0536. Per camp, alone minus (empty +
rare): base +0.054, Expansionist +0.125, Expansionist with Carter steps
+0.089.
- major / index.html section 09 figcaption (absent from
page_draft.md): "A second, independent origin of life would do the most:
'alone' would fall to X and 'never spread' would rise to Y. Learning
that lasting interstellar settlement is impossible would move as much
probability the other way."
- Argument: Both statements are wrong against the chart's own
sort key (sum of absolute moves of the three answers). "Settlement shown
infeasible" moves the most (0.61) and is the top row; the second origin
is second (0.41). And it does not move "the other way": it moves alone
down (78 to 54) and never-spread up (16 to 46), the same direction as a
second origin and further. The result that moves the other way is "shown
feasible" (alone 88, never-spread 4, move 0.25).
- Proposed change: "Learning that lasting interstellar
settlement is impossible for everyone would move the answer most:
'alone' would fall to 54% and 'never spread' would rise to 46%, close to
a coin flip. A second, independent origin of life comes next ('alone'
58%, 'never spread' 31%). Showing that settlement is feasible moves the
other way: 'never spread' falls to 4% and 'alone' rises to 88%." Also
soften "Most of the effort in this field goes into the observation that
would move it least": the red-dwarf and planet-lifetime rows move the
answer as little as the radio row (all under 0.02).
- Tested: integrate4_results.json future[...].schools.site,
250k run. Infeasible: alone 0.535, stuck 0.465, spread 0, move 0.606,
forecast 0.256. Second origin: 0.578 / 0.311 / 0.110, move 0.407,
forecast 0.313. HWO biosignature: move 0.348. Feasible: 0.883 / 0.039 /
0.078, move 0.246, forecast 0.591. Base 0.782 / 0.1625 / 0.056. Sort
reproduced from charts1.js drawFuture.
- major / Section 02 lever caption: "Middle: 'they never
spread' grows with your prior that a universal barrier exists, and the
evidence raises it above that prior. Right: 'here and unnoticed' simply
returns the prior you put in. Nothing observed so far tests
it."
- Argument: Both are contradicted by the chart, which draws
an "answer = prior" diagonal on these two panels. Middle: 'never spread'
is above the barrier prior only up to about 0.15-0.2 (5% in, 10% out;
15% in, 16% out) and below it after (30% in, 24.5% out; 50% in, 32%
out). The quantities that do rise above their priors are P(barrier
exists) (15 to 26) and the stuck class against its own prior (9.6 to
16.4). Right: 'unnoticed' returns between about half and nine-tenths of
the prior put in (2% in, 2.4% out; 5% in, 4.3% out; 10% in, 7.5%; 25%
in, 16%; 50% in, 27%), so the points sit up to 23 points under the
diagonal. The evidence is not neutral on it either: the posterior
probability of the low-footprint regime rises from 5% to 8.3%.
- Proposed change: "Middle: 'they never spread' grows with
your prior that a universal barrier exists, from 6% with no barrier to
32% at a prior of 50%. It ends above where it started before the
evidence at every setting (10% to 16% at my prior), but it stays below
the barrier prior itself once that prior passes about 20%, because most
barrier universes are ones where nobody else arose anyway. Right: 'here
and unnoticed' follows the prior you put in and returns roughly half to
nine-tenths of it (5% in, 4% out; 50% in, 27% out). The silence neither
confirms nor refutes it." On the middle panel replace the diagonal with
the stuck class's own prior curve, as on the left panel.
- Tested: integrate4_results.json levers (250k), site.
q_barrier 0 / 0.05 / 0.15 / 0.30 / 0.50: posterior stuck 0.059 / 0.098 /
0.164 / 0.245 / 0.324; prior stuck 0.041 / 0.059 / 0.096 / 0.153 /
0.228. q_cc 0 / 0.02 / 0.05 / 0.10 / 0.25 / 0.50: posterior unnoticed
0.009 / 0.024 / 0.043 / 0.075 / 0.160 / 0.269; prior unnoticed class
0.011 / 0.018 / 0.030 / 0.050 / 0.108 / 0.205.
base.schools.site.regime.low_footprint 0.083. charts1.js drawLevers
lines 176-177 set diag: true for both panels.
- major / Section 01: "The Galaxy is more than ten billion
years old, and crossing it takes a few million years even at the speed
of our slowest probes." Figure note: "in a Galaxy that has had time to
be crossed thousands of times". Section 04: "Four billion years is
enough to cross the Galaxy a thousand times at one ten-thousandth of the
speed of light."
- Argument: Arithmetic. Voyager 1 travels at about 17 km/s =
5.7e-5 c. Crossing 100,000 light years at that speed takes about 1.8
billion years, not a few million; a few million years needs about 0.03c.
At 1e-4 c, four billion years covers 400,000 light years, which is four
crossings, not a thousand; a thousand needs about 0.025c. The model
agrees with the arithmetic and not the text: model4.py line 349 has
T_fill = max(0.3, 1e-4/v) Gyr, which is 1 Gyr at 1e-4 c and never under
0.3 Gyr, so in the model the Galaxy can have been filled at most a few
tens of times. The conclusion (time is not the constraint) survives; the
stated numbers do not, and they are the first numbers a physicist reader
will check.
- Proposed change: Section 01: "The Galaxy is more than ten
billion years old. Crossing it takes about a million years at a tenth of
the speed of light, and even at the speed of our present probes it takes
one to two billion years, a fraction of the time available." Figure
note: "in a Galaxy that has had time to be settled many times over".
Section 04: "Four billion years is enough to cross the Galaxy a few
times even at one ten-thousandth of the speed of light, the speed of our
own probes and of the stars' random motions, and hundreds of times at
one per cent of light speed."
- Tested: 1e5 ly / 5.7e-5 c = 1.76e9 yr; 1e-4 c x 4e9 yr =
4e5 ly. model4.py line 349. evidence/expansion.md lines 9, 22-23
(Carroll-Nellenback 2019: front crossing at most 300 Myr from stellar
motions; under about 1 Gyr at 30 km/s). I also swapped the fill-time
floor for a cap (clip(1e-4/v, 0.001, 0.3)) on two paired seeds: alone
0.7871 vs 0.7869 and 0.7813 vs 0.7811, so the model result is
insensitive and only the text is wrong.
- major / Section 10: "If we are alone (78%), whatever made
civilisations rare is behind us. ... Nothing in the silence then says
that we cannot last or spread, and the Galaxy is unclaimed." and "If
others arose and never spread (16%), the obstacle is ahead of us. The
chance that a universal barrier to lasting expansion exists rises from
15% before the evidence to 26% after it."
- Argument: Four overstatements against the model's own
outputs. (1) Within "alone" the chance of a universal barrier is 18%,
slightly above the 15% prior, so in about one alone case in six the
obstacle is still ahead. More than half of the 26% barrier probability
(14 of 26 points) sits inside the alone branch, yet the 26% is printed
in the never-spread card, where it reads oddly beside 16%. (2) "The
Galaxy is unclaimed" fails in about 7% of alone cases (5.4 of 78 points:
settlers from another galaxy here or en route). (3) "The obstacle is
ahead of us" holds for 72% of the never-spread branch. The other 28% has
no barrier, and in 95% of those cases the expected number of expanders
so far is under one: a few civilisations and nobody has happened to
expand yet, which says little about us. (4) The feasibility sentence
gives only the reassuring branch and labels p_exp > 1e-3 (at least
one civilisation in a thousand becomes a lasting expander) as "shown to
be feasible for us". Conditioning only on "no universal barrier" gives
alone 86% and never-spread 6%; the opposite outcome (forecast 26%) gives
alone 54%, never-spread 46%.
- Proposed change: Left card: "If nobody else has arisen here
(78%), whatever made civilisations rare is behind us. In 47% of all
cases the Galaxy holds no other life at all; in 31% life started
elsewhere and never reached technology. The silence then says almost
nothing about our own prospects: the chance of a barrier to expansion in
this branch is 18%, close to the 15% I started with. In about one of
these cases in fourteen the Galaxy is not ours alone, because someone
from another galaxy is here unseen or on the way." Right card: "If
others arose and never spread (16%), the likeliest reason, in about
three cases in four, is a barrier that would stop us too. In the rest
only a few civilisations arose and none has yet expanded. Across all
cases the chance that a universal barrier exists rises from 15% to 26%."
Following paragraph: "If lasting settlement is ever shown to be not
merely possible but something at least one civilisation in a thousand
achieves, 'never spread' falls to 4% and 'alone' rises to 88%. If it is
shown to be impossible for everyone, which the model gives a 26% chance,
the two answers become nearly even (54% and 46%)."
- Tested: My 360,000-sample rerun, site weights: P(barrier |
alone) 0.178; P(barrier and alone) 0.139; P(barrier and stuck) 0.116;
P(barrier | stuck) 0.72; among no-barrier stuck, share with N_ever x
p_exp < 1 = 0.954; conditioning on no barrier: alone 0.863, stuck
0.060; on p_exp > 1e-3: 0.881 / 0.039; on barrier: 0.545 / 0.455.
Results file: base.prior_stats.p_barrier 0.150, schools.site.p_barrier
0.2556, sub.stuck_barrier 0.117, stuck_many 0.014, stuck_few 0.032;
future exp_feasible alone 0.883, exp_infeasible alone 0.535. model4.py
lines 399-402 define the two observations as p_exp > 1e-3 and p_exp
< 1e-8.
- moderate / Section 01: "The 78% rests mainly on one
judgement the data cannot make for us: whether life starts easily on a
suitable planet. Someone confident that it does lands near 57%". Section
02: "The seven explanations reduce to three answers, and each one is
governed by a single prior."
- Argument: (a) The 57% (59% in the 250k run) is the camp
with a 60% prior that life starts easily. That is not "confident". At
80% the answer is 49%; at 90 / 95 / 99% it is 45 / 42 / 40%, with
never-spread at 40 / 42 / 43%, a tie. (b) "One judgement" understates.
The number of hard steps moves alone from 69% (none) to 92% (three or
four), as far as the life prior does, and index.html section 11 itself
says so. The counting convention moves it from 78% to 54% to 0%. (c)
"Each one is governed by a single prior" is false for never-spread: it
responds as strongly to the life prior (11% to 38% as w_fast goes 0.05
to 0.8) as to the barrier prior (6% to 32%). Alone also moves 21 points
with the barrier prior and 17 with the low-footprint prior.
- Proposed change: Section 01: "The 78% rests on three
judgements the data cannot make for us: whether life starts easily on a
suitable planet, how many improbable steps separate a microbe from a
technologist, and how we should count ourselves among possible
observers. Someone who gives easy life a 60% chance lands near 59%;
someone who is 90% sure lands near 45%, level with 'they arise and never
spread'." Section 02: "The seven explanations reduce to three answers,
and each has one prior that matters most. They are not independent:
'never spread' responds as strongly to the prior on easy life (11% to
38%) as to the prior on a barrier (6% to 32%)."
- Tested: Results file camps["Life starts easily (chemistry
optimist)"] (w_fast 0.6): site alone 0.586. Levers w_fast 0.05 to 0.8:
alone 0.855 to 0.487, stuck 0.110 to 0.376. q_barrier 0 to 0.5: alone
0.864 to 0.650. q_cc 0 to 0.5: alone 0.803 to 0.638. My runs
(run_var.py, 2 seeds x 60,000): w_fast 0.9 / 0.95 / 0.99 give alone
0.446 / 0.422 / 0.402, stuck 0.404 / 0.420 / 0.434. leverage4.json: no
hard steps 0.690, three or four 0.923, base 0.779. base.schools: ssa_obs
alone 0.539, sia 0.000.
- moderate / Section 08 figure note: "The chance that another
civilisation exists in the Galaxy right now is 8%." (bind.js now_site =
p_other_now_in_galaxy)
- Argument: Wrong key for the sentence. p_other_now_in_galaxy
is E[1 - exp(-N_now)] with N_now = N_ever x L_quiet / 1e10: the chance
that a home-grown civilisation is in its detectable, non-expanding phase
today. It ignores the universes classed as settled (unnoticed 4.3%,
hidden 2.2%, pocket 0.5%), where another civilisation is in the Galaxy
now by definition, including the 1.5% settled from outside while N_ever
< 1. Counting those gives about 13%.
- Proposed change: "The chance that another civilisation is
in the Galaxy right now is about 13%: 8% that a home-grown,
non-expanding one is in its detectable lifetime, plus the cases in which
settlers are already here unnoticed or hiding." Or keep 8% and say
exactly what it is: "The chance that a home-grown civilisation of
roughly our kind is active in the Galaxy right now is 8%."
- Tested: model4.py lines 375 and 478. Results file
base.schools.site.p_other_now_in_galaxy 0.0810. My rerun: E[1 if class
in {unnoticed, hidden, excluded} else 1 - exp(-N_now)] = 0.127 (site),
0.148 (ssa_all).
- moderate / Section 02 forecast note: "Treating Earth as a
given, the model expects a second origin of life in the Solar System
with probability 32%. Weighting crowded universes more, it expects one
with probability 95%." Forecast chart rows 1 and 2.
- Argument: The forecast is P(a second origin is announced
and accepted), with a 15% false-positive rate hard-wired (sg_fp = 0.15;
model4.py line 386: det = sg_fp + (1 - sg_fp)(1 - exp(-0.3 lambda))).
Even a lifeless universe scores 15%. The model's probability that a
second origin is really there is 19%, not 31-32%. The HWO row has the
same structure: 15% forecast, of which 10 points are the assumed survey
false-positive rate; the chance of a real detection is about 6%. A
reader will take the printed figure as the model's belief about
life.
- Proposed change: "Treating Earth as a given, the model puts
the chance that a second origin of life really exists within reach in
the Solar System at about 19% (31% that one is announced, since I allow
a 15% chance of a false alarm). Weighting crowded universes more, the
chance is 94%." Label the chart rows "is reported" or plot the
false-alarm-free probabilities, and state the assumed false-positive
rates (15% and 10%) in the note.
- Tested: My rerun: site-weighted E[1 - exp(-0.3 lambda)] =
0.192 and 0.15 + 0.85 x 0.192 = 0.313, matching the file's predictive
0.313; SIA 0.938 gives 0.947 (file 0.943). HWO: predictive 0.153 = 1 -
0.9 x E[(1 - p)^25], so P(real detection) = 1 - (1 - 0.153)/0.9 = 0.059.
BASE sg_fp = 0.15, hwo_fp = 0.10.
- moderate / Section 02: "Serious people defend each of these,
and the results below follow Olson and Ord (2021), Finnveden (2019) and
Cook (2022) where they overlap." Section 12 Sources list.
- Argument: Half right. The self-indication row agrees with
Olson and Ord (SIA pushes the chance of surviving to expand pessimistic)
and with all three that an empty Galaxy is excluded. On the most
consequential overlapping output it contradicts Finnveden and Cook.
Finnveden: under SIA "you should be almost certain that we'll encounter
other civilisations if we leave the galaxy ... 95% of the reachable
universe will already be colonised". Cook: under SIA "one should be
almost certain that there will be many GCs in our future light cone".
This model's SIA row puts 70% on a universal barrier, 70% on no expander
ever arising within reach, and 18% on expanders holding 1% of the
universe. The difference is structural: Finnveden floors the expansion
probability at 1e-4 and Cook has no impossibility atom; this model has a
15% atom at exactly zero, which SIA then selects. Separately, Finnveden
(15 Feb 2019) and Cook (23 Apr 2022) are EA Forum posts, not preprints
or papers, and the Sources paragraph lists unrefereed items without
them.
- Proposed change: "Serious people defend each of these.
Where the calculations overlap with earlier ones they agree on two
points: self-indication rules out an empty universe and pushes hard
toward a filter ahead of us (Olson and Ord 2021; Finnveden 2019; Cook
2022). They part on what follows. Finnveden and Cook do not allow
expansion to be impossible, and conclude under self-indication that
expanding civilisations will almost certainly fill our future. This
model allows it, and self-indication then puts 70% on a barrier that
stops everyone." Sources: add "Finnveden (2019) and Cook (2022) are
online research posts, not refereed papers."
- Tested: Fetched both EA Forum posts (text saved under the
critic’s working folder) and quoted from them; authors and dates
confirmed on the pages. arXiv:2106.13348 abstract page: Olson and Ord,
no journal reference, "The SIA alone pushes both estimates pessimistic".
Results file base.schools.sia: stuck 0.697, unnoticed 0.191, hidden
0.112, p_barrier 0.695, p_no_expander_in_reach 0.695,
p_expanders_hold_1pct 0.185. Agreement on the SSA side is fair: Cook
about 85% no grabby civilisation in the future light cone; this model's
site p_no_expander_in_reach is 0.756.
- moderate / Section 02 anthropics: "If Earth is simply a
given site and we ask what else is out there, the answer is the one
above." Section 01: "The observations remove one explanation almost
completely". Figure note: "the common worry that 'typicality' changes
everything is not borne out".
- Argument: A round-2 objection (anthropics critic, moderate)
is hidden, not fixed. The +22 points from "nobody is evidently here"
count as evidence only if a civilisation like ours could have arisen in
a claimed Galaxy, or if typicality reasoning is accepted. If our being
here unclaimed is treated purely as a precondition of our existence, the
local term carries no information, the evident-settlement class keeps
its 35%, and alone is 56%, not 78%. That reading has real defects (the
round-2 critic listed them), but it is the reading many physicists
default to, and the page does not mention it. Also, model4.py's
docstring says the "Earth as a given" column is numerically SSA among
Sun-like hosts at our epoch. The page presents it as the convention-free
baseline, so "typicality does not change everything" partly compares one
typicality assumption with two others.
- Proposed change: Add after the first sentence of the
anthropics paragraph: "(Numerically this is the same as asking what a
typical civilisation around a Sun-like star would see today.) One
further reading is not shown: if an unclaimed Earth is simply a
precondition for our being here, the local silence carries no
information, evident settlement keeps its 35%, and the chance that we
are alone stays at 56%. I do not use that reading, because it makes us a
fluke survivor in most of those universes, but the 22 points credited to
the silence depend on rejecting it."
- Tested: Results file ablation["early+late+surveys"] (local
term off), site: alone 0.563, excluded 0.351, stuck 0.108. model4.py
docstring line 29. critique/redteam2.md, anthropics critic, objection 5
("finding ourselves unclaimed is entailed by our existence and is not an
observation ... survives only under a bare-precondition or
contemporaries-only reading").
- moderate / Section 02: "To check that the result is not a
product of my own choices, I drew 12 [400] complete alternative sets of
priors at random, from ranges the critics considered defensible"; figure
title "Four hundred alternative sets of assumptions"; note "'alone' is
the majority answer in over 99% of them."
- Argument: (1) The scan cannot test whether the result is a
product of the author's choices, because its ranges are those choices.
scan4.py's docstring says every prior is "redrawn at once, centred on
BASE". The life prior is drawn log-uniformly on 0.05-0.6 (median 0.17;
about one draw in six above 0.4), so "alone is the majority in over 99%"
is fixed by the range: at the top of the range the lever still gives
59%, and it drops below half only above about 0.75, which the scan never
visits. (2) "Ranges the critics considered defensible" is not documented
anywhere I could find; the critics gave ranges for a few priors only
(w_fast 0.09-0.23 pre-data, q_barrier 0.05-0.30, q_cc 0.02-0.10), and
the scan's are wider or different. (3) The scan on disk has 12 draws
while the figure title and the chart's aria label hard-code "four
hundred".
- Proposed change: "To check that the result does not hinge
on any single one of my choices, I redrew all the disputed priors at
once, 400 times, from ranges centred on my own (the prior that life
starts easily, for example, between 5% and 60%), and re-ran everything."
Note: "... Within these ranges 'alone' is the majority answer in over
99% of re-runs. That is a statement about the ranges: a reader more than
about 75% sure that life starts easily is outside them and gets a
different answer (see the left panel above)." Bind the figure title and
aria label to scan_n, and do not publish until integrate4_scan.json
holds the full run.
- Tested: scan4.py lines 1 and 19 (w_fast = lg(0.05, 0.6)).
integrate4_scan.json has 12 rows; w_fast values 0.059 to 0.369; site
alone 5/50/95% = 0.57 / 0.745 / 0.88; raised in 12 of 12. index.html
line 86 and charts1.js line 200 hard-code the count. Levers: w_fast 0.6
gives 0.586, 0.8 gives 0.487.
- moderate / Section 08 heading and text: "The honest range
spans fifty powers of ten"; "Sandberg, Drexler and Ord made this point
in 2018, and it survives every measured input I could add. What the
evidence does is cut away the right-hand side."; note "a 90% range from
10^-52 to 10^5".
- Argument: (1) The quoted posterior range (10^-52 to 10^5)
is 57 powers of ten; "fifty" matches the prior (10^-45 to 10^6). (2) The
width is an input, not a finding that survived. It comes from
slow_decades = (3, 100), the same assumption as Sandberg et al.'s
50-decade spread on the origin-of-life rate, and no study in the project
constrains that rate, so "survives every measured input" claims more
than happened. (3) "Cut away the right-hand side" overstates: the
probability of more than one other civilisation falls from 42% to 22%,
and the 95th percentile moves from 10^6.3 to 10^5.3. The evidence halves
the right-hand side and lengthens the left tail by seven decades. (4)
The chart axis starts at 10^-44 (charts1.js drawNever lo = -44), so the
quoted lower bound is off the chart and about 8% of the posterior (5% of
the prior) is silently not drawn.
- Proposed change: Heading: "How many civilisations? The
range spans more than fifty powers of ten". Text: "Sandberg, Drexler and
Ord made this point in 2018. The width comes almost entirely from how
little is known about the origin of life, an uncertainty I took over
from them and which none of my measurements narrows. What the evidence
does is roughly halve the right-hand side: the chance that more than one
other civilisation has ever arisen here falls from 42% to 22%." Note:
add "The axis is cut at 10^-44; about 8% of the probability lies further
left."
- Tested: Results file base.prior_stats.log10_N_ever_q: -44.8
/ -12.0 / -1.9 / 2.9 / 6.3; schools.site.log10_N_ever_q: -51.7 / -18.9 /
-7.3 / -0.8 / 5.3. My rerun: P(N_ever >= 1) prior 0.414, site
posterior 0.219. cells4.json N_ever_hist: mass in bins below -44 is
0.075 (site) and 0.051 (prior). evidence/abiogenesis.md line 34 and
anthropics.md line 9 (SDO log-normal, sigma 50 decades). BASE
slow_decades = (3.0, 100.0).
- moderate / Section 10: "finding life elsewhere would be bad
news in exactly the sense Nick Bostrom argued in 2008: a second origin
in the Solar System would raise 'they arise and never spread' from 16%
to 33%."
- Argument: The direction is right and the attribution is
correct (MIT Technology Review, May/June 2008). Three things are
missing. (1) The size depends on the assumed false-positive rate: at 5%
never-spread rises to 39% and alone falls to 48%, losing its majority;
at 30% the figures are 25% and 66%. The page prints one value (31% in
the 250k run) with no range, although the round-2 statistician asked for
ranges on these rows. (2) The result needs the life prior and the
expansion prior to be independent, which the model assumes. The
project's own brief records that it reverses for perfectly correlated
priors (Verendel and Haggstrom). (3) The argument is Hanson's Great
Filter (1996/98), which Bostrom's essay popularises; Hanson is not
credited anywhere on the page for it.
- Proposed change: "First, finding life elsewhere would be
bad news in the sense of Robin Hanson's 'Great Filter', as Nick Bostrom
argued in 2008: a confirmed second origin in the Solar System would
raise 'they arise and never spread' from 16% to about 31% (25% to 39%,
depending on how sure we could be that the detection was real), and at
the confident end 'alone' would drop below half. The model treats the
origin of life and the feasibility of expansion as independent unknowns;
if they were strongly linked the conclusion could reverse."
- Tested: Results file future["Independent origin of life
confirmed in the Solar System"]: site alone 0.578, stuck 0.311;
alternatives sg_fp 0.05: 0.476 / 0.386; sg_fp 0.30: 0.661 / 0.251.
Bostrom PDF fetched from nickbostrom.com: title, venue and the "bad
news" passage confirmed. evidence/anthropics.md line 80 (Verendel and
Haggstrom). grep of page_draft.md finds "Hanson" only for the 2021
earliness paper. model4.py draws lam (lines 296-299) and barrier / p_exp
(342-344) independently.
- minor / Section 02 camp note: "Almost every row ends above
where it started. The exception worth knowing is the biology optimist,
for whom life and intelligence are both easy: that camp ends with 60% on
'they arise and never spread'."
- Argument: Every row ends above where it started (26 of 26
camps, including the biology optimist, 6% to 14%). The biology optimist
is the exception to something else: it is the only camp where alone is
not the leading answer.
- Proposed change: "Every row ends above where it started.
'Alone' is the leading answer in all but one: the biology optimist, for
whom life and intelligence are both easy, ends with 14% on 'alone' and
60% on 'they arise and never spread'."
- Tested: Results file camps: site p_no_other_ever_in_galaxy
exceeds prior_stats.p_no_other_ever_in_galaxy in all 26. Biology
optimist 0.059 to 0.141, stuck 0.601. Shown camps (21 after the bind.js
filter): min 0.141, max 0.991; all others above 0.58.
- minor / Section 12: "two rounds of adversarial review, by
fifteen critics in all, assigned to argue for the main schools of
thought (rare Earth, hard steps, expanding aliens, anthropic reasoning,
SETI optimism) and to audit the code, the statistics and the
citations."
- Argument: The files hold 16 critic reports: 7 in round 1
and 9 in round 2, covering 10 distinct lenses (six recur). No lens was
named rare Earth or hard steps; the astrobiologist covered both. A lens
the page does not name (nonexclusivity, "it only takes one") produced
the round-2 objection that changed the model most.
- Proposed change: "two rounds of adversarial review, sixteen
critic reports in all (seven, then nine), assigned to argue for the main
schools of thought (astrobiology and hard steps, expanding aliens,
expansion scepticism, 'it only takes one', anthropic reasoning, SETI
optimism) and to audit the code, the statistics, the studies and the
citations."
- Tested: critique/redteam1.json has 7 entries
(seti_optimist, astrobiologist, anthropics, statistician,
expansion_sceptic, hansonian, code_audit); redteam2.json has 9
(statistician, code_audit, anthropics, nonexclusivity,
expansion_sceptic, astrobiologist, study_fidelity, hansonian,
novelty_and_citations).
- minor / Section 02 conventions note: "The last two rows are
different in kind. Both move probability from 'alone' to 'they arise and
never spread'"; and "If we should think of ourselves as a typical
civilisation, universes with more civilisations in them gain a
little."
- Argument: Under self-indication 30% goes to "someone did
spread and is here" (unnoticed 19%, hiding 11%), five times the base
share, and that class then holds a median of 10^10 independent expander
lineages, all discreet. The caption mentions only never-spread. On the
typical-civilisation sentence: the weight is the share of all
civilisations that are around Sun-like stars and not pre-empted (W_G /
D_all), not a count of civilisations. The net effect is small and mixed:
P(another ever arose here) rises 22% to 24%, while "no life anywhere
else" also rises, 47% to 49%.
- Proposed change: "Both take probability from 'alone'. The
fourth moves it to 'they arise and never spread' (45%), because we find
ourselves in a small, home-bound civilisation. The fifth favours crowded
universes outright: 70% 'never spread' and 30% 'someone is here unseen
or hiding'." And: "If we should think of ourselves as a typical
civilisation, universes where most civilisations resemble ours (Sun-like
star, not pre-empted by settlers) gain a little; the answer moves by two
points."
- Tested: Results file base.schools.sia.posterior: stuck
0.697, unnoticed 0.191, hidden 0.112; log10_lineages_unnoticed_q median
10.1; ssa_obs stuck 0.454. model4.py lines 435-438. My rerun: P(N_ever
>= 1) site 0.219, ssa_all 0.236; alone_sterile 0.467 vs 0.491.
- minor / Section 10: "The chance that no civilisation exists
anywhere in the part of the universe that could ever reach us is 52%,
and the chance that expanding civilisations already hold at least 1% of
it is 9%."
- Argument: The key is P(N_ever x N_reach < 1) with
N_reach = 5.5e6 galaxies, the volume a 0.1c expansion starting now could
ever reach. So it is about civilisations that have arisen so far (not
ones that exist), for a stated speed, as an expected count below one. At
light speed the volume is a thousand times larger and the figure is
42%.
- Proposed change: "The chance that no other civilisation has
yet arisen anywhere in the region we could ever reach at a tenth of
light speed, about five million galaxies, is 52% (42% for the larger
region reachable at light speed). The chance that expanding
civilisations already hold at least 1% of the universe is 9%."
- Tested: model4.py line 121 (N_reach = 5.5e6) and line 486.
cosmo_tables.npz: eta_max - eta_0 = 16.57 Gly, so 0.1c reaches 1.657 Gly
and 5.49e6 galaxies; at c, 5.49e9. My rerun: P(N x 5.5e6 < 1) =
0.520, P(N x 5.5e9 < 1) = 0.422, P(x >= 0.01) = 0.088. File:
p_nobody_in_reach 0.5205, p_expanders_hold_1pct 0.0866.
- minor / Section 12: "The second round found that the rebuilt
version ... treated 'hides itself' as a property of whole universes when
it belongs to individual civilisations ... Fixing those three things
changed the headline"; hero card 3.
- Argument: The fix is partial by design, and the page does
not say so. Two universe-level switches remain (all expansion is
low-footprint, 5%; everyone hides, 3%), and they supply 88% of the
surviving "here unnoticed or hiding" probability. In the unnoticed class
the Galaxy holds a median of about 10,000 independent expander lineages
(5-95%: 1.6 to 10^11.7), all discreet. The round-2 nonexclusivity critic
asked for that count to be printed beside the class. The model computes
it (log10_lineages_unnoticed_q) and the page omits it.
- Proposed change: Add to section 12 after "Fixing those
three things...": "Two whole-universe exceptions remain by choice: a 5%
prior that physics or economics forces every expansion to be
low-footprint, and a 3% prior that everyone hides. They supply nearly
all of the surviving 'here but unseen' answer. In those universes the
Galaxy typically holds thousands of independent expanding lineages,
every one of them discreet."
- Tested: My rerun: share of unnoticed from the q_cc regime
0.82; share of unnoticed + hidden from the two universe-level atoms
0.878. Results file site log10_lineages_unnoticed_q: 0.21 / 4.05 /
11.75; sub.unnoticed_cc 0.034 vs unnoticed_mixed 0.008. model4.py lines
355-366. redteam2 nonexclusivity presentation advice ("Next to
'unnoticed', print how many independent expander lineages the class
contains").
- minor / Several small binding and labelling points:
waterfall note "Each bar is a Shapley value"; headline "78%"; playground
readout "...then they arise but never spread (17%)"; slider label "Hard
evolutionary steps on the way to us"; section 02 intro "They differ in
what they assume about three things"; hero lede "and that would apply to
us too".
- Argument: (1) The bars are Shapley values multiplied by a
hidden factor that forces them to sum to the pooled headline (bind.js
line 9, charts1.js line 77): 1.052 in the trial (local +21.4 printed as
+23), 0.992 in the 250k run. (2) 78% is the share of universes with
expected count below one; the model's actual probability that no other
civilisation arose, E[exp(-N)], is 77.2% and is stored but unused. (3)
The playground comes from a separate run (cells4.json: stuck 0.167) and
shows 17% beside the hero's 16%. (4) That slider tilts the number of
candidate steps (prior mean 1.34), not hard steps (prior mean 1.14). (5)
The camps also differ on a fourth thing, whether expansion is feasible
or easy, which is one of the page's own three dials. (6) "Would apply to
us too" holds in 53% of the not-alone cases (72% of never-spread). (7)
The waterfall bars start from a 30% baseline, which exaggerates the
before/after bar lengths (1.7 to 1 drawn, 1.34 to 1 true).
- Proposed change: (1) Drop the rescale and compute the
Shapley values from pooled seeds, or add "scaled by under 1% to match
the pooled result". (2) Quote 77% from p_no_other_ever_poisson, or add
"(77% if counted as an exact probability)". (3) Regenerate cells4.json
at full size, or take the default readout from base. (4) Relabel the
slider "Candidate evolutionary jumps on the way to us". (5) "They differ
in what they assume about four things: how easily life starts, how many
improbable jumps follow, whether lasting expansion is feasible, and
whether it would be evident." (6) "and that would most likely apply to
us too". (7) Start the waterfall axis at 0.
- Tested: Trial file: (0.7792 - 0.5837) / (0.7695 - 0.5836) =
1.052; 250k file: 0.992 (contributions -7.5 / +3.0 / +22.1 / +2.3 before
scaling). p_no_other_ever_poisson 0.7718 vs 0.7819. cells4.json site:
alone 0.7776, stuck 0.167. BASE m_weights mean 1.34;
prior_stats.mean_hard_steps 1.14. My rerun: P(barrier | not alone)
0.532. charts1.js line 82 scaleLinear([0.3, 1]).
- minor / report/page_draft.md as the review copy, against
report/site/index.html.
- Argument: The draft is stale. It has no section 07 or 09
(section 09 exists only in index.html and contains the caption error
above), its section 11 heading and text differ ("The answer comes from
the silence" against index.html's "The answer turns on Earth's own
record"), it says eight studies where index.html binds a count, and its
numbers are from the 30,000-sample trial. The two section 11 headings
also pull against section 01's "it comes almost entirely from one
fact".
- Proposed change: Regenerate page_draft.md from index.html
and the final data.js before the next review. Reconcile the section 11
heading with section 01, for example: "The telescopes check the inputs.
The lift comes from the silence, and the starting point from Earth's own
record."
- Tested: Diffed page_draft.md (06:27) against index.html
(06:43) by reading both. data.js on disk at 07:24 still has n_total
240000 and scan n 12, while integrate4_results.json was replaced at
07:29 with n_per_run 250000.
Code errors
- report/site/bind.js and charts1.js / bind.js line 8
(spread); charts1.js line 17 (fam), lines 72, 253, 311
- Problem: "Someone spread" is computed as 1 - alone - stuck.
It is described on the page as unnoticed + hiding + on the way, which is
the class sum (0.109, not 0.056). Alone (N_ever < 1) overlaps the
spread classes by 0.054.
- Fix: Define the three families from the classes: alone =
posterior.empty_universe + posterior.rare; stuck = posterior.stuck;
spread = en_route + unnoticed + hidden + excluded. Keep
p_no_other_ever_in_galaxy as a separately labelled statistic.
- Impact: Hero cards become 73 / 16 / 11 instead of 78 / 16 /
6. Camp chart numbers fall by 1 to 13 points (Expansionist camp 87 to
75).
- report/site/bind.js and charts1.js / bind.js lines 9-10;
charts1.js lines 77-78
- Problem: Shapley contributions are silently multiplied by
(pooled posterior - prior) / (single-seed end - start) so that the bars
sum to the headline, while the caption calls them Shapley values.
- Fix: Compute the 16 ablation subsets on the same pooled
seeds as the base, or show the unscaled values with their own start and
end.
- Impact: Factor 1.052 in the trial (local +21.4 shown as
+23); 0.992 in the 250k run.
- models/model4.py / line 478, p_other_now_in_galaxy (used by
bind.js now_site)
- Problem: Counts only home-grown, non-expanding
civilisations in their detectable lifetime (N_now = N_ever x L_quiet /
1e10). Universes classed as settled (unnoticed, hidden, excluded)
contribute nothing unless N_now is large, although settlers are present
by definition.
- Fix: Add p_anyone_now = sum(wn x where(c_unnot | c_hidden |
c_excl, 1, 1 - exp(-N_now))) and bind that to the sentence, or reword
the sentence.
- Impact: 8% becomes about 13% (site).
- report/site/charts1.js / drawLevers lines 176-177 (diag:
true) and line 188
- Problem: The "answer = prior" diagonal on the middle panel
compares P(stuck class) with the prior on a barrier, two different
quantities. Together with the caption it asserts something false for
barrier priors above about 0.2.
- Fix: On the q_barrier panel plot the stuck class's prior
(d.prior.stuck) as a dashed "before the evidence" line, as on the w_fast
panel. Keep the diagonal only on the q_cc panel and fix the
caption.
- Impact: Presentation only.
- report/site/charts1.js / drawNever line 276 (lo = -44,
i0)
- Problem: Histogram bins below 10^-44 are dropped without
notice: 7.5% of the posterior and 5.1% of the prior. The caption's 5%
quantile (10^-52) is off the axis.
- Fix: Extend the axis to -60 with an overflow bin, or add
the note "about 8% lies further left".
- Impact: Presentation only.
- report/site/index.html and charts1.js / index.html line 86
("Four hundred alternative sets of assumptions"); charts1.js line 200
aria-label
- Problem: The scan count is hard-coded while
integrate4_scan.json currently holds 12 draws.
- Fix: Bind both to FERMI.scan.length, and block publication
until the full scan is on disk.
- Impact: Title would be false if published now.
- models/model4.py / line 349: T_fill = np.maximum(0.3, 1e-4 /
v)
- Problem: 0.3 Gyr is used as a floor on the Galaxy fill
time, even for ships at 0.3c. The comment and evidence/expansion.md
describe about 0.3 Gyr as the ceiling set by stellar motions
(Carroll-Nellenback 2019), with 1e-4/v being 1 Gyr at probe speed.
- Fix: Either document the floor as deliberate (settlement
and fill-in time, not transit) or use a speed-dependent time capped by
stellar mixing. No numerical consequence.
- Impact: None on the results: paired seeds give alone 0.7871
vs 0.7869 and 0.7813 vs 0.7811. It does contradict the page's "crossed
thousands of times".
- models/model4.py / lines 399-400: exp_feasible is (p_exp
> 1e-3)
- Problem: The future observation labelled "sustained
interstellar expansion shown feasible for us" conditions on at least 1
in 1000 civilisations becoming lasting expanders, which is stronger than
feasibility.
- Fix: Add a row conditioned on ~barrier and label the
existing one "shown to be common (over 1 in 1000)".
- Impact: No-barrier conditioning gives alone 0.863, stuck
0.060, against 0.881 / 0.039.
Checked and found correct
- Results file identity: at start n_per_run was 30000 (trial); it was
replaced at 07:29 UTC by the 250000 run. tables_v4.md matched the trial
JSON on every cell I compared (tables A, B, C, E, F, G). I copied the
250k file to results_250k_snapshot.json and re-derived the page numbers
from it.
- Independent rerun: 6 seeds x 60,000 samples of M.BASE with keep=True
(run_base.py, an1.py) gives site alone 0.7814, stuck 0.1612, excluded
0.0049, prior alone 0.5857, against the 250k x 8 file's 0.7819 / 0.1625
/ 0.0047 / 0.5846.
- Hero and section 01 numbers, 250k file: alone 78%
(base.schools.site.p_no_other_ever_in_galaxy 0.7819); prior 58%
(base.prior_stats.p_no_other_ever_in_galaxy 0.5846); never-spread 16%
(posterior.stuck 0.1625); evident settlement 35% before
(base.prior.excluded 0.3523) and under 1% after (0.0047); "2 million
simulated universes" = 8 x 250000.
- "Alone" is N_ever < 1 (model4.py line 455) and the 47% / 31%
split is alone with life_worlds < 1 or >= 1 (sub.alone_sterile
0.4675, alone_inhabited 0.3144; they sum to alone).
- "Most likely because something stops everyone": stuck_barrier 0.117
of stuck 0.1625 = 72%.
- Shapley figure (shapley_alone.site, 250k): early -0.075, late
+0.030, local +0.221, surveys and radio +0.023; start 0.582, end 0.781.
"The silence here does nearly all the work" is supported. The caption's
-8 / +23 / +2 are trial values after the rescale; the bound values will
read -7 / +22 / +2.
- "Six of the seven fit about equally well": site mean_like relative
to the best (hidden 0.536) is 0.82 / 0.87 / 0.68 / 0.92 / 0.77 / 1.00 /
0.008; charts1.js drawEvidence plots exactly this.
- Camp range 14% to 99%: 21 camps shown after the bind.js filter, min
Biology optimist 0.141, max Expansionist with Carter steps 0.991;
biology optimist stuck 0.601.
- Lever endpoints: w_fast 0.05 gives alone 0.855 and 0.8 gives 0.487
(the right entries, levers.w_fast first and last); "the evidence lifts
it at every setting" holds (prior 0.669 to 0.251).
- Convention rows: alone 0.782 (site), 0.778 (ssa_now), 0.764
(ssa_all), 0.539 (ssa_obs), 0.000 (sia); "first three agree to within a
few points" holds. The code matches the prose: ssa_obs weight is
share_all / (1 + p_exp x obs_R) and sia weight is base_w x W[0]
(model4.py lines 437-438).
- Forecast keys: second origin predictive 0.313 (site) and 0.943 (sia)
are the right entries (future[...].schools.*.predictive). A null result
favours site over SIA by 0.687 to 0.057, so the sentence about a null
counting against self-indication is supported.
- Section 08: prior median 10^-1.9, posterior median 10^-7.3, 5% and
95% at 10^-51.7 and 10^5.3; the chart plots log10 expected N_ever with
prior dashed and posterior filled, as the note says.
- Section 10 numbers: barrier 15% to 26% is the right pair
(prior_stats.p_barrier 0.150, site.p_barrier 0.2556); second origin
stuck 0.311; feasible alone 0.883; reach 0.5205; hold-1% 0.0866.
- N_reach = 5.5e6 recomputed from cosmo_tables.npz: 4 pi / 3 x (0.1 x
16.57 Gly)^3 x 2.88e5 = 5.49e6.
- Section 12 model paragraph matches model4.py item by item: three
host classes, rate-based abiogenesis, 0-4 candidate steps, barrier atom,
p_exp, v_gal and v_ig, c_claim, four likelihood terms (L_time, L_local,
L_survey, L_seti), intergalactic arrivals through the Madau-Dickinson
kernel.
- Section 12 critics paragraph, substance: round 2 did find the
post-data w_fast (statistician, major), the universe-level evidentness
switch (nonexclusivity, fatal) and the missing explicit barrier
(nonexclusivity and hansonian, major), and model4.py's docstring lists
the corresponding changes. The old headline "Three live answers, roughly
equal" is in FINDINGS_DRAFT.md claim 2.
- w_fast = 0.2 as a pre-data value: E[3/(A+3)] for A log-uniform on
3-100 is 0.189, as the BASE comment says.
- Freitas 1985 exists and supports the sentence: "There Is No Fermi
Paradox", Icarus 62, 518-520, fetched from rfreitas.com (argues the
absence of visitors is not established). It is not in any evidence
brief.
- Carroll-Nellenback, Frank, Wright and Scharf 2019, AJ 158, 117
(arXiv:1902.04450) supports the sentence: Earth can be unvisited in a
settled Galaxy; breaks the link from Hart's Fact A to uniqueness.
- Olson and Ord 2021 (arXiv:2106.13348) exists, is unrefereed (no
journal reference on the abstract page) and says SIA pushes survival and
speed estimates pessimistic. Sandberg, Drexler and Ord 2018
(arXiv:1806.02404) exists and is unpublished ("Submitted to Proc. R.
Soc. A").
- Finnveden 2019 and Cook 2022 exist (EA Forum, 15 Feb 2019 and 23 Apr
2022); their SIA conclusions were read from the fetched posts and are
quoted in the objection.
- Bostrom 2008, "Where Are They? Why I Hope the Search for
Extraterrestrial Life Finds Nothing", MIT Technology Review May/June
2008: confirmed from the author's PDF, including the "bad news"
passage.
- Every lever, camp and future-observation run in the 250k file has
site effective sample size above 5,000; the base SIA column has ESS
6,945 with Monte Carlo s.d. 0.005 on stuck, so the SIA numbers on the
page are stable to about a point.
Not checked
- Hart 1975 (QJRAS 16, 128) and Tipler 1980 (QJRAS 21, 267): cited
correctly as far as I recall, and listed in evidence/expansion.md as
memory-only [M]. I did not open either paper.
- Hanson's Great Filter (1996/98): the web page is linked in the
briefs but I did not fetch it; my statement that Bostrom 2008 builds on
it rests on the briefs and memory.
- Whether Olson and Ord was later published in a journal: Cook's post
cites it as "Olson & Ord (2022)"; the arXiv page shows no journal
reference. If it was published, the Sources paragraph should not call it
an unrefereed preprint.
- "Ranges the critics considered defensible" for the scan: I found
critic-stated ranges for only three priors and could not find a document
mapping the scan ranges to critic statements.
- The final 400-draw scan and the final cells4.json: neither was on
disk (the scan has 12 draws; cells4.json is from 06:22), so scan
percentages and the playground's default readout are unchecked against
final numbers.
- The section 09 sentence "Most of the effort in this field goes into
the observation that would move it least" is an empirical claim about
research funding that I did not check.
- Sections 04-07 and 11 are outside this lens. I checked only the
section 04 crossing-time sentence and the one-in-a-billion bound (3 /
2.7e9, consistent); study numbers were not re-verified.
- Whether the round-1 summary "an early version got its answer almost
entirely from one unsupported assumption" is the best one-line
description: round-1 verdicts do say the whole update came from the
galaxy-survey term times an assumed harvest floor, which is consistent,
but I read only the verdict paragraphs.
Tables
Site convention, integrate4_results.json with n_per_run 250000 (07:29
UTC), cross-checked by my 6 x 60,000 rerun.
A. Overlap of "alone" (N_ever < 1) with the classes (rerun, n = 360,000, ESS 86,000)
class total and alone and not alone
empty_universe 0.3891 0.3891 0
rare 0.3387 0.3387 0
en_route 0.0401 0.0382 0.0019
stuck 0.1612 0 0.1612
unnoticed 0.0448 0.0096 0.0352
hidden 0.0211 0.0037 0.0174
excluded 0.0049 0.0020 0.0029
alone 0.7814 = empty + rare 0.7279 + overlap 0.0536. Spread classes 0.1109. Card value (1 - alone - stuck) 0.0573.
B. Barrier by branch (rerun) P(barrier) prior 0.150, posterior 0.256.
Barrier and alone 0.139; barrier and stuck 0.116. P(barrier | alone)
0.178. P(barrier | stuck) 0.72. P(barrier | not alone) 0.53. No-barrier
stuck: 95% have N_ever x p_exp < 1. Conditioning: no barrier gives
alone 0.863 / stuck 0.060; p_exp > 1e-3 gives 0.881 / 0.039; barrier
gives 0.545 / 0.455.
C. Future observations ranked by total move (250k file), base 0.782 / 0.1625 / 0.056
move observation alone stuck spread forecast
0.606 expansion shown infeasible 0.535 0.465 0.000 0.256
0.407 second origin in the Solar System 0.578 0.311 0.110 0.313
0.348 HWO, at least one biosignature 0.608 0.290 0.102 0.153
0.246 expansion shown feasible (p_exp > 1e-3) 0.883 0.039 0.078 0.591
0.183 no second origin found 0.873 0.096 0.030 0.687
0.144 no Earth-level technology in the Galaxy 0.854 0.112 0.034 0.914
0.060 HWO, no biosignature 0.812 0.141 0.047 0.847
0.033 artefact survey finds nothing 0.795 0.166 0.039 0.973
under 0.02: both planet-lifetime rows, both red-dwarf rows, nearest-million-stars radio null.
Second origin by false-positive rate: 5% gives alone 0.476, stuck 0.386; 15% gives 0.578 / 0.311; 30% gives 0.661 / 0.251.
D. Levers (250k file)
w_fast 0.05 0.1 0.2 0.3 0.4 0.6 0.8 | my runs: 0.9 0.95 0.99
alone 0.855 0.829 0.781 0.733 0.682 0.586 0.487 | 0.446 0.422 0.402
stuck 0.110 0.129 0.164 0.199 0.235 0.303 0.376 | 0.404 0.420 0.434
q_barrier 0 0.05 0.15 0.30 0.50
stuck 0.059 0.098 0.164 0.245 0.324 (stuck prior 0.041 0.059 0.096 0.153 0.228)
alone 0.864 0.833 0.781 0.715 0.650
q_cc 0 0.02 0.05 0.10 0.25 0.50
unnoticed 0.009 0.024 0.043 0.075 0.160 0.269 (class prior 0.011 0.018 0.030 0.050 0.108 0.205)
alone 0.803 0.793 0.781 0.761 0.707 0.638
E. Other recomputed quantities P(real second origin) = E[1 - exp(-0.3
lambda)]: site 0.192, typical observer 0.282, SIA 0.938 (forecasts with
the 15% false alarm: 0.313 / 0.390 / 0.947). P(real HWO detection) = 1 -
(1 - 0.153)/0.9 = 0.059. P(another civilisation in the Galaxy now):
model key 0.081; with settled classes counted 0.127. P(N_ever >= 1):
prior 0.414, posterior 0.219. P(N x 5.5e6 < 1) 0.520; P(N x 5.5e9
< 1) 0.422. Local term off (ablation early+late+surveys): alone
0.563, excluded 0.351. Exact probability of no other civilisation,
E[exp(-N)]: 0.772 against the thresholded 0.782. SIA row: stuck 0.697,
unnoticed 0.191, hidden 0.112; P(barrier) 0.695; P(expanders hold 1%)
0.185; ESS 6,945.
Advice
- Decide the headline quantity first and make every chart and card use
it. I recommend the class partition (73 / 16 / 11) for the cards and the
hero, with "no other civilisation ever arose here: 78%" as a stated
secondary figure. Otherwise the stacked bars and the printed numbers
disagree on the first screen.
- Print the convention with the headline number wherever it appears
alone: "78% treating Earth as a given; 54% if we are typical observers;
0% under self-indication". The hero toggle does this interactively, but
the lede and the section 01 callout are what get quoted.
- Regenerate page_draft.md from index.html and the final data.js
before the next review round, and bind the remaining hard-coded counts
("Four hundred", the aria labels).
- Wherever a forecast or a "would move to" number depends on an
assumed error rate or threshold (15% false alarm, 10% survey false
positive, p_exp > 1e-3), say so beside the number. These are the
figures a careful reader will try to reproduce.
- The section 10 cards are the most quoted-out-of-context text on the
page. Replace each absolute ("is behind us", "is unclaimed", "is ahead
of us") with its model frequency: 82% no barrier in the alone branch,
about 7% of alone cases with outside settlers, 72% barrier in the
never-spread branch.
Critic: the page as a
reader sees it
Overall verdict
Not ready to publish. The page loads with no console errors, no blank
bound numbers, no NaN or negative percentages, no em-dashes and no
horizontal page overflow, and the playground works. But one section is
destroyed by a duplicate id (section 09 loses its heading, text and
caption), the three headline cards do not match the bar drawn directly
above them (the bar says 73 / 16 / 11, the cards say 78 / 16 / 6,
because "alone" overlaps the "someone spread" classes), and the first
paragraph contains a crossing-time claim that is wrong by about a factor
of a thousand. Four captions say something the chart next to them
contradicts (levers, camps, future observations, brains), and on a phone
16 of the 19 charts open showing only their row labels, with the data
scrolled off-screen at 7 px type. The single most important change is to
fix the hero so the cards are a true partition of the bar (or say
plainly that 78% includes about 5 points where others arose elsewhere
and are here or on their way), because that is the first thing every
reader sees and the first thing a careful reader will add up. The most
memorable chart is the hero before/after bar with the hatched 35% block
vanishing; it is correctly placed first, but the jargon toggle above it
and the mismatch below it blunt it. The most memorable original-data
chart, the rain of stars, sits 10 screens down on a laptop and 13 on a
phone.
Objections
- fatal / index.html line 237
<section id="future"> and line 244
<div id="future"></div>; charts1.js drawFuture
mk("#future", ...)
- Argument: Two elements share id="future". mk() runs
d3.select("#future").html(""), which matches the SECTION first and
replaces its whole content with the SVG. Section 09 therefore renders
with no tag, no heading ("The observations worth making"), no intro, no
panel frame and no caption. The numbered tags jump from 08 to 10.
Because the SVG is no longer inside a figure it gets no min-width: on a
phone it is 350 px wide with 3.7 px text.
- Proposed change: index.html line 244:
<div class="frame"><div id="future-chart"></div></div>;
charts1.js: const svg = mk("#future-chart", W, H, ...). Add
a build check that fails if any id occurs twice.
- Tested: Playwright at 1280 and 390: section#future children
= ['svg']; rendered tag list is 01..08, 10, 11, 12; phone svg width 350
px, min font 3.7 px. Screenshots sec_1280_dark_future.png,
phone_viewport_future.png.
- major / Hero cards
#fam-alone 78%,
#fam-stuck 16%, #fam-spread 6% (charts1.js
fam, bind.js spread), against the hero bar
directly above (39% + 34% | 16% | 4% + 4% + 2%)
- Argument: The cards are presented as three exclusive
answers but are not a partition of the seven classes drawn above them.
"Alone" is N_ever < 1 in the Galaxy, which overlaps en route,
unnoticed, hidden and excluded (settlers who arose in another galaxy).
The bar sums to 73 / 16 / 11; the cards say 78 / 16 / 6. "Someone did
spread" is computed as 1 - alone - stuck, so it is understated by half.
A reader who adds 39 + 34 gets 73, not 78. The same overlap makes
section 10's "If we are alone (78%) ... the Galaxy is unclaimed" false
in about 5 of those 78 points.
- Proposed change: Either (a) make the cards a partition:
fam = q => ({alone: q.posterior.empty_universe + q.posterior.rare, stuck: q.posterior.stuck, spread: q.posterior.en_route + q.posterior.unnoticed + q.posterior.hidden + q.posterior.excluded}),
giving 73% / 16% / 11%, and state once: "The chance that no other
civilisation ever arose in our Galaxy is a little higher, 78%, because
in about 5% of cases the only others arose in another galaxy and are on
their way or here unnoticed." Or (b) keep 78 / 16 and relabel the third
card "Someone did spread: 11%. In about half of these the spreaders
arose in another galaxy, so this overlaps the 78%." In section 10
replace "and the Galaxy is unclaimed" with "and in most of those cases
the Galaxy is unclaimed".
- Tested: M.run(M.vary(M.BASE, n=60000), keep=True):
posterior of en_route 0.041 (of which alone 0.039), unnoticed 0.046
(0.010), hidden 0.021 (0.004), excluded 0.005 (0.002); alone and in a
spread class 0.055; spread classes total 0.112; 1 - alone - stuck 0.057.
250k data: empty + rare 0.728, spread classes 0.109.
- major / Section 01: "crossing it takes a few million years
even at the speed of our slowest probes"; waterfall caption: "a Galaxy
that has had time to be crossed thousands of times"; section 04: "Four
billion years is enough to cross the Galaxy a thousand times at one
ten-thousandth of the speed of light."
- Argument: Arithmetic. The Galaxy is about 100,000 light
years across. At 1e-4 c one crossing takes 1 billion years, so four
billion years is four crossings, not a thousand (wrong by 250 times). At
Voyager speed (17 km/s, 5.7e-5 c) one crossing takes about 1.8 billion
years, not "a few million" (wrong by roughly a thousand times).
"Thousands of times" needs more than 1% of light speed. The project's
own expansion brief quotes 1e8 to 1e9 years for 1e-4 c ships. A
physicist will catch this in the first paragraph.
- Proposed change: Section 01: "The Galaxy is more than ten
billion years old. Crossing it takes about ten million years at one per
cent of the speed of light, and under two billion years even at the
speed of the Voyager probes." Waterfall caption: "in a Galaxy old enough
to have been crossed a thousand times at one per cent of light speed".
Section 04: "Four billion years is enough to cross the Galaxy four times
at one ten-thousandth of the speed of light, the speed at which stars
drift past one another, and four hundred times at one per cent of light
speed."
- Tested: Hand calculation: 1e5 ly / 1e-4 c = 1e9 yr; 17 km/s
/ 299,792 km/s = 5.7e-5 c, giving 1.76e9 yr. evidence/expansion.md line
25: "Maximum colonization time, 1e-4 c ships: 1e8 to 1e9 yr".
- major /
figure svg { min-width: 680px; } in
style.css @media (max-width: 760px), and the fixed 1040-wide viewBox
with left margins of 290 to 470 in waterfall, evidence, camps,
forecasts, scan, future
- Argument: On a 390 px phone 16 of 19 charts render 680 px
wide inside a 348 px frame. The visible half is the row labels; the
bars, dots and numbers are off-screen to the right with no scroll hint.
The forecasts chart shows zero data on first view, the scan chart shows
an empty left half. Chart text is 7.2 to 8.2 px. "Hover for details"
does not exist on touch. The study table is 1,789 px tall at four words
per line and its last column, the one the section is about, is cut off
(scrollWidth 610 against 350).
- Proposed change: Draw from the container width as
verdictBar already does (W = node.clientWidth) and, below 600 px, put
each row label on its own line above its bar (m.l = 0) with text at a
fixed 11 to 12 px. For scatter and line charts drop the 300 px side
margins and move annotations under the plot. Replace "Hover" with "Tap"
on touch and label key points directly. Turn the table into stacked
cards under 760 px with "Moves the answer by" as the first line of each
card.
- Tested: Playwright 390x844, deviceScaleFactor 2: frame
clientWidth 348, scrollWidth 690; scale 0.65; min font 7.2 px; table 350
visible of 610. Screenshots fig_390_dark_07_forecasts.png,
fig_390_dark_05_scan.png, phone_viewport_waterfall.png,
fig_390_dark_tablewrap.png.
- major / Levers caption: "Middle: 'they never spread' grows
with your prior that a universal barrier exists, and the evidence raises
it above that prior. Right: 'here and unnoticed' simply returns the
prior you put in." and the dashed "answer = prior" diagonals
- Argument: The chart contradicts both sentences. Middle: the
curve crosses below the diagonal near 17%; at a 30% prior the answer is
24%, at 50% it is 32%. Right: the curve is well below the diagonal: 4%
at 5%, 16% at 25%, 27% at 50%. The diagonal compares unlike things (x is
the prior on a universe-level switch, y is a class share). Against its
own prior class share, "never spread" rises about 1.6 times at every
setting and "unnoticed" rises about 1.4 times, the same lift every
surviving class gets. The "answer = prior" label is also struck through
by its own line.
- Proposed change: Replace the diagonal with the prior class
share as a dashed "before the evidence" curve, as in the left panel
(
prior: d => d.prior.stuck,
prior: d => d.prior.unnoticed; both are already in
data.js). Caption: "Middle: 'they never spread' grows with your prior
that a universal barrier exists; the evidence lifts it by about half at
every setting (10% to 16% at my own prior). Right: 'here and unnoticed'
grows with the prior you put in and gets the same modest lift as every
surviving answer. Nothing observed so far tests it directly." Also label
the large dot "my prior".
- Tested: 250k data, levers: q_barrier 0/0.05/0.15/0.3/0.5
gives posterior stuck 0.059/0.098/0.164/0.245/0.324 and prior stuck
0.041/0.059/0.096/0.153/0.229; q_cc 0/0.02/0.05/0.1/0.25/0.5 gives
posterior unnoticed 0.009/0.024/0.043/0.075/0.160/0.269 and prior
0.011/0.018/0.030/0.050/0.108/0.205.
- major / Future-observations caption (index.html line 245):
"A second, independent origin of life would do the most ... Learning
that lasting interstellar settlement is impossible would move as much
probability the other way." and section 10: "the most informative
experiment is one we will run ourselves"
- Argument: The chart is sorted by movement and its top row
is "settlement shown to be impossible" (alone 78 to 53, never spread 16
to 47), ahead of a second origin (58 and 31). And "impossible" moves
probability in the SAME direction as a second origin (alone down, never
spread up); it is "feasible" that goes the other way (alone 88, never
spread 4). The caption is currently invisible because of the id bug and
will be wrong the moment that bug is fixed. Section 10 names a third
candidate as most informative.
- Proposed change: "Learning that lasting interstellar
settlement is impossible would move the most: 'alone' would fall to
<infeas_alone> and 'never spread' would rise to
<infeas_stuck>. A second, independent origin of life comes next
(<sg_alone> and <sg_stuck>). Showing that settlement is
feasible would push the other way: 'never spread' would fall to
<feas_stuck>." All five bindings already exist in bind.js. In
section 10 change "the most informative experiment" to "the experiment
that can move the answer furthest in either direction". Print forecasts
above 99.5% as "over 99%", not "100%".
- Tested: 250k data: infeasible alone 0.535, stuck 0.466;
second origin 0.578, 0.311; feasible 0.883, 0.039. Screenshot
sec_1280_dark_future.png shows the sort order and a "100%"
forecast.
- major / The whole page: "58% before looking at any evidence"
is never explained; bind.js computes
planet_med,
planet_lo, planet_hi and no element in
index.html uses them
- Argument: The headline is the prior times a roughly
constant lift, and the page says so. But it never tells the reader what
the prior is in plain numbers. Before any evidence the model already
puts the chance that a habitable planet ever produces a civilisation at
a median of one in a trillion, with a 90% range from 10^-55 to 10^-4.
Round 2 (astrobiologist) asked for exactly this; the numbers were
computed and then left off the page. A reader cannot judge "58%" without
it, and it is the most checkable sentence the page could contain.
- Proposed change: Add after the callout in section 01:
"Where does the 58% come from? From my priors on biology. Before any
evidence they put the chance that a given habitable planet ever produces
a civilisation at about <planet_med>, with nine chances in ten of
lying between <planet_lo> and <planet_hi>. That range is a
judgement, and section 02 shows what happens when you change it."
- Tested: Grep of index.html for planet_med, planet_lo,
planet_hi: 0 matches. FERMI_B.planet_med = 10^-12, planet_lo = 10^-55
(250k), planet_hi = 10^-4.
- major / Camps caption: "Almost every row ends above where it
started. The exception worth knowing is the biology optimist"
- Argument: Every one of the 21 rows ends above where it
started, the biology optimist included (6% to 14%). The sentence reads
as if the optimist's probability fell. The real point is different: for
that camp the leading answer is no longer "alone". The row labels are
also insider shorthand that the text never explains ("Hart, crossed:
easy and obvious", "Flat over 0 to 4 steps", "Strict ignorance about
rates", "Carter / Snyder-Beattie hard steps", "LUCA", "tens of Gyr"),
and the last row is identical to the first.
- Proposed change: "Every row ends above where it started.
The row worth knowing is the biology optimist, for whom life and
intelligence are both easy: that camp ends at <opt_alone> alone
and <opt_stuck> on 'they arise and never spread'." Cut the chart
to about ten rows, group them under three sub-headings (biology,
expansion, visibility), give each a plain label and a one-line tooltip
stating the assumption, and drop "Planets stay habitable for tens of
Gyr".
- Tested: 250k camps: all 26 have posterior alone > prior
alone; Biology optimist 0.0585 to 0.1409. Screenshot
fig_1280_dark_03_camps.png.
- major / Lede and hero toggle
#hero-school ("How
to count ourselves": Earth as a given / A typical civilisation / A
typical observer / Crowded universes count more)
- Argument: The first interactive thing on the page is an
unexplained philosophical toggle. One click on the last option turns the
cards to "<1% / 69% / 31%" while the lede above still says "Most
likely there has never been anybody else in our Galaxy" and the callout
below still says 78%. The headline is conditional on a convention the
project's own anthropics critic gave 15% credence, and the lede does not
say so. No range accompanies the 78% anywhere in the hero, though round
2 asked for ranges before point values.
- Proposed change: Move the toggle below the cards under a
small heading "Change one assumption", and add a live line under the
cards: "Under this way of counting ourselves: ()."
Lede: "Most likely there has never been anybody else in our Galaxy:
about 78% on my priors, between 57% and 88% across defensible
alternatives. That holds if we treat Earth as a given. One respected way
of reasoning about our own existence reverses it, and it is explained
below."
- Tested: Playwright click on each hero button: cards
78/16/6, 76/17/7, 53/46/1, <1/69/31; lede and callout text unchanged.
Screenshot hero_sia_1280.png.
- major / Section 07 intro
#wave2-intro
("searches for stars with missing light, for artefacts and odd objects
in our own Solar System, for traces of an earlier technological species
on Earth ..."); figtitle "Four hundred alternative sets of assumptions";
data.js as served
- Argument: Build state. The intro promises four kinds of
study; the grid shows two cards (Pacific settlement, planet lifetimes)
and neither is on the list. Of 13 second-wave study folders only 3 have
a referee report. The scan title and aria-label are hard-coded "Four
hundred" while the bound text says "I drew 12" and 12 dots are drawn;
"over 99% of the re-runs" then means 12 of 12. data.js is still the
30,000-sample trial ("0.2 million simulated universes", Base camp row
77% (59%) against the headline 78% (58%), playground default 17% against
the hero's 16%). page_draft.md is older than index.html: it lacks
sections 07 and 09 and has a different section 11.
- Proposed change: Generate the section 07 intro from the
cards present (or hide the section until they exist) and count only
refereed studies in
n_studies. Bind the scan title:
"<scan_n> alternative sets of assumptions", and print "all
<scan_n>" when the share is exactly 1. Rebuild data.js from the
250k results and the 400-draw scan, regenerate page_draft.md, and re-run
a blank and duplicate-id check before publishing. Draw the Base camp row
from M.base so it can never differ from the headline.
- Tested: FERMI.scan.length = 12; FERMI.wave2.length = 2;
n_total 240,000. Rebuilding data.js in my scratch copy from the 250k
results gives "2 million", Base 78% (58%), playground default 78 / 16,
Shapley -7 / +3 / +22 / +2.
- major / Whole page: citations and provenance
- Argument: There is not one outbound link on the page. Some
thirty papers are cited by name and year with no reference list. The
studies, referee reports, critic reports, model code and tables are
described ("each attacked by an independent referee", "torn apart
twice") and none is linked. For a reader who asked for pressure testing,
the pressure test cannot be inspected. The byline is only in the footer,
so "I built a model", "the answer I would bet on" and "One early
headline of mine" will be read as the professor's own voice until the
last line.
- Proposed change: Add a numbered reference list with DOI or
arXiv links, link each study row to its report and referee report, and
link the model and the critic reports. Put the byline under the title:
"Analysis and text by Claude (Anthropic), commissioned by Ethan Mollick.
'I' below is Claude."
- Tested: Grep of index.html for href: two internal anchors
(#anthropics, #believe) plus font and stylesheet links.
- moderate / Section 11 heading: "The telescopes check the
inputs. The answer turns on Earth's own record" and the row "One-off
evolutionary inventions ... −9 to +14 points, between no hard steps and
three or four"
- Argument: A skimmer reads two opposite headlines: section
01 says "The silence here does nearly all the work" (+22 of a net +20),
section 11 says the answer turns on Earth's record. Both are true of
different things and the page never reconciles them. The −9 to +14 in
the Vermeij row is the leverage of a judgement prior (how many hard
steps), not of that study, whose result was a null (odds ratio 1.4,
interval 0.5 to 5.0). Round 2 asked that no study tag be attached to a
prior the study does not support.
- Proposed change: Heading: "The new measurements check the
inputs. The answer still comes from the silence and from the priors".
Intro: "Of the things I measured, only Earth's own record moves the
answer. The largest piece of evidence, that nobody is evidently here,
needed no new measurement." Vermeij row, last column: "Does not set the
number of hard steps. That number is a judgement, and it moves the
answer by −9 to +14 points."
- Tested: Compared rendered section 01 caption with section
11 heading; leverage4 values: no hard steps −0.089, three or four
+0.143; convergence report line 7: 1.4 (0.5-5.0, p = 0.47).
- moderate / Brains caption: "Near-human relative brain size
arose in three or four mammal lineages, and dolphins reached about three
quarters of the human value tens of millions of years before humans
existed."
- Argument: Neither half matches the plotted data or the
study. The study's count of three or four lineages is for brains within
a factor of TWO of the human value; within a factor of 1.5 there is one
lineage (dolphins). "Near-human" oversells half. In the plotted data the
best fossil dolphin older than 10 million years is 3.46 at 16 million
years, 54% of the human 6.41; three quarters (4.71) is a living species.
The study report lists "a dolphin at 88% of the human value" among
withdrawn first-pass figures.
- Proposed change: "Relative brain size at least half the
human value arose in three or four separate mammal lineages (dolphins,
spider monkeys, capuchins and, on single records, macaques). A dolphin
reached about half the human value 16 million years ago, and living
dolphins reach about three quarters. What nothing in the record
constrains is the step from a large brain to technology, which has
happened once."
- Tested: data.js brains: Cetacea fossils older than 10 Ma
top out at 3.456 (Kentriodon, 16 Ma); living max 5.52 (single record)
and 4.71 with three or more brains; Homo sapiens 6.41.
convergence/report.md lines 25, 121, 136.
- moderate / Rank caption: "Writing off red dwarfs removes the
puzzle only if there is a single hard step; long-lived orange dwarfs
keep us early otherwise."
- Argument: The right panel draws the 5% line only from three
hard steps up. With two hard steps and red dwarfs dead we are never in
the first 5% at any planetary lifetime (the minimum is the first 12%).
By the chart's own criterion the puzzle is removed for one and two
steps. The chart also has no colour scale, does not say which side of
the line is "early", and uses ticks at 5, 11 and 23.
- Proposed change: "Writing off red dwarfs removes the puzzle
if there are one or two hard steps (we are then no earlier than the
first 38% or 12%). With three or more, long-lived orange dwarfs keep us
in the first 4% or earlier." Add "early, to the right of the line"
beside the line, a three-step colour key (first half, first 5%, first
0.1%), and ticks at 5, 10, 20, 100, 1,000.
- Tested: data.js rank.noM: n=1 minimum rank 0.376, n=2
0.122, n=3 0.036 (first below 5% at 37 Gyr), n=4 0.010.
- moderate / SETI caption: "For anything like our own
transmitters there is no limit at all" beside the chart marker "Arecibo
radar" at 2e13 W
- Argument: At the marker labelled with our own most famous
transmitter, the curves sit at about 7e8 and 2.5e8 beacons, well below
the one-per-star line. A reader sees a limit of under a billion at "our"
power and a caption that says there is none. The caption is true only
for leakage below about 1e9 W, which the chart does not mark. The line
labels "anywhere from 1 to 10 GHz" and "exactly on the hydrogen line"
are unexplained.
- Proposed change: Relabel the marker "Arecibo radar, if it
shone in every direction at once" and add a marker near 1e9 W "our
strongest everyday leakage". Caption: "For the radio noise our own
civilisation leaks, at the left edge, there is no limit at all: ... A
beacon as strong as the Arecibo radar's beam, sent in every direction at
once, is limited to under a billion." Line labels: "beacon at any
frequency between 1 and 10 GHz" and "beacon exactly at hydrogen's
natural frequency, where most searches listen".
- Tested: data.js seti: at 2.4e13 W, band 7.4e8 and hydrogen
line 2.5e8; at 1e9 W, band 1.07e12 (above 2.5e11 stars), line 1.5e11; at
1e10 W, 1.4e11 and 3.5e10.
- moderate / Headstart chart
#headstart
- Argument: No vertical axis, tick or unit. A bar four times
the height of its neighbours at 7.75 to 8 billion years sits next to a
near-empty bin, and a tall bar at 13.75 to 14 billion years puts stars
at or before the Big Bang. These are age-grid artefacts and the caption
does not mention them. The flat bars for the last 2 billion years are an
assumption drawn like data.
- Proposed change: Rebin to 0.5 or 1 billion years (the spike
then merges with its empty neighbour), fold everything older than 13
into one bar labelled "13 or older (model limit)", add a y axis "share
of stars per bin", hatch the assumed bars, and add to the caption:
"Narrow spikes are artefacts of the grid of stellar models. The paler
bars at right are assumed, not measured."
- Tested: data.js headstart.all: 7.75-8 bin 0.0586, 8-8.25
bin 0.0024, 13.75-14 bin 0.0241, last eight bins all 0.0125. Screenshot
fig_1280_dark_10_headstart.png.
- moderate / Schools caption: "so the common worry that
'typicality' changes everything is not borne out" and the anthropics
paragraph
- Argument: The fourth row of the same chart is a typicality
assumption (typical observer) and it changes the answer from 78% to 54%,
with "never spread" at 45%. The sentence is true only for typicality
among civilisations. The paragraph describes four conventions, the chart
has five rows, and the term "self-indication" appears in the chart and
in the next caption without ever being introduced. "The results below
follow Olson and Ord (2021), Finnveden (2019) and Cook (2022) where they
overlap" does not say what was checked.
- Proposed change: Caption: "The first three rows agree to
within a few points: asking whether we are typical among civilisations
changes little. Asking whether we are typical among observers (row four)
or weighting crowded universes (row five) changes a great deal." In the
paragraph add "(so far, or over all time; the two give nearly the same
answer)" and "This last view is called self-indication." Replace the
citation sentence with the specific result that was reproduced, or cut
it.
- Tested: 250k data: site 0.782, ssa_now 0.778, ssa_all
0.764, ssa_obs 0.539 (stuck 0.454), sia 0.
- moderate / Section 01: "Someone confident that it does lands
near 57%"; section 02: "each one is governed by a single prior"; scan
caption: "'alone' is the majority answer in over 99% of them"; "To check
that the result is not a product of my own choices"
- Argument: Each claim sounds bigger than the evidence beside
it. "Confident" is a 60% prior; at 80%, on the chart two screens down,
the answer is 49%, below half, and the biology optimist lands at 14%. "A
single prior" ignores the number of hard steps, which the page's own
table says moves the answer −9 to +14 points. The scan draws the prior
that life starts easily log-uniformly from 0.05 to 0.6, median 0.17, so
it never visits the optimists and its ranges are the author's own
choice; "majority in over 99%" restates that range.
- Proposed change: "Someone 60% sure that life starts easily
lands near <easy_alone>; someone 80% sure lands just under half
(<wf_a1>)." "Each one is governed mainly by one prior (for
'alone', the number of hard evolutionary steps matters about as much)."
Scan: "I drew <scan_n> alternative sets of priors from ranges I
chose around my own (the prior that life starts easily runs from 5% to
60%). Within those ranges 'alone' is nearly always the majority answer.
Outside them it need not be: see the biology optimist above."
- Tested: scan4.py:
w_fast=lg(0.05, 0.6); levers
w_fast 0.6 gives 0.586, 0.8 gives 0.487 (250k); leverage: no hard steps
−0.089, three or four +0.143.
- moderate / Waterfall chart
#waterfall, and the
use of --sig amber across charts
- Argument: The start and end bars begin at an unlabelled 30%
baseline, so 58% and 78% are drawn in the ratio 1.71 when the true ratio
is 1.34. Amber means "they arise but never spread" in the hero, and in
the next chart down it means "alone, after the evidence" and "this
pushes towards alone". It then means "Earth as a given" in the
forecasts, close stars in the flyby, older stars, hominins and the
molecular clock. Legends do not carry from one chart to the next.
- Proposed change: Start the waterfall axis at 0%, or draw
start and end as marker lines with numbers. Colour the two totals with
var(--c-rare), the same blue as "alone" in the hero, and use neutral up
and down colours for the steps. Reserve amber for "never spread" in
every model chart and choose a separate accent for the study
charts.
- Tested: charts1.js drawWaterfall:
x = d3.scaleLinear([0.3, 1], ...), bars from x(0.3), ticks
from 0.4. Screenshots fig_1280_light_01_waterfall.png and
sec_1280_dark_headerhero.png.
- moderate / Timeline
#timeline; bmax title "The
early start of life is worth a few bits at most" and caption "if only
undisputed fossils are counted it is between 1.5 and 6"
- Argument: Timeline: 27 dots and not one label. The events
are readable only by hover, which a phone does not have. Axis ticks read
"4 Ga" and "+1 Gyr", never defined. Bmax: the title is in bits and the
axis is in odds; the undisputed-fossils line drawn runs from 2.8 down to
1.4, so the caption's "1.5 to 6" and "20 to 26" describe cases that are
not drawn. "(best case)" on the axis is unexplained.
- Proposed change: Timeline: label six events directly (first
oceans, earliest disputed and undisputed life, complex cells, animals,
humans, end of the biosphere) and use "4 billion years ago" and "in 1
billion years". Bmax title: "Life's early start favours an easy origin
by 13 to 1 at best". Caption: "With only undisputed fossils the odds are
under 3 to 1 for any number of later steps (bottom line)." Either draw
the no-later-hard-step case or drop "20 to 26".
- Tested: data.js bmax, future 0.9: Apex, 1 to 6 later steps:
2.82, 2.11, 1.76, 1.56, 1.44, 1.35; pacing cases 2.2 and 4.7.
Screenshots fig_1280_dark_14_timeline.png,
fig_1280_dark_15_bmax.png.
- moderate / Section 06: the Snyder-Beattie paragraph and the
amber "NEW" pill on the table row "an apparent units slip in the
hard-steps tables"
- Argument: The page publicly alleges an error in a named
paper, says in the same breath that the authors were not asked, and
gives that allegation one of only three highlighted "new" badges. Round
2 (novelty and citations) said to contact the authors before release;
the page reports that this was not done. The sentence carries four
hedges in a row and then says the conclusion "stands either way" after
saying the weight on extreme rarity halves.
- Proposed change: Write to the authors before publishing.
Until they answer, move it to a method note: "I could reproduce the
paper's tables only by reading thresholds printed as powers of ten as
powers of e. I have asked the authors and will update this." Change the
table entry to "6 to 9 to 1 with later hard steps" and the pill to plain
"new in degree".
- Tested: redteam2.md, novelty_and_citations and
study_fidelity presentation advice; index.html lines 197 and 280.
- moderate / Section 04: "in line with 11.7 ± 1.3 from
García-Sánchez and colleagues (2001) and 10.6 ± 4.5 from Fernández-Puig
and colleagues (2026)"
- Argument: The best-known Gaia-based figure, 19.7 ± 2.2 per
million years within a parsec (Bailer-Jones and colleagues 2018), is
nearly twice the project's 11.1 and is left out. The study report deals
with it (0.56 of that value, with the excess attributed to spurious
parallaxes); the page cites only the two numbers that agree. A
specialist will see the omission at once. The "they only need to wait"
step is also skipped: passing stars matter only if one of them hosted
someone.
- Proposed change: Add: "and well below the 19.7 ± 2.2 of
Bailer-Jones and colleagues (2018), which a later analysis traces mainly
to spurious distance measurements." Then: "So if even one star system in
twenty thousand had hosted a civilisation able to cross a single parsec,
it could have come here without ever crossing the Galaxy."
- Tested: studies/flyby/report.md lines 15 and 101.
- moderate / Section 03: "These six controls are the ones that
turned out to matter." and the playground readout
- Argument: "Rocky planets die young" moves the default
answer by one point over its whole range (79% to 78%), and by two points
under "A typical civilisation". Under "Crowded universes count more" the
first two sliders do nothing at all (71% at 2%, 50% and 98%), with no
explanation. The readout prints 78% twice in one line, and
toLowerCase() turns "Galaxy" into "galaxy". The "hard
steps" slider sets candidate steps (mean 1.34, snapped to 1.35 and shown
as 1.4) while the model's mean number of hard steps is 1.15.
- Proposed change: "Five of these six controls move the
answer; the sixth matters only if we count ourselves as typical." Add a
note under the bar when the last convention is selected: "This view
selects crowded universes whatever you assume about biology, so the
first two sliders stop mattering." Delete the second "Chance that no
other civilisation ..." sentence. Lower-case only the first letter of
the second answer. Relabel the slider "Candidate hard steps on the way
to us" or show the implied mean number of hard steps.
- Tested: Playwright slider sweeps under all four
conventions; no NaN, no negative percentage, reset works, keyboard
arrows work. COMBO fast 0.98, steps 0.2, others 0: "then nobody else has
ever arisen in the galaxy".
- moderate / style.css colour tokens: verdictBar label fill
#10151f on --c-empty; --fg3; light-theme --sig as text
- Argument: Contrast below 4.5:1 on small text. The first
number in the headline bar ("39%" on #5a6b8f, dark theme) is 3.4:1. The
slider notes, which carry the meaning of each control, are 3.9:1 (dark)
and 3.7:1 (light). The section tags are 3.4:1 in the light theme.
Light-theme amber text (slider values, the playground's 78%, the "new"
pills at 0.66rem) is 3.2 to 3.4:1. Toggle buttons are 33 px tall, below
a comfortable touch target.
- Proposed change: Dark theme: use white text on the
empty_universe segment (5.3:1) and --fg3 #8591a8 (5.2 to 5.9:1). Light
theme: --fg3 #5f6b85 (4.7 to 5.1:1) and a separate text amber #8a5a00
(5.2 to 5.7:1). Give
.seg button min-height 44px under 760
px.
- Tested: WCAG ratios computed from the hex values in
style.css for 24 pairs; replacements computed the same way.
- moderate / Section 10 callouts: "If others arose and never
spread (16%) ... The chance that a universal barrier to lasting
expansion exists rises from 15% ... to 26%"; "The chance that no
civilisation exists anywhere in the part of the universe that could ever
reach us is 52%"
- Argument: A 26% barrier inside a 16% scenario looks like an
error. It is not (most barrier universes are ones where nobody else
arose to hit it), but the reader is not told. The 52% sits beside a hero
class "Nobody, anywhere we can see" at 39%: two "nobody in the universe"
numbers with no explanation, and "exists" where the model means "has
ever arisen".
- Proposed change: "The chance that a universal barrier
exists rises from 15% to 26%. That is larger than the 16% because in
over half of those cases nobody else arose to run into it." And: "The
chance that no other civilisation has ever arisen anywhere in the part
of the universe that could reach us is 52% (39% if you also require that
nobody is on the way)." Check the bracketed gloss against the class
definition before using it.
- Tested: 250k: p_barrier 0.256, stuck 0.163, stuck_barrier
0.117; reach 0.52; empty_universe 0.391.
- minor / Limits chart
#kiii-limits; forecasts
chart #forecasts; count chart #never; fp-hist
title
- Argument: Limits: a third series "6dF, southern sky" is
drawn and never mentioned in text or caption; the label "100,000
ellipticals" disagrees with "114,000" in the text; only one of three
amber spiral arrows is labelled and one sits on top of a purple arrow at
75%; nobody explains why the limit worsens at 90%. Forecasts: the "15%"
label is partly under the blue 19% dot. Count: the x axis stops at
10^-44 while the caption quotes 10^-52; "dashed: before the evidence
filled: after" runs together; "millions" in the text is beyond the 95th
percentile (10^5.3). Fp-hist: the title says "none confirmed" above five
red bars.
- Proposed change: Limits: add to the caption "The purple
line is an independent, smaller sample from the southern sky (6dF
survey). Limits weaken past 85% because few galaxies are bright enough
to test." Label "114,000 ellipticals" and offset the spiral arrows by 8
px. Forecasts: put labels left of the dot when another dot lies within
30 px to the right. Count: add an arrow "continues to 10^-52" at the
left edge, split the legend into two items, and write "hundreds of
thousands". Fp-hist title: "A hundred thousand galaxies; the few that
look dimmed are measurement failures".
- Tested: Overlap script: "15% under dot (14x5)"; fp counts
below −0.6: 1, 1, 3, 1; limits rows for SDSS and 6dFGSv; nq 0.95 =
5.35.
- minor / Section 12: "two rounds of adversarial review, by
fifteen critics in all, assigned to argue for the main schools of
thought (rare Earth, hard steps, ...)"; meta description "attacked by
two rounds of critics";
.num on "over 99%"
- Argument: Round 1 had 7 critics and round 2 had 9, which is
sixteen, and this is a third round. No critic was named rare Earth or
hard steps (the lenses were astrobiologist, hansonian, expansion
sceptic, non-exclusivity, SETI optimist, anthropics, statistician and
three audits). Text values such as "over 99%" are set in the monospace
number style and look like code.
- Proposed change: "three rounds of adversarial review, by
critics in all, who argued the cases of an astrobiologist, a SETI
optimist, an expansion sceptic, a believer in expanding aliens and an
anthropic reasoner, and audited the code, the statistics and the
citations". Apply
.num only when the bound value starts
with a digit.
- Tested: redteam1.json has 7 lenses, redteam2.json has 9.
Screenshot fig_1280_dark_05_scan.png shows the monospace "over
99%".
- minor / Section 01: "What the model adds is where the freed
probability goes"; section 08 heading "The honest range spans fifty
powers of ten"
- Argument: Two sentences sound like findings and are
restatements of priors. The next caption says the freed share "is handed
to the others in proportion to what they already had", so where it goes
is decided by the priors, not discovered. The fifty-decade range is set
by the choice to let the origin-of-life rate span up to 100 decades (the
notes' soft spot 1); "it survives every measured input I could add" is
true because no input touches it.
- Proposed change: "Where the freed probability goes is
decided by the priors: mostly to an empty Galaxy, and next to a Galaxy
where expansion fails." Heading: "How many civilisations? My priors span
fifty powers of ten, and no measurement narrows the low end".
- Tested: MODEL4_NOTES soft spots 1 and 2; mean_like by class
0.37 to 0.54 against 0.004.
Checked and found correct
- No console errors, page errors, failed requests or HTTP 4xx at 1280
and 390 px in dark and light themes (Playwright; shot.js and my
probe.js). The three web fonts load.
- No blank bound number: every [data-b] element has text and every key
resolves in FERMI_B (probe.js: blanks = [], unbound = []). No element
contains NaN, undefined, Infinity or null.
- No horizontal page overflow on the phone:
documentElement.scrollWidth = 390 at a 390 viewport; body text has a 20
px gutter each side.
- Hero convention toggle works and gives sensible numbers: 78/16/6,
76/17/7, 53/46/1, <1/69/31. Tooltip on the hero bar shows the class
name, long label and value.
- Playground: all six sliders swept at three positions under all four
conventions, plus four extreme combinations. Percentages stay in 0 to
100 and never show NaN or a negative; reset restores defaults; keyboard
arrows work. Directions are sensible (easier life lowers 'alone', more
hard steps raises it, a barrier raises 'never spread').
- No em-dashes or en-dashes in index.html, the three chart scripts,
bind.js, wave2.js, study_cards.json or data.js (grep count 0).
- Bound headline numbers match the model output: 58% prior, 78%
posterior, 16% stuck, 35% to under 1% excluded, 47% + 31% split of
'alone', barrier 15% to 26%, 8% 'now', 52% and 9% (data.js against
tables_v4.md sections A and B; re-checked on a scratch rebuild from the
250k results).
- Waterfall arithmetic is internally consistent (58 − 8 + 3 + 23 + 2 =
78 on the trial; −7 / +3 / +22 / +2 on the 250k rebuild, where the
rescale factor is 0.992).
- Limits caption numbers match the data: ellipticals 0.285% at 75%
dimming, spiral discs 2.56% at 75% (data.js fp.limits and tf).
- SETI caption numbers match the curve: about 330,000 at 1.8e17 W on
the 1 to 10 GHz line, about 110 at the Sun's output.
- Flyby figures match the study: 11.1 per million years, about 20,900
systems within a parsec since the Great Oxidation (flyby_exposure
N_central 20878.5, range 11,190 to 58,810); the chart shows 9 catalogued
passages inside one parsec.
- Section 04 callout matches headstart/report.md: 95% limit 1.05e-9 to
1.21e-9 per planet, 3.4e-9 to 9.1e-9 with planet-count uncertainty.
- Rank caption's first claim holds: at a 10.6 billion year planetary
lifetime our rank is 0.34 to 0.71 for every number of hard steps.
- Light theme renders correctly: hatch, limit arrows, heat map line
and legends all visible (16 light-theme screenshots inspected).
- The round 2 request to say plainly what the studies did not change
is met in section 11 and in the 'reproduction / new in degree / new'
labels; preprints are marked; Annis and Zackrisson are credited where
the galaxy test is introduced.
Not checked
- The final page after the 400-draw scan finishes: I saw only 12 scan
draws, so 'nine in ten between 57% and 88%' and 'over 99%' could not be
checked against the real scan.
- The second-wave cards: only two existed. The text of cards still to
come, and whether each has a referee report, could not be checked (10 of
13 second-wave study folders had no referee report when I looked).
- Citations dated 2026 (Fernández-Puig, Zuckerman, Curtis, Kipping
2026, Haqq-Misra and Wolf) are beyond what I can confirm from memory; I
checked only that the page matches the project's own study reports.
- Lineweaver (2001): from memory, that paper's average head start is
1.8 ± 0.9 billion years over all Earth-like planets, a different
quantity from the page's 4 billion years among older stars. If so, 'the
stellar ages agree' should be limited to the fraction. Not re-read for
this review.
- '14 rocky planets around red dwarfs with a clear verdict, none of
them in the habitable zone': the census in data.js includes TRAPPIST-1 d
and e; I did not check their outcome codes against the literature.
- Whether the 32% forecast of a second origin of life in the Solar
System is sensible given a 20% posterior that life starts easily; it is
outside my lens and I only confirmed the page prints what the model
outputs.
- Real-device behaviour (iOS Safari momentum scrolling inside frames,
tap-to-tooltip): tested only in headless Chromium with touch
emulation.
- Bailer-Jones et al. (2018) 19.7 ± 2.2 per million years: taken from
the project's flyby report and my memory, not re-fetched.
Code errors
- report/site/index.html / lines 237 and 244
- Problem: Duplicate id "future" on the section and on the
chart container.
- Fix: Rename the inner div to id="future-chart" and update
drawFuture in charts1.js to mk("#future-chart", ...).
- Impact: Section 09 loses its heading, intro, frame and
caption; the chart is unreadable on phones.
- report/site/charts1.js / line 17
fam and
bind.js line 8 spread
- Problem: The three families are computed as alone, stuck
and 1 − alone − stuck, but
alone (N_ever < 1) overlaps
the en_route, unnoticed, hidden and excluded classes.
- Fix: Compute families from the class posterior
(empty_universe + rare; stuck; the other four), or relabel the third
card and state the overlap.
- Impact: Cards read 78 / 16 / 6 under a bar that reads 73 /
16 / 11.
- report/site/charts1.js / drawLevers,
diag: true
panels (lines 176-177, 188)
- Problem: Draws an 'answer = prior' diagonal with x = a
universe-level switch prior and y = a class share; the label is
overdrawn by the line.
- Fix: Plot
d.prior.stuck and
d.prior.unnoticed as dashed before-the-evidence curves and
remove the diagonal.
- Impact: Caption claims ('raises it above that prior',
'simply returns the prior') are contradicted by the drawing.
- report/site/charts1.js / drawWaterfall line 77 and bind.js
line 9 (
shk)
- Problem: Shapley contributions are silently multiplied by
(base lift) / (Shapley-run lift) so the bars sum to the headline; on the
trial data this turned +0.214 into '+23 points' while tables_v4.md
prints +0.214.
- Fix: Remove the rescale and draw the end bar from
M.shapley.site.end, or keep it and say so in the caption. On the 250k
data the factor is 0.992, so removing it costs nothing.
- Impact: Page and tables disagree by two points on the
largest contribution whenever Monte Carlo noise is not negligible.
- report/site/charts1.js / drawPlay line 255
- Problem:
f[1][0].toLowerCase() lower-cases the
whole label, turning 'Galaxy' into 'galaxy'.
- Fix:
f[1][0].charAt(0).toLowerCase() + f[1][0].slice(1).
- Impact: Cosmetic inconsistency in the playground
readout.
- report/site/charts1.js / line 13
pct (used by
drawFuture and drawForecasts) versus bind.js line 4
- Problem: The chart formatter prints 0.9975 as '100%'; the
text formatter prints 'over 99%'. The scan chart prints 'Above the line
in 100%' while its caption says 'over 99%'.
- Fix: Use one formatter:
v > 0.995 ? '>99%' : ..., and 'all N' when a share is
exactly 1.
- Impact: The model appears to forecast a certainty.
- report/site/charts1.js / drawCamps line 163
- Problem: The 'Base case' row is drawn from M.camps (a
separate run) instead of M.base.
- Fix: Use M.base.schools.site and M.base.prior_alone for row
0.
- Impact: On the trial data the row read 77% (59%) beside a
78% (58%) headline.
- report/site/charts2.js / lines 205-236
- Problem: Dead functions drawNever and drawCamps (never
called; drawNever reads M.N_ever_hist, which does not exist).
- Fix: Delete them.
- Impact: None today; a trap for the next edit.
- report/site/style.css / @media (max-width: 760px)
figure svg { min-width: 680px; }
- Problem: Forces every chart to twice the phone's width;
label-left charts open with their data off-screen.
- Fix: Remove the rule and make the charts responsive as
described in the objection.
- Impact: 16 of 19 charts unreadable at first sight on a
phone.
Tables
CLASS AGAINST 'ALONE' (my run, 60,000 samples, Earth as a given)
class posterior of which N_ever<1 prior of which N_ever<1
empty_universe 0.389 0.389 0.261 0.261
rare 0.338 0.338 0.212 0.212
en_route 0.041 0.039 0.032 0.031
stuck 0.161 0.000 0.099 0.000
unnoticed 0.046 0.010 0.032 0.009
hidden 0.021 0.004 0.012 0.002
excluded 0.005 0.002 0.352 0.068
Partition: 0.727 / 0.161 / 0.112. Cards as drawn: 0.782 / 0.161 / 0.057.
LEVERS (250k data; value: prior class share -> posterior class share)
q_barrier 0.00: stuck 0.041 -> 0.059 | 0.05: 0.059 -> 0.098 | 0.15: 0.096 -> 0.164 | 0.30: 0.153 -> 0.245 | 0.50: 0.229 -> 0.324
q_cc 0.00: unnoticed 0.011 -> 0.009 | 0.02: 0.018 -> 0.024 | 0.05: 0.030 -> 0.043 | 0.10: 0.050 -> 0.075 | 0.25: 0.108 -> 0.160 | 0.50: 0.205 -> 0.269
w_fast 0.05: alone 0.669 -> 0.855 | 0.2: 0.585 -> 0.781 | 0.6: 0.360 -> 0.586 | 0.8: 0.248 -> 0.487
FUTURE OBSERVATIONS (250k, Earth as a given; alone / never spread / forecast)
settlement shown infeasible 0.535 / 0.466 / 0.26
second origin of life 0.578 / 0.311 / 0.31
biosignature in 25 planets 0.608 / 0.290 / 0.15
settlement shown feasible 0.883 / 0.039 / 0.59
base 0.782 / 0.163
PLAYGROUND SWEEP (trial data, Earth as a given; chance alone)
life starts easily 2% / 50% / 98%: 87 / 63 / 39
hard steps 0.2 / 2 / 3.4: 68 / 84 / 92
barrier 0 / 50% / 90%: 87 / 64 / 55
low-footprint 0 / 40% / 80%: 80 / 66 / 56
everyone hides 0 / 15% / 30%: 79 / 73 / 68
planets die young 5% / 50% / 95%: 79 / 78 / 78
Crowded universes: life-starts-easily slider 2% / 50% / 98% gives 'never spread' 71 / 71 / 71.
PHONE (390 px) 16 svg charts: drawn 680 px wide in a 348 px frame,
scale 0.65, smallest text 7.2 px, row labels 8.2 px. 3 bar charts (hero,
schools, playground): 328 px, text 11.5 px. Future chart: 350 px, text
3.7 px. Table: 350 px visible of 610, 1,789 px tall. Toggle buttons 33
px high. Page length: 5,900 words; 24 laptop screens, 31 phone screens.
First study chart at screen 9.8 (laptop), 12.7 (phone).
CONTRAST (WCAG ratio)
dark: bar label on empty_universe 3.42 | --fg3 on bg 4.38, on panel 3.86 | --fg2 on panel 7.65
light: --fg3 on bg 3.40, on panel 3.69 | --sig text on panel 3.43, on bg 3.17 | link 4.68
fixes: white on #5a6b8f 5.34 | dark --fg3 #8591a8 5.24 to 5.94 | light --fg3 #5f6b85 4.72 to 5.11 | light text amber #8a5a00 5.23 to 5.66
Advice
Order of work. (1) Fix the duplicate id, then re-read the section 09
caption against the chart, because it is wrong in two places. (2) Decide
the hero: a true 73 / 16 / 11 partition with 78% explained once, or 78 /
16 with an honest third card. Then make the lede, cards, section 10 and
playground all use the same definition. (3) Fix the three crossing-time
sentences. (4) Rebuild data.js from the 250k results and the 400-draw
scan, regenerate page_draft.md, and re-check every caption that quotes a
hard-coded number. (5) Rewrite the four captions that contradict their
charts (levers, camps, brains, rank). (6) Make the label-left charts
responsive; this is one change to the shared drawing helper.
Jargon to define on first use: prior (used in a heading before it is
explained; add 'what you believed before the evidence'), posterior
(evidence caption), self-indication, biosignature, habitable zone, Ga
and Gyr (chart axes and one camp label), LUCA, odds ratio, bits, GHz and
hydrogen line, 6dF, 250 K, Oort cloud, 'low-footprint' (used in the hero
legend, explained only in a slider note five screens later), '95%
limit'.
Steps the argument skips: why the prior is 58% (the implied
one-in-a-trillion per planet); why passing stars matter (only if one
hosted someone); where 'unusual by a factor of about eight' comes from
in the rank caption; why the galaxy limit weakens at 90% dimming; why a
26% barrier can sit inside a 16% scenario.
Hedge stacks and committee prose: 'An independent referee reproduced
this, but it is an inference from the published tables: I have not
contacted the authors, I found no erratum, and the paper's qualitative
conclusion stands either way'; 'the results below follow Olson and Ord
(2021), Finnveden (2019) and Cook (2022) where they overlap'; 'found a
few things that appear to be new'; 'none confirmed to be missing its
light'; the Vermeij sentence ending 'and it also leaves less support for
the opposite view that uniqueness is just an artefact of age'; the
Sources paragraph. Each can be one plain sentence.
Placement. The hero bar is the right first chart. Consider a one-line
strip under the cards with three thumbnails or links ('21,000 stars have
passed within a parsec', '114,000 galaxies checked', 'set your own
priors') so a skimmer learns in the first screen that there is original
data and a playground; at present the first original-data chart is ten
screens down. The camps chart (21 rows) and the future chart (13 rows)
are the two that cannot be read in five seconds; cut each to the rows
that move.
What works and should be kept: the waterfall and its one-sentence
explanation of a Shapley value; 'Three answers, three dials'; the
candour of section 11 and of the critics paragraph; the before/after
dumbbell with the fit column; the playground, which behaves correctly
everywhere I pushed it.
Critic: the
camps that disagree with the headline
Overall verdict
Not ready to publish from this lens. The model is not broken: I
reproduce 0.78 (prior 0.58-0.59), and the base prior on life (20% easy)
sits in the middle of the published range rather than at its pessimistic
end. The lede and first callout, however, present a prior as a finding.
Among the explanations the silence leaves standing, the split was
73/15/12 before any evidence and is 73/16/11 after; the six surviving
classes predict the data about equally well (likelihoods 0.37 to 0.54);
and the posterior chance that life starts easily equals the prior at
every slider setting (0.20 to 0.20 at base). The page never prints that
20%, nor the 100 orders of magnitude behind it. Three further problems
are checkable: the headline tiles double-assign 5 points (78% includes
"on their way", which the 6% tile claims), the robustness scan caps the
easy-life prior at 0.60 so "alone is the majority in over 99%" is
manufactured, and the model credits early life at 2.2 to 1 while the
page reports 13 to 1 as reproducing. Under priors my camp would defend
the same model gives alone 0.14 to 0.39, "arise and do not settle the
Galaxy" 0.43 to 0.68, and a 42 to 70% chance another civilisation exists
now. The single most important change is to rewrite the lede and first
callout so they say the evidence deletes one answer and does not choose
among the rest, with the 20% prior printed beside the 78%.
Objections
- major / Lede 'Most likely there has never been anybody else
in our Galaxy.'; first callout 'the chance that no other civilisation
has ever arisen in our Galaxy is 78%, up from 58% before looking at any
evidence'; figure note 'The silence here does nearly all the
work.'
- Argument: The 20-point rise is the deletion of one class
(evident settlement, prior 0.35) with its mass shared out in proportion
to the other priors. Conditional on that class being false, P(alone) was
0.80 before the evidence and is 0.785 after. On mutually exclusive
classes the survivors split 73.5/15.0/11.5 before and 73.2/16.3/10.6
after. Odds of alone against the runner-up go from 5.95 to 4.73, so the
evidence moves them 1.26x towards 'never spread'. Class likelihoods are
flat (0.44, 0.47, 0.37, 0.49, 0.41, 0.54). The posterior P(life starts
easily) equals the prior at every lever setting in the project's own
JSON (0.05 to 0.051, 0.2 to 0.204, 0.8 to 0.801): early life raises it
to 0.38 and the silence returns it to 0.20. In 12 of the 13 prior sets I
ran, P(alone) among surviving explanations ended at or below where it
started (range -22 to +4 points). The page says this in a figure note
('its share is handed to the others in proportion to what they already
had') but the lede, tiles and callout say the opposite.
- Proposed change: Lede: 'Most likely no other civilisation
has ever arisen in our Galaxy: about three chances in four if, like me,
you start out doubting that life begins easily. If you start out
believing it does, the same evidence points instead to civilisations
that arise and never settle the Galaxy, a limit that would probably
apply to us too.' Callout: 'The result: the evidence rules out one
answer, a Galaxy visibly settled, which held 35% of the probability
beforehand. It does not choose among the rest. Among the answers that
survive, the shares were 73%, 15% and 12% before the evidence and are
73%, 16% and 11% after: nobody else has ever arisen here; others arose
and none settled the Galaxy to stay; someone did spread and is
unnoticed, hiding or on the way. Those shares are my starting
assumptions, chiefly a 20% chance that life starts easily. On a biology
optimist's assumptions the first two swap, to 14% and 60%.' Figure note:
replace 'The silence here does nearly all the work' with 'The silence
removes one answer and does not choose among the others.'
- Tested: a1.py, a8.py (n=60,000) and integrate4_results.json
(n_per_run 250,000): prior empty+rare 0.476, stuck 0.097,
en_route+unnoticed+hidden 0.075, excluded 0.352; posterior 0.728, 0.162,
0.105, 0.005. Ablation in the JSON: P(fast) prior 0.201, early 0.381,
early+late 0.362, all 0.204.
- major / Hero tiles '78%. Nobody else, ever ... we are the
first', '16%', '6%. Someone did spread. They are here in a form we have
not noticed, or hiding, or still on their way from another galaxy';
bind.js
spread = s => Math.max(1 - s.alone - s.posterior.stuck, 0)
and alone_site: pct(S.site.alone); charts1.js line
253
- Argument: 'Alone' is defined as N_ever < 1 and overlaps
three other classes. Of the 0.78, 0.039 is 'expanders already hold over
1% of the universe and have not reached us', 0.014 is a Galaxy settled
from outside by unnoticed or hidden lineages, and 0.002 is the
claimed-Galaxy class. The third tile's text claims 'still on their way
from another galaxy', but its number (1 - alone - stuck = 0.056)
excludes almost all of that class (en_route is 0.040, of which 0.039
sits inside the 78%). Read as described, the tiles sum to 105%. The hero
bar, drawn from the seven classes, will show 73% for the two 'alone'
segments beside a tile that says 78%. In 1.6 points of the 78 somebody
is in the Galaxy now, so the lede's 'never been anybody else in our
Galaxy' is false there; in 3.9 points older expanding civilisations
exist, so 'we are the first' misleads.
- Proposed change: Make the three tiles the exclusive
classes: 73% 'Nobody else, ever' (empty_universe + rare), 16% 'They
arise, and none settles the Galaxy' (stuck), 11% 'Someone did spread'
(en_route + unnoticed + hidden + excluded). In bind.js: alone_tile =
posterior.empty_universe + posterior.rare; spread_site =
posterior.en_route + posterior.unnoticed + posterior.hidden +
posterior.excluded. Keep 78% only where the text says 'no other
civilisation has arisen in the Milky Way' and add 'in 4 of those 78
points expanding civilisations elsewhere already hold over 1% of the
universe'. Apply the same definition in the playground (charts1.js line
253).
- Tested: a1.py class-by-alone cross-tabulation: en_route
0.0415 total, 0.0392 alone; unnoticed 0.0461, 0.0100 alone; hidden
0.0222, 0.0039 alone; excluded 0.0047, 0.0018 alone. JSON at 250k: empty
0.391 + rare 0.337 = 0.728; alone 0.782.
- major / Price-tag paragraph: 'The 78% rests mainly on one
judgement the data cannot make for us: whether life starts easily on a
suitable planet. Someone confident that it does lands near 57%'
- Argument: (1) The page never states the prior the answer
rests on. w_fast = 0.20 and the slow tail to 10^-100 appear nowhere in
index.html; bind.js computes fast_prior, fast_post, planet_med,
planet_lo and planet_hi and no element displays them. Round 2's
astrobiologist asked for the implied prior to be printed (median
10^-11.8 per rocky habitable-zone planet, 5 to 95% 10^-54.5 to 10^-3.6);
it is still only in tables_v4.md. (2) 'Someone confident' is the w_fast
= 0.6 row (0.586 at 250k). A confident reader at 0.9 gets 0.43 to 0.45;
with Mills-style steps as well, 0.21; the page's own Biology optimist
gets 0.14. (3) It is two judgements: the longest tail in the model sits
on abiogenesis (80% weight, up to 100 decades) and a short one on
expansion (15% atom plus at most 8 decades; prior P(p_exp > 0.1) =
0.36, median 3%). Giving expansion the abiogenesis tail yields alone
0.68, stuck 0.28; giving abiogenesis the expansion tail yields 0.52,
0.36. A single log-uniform prior on the origin rate gives 0.45, 0.71,
0.88, 0.91, 0.98 for floors of 10^-3, -10, -22, -30, -100.
- Proposed change: 'That is the answer I would bet on, and
here is what the bet rests on. Before any evidence I gave a 20% chance
that life starts readily on a suitable planet and spread the other 80%
over rates down to one origin in 10^100 planets. I gave expansion a much
shorter leash: a 15% chance that nobody can do it, and otherwise at most
eight powers of ten of difficulty. The evidence corrects neither choice.
After all of it the chance that life starts easily is still 20%, because
the early start of life on Earth (about 2 to 1 in favour) and the
silence (about 2 to 1 against) cancel. Put 60% on easy life and the
answer is 59%; put 90% and it is about 44%; add the view that evolution
has no improbable steps and it is 14 to 21%, with "they arise and none
settles the Galaxy" leading at about 60%.' Also display the implied
prior per planet in section 02.
- Tested: a2.py/c1.json, a3.py, a5.py, c2.py, a10.py at
n=60,000 (three seeds for w_fast 0.9: 0.428, sd 0.004; one seed gave
0.448). grep of index.html for data-b attributes: fast_prior, fast_post,
planet_med absent.
- major / Section 06: 'Kipping (2025) found that life's early
start favours an easy origin over a hard one by 13 to 1. That figure
reproduces ... 9, 7 and 6 to 1'; study table '6 to 9 to 1 with later
hard steps'; model4.py tau_over_T=(0.02, 0.20), fast camp log10 lambda ~
U(0, 3), gated branch
- Argument: The model that produces the headline credits
early life at 2.2 to 1 (early+late) or 2.4 to 1 (early only), not 6 to
13. With LUCA-only dating it is 4.0; in the no-hard-step branch, where
the timing study reports 20 to 26, the model gives 1.9 to 2.1 (3.3 to
3.7 with LUCA). Three choices dilute it: tau is uniform up to 0.20 of
the window, so 78% of its mass lies beyond the LUCA range; the 'fast'
camp starts at one origin per 5.6 Gyr window, so a quarter of it does
not predict an early start; and the gate clock starts at abiogenesis,
which makes early life nearly automatic given a late arrival. The
project's own abiogenesis brief gives R a median of about 6 and its
table implies about 5. A reader who sees '13 to 1 reproduces' will
assume the 78% already absorbs it.
- Proposed change: Add to section 06: 'In the full model the
early start counts for less, about 2 to 1 (4 to 1 with the LUCA date),
because the model averages over the disputed dates, counts as "easy" any
rate from one origin per habitable lifetime upward, and includes worlds
where a slow environmental clock leaves little room for a late origin.
Had I credited it at 6 to 1, the headline would be 68%; at 9 to 1, 63%;
at Kipping's 13 to 1, 58%.' Add a camp row 'Early life at full published
strength'. In model4.py add a lower bound for the fast camp (fast_lo =
0.75, one origin per Gyr) and use the brief's delay range tau_over_T =
(0.018, 0.125) as base or as a named row.
- Tested: a4.py and a7.py (n=60,000). BF fast:slow by branch,
base: gated 1.9, one hard step 3.2, two 2.4, three or more 2.0; LUCA:
3.3, 6.4, 4.7, 3.7. Reweighting fast samples to a target BF with the
prior held at 0.20: alone 0.677 (6:1), 0.626 (9:1), 0.581 (13:1); stuck
0.24, 0.28, 0.31. Fast camp restricted to at least 1 per Gyr: BF 2.49,
alone 0.768. Brief's tau range: BF 2.92, alone 0.754.
- major / Section 02: 'To check that the result is not a
product of my own choices, I drew 400 complete alternative sets of
priors at random, from ranges the critics considered defensible ...
"alone" is the majority answer in over 99% of them'; scan4.py draw():
w_fast=lg(0.05, 0.6), p0 = rng.uniform(0.1, 0.5)
- Argument: The scan is centred on the author's base (its
docstring says so) and excludes the camp the page itself tabulates.
w_fast is log-uniform on 0.05 to 0.60: median 0.17, 7.5% of the 400
draws above 0.5, maximum 0.597. The chance of no candidate hard steps is
capped at 0.5; the page's Biology optimist uses 0.7 with w_fast 0.9. The
scan therefore cannot produce the opposing answer, and 'majority in over
99%' and 'nine in ten between 57% and 88%' follow from the ranges. It
tests robustness to the modeller's secondary choices only. Its own
summary gives a 0.85 correlation between posterior and prior.
- Proposed change: Either widen the two ranges to cover the
camp table (w_fast uniform 0.05 to 0.95, P(no candidate steps) uniform
0.1 to 0.8) and report the result, or reword: 'To check how much my
secondary choices matter, I drew 400 alternative sets of priors around
my own, keeping the chance that life starts easily below 60%. Within
that neighbourhood ... The scan does not cover the biology-optimist
school, for which see the table above.' Delete 'To check that the result
is not a product of my own choices'.
- Tested: a6.py: scan4.draw(k) for k = 0..399 gives w_fast
5/50/95% = 0.056/0.172/0.53. Widened scan, 80 draws x 30,000 samples,
everything else as scan4: alone 5/50/95% = 0.35/0.59/0.80; majority
alone in 74% of draws; stuck beats alone in 12%; for w_fast above 0.65
the median is 0.47 and alone is the majority in 41%; minimum ESS
882.
- moderate / Lede 'nothing ever spreads between the stars, and
that would apply to us too'; tile 'They arise, and never spread';
section 10 'the obstacle is ahead of us ... it is not reassuring';
'finding life elsewhere would be bad news in exactly the sense Nick
Bostrom argued'
- Argument: The class is 'civilisations arose in the Galaxy
and the expected number of permanent, Galaxy-filling lineages reaching
us is below one'. It contains any expansion that stalls, dies back or
settles a bounded region: Landis percolation, Carroll-Nellenback steady
states with finite settlement lifetimes, and came-and-went waves
(admitted in the caveats and in MODEL4_NOTES soft spot 4). 'Nothing ever
spreads between the stars' is a far stronger claim. Only 72% of the
class is the universal-barrier atom, so 'that would apply to us too'
holds for 12 of the 16 points. The barrier means sustained Galaxy-scale
expansion is infeasible; it says nothing about survival, and the model's
lifetime prior is independent of it. For Drake's and Sagan's heirs a
Galaxy of long-lived stay-at-home civilisations is the expected benign
outcome, so 'bad news' and 'not reassuring' are editorial. Under
Mills-leaning priors with an expansion sceptic's prior this class is 68%
and carries a 54% chance that someone is out there now.
- Proposed change: Tile: 'They arise, and none settles the
Galaxy to stay'. Lede clause as in the replacement lede. Section 10: 'If
others arose and none settled the Galaxy (16%), something limits
expansion, and in about three quarters of those cases it would limit us
too. The model cannot say whether the limit is extinction, physics or a
lack of motive; only the first is bad news about survival.' Replace
'finding life elsewhere would be bad news in exactly the sense Nick
Bostrom argued' with 'finding life elsewhere would shift probability
from "alone" to "none settles the Galaxy" (16% to 31%), which is bad
news for hopes of settling the Galaxy and, if the limit is extinction,
for more than that'.
- Tested: a8.py: stuck is 72% barrier; median log10 N_ever in
stuck 2.9 (5 to 95%: 0.2 to 7.0). Class definition read in model4.py
lines 441 to 449. Pocket prior reweighted to cover Carroll-Nellenback
steady states (eps uniform 0 to 1): alone 0.774 to 0.758, so the pocket
prior is not numerically material; this is a labelling problem.
- moderate / Section 02 figure note: 'Almost every row ends
above where it started. The exception worth knowing is the biology
optimist, for whom life and intelligence are both easy'; run4.py CAMPS;
section 06
- Argument: (1) Mills, Macalady, Frank and Wright (2025,
Science Advances 11:eads5698), the main published challenge to hard
steps, is not cited anywhere on the page, although the model's gated
branch (35% prior) is their hypothesis and Carter, Snyder-Beattie, Hart
and Hanson are named. (2) 'Life and intelligence are both easy'
overstates the camp as coded: its implied median chance of a
technological civilisation per rocky habitable-zone planet is 10^-2.5,
about 1 in 300. Mills and colleagues say explicitly that they do not
claim human evolution was inevitable. (3) Calling one of the two main
schools an 'exception' buries it. Of 21 rows shown, 16 share the base
biology and so the base prior of 0.58 to 0.59. Round 2's intermediate
Mills-leaning camp was dropped; in version 4 it gives alone 0.39, stuck
0.43, unnoticed plus hidden 0.19. (4) 'Almost every row ends above where
it started' is true only because the bracketed prior includes the
visibly settled Galaxy. (5) The timing study's result favourable to this
camp is omitted from section 06: pacing fits the dated transitions 3.8
to 5.0 times better than ungated hard steps (an upper bound). (6) 'One
or two shallow steps' reads as an optimist row and is more pessimistic
than base (0.80), because it halves the no-step weight.
- Proposed change: Rename the row 'Life common, no improbable
steps (Mills and colleagues 2025)'. Add two rows: 'Mills-leaning'
(w_fast 0.6, steps {0:0.6, 1:0.25, 2:0.15}, depth 2 to 6, f_site 0.03 to
1, f_persist 0.3 to 1, f_gate 0.1 to 1, f_c 0.03 to 1) and 'Classic
SETI: life common, expansion doubtful' (the same with q_barrier 0.40,
W_exp 2 to 20). Note: 'The rows fall into two groups. With the base
biology, or anything harsher, we are probably alone (66 to 99%). With
biology that makes life common and evolution unhindered, we are probably
not (14 to 39%), and the leading answer becomes that civilisations arise
and none settles the Galaxy (43 to 68%), with a 42 to 70% chance that
one exists now.' Add to section 06: 'Mills and colleagues (2025) argue
that no step was improbable and that evolution waited on the
environment. On the dated transitions that picture fits better than
unconstrained hard steps by a factor of up to 4 or 5, and cannot be told
apart from hard steps that wait for the same gates.'
- Tested: a3.py and a10.py (three seeds: Mills-leaning 0.394
sd 0.008; with sceptic 0.240 sd 0.004). JSON: Biology optimist alone
0.141, stuck 0.601, civilisation now 0.697. grep of index.html and
page_draft.md for 'Mills', 'Drake', 'Sagan', 'Tarter': no hits. Mills et
al. bibliographic details and the 'not inevitable' statement checked on
PMC11827626.
- moderate / Section 09: 'Most of the effort in this field
goes into the observation that would move it least ... More radio
searches of the present kind would change almost nothing.' Section 07:
'The chance that another civilisation exists in the Galaxy right now is
8%.'
- Argument: Both sentences are the base prior restated. A
search is uninformative on the page because the model already believes
nobody is there. Under the priors of the people who run the searches,
the same model gives a 42% (Mills-leaning), 54% (with an expansion
sceptic's prior) or 68 to 70% (the page's Biology optimist) chance that
another civilisation exists in the Galaxy now. A whole-Galaxy
Earth-level null is forecast at 0.91 on base and at 0.58, 0.46 and 0.32
in those camps, and it would move 'alone' from 0.24 to 0.53 in the
classic-SETI camp. For the nearest million stars the null forecast is
0.997 on base and 0.92 to 0.96 in the optimist camps. The page ranks
tests by a null only; a detection settles the question under any priors.
This is the sentence SETI scientists will quote.
- Proposed change: 'On my priors another radio search of the
present kind has a 99.7% chance of finding nothing, and finding nothing
would change little. On a biology optimist's priors the same model gives
a search of the nearest million stars for Earth-level technology a 4 to
8% chance of success, and a search of the whole Galaxy between two
chances in five and two in three. A detection would settle the question
outright under any priors.' In section 07: 'The chance that another
civilisation exists in the Galaxy right now is 8% on my priors, and 42
to 70% on the biology-optimist priors of section 02.'
- Tested: a9.py (n=60,000): forecasts and posteriors for
seven future observations under four prior sets (table attached). JSON
base: techno_null_1e6 predictive 0.997, techno_null_galaxy 0.914.
- moderate / Section 10: 'In 47% of all cases the Galaxy holds
no other life at all'
- Argument: This will be quoted against the author more than
any other number. It is a prior, not a finding: 34% before the evidence,
47% after, by the same proportional redistribution. It exists only
because the slow branch runs to 10^-100. 31% of the posterior 'alone'
mass has an origin rate below 10^-22 per planet and 57% below 10^-10.
The same samples give a 26% chance that Earth is the only living planet
in the observable universe (prior 19%). Stopping the tail at the Spiegel
and Turner floor of 10^-22 (w_fast 0.28 for consistency) gives sterile
0.16, life-free universe 0.003 and alone 0.65. The project's abiogenesis
brief calls the 10^-100 floor 'combinatorial-pessimist' and records that
chemists reject the random-assembly models behind it; a third of
slow-branch draws use a floor deeper than the brief's own baseline of
10^-30. In fairness, the model's 74% chance of other life somewhere in
the observable universe is not out of line with the 2024 survey in which
86.6% of 521 astrobiologists agreed such life likely exists.
- Proposed change: 'On my priors there is a 47% chance that
the Galaxy holds no other life at all. That figure is an assumption more
than a finding: it was 34% before the evidence, it comes from allowing
the origin of life to be as improbable as one in 10^100, and it falls to
16% if the range stops at one origin per observable universe.' Add a
camp row 'Origin of life no rarer than once per observable universe'
(slow_decades (3, 22), w_fast 0.28): alone 0.65, stuck 0.26.
- Tested: a1.py, a8.py, a2.py/c1.json: P(no other life in
Galaxy) 0.345 prior, 0.466 to 0.471 posterior; P(none in observable
universe) 0.185 prior, 0.258 posterior; truncated-tail runs at n=60,000.
Survey figure checked through Durham University's summary and a web
search, not the paper itself.
- moderate / Section 04: 'Two popular ways out of the paradox
are that there has not been enough time, or that the distances are too
great. Both can be checked against measurements, and neither holds.' and
'They only need to wait.'
- Argument: The Gaia flyby rate tests kinematic access (a
star within one parsec every 90,000 years). It does not test whether
anything can cross even one parsec and found a settlement that lasts,
which is what the distance objection means in my camp. The page
contradicts itself: its second answer (16%, of which 12 points are a
barrier that stops everyone) is the distance objection, section 10 puts
a universal barrier at 26% after the evidence, and the project's own
expansion_analogs card concludes 'Human analogues cannot say whether a
wave lasts the thousands of generations a galaxy needs.' One parsec is
still about 60,000 years at Voyager speed.
- Proposed change: 'Two popular ways out are that there has
not been enough time, or that the distances are too great. The first
fails against measurement. The second survives only in its strong form:
that even a crossing of one parsec, which the stars offer every 90,000
years or so, cannot found a settlement that lasts. No measurement tests
that, and the model gives it 26%.' Replace 'They only need to wait' with
'They need to wait, and then cross about three light years.'
- Tested: Read page section 04 and section 10, and
report/study_cards.json (expansion_analogs). JSON p_barrier posterior
0.256. The flyby study itself was not re-run.
- moderate / Section 12, 'The critics': 'Fixing those three
things changed the headline from "three answers the evidence cannot
separate" to the one at the top of this page. I think the new answer is
better founded'
- Argument: The evidence separates the answers no better in
version 4 than in version 3. Class likelihoods are 0.37 to 0.54 in
version 4 and were 0.35 to 0.69 in version 3. What changed is the
priors: 'unnoticed' fell from 0.106 to 0.030 and the easy-life prior
from 0.4 to 0.2. The old headline is still the correct statement about
the evidence; the new one is a statement about the modeller's priors. As
written, the sentence implies the rebuild let the data
discriminate.
- Proposed change: 'Fixing those three things changed my
priors, not the power of the evidence: the surviving answers still
predict what we see about equally well. The headline moved from "three
answers the evidence cannot separate" to "probably alone" because the
rebuilt priors put less weight on life starting easily (20%, down from
40%) and on expansion that goes unnoticed (3%, down from 11%). The size
of that move is a measure of how much the answer depends on the
modeller.'
- Tested: integrate3_results.json and
integrate4_results.json: prior and mean_like by class for both
versions.
- minor / Hero figure note 'from 2 million simulated
universes'; '78%' quoted to two digits in the lede area; section 07
heading
- Argument: The Monte Carlo error on 0.78 is 0.0006. The
structural uncertainty is 14% to 98% across the page's own camps, and
the posterior on the number of civilisations spans 57 powers of ten
(10^-52 to 10^5). One sample of life cannot support two significant
figures, and leading with the sample count invites the reader to think
it does. One clear statement of the range is enough; this needs no
hedging elsewhere.
- Proposed change: Figure note: 'Probability of each
explanation before and after the evidence, on my priors. The numbers are
exact for those priors and move by tens of points with others (section
02).' Say 'about three in four' in the lede sentence and keep 78% (or
73% after the tile fix) in the tile.
- Tested: JSON mc_sd_alone site 0.00057; log10_N_ever_q 5%
-51.7, 95% 5.3; camp range 0.141 to 0.991.
- minor / Playground slider note (charts1.js SL[0]): 'Chance
that the origin of life is near-inevitable rather than a
fluke.'
- Argument: Neither half matches the code. The 'easy' camp
starts at one expected origin per 5.6 Gyr window, which gives a 63%
chance in a whole window and is not near-inevitable. In the 'fluke' camp
28% of draws still put life on more than one habitable planet in a
thousand, which means millions of living worlds in the Galaxy. The
wording nudges readers to place themselves in the slow camp unless they
think life is certain.
- Proposed change: 'Chance that life starts at least once per
habitable lifetime of a suitable planet. Otherwise its rate is spread
over everything from one planet in ten down to one in 10^100.'
- Tested: model4.py lines 297 to 299. E[3/A] for A
log-uniform on (3, 100) = 0.277, computed by hand.
Checked and found correct
- Base reproduces: site P(alone) 0.776 to 0.786 at n=60,000 over five
seeds (JSON at 250,000 per run: 0.782, prior 0.585); stuck 0.16;
unnoticed+hidden 0.065; excluded 0.005.
- Camp numbers on the page match the 250k JSON: Biology optimist alone
0.141, stuck 0.601; chemistry optimist 0.586; expansion sceptic 0.656;
Carter 0.978.
- Shapley values in the JSON (early -0.075, late +0.030, local +0.221,
surveys +0.023) agree with the ablation runs (prior 0.582, early 0.485,
early+late 0.525, plus local 0.771, all 0.781).
- The pre-data justification of w_fast: E[3/(A+3)] for A log-uniform
on (3, 100) is 0.189, by hand integration.
- The base prior on life is not at the pessimistic extreme. A single
log-uniform prior on the origin rate with a floor at 10^-22 or 10^-30
(Spiegel and Turner's pessimistic case; the project brief's baseline)
gives alone 0.88 and 0.91, above the base 0.78 (c2.py).
- Pockets and partial settlement do not move the headline. Reweighting
eps_pocket from log-uniform 1e-6 to 0.1 up to uniform 0 to 1 changes
alone from 0.774 to 0.758 on base and from 0.378 to 0.370 on
Mills-leaning priors (a5.py). Universes with many lineages are excluded
by the low-footprint term regardless of pockets.
- The answer is robust to every non-biological knob in the page's camp
table (0.66 to 0.93 in the JSON). Only biology priors and the width of
the expansion prior take it below 0.6.
- The Carroll-Nellenback et al. 2019 citation is used correctly in
substance. The arXiv abstract (1902.04450) describes fill-in under
conservative assumptions, steady states with unsettled systems, and a
weakened inference from Hart's Fact A to humans being alone.
- Mills, Macalady, Frank and Wright 2025 (Science Advances
11:eads5698) propose that no steps are intrinsically improbable and
timing is set by habitability windows. They state they have not
falsified hard steps and do not claim human evolution was inevitable
(PMC11827626).
- The page's treatment of radio silence ('constrains how loud others
are and says almost nothing about how many') is fair to my camp. In
every prior set I ran, an Earth-level null on the nearest million stars
is forecast at 0.92 or higher.
- Round-2 astrobiologist fixes confirmed: the K-dwarf productivity
artefact is gone (site 0.78 against typical-all-time 0.76); the sterile
and inhabited split of 'alone' is on the page (47% and 31%);
false-positive rates are parameters with forecasts printed; the
withdrawn convergence-study camp was replaced by study-consistent
weights.
- Round-2 items still open on the page: the implied prior per planet
is not printed; there is no hybrid hard-step-plus-gate branch; the
intermediate Mills-leaning camp was dropped from the table.
- The price-tag paragraph exists, is the fourth paragraph, and does
say the 78% 'rests mainly on one judgement the data cannot make for us'.
The playground lets a reader set the easy-life prior to 0.98 and mean
hard steps to 0.2.
- The scan on disk at the time of reading had 12 draws (trial).
scan4.draw() is deterministic, so the w_fast distribution for all 400
draws was computed exactly (5/50/95% = 0.056/0.172/0.53, maximum
0.597).
Not checked
- Whether the model 'should' reproduce Kipping's 13 to 1: I did not
open Kipping 2025 and rely on the project's brief and timing study for
its definitions. I report only the internal discrepancy (page says 13
and 6 to 9; model applies 2.2 to 2.4).
- What working origin-of-life chemists actually believe about the
rate: I know of no survey of that quantity. Statements that
practitioners reject random-assembly estimates rest on the project's own
brief ('Chemists reply that assembly is not random') and on my memory of
the literature (de Duve, Russell and Lane on one side; Monod, Koonin and
Totani on the other).
- The Vickers et al. survey (Nature Astronomy 2025) was checked
through Durham University's summary and a search result, not the paper.
The 86.6% figure for basic life among 521 astrobiologists is consistent
across sources. The 67.4% and 58.2% figures are ambiguous in the
summary; from memory they are complex and intelligent life among
astrobiologists. The question concerns life 'somewhere in the universe',
not in the Galaxy, so it cannot be converted into a value of
w_fast.
- Came-and-went waves and finite-lifetime settlement (the actual
Carroll-Nellenback steady state) cannot be tested without changing the
model, which treats every sustained expander as permanent and
Galaxy-filling after T_fill. I tested only the pocket prior.
- The silurian study has no report yet, so I could not check what the
project's own data say about detecting a past presence. The
seta_haystack report (0.2 to 0.6% chance that a single 1 to 10 m
artefact has been found and recognised; about 480 ten-metre artefacts
consistent with none recognised) was read, not re-run.
- Whether log-uniform priors on f_site, f_persist, f_gate and f_c (two
decades each) rather than uniform ones drive the base biology: there is
no parameter hook, so not tested.
- The full 400-draw scan output and a regenerated tables_v4.md and
page_draft.md were not on disk (tables were from the 30,000-sample
trial, the scan had 12 draws). The page's final scan sentence could not
be checked against final numbers.
- My widened scan used 80 draws of 30,000 samples (minimum ESS 882);
its quantiles carry a few points of sampling error.
- The claim that the gated branch would give a larger early-life
factor if the gate clock ran from planet formation is a hand calculation
(about 3.4 against 2.1 at base dating, about 9 against 3.7 with LUCA),
not a model run.
Code errors
- report/site/bind.js /
const spread = s => Math.max(1 - s.alone - s.posterior.stuck, 0);
and alone_site: pct(S.site.alone); the same construction in
charts1.js line 253 (playground 'Someone spread: here unseen, or on the
way')
- Problem: The headline tiles mix an overlapping quantity
(alone = N_ever < 1) with exclusive classes. The third tile is
described as including 'still on their way from another galaxy' but its
number excludes 0.039 of the 0.040 en_route class, which is counted
inside the 78%.
- Fix: Tile 1 = posterior.empty_universe + posterior.rare;
tile 3 = posterior.en_route + posterior.unnoticed + posterior.hidden +
posterior.excluded. Keep S.site.alone only where the sentence says
'arisen in the Galaxy'.
- Impact: Tiles become 73 / 16 / 11 instead of 78 / 16 / 6
and agree with the hero bar.
- report/site/bind.js / B.fast_prior, B.fast_post,
B.planet_med, B.planet_lo, B.planet_hi
- Problem: Computed and never displayed: index.html has no
data-b element for any of them. The page therefore never states the 20%
prior the headline rests on, the 20% posterior, or the implied prior per
planet.
- Fix: Bind them in the price-tag paragraph and in section 02
(wording in the objections).
- Impact: No number changes; the central prior becomes
visible.
- models/scan4.py / draw():
w_fast=lg(0.05, 0.6)
and p0 = rng.uniform(0.1, 0.5)
- Problem: The joint scan is capped below the optimist camp
that run4.py tabulates (w_fast 0.9, P(no candidate steps) 0.7), then
used on the page as evidence that the result is not a product of the
author's choices.
- Fix: w_fast = rng.uniform(0.05, 0.95); p0 =
rng.uniform(0.1, 0.8); or keep the ranges and reword the page.
- Impact: Alone 5/50/95% moves from about 0.57/0.75/0.88 to
0.35/0.59/0.80; majority-alone share from over 99% to about 74% (80
draws).
- models/model4.py / line 298:
log_lam = np.where(fast, P["fast_decades"] * rng.random(n), -A * rng.random(n));
BASE tau_over_T=(0.02, 0.20)
- Problem: The 'fast' camp starts at one origin per 5.6 Gyr
window, so a quarter of it (rates below 1 per Gyr) does not predict an
early start; the delay prior is uniform out to the fossils-only dating.
Together with the gated-branch conditioning this gives an early-life
factor of 2.2 to 2.4, against the 13 and 6 to 9 the page reports and the
brief's 5 to 6.
- Fix: Add fast_lo (default 0.75) so log10 lambda ~
U(fast_lo, fast_decades); offer tau_over_T = (0.018, 0.125) (the brief's
0.1 to 0.7 Gyr) as base or as a named row; print the effective factor in
tables_v4.md.
- Impact: Each change alone is small (alone 0.768 and 0.754;
together 0.738). Crediting early life at 6, 9 or 13 to 1 gives 0.68,
0.63, 0.58.
- models/run4.py / CAMPS
- Problem: No row for the published alternative to hard steps
(Mills et al. 2025) between base and the extreme 'Biology optimist', and
none combining common life with doubtful expansion, which is the classic
SETI position. 'One or two shallow steps' reads as an optimist row but
lowers the no-step weight from 0.30 to 0.15 and returns 0.80.
- Fix: Add 'Mills-leaning' = dict(w_fast=0.6,
m_weights={0:0.6,1:0.25,2:0.15}, step_decades=(2.0,6.0),
f_site=(0.03,1.0), f_persist=(0.3,1.0), f_gate=(0.1,1.0),
f_c=(0.03,1.0)) and 'Classic SETI' = the same plus q_barrier=0.40,
W_exp=(2.0,20.0).
- Impact: New rows: alone 0.39 / stuck 0.43 /
unnoticed+hidden 0.19, and 0.24 / 0.68 / 0.07.
Tables
All runs: model4.py unmodified, n = 60,000 per run, site
(Earth-given) column unless stated.
A. The model under priors the opposing camp would defend
'live' = among explanations other than the visibly settled Galaxy; 'now' = P(another civilisation exists in the Galaxy now)
camp prior post | live prior -> post | stuck unn+hid | now | P(easy life) prior -> post | typical-observer alone
Base 0.59 0.78 | 0.80 -> 0.79 | 0.16 0.06 | 0.08 | 0.20 -> 0.20 | 0.54
Mills-style steps only (w_fast 0.2) 0.48 0.69 | 0.73 -> 0.69 | 0.22 0.09 | 0.14 | 0.20 -> 0.15 | 0.43
Chemist: w_fast 0.7, slow tail to 10^-22 0.26 0.49 | 0.49 -> 0.49 | 0.38 0.14 | 0.21 | 0.70 -> 0.75 | 0.22
Chemist + Mills-style steps 0.13 0.21 | 0.29 -> 0.21 | 0.56 0.23 | 0.45 | 0.70 -> 0.70 | 0.09
Mills-leaning astrobiologist (round-2 definition) 0.22 0.39 | 0.50 -> 0.39 | 0.43 0.19 | 0.42 | 0.60 -> 0.52 | 0.16
Mills-leaning, LUCA dating 0.22 0.28 | 0.50 -> 0.28 | 0.50 0.22 | 0.52 | 0.60 -> 0.66 | 0.10
Page's Biology optimist 0.06 0.14 | 0.19 -> 0.14 | 0.61 0.25 | 0.69 | 0.90 -> 0.86 | 0.04
Mills-leaning + expansion sceptic (classic SETI) 0.22 0.24 | 0.33 -> 0.24 | 0.68 0.07 | 0.55 | 0.60 -> 0.65 | 0.16
... + low footprint prior 0.15 0.22 0.22 | 0.31 -> 0.22 | 0.63 0.13 | 0.56 | 0.60 -> 0.66 | 0.16
Biology optimist + expansion sceptic 0.06 0.08 | 0.10 -> 0.08 | 0.83 0.08 | 0.76 | 0.90 -> 0.91 | 0.04
Three-seed check: Mills-leaning 0.394 (sd 0.008); + sceptic 0.240 (0.004); Chemist + Mills 0.208; w_fast 0.9 only 0.428 (0.004).
Implied median P(technological civilisation | rocky habitable-zone planet): base 10^-11.9; Mills-leaning 10^-4.0; Biology optimist 10^-2.5.
B. The abiogenesis prior alone
prior prior alone alone stuck no other life in Galaxy none in observable universe
Base (w_fast 0.2, slow tail 3 to 100 decades) 0.59 0.78 0.16 0.47 0.26
w_fast 0.5 0.42 0.64 0.27 0.29 0.16
w_fast 0.9 0.19 0.43-0.45 0.41 0.06 0.03
Slow tail 3 to 22 decades, w_fast 0.28 0.43 0.65 0.26 0.16 0.003
Slow tail 3 to 30 decades, w_fast 0.26 0.47 0.68 0.24 0.24 0.04
Single log-uniform prior, floor 10^-3 (w 0.50) 0.19 0.45 0.41 0.00 0.00
floor 10^-10 (w 0.23) 0.52 0.71 0.22 0.10 0.00
floor 10^-22 (w 0.12) 0.75 0.88 0.09 0.63 0.10
floor 10^-30 (w 0.09) 0.81 0.91 0.06 0.74 0.36
floor 10^-100 (w 0.03) 0.94 0.98 0.02 0.93 0.82
C. The early-life Bayes factor the model actually applies (fast : slow)
dating early only early+late P(fast) after timeline by branch (early+late): gated / 1 / 2 / 3+ hard steps
Base tau 0.02-0.20 2.43 2.23 0.36 1.9 / 3.2 / 2.4 / 2.0
LUCA tau 0.03-0.06 4.37 4.03 0.50 3.3 / 6.4 / 4.7 / 3.7
Fossils only tau 0.16-0.20 1.81 1.63 0.29 1.4 / 2.2 / 1.7 / 1.5
If the timeline were worth 6 / 9 / 13 to 1 (prior held at 0.20): alone 0.68 / 0.63 / 0.58; stuck 0.24 / 0.28 / 0.31.
D. Tail symmetry between the two ends of the chain
Base alone 0.79 stuck 0.16
Expansion prior as wide as abiogenesis (no atom, W 3-100) alone 0.68 stuck 0.28
Atom 0.15 + W 1-100 alone 0.68 stuck 0.29
W 1-30 alone 0.73 stuck 0.22
Abiogenesis as narrow as expansion (slow tail 1-8 decades) alone 0.52 stuck 0.36
Base prior on expansion: P(p_exp > 0.1) 0.36, P(> 0.01) 0.59, median 0.03, mean 0.15.
E. Widened joint scan (80 draws x 30,000; w_fast uniform 0.05-0.95,
P(no candidate steps) uniform 0.1-0.8, the rest as scan4.py) alone
5/50/95%: 0.35 / 0.59 / 0.80; alone above 0.5 in 74% of draws; stuck
above alone in 12%. w_fast 0.05-0.35: median 0.70, majority alone 94%;
0.35-0.65: 0.60, 82%; 0.65-0.95: 0.47, 41%. Project scan as coded:
w_fast 5/50/95% 0.056 / 0.172 / 0.53, maximum 0.597, 7.5% of draws above
0.5.
F. Forecasts under different priors (forecast probability of the result; alone after)
observation base Mills-leaning + exp. sceptic Biology optimist
No Earth-level technology, nearest 1e6 stars 1.00; 0.77 0.96; 0.41 0.95; 0.25 0.92; 0.16
No Earth-level technology, whole Galaxy 0.91; 0.85 0.58; 0.68 0.46; 0.53 0.32; 0.47
Second origin in the Solar System 0.31; 0.56 0.55; 0.12 0.66; 0.06 0.81; 0.06
Biosignature in 25 HWO planets 0.15; 0.59 0.38; 0.11 0.47; 0.06 0.71; 0.04
G. Pocket prior (base): eps log-uniform 1e-6..0.1 alone 0.774;
1e-3..1 0.770; 1e-2..1 0.768; uniform 0..1 0.758 (claimed-Galaxy class
0.040).
Advice
Three sentences experts will quote against the author, each with a
rewording that stays plain and still leads with an answer.
"Most likely there has never been anybody else in our Galaxy."
Replacement lede: "Most likely no other civilisation has ever arisen in
our Galaxy: about three chances in four if, like me, you start out
doubting that life begins easily. If you start out believing it does,
the same evidence points instead to civilisations that arise and never
settle the Galaxy, a limit that would probably apply to us
too."
"In 47% of all cases the Galaxy holds no other life at all."
Replacement: "On my priors there is a 47% chance that the Galaxy holds
no other life at all. That figure is an assumption more than a finding:
it was 34% before the evidence, it comes from allowing the origin of
life to be as improbable as one in 10^100, and it falls to 16% if the
range stops at one origin per observable universe."
"Most of the effort in this field goes into the observation that
would move it least." Replacement: "On my priors another radio search of
the present kind has a 99.7% chance of finding nothing, and finding
nothing would change little. On a biology optimist's priors the same
model gives a search of the nearest million stars a 4 to 8% chance of
success, and a search of the whole Galaxy between two chances in five
and two in three. A detection would settle the question under any
priors."
A fourth, for statisticians: "The silence here does nearly all the
work" should become "The silence removes one answer and does not choose
among the others."
Replacement first callout I would accept as fair while disagreeing
with the base priors: "The result: the evidence rules out one answer, a
Galaxy visibly settled, which held 35% of the probability beforehand. It
does not choose among the rest. Among the answers that survive, the
shares were 73%, 15% and 12% before the evidence and are 73%, 16% and
11% after: nobody else has ever arisen here; others arose and none
settled the Galaxy to stay; someone did spread and is unnoticed, hiding
or on the way. Those shares are my starting assumptions, chiefly a 20%
chance that life starts easily. On a biology optimist's assumptions the
first two swap, to 14% and 60%."
On the four questions I was asked: (a) The 20% prior is defensible
and is not the pessimistic extreme; the problem is that it is unstated,
that the result runs from 0.45 to 0.98 with the floor of the rate prior
alone, and that the evidence leaves it exactly where it started. The
price-tag paragraph is honest in intent but too low on the page, names
one judgement where there are two, and illustrates "confident" with a
60% prior. (b) The local term does assume that a sustained expander
fills the Galaxy and stays. That is numerically harmless (pockets cost
under 2 points) but makes "never spread" the wrong name for a class that
holds everything short of permanent Galaxy-wide settlement. (c) One
sample cannot support the sharpness, and the model agrees: its posterior
spans 57 powers of ten. The 78% is where the number one falls in the
prior. (d) The Biology optimist is reported accurately in numbers and
buried in framing: called an exception, described as "easy" when its
median is one planet in 300, left without its published source (Mills
and colleagues 2025), and kept out of the robustness scan.
What not to change: the radio-silence section, the admission that six
of seven explanations fit equally well, the camp table as a device, and
the playground. These are fair to my camp and should stay.