Where is everybody? · Working papers
Red team, round 1: the first model
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.
Verdict. The ranking survives but the stated logic
does not. In the model as coded, the "Milky Way is not evidently
settled" term (L1) and the technosignature search record (L3) do no
work: deleting either changes no class probability at the third decimal.
The whole non-timing update comes from one product, the G-HAT galaxy
count times an assumed floor of 3% on the chance that a settled galaxy
has at least 85% of its starlight reprocessed. With base biology priors,
"alone in the Galaxy" goes from a prior of 0.51 to 0.75, a Bayes factor
of 2.9. When I allow low-footprint settlement, non-evident local
settlement and a will-to-expand prior without a floor at the
observational bound, it falls to 0.52-0.64 and "independent restraint"
rises from 0.01 to 0.10-0.19. I could not push "alone" below about 0.5
without changing the origin-of-life priors, so it remains the single
most probable family. The most important change is to replace the L1/L2
pair with an explicit world-level model of whether settlement is evident
(harvest regime plus local non-evidence), and to report the answer as
Bayes factors per likelihood term, not as "0.76 alone".
Critic’s own estimate of each answer: alone in the
universe 0.17, alone in the Galaxy 0.38, handful first 0.08, late filter
0.03, restraint 0.1, infeasible 0.1, hidden 0.03, other 0.11. What
“other” covers: Settled, visited or explored but not evident, without
deliberate hiding: low-footprint or probe-only presence, steady-state or
stalled settlement that leaves the Solar System untouched, or a past
wave that came and went. Includes a small residual for unlisted
mechanisms.
Objections
[major] integrate.py lines 162-163: L1 = exp(-mu) and L2
= exp(-N_surv * p_settled * p_harvest); headline logic step
(1)
- Argument: Headline step (1), that one persistent expander anywhere
in the Galaxy would be evident, is not what drives the result. L2
dominates L1 everywhere: no prior sample has L1 < 0.5 while L2 >
0.01, and the prior mean of L1*L2 equals the prior mean of L2 alone
(0.57604 against 0.57606). The posterior 95% limit on mu in feasible,
non-stealth worlds is 6.6e-5, which is just the G-HAT limit divided by
p_harvest; the Milky Way itself contributes nothing. So the result rests
on the assumption that in every possible world at least 3% of settled
galaxies reach >=85% warm reprocessing. That floor has no citation.
It is also the monocultural fallacy in reverse: 85% of a galaxy's light
needs nearly all luminosity-weighted systems to go Kardashev II, which
is near-unanimity among settlements, not one defector. The SETI brief
itself says occupation using under ~25% of starlight is unconstrained,
and gaps section 7 asked for a covering-fraction curve that was not
implemented. The sensitivity table hides this because it relaxes L1 and
L2 only one at a time, or only down to p_harvest = 1e-4, where 1e5 *
1e-4 = 10 still kills.
- Proposed change: Make the harvest regime a world-level variable:
with prior 0.3-0.5 settlement is low-footprint and never dims a galaxy
(L2 = 1); otherwise p_harvest is log-uniform 1e-3 to 1, applied through
the covering-fraction curve in gaps section 7. Add a diagnostic table
showing the posterior with each of L1, L2, L3 and timing removed in
turn. Reword headline (1)-(2) to say the constraint is 'fewer than about
3e-5 Kardashev-III galaxies per galaxy, times the assumed chance that
settlement produces one'.
- Expected effect: P(alone in Galaxy) 0.75 -> 0.67 with a 0.5
low-footprint prior, or 0.65-0.66 with a p_harvest floor of 1e-8 to
1e-10. Restraint 0.01 -> 0.07-0.09; handful 0.05 -> 0.09-0.10;
infeasible 0.15 -> 0.12.
- Tested: Patched copy of the model (reproduces base to 4 decimals).
Remove L1: every class unchanged at 3 decimals, ESS 320,911 against
320,900. Remove L2: alone 0.613, restraint 0.121. Remove both: alone
0.422, restraint 0.300. p_harvest floors 1e-4 / 1e-6 / 1e-8 / 1e-10 give
alone 0.718 / 0.684 / 0.664 / 0.653. Low-footprint prior 0.25 / 0.5 /
0.75 gives alone 0.708 / 0.672 / 0.640. For the restraint class, mean L1
is 0.27 and mean L2 is 0.017.
[major] p_will = log-uniform(1e-4, 1) (line 59) and
headline (3): 'independent restraint is crushed by the
numbers'
- Argument: The floor's stated basis (expansion.md suggested-inputs
table: 'Hanson et al. bound') is an observational upper limit: Hanson et
al. find the quiet-to-loud chance must be below about 1e-4 for even one
other quiet civilisation to have existed in the Galaxy. The model uses
the value the data require as the lowest value the prior permits, so
'common but none expands' is excluded by construction. Also, p_will is
labelled 'some faction ever launches', but mu treats it as launch AND
supercritical spread AND persistence for a gigayear AND evident. Those
are different things. Landis percolation is a threshold property of a
world, not a per-civilisation coin flip; Carroll-Nellenback et al. find
fill-in fails if launch intervals exceed 270 Myr; a product of three or
four factors each uncertain over two decades has a tail to 1e-8. The
longevity brief calls 1e-3 a 'defensible ignorance prior', which shows
the floor is a judgment call.
- Proposed change: Split into p_launch (log-uniform 1e-3 to 1), a
world-level Bernoulli for supercritical, space-filling spread (prior
0.5-0.8), and a persistence factor; or at minimum use log-uniform 1e-8
to 1 as the base case, not a sensitivity row. Report restraint as a
Bayes factor against its prior, not as 'crushed'.
- Expected effect: Restraint 0.01 -> 0.10 from the floor alone (the
project's own row), and 0.19-0.26 when combined with the harvest
relaxation. Alone 0.75 -> 0.67 alone, 0.52-0.58 jointly. Headline (3)
becomes 'disfavoured by a factor of about 2-3 relative to its prior of
0.25-0.3'.
- Tested: p_will floor 1e-6: restraint 0.039, alone 0.717. Floor 1e-8
with no extragalactic term: restraint 0.264, alone 0.519. Floor 1e-8
with low-footprint prior 0.5: restraint 0.192, alone 0.582. Floor 1e-8
with p_harvest floor 1e-6: restraint 0.190, alone 0.584.
[major] p_stealth = 0.03 as the only route to 'they are
here and we have not noticed' (line 61); class 'hidden'; the binary
treatment of the Milky Way as settled or not
- Argument: The model allows non-evidence only as a deliberate,
convergent policy. The optimist's case is the non-deliberate one:
settlement that is low-footprint, prefers K and M dwarfs (Haqq-Misra
& Fauchez 2022), leaves inhabited or unsettleable worlds alone (the
Aurora effect in Carroll-Nellenback et al. 2019), sits in a steady state
with unvisited pockets (their P of about 0.1 for Earth unvisited in the
last Myr, 0.89 in one clustered run), or is present only as probes. The
project's own briefs contradict 0.03. The behavioural scorecard gives
zoo 0.10 (0.02-0.30) plus present-but-unnoticed 0.08 (0.01-0.30) given N
>= 10; the SETI brief gives detection probability under 0.01 for a
metre-scale probe in the Solar System; the behavioural brief says 'they
are not here is an assumption for anything small and quiet' (Lazio
2026). Because 'infeasible' and 'hidden' both have likelihood 1, their
posteriors are prior divided by evidence (0.063/0.426 = 0.148;
0.0078/0.426 = 0.018). The 8:1 ranking of 'infeasible' over 'hidden' is
the modeller's prior ratio and nothing else.
- Proposed change: Replace L1 with 1 - p_settled * (1 - q_ne), where
q_ne is the probability that a settled Milky Way is not evident to 2026
searches and did not pre-empt Earth. Tie q_ne to the low-footprint
regime of the first objection, with q_ne uniform 0-0.5 there and 0 in
harvesting worlds. Raise deliberate stealth to about 0.10 to match the
behavioural brief. Add an eighth class, 'settled or visited but not
evident (not deliberate)'. State that the split among universal-barrier
classes is prior-determined.
- Expected effect: Base biology: here-or-hidden 0.018 -> 0.06-0.09,
alone 0.75 -> 0.52-0.62. Optimist-biology camp: infeasible 0.63 ->
0.25-0.40 and here-or-hidden 0.10 -> 0.35-0.43. Under SIA: infeasible
0.82 -> 0.30-0.49 and here-or-hidden 0.14 -> 0.45-0.55.
- Tested: q_ne of 0.03-0.5 with L2 unchanged has zero effect at 3
decimals, which confirms L1 is inert. p_stealth 0.18: hidden 0.095,
alone 0.664. p_stealth 0.18 with q_feasible 0.75: hidden 0.077,
infeasible 0.197, alone 0.618. Moderate package (low-footprint 0.3, q_ne
U(0,0.5), p_will floor 1e-6, stealth 0.10): alone 0.615, restraint
0.105, infeasible 0.114, hidden 0.036, unnoticed 0.026 (stable to 0.001
over 4 seeds). Strong package (0.5, U(0,1), 1e-8, 0.18): alone 0.521,
restraint 0.192, hidden 0.041, unnoticed 0.047.
[major] The class 'alone in the Galaxy' (0.27 + 0.49)
presented as a finding
- Argument: The prior already puts 0.509 on Nciv < 1, because half
the abiogenesis prior is spread over 5-100 decades and each hard step
over 2-12 decades. The posterior of 0.752 is a Bayes factor of 2.9.
Earth's timing alone moves 'alone' down, from 0.51 to 0.42. The
expansion and harvest terms supply a factor of about 4.1, all of it from
L2 as shown in the first objection. Across the project's own camps the
answer runs from 0.21 to 0.94 with the same data. The split between
alone-in-universe and alone-in-Galaxy (0.27 against 0.49) is touched by
no observation: it moves from 0.16/0.57 to 0.40/0.38 with the width of
the abiogenesis prior alone. A reader who sees '76% alone' will take it
as what the silence implies, when the silence contributes about a factor
of 3, and less than 2 under the optimist structure.
- Proposed change: Lead with Bayes factors per class and per evidence
term, with prior and posterior side by side. Report alone-in-universe
and alone-in-Galaxy as one class with a prior-dependent split. Give the
headline as a range across camps, with the 'agnostic mixture' as one
camp among several, since its 0.51 prior is itself a position.
- Expected effect: No change to the base number. The claim changes
from 'P(alone) = 0.76' to 'the observations multiply the odds of being
alone by about 3 under the base structure and 1.5-2.2 under the optimist
structure, measured against the timing-only posterior'.
- Tested: Prior alone 0.509; timing only 0.422; full 0.752. Bayes
factor 2.92 against the prior and 4.15 against timing-only. Under the
moderate optimist package the factor against timing-only is 2.2; under
the strong package 1.5.
[moderate] c_det = log-uniform(1e-10, 1e-6) and L3 (lines
68, 166-170); future observation 'techno_null_1e6'
- Argument: The search record is in the model in name only. L3 removes
0.023% of prior weight, and only 0.24% of samples have L3 below 0.99. So
the reported 0.07 chance of another civilisation in the Galaxy now owes
nothing to fifty years of searching. That is the optimist's point, and
the report should say it. The c_det range is also wrong on both ends for
a single scalar. The SETI brief's own figures for an Earth twin (1e-9 to
1e-6 per observed star, 1e3-1e6 stars of about 2e11) give 1e-17 to
1e-11. The model's range matches a continuous isotropic beacon of about
1e16-1e17 W, some 1e3-1e4 times humanity's total power. For a 4e18 W
beacon toward the Galactic Centre it would be about 1e-4. The null
result for a million stars moves nothing because quiet and expanding
populations share Nciv and are tied by p_will >= 1e-4, so L2 has
already capped N_now; that is a structural artefact, not a finding.
- Proposed change: Replace c_det with a mixture over transmitter
classes: a beacon fraction log-uniform 1e-4 to 0.3 (the behavioural
brief's range) with c of 1e-8 to 1e-4, and leakage-only civilisations
with c of 1e-17 to 1e-11. State in the report that the technosignature
record carries no weight in the result. Add future observations that
would matter under the optimist structure: a Solar System artefact
survey (co-orbitals, Lagrange points, lunar surface), and
partial-coverage or cold waste-heat limits.
- Expected effect: Class probabilities change by less than 0.005. The
interpretation changes: 'no detections' should be removed from the list
of evidence that drives the result.
- Tested: Remove L3: every class unchanged at 3 decimals. c_det 1e-17
to 1e-11: unchanged. c_det 1e-6 to 1e-3: alone 0.756. Even c_det 1e-3 to
1 gives only 0.783.
[moderate] mu = Nciv * phi * p_exp with immortal,
space-filling expanders; p_settled = 1 - exp(-mu) for both the Milky Way
and survey galaxies
- Argument: An expander that arose more than one fill time ago is
assumed to occupy the whole Galaxy today, forever. Quiet civilisations
get a lifetime distribution (L_quiet); expanders do not.
Carroll-Nellenback et al. give finite settlement lifetimes and steady
states with occupancy between 0 and 1. Kipping & Lewis argue
intermediate states need tuning, but 'full' in their sense means all
settleable systems, not Earth. The expansion brief's own evidence
horizon for a past visit is 1-10 Myr (Schmidt & Frank 2018). A wave
that came and went leaves L1 and L2 satisfied, and the model has no
place for it.
- Proposed change: Multiply mu by min(1, L_exp / T_head), with L_exp
log-uniform 1e6 to 1e10 yr (the expansion brief suggests 1e4 to 1e9 for
single settlements), or sample an occupancy fraction from the
Carroll-Nellenback steady state. Add 'came and went' to the new
unnoticed class.
- Expected effect: Alone 0.75 -> 0.71 for L_exp 1e6-1e10, or 0.67
for 1e4-1e10. Restraint 0.01 -> 0.04 or 0.085. Combined with the
first and third objections: alone about 0.59.
- Tested: L_exp 1e6-1e10: alone 0.713, restraint 0.041. L_exp
1e4-1e10: alone 0.665, restraint 0.085. With low-footprint prior 0.5 and
q_ne 0.3: alone 0.585.
[moderate] N_surveyed_cold = 2.0e3 (line 65), tagged
[STUDY tf_kiii, fp_kiii]
- Argument: The Tully-Fisher study's claimed result is a 95% upper
limit of 1.8% for >=75% dimming, set by 20 unresolved candidates in
an effective sample of 1,593. The model's exp(-2000 * p) is the
likelihood of zero candidates in 2,000 galaxies, a limit of 0.15%. That
matches the study's 'sensitivity floor if every unresolved candidate
were natural (0.19%), NOT claimed as a result'. The model is therefore
about 12 times stronger than the study it cites. The Fundamental-Plane
study has not reported at all.
- Proposed change: Use N_eff of about 3/0.018 = 167 until the
candidates are resolved, or a Poisson likelihood for 20 observed
candidates with an unknown natural background. Drop the fp_kiii tag
until it reports.
- Expected effect: Base: alone 0.752 -> 0.742, restraint 0.010
-> 0.018. In the 'all harvesters cold and partial' row: alone 0.728
-> 0.686, restraint 0.023 -> 0.055.
- Tested: N_surveyed_cold 167: alone 0.742. With p_cold_only = 1:
alone 0.686 against 0.728 at 2,000. With a p_harvest floor of 1e-4 as
well: alone 0.645.
[moderate] Classification block (lines 198-207) and the
class labels
- Argument: Several labels do not describe their contents. 'Handful;
we are among the first' takes every world with 1-30 civilisations,
including infeasible and stealth worlds. The late-filter/restraint split
is only whether p_surv <= p_will; in non-doom worlds p_surv is
0.01-1, so 'nearly all die' is false for most of that class. Once
non-evident settlement is allowed, worlds with mu >= 1 fall into
'late filter' or 'restraint', which say none expanded: 0.03-0.05 of
posterior mass under base biology and 0.14-0.23 under optimist biology.
There is no class for the classic SETI position of many quiet
civilisations present now.
- Proposed change: Classify on mechanism first (world-level switches:
infeasible, universal doom, deliberate stealth, low-footprint or
unnoticed), then on counts (Nciv, mu, N_now). Add 'settled or visited,
not evident'. Define late filter as doom or p_surv < 0.01. Report
P(N_now >= 1) within each class.
- Expected effect: Relabelling only for the base run. Under the
optimist structure 0.03-0.23 of mass moves out of mislabelled
classes.
- Tested: Unnoticed mass by assigned class in the patched runs:
moderate package 0.026 and strong package 0.047 (base biology); 0.141
and 0.230 (optimist biology); all of it binned as late filter or
restraint.
[moderate] SIA headline: 'infeasible 0.82, hidden 0.14,
late filter 0.04'
- Argument: Under SIA the posterior is each likelihood-1 hatch's prior
times its mean Nciv. The 0.82 for 'infeasible' reflects only that it was
given a prior of 0.15 while non-evidence was given 0.03 and restraint
was floored. The correct SIA statement is 'some universal mechanism of
non-evidence', with the split set by prior. The effective sample is also
thin: 2,300-2,500 of 4 million.
- Proposed change: Report the SIA branch as 'common, and universally
non-evident', with the sub-split shown as a function of the fate priors.
Use importance sampling targeted at high Nciv, or more samples, for that
branch.
- Expected effect: SIA: infeasible 0.82 -> 0.49 (moderate package)
or 0.30 (strong). Here-or-hidden 0.14 -> 0.45-0.55. Restraint 0.00
-> 0.01-0.11.
- Tested: SIA base: 0.824 / 0.139 / 0.037, ESS 2,505; second seed
0.828 / 0.132 / 0.040, ESS 2,300. SIA with moderate package: infeasible
0.488, hidden 0.270, unnoticed 0.183, late 0.047, restraint 0.012. SIA
with strong package: 0.301, 0.253, 0.300, 0.034, 0.112, ESS 6,642.
[minor] Consistency between grabby.py and integrate.py on
detection
- Argument: grabby.py evaluates 'we see none' against a finite
detection horizon z_det and shows the result depends on it. integrate.py
assumes perfect detection of settlement in the Milky Way (L1) and at
least 3% detectability per settled galaxy (L2). sdo.py's fermi_update
treats the per-civilisation evidence reach q as a free parameter and
shows it is decisive: with optimist biology, P(alone in Galaxy) is 0.12,
0.23 and 0.88 for q of 1e-6, 1e-3 and 1. The integrating model sets q to
about 1 for expanders and never shows the reader that curve.
- Proposed change: Carry an explicit evidence-reach parameter for
expanders through integrate.py (q_ne and the harvest regime do this) and
plot P(alone) against it, as sdo.py already does.
- Expected effect: No change to the base number; exposes the
lever.
- Tested: Read from sdo_results.json and grabby_results.json; not
rerun.
Code errors
models/integrate.py line 65, N_surveyed_cold=2.0e3:
Encodes the Tully-Fisher study as zero candidates in 2,000 galaxies (95%
limit 0.15%). The study's claimed limit is 1.8%, from 20 unresolved
candidates in an effective 1,593; 0.19% is its explicitly unclaimed
floor. The fp_kiii study cited in the same tag has not reported.
- Fix: Use N_surveyed_cold of about 167 (3/0.018), or a Poisson
likelihood with 20 candidates and unknown background; remove the fp_kiii
tag until it reports.
- Impact: Base: alone 0.752 -> 0.742. In the 'all cold and partial'
sensitivity row: 0.728 -> 0.686 and restraint 0.023 -> 0.055.
models/integrate.py lines 167-168, surv_quiet and
N_now: N_now counts only civilisations that survive to expansion
capability (p_surv * (1 - p_will)). Civilisations at our own stage, and
all those that die first, are excluded although they exist and may be
detectable during their lifetimes. In the late-filter class the median
N_now is 5e-10 where counting all non-expanders gives 0.43.
- Fix: Use N_now = Nciv * (1 - p_exp) * L_q / T_gal, ideally with a
separate short-lifetime distribution for civilisations that do not
survive; apply the same N_now in L3 and in 'techno_null_1e6'.
- Impact: P(another civilisation in the Galaxy now) 0.074 -> 0.106
(hard threshold), or 0.080 -> 0.114 using 1 - exp(-N_now). Class
posteriors are unchanged because L3 is inert.
models/integrate.py line 228,
p_another_civ_in_galaxy_now: Uses a hard threshold on an expectation
(N_now >= 1) in place of the probability of at least one.
- Fix: Sum w * (1 - exp(-N_now)), with hidden worlds counted as
1.
- Impact: 0.074 -> 0.080.
models/integrate.py lines 162-163, L1 and L2: L1 is
redundant given L2: no prior sample has L1 < 0.5 with L2 > 0.01,
and removing L1 changes no output at 3 decimals. p_harvest is documented
as 'most of its starlight' but is applied against a survey threshold of
>=85% warm reprocessing. The covering-fraction curve requested in
gaps_and_corrections.md section 7 is not implemented.
- Fix: Add a per-term ablation table to the results; replace the
single threshold with the covering-fraction curve; make the harvest
regime and local non-evidence explicit world-level variables.
- Impact: Changes which premise the report can honestly say carries
the result; numerical effect as in the first objection (alone 0.75 ->
about 0.65-0.67).
models/integrate.py line 59, p_will=(1e-4, 1.0): The
prior's lower bound is the observational upper bound from Hanson et al.
2021 (expansion.md gives 'Hanson et al. bound' as the basis), which
makes the restraint result circular.
- Fix: Use log-uniform 1e-8 to 1, or decompose into launch,
supercritical spread and persistence.
- Impact: Restraint 0.010 -> 0.097 (the project's own sensitivity
row), and 0.19-0.26 jointly with the harvest relaxation.
models/integrate.py lines 198-207, classification:
'handful_first' includes infeasible and stealth worlds with 1-30
civilisations. The late/restraint split is only p_surv <= p_will, so
'nearly all die' is false for non-doom worlds where p_surv is 0.01-1.
There is no class for mu >= 1 without deliberate stealth.
- Fix: Classify by world-level mechanism first, then by counts; add
'settled or visited, not evident'; define late filter as doom or p_surv
below 0.01.
- Impact: Relabelling in the base run; 0.03-0.23 of posterior mass is
misassigned once non-evident settlement is allowed.
Claims that survive
- With base biology priors, 'fewer than one other civilisation ever in
the Galaxy' stays the single most probable family under every optimist
fate relaxation I tried: 0.52-0.64 against 0.75. I could not get it
below about 0.5 without changing the abiogenesis and hard-step
priors.
- Galaxies with most of their starlight reprocessed are rare, below
about 3e-5 per galaxy. Any hypothesis in which civilisations are common
AND routinely grow to Kardashev III is dead. The optimist escape is that
settlement need not mean harvesting; the null itself stands.
- Time is not the constraint. The fill-time result of under 1 Gyr
comes from Carroll-Nellenback, Frank, Wright & Scharf themselves.
The optimist reply is steady states and non-evidence, not 'they have not
had time'.
- The arithmetic against independent restraint, (1-e)^N, is right for
large N. The dispute is over the prior floor on e and over what
'expansion' must include. Restraint ends up disfavoured by a factor of
about 2-3, not rescued.
- The model does not overclaim from SETI nulls. Its c_det makes the
search record uninformative, which is the optimist's own position.
- Deliberate, policy-enforced zoo or stealth deserves a small prior.
Forgan's hegemony results stand. My objection concerns non-deliberate
non-evidence.
- The anthropic assumption is the largest lever. SIA moves 'alone'
from 0.75 to 0.00, more than any change I tested.
- Earth's timing data move things modestly: 'alone' goes from 0.51 to
0.42 on timing alone.
- Monte Carlo noise is negligible in the non-SIA runs (0.001 on the
classes; ESS above 3e5). The patched copy reproduces the published base
case to 4 decimals.
Missing explanations
- Settled or visited but not evident, without any policy of hiding:
low-footprint or machine-mediated settlement (Ivliev 2026, cited in the
behavioural brief), inert probes or lurkers (Benford 2019; Haqq-Misra
& Kopparapu 2012), settlers that prefer K and M dwarfs (Haqq-Misra
& Fauchez 2022).
- Steady-state partial occupation and stalled fronts: Landis 1998
percolation, Galera et al. 2019 voids, Carroll-Nellenback et al. 2019
steady states with the Aurora effect. In the model these exist only as
p_will or as 'infeasible'.
- Expanders that came and went: a past wave now extinct or withdrawn,
beyond the 1-10 Myr evidence horizon of Schmidt & Frank 2018.
- Exploration without settlement: Bracewell-type probes reach
everywhere but occupy and harvest nothing, so mu (settlement) does not
apply while 'they have been here' still holds.
- Expansion that does not fill space: migration to the outer Galaxy
(Cirkovic & Bradbury 2006), compact post-biological 'city-states'
(Cirkovic 2008), the inward turn. The behavioural brief gives these 0.08
given N >= 10; the model gives them no world-level weight.
- Convergent low growth and 'radical mundanity' (Haqq-Misra & Baum
2009; Corbet 2025) as a common cause, as opposed to an independent
per-civilisation choice. The behavioural brief gives 0.12 given N >=
10.
- The classic SETI position as its own class: many quiet, long-lived,
non-expanding civilisations present now, which the search record does
not constrain.
- Partial harvesting below survey thresholds: 1-25% of starlight, or
cold waste heat (Garrett 2026 proposes the test; no survey yet).
Presentation advice
Show a per-term ablation table (prior; plus timing; plus L1; plus L2;
plus L3) before any headline number. It shows the reader that the Milky
Way term and the search record are inert and that one assumption about
harvesting carries the result. Give prior and posterior side by side for
every class with Bayes factors, because the prior on 'alone' is already
0.51. Present alone-in-universe and alone-in-Galaxy as one class with a
prior-dependent split. Reword headline (1) as an assumption ('if
settlement is space-filling, persistent and evident') and headline (3)
as 'independent restraint is disfavoured by a factor of N under prior
X'. Say explicitly that the ranking among universal-barrier classes
(infeasible, hidden, doom) equals the modeller's prior ranking. Add the
future observations an optimist would fund: a Solar System artefact
survey, partial-coverage and cold waste-heat limits, and resolution of
the 20 Tully-Fisher candidates.
Critic: an astrobiologist
Verdict. From the biology side the headline "alone
in the Galaxy 0.75" is not defensible as a finding: it is a prior of
0.51 moved by a Bayes factor of about 2.9, and the marginal likelihood
differs by at most 3.4x across all seven camps. The base case departs
from the project's own evidence in two opposite directions that roughly
cancel. It is too pessimistic on evolution: posterior mean 2.64 hard
steps and P(3 or more) = 0.55, against the convergence study's 0-3 with
P(3 or more) = 0.06 and the evolution brief's 3 decades per step. It is
too optimistic on abiogenesis: prior P(fast) = 0.5 is the abiogenesis
brief's chemistry-optimist floor, giving posterior 0.69 against the
brief's central 0.35. The evidence favours fewer and shallower
evolutionary steps more strongly than it favours either abiogenesis
camp. With priors a careful biologist would defend, I get alone 0.56
(range 0.39-0.71), infeasible 0.31, and the bottleneck moves from
"evolution" (73%) to abiogenesis (73%). The most important change is to
reset the hard-step prior to the convergence study and report the result
as a 2x2 table (abiogenesis easy or hard, by evolution easy or hard),
with "alone" split into a sterile Galaxy and a microbial one. The
qualitative logic survives: late filter, restraint and hidden together
stay below about 0.13 under every biological prior I tried.
Critic’s own estimate of each answer: alone in the
universe 0.22, alone in the Galaxy 0.33, handful first 0.05, late filter
0.04, restraint 0.02, infeasible 0.27, hidden 0.03, other 0.04. What
“other” covers: Outcomes outside the seven classes: settlement is
feasible but slow, patchy or non-persistent so that unvisited pockets
remain without any universal barrier; or civilisations change into forms
that neither harvest starlight nor settle visibly without deliberately
hiding; plus residual model error. The biological core is my composite
run (prior P(fast abiogenesis) 0.40 with a rate-based likelihood,
convergence-study step counts, 2-8 decades per step, f_c 0.03-0.9),
which gives alone 0.56, infeasible 0.31, hidden 0.04; I shade infeasible
and hidden down slightly because those priors are outside my lens.
Objections
[major] integrate.py L48-52: w_pacing=0.3, hard_m_weights
{1:.36,2:.28,3:.18,4:.11,5:.07}, hard_step_decades=(2,12); and the
[STUDY convergence] tag on that block
- Argument: The block is tagged as using the convergence study but
does not. The study gives 0-3 genuine hard steps: P(0)=0.35, P(1)=0.39,
P(2)=0.20, P(3 or more)=0.06, and says brain hardware is repeatable in
1-100 Myr, so intelligence is not a hard step. The model's prior has P(3
or more)=0.25 and allows 4-5 steps. Its depth prior, log-uniform 2-12
decades per step (median 4.9), is wider than the evolution brief's
recommendation of 3 decades with 6 as the sensitivity case. The Fermi
null then pushes further: posterior P(m>=3)=0.55, mean m=2.64, mean
depth 6.4 decades, median f_i=10^-7.9. The modal world of the base case
is therefore 'at least a million inhabited planets in the Galaxy, no
other technological species ever' at 0.485 of the 0.75. That is the
Ward-Brownlee world the project's own study argues against. Mills et al.
2025 would add that Kay et al. 2025 (a 1.1 Gyr stepwise eukaryote stem
from an already complex archaeon) and the recurrence limits in the study
(ancient singular and ancient repeated innovations indistinguishable at
0.3-1.8 per Gyr) remove the empirical case for depths of 6-12 decades.
The Carter-side reply is fair and should be shown: the study's base-rate
argument assumes era invariance and constrains the count, not the depth,
and Snyder-Beattie et al. 2021 used 24 decades.
- Proposed change: Base case: P(m=0,1,2,3)=(0.35,0.39,0.20,0.06), i.e.
w_pacing=0.35 and hard_m_weights {1:0.60,2:0.31,3:0.09}; depth
log-uniform 2-6 or 2-8 decades. Keep the current weights with depth 2-12
and 2-24 as a named 'Carter / Snyder-Beattie' camp. Set f_c to the
study's 0.1-0.9 in the no-hard-step branch (at most 0.03-0.9 overall).
Report 'alone' split by whether inhabited planets exceed 1e6.
- Expected effect: Alone in Galaxy 0.75 -> about 0.46 (0.39 with
depth 3; 0.58 with depth 2-12). Infeasible 0.15 -> 0.36 (0.28-0.42);
infeasible becomes the largest single class. Alone-in-universe 0.27
-> about 0.19. 'Microbial galaxy, no technology' falls from 0.485 to
about 0.12 in my composite. Opposite pole: depth 2-24 gives alone
0.82.
- Tested: Ran a parametrised copy of run() (m2.py, n=1e6, base
replicates to 3 decimals). Study weights alone: alone 0.60, infeasible
0.26. Plus depth 3: alone 0.39, infeasible 0.42. Plus depth 2-6: alone
0.46, infeasible 0.36. Plus depth 2-12 and f_c 0.1-0.9: alone 0.58.
Depth 2-24 with model weights: alone 0.82. Model's own sensitivity rows:
depth 3 -> 0.56, depth 12 -> 0.91.
[major] Headline claim (3) and bottleneck_given_rare
(integrate.py L221-232): 'an early filter is cheap from wide priors';
bottleneck = intelligence 0.73, abiogenesis 0.27, persistence 0.00,
technology 0.00
- Argument: The null result is being allocated to whichever link was
given the heaviest tail. Evolution can span up to 60 decades (5 steps x
12) and abiogenesis up to 100; f_persist and f_c are capped at 2 decades
and p_will at 4. The 'bottleneck' split therefore restates the prior
ranges; persistence and technology score exactly zero because they
cannot be the smallest term. The data add little: prior P(fewer than one
civilisation per Galaxy) is 0.509 and the posterior is 0.752, an odds
shift of 2.9. Marginal likelihoods across the seven camps run from 0.225
(optimist) to 0.755 (expansion sceptic), a factor of 3.4. A biologist
reading '0.75 alone, mostly because intelligence is hard' would take it
as a result; it is an assumption about tail width in the one place the
project has its own data (the convergence study) saying the tail is
thinner. The label is also wrong: the study says brains are not the hard
part, so the 73% is about the microbe-to-animal transitions.
- Proposed change: Print the prior next to every posterior in the
headline table and state the odds shift (2.9). Replace the single base
case with a 2x2 conditional table (abiogenesis fast or slow, by
evolution gated or hard-stepped), with the prior weight on each cell
shown as a reader-adjustable input. Rename the bottleneck 'evolutionary
transitions between first life and animals'. Drop or caveat the
bottleneck split.
- Expected effect: No number changes, but the claim changes from 'we
are probably alone' to 'we are probably alone if evolution has 2 or more
deep hard steps or abiogenesis is slow; otherwise settlement is probably
infeasible'. Conditional posteriors from the base run: fast abiogenesis
and gated evolution (mass 0.066): infeasible 0.79, hidden 0.12, late
filter 0.08, alone 0.00. Fast and hard steps (0.623): alone 0.74,
infeasible 0.14. Slow and gated (0.065): alone 0.87. Slow and hard steps
(0.245): alone 0.97.
- Tested: Prior and posterior of Nciv<1 computed from the model
(0.509, 0.752). Evidence values read from integrate_results.json (0.225
to 0.755). Conditional table computed from base-run samples.
[major] integrate.py L40-42: w_easy=0.5, easy_fl=(0.1,1),
hard_fl_decades=(5,100); label 'agnostic mixture'
- Argument: This runs against the project's own abiogenesis brief and
gaps item 7, in the optimistic direction. The brief's table shows that a
prior P(fast)=0.50 is its chemistry-optimist floor (log10 rate floor -3,
posterior 0.82). Its baseline floor of -30 gives prior 0.09 and
posterior 0.33, and gaps section 7 instructs 'P(fast abiogenesis) 0.35
(0.14-0.86)'. The model's posterior is 0.69. Koonin and Totani would say
half the prior mass in one decade of f_l is not agnostic. The opposing
case (Sutherland, Szostak, Joyce; Mills and Frank) is that log-uniform
to -30 hard-wires a random-assembly model that the 45-nt
self-synthesising ribozyme (Gianni et al. 2026), RNA-catalysed evolution
(2024) and Bennu feedstock undermine. My reading: neither extreme. No
continuous prebiotic pathway exists, the LUCA date is contested (brief:
P 0.5-0.7 that life existed by 4.1 Ga), and Kipping's own caveat that
suitable sites may be rare is unmodelled. A defensible prior is
0.3-0.45, not 0.5. This error and the hard-step error offset, so 0.75 is
roughly right for the wrong reasons and its composition is wrong.
- Proposed change: Either set w_easy=0.35-0.40 as base, or keep 0.5
and relabel the base case 'chemistry-optimist on abiogenesis'. Show
w_easy=0.2 (which reproduces the brief's 0.35 posterior) as a named row.
Sample the rate itself in the fast branch (see the next objection) so
the brief and the model use one definition.
- Expected effect: w_easy=0.2 alone: alone 0.75 -> 0.85,
alone-in-universe 0.27 -> 0.41, infeasible 0.15 -> 0.09.
w_easy=0.35: alone 0.79, alone-in-universe 0.33, infeasible 0.12.
Combined with the study's hard-step prior: alone 0.67 (depth 3), 0.70
(2-6), 0.76 (2-12), but with gated evolution at 0.30-0.35 instead of
0.13 and mean steps 1.2-1.3 instead of 2.6.
- Tested: w_easy=0.2: posterior fast 0.36, alone 0.846 (matches the
model's own sensitivity row). w_easy=0.2 plus study weights plus depth 3
/ 2-6 / 2-12: alone 0.67 / 0.70 / 0.76, infeasible 0.21 / 0.19 / 0.15.
My composite (w_easy 0.40, rate-based fast branch, study weights, depth
2-8, f_c 0.03-0.9): alone 0.56 (universe 0.24, Galaxy 0.32), infeasible
0.31, hidden 0.044, handful 0.05, late 0.03, restraint 0.012; bottleneck
given rare flips to abiogenesis 0.73, evolution 0.27.
[moderate] integrate.py L140-141: L_early = 1.0 for the
whole easy branch, while easy_fl is log-uniform 0.1-1
- Argument: The comment defines 'easy' as near-inevitable within about
1 Gyr, but 70% of the branch has f_l below 0.5. An f_l of 0.1-0.5 in 1
Gyr is a rate of 0.1-0.7 per Gyr. For that rate the chance that life
starts within the observed 0.1-0.7 Gyr, given it must start early enough
for observers, is 0.2-0.4, no better than the hard branch's (m+1)*tau of
0.2-0.35. The model gives those samples full credit, so the fast branch
gets a likelihood bonus it has not earned. The brief's recipe avoids
this: draw log10 rate uniform on [-0.5, 3] per Gyr and derive both f_l
(about 1) and the timing likelihood from it.
- Proposed change: In the fast branch draw the rate (log10 per Gyr
uniform on [-0.5, 3]), set f_l = 1-exp(-rate x 1.5 Gyr) and L_early =
(1-exp(-ratedt1))/(1-exp(-ratedt2)) with dt2 = 1.6-3.0 Gyr, as
in the abiogenesis brief section 6.
- Expected effect: Posterior P(fast) 0.69 -> 0.63 with the brief's
range, 0.58 if the rate tops out at 30 per Gyr, 0.40 if the present f_l
range is kept and mapped to a rate. Alone 0.75 -> 0.75-0.83;
alone-in-universe 0.27 -> 0.29-0.39; infeasible 0.15 ->
0.10-0.15.
- Tested: Brief recipe [-0.5,3]: fast 0.63, alone 0.75 (universe
0.288). [-0.5,1.5]: fast 0.58, alone 0.77. Present f_l range mapped to a
rate with latest start 0.27-0.5 of the window: fast 0.40, alone 0.83
(universe 0.39), infeasible 0.097.
[moderate] integrate.py L179-182: hwo_none / hwo_some
likelihood p_bio = f_l * sqrt(f_persist) * 0.5; and the 'future
observations' table built on it
- Argument: Two errors. First, a Habitable Worlds Observatory target
is a rocky habitable-zone planet, i.e. an eta-Earth planet. The model's
f_l applies only to the fraction f_hz_habitable x f_rare_earth of those
(median 0.11), which the likelihood omits. Second, the detectable
biosignature is oxygen or ozone, which needs oxygenic photosynthesis and
planetary oxygenation. In the hard-steps branch that is the first hard
step; Watson 2025 and Mills et al. 2025 agree this is the decisive test
between their views. As coded, a detection leaves the hard-step count
untouched and slightly raises it (gated share 0.13 -> 0.10, mean
steps 2.64 -> 2.74), the opposite of what both camps say it should
do. A null on 25 planets is credited with cutting P(fast abiogenesis)
from 0.69 to 0.43, which overstates its power several-fold.
- Proposed change: p_bio = f_hz * f_rare * f_l * sqrt(f_persist) *
p_oxygenic * q_detect, where p_oxygenic is the first hard-step
probability in hard-step samples (with probability about 0.7 that
oxygenic photosynthesis is one of the steps) and a gating factor in the
no-hard-step branch. Report the implied forecast P(at least one
detection) alongside.
- Expected effect: Forecast that 25 planets yield at least one
biosignature: 47% as coded -> 14% with the model's own planet factors
-> 5% with the oxygen requirement. After a null: alone 0.84 as coded
-> 0.76-0.77, P(fast) 0.43 -> 0.64-0.67, so a null is nearly
uninformative. After a detection: alone 0.65 as coded -> 0.56,
infeasible 0.21 -> 0.30. In my composite a detection takes alone to
0.10 and infeasible to 0.70.
- Tested: Evidence ratios against the base run: hwo_some 0.471; with
f_hz*f_rare 0.144; with the oxygen step 0.054. Null and detection
posteriors as quoted. Composite: detection has probability 0.13 and
gives alone 0.10, infeasible 0.70, gated share 0.54.
[moderate] integrate.py L34-35, L46, L49, L52:
f_hz_habitable x f_rare_earth x f_persist x pacing_fi x f_c multiplied
as independent log-uniforms
- Argument: Four of these five describe one thing: whether the planet
stays clement long enough. f_hz_habitable is the Venus runaway.
f_rare_earth lists plate tectonics and volatiles, i.e. the
carbon-silicate thermostat. f_persist is anchored on Tyrrell 2020, whose
random-feedback planets already are the question of whether a thermostat
exists. The low end of pacing_fi is defined in the evolution brief as
planets whose oxygenation time exceeds their habitable lifetime. Chopra
and Lineweaver's Gaian bottleneck is an alternative to rare origin, not
an extra multiplier on top of it. The product has a median of 2e-4 per
inhabited rocky habitable-zone planet in the 'no hard steps' branch, and
exceeds 0.1 with prior probability 0.2%. So the model contains no branch
in which intelligence is actually easy, although Mills et al. predict
technosignatures to be common on old enough planets and the convergence
study puts the last link at 0.5 (0.1-0.9). In the hard-steps branch
f_persist is mis-specified: under hard steps 4 Gyr is an outcome, not a
requirement, and the right term is the mean of (window/Earth window)^n,
which can exceed 1 for K-dwarf planets.
- Proposed change: Collapse f_hz_habitable, f_rare_earth and f_persist
into one planetary-suitability factor, log-uniform 0.003-1. In the gated
branch drop f_persist (it is the gating failure) and use pacing_fi 0.1-1
with f_c 0.1-0.9. In the hard-steps branch replace f_persist by a
window-length factor raised to the number of steps.
- Expected effect: Small in the base case because heavy tails
dominate: alone 0.75 -> 0.69-0.73, infeasible 0.15 -> 0.16-0.20.
Larger once the hard-step prior is corrected, and it changes what the
optimist camp means.
- Tested: Prior quantiles of the product in the gated branch: 5/50/95%
= 10^-5.5 / 10^-3.7 / 10^-2.0. No f_persist: alone 0.72, infeasible
0.18. No f_persist with f_rare 0.1-1 and f_c 0.1-0.9: alone 0.69,
infeasible 0.20. Mills-style gated branch at fixed weight 0.3: alone
0.73.
[moderate] integrate.py L53 and L129: x_now=(0.72,0.88);
L_late = m x^(m-1) for hard steps and 1.0 for the gated branch; no
hybrid branch
- Argument: Three linked problems. (a) Giving the gated branch
L_late=1 assumes gate-opening times are uniform over the window.
Hanson's point, which the evolution brief calls the key unanswered
objection to Mills, is that gating does not explain why the gate opens
at 80% of the stellar window; with a log-uniform gate time the density
is about 0.27. Conversely, if gate times are of order the window
(Catling et al. 2005), late arrival is expected and L_late is about 2,
and it should be tied to f_i: low f_i means most successes are late. (b)
The evolution brief's own 'most defensible' reading is a hybrid of 1-3
hard steps plus about 1.5 Gyr of gated delay (Watson 2025). The model
has only the two pure branches. In the hybrid the hard steps play out in
a shorter effective window, x is 0.60-0.72, and the Carter likelihood
penalises 4-5 steps instead of rewarding them. (c) The range 0.72-0.88
is shifted high against the brief's 0.70-0.85; 0.88 needs only 0.6 Gyr
of habitable future, below every estimate cited.
- Proposed change: Model the gate time as lognormal across planets
(0.3-0.5 dex) with f_i = P(gate opens inside the window) and L_late =
pdf(x)/f_i. Add a hybrid branch with a delay of 1-2 Gyr subtracted from
the window before applying m x^(m-1). Set x_now to 0.70-0.85.
- Expected effect: Gated-branch posterior share ranges 0.04-0.23
against 0.13 now; alone 0.71-0.79. Hybrid x: mean steps 2.64 -> 2.25,
alone 0.75 -> 0.70, infeasible 0.15 -> 0.18. x_now 0.70-0.85
alone: under 0.01.
- Tested: Gated L_late=0.27: gated share 0.04, alone 0.79. L_late=2:
0.23, alone 0.71. Lognormal gate tied to f_i: 0.21 (0.3 dex), 0.15 (0.5
dex). x_now 0.60-0.72: mean steps 2.25, alone 0.70. Changing the
gated-branch abiogenesis window from 0.25 to 0.4 or 0.65 (planetary
clock instead of a clock started by life) moves P(fast) by at most 0.03
and alone by 0.00.
[moderate] The 0.27 for 'alone in the observable
universe'; hard_fl_decades=(5,100) (L42); classification at
L198
- Argument: The split between alone-in-universe and alone-in-Galaxy is
set by a hyperprior with no evidential content and by an unstated
cosmological assumption. Nothing in the model distinguishes f_l=10^-15
from 10^-80. The upper bound of 100 decades is arbitrary from both
sides: Totani 2020 gives 10^-39 per star for a 40-nt replicator and
beyond 10^-160 for 100 nt; Koonin 2007 gives 10^-1018, which the model
cannot represent, and Koonin explicitly needs an infinite multiverse to
rescue it. That is the second point: with anthropic='none' the model
never conditions on at least one civilisation existing, so samples with
10^-40 civilisations per observable universe keep full weight. That is
legitimate only if the universe beyond the horizon is effectively
infinite.
- Proposed change: Headline the sum 'no other civilisation ever in the
Galaxy'. Give alone-in-universe as a range with its two drivers stated:
the depth hyperprior and the assumed size of the universe. Add a row
that conditions on at least one civilisation in V times the observable
volume.
- Expected effect: Alone-in-universe is 0.16-0.40 across the depth
hyperprior (10 to 100 decades) with the Galaxy-level sum nearly
unchanged. Under existence conditioning: 0.01 (V=1), 0.08 (V=1e3), 0.17
(V=1e10), 0.24 (V=1e30), with alone-in-Galaxy rising to compensate and
the total alone falling to 0.66-0.74.
- Tested: Depth 5-40: universe 0.21, total alone 0.74. Depth 20-200:
universe 0.36, total 0.77. Existence conditioning with weight
1-exp(-NcivGV): values as quoted; P(fast) rises to
0.72-0.81.
[minor] integrate.py L119-123: log_fi = sum of per-step
log p, no ordering factor
- Argument: The evolution brief's formula (section 6) is f_i = (1/m!)
x product of (T/tau_k): m sequential rare steps must all fall inside the
window in order, which costs 1/m!. If the per-step p is T/tau, the model
overstates f_i by m!, i.e. 6x for 3 steps and 120x for 5, and by (m+1)!
when abiogenesis is also hard. If p means something else, it is
undefined.
- Proposed change: Subtract log10(m!) from log_fi in the hard-steps
branch, and log10((m+1)!)-log10(m!) more when abiogenesis is hard, or
state that p is defined net of ordering.
- Expected effect: Alone 0.75 -> 0.78, infeasible 0.15 -> 0.13.
In my composite: under 0.01.
- Tested: With the 1/m! factor: alone 0.778 (universe 0.278, Galaxy
0.500), infeasible 0.132. Composite: alone 0.57 against 0.56.
[minor] integrate.py L36-38 (p_M_class, f_M_planets) and
L185-188 (mdwarf_alive / mdwarf_dead rows)
- Argument: (a) The comment says f_M_planets is occurrence x retention
x 'UV/other', and gaps section 7 instructs a separate ultraviolet
penalty on f_l for stars cooler than K5 (Rimmer et al. 2018). The
numbers contain none: the lower bound 0.004 is exactly 0.2 x 0.02 and
the upper bound 0.36 exceeds 0.2 x 0.8. (b) There is no likelihood for
our own host star. If M-dwarf planets are habitable for tens of Gyr and
intelligence needs hard steps, an observer around a G star at 13.8 Gyr
is a rare draw (Kipping's red-sky paradox; grabby.py gets rank 8e-7 for
six steps). The posterior P(M dwarfs habitable) stays at the prior,
0.24. (c) The 'M dwarfs shown habitable' future row therefore reports no
change, although the project's own grabby.py says that observation would
create a Bayes factor of order 1e4 for a cosmic deadline or an
M-dwarf-specific barrier. integrate.py and grabby.py are not
coupled.
- Proposed change: Multiply the M-dwarf f_l by an ultraviolet factor
(log-uniform 0.01-1) and cap the upper planet factor at 0.26. Add the
host-star likelihood N_sun / (N_sun + N_M x (T_M/T_sun)^steps). For the
mdwarf_alive row, import the earliness factor from grabby.py or say
plainly that the row omits it.
- Expected effect: No visible change in class probabilities (under
0.01). Posterior P(M dwarfs habitable) falls from 0.24 to 0.01-0.04. The
future-observation row changes from 'nothing happens' to 'the earliness
argument revives'. Under SIA, where P(M habitable) is 0.46, the
ultraviolet factor matters more.
- Tested: Host-star likelihood with a window ratio of 10: P(M
habitable) 0.01 at prior 0.25 and 0.04 at prior 0.5; class probabilities
unchanged to 0.01. Model sensitivity rows: M certainly habitable 0.74,
certainly dead 0.755.
- [minor] integrate.py L51-52 and L129: 'hard' steps drawn on
[10^-D, 1] with D as low as 2; f_c multiplied on top of the last hard
step
- Argument: Two definitional slips. With D=2 a quarter of 'hard' steps
have p above 0.3; these are not hard, their timing does not follow the
order-statistic law, yet they are counted in m for the Carter
likelihood. And for m of 4 or 5 the last step can only be human-level
cognition or language, which is the same transition f_c (cumulative
culture, 0.01-1) is charging for, so those samples pay twice, by up to 2
decades.
- Proposed change: Count as hard only steps with p below about 0.1
when computing L_late and L_early. Set f_c to 0.3-1 in samples where the
last hard step is the cognitive one.
- Expected effect: Under 0.02 on any class; mostly removes an
inconsistency a referee would spot.
- Tested: not tested
Code errors
models/integrate.py L140-141 (L_early for the easy
branch) with L41 (easy_fl): The easy branch gets L_early = 1.0 for every
f_l from 0.1 to 1, although 70% of that range (f_l below 0.5) implies
rates below 0.7 per Gyr, for which the chance of a start within 0.1-0.7
Gyr given observers is 0.2-0.4.
- Fix: Draw the rate in the fast branch (log10 per Gyr uniform on
[-0.5, 3]); derive f_l = 1-exp(-rate1.5) and L_early =
(1-exp(-ratedt1))/(1-exp(-rate*dt2)) from the same draw.
- Impact: Posterior P(fast) 0.69 -> 0.40-0.65; alone 0.75 -> up
to 0.83; alone-in-universe up to 0.39.
models/integrate.py L179-182 (hwo_none / hwo_some):
p_bio omits f_hz_habitable and f_rare_earth, although a survey target is
an eta-Earth planet and f_l applies only to the habitable subset. It
also ignores that an oxygen biosignature requires the first hard step in
the hard-steps branch.
- Fix: p_bio = f_hz * f_rare * f_l * sqrt(f_persist) * p_step1_or_gate
* q_detect; keep the per-sample f_hz, f_rare and steps[:,0] to do
so.
- Impact: Implied forecast of at least one detection in 25 planets
drops from 47% to 14% (planet factors) or 5% (with the oxygen step). The
null row changes from alone 0.84 to 0.76-0.77.
models/integrate.py L119-123 (log_fi in the
hard-steps branch): Missing 1/m! ordering factor that the evolution
brief's formula for f_i includes; f_i is overstated by 6x for 3 steps
and 120x for 5.
- Fix: log_fi -= gammaln(m+1)/ln(10) for hard-step samples (and the
extra factor when abiogenesis is also hard).
- Impact: Alone 0.75 -> 0.78; infeasible 0.15 -> 0.13.
models/integrate.py L37 (f_M_planets) and its
comment: The comment claims an ultraviolet factor that the range does
not contain (0.004 = 0.2 x 0.02 exactly), and the upper bound 0.36
exceeds occurrence 0.2 x retention 0.8 = 0.16. Gaps section 7 asks for a
separate ultraviolet penalty on f_l.
- Fix: Range 0.004-0.26 for occurrence x retention, times an explicit
ultraviolet factor on the M-dwarf f_l (log-uniform 0.01-1).
- Impact: Negligible on the non-anthropic headline; relevant under SIA
and to the M-dwarf future rows.
models/integrate.py L185-188 (mdwarf_alive /
mdwarf_dead): The observation is applied only as a filter on planet
count. It carries no consequence for the timing or host-star likelihood,
so the row shows no change, contradicting grabby.py (rank 8e-7, Bayes
factor about 2.5e4 for six steps).
- Fix: Add the host-star likelihood N_sun/(N_sun +
N_M*(T_M/T_sun)^steps), or import the earliness factor from
grabby_results.json, or caveat the row.
- Impact: Row changes meaning; posterior P(M dwarfs habitable) would
fall from 0.24 to 0.01-0.04 in the base case.
models/integrate.py L53 (x_now): Range 0.72-0.88 is
shifted high against the evolution brief's 0.70-0.85; 0.88 needs a
habitable future of only 0.6 Gyr.
- Fix: x_now = (0.70, 0.85), ideally derived from one draw of the
remaining habitable lifetime shared with tau_over_T (gaps item
4.7).
- Impact: Under 0.01 on any class.
models/integrate.py L221-223
(bottleneck_given_rare): The argmin of link shortfalls can never select
persistence or technology because both are capped at 2 decades, so the
reported 0.00 for them is an artefact; 'intelligence' mislabels what is
mostly the pre-animal transitions.
- Fix: Report each link's posterior mean contribution in decades to
the total shortfall, and rename the link.
- Impact: Presentation only.
Claims that survive
- The Carter likelihood m x^(m-1) and the abiogenesis term
1-(1-tau)^(m+1) are correct to first order. Replacing them with the
exact joint form (last of n steps at x, first before tau, n = m+1 when
abiogenesis is hard) leaves every class probability unchanged to three
decimals. The mismatch between m in L_late and m+1 in L_early is
cosmetic.
- Earth's timing data move the class probabilities only modestly
(alone 0.82 without timing, 0.75 with), although they move P(fast
abiogenesis) a great deal (0.32 to 0.69).
- The gated-branch shortcut tau/0.25 holds up: windows of 0.25, 0.4
and 0.65 change P(fast) by at most 0.03 and alone by 0.00.
- M-dwarf habitability is irrelevant to the headline in the
non-anthropic mode (alone 0.74 to 0.755 across p_M_class from 0 to 1,
and with a host-star likelihood added).
- f_persist is not load-bearing in the base case: removing it changes
alone by 0.03. The double counting is real but small in effect.
- The qualitative conclusion that per-civilisation explanations are
minor survives every biological prior I tried: late filter plus
restraint plus hidden is 0.05 in the base case and at most about 0.13
under the convergence-study prior with 3-decade steps. Loosening biology
moves mass to 'settlement infeasible', not to those classes.
- The SIA result is robust to the biological priors: with my composite
priors SIA still gives infeasible 0.83, hidden 0.14, late filter
0.03.
- The model's timing Bayes factor for fast abiogenesis (about 4.7 on
the odds) agrees with the brief's selection-aware bound (median about 6)
and with Kipping 2025 for one later hard step (1/((m+1)tau) = 13.9 at
tau = 0.036).
- What does not survive: 'alone in the Galaxy' as a majority verdict.
Across defensible biological priors it ranges from 0.39 (study weights,
3-decade steps) to 0.95 (Carter / Snyder-Beattie composite).
Missing explanations
- A hybrid evolution branch: 1-3 hard steps plus 1-2 Gyr of
environmentally gated delay (Watson 2025). The evolution brief calls
this the most defensible reading, but the model offers only pure hard
steps or pure gating.
- A reported split of 'alone' into a sterile Galaxy and a microbial
Galaxy. In the base case 0.485 of the 0.75 is 'at least a million
inhabited planets, no other technology ever' and 0.19 is 'no other
inhabited planet'; under my composite priors these become 0.12 and 0.34.
The two worlds make opposite predictions for biosignature surveys and
should be separate classes.
- The Gaian bottleneck (Chopra and Lineweaver 2016) as an alternative
single filter: life starts often and usually dies within about 1 Gyr. It
is currently folded into f_persist as one more multiplier; it predicts
many dead or Archean-type worlds and few oxygenated ones, which is
distinguishable from slow abiogenesis.
- Rarity of sites suitable for abiogenesis (Kipping 2025's own
caveat): subaerial land with wet-dry cycling and ultraviolet for
cyanosulfidic chemistry, versus ocean worlds. Fast chemistry on the
right site and rare sites together look like low f_l in the Galaxy but
high f_l in the timing likelihood.
- Biospheres that cannot support technology: ocean worlds with no land
or fire, ice-covered oceans, oxygen below the roughly 18% combustion
threshold (Balbi and Frank 2023). Gaps 5.4 and 5.9 flag these; f_c has
no term tied to them.
- Correlated origins through lithopanspermia within a planetary
system. It matters for reading a 'second genesis' on Mars as
independent; the current likelihood is simply proportional to f_l.
- Dependence of both branches on host-star window length: under hard
steps a K-dwarf planet with a 10 Gyr window is favoured by (10/5.6)^n;
under gating it is favoured because slow oxygenation has time to finish.
Neither is modelled.
Presentation advice
Lead with a 2x2 table instead of one base case: abiogenesis fast or
slow, by evolution gated or hard-stepped, giving each cell's prior
weight, posterior weight and class probabilities. The cells disagree
completely (fast and gated: infeasible 0.79, alone 0.00; slow and
hard-stepped: alone 0.97), and readers should see that the weights on
the cells are judgement.
Print the prior beside every posterior and say in one sentence that
the observations shift the odds of 'alone in the Galaxy' by a factor of
about 3 (0.51 to 0.75) and discriminate between camps by at most
3.4x.
Split 'alone' into 'no other life' and 'microbes common, no other
technology'. The second is the base case's modal world at 0.485 and is
the one the project's own convergence study argues against.
State the biological prior in plain terms so it can be challenged. As
coded, P(technology | habitable planet) has a median of 10^-9, a 5-95%
range of 10^-49 to 10^-2.5, and only a 2% chance of exceeding 1%. A
careful biologist would defend something like this: P(technology |
inhabited planet that stays habitable) median about 10^-3 with a 90%
range of 10^-9 to 0.3 (the evolution brief's own f_i times f_c); P(life
| habitable planet) bimodal with 35-45% near 1 and the rest spread over
5-40 decades or more; combined median 10^-6 to 10^-7, with a 14% chance
of exceeding 1% and a 5% tail below 10^-45.
Do not call the bottleneck 'intelligence': the convergence study says
brains recur in 1-100 Myr, and the weight sits on oxygenic
photosynthesis and eukaryote-grade complexity.
Fix the Habitable Worlds Observatory rows before publishing them. As
coded the model forecasts a 47% chance of a biosignature in 25 planets
and treats a null as strong evidence; with its own planet factors and
the oxygen requirement the forecast is 5-14% and a null is nearly
uninformative, while a detection would be the single most diagnostic
biological observation available.
Give alone-in-universe as a range with its two hidden assumptions
named: the depth hyperprior and an effectively infinite universe.
Critic:
a specialist in reasoning from our own existence
Verdict. From this lens the headline "probably alone
in the Galaxy (0.76)" is not defensible as an unconditional base case.
It is the answer of one anthropic school, and the mode labelled "no
anthropic update" is in fact a hybrid that keeps the pre-emption penalty
exp(-mu) but drops the matching existence weight. The numbers themselves
are sturdier than the framing: dropping the Milky Way likelihood L1
entirely leaves the base posterior unchanged to three decimals, because
the extragalactic survey term L2 does all the work, so the selection
objection hurts the stated logic more than the result. The SIA numbers
are the weak point: "infeasible 0.82 / hidden 0.14 / late filter 0.04"
is the renormalised ratio of three prior switches (0.15 : 0.0255 :
~0.008), and I could make any of the four barrier classes the leader by
moving one floor. What survives every school I ran is the dichotomy
"rare, or a universal barrier" (independent-choice explanations stay at
or below 0.10 unless a floor is pushed below 1e-12). The single most
important change is to replace "base case plus an SIA sensitivity row"
with an explicit school table (SSA-minimal, SSA-broad, SIA/FNC)
collapsed to three super-classes, plus a credence-weighted blend; at 50%
SIA the blend is alone 0.34, universal barrier 0.62, independent choice
0.03.
Critic’s own estimate of each answer: alone in the
universe 0.09, alone in the Galaxy 0.23, handful first 0.04, late filter
0.13, restraint 0.08, infeasible 0.24, hidden 0.1, other 0.09. What
“other” covers: Constructed observers (simulation or cultivated
biosphere), which SIA-style reasoning favours, plus model
misspecification such as correlated timing or a non-expander deadline.
Derived from school credences of about 0.50 SIA-like (SIA, FNC, thirder,
total-utilitarian ADT), 0.40 SSA-minimal, 0.10 SSA-broad, with the SIA
branch's barrier split flattened because it is prior-determined and my
prior that settlement is infeasible for everyone is below the model's
0.15.
Objections
[major] BASE anthropic="none" (integrate.py line 71)
presented as the base case, with SIA as one of 23 sensitivity rows (line
288); headline 'alone in Galaxy 0.76'
- Argument: The "none" mode is not a recognised anthropic position.
The timing terms L_early and L_late are densities conditional on our
existence, yet L1 = exp(-mu) is treated as an unconditional fact about a
randomly chosen galaxy. If settlement pre-empts later civilisations (the
Hanson/Olson assumption, and the model's own implication, since only the
stealth branch is defined as 'leaving young biospheres alone'), then
P(Milky Way unsettled | we exist) = 1 and L1 is a selection effect (SSA,
minimal reference class). If instead exp(-mu) is the chance our niche
stayed open, it is one factor of an observer count and must come with
the other factor, Nciv (SIA; Neal's full non-indexical conditioning
gives the same in a non-huge universe). The model charges hypotheses for
pre-emption without crediting them for producing us. The project's own
brief warned against this (evidence/anthropics.md, 'Conditioning' (a)
and (c): 'Run both branches. Do not mix them inside one chain'; 'under
SSA it truncates the prior... it is not ordinary evidence'). Calling it
'no anthropic update' implies a neutral default exists; Bostrom, Olum,
Carlsmith and Neal would all deny that. Sandberg-Drexler-Ord make the
same move, which is the standard criticism of them (Finnveden 2019,
cited in the brief).
- Proposed change: Delete the label 'no anthropic update'. Run three
named branches as co-equal results: (B) SSA-minimal: L1 replaced by a
pre-emption-aware term (see objection 3), no Nciv weight, existence
conditioned via P(at least one civilisation like us in a universe of
size G_tot); (C) SSA-broad: weight by the fraction of all observers who
are early and pre-expansion; (D) SIA/FNC: weight by Nciv*exp(-mu).
Report each collapsed to three super-classes (alone / universal barrier
/ independent choice), then a blend at stated school credences of 30, 50
and 70% SIA.
- Expected effect: Per school (alone / barrier / independent):
SSA-minimal 0.75/0.18/0.06; SSA-broad 0.43/0.49/0.08; SIA
0.00/1.00/0.00. Blend at SSA-min 0.4, SSA-broad 0.1, SIA 0.5: alone 0.34
(universe 0.12, Galaxy 0.22), barrier 0.62, independent 0.03. At 30%
SIA: 0.49/0.46/0.05. At 70% SIA: 0.21/0.77/0.02. The headline 'alone
0.76' becomes 'alone 0.2-0.5 depending on your credence in SIA'.
- Tested: Re-ran the model from a scratch copy exposing samples
(expF.py, n=2e6). School posteriors and blends as quoted. Base
reproduction matched the JSON to 3 d.p.
[major] The reported SIA result 'infeasible 0.82, hidden
0.14, late filter 0.04' (integrate.py lines 190-192 with
q_feasible=0.85, p_stealth=0.03, q_doom=0.03, p_will floor 1e-4, p_surv
floor 1e-2)
- Argument: Under SIA the weight Ncivexp(-mu) pushes all mass to
the ceiling of Nciv (posterior median 10^8.4 civilisations per galaxy),
where the only survivors are samples with some switch that zeroes
expansion. The split among those switches is therefore the prior ratio,
not an inference: (1-q_feasible) : q_feasiblep_stealth :
~0.3q_feasibleq_doom = 0.15 : 0.0255 : 0.008 = 0.82 : 0.14 :
0.04. Those three inputs are judgement calls. 'Restraint' is zero only
because p_will is floored at 1e-4; Olson and Ord's 1/q reweighting
drives the posterior to whatever floor is set. The gaps brief (item 10)
says the floor is decisive under self-indication, but the floor
sensitivity was run only in the non-anthropic branch. A critic will
dismantle the sentence in one line of arithmetic.
- Proposed change: Under SIA publish only the robust statements:
P(alone) approx 0 and P(some near-total barrier between technology and
visible expansion) approx 1, with the split shown as a grid over the
switches and floors and explicitly labelled as prior. Better: put
hyperpriors on the floors (floor exponent log-uniform, e.g. 4 to 16
decades for p_will and 2 to 12 for p_surv) and on the three switches,
marginalise, and report the resulting spread. Also run every sensitivity
row in the SIA branch, not just the base.
- Expected effect: SIA infeasible share ranges 0.35-0.97 and each of
hidden, late filter and restraint can reach 0.4-0.6. The defensible SIA
headline is 'universal barrier ~1.0, type undetermined', not 'infeasible
0.82'.
- Tested: SIA runs at n=3e6 (expC.py): q_feasible=0.97 gives
infeasible 0.44, hidden 0.43, late 0.13; q_feasible=0.5 gives
0.97/0.03/0.01; p_stealth=0.2 gives hidden 0.50; q_doom=0.2 gives late
0.22; p_will floor 1e-12 gives restraint 0.32, 1e-16 gives 0.61; p_surv
floor 1e-12 gives late filter 0.47. Alone stayed 0.000 in all twelve
variants.
[major] L1 = exp(-mu) (integrate.py line 162) and
headline logic step (1), 'one persistent expander anywhere in the Galaxy
would be evident'
- Argument: Two problems. First, observation selection: observers like
us can only arise in an unsettled galaxy if settlement pre-empts, so an
empty Milky Way is guaranteed, not evidence, under SSA with a minimal
reference class. Second, in the model as built, L1 is numerically
redundant: removing it changes no class probability at the third
decimal, because L2 (1e5 surveyed galaxies times p_harvest of at least
0.03) already forces mu below about 1e-4, while L1 only requires mu
below about 1. So the whole non-SIA inference rests on one extragalactic
waste-heat survey and the p_harvest prior, not on Hart's Fact A. The
existing sensitivity row 'no extragalactic constraint at all' keeps the
hybrid L1 and so understates the exposure.
- Proposed change: Add p_preempt = P(a settled galaxy precludes our
evolving) and use L1_eff = e^-mu / (e^-mu + (1 - e^-mu)(1 - p_preempt))
in the SSA branch (equals 1 at p_preempt=1, exp(-mu) at 0). Rewrite the
headline logic so step (2) carries the weight and step (1) is flagged as
school-dependent. Re-run the three L2-weakening sensitivities with L1
off, and make L2 (Griffith et al. 2015 completeness, p_harvest,
p_cold_only) the primary red-team target.
- Expected effect: At base settings: none. With L2 removed, the hybrid
gives alone 0.61, independent choice 0.24; the selection-correct version
gives alone 0.42, independent choice 0.38, which is below the prior of
0.51 because Earth's timing data favour easy life. With 'all cold plus
p_harvest down to 1e-4', alone 0.63 and independent 0.20 (hybrid: 0.68
and 0.16).
- Tested: expA.py, n=1e6: base
0.266/0.486/0.054/0.018/0.010/0.148/0.018 with L1; identical without L1;
identical for p_preempt 0, 0.5, 0.9, 0.99. 'Only L3 and timing':
0.134/0.288/0.084/0.112/0.300/0.075/0.009.
[major] 'Alone in the observable universe 0.27'
(classification alone_u = Nciv*G < 1, lines 197-198) with no
conditioning on the fact that at least one civilisation
exists
- Argument: The base posterior has median log10 Nciv = -4.5 and a 5%
quantile of -36. A hypothesis with Nciv = 1e-36 per galaxy predicts a
1e-25 chance that any civilisation, including us, exists in the
observable universe. Any school that conditions on existence (SSA: at
least one member of the reference class; Neal's FNC: someone with our
data exists) multiplies by P(at least one) = 1 - exp(-Nciv * G_tot),
which is proportional to Nciv until Nciv*G_tot reaches 1. The model
implicitly assumes the universe beyond the horizon is large enough to
make this factor 1 everywhere, which needs 1e40 to 1e60 Milky-Way
equivalents. That may be true under eternal inflation but it is an
unstated cosmological assumption carrying a quarter of the
headline.
- Proposed change: Add a hyperparameter G_tot (Milky-Way equivalents
in the whole universe, not just the observable part) and apply 1 -
exp(-Nciv*exp(-mu)*G_tot) in the SSA branch. Report 'alone in the
observable universe' as a function of G_tot, and lead with the merged
'no other civilisation ever in the Galaxy' figure, which is stable.
- Expected effect: Alone-in-observable-universe: 0.01 if the universe
is only the observable part (G_tot=1e11), 0.06 at 1e13, 0.13 at 1e17,
0.19 at 1e25, 0.24 at 1e40, 0.27 only by about 1e60. Alone-in-Galaxy
total moves only 0.66-0.75; infeasible rises from 0.15 to at most
0.20.
- Tested: expB.py, n=2e6, G_tot from 1e11 to 1e100; numbers as quoted.
Prior mass with log10 Nciv below -25 is 0.10 and below -40 is 0.05.
[major] No SSA branch with a broad reference class;
q_doom fixed at 0.03 and never updated anthropically; output
'p_filter_behind_us' = P(Nciv < 1) (line 239)
- Argument: Under SSA with a reference class that includes the
inhabitants of expanded civilisations (Leslie, Gott, Bostrom's original
Doomsday argument; Gerig, Olum and Vilenkin 2013 'universal doomsday',
listed in the gaps brief but not used), our being early and
pre-expansion has probability about 1/(1 + p_exp*R), with R the ratio of
observers in an expanded civilisation to one at our stage. This
penalises every hypothesis in which civilisations like ours expand,
including the 'alone' ones. The seven classes conflate two different
questions, how many others there are and what lies ahead of us, and the
label 'filter behind us 0.75' invites the reading that our future is
open. Under this school it is not.
- Proposed change: Add branch C with weight 1/(1 + p_quietL_q/L_us
+ p_expR), R as a hyperparameter (1e6 to 1e20). Add a second
reported axis for every branch: P(expansion is open to a civilisation
like ours) = P(feasible and no universal doom), and E[p_exp]. Rename
p_filter_behind_us to p_fewer_than_one_other_in_galaxy.
- Expected effect: SSA-broad at R=1e10: alone 0.43 (was 0.75),
infeasible 0.40 (was 0.15), late filter 0.09 (was 0.02), hidden 0.00.
P(feasible and no doom) falls from 0.66 to below 0.001 (0.06 at R=1e6,
0.50 at R=1e3). Conditional on being alone, P(settlement infeasible)
rises from 0.17 to 0.81. Like SIA, this school converges on 'a universal
barrier lies ahead', by a different route; it is also floor-sensitive in
p_will.
- Tested: expD.py, n=3e6, R = 1e3, 1e6, 1e10, 1e20; numbers as
quoted.
[major] SIA implementation counts only evolved
civilisations (weight Nciv, line 192); no class for observers created by
other civilisations; the SIA factor against 'alone' is accepted without
the presumptuous-philosopher caveat
- Argument: SIA weights by the number of observers in our exact
epistemic situation, whoever made them. If any civilisations run
ancestor simulations, or seed and shelter biospheres, simulated or
cultivated copies of our situation can outnumber evolved ones by orders
of magnitude, and the same logic that gives 'alone = 0.000' (a factor of
1e19 or more between alone-in-universe and common) gives near-certainty
to those hypotheses. One cannot accept the first verdict and leave the
second 'unquantified' as the brief recommends. In such worlds L2 and L3
are no longer trustworthy evidence. Separately, a Bostrom-style critic
will call the SIA branch a reductio: it reaches certainty about cosmic
demography from the armchair, and none of the project's eight data
studies can move it except through the SETI term and the feasibility
prior.
- Proposed change: In the SIA branch add an explicit 'constructed
observers (simulation / cultivated biosphere)' class with prior s and
multiplicity K, reported as an 'other' column; show its share as a
function of s*K. State in the text that the SIA factor is at least 1e11
per decade-free and overwhelms every empirical likelihood in the model
(which total a factor of 10-1000), and name the presumptuous-philosopher
objection as the reason a reader may discount the branch.
- Expected effect: Under SIA, 'other' takes most of the mass whenever
s*K exceeds about 1 (for example s=0.01, K=1000). In a 50%-SIA blend
that puts 0.05-0.3 on 'other', taken mainly from infeasible.
- Tested: Not run as a model variant (needs a new class). The 1e19
factor follows from the SIA posterior median Nciv of 10^8.4 against the
alone-in-universe threshold of 1e-11 (expC.py).
[moderate] SIA branch posterior sits at the prior ceiling
and is held up only by L3 (c_det capped at 1e-6, L_quiet down to 100
yr); 'infeasible' label
- Argument: Under SIA the model asserts about 10^8.4 technological
civilisations per galaxy over history (5-95%: 10^6.7 to 10^9.6), a
median of about 250 extant in the Milky Way now, 41% probability of more
than 1,000 and 16% of more than 100,000, all undetected, with posterior
c_det at 1e-8. The SETI null is then the single most important datum in
the branch, yet it is modelled with one log-uniform scalar and the
'techno_null_1e6' future observation is evaluated only in the
non-anthropic branch, where it does nothing. When L3 is strengthened the
SIA posterior escapes through short detectable lifetime (L_q), so much
of what is filed under 'infeasible' is really 'common but briefly
detectable', a class the scheme does not have.
- Proposed change: Feed the seti_meta study's unified limit into L3 as
a function of N_now and lifetime rather than one scalar; add
probe/artefact absence as a constraint that applies even when settlement
is infeasible; split 'infeasible' into long-lived and short-lived (L_q
below about 1e4 yr) sub-classes; run all future-observation rows under
SIA. Use importance sampling tilted in log Nciv for the SIA branch (ESS
is 2,200 of 3e6, and falls to about 550 for some variants).
- Expected effect: The barrier total stays near 1.0; mass moves within
it from 'infeasible, long-lived' towards 'short-lived / late filter'.
Technosignature rows become the most informative future observations in
the SIA column instead of the least.
- Tested: expC.py: SIA posterior quantiles for Nciv, N_now, L_q
(median 10^5.4 yr), c_det as quoted. Raising the c_det cap to 1e-3 left
the class split unchanged (infeasible 0.815), confirming the escape
through L_q. Four-seed spread at n=3e6: s.d. 0.004 on infeasible and
hidden, so the base SIA numbers are stable despite low ESS.
[moderate] grabby.py posterior_summary (lines 132-155):
likelihood = like_time (our birth date's density among all civilisations
ever, line 111); integrate.py future rows 'mdwarf_alive/dead' (lines
185-188)
- Argument: The earliness inference is SSA with a reference class of
every civilisation that will ever arise, including M-dwarf civilisations
up to 100 or 1000 Gyr hence. The Bayes factor for expanders is therefore
set by the reference class: it scales as T_M^n without bound (2.5e4 at
100 Gyr, 2.5e10 at 1000 Gyr, still 1.8e4 if M dwarfs are only 10% as
habitable). Under SIA the normalisation by the total number of
civilisations cancels (Olson and Ord; Cook 2022) and the effect
vanishes. Under SSA restricted to Sun-like-host observers it also
vanishes. The two models are also inconsistent with each other:
integrate.py shows essentially no change when M-dwarf planets are 'shown
habitable' (0.267/0.475/...), while grabby.py under its own school says
that observation multiplies the odds of a cosmic deadline by 1e4 or
more, which should cut 'alone in the observable universe' sharply.
- Proposed change: Add an SIA variant to posterior_summary (replace
like_time by S(T0) = exp(-x)) and report the Bayes factor in a table of
school by reference class. State that earliness is evidence for
expanders only under SSA with a universal reference class and habitable
long-lived M dwarfs. In integrate.py, either add the earliness
likelihood to the SSA-universal branch so that the M-dwarf future rows
move, or state that those rows are computed under a school in which
earliness carries no information.
- Expected effect: Bayes factor for expanders, M dwarfs habitable,
n=6: 25,000 under SSA-universal, 0.53 under SIA, 0.57 under SSA with
Sun-like hosts only. P(more than 10% of volume occupied): 0.82 falls to
0.07. Mean occupied fraction 0.41 falls to 0.03.
- Tested: Recomputed from the saved rows in grabby_results.json for
all six scenarios; SIA Bayes factor is 0.53-0.57 in every scenario; SSA
values reproduce the JSON.
[moderate] L_early = 1 for the whole 'easy' abiogenesis
branch (integrate.py lines 137-141), with easy_fl log-uniform
0.1-1
- Argument: The selection-aware likelihood is P(life starts within tau
| success). The model gives the easy branch the limiting value 1, which
is the likelihood at infinite rate, while the hard branch gets the
properly conditioned 1-(1-tau)^(m+1), about 0.2. But 'easy' includes f_l
as low as 0.1; if f_l below 1 reflects a finite rate (f_l = 1 -
exp(-lambda*T), the Spiegel-Turner and SDO form the abiogenesis brief
recommends), then conditional on success the start time is nearly
uniform and the likelihood is about 0.25, no better than hard. This free
pass is what lifts P(easy) from 0.50 to 0.69 and is most of the 'timing
data' effect.
- Proposed change: In the easy branch draw lambda from f_l and compute
P(t < tau | success) from the density
lambdaexp(-lambdat)*(1-t)^m (truncated at 0.25 in the pacing
camp); or define 'easy' by rate with an explicit prior over lambda and
keep f_l as a separate suitability fraction.
- Expected effect: Non-SIA branch: P(abiogenesis easy) 0.69 falls to
0.38 (fully rate-limited) or 0.53 (half-way); alone-in-Galaxy 0.75 rises
to 0.85 or 0.81; alone-in-universe 0.27 rises to 0.41 or 0.34;
infeasible 0.15 falls to 0.08 or 0.11. SIA branch: no change (infeasible
0.83 either way).
- Tested: expE2.py, n=2e6. Mean easy-branch likelihood under the
rate-limited reading is 0.25 (10-90%: 0.10-0.43) against 1.0 in the
model and 0.23 for the hard branch.
[moderate] 'evidence' output (line 242) and any
comparison of camps or schools by marginal likelihood
- Argument: The marginal likelihood is school-dependent by many orders
of magnitude and its ordering of camps reverses. Without the existence
weight the data favour 'Rare Earth / hard steps' over 'Optimist' by 3.1
to 1; under SIA they favour 'Optimist' by 820 to 1. The SIA evidence
(6e5) and the non-SIA evidence (0.43) are in different units and cannot
be used to update between schools. Any sentence of the form 'the data
favour camp X' is therefore a statement about the anthropic school.
- Proposed change: Report camp evidence ratios only within a school,
in both schools side by side; never across. Treat credences over schools
as fixed inputs chosen by the reader, and say so. Drop or relabel the
raw 'evidence' field for the SIA run.
- Expected effect: No change to class probabilities; removes a route
by which a reader could wrongly conclude that the observations
themselves support the rare-life camps.
- Tested: expE.py, n=1e6 per camp. Evidence relative to base, non-SIA
/ SIA: Optimist 0.53 / 58.6; Strict ignorance 0.85 / 0.10; Rare Earth
1.66 / 0.07; Late-filter 1.17 / 3.9; Expansion sceptic 1.78 / 11.2; Zoo
1.21 / 6.5.
- [minor] SIA weight uses Nciv = (N_sun + N_M) * f_l * f_it
(lines 146, 192); no host-star likelihood in either mode
- Argument: We orbit a Sun-like star. Observers 'in our situation' are
those with Sun-like hosts, so the SIA count should exclude M-dwarf
civilisations, and in any school P(our host is Sun-like | theta) =
N_sun/(N_sun+N_M) is a likelihood (Kipping's red-sky argument). As
coded, SIA rewards M-dwarf habitability for producing observers who are
not like us, and the non-SIA mode never updates p_M_class at all
(posterior 0.244 against prior 0.25).
- Proposed change: Multiply w by N_sun/N_hp in every mode
(equivalently, weight SIA by N_sunf_lf_it).
- Expected effect: P(M dwarfs habitable): 0.24 falls to 0.14 without
SIA; 0.46 falls to 0.25 under SIA. Class probabilities change by less
than 0.005.
- Tested: expD.py, n=3e6; numbers as quoted.
- [minor] Pre-emption is modelled within one galaxy only (mu,
line 156); no intergalactic reach
- Argument: If expansion crosses between galaxies, as in Olson's and
Hanson's models and in the project's own grabby.py, an expander from any
of 1e6 to 1e9 galaxies could have pre-empted us, and Olson's light-cone
factor 1-(v/c)^3 hides fast ones from L2. The integrating model has
neither, so the per-galaxy and cosmological models use different notions
of 'not pre-empted'.
- Proposed change: Add a switch P(intergalactic expansion feasible |
interstellar feasible) with N_reach galaxies in the pre-emption term,
applied in the SIA branch (and as a selection effect, not evidence, in
the SSA branch).
- Expected effect: Negligible: alone stays 0.74-0.75, independent
choice 0.06 falls to 0.04, infeasible 0.15 rises to 0.16-0.17. Under SIA
late filter 0.04 falls to 0.01-0.02. Worth doing for consistency, not
for the numbers.
- Tested: expF.py, n=2e6, P = 0.5 and 1.0, N_reach = 1e6 and 1e8.
Code errors
models/integrate.py line 162 (L1) with lines 172 and
190-193: In 'none' mode exp(-mu) is applied as an unconditional
likelihood while L_early and L_late are conditional on our existence;
the pre-emption factor is kept and the matching Nciv factor dropped. No
parameter for whether settlement pre-empts us.
- Fix: Add p_preempt; in the SSA branch use L1_eff = e^-mu/(e^-mu +
(1-e^-mu)(1-p_preempt)); keep exp(-mu) only inside the SIA observer
count.
- Impact: None at base settings (L2 dominates). With L2 removed: alone
0.61 becomes 0.42, independent choice 0.24 becomes 0.38.
models/integrate.py lines 146 and 190-192: SIA
weight uses Nciv including M-dwarf-host civilisations, although the
stated intent is 'civilisations in our situation'; no host-star
likelihood in any mode.
- Fix: Multiply w by N_sun/N_hp in all modes.
- Impact: P(M dwarfs habitable) 0.46 becomes 0.25 under SIA and 0.24
becomes 0.14 otherwise; classes change by less than 0.005.
models/integrate.py lines 137-141: L_early is 1 for
every 'easy' sample, including f_l = 0.1; this is the infinite-rate
limit, not a likelihood averaged over the branch's own rate prior.
- Fix: Compute P(t < tau | success) from lambda = -ln(1 - f_l) with
density lambdaexp(-lambdat)*(1-t)^m.
- Impact: Non-SIA: P(easy) 0.69 becomes 0.38-0.53; alone 0.75 becomes
0.81-0.85. SIA: none.
models/integrate.py lines 197-198 (alone_u) and
absence of any existence term: 'Alone in the observable universe' is
computed without conditioning on at least one civilisation existing;
implicitly assumes a universe of at least 1e40-1e60 Milky-Way
equivalents.
- Fix: Add G_tot and the factor 1 - exp(-Nciv*exp(-mu)*G_tot) in the
SSA branch; report the class as a function of G_tot.
- Impact: alone_universe ranges 0.01 (G_tot=1e11) to 0.27 (G_tot of
1e60 or more).
models/integrate.py lines 239-242:
p_filter_behind_us is P(Nciv < 1), which says nothing about filters
ahead; 'evidence' for the SIA run (6.1e5) is not comparable with the
non-SIA value (0.43) but is stored under the same key.
- Fix: Rename to p_fewer_than_one_other_in_galaxy; add P(feasible and
not doom) and E[p_exp]; tag evidence with the school and never ratio
across schools.
- Impact: Presentation only, but prevents a wrong 'our future is open'
reading and a wrong cross-school Bayes factor.
models/integrate.py SENSITIVITY and EXTRA dicts
(lines 265-298): Every sensitivity row except one, and every
future-observation row, is run only in 'none' mode. The floors that the
gaps brief (item 10) flags as decisive under self-indication are never
varied under SIA.
- Fix: Run the full sensitivity and future tables once per school; add
p_will and p_surv floor grids under SIA.
- Impact: Under SIA the class split moves by up to 0.6 (restraint 0.00
to 0.61; late filter 0.04 to 0.47).
models/integrate.py lines 206-207: late_filter
versus restraint is decided by p_surv <= p_will, which is arbitrary
when both are moderate and does not separate 'short detectable lifetime'
from 'infeasible'.
- Fix: Classify by which factor supplies most of the suppression in
log terms, and add a short-lived sub-class by L_q.
- Impact: Relabels mass within the barrier group, mainly under
SIA.
models/grabby.py lines 111 and 132-141: Only the SSA
(rank-among-all-civilisations) likelihood is implemented; the Bayes
factor scales without bound with the assumed M-dwarf habitable lifetime
and also depends on the arbitrary lower bound of the x grid (1e-6).
- Fix: Add an SIA variant with likelihood exp(-x)*exp(-mu_det), report
both, and report sensitivity to the x-prior floor.
- Impact: Bayes factor for expanders 2.5e4 (or 2.5e10) becomes 0.53;
P(over 10% of volume occupied) 0.82 becomes 0.07.
Claims that survive
- The base-case class probabilities are robust to the
observation-selection objection as long as the extragalactic survey term
stands: removing L1 entirely, or setting any pre-emption probability
from 0 to 1, leaves all seven numbers unchanged to three decimals
(0.266/0.486/0.054/0.018/0.010/0.148/0.018).
- 'No other technological civilisation ever in the Galaxy' holds at
0.66-0.75 under every SSA-minimal variant I ran, including conditioning
on existence in a universe as small as the observable one; only the
split between 'alone in the universe' and 'alone in the Galaxy'
moves.
- Under SIA, P(alone) is 0.000 in all twelve prior variants tested,
and the Monte Carlo noise is small (s.d. 0.004 across four seeds at
n=3e6) despite an effective sample size near 2,200.
- The dichotomy in headline step (3), 'rare or a universal barrier',
survives every school: independent-choice classes (restraint plus
handful) total 0.06 without SIA, 0.08 under SSA-broad, 0.00 under SIA at
the stated floors. It fails only if the p_will floor is pushed below
about 1e-12 under SIA, or the extragalactic constraint is discarded
under SSA.
- Headline step (5), that the anthropic assumption is the largest
single lever, is confirmed and understated: it moves 'alone' from 0.75
to 0.00 and reverses the camp evidence ordering by a factor of about
2,500, more than every other sensitivity row combined.
- Headline step (4), that Earth's timing data move things modestly,
holds: nil under SIA, and within about 0.1 on 'alone' without it even
after correcting the easy-branch likelihood.
- The expected number of visible expanders per galaxy is far below 1
in every school; this does not depend on anthropics because it comes
from the galaxy surveys.
- Adding intergalactic pre-emption or a host-star likelihood does not
change any class probability by more than 0.03.
Missing explanations
- Constructed observers: ancestor simulations or deliberately
cultivated/sheltered biospheres. Under SIA this class can dominate, and
it changes what the astronomical likelihoods mean. Needs an explicit
'other' column, not an unquantified aside.
- Common but briefly detectable: civilisations that are numerous and
cannot or do not expand, with detectable lifetimes of 1e2-1e4 years.
Under SIA this is where the posterior goes when the SETI term is
strengthened, and it is currently filed under 'infeasible'.
- Fast intergalactic expanders hidden by light-cone selection (Olson's
1-(v/c)^3). Present in grabby.py, absent as a class in integrate.py,
where it is silently absorbed into 'alone in the Galaxy'.
- Universal doomsday as an anthropic inference (Gerig, Olum and
Vilenkin 2013), distinct from the fixed prior q_doom: under SSA with a
broad reference class it applies even if we are alone.
- A non-expander deadline or globally correlated timing (Vukotic and
Cirkovic's regulation by gamma-ray bursts, astrobiological phase
transition), which answers the earliness puzzle without grabby
civilisations and breaks the Poisson independence behind exp(-mu).
- The decision-theoretic reading (Armstrong's anthropic decision
theory): no fact about anthropic probability; total-welfare agents
should act on the SIA column and average-welfare or self-interested
agents on the SSA column. This is a way to present the fork as a choice
of what to act on.
- The reference-class restriction to evolved civilisations is itself a
choice; under SSA-broad or SIA in a long-lived de Sitter future, freak
observers raise the standard measure problem. Worth one sentence so the
reader knows it was considered and set aside.
Presentation advice
Lead with what does not depend on anthropics: visible expanders
per galaxy are far below 1 (a survey result), and the answer is
therefore either 'technological civilisations are rare' or 'something
stops all of them'. Explanations that need each civilisation to choose
independently stay at or below 0.10 in every school.
State the fork as one question the reader can answer: 'Does the
fact that you exist count as evidence that observers are common?' No
(existence is a precondition, SSA-minimal): rare 0.75, barrier 0.18. Yes
(SIA / full non-indexical conditioning): rare 0.00, barrier about 1.0. A
third reading, 'I am a random draw from all observers including our
descendants' (SSA-broad, the Doomsday argument): rare 0.43, barrier
0.49, and expansion is closed to us.
Show one 3-by-3 table (school by alone / universal barrier /
independent choice), then the blend at 30, 50 and 70% credence in SIA:
alone 0.49 / 0.34 / 0.21; barrier 0.46 / 0.62 / 0.77. Give the 50% row
as the project's all-things-considered figure and say that is what it
is. Fix the school credences as inputs; do not update them with the
model's evidence values.
Do not print a seven-way split under SIA. Print 'universal
barrier about 1.0; which barrier is set by the prior' and show the grid
(infeasible 0.35-0.97 depending on three switches and two
floors).
Add a second axis for every school, 'is expansion open to a
civilisation like ours?': 0.66 (SSA-minimal), 0.14 (SIA), about 0
(SSA-broad). Drop the phrase 'filter behind us'.
Say which evidence moves which column. Biosignatures, a second
genesis and galaxy surveys move the SSA column. Only technosignature
limits and settlement-feasibility arguments move the SIA column. No
astronomical observation moves the credence between columns.
Two sentences of caveat on SIA: it reaches near-certainty from
the armchair (the presumptuous-philosopher objection), and the same
reasoning favours simulated or cultivated observers. Two sentences on
SSA: its answer depends on the reference class, and 'alone in the
observable universe' needs a universe vastly larger than the observable
one.
Retire the label 'no anthropic update'; call it 'existence
treated as a precondition'. Demote the Milky Way argument in the
headline logic: in the model it carries no weight beyond the galaxy
surveys.
Citations given from memory, not re-checked for this review: Neal
2006 (full non-indexical conditioning), Carlsmith 2021 ('SIA > SSA'
series), Bostrom 2002 (Anthropic Bias, presumptuous philosopher), and
the PhilPapers 2020 survey split on Sleeping Beauty (roughly 28%
thirder, 19% halfer, the rest undecided), which is my basis for putting
SIA-like views near 50% rather than treating either school as the
default.
Critic: a statistician
Verdict. The qualitative logic is defensible, but
the numerical headline is not. Every class posterior is a prior mass
multiplied by a Bayes factor that never exceeds about 3: the seven
published camps differ in marginal likelihood by at most 3.4, and a
400-draw joint scan over the modeller's own sensitivity ranges moves
"alone in the observable universe" from 0.004 to 0.70 and "infeasible"
from 0.007 to 0.74. Three specific claims are artefacts. The SIA split
(0.82 / 0.14 / 0.04) is the ratio of three unevidenced prior point
masses. "Independent restraint is crushed" comes from a hard 1e-4 floor
on p_will plus the galaxy-survey term alone; the Milky Way term can be
deleted with no change to three decimals. The base case's 50/50
abiogenesis mixture is the project's own "chemistry-optimist" prior, not
agnosticism. What survives is the disjunction: rarity or a common-cause
barrier holds at least 0.63 of the posterior everywhere in the scan, and
at least 0.75 in 95% of it. The single most important change is to stop
publishing one posterior vector and instead publish the likelihood each
class receives, plus a table of what prior a reader must hold to reach
each answer. All scratch code is in the critic’s working folder (core.py
reproduces integrate.py exactly and exposes every likelihood term).
Critic’s own estimate of each answer: alone in the
universe 0.17, alone in the Galaxy 0.4, handful first 0.07, late filter
0.05, restraint 0.08, infeasible 0.07, hidden 0.04, other 0.12. What
“other” covers: Mechanisms outside the seven-way partition: settlement
that is neither evident at Earth nor galaxy-dimming, synchronised late
emergence, simulation-type scenarios, and model misspecification. These
are judgement numbers. The data constrain them only through the gain
rule: about 2.3 times prior for N-immune explanations and 0.02-0.3 times
for independent-choice ones. I would not defend any entry to better than
a factor of 2.
Objections
[fatal] The SIA headline (infeasible 0.82, hidden 0.14,
late filter 0.04); integrate.py lines 190-192 and the 'anthropic: SIA'
sensitivity row. Fatal for that claim only, not for the
model.
- Argument: Under SIA the weight is proportional to Nciv, so all mass
goes to hypotheses whose likelihood does not fall with N. The model has
exactly three: infeasible (prior 0.15), stealth (0.03) and doom (0.03).
The published split is their prior ratio: 0.15/(0.15 + 0.03*0.85) =
0.855 before the small doom share, against 0.82 reported. No data enter
beyond eliminating everything else. The posterior median log10 Nciv is
8.4, at the prior's 99.9th percentile (8.7), so the answer is also set
by the upper bounds of eta_earth and f_M_planets. This is the failure
the anthropics brief warned of (guidance (c): under SIA the floor on q
sets the answer); the published SIA literature (Olson & Ord, as
summarised in that brief) gets a 1/q late-filter answer instead, because
it has no infeasibility point mass.
- Proposed change: Do not report an SIA class split as a result.
Report that SIA eliminates rarity (robust) and that the split among the
remaining explanations equals the prior odds among N-immune hypotheses,
with a table of that split against (q_feasible, p_stealth, q_doom,
p_will floor). If a number is kept, sample the Nciv > 1e5 tail
directly (stratified or conditional sampling) instead of reweighting a
prior sample.
- Expected effect: The SIA row changes from three numbers to a range:
infeasible 0.46-0.90, hidden 0.06-0.43, late 0.02-0.16, restraint 0-0.32
across the modeller's own sensitivity values.
- Tested: SIA at n = 2M. Four seeds: infeasible 0.805-0.831, hidden
0.135-0.157, ESS 1,100-2,040. Top 100 samples carry 20% of the weight,
top 1,000 carry 52%. p_stealth = 0.15 gives 0.541 / 0.425 (prior-ratio
prediction 0.541). q_feasible = 0.97 gives infeasible 0.46, hidden 0.42,
late 0.12. p_will floor 1e-12 gives restraint 0.32, infeasible 0.585.
q_doom = 0.15 gives late 0.16. Script e6_sia.py.
[major] The headline vector (0.27, 0.49, 0.05, 0.02,
0.01, 0.15, 0.02) presented as 'the posterior probability of each
explanation'.
- Argument: The data are worth a Bayes factor of at most about 3 on
anything. Posterior/prior ratios by class are 1.18, 1.71, 0.76, 0.19,
0.04, 2.34, 2.32. The last two equal 1/evidence = 2.35: any hypothesis
immune to the likelihood has its prior multiplied by about 2.3, whatever
it is. Bayes factors on the binary knobs are feasible 0.42, doom 1.8,
stealth 2.05, easy abiogenesis 2.2, no hard steps 0.35. The prior has
median Nciv of about 0.6 and P(Nciv < 1) = 0.51, so 'alone in the
Galaxy 0.75' is 0.51 times a factor of 2.9 on the odds. A quantity whose
prior uncertainty spans 46 decades (5%-95%) and whose update is under
half a decade does not have a posterior worth quoting to two
figures.
- Proposed change: Lead with the class-averaged likelihoods, which are
the data's contribution: infeasible 1.00, hidden 0.99, alone-galaxy
0.73, alone-universe 0.50 (the timing penalty), handful 0.32, late
filter 0.08, restraint 0.017. Then give posteriors as a function of the
reader's prior (see presentation advice), with the base case as one row
labelled 'modeller's judgement'. State the gain rule explicitly: a
common-cause explanation gets about 2.3 times its prior; an
independent-choice one gets 0.02-0.3 times.
- Expected effect: No number moves. The claim changes from 'P = 0.27 /
0.49' to 'the observations favour rarity and universal barriers over
common-plus-independent-choice by factors of 10-60, and cannot separate
rarity from universal barriers by more than about 2'.
- Tested: Decomposed the base run (core.py): class-mean L1, L1*L2, L3
and timing terms as quoted. Evidence ratio across the seven published
camps: max/min 3.36 (expansion sceptic 0.755 against optimist 0.225).
Across the 400-draw scan: evidence 0.21-1.19, with 5%-95% of
0.32-0.91.
[major] Headline (3), 'explanations that rely on each
civilisation independently choosing restraint are crushed by the
numbers'; p_will = (1e-4, 1) and p_surv = (1e-2, 1), integrate.py lines
58-59.
- Argument: The prior widths are asymmetric. The early links get
hierarchical lower bounds (abiogenesis up to 100 decades, five steps of
up to 12 decades each); the late links get hard floors of 4 and 2
decades. The filter lands early largely because that is where the prior
volume is. The 1e-4 floor is a judgment tag in the briefs, not a
measurement, and gaps item 10 already flags it as decisive. A
between-world spread in p_will is also the natural way to represent
convergent restraint, which the iid floor rules out by
construction.
- Proposed change: Give p_will and p_surv the treatment given to f_l:
log10 p ~ U(-B, 0) with B log-uniform, for example on (2, 30). Report
restraint and late filter on a grid of (p_will floor, survey strength).
Word the claim as conditional: 'if fewer than 9,999 in 10,000
civilisations abstain, then...'.
- Expected effect: Restraint rises from 0.010 to 0.06-0.29;
alone-in-Galaxy falls from 0.75 to 0.52-0.70; infeasible falls from
0.148 to 0.10-0.14. With both late links hierarchical on (2, 30): late
0.14, restraint 0.14, alone 0.53.
- Tested: B ~ logU(2,12): restraint 0.061. (2,30): 0.166. (4,30):
0.206. (4,100): 0.286. Both links (2,30): alone-universe 0.174,
alone-galaxy 0.360, handful 0.086, late 0.143, restraint 0.137,
infeasible 0.097. Marginal likelihood rises from 0.43 to 0.54-0.66, so
the data mildly prefer the wider late prior. Grid of p_will floor (1e-2
to 1e-12) by survey strength (0 to 1e5): restraint 0.001-0.32. Scripts
e5_latewidth.py, e9.py.
[major] L1 and L2, integrate.py lines 162-163; p_harvest
= (0.03, 1) at line 62; N_surveyed_warm and N_surveyed_cold as hard
numbers at lines 64-65.
- Argument: Headline step (1), the Milky Way argument, does no
numerical work. Because N_surveyed * p_harvest is at least 60 and
usually above 3,000, exp(-S*mu) swamps exp(-mu); deleting L1 leaves
every class unchanged to three decimals. The inference rests wholly on
the survey term, which rests on p_harvest: the probability that a
settled galaxy has at least 75-85% of its starlight intercepted, given a
floor of 0.03 and median 0.17, with no source in any brief. A galaxy
with a settlement at every star is not thereby a Kardashev-III galaxy.
The counts are also zero-detection Poisson terms. N_surveyed_cold =
2,000 implies a 95% limit of 0.15%, but the tf_kiii study's stated limit
is 1.8% (20 unresolved candidates of N_eff 1,593; it explicitly does not
claim the 0.19% floor) and fp_kiii's is 0.29% for early-type galaxies
with 23 unexplained outliers. The zero-count equivalents are about 170
and about 1,000. L1 also assumes a filled galaxy would be evident at
Earth with probability exactly 1.
- Proposed change: (a) Replace p_harvest with a prior over intercepted
fraction f combined with the limit curve in gaps section 7 (1.2e-6 at
full coverage, 3e-5 at 10%, 1e-3 at 1%), plus an explicit mass on
'settles but never harvests most starlight'. (b) Use binomial
likelihoods with the unresolved candidates as unknown background; set
N_cold to about 170 for discs. (c) Add p_evident to L1. (d) Report three
columns: Milky Way only, plus warm surveys, plus cold.
- Expected effect: Milky Way term only: alone 0.61, handful 0.114,
restraint 0.121, infeasible 0.108. With survey strength S = N*p_harvest:
restraint 0.108, 0.071, 0.035, 0.013, 0.006 at S = 1, 10, 100, 1e3, 1e4.
Even with no galaxy surveys, alone-in-Galaxy stays at 0.61 and rarity
plus universal barriers at 0.76.
- Tested: 'L2 only' is identical to base to three decimals. 'L1 only':
0.194 / 0.418 / 0.114 / 0.031 / 0.121 / 0.108 / 0.013. Adding p_evident
~ logU(0.001,1) changes nothing with L2 present and raises restraint to
0.20 without it. N_cold = 170: restraint 0.017. p_cold_only = 1 with
N_cold = 170: handful 0.100, restraint 0.054. Scripts e8.py, e9.py.
[major] 'Base case (agnostic mixture)': w_easy = 0.5,
w_pacing = 0.3, hard_step_decades = (2, 12), hard_m_weights;
integrate.py lines 40-51.
- Argument: A 50/50 two-point mixture is a strong informative prior,
not agnosticism. w_easy = 0.5 puts half the mass on one decade of f_l
(0.1 to 1) and the rest on up to 100 decades. The abiogenesis brief's
baseline (log-uniform to 1e-30) has prior P(fast) = 0.09, and 0.5
corresponds to its 'chemistry-optimist' floor of 1e-3. That choice is
worth roughly 10:1 in prior odds, more than all the data in the model.
The base case then gives P(easy | timing) = 0.81 against the brief's
posterior of 0.33 (0.13-0.82). The brief's 'central 0.35' is already a
posterior after the early-life datum, so adopting anything near it as a
prior and applying L_early double counts. The f_i prior also departs
from the evolution brief without stated reason: that brief gives steps
of U(0,3) dex with a 1/m! factor (sensitivity U(0,6)); the model uses up
to 12 dex and no 1/m!. The two departures partly cancel, which makes the
base case look more central than it is.
- Proposed change: Rename the base case 'modeller's judgement'. Add
named cases built from each brief's recipe. Publish the (w_easy,
w_pacing) grid. Document the origin of each mixture weight and confirm
none was derived from timing or the silence.
- Expected effect: Abiogenesis-brief baseline (w_easy 0.106, A = 30):
alone-universe 0.56, alone-galaxy 0.35, infeasible 0.05. Floor 1e-100:
0.86 / 0.11. Floor 1e-10: 0.18 / 0.61. Evolution-brief f_i recipe:
alone-universe 0.18, alone-galaxy 0.46, infeasible 0.20; its 6-dex
sensitivity: 0.22 / 0.63 / 0.08. Grid of w_easy (0.1-0.99) by w_pacing
(0.1-0.9): alone-in-Galaxy 0.23-0.91, infeasible 0.05-0.58.
- Tested: All runs in e10.py. Alone-in-Galaxy falls below 0.5 only
when w_pacing is 0.7 or more and w_easy is about 0.7 or more, at
q_feasible = 0.85.
[major] The SENSITIVITY dictionary (one parameter at a
time), integrate.py lines 265-289, and any statement of ranges drawn
from it.
- Argument: One-at-a-time variation understates the range by a large
factor. The table shows alone-universe 0.16-0.50 and restraint at most
0.12; the joint space gives 0.004-0.70 and up to 0.31. Which class is
modal changes across the space. The additive logit model fits well
(R-squared 0.85-0.92) for every class except alone-galaxy (0.63), so the
issue is compounding more than exotic interactions, but a reader shown
only the one-at-a-time table would badly underestimate it.
- Proposed change: Publish a global scan with quantile bands per class
and a ranked driver table. Standardised logit coefficients from my scan:
alone-universe on A +0.64, w_easy -0.64, D +0.57; infeasible on
q_feasible -0.70, w_pacing +0.49, w_easy +0.38; restraint on p_will
floor -1.43; hidden on p_stealth +1.32; late on q_doom +0.79, p_surv
floor -0.53.
- Expected effect: Ranges (minimum, 5%, median, 95%, maximum):
alone-universe 0.004 / 0.02 / 0.20 / 0.57 / 0.70. Alone-galaxy 0.09 /
0.18 / 0.35 / 0.55 / 0.75. Alone total 0.14 / 0.27 / 0.60 / 0.87 / 0.97.
Infeasible 0.007 / 0.04 / 0.22 / 0.56 / 0.74. Restraint up to 0.31, late
up to 0.30, hidden up to 0.21. Modal class: alone-galaxy in 50% of
draws, infeasible 27%, alone-universe 23%.
- Tested: 400 joint draws at n = 150k (minimum ESS 29,500) over w_easy
0.1-0.9, A 10-100, w_pacing 0.1-0.9, D 3-12, q_feasible 0.3-0.97, q_doom
and p_stealth 0.003-0.3, p_will floor 1e-8 to 1e-2, p_surv floor 1e-6 to
0.1, p_harvest floor 1e-4 to 0.3, p_cold_only 0-1, f_rare floor 1e-4 to
0.3; every range appears in the modeller's own camps or sensitivity
list. Corners: A = 10, D = 3 gives alone-universe 0.006; A = 100, D = 12
gives 0.56; optimist biology with q_feasible 0.5 gives infeasible 0.76;
optimist biology with q_feasible 0.97 and p_will floor 1e-8 gives
restraint 0.325 (modal). Scripts e4_scan.py, e12.py.
[major] The point masses q_feasible = 0.85, p_stealth =
0.03, q_doom = 0.03 (integrate.py lines 55-61) and the 'infeasible 0.15'
result.
- Argument: The largest non-alone class is a prior point mass times
2.3; its posterior is linear in the prior (0.034, 0.148, 0.35 at
q_infeasible 0.03, 0.15, 0.5). Two coherence failures follow. First, the
behavioural brief defines its weights as P(main reason for the silence |
at least 10 civilisations), which is already conditioned on the Fermi
observation; using them as priors and conditioning again double counts,
and gaps item 12 says they apply only after computing P(N >= 10).
Second, the model's implied shares given Nciv >= 10 and the data are
infeasible 0.75, hidden 0.09, doom 0.09, independent choice 0.08,
against the brief's 0.25 (0.08-0.50) for impractical, about 0.18 for zoo
and lurkers, 0.15 for short lifetimes and 0.20 for convergent choice.
The brief's 'impractical or uneconomic' also includes economic choice,
which is not universal, and the expansion brief states that
'interstellar travel is impossible' fails at 1e-4 to 1e-2 c.
- Proposed change: Treat the brief's shares as a posterior-predictive
target and solve for priors that reproduce them; publish that
calibration. Split infeasible into physically impossible (universal) and
uneconomic (a p_will-type parameter). Replace 'infeasible 0.15' with
'posterior is about 2.3 times whatever prior you hold'.
- Expected effect: With q_infeasible 0.08, p_stealth 0.06, q_doom 0.06
and p_will floor 1e-6, the conditional shares become 0.36 / 0.13 / 0.20
/ 0.31, close to the brief, and the table becomes alone-universe 0.25,
alone-galaxy 0.48, handful 0.08, late 0.04, restraint 0.05, infeasible
0.07, hidden 0.03. Infeasible halves and stops dominating the non-alone
options.
- Tested: Script e11.py: base conditional shares as quoted, plus four
alternative calibrations.
[moderate] anthropic = 'none' as the neutral baseline,
and 'alone in the observable universe 0.27'.
- Argument: 'None' is not neutral: it treats Earth as outside the
process the model describes. Within the alone-universe class the
posterior median expected number of civilisations in the observable
universe is 10^-8.3, with a quarter of the mass below 10^-19 and 5%
below 10^-50. The 0.27 therefore assumes, without saying so, a universe
at least 10^8 to 10^50 times larger than the observable patch, or else
our existence is a fluke of that size. Ordinary conditioning on 'at
least one civilisation arose' in a stated volume is neither SIA nor
'none' and gives a different answer.
- Proposed change: Replace the two-way none/SIA contrast with three
columns: (i) condition on existence within volume V, for V from the
observable universe to effectively infinite; (ii) SSA with stated
reference class; (iii) SIA. State the cosmological assumption behind the
0.27.
- Expected effect: Alone-universe is 0.011 conditioning on at least
one civilisation in the observable universe, 0.12 at 1e5 times that
volume, 0.17 at 1e10, 0.22 at 1e20, 0.25 at 1e40. The mass moves mainly
to alone-galaxy (0.65 in the first case) and infeasible (0.20).
- Tested: Reweighted the base sample by 1 - exp(-NcivG10^k)
for k = 0, 5, 10, 20, 40 (e10.py).
[moderate] Class definitions, integrate.py lines 198-207:
the threshold of 30, the 'handful_first' label, the late/restraint split
p_surv <= p_will, and the content of 'alone_galaxy'.
- Argument: (a) 'We are among the first' is false by construction:
phi_early is 0.5-0.9, the posterior mean within the class is 0.70, and
46% of the class is infeasible-settlement worlds that fall there only
because Nciv < 30. (b) The threshold of 30 is arbitrary and moves
mass. (c) 'Late filter' is 96% the q_doom point mass; the remainder has
median p_surv 0.04, which is not 'nearly all die'. The split compares
two log-uniform priors of different width. (d) 65% of the alone-galaxy
mass has at least one expander origin somewhere in the observable
universe and 43% has at least a thousand. Overall P(at least one
expander origin in the observable universe) = 0.39. The class labelled
'alone in the Galaxy' is largely the expanders-elsewhere scenario, with
no intergalactic term to test it.
- Proposed change: Classify by binding mechanism: which factor, if
removed, would push mu above 1. Assign infeasible worlds to infeasible
at any Nciv >= 1. Rename the handful class 'few, and none happened to
expand'. Report P(expanders exist elsewhere in the observable universe)
as its own line and add an intergalactic-reach likelihood (the gaps
brief gives 1e-6 to 4e-6 per galaxy at 0.1c).
- Expected effect: Moving the threshold from 3 to 1e4 takes handful
from 0.020 to 0.125, infeasible from 0.165 to 0.095, restraint from
0.023 to 0.001. The alone boundary itself is harmless.
- Tested: e8.py for thresholds and class contents. P(Nciv < 1) =
0.752 against the Poisson-realised E[exp(-Nciv)] = 0.739; moving the
alone threshold over 0.1-3 moves alone total by 0.70-0.77.
[moderate] Hypothetical future observations, integrate.py
lines 175-188.
- Argument: (a) The HWO likelihood uses p_bio = f_l * sqrt(f_persist)
* 0.5 and omits the model's own f_hz_habitable and f_rare_earth
(0.03-1). A null on 25 habitable-zone planets is read as evidence about
abiogenesis when the model itself says most such planets may not be
habitable. (b) Detections carry no false-positive or shared-origin
probability, so 'at least one biosignature' and 'second genesis' both
drive P(easy) to 0.98. The gaps brief's own correction 6 shows the
community splitting on real claims. (c) The M-dwarf and technosignature
rows show no movement because integrate.py has no channel for them (M
dwarfs enter only N_hp, which is never the bottleneck), while grabby.py
makes M-dwarf habitability worth factors of 1e4-1e10 under SSA.
Reporting 'no effect' is a statement about model structure, not about
the observation.
- Proposed change: Multiply p_bio by f_hz and f_rare (the drawn
values). Add a false-positive or contamination parameter in the 0.05-0.3
range. Either connect the M-dwarf observation to an earliness term or
drop those rows.
- Expected effect: HWO null: alone-universe 0.289 instead of 0.385,
P(easy) 0.64 instead of 0.43, so the update shrinks by about three
quarters. HWO detection with 10% or 30% false-positive probability:
P(easy) 0.85 or 0.76 instead of 0.98; alone-universe 0.19 or 0.23
instead of 0.13. Second genesis with 5% or 20% misattribution: P(easy)
0.93 or 0.84.
- Tested: e8.py. The second-genesis Bayes factor as coded is 25 for
easy against hard; the gaps brief gives about 60 with a range of 6-210,
so the number is prior-floor-dependent and should be shown as a
range.
- [minor] Timing likelihoods and the hard-step prior,
integrate.py lines 116-129 and 140.
- Argument: Carter's m*x^(m-1) holds only when every step is hard, but
only 36% of 'hard-step' samples have all steps below p = 0.01; the rest
contain steps that are not hard. f_i is a product of per-step
probabilities, which ignores that the steps share one window (a 1/m!
factor in the hard limit; the evolution brief's recipe includes it). If
hard_m_weights were informed by Earth's timing, L_late counts it
twice.
- Proposed change: Compute f_i and the arrival-time density from the
drawn rates (sequential exponential waits). Add 1/m! at least. State the
provenance of hard_m_weights.
- Expected effect: Small. Exact f_i: infeasible 0.148 to 0.133, alone
total +0.03. Exact L_late: under 0.002 on any class. Turning L_late off:
infeasible 0.196, P(no hard steps) 0.205 instead of 0.13.
- Tested: Built the exact density of a sum of exponentials on a
161-point grid for all 1M samples (e3_timing.py). Exact/Carter ratio is
1.000 in the all-hard limit and 0.97 on average among common-world
samples. The joint early-and-late approximation matches the exact
order-statistic formula to within 3% by hand for m = 1, 2, 5.
- [minor] grabby.py posterior_summary (lines 101-103 and
132-141), and consistency between the project's three
models.
- Argument: The docstring states a log-uniform prior on v, but the ten
grid speeds are equally weighted and unevenly spaced, giving implied
prior P(v > 0.3c) = 0.40 against 0.16 for a true log-uniform. The
'Bayes factor, expanders versus none' is a Lindley artefact: it tends to
1 as the lower bound on occupancy x falls and to 0 as the upper bound
rises. grabby.py uses SSA over all civilisations ever; integrate.py uses
none or SIA. sdo.py defines alone-universe as N < 1e-10 on currently
detectable civilisations; integrate.py uses about 1e-11 on civilisations
ever arising. The 0.39 and 0.27 are not the same quantity.
- Proposed change: Weight the v grid by log spacing. Report the
earliness likelihood ratio at fixed (x, v) rather than a prior-averaged
Bayes factor. State each module's anthropic rule and volume definition
in one table.
- Expected effect: Sun-like hosts only: P(v > 0.3c) 0.54 to 0.27 (n
= 3) and 0.56 to 0.28 (n = 6). M-dwarf cases 0.85-0.91 to 0.69-0.80. The
Sun-only Bayes factor ranges 0.24-0.71 as the x range changes from
(1e-3, 31.6) to (1e-12, 31.6), against a reported 0.57-0.59.
- Tested: Reweighted the rows in grabby_results.json with trapezoid
weights in log v and alternative x ranges.
Code errors
models/integrate.py lines 179-182 (hwo_none,
hwo_some): p_bio = f_l * f_persist**0.5 * 0.5 omits f_hz_habitable and
f_rare_earth, which the same model applies to every habitable-zone rocky
planet. There is no false-positive term.
- Fix: Keep the drawn f_hz and f_rare arrays and set p_bio = f_l *
f_hz * f_rare * f_persist**0.5 * 0.5. For hwo_some use 1 - none*(1 -
p_fp).
- Impact: HWO null: alone-universe 0.385 as coded against 0.289
corrected; P(easy) 0.43 against 0.64.
models/integrate.py line 65 (N_surveyed_cold =
2.0e3), used at lines 160-163: Zero detections in 2,000 implies a 0.15%
limit. The tf_kiii study's limit is 1.8% (20 unresolved of N_eff 1,593)
and it disclaims the 0.19% floor; fp_kiii gives 0.29% for early types
with 23 unexplained outliers.
- Fix: Use about 170 for discs (about 1,000 for early types only), or
a binomial likelihood with the unresolved candidates as unknown
background.
- Impact: Small in the base case (restraint 0.010 to 0.017). With
p_cold_only = 1: handful 0.079 to 0.100, restraint 0.023 to 0.054.
models/integrate.py lines 198-207 and CLASS_LABELS
lines 84-92: 'handful_first' is labelled 'we are among the first' while
phi_early of 0.5-0.9 says most arose long before us, and 46% of its mass
is infeasible worlds with Nciv < 30. 'late_filter' is assigned
whenever p_surv <= p_will; 96% of it is the doom point mass.
- Fix: Assign infeasible at any Nciv >= 1. Define late filter by
p_surv below a stated value. Rename the handful class.
- Impact: Threshold 3 to 1e4 moves handful 0.020-0.125 and infeasible
0.165-0.095.
models/integrate.py line 162 (L1): L1 assumes
detection probability exactly 1 for a filled galaxy and is numerically
redundant given L2: results are identical to three decimals without
it.
- Fix: Add p_evident and report L1-only and L1-plus-L2 results
separately.
- Impact: L1 only: alone 0.61, restraint 0.12, handful 0.11.
models/integrate.py lines 119-123: f_i is the
product of independent per-step probabilities; sequential steps in one
window need 1/m! in the hard limit, as the evolution brief's recipe
specifies. Step scale goes to 12 dex against the brief's 3 (sensitivity
6).
- Fix: Add -log10(m!) or compute P(all steps within the window) from
the drawn rates.
- Impact: Mean log10 f_i shift of -0.28, -0.73, -1.31, -1.98 for m = 2
to 5; infeasible 0.148 to 0.133.
models/integrate.py lines 190-192 and SENSITIVITY
'anthropic: SIA': SIA by reweighting a prior sample: ESS of 1,100-2,500,
with the top 100 samples carrying 20% of the weight and the posterior
sitting at the prior's 99.9th percentile of Nciv.
- Fix: Sample the high-Nciv region directly, or integrate analytically
over the N-immune hypotheses.
- Impact: Seed-to-seed scatter of about 0.015 on infeasible and 0.01
on hidden; the structural dependence on prior point masses is the larger
problem.
models/grabby.py lines 101-103 and 132-141: The
docstring says log-uniform prior on v, but the ten speeds are equally
weighted on an uneven grid (implied prior P(v > 0.3c) = 0.40 against
0.16). bayes_factor_expanders_vs_none depends on the arbitrary x
range.
- Fix: Weight rows by trapezoid weights in log v. Drop the averaged
Bayes factor or report it against the x range.
- Impact: Sun-only P(v > 0.3c) 0.54 to 0.27; Bayes factor 0.24-0.71
by x range.
models/sdo.py line 20 (LOG10_GALAXIES = 10.0):
Inconsistent with integrate.py's log10_G of 10.7-11.3 and with gaps item
6 (about 1e11). It also applies to currently detectable civilisations,
not civilisations ever arising.
- Fix: Use 11 and label the two alone-in-universe quantities
differently.
- Impact: The 0.39 from sdo.py and the 0.27 from integrate.py are not
comparable as presented.
Claims that survive
- The disjunction in headline (3): rarity or a common-cause barrier.
Independent-choice classes (handful plus restraint) never exceed 0.37 in
the 400-draw joint scan and are under 0.25 in 95% of it. With a
30-decade hierarchical prior on both p_will and p_surv, rarity plus
universal barriers still hold about 0.63-0.78.
- Independence between factors is not the weak point. Gaussian-copula
coupling of easy abiogenesis with no-hard-steps at rho = -0.5, 0.5 and
0.9, one shared difficulty scale for abiogenesis and steps, perfectly
correlated step quantiles, and independent per-step scales together move
alone-in-Galaxy only within 0.72-0.78 and infeasible within 0.13-0.19.
No sign flips. The second-genesis update is more sensitive: infeasible
0.18-0.31 afterwards.
- The Nciv < 1 boundary creates no artefact: P(Nciv < 1) = 0.752
against a Poisson-realised probability of no other civilisation of
0.739.
- The Carter timing approximations are numerically adequate. The exact
sequential-step likelihood changes no class by more than 0.002, and the
product of the early and late terms matches the exact joint within
3%.
- Importance sampling is adequate for all non-anthropic runs: ESS
about 320,000 of 1M and Monte Carlo standard deviation at most 0.001.
This does not extend to the SIA run.
- Headline (4): Earth's timing data move things modestly. Their
largest class-level effect is a factor of 2 penalty on alone-universe
(0.39 to 0.27).
- Headline (5): the anthropic rule is the largest single lever. If
anything this is understated, since existence-conditioning alone moves
alone-universe between 0.01 and 0.27.
- Astrophysical factors, M-dwarf habitability, the persistence filter
and the technosignature search record have negligible influence on any
class, as the sensitivity table shows.
- Alone-in-Galaxy above 0.5 is moderately robust: it holds in 67% of
the joint scan and survives removing the galaxy surveys entirely (0.61).
It fails when both easy-abiogenesis and no-hard-steps priors are about
0.7 or higher, or steps span 3 decades or fewer together with an
optimistic abiogenesis prior.
- The direction of the update is robust: the observations multiply the
odds of common-plus-independent-choice worlds by 0.02-0.3 and of
N-immune hypotheses by about 2.3, given a p_will floor of 1e-4 or higher
and the survey term.
Missing explanations
- Settlement without conspicuous harvesting: steady-state or partial
settlement (the expansion brief's Carroll-Nellenback 'Aurora' regime)
with p_evident < 1 at Earth and no 75-85% starlight interception. At
present it is reachable only through the 3% stealth point mass.
- Expanders elsewhere in the observable universe that have not reached
us. This already holds 0.39 of the base posterior, hidden inside the two
'alone' classes, with no intergalactic-reach likelihood to test it.
- Synchronised late emergence (the astrobiological phase-transition
idea in the anthropics brief, Vukotic & Cirkovic). phi_early is
bounded below at 0.5, which excludes it by construction.
- Convergent restraint as a common cause: a world-level distribution
of p_will with between-world variance, rather than an iid floor. The
hierarchical p_will run is this hypothesis and gets 0.06-0.29.
- Economic rather than physical impracticality of expansion, which is
choice-like and subject to the universality test. It is currently merged
into 'infeasible for anyone'.
- A catch-all for model misspecification. By the gain rule, any
unlisted N-immune hypothesis with prior p receives about 2.3p; a
seven-way partition that sums to 1 overstates every listed class.
- Heterogeneity of the rate across and within galaxies (metallicity,
age, galactic habitable zone). The survey term applies the Milky Way's
Nciv to every surveyed galaxy.
Presentation advice
- Replace the single posterior vector with three exhibits. (a) A
likelihood table, which is the data's whole contribution: infeasible
1.00, hidden 0.99, alone-galaxy 0.73, alone-universe 0.50, handful 0.32,
late filter 0.08, restraint 0.017, with the statement that no camp is
favoured over another by more than 3.4. (b) Quantile bands from a joint
scan (5%-95%): alone-universe 0.02-0.57, alone-galaxy 0.18-0.55,
infeasible 0.04-0.56, late 0.003-0.15, restraint 0.001-0.16, hidden
0.001-0.06. (c) A 'what you must believe' table:
- Alone in the Galaxy above 50%: prior P(Nciv < 1) of about 0.3 or
more. This fails only if P(easy abiogenesis) and P(no hard steps) are
both about 0.7 or higher.
- Alone in the observable universe above 50%: biological priors
spanning about 100 decades with P(easy) of 0.2 or less (A = 100, D = 12
gives 0.56; the abiogenesis brief's baseline gives 0.56), and a universe
at least about 1e20 times the observable volume.
- Infeasible above 50%: prior of about 0.5 or more with optimistic
biology (0.76), or SIA with infeasibility the largest N-immune
prior.
- Restraint above 25%: p_will floor at or below 1e-8 with no
galaxy-survey term, at or below 1e-12 with it, or a hierarchical prior
reaching 30 decades or more.
- Late filter above 25%: P(universal doom) of 0.2 or more with
optimistic biology.
- Hidden above 10%: P(stealth) of 0.2 or more.
- State the gain rule in the text: common-cause explanations get about
2.3 times prior; independent-choice ones 0.02-0.3 times.
- Say plainly that the galaxy-survey null, not the Milky Way argument,
carries the inference in the model, and show Milky-Way-only results
beside it (alone 0.61, restraint 0.12).
- Rename the base case 'modeller's judgement' and add rows built from
each brief's own recipe.
- Give three anthropic columns (existence within a stated volume, SSA,
SIA) and label the SIA split as prior odds, not a finding.
- Claims safe to make: the rarity-or-common-cause disjunction; fewer
than about 1e-2 to 1e-5 visible expanders per galaxy, conditional on the
harvest assumption; timing matters modestly; anthropics is the largest
lever. Claims to withdraw or reword: any two-figure class probability;
the ranking among alone-universe, alone-galaxy and infeasible;
'restraint is crushed'; the SIA split; 'we are among the first'.
Critic: an expansion sceptic
Verdict. The ordering (rarity first, expansion
barriers second) is defensible from this lens, but the headline numbers
and two of the five logic steps are not. Three things I measured carry
the conclusion and none is disclosed: (a) the Milky Way "Fact A" term is
inert (switching L1 off leaves every class unchanged to three decimals),
so everything rests on galaxy surveys plus the assumption that at least
3% of settled galaxies get 75-85% shrouded; (b) "restraint is crushed"
is an artefact of a 1e-4 floor on a shared expansion rate (restraint
goes 0.01 -> 0.10 -> 0.22 -> 0.32 as the floor goes to 1e-8,
1e-12, 1e-20); (c) the infeasible posterior is exactly its prior divided
by the evidence (0.063/0.426 = 0.148, mean likelihood in class 0.99), so
0.15 / 0.02 / 0.02 is the hand-entered 0.15 / 0.03 / 0.03 passed
through. Under the priors I would defend, "alone in the Galaxy" falls
from 0.75 to about 0.50-0.58 and expansion barriers of all kinds (hard,
soft, unnoticed) rise from 0.16 to about 0.35. The single most important
change is to replace the binary q_feasible and the floors on p_will and
p_harvest with one explicit, continuous treatment of whether a
settlement wave is self-sustaining, persistent and evident, split by
mode (biological settlers versus machines), and to report an ablation
table showing which likelihood term does the work.
Critic’s own estimate of each answer: alone in the
universe 0.17, alone in the Galaxy 0.36, handful first 0.07, late filter
0.02, restraint 0.08, infeasible 0.22, hidden 0.01, other 0.07. What
“other” covers: Settled or probed but unnoticed, not deliberately
hidden: sparse machine presence, settlers that skip Sun-like stars or
living planets, or a past wave that has gone. 'Infeasible' here means
self-propagating, persistent, evident galaxy-filling is not achieved by
anyone (hard or soft barrier), not that interstellar travel is
impossible.
Objections
[major] Headline claim (3) and integrate.py lines 58-59,
153-156: p_will=(1e-4,1), p_surv=(1e-2,1), and the statement that
independent restraint is 'crushed by the numbers'
- Argument: The model does not implement independent per-civilisation
choice. p_will and p_surv are drawn once per sample and shared by every
civilisation in that universe; they are common rates with hard floors.
With phi>=0.5 the floor on the per-civilisation expansion probability
is 5e-7, and the survey term then forces Nciv below roughly 1 at prior
medians. So 'crushed' means 'we forbade the shared propensity to be
below 1e-4'. That floor has to hold the whole chain a sceptic disputes:
someone launches, the first daughters become self-sustaining, each
generation relaunches through ~36 doublings, the wave persists for Gyr,
and it stays evident. There is zero empirical handle on that product,
exactly as for abiogenesis, yet abiogenesis gets 5-100 decades of prior
range and each hard step 2-12, while expansion gets 4, survival 2 and
harvesting 1.5. Rarity wins partly because it was given far more
log-space to live in. The label 'restraint by choice' is also wrong for
this mass: most of it is 'feasible in principle, almost never sustained'
(Stross-style economics, Landis-style stalling), which is a common
cause, not a coincidence of cultures.
- Proposed change: Give the late-stage product the same ignorance
structure as the early factors: log10 p_will ~ U(-W, 0) with W
log-uniform over about 2-30 decades (mirroring hard_step_decades), or at
minimum quote the floor at 1e-4, 1e-8 and 1e-12 side by side in the
headline table. Rename the class 'expansion possible but almost never
sustained'. Drop the sentence that restraint is crushed by the numbers;
replace with the conditional: it is excluded only if at least 1 in
10,000 capable civilisations becomes a permanent, evident,
galaxy-filling expander.
- Expected effect: Restraint/soft-barrier class rises from 0.01 to
0.10-0.32; alone-in-Galaxy falls from 0.75 to 0.50-0.67; infeasible
falls slightly (0.15 to 0.09-0.12) because it has to share.
- Tested: Scratch copy of integrate.py, n=400k. p_will floor 1e-6:
restraint 0.039, alone total 0.72. Floor 1e-8: 0.098, 0.67 (matches the
project's own sensitivity row). Floor 1e-12: 0.220, 0.57. Floor 1e-20:
0.317, 0.50. Symmetric-ignorance form W~LU(2,30): restraint 0.166, alone
0.62; W~LU(4,40): 0.230, 0.57.
[major] Headline logic (1)-(2) and integrate.py lines 62,
162-163: L1 = exp(-mu), L2 = exp(-N_surv * p_settled * p_harvest),
p_harvest=(0.03,1)
- Argument: Two unexamined 'evidentness' assumptions do all the work.
First, L1 assumes a settled Galaxy is evident in the inner Solar System
today with probability exactly 1. Second, L2 assumes every universe has
at least a 3% chance per settled galaxy of 75-85% starlight
interception, with no option that nobody builds galaxy-wide shrouds. I
checked which one matters: with L1 switched off entirely the posterior
is identical to three decimals. The Hart argument that the report leads
with is decorative; the operative premise is 'settlement implies
Kardashev-III harvesting at least 3% of the time', which is the most
extravagant extrapolation in the chain (every daughter of every
daughter, 1e11 times, builds a full swarm). The posterior demands mu
below 1e-3 (P(mu>1e-3 | feasible, not stealth) = 0.011 against a
prior 0.47), a thousand times stricter than Fact A. The sceptic's point
is that feasibility and evidentness are anticorrelated across modes:
biological settlers who claim habitable planets would be evident here
but are the mode least likely to be feasible; machine probes or sparse
outposts are the mode most likely to be feasible but would not harvest
starlight and are not excluded locally (the project's own behavioral
brief cites Lazio 2026 that artefact limits are 'extremely crude',
Haqq-Misra & Fauchez 2022 on settlers skipping Sun-like stars, and
Carroll-Nellenback 2019 on steady states with Earth unvisited). The
model multiplies the favourable marginal of each (feasible 0.85, evident
1.0). The only home for 'present but not evident' is p_stealth, labelled
'deliberately hidden', which conflates a zoo with mundane
non-detection.
- Proposed change: (i) Add p_here = P(a settled Galaxy has an evident
presence in the inner Solar System now); L1 = 1 - p_settled * p_here.
(ii) Add a universal Bernoulli q_noharvest (nobody shrouds most of a
galaxy) alongside the continuous p_harvest. (iii) Split feasibility by
mode: q_bio (planet-claiming settlers, p_here = 1) and q_mach (machine
expansion, p_here log-uniform 1e-3 to 0.3). (iv) Add an eighth class,
'settled or probed but unnoticed (not deliberate)'. (v) Publish the
L1/L2 ablation.
- Expected effect: A new class of 0.07-0.21 appears; alone-in-Galaxy
falls to 0.50-0.66; P(another civilisation in the Galaxy now) rises from
0.07 to 0.14-0.26. p_here alone changes nothing; it only bites together
with q_noharvest, which is itself the finding.
- Tested: L1 off: 0.264/0.488/0.054/0.019/0.010/0.147/0.018, identical
to base. L2 off, L1 on: alone 0.61, handful 0.113, restraint 0.115. Both
off: alone 0.42, unnoticed 0.30. p_here LU(0.03,1) alone: no change.
With q_noharvest 0.2 / 0.5 / 0.8: unnoticed 0.074 / 0.154 / 0.209, alone
0.66 / 0.565 / 0.50. Mode split (q_bio 0.3, q_mach 0.85) + q_noharvest
0.5: unnoticed 0.147, alone 0.59.
[major] integrate.py line 55: q_feasible=0.85 tagged
[STUDY flyby]; class 'infeasible'
- Argument: 0.85 is not derived from anything and the data never touch
it. The infeasible posterior equals prior class mass over evidence
(0.0631/0.4255 = 0.148); mean likelihood inside the class is 0.992. The
[STUDY flyby] tag is misleading: that study has no report, and its
simulator (settle_sim.py) has no failure probability, no settlement
mortality, no settleable fraction and unlimited launches, so the
reproduction number is infinite by construction. It measures kinematics,
not feasibility. Its fast cases also assume 30 km/s flights of 0.5-5 pc,
i.e. missions of 16,000-163,000 years, against a demonstrated hardware
life of about 50 years. What 'feasible' must mean is that a settlement
produces more than one launch-capable daughter in its lifetime (R0 >
1), for dozens of generations. I built R0 from sub-factors using the
flyby study's own encounter rates (0.0718 systems/pc3, 11.1 passages/Myr
within 1 pc, 12% of flux below 30 km/s): P(R0>1) is 0.09 with
sceptical priors for biological settlers, 0.05 for Voyager-speed-only,
0.47 for middling priors and 0.98 for Hart-Tipler machines. So 0.85 is
the machine-optimist corner, and that is the mode with the weakest
observability. The class label also contradicts the project's expansion
brief, which says 'interstellar travel is impossible' fails at 1e-4 to
1e-2 c; what can be defended is 'self-propagating, persistent, evident
galaxy-filling is not achieved by anyone'.
- Proposed change: Remove the study tag. Either derive the prior from
an explicit R0 decomposition (range, encounter rate, settleable
fraction, mission success, relaunch probability, settlement lifetime) or
state it as a judgement with range 0.3-0.9. The prior I would defend for
'evident, self-sustaining, galaxy-filling settlement is achievable': 0.5
(0.3-0.7) as a single number, or q_bio = 0.3 and q_mach = 0.85 if split
by mode. Relabel the class.
- Expected effect: q_feasible 0.7 / 0.5 / 0.3: infeasible 0.25 / 0.35
/ 0.42, alone-in-Galaxy 0.65 / 0.56 / 0.49. Under SIA with 0.5:
infeasible 0.96-0.97.
- Tested: Runs above on the unmodified model. R0 Monte Carlo (2e6
draws) in t5.py: sceptic-biological median log10 R0 = -3.7 (sd 2.8),
P(R0>1) = 0.09; middle -0.24, 0.47; Hart-Tipler machines +5.2, 0.98.
The priors in that decomposition are my judgement, not literature
values.
[major] integrate.py lines 55-61: the three
universal-barrier Bernoullis q_feasible (complement 0.15), q_doom=0.03,
p_stealth=0.03, and the SIA headline 0.82 / 0.14 / 0.04
- Argument: The split among universal barriers is input, not output.
Late filter posterior 0.0189, of which 0.0183 (97%) is the doom
Bernoulli; infeasible is prior/Z; hidden likewise. The base
0.15/0.02/0.02 and the SIA 0.82/0.14/0.04 are both the hand-entered
5:1:1 after normalisation. Presenting the SIA split as a result is
misleading. Are the relative priors defensible? From this lens: an
infeasibility or cost barrier needs no coordination and is shared by
construction, so it deserves the most; a universal doom with survival
1e-12 to 1e-5 has no mechanism (the longevity brief finds
human-calibrated risk supplies 0.1-1 dex and that a civilisation-ending
AI would itself expand), so 0.03 is at the generous end; a universal
convention of invisibility requires prior expansion plus a single
permanent hegemon, which Forgan 2011/2017 (as cited in the behavioral
brief) says usually fails, so 0.03 for the deliberate version is also
generous. Missing entirely is a fourth universal term: expansion
feasible but convergently not pursued (no trade, no return,
sustainability limits, inward-turning post-biological optimisation). The
behavioral brief gives sustainability 0.12 and inward turn 0.08
conditional on N>=10, and 'logistic' only 0.25, whereas the model
conditional on Nciv>=30 puts 76% on infeasible and 5% on restraint.
The model overrides its own evidence brief without saying so.
- Proposed change: Priors I would defend: evident galaxy-filling
settlement achievable 0.5; q_doom 0.02; deliberate stealth 0.02; add
q_converge about 0.1-0.2 (or fold it into the continuous soft-barrier
term). State in the report that universal-barrier shares are prior
ratios times P(civilisations common), and present the SIA split as
conditional on those ratios.
- Expected effect: With 0.5 / 0.02 / 0.02: alone 0.19 + 0.37 = 0.56,
handful 0.07, late 0.005, infeasible 0.35, hidden 0.005. Same under SIA:
infeasible 0.97, hidden 0.02, late 0.005. Adding q_converge 0.1 or 0.2
to the base model instead: barrier class 0.21 or 0.26, alone 0.69 or
0.64.
- Tested: All four runs done on the unmodified model (n=400k; SIA
n=2e6, ESS about 3,000 so SIA figures are good to roughly +/-0.02).
Class composition from a patched copy that exports the Bernoulli
flags.
[moderate] The binary treatment of feasibility
(integrate.py line 150, p_exp = 0 or p_surv*p_will)
- Argument: Between 'impossible for anyone' and 'at least 1 in 10,000
fill the Galaxy' there is nothing. The physically meaningful variable is
continuous: the reproduction number of settlements and the reach of a
wave that stalls. Sub-critical waves give bounded bubbles of perhaps
10-1e4 systems (Landis 1998; Galera et al. 2019 as cited in the
expansion brief); the chance the Sun lies in one is Nciv * n_bubble /
1e11, negligible for most of the prior, so 'common but short-range'
explains the silence without any impossibility claim and predicts
something different from hard infeasibility (local technosignatures,
probes). In fairness I tested whether a continuous version helps my camp
automatically. It does not: with a universe-level log10 R0 ~ N(0.5, 1.5)
and 0.5 dex scatter between civilisations, the barrier classes shrink
and alone rises, because scatter lets the best civilisation be
super-critical. The sceptic needs heavy lower tails (R0 below about 0.01
for everyone), which is what a product of five or six uncertain factors
gives (sd 2.5-3.2 dex in my decomposition) but must be argued, not
assumed.
- Proposed change: Replace q_feasible by a sampled log10 R0
(universe-level, built from sub-factors) plus civilisation-level
scatter; p_super = P(R_civ > 1) x branching-survival; add bubble
reach for R0 < 1. Report P(R0 > 1) and the result for narrow and
wide tails.
- Expected effect: Depends on the tail: N(0.5,1.5): alone 0.80, soft
barrier 0.06, hard infeasible 0.03 (residual 3%). N(0,2): alone 0.73,
soft barrier 0.14. With the sceptic-biological decomposition
(P(R0<1e-4) = 0.46) the barrier mass would exceed the current 0.15 by
a factor of two to three.
- Tested: run2.py options R0_prior=(0.5,1.5), (1,1.5), (0,2) with
q_feasible raised to 0.97: results as quoted. The third case was not run
through the integrator; it is inferred from the tail fractions.
[moderate] Implicit permanence in L1 and L2: a galaxy
filled once is evident for ever (integrate.py lines
156-163)
- Argument: The same billions of years that give time to fill give
time to vanish. mu counts every expander that ever had enough head
start, with no term for whether its presence, or its shroud, still
exists when we look. The expansion brief itself says Fact A properly
reads 'no persistent settlement in 4.5 Gyr and no visit in the last
roughly 1-10 Myr' (Schmidt & Frank 2018), and Kipping & Lewis
2024 frame occupation as a birth-death balance. The standard reply, that
1e11 independent settlements cannot all die, assumes independence that
the model denies everywhere else (it treats will, survival and
harvesting as shared). After the frontier closes there is no selection
for relaunching, so recolonisation of dead systems is not guaranteed.
Replicator fidelity matters here, over 1e3-1e6 generations, not during
the 36-doubling fill.
- Proposed change: Sample a persistence time T_p for the wave
(log-uniform 1e6-1e10 yr) and multiply mu and p_settled by min(1, (T_p +
10 Myr)/T_head), with T_head the head start (1-5 Gyr).
- Expected effect: Modest alone, larger in combination: handful 0.054
-> 0.078, restraint 0.010 -> 0.036, alone 0.75 -> 0.72. With
T_p down to 1e4 yr: 0.085, 0.046, 0.71.
- Tested: run2.py option T_persist=(1e6,1e10) and (1e4,1e10),
n=400k.
[moderate] integrate.py line 60: phi_early=(0.5,0.9)
tagged [STUDY headstart], and headline phrase 'Galaxy fill times under 1
Gyr'
- Argument: phi is fixed independent of how the wave travels, and the
cited study has no report yet. The project's own flyby tables show the
under-1-Gyr claim is conditional. For ships that can only match stars
passing below 30 km/s, the growth-limited time to 1e11 systems is 83 Myr
at a 0.5 pc hop, 515 Myr at 0.2 pc, 2.1 Gyr at 0.1 pc, 8.2 Gyr at 0.05
pc and 52 Gyr at 0.02 pc; a 100 Myr relaunch delay pushes even a 0.5 pc
hop to 1.0 Gyr. The study's own threshold is 0.144 pc (29,600 au). A 0.1
pc hop at 30 km/s is already a 3,300-year flight. So Voyager-speed
diffusion fills the Galaxy in time only for flights of several thousand
years or more with perfect success and immortal settlements. From
memory, Carroll-Nellenback et al. 2019 assume a probe range of about 10
light-years, i.e. roughly 100,000-year flights at 30 km/s; I did not
re-verify that.
- Proposed change: Sample hop range and relaunch delay, interpolate
T_fill from the flyby kinetic table (rendezvous-limited case) plus about
300 Myr crossing, and set phi = P(head start > T_fill) from the
head-start distribution. Report the hop range below which the time
argument fails.
- Expected effect: Hop prior LU(0.02,5) pc: 23% of worlds have phi
< 0.05; restraint 0.01 -> 0.09, late 0.02 -> 0.04, alone 0.75
-> 0.66. Hop floor 0.05 pc: restraint 0.016, otherwise unchanged. Hop
floor 0.2 pc: no change at all.
- Tested: run2.py option phi_from_fill with the dv<30 km/s table
transcribed from studies/flyby/data/report_tables.md; head starts taken
as N(1.8, 1.9) Gyr, which is my assumption.
[moderate] Classification and camps: integrate.py lines
198-210 and CAMPS 'Expansion sceptic'
- Argument: (a) 'A handful; we are among the first' is 47% worlds
where settlement is infeasible (0.025 of 0.054) and only 38% genuine
firstborn worlds (feasible, no doom, no stealth: 0.020). The label tells
the reader something the samples do not say. (b) The late/restraint
split is p_surv <= p_will, a comparison of two unrelated continuous
draws; it has no physical meaning and makes the 0.02 versus 0.01 split
arbitrary. (c) The 'Expansion sceptic' camp changes q_feasible to 0.3
and also sets w_easy=0.8 and w_pacing=0.7, so its 0.69 for infeasible is
mostly the biology optimism; with q_feasible=0.3 alone the answer is
0.42. Every late-stage camp is confounded the same way. (d) 'Infeasible'
is applied only when Nciv >= 30, so the reader cannot recover
P(settlement infeasible), which is 0.30 in the base case.
- Proposed change: Classify by the binding cause, not by Nciv
thresholds: for Nciv >= 1, assign to infeasible/doom/stealth whenever
that flag is set, and reserve 'among the first' for worlds where none
is. Merge late and restraint into one 'soft late barrier' class or split
by which factor is below the 3/N threshold. Run each camp with only its
own lever changed, and separately with the biology change.
- Expected effect: Handful drops to about 0.02-0.03; infeasible rises
to about 0.17-0.18; no change to the alone classes. The sceptic camp row
should read infeasible 0.42, alone 0.49.
- Tested: Patched copy exporting feasible/doom/stealth flags (t4.py);
q_feasible=0.3 alone run in t1.py.
[minor] integrate.py lines 63-65: N_surveyed_cold=2.0e3,
p_cold_only=0.2, and the 85% versus 'most' threshold
- Argument: exp(-2000 p) treats the temperature-independent searches
as zero candidates in 2,000 galaxies. The Tully-Fisher study reports 20
unresolved candidates in N_eff 1,593 and a 95% limit of 1.8% at f >=
0.75, equivalent to a zero-count sample of about 170; its 0.19% floor is
explicitly 'NOT claimed as a result'. The fundamental-plane study gives
0.29% (about 1,000 equivalent) but for early-type galaxies, with f above
about 0.93 unconstrained. The Milky Way analogue is a disc. Also
p_harvest is defined as 'most of its starlight intercepted' while the
warm limit applies at 85% reprocessing; Griffith et al. found 50
galaxies above 50%.
- Proposed change: Use about 170 for discs (or a Poisson term with the
20 candidates and an unknown background), keep about 1,000 only for
early types, and define p_harvest at the survey threshold.
- Expected effect: Small in the base case (restraint 0.010 ->
0.018, handful 0.054 -> 0.059); larger if harvesters are cold: with
p_cold_only=1, handful 0.099, restraint 0.054, alone 0.69.
- Tested: N_surveyed_cold=170 with p_cold_only 0.2 and 1.0, and with
p_harvest floor 1e-4 (handful 0.108, restraint 0.089).
[minor] The infeasible class has no observable
consequence in the model (L3, lines 166-170, and the 'future'
block)
- Argument: This cuts against my own camp, which is why it should be
fixed: an explanation that nothing can move is not being tested. Mean L3
inside the infeasible class is 0.999, and the hypothetical
'technosignatures excluded for the nearest million stars' moves it from
0.147 to 0.146. Yet the class makes strong claims: a median of about
50,000 civilisations ever in the Galaxy, and under SIA a median of about
500 extant now (5-95%: 0.04 to 5e6), all confined to their home systems
for up to a Gyr. Stay-at-home civilisations with that much time are
exactly the ones for which single-star engineering limits and local
probe searches are informative, and the mode-split version predicts
artefacts or probes without settlers.
- Proposed change: Add likelihood terms for home-system megastructures
(the star-level waste-heat limits in the seti brief) with an explicit
p_dyson, and add future observations that discriminate hard
infeasibility from soft barriers and from unnoticed machine presence: a
Solar System artefact survey, a nearby-star technosignature census, cold
waste-heat limits.
- Expected effect: Little change to the base case (the existing
star-level limits only bound extant swarm-builders at roughly a few
million per Galaxy); under SIA it trims the top of the Nciv
distribution. Main gain is that the report can say what would falsify
the class.
- Tested: N_now and Nciv quantiles within the class and mean L3
computed from a patched copy (t7.py). The megastructure term itself was
not implemented.
Code errors
models/integrate.py line 65, N_surveyed_cold=2.0e3:
Treats the temperature-independent searches as zero candidates among
2,000 galaxies. tf_kiii reports 20 unresolved candidates and a 95% limit
of 1.8% (equivalent zero-count N about 170); fp_kiii gives 0.29% (about
1,000) for early types only.
- Fix: Use about 170 for disc galaxies, or a Poisson likelihood with
the observed candidates and an unknown natural background.
- Impact: Small in base (restraint +0.008); up to +0.04-0.08 on
restraint and handful when harvesters are assumed cold.
models/integrate.py lines 201-207, classification
masks: handful = rest & (Nciv < 30) ignores the
feasible/doom/stealth flags, so 47% of 'we are among the first' is
infeasible-world mass; late versus restraint is decided by p_surv <=
p_will, an arbitrary comparison.
- Fix: Assign by binding cause before applying the Nciv threshold;
merge or re-define the late/restraint split.
- Impact: Moves about 0.03 from handful to infeasible; makes late and
restraint shares interpretable.
models/integrate.py lines 55 and 60, comments [STUDY
flyby] and [STUDY headstart]: Both parameters cite studies with no
report on disk. The flyby simulator has no failure, mortality or
settleable-fraction parameter, so it cannot inform P(feasible).
- Fix: Remove the tags or replace them with the actual basis; mark
both as judgement.
- Impact: Provenance only, but q_feasible is the second-largest
late-stage lever.
models/integrate.py CAMPS, 'Expansion sceptic' (and
the late-filter and zoo camps): Each late-stage camp also sets
w_easy=0.8 and w_pacing=0.7, so the camp result mixes two levers.
q_feasible=0.3 alone gives infeasible 0.42, not 0.69.
- Fix: Report each camp with only its own lever, plus a separate
crossed table with biology.
- Impact: Camp table overstates how far the sceptic's prior alone
moves the answer.
models/integrate.py lines 62-64, p_harvest comment
versus N_surveyed_warm: p_harvest is defined as 'most of its starlight
intercepted' but the 1e5-galaxy limit applies at 85% warm
reprocessing.
- Fix: Define p_harvest at the survey threshold, or use the
covering-fraction curve listed in gaps_and_corrections.md section
7.
- Impact: Makes the 0.03 floor even harder to defend; direction is
toward weaker L2.
studies/flyby/code/settle_sim.py arrive = t + tau +
sep / v_ship, with ok = (dmin2 < d2) & (a < dv_max**2): Travel
time ignores the target's motion, and in the 'any speed' runs (dv_max =
inf) a 30 km/s ship settles stars passing at 200+ km/s. That is why
those runs give front speeds of 186-352 km/s, faster than the ships.
- Fix: Quote only the rendezvous-limited runs (fronts 57-103 km/s,
crossing 220-400 Myr) or require relative speed below ship speed and
solve the intercept.
- Impact: The 99 Myr median crossing time in results.json is not
physical; the 268 Myr figure is the usable one.
Claims that survive
- Rarity stays the largest family. Under every sceptic package I built
with the base biology priors, alone-in-Galaxy remains 0.50-0.62; it only
loses first place when the biology priors are also switched to the
optimist camp (then 0.09).
- Time is not the binding constraint for capable expanders. For hops
of 0.2 pc or more the flyby tables give fill times under about 1 Gyr and
my fill-time-dependent phi changes nothing. The sceptic has to attack
reproduction, persistence and evidentness, not the clock.
- The arithmetic behind 3/N is correct: if the shared expansion
propensity really is at least 1e-4, then more than about 1e4
civilisations cannot coexist with the null. What fails is the floor, not
the logic.
- Deliberate zoo and universal doom stay small (0.005-0.03 each) under
every prior I would defend; nothing but their own priors raises
them.
- Making feasibility continuous does not automatically favour the
sceptic: with log10 R0 ~ N(0.5,1.5) and 0.5 dex scatter between
civilisations, alone rises to 0.80 and the barrier classes shrink to
0.09. 'It only takes one' has real force unless the lower tail is
heavy.
- Replicator error catastrophe does not stop the fill phase: 36
doublings is a few dozen generations per lineage. It bears only on Gyr
persistence.
- The anthropic assumption is the largest single lever: no late-stage
change I made moves alone below 0.42, whereas SIA takes it to 0.00.
Under SIA, expansion barriers or unnoticed presence dominate under every
prior tested; only the split among them is prior-driven.
- M-dwarf habitability and the persistence filter are irrelevant to
this lens's conclusions (changes under 0.03).
Missing explanations
- Bounded-range bubbles: every civilisation settles a neighbourhood of
10 to 1e4 systems and the wave stalls (sub-critical reproduction,
Landis-type percolation). Predicts local clusters, not a settled Galaxy;
no class holds it.
- Machine or probe-only expansion that neither claims living planets
nor harvests starlight (the behavioral brief cites Ivliev 2026 'quiet
expansion' and Haqq-Misra & Kopparapu 2012). Feasible, widespread,
and not excluded by current Solar System searches; not deliberate
hiding.
- Settled Galaxy that skips us: settlers prefer K and M dwarfs
(Haqq-Misra & Fauchez 2022), or living planets are biologically
unusable (the 'Aurora effect' in Carroll-Nellenback et al. 2019), or a
partial steady state leaves the Sun unvisited.
- Came and went: a past wave that filled the Galaxy and died out or
turned inward, leaving nothing the geological record would keep (Schmidt
& Frank 2018).
- Convergent economics: expansion is physically feasible but never
pays (no trade, no return, growth limits), so it is not pursued
anywhere. A common cause, distinct from both physical infeasibility and
cultural coincidence (Haqq-Misra & Baum 2009; Stross's 'High
Frontier, Redux', the latter cited from memory).
- Inward turn of post-biological or AI civilisations to compact,
efficiency-driven forms (Cirkovic 2008; Smart 2012 per the briefs). The
model's only universal behavioural term is deliberate stealth.
- Replicator suppression: capable civilisations decline to build, or
actively police, self-replicating probes (Sagan & Newman 1983, as
cited in the expansion brief from memory).
- Wave still in progress: at short hops the fill time is several Gyr,
so the first wave has not arrived. The model reduces this to a fixed
phi.
Presentation advice
Lead the barrier discussion with an ablation table, not the Hart
argument: base; Milky Way term off (no change); galaxy-survey term off
(alone 0.61); both off (alone 0.42). That tells the reader honestly that
the conclusion rests on the absence of shrouded galaxies plus an
assumption about how often settlement leads to shrouding. Say in plain
words that the shares of the universal-barrier classes are the input
priors divided by the evidence, and show them as a prior-to-posterior
pair (0.063 -> 0.148 for infeasible, likelihood 0.99) so nobody reads
0.15 versus 0.02 as a finding; do the same for the SIA split. Replace
'crushed by the numbers' with the conditional statement and a one-line
table of the will floor (1e-4, 1e-8, 1e-12 -> 0.01, 0.10, 0.22).
Rename three classes: 'infeasible for anyone' to 'galaxy-filling
settlement is not sustained by anyone'; 'restraint by choice' to
'possible but almost never sustained'; and split 'hidden' into
deliberate and merely unnoticed. Report P(settlement infeasible) = 0.30
directly, since the class definition hides it behind an Nciv >= 30
cut. Give the reader one two-dimensional sensitivity figure: prior on
the barrier (0.1 to 0.7) against the will floor (1e-4 to 1e-20), shaded
by P(alone in Galaxy); from my runs it spans roughly 0.75 down to 0.45.
Flag every parameter tagged with a study that has no report yet.
Critic:
a believer in expanding aliens (Robin Hanson’s “grabby aliens”)
Verdict. Headline steps (1) and (3) survive and get
stronger on a cosmological footing, but the class numbers do not.
integrate.py only counts expanders born in the Milky Way; using
grabby.py's own kernel, an expander born anywhere within about 2e5
galaxies (0.1c) to 3e7 galaxies (0.5c) would already be here, so 15-44%
of the "alone in the Galaxy, not the universe" mass (0.49) sits in
worlds that contradict our being unreached. The one world the
expansionist school actually predicts (expanders en route, at least 1%
of cosmic volume taken) has no class and is hidden inside that 0.49 at
about 0.09 on the project's priors (0.15-0.4 under conditions below).
Step (4) is wrong as stated: the strongest timing datum, our cosmic date
and host star, is computed in grabby.py and never enters integrate.py;
when it does, P(M-dwarf planets habitable) falls from 0.25 to 0.02, and
a positive M-dwarf result would cut "alone in the universe" from 0.27 to
about 0.03 instead of leaving it unchanged. The printed Bayes factor of
25,000 is not evidence for grabby aliens, and the split among infeasible
/ doom / hidden, including the whole SIA headline, reproduces three
hand-set prior atoms. The single most important change is to merge the
two scripts: give every sample a cosmic occupancy x and a birth-date
likelihood, run two internally consistent anthropic branches, and
redefine the classes by occupancy. All test scripts are in the critic’s
working folder (ext.py reproduces the base case to four decimals).
Critic’s own estimate of each answer: alone in the
universe 0.33, alone in the Galaxy 0.41, handful first 0.04, late filter
0.06, restraint 0.01, infeasible 0.07, hidden 0.04, other 0.04. What
“other” covers: Outside the taxonomy (simulation, unknown physics, model
misspecification). Note that about 0.15 of my alone_galaxy 0.41 is the
grabby universe: expanders exist elsewhere, hold at least 1% of cosmic
volume and are en route. It deserves its own class.
Objections
[major] integrate.py lines 154-163 (mu, L1, L2) and the
alone_galaxy class at 0.49: each galaxy is a closed system,
intergalactic expansion is absent, and the 'Fast-expander origin rate'
row in gaps_and_corrections.md section 7 was never
implemented
- Argument: Olson, Hanson et al. 2021, Kipping 2026 and Armstrong
& Sandberg 2013 (the last from memory; the brief also marks it
unverified) all treat expansion as not stopping at a galaxy's edge. L1 =
exp(-mu) counts Milky-Way-born expanders only. With grabby.py's own
occupancy kernel, the number of Milky-Way equivalents whose expanders
would have reached us by now is 1.3e5-3.0e5 at 0.1c and 1.6e7-3.7e7 at
0.5c, which reproduces Kipping's half-fill rate of 1e-6 to 4e-6 per
galaxy at 0.1c. So the real ceiling on expander origins per galaxy is
about 1e-6 x (0.1c/v)^3, not 1 (L1) or 3e-5/p_harvest (L2). The class is
therefore partly incoherent, and bimodal exactly as Kipping & Lewis
argue: most of its mass is either an essentially empty universe or one
already overrun.
- Proposed change: Per sample, draw q_ig = P(intergalactic feasible |
interstellar feasible), about 0.8, and v (uniform 0.1-0.99c, or
log-uniform 0.01-0.99c). Compute x = Nciv x p_exp x N_reach(v), with
N_reach = 2.88e5 galaxies/Gly^3 x v^3 x V_eff and V_eff = K0 / integral
of g to date from grabby.occupancy_kernel (450-1040 Gly^3 for Sun-like
hosts). Multiply the weight by the non-arrival term: exp(-x) in the
model's own convention, or like_time(x)/like_time(0) under origin-date
SSA. Let 'hidden' be satisfied by x >= 1, so stealth arrivals can
come from another galaxy.
- Expected effect: alone_universe 0.27 -> 0.32-0.34; alone_galaxy
0.49 -> 0.38-0.43, of which 0.07-0.10 is a universe already at least
1% occupied; handful_first 0.054 -> 0.04; restraint 0.010 ->
0.002; hidden 0.018 -> 0.035-0.047. 'Filter behind us' (0.75)
overstates: the past filter alone suffices in only 0.46 (0.1c) or 0.37
(0.5c) of the posterior.
- Tested: t1.py, base posterior. Share of alone_galaxy mass with x
>= 1 if intergalactic expansion works: 0.15 at 0.1c, 0.37 at 0.5c,
0.44 at 0.9c; share with 0.01 <= x < 1: 0.21, 0.17, 0.15.
Reweighted with q_ig = 0.8: v = 0.1c gives
0.291/0.458/0.038/0.016/0.002/0.162/0.033; v uniform 0.1-0.99c gives
0.321/0.407/0.040/0.011/0.003/0.179/0.040; q_ig = 1 gives
0.338/0.382/0.036/0.009/0.000/0.188/0.047. P(Nciv x N_reach < 1) =
0.63, 0.46, 0.37, 0.35 at 0.01c, 0.1c, 0.5c, 0.9c, against P(Nciv <
1) = 0.75.
[major] integrate.py has no cosmic birth-date / host-star
likelihood (lines 127-144 are within-planet timing only; line 185-186
'mdwarf_alive' just multiplies by M_alive); headline step (4); the
M-dwarf rows of the future-observations table
- Argument: Hanson's earliness argument is a likelihood on our date.
In the model's posterior, 82% of alone_universe and 69% of alone_galaxy
mass has at least 3 hard steps (counting hard abiogenesis). In those
worlds any long-lived host makes us early: grabby.py itself gives a
no-expander rank of 8e-4 (n=3) to 8e-7 (n=6) if M dwarfs are habitable.
integrate.py never uses this. Its posterior P(M alive) is 0.244 against
a prior of 0.25, and 'M-dwarf planets shown habitable' moves no class by
more than 1.2 points. The model takes the Carter bonus for hard steps
(L_late up to 2.05) without paying the cosmic-date cost of the same
assumption.
- Proposed change: Multiply each sample's weight by the density of
(birth at T0, Sun-like host) among all civilisation origins, from
grabby.birth_law and occupancy_kernel, as a function of the sample's own
n (hard steps incl. hard abiogenesis), host population and x. Tabulate
once per (n, host scenario) on an x grid and interpolate. Drop or reduce
L_late to avoid double counting.
- Expected effect: With the project's priors the classes barely move
(0.28/0.50/0.05/0.02/0.01/0.13/0.02 with birth date alone) but P(M
alive) drops 0.25 -> 0.02. If M-dwarf habitability is established:
alone_universe 0.27 -> about 0.03, alone_galaxy 0.48 -> 0.16,
infeasible 0.16 -> 0.67, hidden 0.02 -> 0.11, P(no hard steps)
0.13 -> 0.80, expanders-en-route 0.15 (0.34-0.42 with a lower
no-hard-steps prior or expansionist fate priors). M-dwarf habitability
goes from irrelevant to the most decisive pending observation.
- Tested: tables.py, t2.py. Birth-date density per Gyr, no expanders:
M dead 0.044-0.077 (n = 1-6); M alive at 100 Gyr with weight 1: 3.3e-3,
3.6e-4, 3.3e-5, 2.9e-6, 2.4e-7, 2.0e-8 for n = 1-6; best case with
expanders at x = 0.4-0.85: 0.008-0.014. Combined run with p_M_class = 1:
0.029/0.159/0.008/0.028/0.002/0.666/0.110, ESS 45k. Caveat: I used the
nominal n and an unbroken power law; with saturation (see the
Bayes-factor objection) the penalty is 100-1000x rather than 1e4-1e6,
same direction. Pacing worlds are slightly over-credited (no host
penalty applied).
[major] grabby.py scenario list (line 159-167: every
Sun-like host capped at T_sun = 8 Gyr; M dwarfs either dead or 100-1000
Gyr) and integrate.py p_M_class as a binary
- Argument: The 'we are not early' baseline (rank 0.64-0.69) depends
on giving all FGK hosts an 8 Gyr window. K dwarfs are about half or more
of the FGK class and have main-sequence lifetimes of 17-40 Gyr (t
proportional to M^-2.5); early M dwarfs above Kipping's 0.34 solar-mass
cut live about 100 Gyr. The JWST atmosphere-loss evidence concerns late
M dwarfs. So 'M dwarfs are dead' does not remove earliness for hard-step
worlds; Hanson et al.'s own condition is fewer than 3 steps and
lifetimes under 50 Gyr.
- Proposed change: Replace the binary with a prior on a critical host
mass (Kipping 2025b: above 0.34 solar masses at 2 sigma) and a
habitable-window law T(M), capped by a planet-lifetime prior (5-20 Gyr,
Hanson's L_max). Use the same host population in integrate.py's planet
counts and in the birth-date likelihood.
- Expected effect: With a K component (weight 1.5, window 15-20 Gyr)
and M dwarfs dead: alone (both classes) 0.75 -> 0.55-0.60; infeasible
0.15 -> 0.28-0.33; P(no hard steps) 0.13 -> 0.28-0.34;
expanders-en-route 0.09 -> 0.14-0.18 on project priors and 0.25-0.33
on expansionist fate priors. A lever comparable in size to the anthropic
one.
- Tested: t3.py, t5.py. No-expander rank: n=3 0.69 -> 0.25 (15
Gyr), 0.11 (20 Gyr), 0.034 (30 Gyr); n=6 0.64 -> 0.078, 0.014,
0.0012. G-host birth-date density at n=3: 0.064 -> 0.0026 (20 Gyr).
Combined base with K at 20 Gyr:
0.169/0.380/0.040/0.022/0.003/0.325/0.061. The K-dwarf window and weight
are my assumptions, not a literature value.
[major] The three anthropic conventions in play:
integrate.py 'none' (line 71, 172), integrate.py 'SIA' (line 190-192),
grabby.py like_time (line 111); headline step (5) and the SIA result
0.82 / 0.14 / 0.04
- Argument: 'None' treats Earth as a pre-selected site: non-settlement
counts as ordinary evidence but our existence carries no weight. That is
neither SSA nor SIA. grabby.py is SSA over civilisation origin dates.
The SIA branch weights by Nciv. The earliness Bayes factor exists only
under origin-date SSA: under SIA the normalising integral drops out and
the date evidence is at most exp(-x). Separately, the SIA output is a
readout of the prior atoms: SIA sends all mass to whichever hypotheses
decouple civilisation count from expansion, and the split among them is
the ratio of q_infeasible : p_stealth : q_doom (0.15 : 0.03 : 0.03), as
Olson & Ord's 1/q reweighting predicts.
- Proposed change: Run two complete branches. SSA (origin dates):
weight = birth-date density given total occupancy (local plus cosmic) x
P(none visible); L1 is replaced by that density. SIA: weight = Nciv x
g(T0) x S(T0) x P(none visible), with no normalisation. In both, replace
the atoms with a continuous prior on p_exp reaching 1e-20 or lower.
Under SIA report P(some universal barrier or future filter), not the
split.
- Expected effect: SIA headline becomes 'a universal barrier or future
filter is near-certain; which one is not identified'. Under SSA, L1
softens: the density ratio is 0.78 at x = 0.7 (exp(-x) = 0.50) and 0.116
at x = 3 (0.050), so handful_first and restraint rise by up to about 2x,
from small bases.
- Tested: t4.py, 3M samples. SIA base 0.822 infeasible / 0.136 hidden
/ 0.042 late (ESS 2,191). q_feasible = 0.97: 0.437 / 0.431 / 0.132.
q_feasible = 0.97 and q_doom = 0.15: 0.297 / 0.267 / 0.436. All atoms at
0.001-0.003: 0.126 / 0.686 / 0.188 (ESS 87). Doom floor 1e-30: late
0.042 -> 0.110.
[major] grabby.py posterior_summary line 141,
'bayes_factor_expanders_vs_none' (0.59 Sun-like; 35.6 at n=3; 25,212 at
n=6; 2.5e10 for 1000 Gyr) and any conclusion drawn from it
- Argument: Five problems. (a) It is conditional on a branch that the
same likelihood disfavours: on date plus host, 'M dwarfs dead' beats 'M
dwarfs alive plus expanders averaged over the script's prior box' by
24:1 to 218:1. (b) It is box-dependent: the Sun-like 0.59 is essentially
the surviving fraction of a 7.5-decade prior on x. (c) The n=6 headline
contradicts integrate.py: posterior P(6 hard steps in total) = 0.04; 23%
of nominal 'hard' steps have p > 0.1 per window; of a mean 3.04
nominal steps only 1.80 remain hard over 100 Gyr. (d) The 1000 Gyr
figure is the unbroken tau^(n-1) law extrapolated two decades past where
it can hold. (e) like_time ignores that we orbit a Sun-like star, a
factor 1 + w_M = 6 across scenarios.
- Proposed change: Stop printing a Bayes factor. Export the
like_time(x) table to integrate.py and report P(expanders hold at least
1% of the universe) per camp. Replace the pure power law with P(all
steps done by tau) = product of (1 - exp(-r_j tau)), with r_j drawn from
integrate.py's step prior. Condition on host class.
- Expected effect: Replaces 'BF 25,000 for expanders' with an
unconditional probability: about 0.09 on project priors, 0.15 on
expansionist fate priors, 0.15-0.42 if M dwarfs are shown habitable,
0.14-0.33 with long-lived K dwarfs. At the model's own effective n of
2-3, the within-branch factor is tens, not tens of thousands.
- Tested: From grabby_results.json rows: Sun-like BF 0.589 as coded,
0.770 if the box extends to 1e-12, 0.725 for x <= 1 only, 0.05 at v =
0.003c to 0.82 at 0.99c. n=6 scenario: maximum over grid 4.5e5, 14,089
with the extended box, 994 at 0.1c, 0.17 at 0.01c. Cross-scenario mean
likelihoods: M dead 0.053-0.064 vs M alive plus expanders
0.0003-0.0022.
[major] The three universal-barrier atoms: q_feasible =
0.85 (line 55), q_doom = 0.03 (line 56), p_stealth = 0.03 (line 61); the
reported infeasible 0.15 against late filter 0.02
- Argument: Posterior atom masses are 0.298, 0.052 and 0.059: each
about twice its prior. The data do not discriminate between them, so
'infeasible 0.15 vs late filter 0.02' is the modeller's 5:1 prior
restated. The 0.15 contradicts the project's own expansion brief
('impossible fails at 1e-4 to 1e-2 c'; a 300 Myr crossing at 30 km/s).
Hanson's bound is conditional (transition chance under 1e-4 for even one
other quiet civilisation ever in the Galaxy), and the cosmic sweep
sharpens it to p_exp below about 5e-6/Nciv at 0.1c. That is below the
model's non-doom floor of 1e-6, so worlds with neighbours can exist only
through an atom. 'Doom' is also too narrow: any universal non-expansion
attractor (extinction, permanent stagnation, lock-in) does the same
work.
- Proposed change: Set q_feasible to 0.95-0.97, defining infeasible as
'no self-sustaining settlement at any speed above 30 km/s for any
substrate'. Widen doom to a universal non-expansion attractor with prior
0.10-0.15 and survival down to 1e-20. Better, replace the atoms and
floors with one continuous heavy-tailed prior on p_exp. Report
P(civilisations common and some universal barrier), about 0.19, as the
robust number and label the split as prior.
- Expected effect: infeasible 0.148 -> 0.030; late_filter 0.018
-> 0.109-0.116; other classes move by 0.01 or less.
- Tested: t4.py. q_feasible 0.97 with q_doom 0.15:
0.275/0.502/0.055/0.109/0.011/0.030/0.019; with doom_surv 1e-20 to 1e-3,
late = 0.116. The project's own sensitivity rows show the same (q_doom
0.2 gives late 0.108; q_feasible 0.97 gives infeasible 0.034).
[moderate] p_surv = (1e-2, 1) and p_will = (1e-4, 1)
(lines 58-59) applied to every civilisation including us; no output for
humanity's own prospects
- Argument: The fate parameters are the same for us as for anyone. The
model therefore asserts, by prior alone, that a civilisation at our
stage has a mean 1.9% (median 4e-4) chance of ever expanding and a mean
21% chance of surviving to the capability. Evidence never touches this
in the 'alone' classes. That is a soft late filter of 2-3 orders of
magnitude sitting under a headline that says late filter 0.02. The line
58 comment says 'human-calibrated: 0.3-0.97' while the prior is 0.01-1.
Hanson's question ('are we almost past it?') should be an explicit
output: if expansion is feasible and we are alone, we are the grabby
ones.
- Proposed change: Output P(humanity becomes a sustained expander),
P(we are the first expanders in our reach volume) and 'orders of
magnitude of filter still ahead'. Either calibrate the human-stage
priors to the one observed case (p_surv 0.3-0.97; p_will 0.03-1, since
expansionist factions already exist) or keep the wide prior and state
its implication in the summary. The self-consistency test for 'alone,
first, and about to expand' is the birth-date likelihood above.
- Expected effect: With human-calibrated fate priors: alone_universe
0.27 -> 0.31, alone_galaxy 0.49 -> 0.44, handful 0.054 ->
0.037, restraint 0.010 -> 0.000, infeasible 0.15 -> 0.17, hidden
0.018 -> 0.029. Full expansionist camp in the combined model:
0.48/0.40/0.03/0.03/0.00/0.04/0.02, with expanders-en-route 0.15.
- Tested: t4.py. Prior mean p_exp 0.0192, median 3.8e-4, P(p_exp >
0.1) = 0.051; posterior mean 0.0121. Mean p_surv 0.195 (prior 0.209).
Within the alone classes: mean p_exp 0.0151, P(feasible) = 0.83. P(alone
in Galaxy and we fill it) = 0.011.
[moderate] Headline step (2) and L2 (line 163); grabby.py
mu_det (lines 116-119), which assumes certain detection inside z_det;
the 'P(v > 0.3c)' outputs
- Argument: This is the Olson/Hanson selection effect. Given that we
exist (x of order 1 or less), fast expanders are rarely visible. From
the script's own rows at z_det = 0.1, the expected number of
visible-but-not-arrived domains per unit x is 20 (0.1c), 4.4 (0.2c), 1.9
(0.3c), 0.62 (0.5c), 0.24 (0.7c), 0.06 (0.9c). So the survey null is
worth at most about 3x at c/3 and 1.5x at c/2 beyond our own existence.
L2 also has the wrong geometry: settled galaxies come in domains of
1e3-1e8, not independently with locally born settlers. And the two
scripts disagree on detection: integrate.py lets p_harvest fall to 0.03
with 20% cold-only; grabby.py assumes 1.
- Proposed change: Use one visibility module in both scripts: P(no
detection) = exp(-p_vis x mu_det(v, z_det)), with p_vis from the
covering-fraction curve in gaps section 7 and a prior on z_det of
0.03-0.3. Report the prior on the v grid next to every speed posterior.
Restate step (2): 'for v below about 0.1c the surveys bound the origin
rate; above about c/3 the bound is our own existence, under 1e-6 x
(0.1c/v)^3 per galaxy'.
- Expected effect: Class probabilities move by 0.01 or less. The speed
claim weakens: P(v > 0.3c) 0.91 -> 0.65 (n=6) and 0.85 -> 0.61
(n=3); P(v <= 0.1c) 0.004 -> 0.15. In the Sun-like scenario 0.54
against a grid prior of 0.40 is almost no update.
- Tested: Rows of grabby_results.json. P(see none | x = 0.7, z_det =
0.1) = 7e-6 (0.1c), 0.076 (0.2c), 0.33 (0.3c), 0.69 (0.5c), 0.87 (0.7c),
0.97 (0.9c). Re-ran the posterior with integrate.py's p_harvest and
cold-only prior as the detection probability. Adding a visibility term
to the cosmic run changed alone_galaxy from 0.407 to 0.404.
[moderate] The seven-class taxonomy (lines 75-92,
196-207) and 'p_filter_behind_us'
- Argument: (a) 'Handful; we are among the first' is 46%
settlement-infeasible, 8% doom and 9% stealth; only 38% is anything like
being first, and the model has no timing variable that could make us
first. (b) 'Alone in the observable universe' uses 1e11 galaxies, but
the physically relevant volumes are the reach volume (1e5-1e8 galaxies,
depending on v) and the affectable universe (16.5 Gly comoving, under 5%
of observable galaxies per Ord 2021). (c) The expansion brief lists
'expanders are fast and we are simply not yet inside one' as a surviving
explanation, yet it has no class. (d) 'Filter behind us' is defined as
Nciv < 1, which is not sufficient once neighbours' expanders can
reach us.
- Proposed change: Classes by cosmic occupancy: A, no other
civilisation ever within our reach volume; B, others exist but no
expander within reach (state why: low p_exp, intergalactic infeasible);
C, expanders exist and hold at least 1% of the volume, not yet here,
with a meeting-time distribution; D, universal barrier (infeasible /
non-expansion attractor); E, here and hidden. Rename handful_first by
its actual contents.
- Expected effect: Presentation only. On the project's priors A is
about 0.37-0.46, C about 0.09, D about 0.19, E about 0.04, B the
remainder (about 0.25-0.3).
- Tested: t4.py and the reach-volume script: handful_first composition
0.46 / 0.08 / 0.09 / 0.38. Old-taxonomy location of class C: 0.088 in
alone_galaxy, 0.004 in late_filter, 0.001 in handful_first.
[minor] L_late = m x^(m-1) and L_early (lines 129, 140)
applied to every nominal hard step; hard_step_decades prior (line
51)
- Argument: Carter's formulas require each step's success probability
per window to be far below 1. Under the step prior (log10 p uniform on
[-D, 0], D log-uniform 2-12), 23% of 'hard' steps have p > 0.1 and 7%
have p > 0.5. Those steps still earn the late-arrival bonus (1.6-2.05
for m = 2-5) and count toward m in the earliness calculation.
- Proposed change: Count only steps with p below about 0.1 in the
exponents of L_late, L_early and the birth-date law, or use the exact
sequential-exponential waiting-time density.
- Expected effect: Lowers effective m by about 0.5, shifting a few
points from the alone classes to pacing and universal-barrier classes.
Dropping L_late entirely in the combined run: alone 0.76 -> 0.70,
infeasible 0.15 -> 0.21, P(no hard steps) 0.12 -> 0.19.
- Tested: t3.py: prior P(p > 0.1) = 0.233, P(p > 0.5) = 0.070;
posterior mean nominal m in the hard-steps camp 3.04, with p < 0.1:
2.52, still hard over 100 Gyr: 1.80.
Code errors
models/integrate.py whole file; lines 185-188
(mdwarf_alive / mdwarf_dead): No output of grabby.py is consumed. The
M-dwarf future observations only multiply the weight by M_alive, which
changes planet counts by a factor of about 2 and has no timing
consequence.
- Fix: Add the birth-date / host-star likelihood per sample from
grabby.birth_law and occupancy_kernel, tabulated by (n, host scenario)
on an x grid.
- Impact: Future-observation table reports no change for M-dwarf
habitability; with the term, alone_universe falls from 0.27 to about
0.03.
models/integrate.py lines 154-163: L1 and L2 count
only expanders born in the same galaxy; no intergalactic speed,
feasibility or reach volume. The 'Fast-expander origin rate' change
requested in gaps_and_corrections.md section 7 is not implemented.
- Fix: Add q_ig, v, x = Nciv * p_exp * N_reach(v) and a non-arrival /
visibility likelihood.
- Impact: alone_universe +0.05 to +0.07, alone_galaxy -0.06 to
-0.10.
models/integrate.py line 58: Comment says p_surv is
'human-calibrated: 0.3-0.97' but the prior is log-uniform 0.01-1 (mean
0.21, median 0.1).
- Fix: Make the prior match the comment or correct the comment, and
report the implied P(humanity expands).
- Impact: With (0.3, 0.97) and p_will (0.03, 1): restraint 0.010 ->
0.000, alone_universe 0.27 -> 0.31.
models/integrate.py lines 201-204 and CLASS_LABELS:
'hidden' requires Nciv >= 1 and local mu >= 1, so stealth
expanders arriving from another galaxy are classed as 'alone'.
'handful_first' is labelled 'we are among the first' but is 46%
infeasible, 8% doom, 9% stealth.
- Fix: hidden = stealth & (mu >= 1 or x >= 1); rename or
split handful_first.
- Impact: hidden 0.018 -> 0.035-0.047.
models/integrate.py lines 129 and 140: Carter
likelihoods use the nominal step count m although 23% of nominal hard
steps have p > 0.1 per window.
- Fix: Use only steps with p << 1, or the exact waiting-time
density.
- Impact: A few points from alone to pacing / barrier classes.
models/integrate.py lines 190-192, 335-336: SIA run
has ESS of about 2,200-2,500 from 3-4M samples and no Monte Carlo s.d.
is reported for it (mc_sd is base case only).
- Fix: Report ESS and seed-to-seed s.d. for the SIA row; use
importance sampling tilted toward high Nciv.
- Impact: About +/-0.01 on the SIA classes at base; ESS 87 for
small-atom variants.
models/grabby.py posterior_summary, lines 136-141:
The 'Bayes factor' is a mean over a fixed 7.5-decade box in x and an
irregular ten-value v grid treated as a uniform prior (prior P(v >
0.3) = 0.40, never printed).
- Fix: Remove the BF or print it with the box and the grid prior;
report per-v and per-x-range values.
- Impact: Sun-like BF ranges 0.05-0.82 across v and 0.59-0.77 across
boxes.
models/grabby.py analyse, line 111 (like_time):
Birth-date density counts all hosts; it does not condition on our
Sun-like host, so cross-scenario comparisons are off by a factor 1 + w_M
(6 in the headline scenario).
- Fix: Use g_sun(T0) S(T0) / integral of (g_sun + w_M g_M) S.
- Impact: Makes M-alive scenarios 2-6x less likely relative to
M-dead.
models/grabby.py lines 116-119 (mu_det): Detection
is certain for any domain intersecting z < z_det, inconsistent with
integrate.py's p_harvest (0.03-1) and p_cold_only (0.2).
- Fix: Multiply mu_det by a detection probability drawn from the same
prior.
- Impact: P(v > 0.3c) 0.91 -> 0.65.
models/grabby.py birth_law lines 65-66; scenario
list lines 159-167: Unbroken tau^(n-1) law out to T_M with no
saturation; every Sun-like host capped at 8 Gyr with no K-dwarf
component.
- Fix: Saturating step law with rates from integrate.py's prior;
host-mass-dependent windows.
- Impact: Headline BF falls from about 2.5e4 toward tens; Sun-like
rank falls from 0.69 to 0.11 at n = 3 with a 20 Gyr K component.
Claims that survive
- Headline step (1): one persistent expander in the Galaxy would be
here. With grabby.py's own birth law, 86-91% of civilisations to date
arose more than 1 Gyr before now, so phi_early = 0.5-0.9 is if anything
conservative. The cosmological extension strengthens it: one expander
within about 2e5 (0.1c) to 3e7 (0.5c) galaxies would be here.
- Headline step (3): explanations that rely on independent restraint
are crushed. Adding the cosmic term takes restraint from 0.010 to 0.002,
and to 0.000 with human-calibrated will-to-expand.
- The cosmology in grabby.py is numerically right: t0 = 13.797 Gyr;
eta0 = 47.10 Gly (46.23 with radiation, immaterial because only
differences after 0.05 Gyr enter); future conformal reach 16.56 Gly,
matching Ord's 16.5; the occupancy integral is the exact Poisson (KJMA)
form; the visibility-shell condition r <= delta + v(eta_det - eta')
is the correct minimum over emission time; half-fill at 0.1c needs 2e-6
to 5e-6 origins per galaxy, matching Kipping 2026.
- integrate.py reproduces its published base case to four decimals
from an independent re-implementation (ESS 320,900).
- A majority for 'alone' survives every variant I ran in which
low-mass stars do not host observers: both alone classes sum to
0.70-0.88. It does not survive established M-dwarf habitability (about
0.19) and is dented by long-lived K dwarfs (0.55-0.60).
- Fast expanders are hard to see: above 0.5c the survey null adds less
than a factor 1.5 beyond our own existence. grabby.py's qualitative
conclusion holds; only its confidence does not.
- The anthropic assumption is the largest single lever (step 5),
though only the direction under SIA is a finding; the split among
barriers is prior.
Missing explanations
- Grabby universe: expanders exist elsewhere, hold 1-60% of cosmic
volume, and have not reached us yet. Listed as a surviving explanation
in evidence/expansion.md; no class in the model.
- Interstellar settlement feasible but intergalactic settlement not:
the only way 'alone in the Galaxy, not the universe' stays coherent at
high p_exp.
- A universal non-expansion attractor that is not extinction
(permanent stagnation, lock-in, inward turn). Currently it can only be
expressed as doom or as independent restraint.
- Stealth or zoo expanders that arrived from another galaxy; 'hidden'
currently needs a Milky Way origin.
- Synchronised or phase-transition timing (Annis; Cirkovic &
Vukotic): nobody is much older than us. This is what 'we are among the
first' would really require; the model has no correlated-timing
variable.
- Settled but sparse steady state (Carroll-Nellenback et al.): the
Galaxy is settled yet Earth is unvisited without deliberate hiding. L1
assumes settled means evident.
Presentation advice
Lead with one axis: log10 of expander origins per galaxy, with the
four thresholds marked: 1 (our Galaxy would be full), 3e-5 (galaxy
surveys, slow visible expanders only), 1e-6 to 1e-9 (we would already be
overrun, for 0.1c to near c), 1e-11 (none in the observable universe).
Show where the posterior mass sits and relabel classes by cosmic
occupancy, with 'expanders en route' as its own class and a meeting-time
distribution. Report three numbers the current summary lacks:
P(expanders hold at least 1% of the universe now), P(humanity becomes an
expander) as the model implies it, and P(M-dwarf planets habitable)
before and after the birth-date datum. Say plainly which results are
prior restated: the infeasible / doom / hidden split, and the entire SIA
split. Do not print the 25,000 Bayes factor; if grabby.py numbers
appear, give the prior on speed next to every speed posterior. Present
the anthropic branches as two complete, internally consistent models
(origin-date SSA and SIA), and drop 'none' or label it as a
pre-selected-site convention.
Critic: the code audit
Verdict. The code does what its model description
says: my independent re-implementation reproduces the base case to
within 0.0006 on every class, eight camp and sensitivity rows to within
0.002, and the SIA row within Monte Carlo noise. The headline is still
weaker than presented, because the silence enters through one line only.
Setting the Milky Way term L1 or the SETI term L3 to 1 in the original
code changes no class by more than 0.0001, so the extragalactic survey
term L2 and three hand-set numbers (1e5 galaxies, 2e3 galaxies, harvest
probability >= 0.03) carry the whole update. The 'infeasible' and
'hidden' posteriors are their priors divided by the evidence (mean
likelihood 0.996 and 0.987), and the SIA row is a ratio of three prior
switches. The single most important change is to state this openly and
replace line 163 with the covering-fraction limit curve and the studies'
own corrected limits. Second is to fix the two future-observation rows
(M dwarfs, HWO), which have real likelihood omissions. grabby.py is
numerically converged, and sdo.py matches the published 52%, median 0.32
and mean 2.7e7, but gives 39.4% against the published 38%.
Critic’s own estimate of each answer: alone in the
universe 0.2, alone in the Galaxy 0.44, handful first 0.06, late filter
0.03, restraint 0.04, infeasible 0.16, hidden 0.03, other 0.04. What
“other” covers: Settled or visited but not evident without a universal
convention (sparse or percolating settlement), and expanders beyond our
horizon. Neither is representable in the current class set.
Objections
[major] integrate.py lines 161-163, 170, 172 (L1, L2, L3)
and headline logic steps (1)-(2)
- Argument: The docstring says four observations weight each sample.
Two of them are numerically inert. L1 (Milky Way not settled) can never
bind, because L2 constrains the same mu at least 60 times harder (N_surv
x p_harvest is at least 2e3 x 0.03) and typically 3e3 to 1e5 times
harder. L3 (SETI) has L3 < 0.9 in only 0.05% of prior samples. So
headline steps (1) and (2) are not two independent supports. The whole
'crushing' of restraint rests on line 163 and on N_surveyed_warm = 1e5,
N_surveyed_cold = 2e3 and the p_harvest floor of 0.03. The existing
sensitivity rows look robust only because each one varies a single
number while the others still close the gap.
- Proposed change: State in the report that the Fermi update is the
extragalactic K-III null alone. Report 'L2 removed' as a co-headline,
not a sensitivity row. Vary the three L2 inputs jointly. Either give L1
its own evidence probability (settled but not evident) or drop the claim
that the empty Milky Way does work in this model.
- Expected effect: No change to the base numbers. With L2 removed:
alone 0.75 -> 0.61, restraint 0.01 -> 0.12, handful 0.05 ->
0.11. With p_harvest floor 1e-6: alone 0.68, restraint 0.061, handful
0.090. With N_cold = 0 and p_cold_only = 0.5: alone 0.67, restraint
0.074. With p_will floor 1e-8 and N_cold = 0: alone 0.64, restraint
0.128.
- Tested: Patched copy of the original integrate.py. L1 := 1 gives all
seven classes within 0.0001 of base (restraint 0.0101 -> 0.0102). L3
:= 1 gives all within 0.0001. Optimist, Zoo and Late-filter camps with
L1 = L3 = 1 change by at most 0.002. Dropping L2 in my re-implementation
gives 0.194 / 0.418 / 0.114 / 0.031 / 0.121 / 0.108 / 0.013, matching
the saved 'no extragalactic constraint' row.
[major] integrate.py lines 185-188 (mdwarf_alive /
mdwarf_dead) and the absence of any link to grabby.py; p_M_alive
output
- Argument: integrate.py lets M-dwarf habitability change only the
planet count, by about a factor of 2. It has no likelihood for our being
born now around a Sun-like star, which is the quantity grabby.py
computes. So P(M alive | data) stays at 0.244 against a prior of 0.25,
and the future row 'M-dwarf planets shown habitable' reports almost no
change. grabby.py's own birth law says that datum is 13 to 4e6 times
less likely in an M-alive world, depending on the number of hard steps.
The two models contradict each other on the one observation the project
built a study around.
- Proposed change: Multiply M_alive samples by the ratio of (all
civilisations ever on Sun-like hosts) to (all civilisations ever on any
host) from grabby.birth_law, at n = m + 1[hard abiogenesis]. For n = 0
use N_sun / N_hp. Or import the grabby likelihood, expanders included,
directly.
- Expected effect: Base classes move by at most 0.005, but P(M alive |
data) falls from 0.244 to about 0.014. The 'M dwarfs shown habitable'
row changes from alone 0.74 / infeasible 0.16 / hidden 0.02 to alone
0.14 / infeasible 0.66 / hidden 0.10, with P(no hard steps) = 0.85. The
model's prior probability of that observation falls 22-fold (evidence
0.104 -> 0.0046).
- Tested: Ratios from grabby.birth_law (T_sun = 8, T_M = 100 Gyr, w_M
= 1): 0.074, 6.4e-3, 5.1e-4, 4.1e-5, 3.3e-6, 2.6e-7 for n = 1 to 6.
Applied to 4M samples. The host-type factor alone (N_sun / N_hp, mean
0.48) takes P(M alive) to 0.136.
[major] integrate.py lines 190-192 (SIA branch) and the
reported SIA line (infeasible 0.82, hidden 0.14, late 0.04)
- Argument: The SIA numbers are numerically sound but are not a
result. Under SIA the infeasible and hidden classes both have likelihood
near 1 and the same Nciv weighting, so their ratio is (1 - q_feasible) :
q_feasible x p_stealth = 0.15 : 0.0255 = 5.9, against an observed 6.0.
The late-filter share is set by q_doom and the doom_surv range.
Separately, the weight w *= Nciv counts M-dwarf civilisations as 'in our
situation', which inflates P(M alive) to 0.46. The SIA 'evidence' of
6.1e5 is stored next to non-SIA evidences but is not comparable with
them.
- Proposed change: Present the SIA row as 'alone -> 0; the split
among universal barriers equals the prior odds you entered', with a
small table over (q_feasible, p_stealth, q_doom, p_will floor). Weight
by Nciv x N_sun / N_hp. Pool at least 40M samples or stratify on the
switches. Drop or rescale 'evidence' in SIA mode.
- Expected effect: Base SIA is unchanged at 0.82 / 0.14 / 0.04.
q_feasible = 0.97 gives infeasible 0.45, hidden 0.42, late 0.125. Adding
p_stealth = 0.2 gives hidden 0.82, infeasible 0.13. q_doom = 0.2 gives
late 0.22. p_will floor 1e-12 gives restraint 0.32, infeasible 0.58. The
Sun-like restriction returns P(M alive) from 0.46 to 0.25 with classes
within 0.002.
- Tested: Pooled 80M samples: 0.0396 late / 0.8239 infeasible / 0.1365
hidden, ESS 51,951, against the saved 0.0369 / 0.8242 / 0.1389 at ESS
2,505. Six independent 4M runs gave infeasible 0.821-0.831, hidden
0.127-0.142, late 0.037-0.042. Per-4M-batch s.d. over 20 batches: 0.007
/ 0.006 / 0.003. So the two-decimal figures are trustworthy to about
+/-0.01. Dropping L3 under SIA changes nothing (evidence ratio 1.02).
SIA posterior median is 300 extant quiet civilisations in the Galaxy,
nearest about 4,000 ly.
[moderate] integrate.py lines 63-65, 160, 163:
N_surveyed_cold = 2e3 '>=75% harvesting excluded at any temperature',
and the p_cold_only branch
- Argument: Three mismatches with the project's own studies. First,
the fp_kiii report's headline conservative limit at f = 0.75 is 0.29%,
equivalent to about 1,030 galaxies with zero detections; it is 0.90% at
f = 0.9 (about 330) and there is no constraint above f of about 0.93.
The tf_kiii referee corrects the Tully-Fisher limits to 2.3% and 1.4%
(about 130-210 galaxies) and rejects the 'any temperature' wording. So
2,000 is too high by 1.7 to 4 times in range and should be 0 for nearly
dark galaxies. Second, the cold-only branch is defined as covering only
part of the galaxy, yet it is still hit with a >=75% dimming limit at
full p_harvest. Third, gaps_and_corrections section 7 told the modeller
to use the covering-fraction curve (1.2e-6 full, 3e-5 at 10%, 1e-3 at
1%); the code uses two scalars.
- Proposed change: Sample a harvested fraction f per sample and take
N_surv(f) from the Lacki/Griffith curve (warm) and the FP/TF N_eff(f)
tables (cold), with N = 0 for cold f > 0.93 and for partial coverage
below the survey thresholds.
- Expected effect: Small in the base case, larger in combination.
N_cold = 1000 / 500 / 130 / 0 gives restraint 0.012 / 0.014 / 0.019 /
0.036 and alone 0.749 / 0.746 / 0.740 / 0.720. With p_cold_only = 0.5
and N_cold = 0: restraint 0.074, handful 0.085, alone 0.67.
- Tested: Re-implementation, 3M samples per variant; figures as
listed. The fp_kiii and tf_kiii numbers were read from
studies/fp_kiii/report.md and studies/tf_kiii/referee_report.md. No
tf_kiii/report.md exists.
[moderate] integrate.py lines 198-207 (classification
masks) and CLASS_LABELS
- Argument: The masks are mutually exclusive and exhaustive, and the
assignment is not order-dependent. But three labels do not describe what
the classes contain. (a) 'restraint' is 54% stealth-world samples with
mu < 1 that escaped L2 through the stealth switch; restraint by
independent choice is 0.0046, not 0.010. Its samples have median p_surv
of 0.026 (not 'long-lived') and sit in the prior box corner (median
p_will 10^-3.6, Nciv about 90). (b) 'late_filter' is 96.6%
universal-doom-switch samples; independent attrition without doom or
stealth is 0.00004. (c) 'handful_first' is 46.5% infeasible-settlement
worlds and 9% stealth worlds; only 0.024 of the 0.053 fits 'none
expanded, we are among the first'. (d) The late/restraint split is just
'which of p_surv and p_will is smaller'.
- Proposed change: Classify by mechanism flag first (infeasible,
stealth with mu above a small threshold or soft-weighted by 1 -
exp(-mu), doom), then by Nciv. Rename the classes or report the flag
composition alongside them.
- Expected effect: Restraint 0.010 -> 0.005. Hidden 0.018 ->
0.027 if stealth samples with mu >= 1e-3 are counted as hidden (the
soft 1 - exp(-mu) version gives only 0.019). Handful 0.054 -> about
0.024, with about 0.025 moving to infeasible (0.148 -> about 0.173).
This strengthens headline step (3) but changes four of the seven
published numbers.
- Tested: 4M-sample composition table: stealth share of restraint
0.541; doom share of late 0.966; infeasible share of handful 0.465.
Reclassification run gave restraint 0.0050 and hidden 0.0269.
[moderate] integrate.py line 50 hard_m_weights and line
48 w_pacing, tagged '[STUDY convergence]'
- Argument: The line cites the convergence study, but the weights are
not the study's. The model puts P(m >= 3) = 0.7 x 0.36 = 0.25 and P(m
= 0) = 0.30. studies/convergence/report.md gives P(0) = 0.35, P(1) =
0.39, P(2) = 0.20, P(>=3) = 0.06 and says models with four or five
steps are not supported. The posterior then drifts further up, to a mean
of 2.64 steps against a prior mean of 1.58, because both L2 and the
Carter term reward more steps.
- Proposed change: Either use the study's distribution as the base
case, or remove the STUDY tag and show the study's distribution as a
named camp.
- Expected effect: With the study's weights: alone_universe 0.27 ->
0.19, alone_galaxy 0.49 -> 0.42 (alone 0.75 -> 0.60), infeasible
0.15 -> 0.26, hidden 0.018 -> 0.033, late 0.032.
- Tested: Re-implementation, 3M samples, w_pacing = 0.35, weights {1:
0.39, 2: 0.20, 3: 0.06}: 0.186 / 0.417 / 0.062 / 0.032 / 0.014 / 0.256 /
0.033.
[moderate] integrate.py lines 40-41, 135-141: L_early = 1
for the whole 'easy' camp; headline step (4) 'timing moves things only
modestly'
- Argument: The comment defines easy as 'near-inevitable within ~1
Gyr', but easy_fl is log-uniform over 0.1-1. If f_l is a per-window
probability, then f_l of 0.1-0.9 means a rate of 0.1-2.3 per window, and
P(life within tau | life arose) is 0.07-0.17, the same as in the hard
camp. Yet every easy sample gets the full early-life bonus. Conversely,
'hard' samples with f_l near 1 are penalised. The coded result holds
only if f_l < 1 means site availability, which is not stated.
Separately, timing is not a modest lever.
- Proposed change: Derive L_early from each sample's own rate: q = (1
- exp(-lambda tau)) / (1 - exp(-lambda)), L = 1 - (1 - q)^(m+1). Put
site availability in a separate factor. Or state the site-availability
reading explicitly and correct headline step (4).
- Expected effect: Under the rate reading applied to both camps:
alone_universe 0.27 -> 0.39, P(easy) 0.69 -> 0.41, infeasible 0.15
-> 0.09. Removing the penalty only from hard-camp samples with high
f_l changes nothing (within 0.001).
- Tested: Variants (c) and (c') on 4M samples. Dropping L_early alone:
alone_universe 0.265 -> 0.402 and P(easy) 0.69 -> 0.34. Dropping
L_late alone: infeasible 0.148 -> 0.195 and P(pacing) 0.13 ->
0.21. The implied timing-only Bayes factor easy:hard is 4.3, inside the
3.8-13 range the briefs quote.
[moderate] integrate.py lines 179-182 (hwo_none /
hwo_some): p_bio = f_l x sqrt(f_persist) x 0.5
- Argument: The HWO targets are habitable-zone rocky planets of
Sun-like stars. In this model only a fraction f_hz_habitable x
f_rare_earth of those are habitable (both factors are inside N_hp, the
population f_l applies to). The likelihood omits both. As coded, the
model predicts a 47% chance that 25 planets yield at least one
biosignature, and so it over-reads a null.
- Proposed change: Use p_bio = f_hz_habitable x f_rare_earth x f_l x
sqrt(f_persist) x 0.5. Or move f_rare_earth out of N_hp into the
intelligence chain if it is meant to gate only complex life, and then
fix the bottleneck statistic accordingly.
- Expected effect: P(at least one detection) falls from 0.47 to 0.38
(f_hz only) or 0.14 (both). The HWO-null row's alone_universe is 0.35 or
0.29 instead of 0.39, and infeasible 0.11 or 0.13 instead of 0.09. The
detection row barely changes (alone 0.63-0.65).
- Tested: 4M samples. My as-coded rows match the saved JSON (0.3855 /
0.4530 ... and 0.1323 / 0.5228 ...). Corrected rows as listed.
[moderate] grabby.py lines 101, 132-141
(posterior_summary: 'Log-uniform prior on x and on v')
- Argument: The speed grid is [0.003, 0.01, 0.03, 0.1, 0.2, 0.3, 0.5,
0.7, 0.9, 0.99] and every row gets equal weight. That is not
log-uniform: the implied prior has P(v > 0.3c) = 0.40 and P(v >
0.1c) = 0.60, against 0.16-0.21 and 0.34-0.40 for a true log-uniform
prior on the same range. Every 'P(v > 0.3c)' and Bayes factor in
grabby_results.json inherits this. Also, the lower bound of x at 1e-6 is
arbitrary and the Sun-only posteriors pile up there (10.6% of mass on
the lowest five grid points), so P(occupied > 10%) scales with the
chosen range.
- Proposed change: Weight rows by log-spacing cell widths in v, or use
a uniform log grid. Report results for two lower bounds on x, or quote
likelihood ratios at fixed x instead of prior-averaged Bayes
factors.
- Expected effect: Sun-only n = 3: P(v > 0.3c) 0.54 -> 0.27,
Bayes factor 0.59 -> 0.48, P(occupied > 10%) 0.10 -> 0.06. M
dwarfs habitable n = 6: P(v > 0.3c) 0.91 -> 0.80, Bayes factor
2.5e4 -> 1.0e4, P(arrive < 10 Gyr) 0.98 -> 0.97. The
qualitative conclusions survive.
- Tested: Reweighted the saved rows in grabby_results.json with
trapezoid weights in log v, for all six scenarios and both detection
criteria.
[moderate] integrate.py lines 119-123 and 129: f_i =
product of per-step p_j, with Carter density m x^(m-1)
- Argument: The timing term assumes m sequential hard steps sharing
one window. The probability term multiplies per-step probabilities as if
each step had the whole window to itself. For sequential hard steps,
P(all done in T) is the product of (lambda_j T) divided by m!, so f_i is
overstated by m! (0.3, 0.8, 1.4, 2.1 dex for m = 2 to 5). Also, m
x^(m-1) is applied even when a sampled 'hard' step has p > 0.1, which
is true for 40% of the hard-step camp's posterior mass and 52% of its
Nciv >= 1 mass. For those steps Carter's formula does not hold.
- Proposed change: Subtract log10(m!) from log_fi, or sample rates and
compute the exact hypoexponential completion probability and density at
x_now. Count only steps with p much less than 1 in the Carter
exponent.
- Expected effect: The 1/m! fix: alone 0.752 -> 0.777, infeasible
0.147 -> 0.131, hidden 0.018 -> 0.017. Using an effective m (steps
with p < 0.1 or p < 0.01): changes of at most 0.007 in any
class.
- Tested: Variants (a) and (b) on 4M samples.
- [moderate] integrate.py line 190 (anthropic = 'none') and
the class definition on line 198
- Argument: This is a model choice, not a bug, but it is the single
line with the most leverage on the headline 0.27. 'none' never
conditions on any civilisation existing. The class alone_universe
therefore includes samples with Nciv x G as low as 1e-25 (posterior 5%
quantile of log10 Nciv is -36). The code offers only the two extremes:
no existence update, or the full SIA weight Nciv.
- Proposed change: Add a third mode that weights by P(at least one
civilisation in the reference volume) = 1 - exp(-Nciv x G), report it
beside 'none' and 'SIA', and say which reference volume is assumed.
- Expected effect: Observable-universe version: alone_universe 0.27
-> 0.011, alone_galaxy 0.49 -> 0.65, infeasible 0.15 -> 0.20,
P(easy) 0.81. Galaxy version: alone total 0.75 -> 0.06, infeasible
0.56.
- Tested: Variants (f) and (f') on 4M samples; ESS 898k and 371k.
- [minor] sdo.py LOG10_GALAXIES = 10.0 and the claimed
replication of 52% / 38%
- Argument: sdo.py matches the paper on P(N < 1) (0.521 against
52%), median N (0.32) and mean N (2.7e7). It gives P(N < 1e-10) =
0.394 against the published 38%. That gap is about 40 Monte Carlo
standard errors at N = 2M, so it is not noise, and the gaps brief
records it as 'reproduced'. The paper's f_l is a product lambda x V x t
that sdo.py collapses to one lognormal, which is the likely source.
Separately, sdo.py uses 1e10 galaxies for 'alone in the universe' while
integrate.py uses 10^10.7 to 10^11.3 and the gaps brief (item 6) says
1e11.
- Proposed change: Say 'reproduces 52%; gives 39.4% where the paper
reports 38%'. Use one galaxy count across both models.
- Expected effect: At a threshold of 1e-11: 38.6%. At 1e-12: 37.9%. No
effect on integrate.py.
- Tested: Independent 4M-sample replication with a different seed and
code: 0.5218 and 0.3941, median log10 N = -0.50, mean 2.73e7. The
paper's figures (52%, 38% for N < 1e-10, median 0.32, mean 27
million, Table 1 distributions) were confirmed by fetching the ar5iv
full text of arXiv:1806.02404.
- [minor] integrate.py lines 220-232 (bottleneck_given_rare)
and assorted small defects in both models
- Argument: (1) bottleneck_given_rare reports persistence = 0.0 and
technology = 0.0 by construction: a factor bounded at 2 decades can
never be the argmin when at least 9.5 decades are needed (0 of 2.0M rare
prior samples). Yet 0.169 of the 0.486 alone_galaxy mass would have Nciv
>= 1 if f_persist = f_c = f_rare = f_hz = 1. (2) grabby.py
rows['rank'] integrates only to the last grid point at or before T0, so
it is 0.5-2% low against rank_without_expanders. Line 91 (i0) is unused.
grabby_results.json contains 1,710 'Infinity' tokens, which strict JSON
parsers reject. (3) grabby.py assumes an 8 Gyr Sun-like window while
integrate.py uses 5.6 Gyr. (4) The 'evidence' field is not reported in
the camp table.
- Proposed change: Replace the argmin statistic with 'fraction of rare
mass that flips to common when factor k is set to 1'. Integrate to T0 by
interpolation. Write null for infinite t_half. Use one habitable window
in both models. Print the evidence beside each camp.
- Expected effect: None on class probabilities. The window change
moves the Sun-only no-expander rank from 0.64 to 0.77 (n = 6) and the
Bayes factor from 0.57 to 0.59. Camp evidences span 0.225 (optimist) to
0.755 (expansion sceptic), a ratio of 3.4.
- Tested: Counted the argmin on 4M samples. Compared grabby at the
original and doubled grids. Ran T_sun = 5.6. Read evidences from
integrate_results.json.
Code errors
models/integrate.py lines 185-188 (extra_obs
mdwarf_alive / mdwarf_dead); no earliness or host-star term anywhere:
M-dwarf habitability changes only the planet count. The likelihood of
being born now around a Sun-like star, which grabby.py computes, is
dropped.
- Fix: Multiply M_alive samples by the ratio of civilisations ever on
Sun-like hosts to civilisations ever on any host, from grabby.birth_law
at n = m + 1[hard life]; use N_sun / N_hp for n = 0.
- Impact: P(M alive | data) 0.244 -> 0.014. The 'M dwarfs shown
habitable' row goes from alone 0.74 / infeasible 0.16 to alone 0.14 /
infeasible 0.66 / hidden 0.10. Base classes move by at most 0.005.
models/integrate.py lines 179-182 (hwo_none /
hwo_some): p_bio omits f_hz_habitable and f_rare_earth, both of which
the model applies before f_l.
- Fix: p_bio = f_hz x f_rare x f_l x sqrt(f_persist) x 0.5. This needs
f_hz and f_rare kept as separate arrays; at present only f_rare is.
- Impact: P(at least one detection in 25 planets) 0.47 -> 0.14.
HWO-null alone_universe 0.39 -> 0.29.
models/integrate.py lines 63-65, 160, 163:
N_surveyed_cold = 2e3 '>=75% at any temperature' is not what the
studies give (about 1,030 from the fundamental-plane conservative limit
at f = 0.75, about 330 at f = 0.9, none above 0.93; Tully-Fisher about
130-210 after referee fixes). The cold-only branch is defined as partial
coverage but still receives the >=75% limit. The covering-fraction
curve requested in the gaps brief is not implemented.
- Fix: Sample a harvested fraction and use N_surv(f) curves for warm
and cold; set N = 0 where surveys are blind.
- Impact: Restraint 0.010 -> 0.012-0.036 and alone 0.752 ->
0.749-0.720 in the base case; up to restraint 0.074 with p_cold_only =
0.5.
models/integrate.py lines 201-207 and CLASS_LABELS:
Stealth samples with mu < 1 are exempt from L2 but are classified as
restraint, late or handful. 'handful_first' absorbs infeasible and
stealth worlds. The late/restraint split is only min(p_surv,
p_will).
- Fix: Classify by mechanism flags before Nciv; soft-weight hidden by
1 - exp(-mu).
- Impact: Restraint 0.010 -> 0.005; handful 0.054 -> about
0.024; infeasible about +0.025; hidden +0.001 to +0.009.
models/integrate.py lines 119-123: f_i is the
product of p_j with no 1/m! factor, although line 129 assumes the steps
share one window.
- Fix: log_fi -= log10(m!)
- Impact: Alone 0.752 -> 0.777; infeasible 0.147 -> 0.131.
models/integrate.py line 129 and lines 140-141: The
Carter terms use the nominal m even when sampled steps have p > 0.1.
L_early = 1 for all easy samples although easy_fl reaches 0.1, which
contradicts the comment on line 40.
- Fix: Use an effective m (or the exact hypoexponential); derive
L_early from the sampled rate, or document f_l < 1 as site
availability.
- Impact: Effective m: at most 0.007. Rate-consistent L_early:
alone_universe 0.27 -> 0.39.
models/integrate.py line 192: The SIA weight Nciv
includes M-dwarf-hosted civilisations as observers 'in our situation'.
'evidence' in SIA mode is on a different scale from the other runs.
- Fix: w *= Nciv x N_sun / N_hp; suppress or relabel evidence.
- Impact: P(M alive | SIA) 0.46 -> 0.25; classes within 0.002.
models/integrate.py lines 50 and 48: The STUDY
convergence tag is attached to weights that differ from the study (P(m
>= 3) of 0.25 against 0.06).
- Fix: Use the study's distribution or remove the tag and add it as a
camp.
- Impact: Alone 0.75 -> 0.60; infeasible 0.15 -> 0.26.
models/integrate.py lines 220-232: The argmin
bottleneck statistic cannot return persistence or technology (both
exactly 0.0 in the JSON).
- Fix: Report the fraction of rare mass that flips when each factor is
set to 1.
- Impact: Presentation only; the four bounded factors jointly decide
0.17 of posterior mass.
models/integrate.py lines 162 and 170: L1 and L3 are
numerically inert (class changes of at most 0.0001 when removed), which
contradicts the docstring's list of observations.
- Fix: Document it, or give L1 an independent evidence probability and
L3 a reach prior that can bind.
- Impact: None on current numbers; changes what the model can
claim.
models/grabby.py lines 101 and 136-141: Equal
weights on an unevenly spaced v grid; the docstring says
log-uniform.
- Fix: Weight by log-spacing cell widths.
- Impact: Sun-only P(v > 0.3c) 0.54 -> 0.27; headline M-dwarf
Bayes factor 2.5e4 -> 1.0e4.
models/grabby.py lines 98, 112; line 91; line 125
with json.dump: rows['rank'] is truncated at the last grid point at or
before T0 (0.5-2% low). i0 is unused. Infinite t_half is written as
1,710 'Infinity' tokens (not strict JSON).
- Fix: Integrate to T0 with an interpolated end point; delete i0;
write null.
- Impact: Negligible.
models/sdo.py line 20 and docstring: LOG10_GALAXIES
= 10 conflicts with integrate.py (10^10.7 to 10^11.3). The replication
gives 39.4% against the published 38%, and the difference is not
noted.
- Fix: Share one constant; state the 1.4-point discrepancy.
- Impact: 38.6% at 1e-11.
Claims that survive
- integrate.py computes what its description says. An independent
re-implementation (different code path, variable order and RNG stream, 3
x 2M samples) gives 0.2656 / 0.4862 / 0.0534 / 0.0190 / 0.0103 / 0.1475
/ 0.0181 against the saved 0.2656 / 0.4860 / 0.0537 / 0.0185 / 0.0101 /
0.1480 / 0.0180. The largest difference is 0.0006, inside the reported
Monte Carlo s.d.
- integrate_results.json is exactly reproducible from the current
integrate.py: a rerun of the base case matches every scalar output to
1e-12. No overrides.json is present.
- Five sensitivity rows and three camps reproduce to within 0.002:
will-to-expand floor 1e-8, no extragalactic constraint, ignore timing,
hard step spans 3 decades, P(feasible) = 0.5, Strict ignorance,
Optimist, Zoo.
- The classification masks are mutually exclusive and exhaustive and
the assignment loop is not order-dependent. No clipping is ever active
(log10 Nciv ranges from about -155 to 11.3), and there is no overflow or
NaN path. No sampled variable is unused.
- The SIA row is numerically trustworthy to about +/-0.01 despite an
ESS of only 2,505. Pooled 80M samples give 0.824 / 0.137 / 0.040 against
the saved 0.824 / 0.139 / 0.037.
- The joint early-life and late-intelligence likelihood is formally
inconsistent (it uses the first of m+1 steps on [0,1], not the first of
m on [0,x]) but agrees with the exact order-statistics expression to
within 3% for m = 1 to 5 at tau = 0.07, x = 0.8 (hand calculation). It
is not a material error.
- grabby.py is numerically converged. Doubling both grids (60,000
-> 120,000 in a; 1,400 -> 2,800 in t) changes every posterior
summary by 0.1% or less (headline Bayes factor 25,211 -> 25,217; P(v
> 0.3c), P(occupied > 10%) and median origin density unchanged to
three figures). The only row-level differences above 2% are at x = 31.6,
where the weight is about 1e-13. Quadrupling confirms this.
- grabby.py cosmology and units are correct: t(a=1) = 13.797 Gyr
matches the analytic flat-LCDM age, eta0 = 47.10 Gly, the interpolation
range reaches 3,216 Gyr (a = 4e74 at t = 3,000 Gyr), g is normalised to
g(T0) = 1 consistently with K and x, the t_half inversion is monotone,
and the mu_det shell geometry is right. The no-expander rank is
insensitive to t_max (0.643 / 0.640 / 0.640 at 40 / 80 / 160 Gyr).
- Within this model, independent per-civilisation restraint and
independent attrition are negligible. Non-stealth restraint is 0.0046
and non-doom, non-stealth late filter is 0.00004. This holds given the
L2 inputs and the prior floors, and it is strengthened by the
classification fix.
- The second-genesis row is internally consistent: weighting by f_l
gives an easy:hard Bayes factor of about 14 and P(easy) of about 0.97,
in line with the gaps brief.
Missing explanations
- Settled but not evident. L1 assumes any head-start expander in the
Galaxy is evident with probability 1 unless the universal stealth switch
is on. L2 has a p_harvest factor; L1 has no equivalent. There is no
non-universal 'sparse or percolating settlement, Solar System simply
unvisited' class.
- Expanders that exist but are rare enough to be beyond the horizon
(the grabby outcome). grabby.py computes this and integrate.py has no
class or likelihood for it. Such samples fall into 'alone_galaxy' by
default.
- A universal 'settlers do not harvest starlight at galaxy scale'
switch, distinct from stealth. The p_harvest prior has zero mass below
3%, so this option exists only as an off-table sensitivity row.
- An intermediate existence-conditioning mode between 'none' and full
SIA.
Presentation advice
- Print the mean likelihood per class next to each posterior
(alone_universe 0.50, alone_galaxy 0.73, handful 0.32, late 0.08,
restraint 0.02, infeasible 1.00, hidden 0.99). This shows which numbers
the data moved and which are priors renormalised by the evidence of
0.43.
- Say plainly that the silence enters through the galaxy-survey term
only, and make 'no extragalactic constraint' a co-headline.
- Report the stealth, doom and infeasible composition of each class,
or reclassify by mechanism.
- Present the SIA line as prior odds, with a small grid over
q_feasible, p_stealth, q_doom and the p_will floor.
- Replace 'timing moves things only modestly' with the actual figures:
13 points on alone_universe and a doubling of P(easy abiogenesis).
- Show the camp evidences. They span only a factor of 3.4, so the
observation barely discriminates between camps.
- Mark the M-dwarf and HWO future rows as provisional until the
likelihood fixes are in.