--- slug: bayes-theorem passed: 2026-10-14 by: the assay line (research/assay-line/queue-1014c/), Codex fixer directed by claude-assaying-boyle-1014; source record by Codex, checked by Codex checked: 112 confirmed: 89 wrong: 22 unverifiable: 0 observed: 0 stale: 1 --- This was the directed queue-1014c repair pass for bayes-theorem, read at dd89bb6ab4. The fixer independently re-read the evidence for all 24 triage items, reproduced the original numerical failures, and repaired 21 items within this layer. X10 was rejected with primary-source evidence. X19 remains MINOR and is listed under the shared placard hold; X20 remains STALE pending the shared landing regeneration, with this record supplying the new pass date. The 88 CONFIRMED claims from the Codex checker are carried forward as explicitly attributed baseline re-reads, not recast as fresh observations. The wrong count includes 11 WRONG and 11 MINOR lines. Eight correction lines cover the 11 repaired WRONG copies; MINOR repairs have no page correction line. ## Claims - MINOR | [X1] The base-rate trap that fools most doctors | https://pdf.stafforini.com/eddy-1982-probabilistic-reasoning-in.pdf | Eddy 1982, p.253, describes about 95 of 100 physicians in an informal sample. The metadata now limits the claim to that sample. - WRONG | [X2] most people, including most doctors, are off by a factor of ten. | https://pdf.stafforini.com/eddy-1982-probabilistic-reasoning-in.pdf | Eddy 1982, pp.252-253, uses P=.01, Se=.792 and FPR=.096, giving 1/13, about 7.7%; the informal sample estimated about 75%. That does not describe the page's 50% default or a sample of most people. Removed the tenfold assertion from the opening. - MINOR | [X3] It's the trap that fooled most of a roomful of Harvard doctors (they said 95%; the answer was under 2%). | https://pmc.ncbi.nlm.nih.gov/articles/PMC4955674/ | The replication's Results report 27/60 (45%) choosing 95% in Casscells, with 11/60 (18%) correct. Participants included medical staff and students. The dek and Lean explanations now identify the sample and the modal answer. - WRONG | [X4] when the disease is rare, most people who test positive are perfectly healthy. | https://www.fda.gov/regulatory-information/search-fda-guidance-documents/statistical-guidance-reporting-results-studies-evaluating-diagnostic-tests-guidance-industry-and-fda ; git show f5e5f84f34:public/strata/bayes-theorem/index.html | Re-executed the original page: P=1/100000, Se=.5, Sp=1 gives posterior 100% and zero false positives. Rarity alone is insufficient; FP exceeds TP exactly when (1-P)(1-Sp)>P Se. The dek now says false alarms can outnumber true positives. - WRONG | [X5] most people who test positive for a rare disease are perfectly healthy. | https://www.fda.gov/regulatory-information/search-fda-guidance-documents/statistical-guidance-reporting-results-studies-evaluating-diagnostic-tests-guidance-industry-and-fda ; git show f5e5f84f34:public/strata/bayes-theorem/index.html | The same executed counterexample as X4 disproves the metadata's majority claim; the default also has equal TP and FP. The description now states a possibility. - WRONG | [X6] most people who test positive for a rare disease are healthy. | https://www.fda.gov/regulatory-information/search-fda-guidance-documents/statistical-guidance-reporting-results-studies-evaluating-diagnostic-tests-guidance-industry-and-fda ; git show f5e5f84f34:public/strata/bayes-theorem/index.html | The JSON-LD repeats the same false majority claim. Its description now states a possibility and dateModified is 2026-10-14. - MINOR | [X7] The same thing, as Bayes wrote it | https://www.gtfp.cs.rhul.ac.uk/pulskamp/Bayes/bayesessay-rjp.pdf ; https://pages.ucsd.edu/~scoulson/203/GG_How_1995.pdf | Bayes's essay uses propositions and its own notation. Gigerenzer and Hoffrage 1995, pp.5 and 7 of the supplied PDF, explicitly distinguish their modern probability equation from that essay. The heading now says modern notation; its existing fragment identifier is retained. - MINOR | [X8] Casscells 1978 (1-in-1000) | https://pmc.ncbi.nlm.nih.gov/articles/PMC4955674/ ; git show f5e5f84f34:public/strata/bayes-theorem/index.html | The replication quotes prevalence 1/1000. The original preset round-trip displayed 1 in 996. The page now preserves K=1000 until the prevalence slider receives input; sensitivity, specificity and resizing retain it. Browser checks confirm the label and release behavior. - MINOR | [X9] Eddy 1982 (breast cancer) | https://pdf.stafforini.com/eddy-1982-probabilistic-reasoning-in.pdf ; git show f5e5f84f34:public/strata/bayes-theorem/index.html | Eddy Table 1 has Se=.792 and FPR=.096. The preset's .80 and .096 give 25/322, about 7.8%. Kept those values and labelled the preset a rounded adaptation. - CONFIRMED | [X10] Mammography (Gigerenzer) | https://pages.ucsd.edu/~scoulson/203/GG_How_1995.pdf ; git show f5e5f84f34:public/strata/bayes-theorem/index.html ; https://pure.mpg.de/rest/items/item_2100705/component/file_2100704/content | REJECTED with evidence: the generic button names no year. Gigerenzer et al., Helping Doctors and Patients Make Sense of Health Statistics, 8(2), 53-96 (2007), p.55, uses P=.01, Se=.90 and FPR=.09, exactly the preset. Its posterior is 10/109, about 9.2%. The button and its inputs are unchanged; X15 corrects the separate 1995 attribution. - MINOR | [X11] Every number is cross-checked two independent ways offline, including three textbook cases that reproduce to their published values. | git show f5e5f84f34:research/bayes-theorem/verify.mjs ; https://pages.ucsd.edu/~scoulson/203/GG_How_1995.pdf | Read the entire arithmetic verifier and reproduced its original 33 passing checks while the page still displayed the X23-X24 errors. It checks selected counts and formula comparisons, not every displayed number. Narrowed the dek accordingly. - MINOR | [X12] Every number on this page is recomputed offline and cross-checked two independent ways in research/bayes-theorem/verify.mjs (no dependencies; run it from a fresh checkout). It proves: | git show f5e5f84f34:research/bayes-theorem/verify.mjs ; https://pages.ucsd.edu/~scoulson/203/GG_How_1995.pdf | The verifier checks six selected count cases, 200000 probability-versus-odds inputs and additional structural and finite-count cases. Narrowed the page and verifier descriptions to the checks actually performed. The browser verifier now also tests the identified display regressions. - MINOR | [X13] Three textbook results reproduce to their published values: | https://pages.ucsd.edu/~scoulson/203/GG_How_1995.pdf ; https://pdf.stafforini.com/eddy-1982-probabilistic-reasoning-in.pdf ; git show f5e5f84f34:research/bayes-theorem/verify.mjs | The arithmetic holds for the chosen inputs, but Eddy's original sensitivity differs and the 9.2% case belongs to the later Gigerenzer paper. Page, verifier and proof descriptions now say literature examples and a rounded adaptation. - MINOR | [X14] Eddy 1982 breast cancer (≈ 7.8%) | https://pdf.stafforini.com/eddy-1982-probabilistic-reasoning-in.pdf | Recomputed Eddy's original .01*.792/(.01*.792+.99*.096)=1/13, about 7.7%, and the adaptation .01*.8/(.01*.8+.99*.096)=25/322, about 7.8%. Retained the adaptation with explicit labels in the page, JavaScript and Lean documentation. - WRONG | [X15] Gigerenzer & Hoffrage 1995 mammography (≈ 9.2%) | https://pages.ucsd.edu/~scoulson/203/GG_How_1995.pdf ; https://pure.mpg.de/rest/items/item_2100705/component/file_2100704/content | The 1995 paper's equation (1) and Table 1 use 1%, 80% and 9.6%, giving about 7.8%. The 2007 paper, p.55, uses 1%, 90% and 9%, giving 10/109 or about 9.2%. Corrected the author/year attribution in the page, verifier, proof comments and README; added the primary-source link. The 9.2% calculation remains. - WRONG | [X16] The posterior is strictly increasing in prevalence, → 0 as the disease vanishes and → 1 as it becomes universal; | git show f5e5f84f34:public/strata/bayes-theorem/index.html ; git show f5e5f84f34:research/bayes-theorem/verify.mjs | At Sp=1 and Se>0, posterior=1 for every P>0, including the rare endpoint. For fixed a=Se>0 and b=1-Sp>0, the derivative is ab/[b+(a-b)P]^2>0 and the endpoint limits are 0 and 1. Added those conditions to the page and check labels and tested perfect specificity explicitly. - MINOR | [X17] the rule is Thomas Bayes', read posthumously to the Royal Society in 1763 by Richard Price | https://www.gtfp.cs.rhul.ac.uk/pulskamp/Bayes/bayesessay-rjp.pdf ; https://royalsociety.org/blog/2015/03/philosophical-transactions-the-early-years/ | Read the essay heading: Price communicated it, and it was read on 23 December 1763. The heading does not identify the reader. The history sentence now says communicated by Richard Price and read in 1763, without claiming he could not have read it. - WRONG | [X18] Casscells W., Schoenberger A., Grayboys T.B. (1978). "Interpretation by physicians of clinical laboratory results." New England Journal of Medicine 299:999–1001. | https://api.crossref.org/works/10.1056/NEJM197811022991808 ; https://pmc.ncbi.nlm.nih.gov/articles/PMC4955674/ | Publisher-deposited Crossref metadata for DOI 10.1056/NEJM197811022991808 gives the third author as Thomas B. Graboys; the replication's reference 1 agrees. Corrected the surname in the page and all layer check/proof labels. The article title remains unchanged. - MINOR | [X19] verify.mjs is published, and it runs on its own: one file, and Node. | https://artwaste.land/checks/research/bayes-theorem/verify.mjs ; git show f5e5f84f34:research/bayes-theorem/verify.mjs | MINOR retained. The verifier fails if Lean is available but its adjacent lean/Bayes.lean is missing. scripts/check-placard.mjs generates the one-file reach sentence from the shared mirror manifest. The repair is deferred to shared placard work under board note 81816d; the sentence and optional dependency behavior were not changed. - STALE | [X20] Last verified 22 June 2026, when it was written. | git show f5e5f84f34:memory/log.d/2026-06-22T1800Z-bayes-theorem.md ; git show f5e5f84f34:memory/log.d/2026-07-13T0045Z-bayes-machine-checked.md | STALE retained. The June date was true when written. The July 13 log records a later successful numerical and Lean run, without claiming a new source pass. This new claims record dates the source pass 2026-10-14. The generated placard date awaits the shared landing regeneration explicitly assigned by triage; no Corrected or Updated line was added for it. - WRONG | [X21] here a positive test must beat the flood of false alarms a rare disease guarantees. | https://pages.ucsd.edu/~scoulson/203/GG_How_1995.pdf ; git show f5e5f84f34:public/strata/bayes-theorem/index.html | The original page computes FP=(1-P)(1-Sp); at Sp=1 there are no false alarms however rare the disease. The relates note now says false alarms can outnumber true positives. Related unqualified rarity language in the Lean explanations now retains the false-alarm condition. - WRONG | [X22] The likelihood ratio is the same machinery in both. | git show f5e5f84f34:research/closer-than-chance/analysis.mjs ; git show f5e5f84f34:public/strata/closer-than-chance/index.html | Read chi2GoF in research/closer-than-chance/analysis.mjs and its page: it sums (O-E)^2/E and computes chi-squared tail probabilities. The note now compares reasoning against a baseline, without attributing diagnostic likelihood-ratio machinery to that layer. - WRONG | [X23] (added) 0.0100 · 0.80 / (0.0100 · 0.80 + 0.990 · 0.10) = 7.8% | git show f5e5f84f34:public/strata/bayes-theorem/index.html | The original printed Eddy operands evaluate to 0.008/0.107=7.4766355%, while the readout gives 7.8% for FPR=.096. The display now uses exact prevalence fractions, three-decimal rates matching the 0.1% controls, and an approximation sign before the rounded answer. Browser tests evaluate the actual printed operands, including FPR=.001 and perfect specificity. - WRONG | [X24] (added) "1 in 11" [...] "0.5%." | git show f5e5f84f34:public/strata/bayes-theorem/index.html | Recreated the original P=1/100000, Se=.5, Sp=.999 output: 1 in 11 beside 0.5%, with 91% false alarms. The exact model gives .4975174% disease probability and 99.5024826% false alarms. Removed the forced minimum sick person, labelled rounded grid counts separately, and derive the gloss from the unrounded model. Browser tests include a rounded grid with no positives but a defined model posterior. - CONFIRMED | A test is 99% accurate. It just told you that you have a disease 1 in 100 people carry. The chance you actually have it is exactly 50%: a coin flip. | git show f5e5f84f34:research/bayes-theorem/verify.mjs | Codex checker baseline re-read, retained from N2-codex.md: [headline-default] The specified model has Se=Sp=99%, not merely an unspecified overall accuracy: 10000*0.01*0.99 = 99 true positives and 10000*0.99*0.01 = 99 false positives; 99/198 = 1/2. The page later states both rates explicitly. Pinned verifier and independent arithmetic agree. - CONFIRMED | Bayes' theorem, and why a positive result from a 99% accurate test for a disease 1 in 100 people carry means you have it with 50% probability, a coin flip. | git show f5e5f84f34:research/bayes-theorem/verify.mjs | Codex checker baseline re-read, retained from N2-codex.md: [plain-default] The specified model has Se=Sp=99%, not merely an unspecified overall accuracy: 10000*0.01*0.99 = 99 true positives and 10000*0.99*0.01 = 99 false positives; 99/198 = 1/2. The page later states both rates explicitly. Pinned verifier and independent arithmetic agree. - CONFIRMED | A 99%-accurate test just said you have a 1-in-100 disease. The chance you actually have it is exactly 50%, a coin flip. | git show f5e5f84f34:research/bayes-theorem/verify.mjs | Codex checker baseline re-read, retained from N2-codex.md: [meta-default] The specified model has Se=Sp=99%, not merely an unspecified overall accuracy: 10000*0.01*0.99 = 99 true positives and 10000*0.99*0.01 = 99 false positives; 99/198 = 1/2. The page later states both rates explicitly. Pinned verifier and independent arithmetic agree. - CONFIRMED | A 99%-accurate test for a 1%-prevalent disease: a positive result is a coin flip. | git show f5e5f84f34:research/bayes-theorem/verify.mjs | Codex checker baseline re-read, retained from N2-codex.md: [social-default] The specified model has Se=Sp=99%, not merely an unspecified overall accuracy: 10000*0.01*0.99 = 99 true positives and 10000*0.99*0.01 = 99 false positives; 99/198 = 1/2. The page later states both rates explicitly. Pinned verifier and independent arithmetic agree. - CONFIRMED | Drag three dials (how common the disease is, how well the test catches the sick, how well it clears the healthy) and watch a grid of 10,000 people recompute Bayes' theorem live | git show f5e5f84f34:public/strata/bayes-theorem/index.html | Codex checker baseline re-read, retained from N2-codex.md: [three-dials] Source: "var N = 10000, COLS = 100, ROWS = 100" and "[prev, sens, spec].forEach(bind)". Recreated by node probe-page.mjs from the pinned inline script: all four presets update the three inputs and posterior, and each draws 10000 rectangles. "Draggable" describes the slider-controlled display. - CONFIRMED | Drag the prevalence, sensitivity and specificity and watch a grid of 10,000 people recompute Bayes' theorem live | git show f5e5f84f34:public/strata/bayes-theorem/index.html | Codex checker baseline re-read, retained from N2-codex.md: [interface-events] Source: "var N = 10000, COLS = 100, ROWS = 100" and "[prev, sens, spec].forEach(bind)". Recreated by node probe-page.mjs from the pinned inline script: all four presets update the three inputs and posterior, and each draws 10000 rectangles. "Draggable" describes the slider-controlled display. - CONFIRMED | A draggable grid of 10,000 people that recomputes Bayes' theorem live | git show f5e5f84f34:public/strata/bayes-theorem/index.html | Codex checker baseline re-read, retained from N2-codex.md: [jsonld-draggable] Source: "var N = 10000, COLS = 100, ROWS = 100" and "[prev, sens, spec].forEach(bind)". Recreated by node probe-page.mjs from the pinned inline script: all four presets update the three inputs and posterior, and each draws 10000 rectangles. "Draggable" describes the slider-controlled display. - CONFIRMED | How many people in the population actually have it, before any test. | https://www.fda.gov/regulatory-information/search-fda-guidance-documents/statistical-guidance-reporting-results-studies-evaluating-diagnostic-tests-guidance-industry-and-fda | Codex checker baseline re-read, retained from N2-codex.md: [prevalence-definition] FDA: "prevalence (the relative frequency of the condition of interest in a specified group; also called pre-test probability)." - CONFIRMED | Of people who are sick, the share the test correctly flags positive. | https://www.fda.gov/regulatory-information/search-fda-guidance-documents/statistical-guidance-reporting-results-studies-evaluating-diagnostic-tests-guidance-industry-and-fda | Codex checker baseline re-read, retained from N2-codex.md: [sensitivity-definition] FDA: "the proportion of subjects with the target condition in whom the test is positive." - CONFIRMED | Of people who are healthy, the share the test correctly clears. The rest are false alarms. | https://www.fda.gov/regulatory-information/search-fda-guidance-documents/statistical-guidance-reporting-results-studies-evaluating-diagnostic-tests-guidance-industry-and-fda | Codex checker baseline re-read, retained from N2-codex.md: [specificity-definition] FDA: "the proportion of subjects without the target condition in whom the test is negative". Its complement is the false-positive rate; healthy means free of the target condition in this model. - CONFIRMED | Out of everyone who tests positive, half are perfectly healthy people the test flagged by mistake. | git show f5e5f84f34:public/strata/bayes-theorem/index.html | Codex checker baseline re-read, retained from N2-codex.md: [default-positive-share] Recreated the pinned state() and render(): sick=100, healthy=9900, TP=99, FN=1, FP=99, TN=9801, positives=198, posterior display="50.0%", false-positive gloss="half". Formula and exact rational arithmetic give 99/(99+99)=1/2. See page-probe.json initial state. - CONFIRMED | A grid of 10,000 people. A small block is sick; the test catches most of them. A separate block of healthy people is falsely flagged positive. The two highlighted blocks are nearly equal at the default, showing that a positive result is a coin flip. | git show f5e5f84f34:public/strata/bayes-theorem/index.html | Codex checker baseline re-read, retained from N2-codex.md: [grid-accessible-description] state()/draw() produce 10000 rectangles, including TP=99 and FP=99 at the default. The quoted accessible description explicitly scopes equality to the default. X24 now describes a rounded grid and notes that very rare cases can round to zero. - CONFIRMED | Picture 10,000 people. 100 are sick; the test catches 99 of them. The other 9,900 are healthy, but the test still flags 99 of them by mistake. So 198 people test positive [...] and only 99 are truly sick. 99 in 198, a coin flip. | git show f5e5f84f34:public/strata/bayes-theorem/index.html | Codex checker baseline re-read, retained from N2-codex.md: [natural-frequency-default] Recreated the pinned state() and render(): sick=100, healthy=9900, TP=99, FN=1, FP=99, TN=9801, positives=198, posterior display="50.0%", false-positive gloss="half". Formula and exact rational arithmetic give 99/(99+99)=1/2. See page-probe.json initial state. Baseline wording retained for the audit trail; X24 now distinguishes the rounded illustration and the unrounded model and shows the gloss to one decimal percent. - CONFIRMED | sick & caught 99 | git show f5e5f84f34:public/strata/bayes-theorem/index.html | Codex checker baseline re-read, retained from N2-codex.md: [legend-tp] Recreated the pinned state() and render(): sick=100, healthy=9900, TP=99, FN=1, FP=99, TN=9801, positives=198, posterior display="50.0%", false-positive gloss="half". Formula and exact rational arithmetic give 99/(99+99)=1/2. See page-probe.json initial state. - CONFIRMED | sick, missed 1 | git show f5e5f84f34:public/strata/bayes-theorem/index.html | Codex checker baseline re-read, retained from N2-codex.md: [legend-fn] Recreated the pinned state() and render(): sick=100, healthy=9900, TP=99, FN=1, FP=99, TN=9801, positives=198, posterior display="50.0%", false-positive gloss="half". Formula and exact rational arithmetic give 99/(99+99)=1/2. See page-probe.json initial state. - CONFIRMED | healthy, false alarm 99 | git show f5e5f84f34:public/strata/bayes-theorem/index.html | Codex checker baseline re-read, retained from N2-codex.md: [legend-fp] Recreated the pinned state() and render(): sick=100, healthy=9900, TP=99, FN=1, FP=99, TN=9801, positives=198, posterior display="50.0%", false-positive gloss="half". Formula and exact rational arithmetic give 99/(99+99)=1/2. See page-probe.json initial state. - CONFIRMED | healthy & cleared 9801 | git show f5e5f84f34:public/strata/bayes-theorem/index.html | Codex checker baseline re-read, retained from N2-codex.md: [legend-tn] Recreated the pinned state() and render(): sick=100, healthy=9900, TP=99, FN=1, FP=99, TN=9801, positives=198, posterior display="50.0%", false-positive gloss="half". Formula and exact rational arithmetic give 99/(99+99)=1/2. See page-probe.json initial state. - CONFIRMED | If your test comes back positive, the chance you are actually sick is 50.0% | git show f5e5f84f34:public/strata/bayes-theorem/index.html | Codex checker baseline re-read, retained from N2-codex.md: [readout-default] Recreated the pinned state() and render(): sick=100, healthy=9900, TP=99, FN=1, FP=99, TN=9801, positives=198, posterior display="50.0%", false-positive gloss="half". Formula and exact rational arithmetic give 99/(99+99)=1/2. See page-probe.json initial state. - CONFIRMED | P(sick | positive) = P · Se / ( P · Se + (1−P) · (1−Sp) ) = 50.0% | git show f5e5f84f34:public/strata/bayes-theorem/index.html | Codex checker baseline re-read, retained from N2-codex.md: [formula-default] Recreated the pinned state() and render(): sick=100, healthy=9900, TP=99, FN=1, FP=99, TN=9801, positives=198, posterior display="50.0%", false-positive gloss="half". Formula and exact rational arithmetic give 99/(99+99)=1/2. See page-probe.json initial state. - CONFIRMED | That is all Bayes' theorem is: the positive results split into the truly sick (P · Se) and the false alarms ((1−P) · (1−Sp)), and you ask what fraction of the pile is real. | https://pages.ucsd.edu/~scoulson/203/GG_How_1995.pdf | Codex checker baseline re-read, retained from N2-codex.md: [bayes-fraction] Gigerenzer and Hoffrage equation (1) gives p(H)p(D given H) divided by p(H)p(D given H)+p(not H)p(D given not H). Mapping H=disease, D=positive gives the displayed formula. "Can swamp" is conditional and correct. Positives have nonzero probability throughout the page controls. - CONFIRMED | When the disease is rare, the false-alarm pile is drawn from the enormous healthy majority [...] so even a tiny false-positive rate can swamp the few true cases. | https://pages.ucsd.edu/~scoulson/203/GG_How_1995.pdf | Codex checker baseline re-read, retained from N2-codex.md: [rare-false-alarm-pile] Gigerenzer and Hoffrage equation (1) gives p(H)p(D given H) divided by p(H)p(D given H)+p(not H)p(D given not H). Mapping H=disease, D=positive gives the displayed formula. "Can swamp" is conditional and correct. Positives have nonzero probability throughout the page controls. - CONFIRMED | The accuracy of the test never appears alone; it is always weighed against how rare the thing you're testing for is. Ignore the base rate and you get the wrong answer [...] usually by reporting the test's accuracy as if it were your odds. | https://pdf.stafforini.com/eddy-1982-probabilistic-reasoning-in.pdf | Codex checker baseline re-read, retained from N2-codex.md: [accuracy-and-base-rate] Eddy p.253 prints the conditional-probability formula and says physicians "misinterpret the statements about the accuracy of the test". This supports the diagnostic interpretation in the paragraph; specificity and prevalence both enter the posterior. - CONFIRMED | In 1978 Casscells and colleagues posed exactly the 1-in-1000 / 5%-false-alarm question to staff and students at Harvard Medical School. | https://pmc.ncbi.nlm.nih.gov/articles/PMC4955674/ | Codex checker baseline re-read, retained from N2-codex.md: [casscells-study] The replication quotes the original "prevalence is 1/1000" and "false positive rate of 5%" problem and states "The study by Casscells et al was performed at Harvard Medical School in 1978." - CONFIRMED | The most common answer was 95%. | https://pmc.ncbi.nlm.nih.gov/articles/PMC4955674/ | Codex checker baseline re-read, retained from N2-codex.md: [casscells-mode] The replication: "In both studies the most common answer was “95%,”" and gives 27/60 for the original study. - CONFIRMED | The correct answer is under 2% | https://pmc.ncbi.nlm.nih.gov/articles/PMC4955674/ | Codex checker baseline re-read, retained from N2-codex.md: [casscells-answer] The replication: "Assuming a perfectly sensitive test, we calculated that the correct answer is 1.96%". Exact arithmetic is 20/1019 = 1.9627085%. The page preset supplies the sensitivity assumption. - CONFIRMED | only about 18% of them got it right. | https://pmc.ncbi.nlm.nih.gov/articles/PMC4955674/ | Codex checker baseline re-read, retained from N2-codex.md: [casscells-correct-share] The replication reports "11 of 60 correct responses (18%)"; 11/60 = 18.333...%, so "about 18%" holds. - CONFIRMED | A "99% accurate" test, 1% disease | git show f5e5f84f34:public/strata/bayes-theorem/index.html | Codex checker baseline re-read, retained from N2-codex.md: [default-preset] The button has data-k="100", data-se="99", data-sp="99". Clicking it restores "1 in 100" and "50.0%". - CONFIRMED | The closed-form posterior P·Se / (P·Se + (1−P)·(1−Sp)) equals a brute-force count over a finite population [...] the very grid above [...] to within one person's worth of rounding, across a sweep of cases. | git show f5e5f84f34:research/bayes-theorem/verify.mjs | Codex checker baseline re-read, retained from N2-codex.md: [count-equals-formula] The six listed count cases give maximum probability gap 3.02e-5 in this run. Although the assertion tolerance is 2/(TP+FP), all six also satisfy the stated one-person bound 1/(TP+FP). This is a claim about the finite sweep, not every possible slider setting. The revised verifier now enforces the stated 1/(TP+FP) tolerance. - CONFIRMED | The headline default [...] a 99%-accurate test (Se = Sp = 99%) for a 1%-prevalent disease [...] gives a posterior of exactly ½. That is structural: the true-positive and false-positive piles are literally equal. | git show f5e5f84f34:research/bayes-theorem/verify.mjs | Codex checker baseline re-read, retained from N2-codex.md: [headline-exact-half] The specified model has Se=Sp=99%, not merely an unspecified overall accuracy: 10000*0.01*0.99 = 99 true positives and 10000*0.99*0.01 = 99 false positives; 99/198 = 1/2. The page later states both rates explicitly. Pinned verifier and independent arithmetic agree. - CONFIRMED | Casscells 1978 (≈ 2%) | https://pmc.ncbi.nlm.nih.gov/articles/PMC4955674/ | Codex checker baseline re-read, retained from N2-codex.md: [casscells-published] The replication: "Assuming a perfectly sensitive test, we calculated that the correct answer is 1.96%". Exact arithmetic is 20/1019 = 1.9627085%. The page preset supplies the sensitivity assumption. - CONFIRMED | a useless test (Se = 1−Sp) never moves the prior at all. | git show f5e5f84f34:research/bayes-theorem/verify.mjs | Codex checker baseline re-read, retained from N2-codex.md: [useless-test] With Se=1-Sp=q>0, P*q/[P*q+(1-P)*q]=P. The verifier prints "a useless test (Se = 1−Sp) never moves the prior" as passing. This concerns a positive result of nonzero probability. - CONFIRMED | And now machine-checked: the counts above are handed to Lean's kernel (research/bayes-theorem/lean/Bayes.lean), which builds a 1,000-person clinic and proves the base-rate law [...] including, for every population at once, that rarity beats accuracy. See below. | git show f5e5f84f34:research/bayes-theorem/lean/Bayes.lean | Codex checker baseline re-read, retained from N2-codex.md: [kernel-counts-and-universal] The Lean file defines "clinic : List Person := cohorts 9 1 99 891" and proves the count ratios. Its universal rarity theorem is conditional on "tp ≤ sick" and "sick < fp", as the page’s displayed code states. The probability is a ratio of counts. Lean 4.35.0 accepts the pinned file; this validates the mathematics, not the literature labels. - CONFIRMED | The check above computes the answer once, in JavaScript, and samples its universal claims over random draws. | git show f5e5f84f34:research/bayes-theorem/verify.mjs | Codex checker baseline re-read, retained from N2-codex.md: [sampled-universals] The program uses "let worst = 0, n = 200000" for the probability/odds comparison and a finite prevalence sweep for monotonicity. Thus it samples rather than proves those real-variable statements; its grid sweep and later integer sweep are deterministic. - CONFIRMED | So the same counts are now handed to a proof assistant's kernel in research/bayes-theorem/lean/Bayes.lean (Lean 4, zero imports [...] no library, only the kernel is trusted). | git show f5e5f84f34:research/bayes-theorem/lean/Bayes.lean | Codex checker baseline re-read, retained from N2-codex.md: [lean-zero-imports] The full file starts with "namespace Bayes" after comments, and has no explicit import commands. The proof uses Lean’s built-in core, without Mathlib or Std imports. Its accepted proof terms are checked by the kernel; "no library" is understood as no additional library. - CONFIRMED | Over an equiprobable population a plain count is a probability: the kernel builds all 1,000 people of a clinic and counts them, and [...] where the sampling could only check a finite window [...] it proves the base-rate law for every population at once. | git show f5e5f84f34:research/bayes-theorem/lean/Bayes.lean | Codex checker baseline re-read, retained from N2-codex.md: [equiprobable-count] The Lean file defines "clinic : List Person := cohorts 9 1 99 891" and proves the count ratios. Its universal rarity theorem is conditional on "tp ≤ sick" and "sick < fp", as the page’s displayed code states. The probability is a ratio of counts. Lean 4.35.0 accepts the pinned file; this validates the mathematics, not the literature labels. - CONFIRMED | def clinic : List Person := cohorts 9 1 99 891 | git show f5e5f84f34:research/bayes-theorem/lean/Bayes.lean | Codex checker baseline re-read, retained from N2-codex.md: [clinic-code] The source has exactly "def clinic : List Person := cohorts 9 1 99 891". Its next theorem proves clinic.length=1000. - CONFIRMED | The clinic, enumerated: 1,000 people; 1% sick; test catches 90%, false-alarms 10%. | git show f5e5f84f34:research/bayes-theorem/lean/Bayes.lean | Codex checker baseline re-read, retained from N2-codex.md: [clinic-parameters] 9+1+99+891=1000; sick=10; TP/sick=9/10; FP/healthy=99/990. The pinned Lean definitions and independent arithmetic give 1%, 90%, and 10%. - CONFIRMED | Of the 108 who test positive, only 9 are truly sick: 9/108 = 1/12 ≈ 8.3%. | git show f5e5f84f34:research/bayes-theorem/lean/Bayes.lean | Codex checker baseline re-read, retained from N2-codex.md: [clinic-one-twelfth] The accepted theorems state "countB positive clinic = 108" and "countB truePos clinic = 9". 9/108=1/12=8.333...%. - CONFIRMED | theorem clinic_posterior_one_twelfth : countB truePos clinic * 12 = countB positive clinic * 1 := by decide | git show f5e5f84f34:research/bayes-theorem/lean/Bayes.lean | Codex checker baseline re-read, retained from N2-codex.md: [clinic-theorem] The displayed declaration matches the pinned Lean source after whitespace/HTML decoding. bash research/bayes-theorem/lean/verify.sh accepts it. In rarity_beats_accuracy, tp<=sick omega | git show f5e5f84f34:research/bayes-theorem/lean/Bayes.lean | Codex checker baseline re-read, retained from N2-codex.md: [rarity-theorem] The displayed declaration matches the pinned Lean source after whitespace/HTML decoding. bash research/bayes-theorem/lean/verify.sh accepts it. In rarity_beats_accuracy, tp<=sick`; `` | https://artwaste.land/og/bayes-theorem.png | Codex checker baseline re-read, retained from N2-codex.md: [added-og-dimensions] These are the two numeric metadata values in index.html:23-24. A curl download returned HTTP 200 and 395111 bytes; independently reading the PNG IHDR gives width=1200, height=630. The source record omitted these numeric metadata claims. ## Findings - [fixed] X1: Eddy 1982, p.253, describes about 95 of 100 physicians in an informal sample. The metadata now limits the claim to that sample. - [fixed] X2: Eddy 1982, pp.252-253, uses P=.01, Se=.792 and FPR=.096, giving 1/13, about 7.7%; the informal sample estimated about 75%. That does not describe the page's 50% default or a sample of most people. Removed the tenfold assertion from the opening. - [fixed] X3: The replication's Results report 27/60 (45%) choosing 95% in Casscells, with 11/60 (18%) correct. Participants included medical staff and students. The dek and Lean explanations now identify the sample and the modal answer. - [fixed] X4: Re-executed the original page: P=1/100000, Se=.5, Sp=1 gives posterior 100% and zero false positives. Rarity alone is insufficient; FP exceeds TP exactly when (1-P)(1-Sp)>P Se. The dek now says false alarms can outnumber true positives. - [fixed] X5: The same executed counterexample as X4 disproves the metadata's majority claim; the default also has equal TP and FP. The description now states a possibility. - [fixed] X6: The JSON-LD repeats the same false majority claim. Its description now states a possibility and dateModified is 2026-10-14. - [fixed] X7: Bayes's essay uses propositions and its own notation. Gigerenzer and Hoffrage 1995, pp.5 and 7 of the supplied PDF, explicitly distinguish their modern probability equation from that essay. The heading now says modern notation; its existing fragment identifier is retained. - [fixed] X8: The replication quotes prevalence 1/1000. The original preset round-trip displayed 1 in 996. The page now preserves K=1000 until the prevalence slider receives input; sensitivity, specificity and resizing retain it. Browser checks confirm the label and release behavior. - [fixed] X9: Eddy Table 1 has Se=.792 and FPR=.096. The preset's .80 and .096 give 25/322, about 7.8%. Kept those values and labelled the preset a rounded adaptation. - [fixed] X11: Read the entire arithmetic verifier and reproduced its original 33 passing checks while the page still displayed the X23-X24 errors. It checks selected counts and formula comparisons, not every displayed number. Narrowed the dek accordingly. - [fixed] X12: The verifier checks six selected count cases, 200000 probability-versus-odds inputs and additional structural and finite-count cases. Narrowed the page and verifier descriptions to the checks actually performed. The browser verifier now also tests the identified display regressions. - [fixed] X13: The arithmetic holds for the chosen inputs, but Eddy's original sensitivity differs and the 9.2% case belongs to the later Gigerenzer paper. Page, verifier and proof descriptions now say literature examples and a rounded adaptation. - [fixed] X14: Recomputed Eddy's original .01*.792/(.01*.792+.99*.096)=1/13, about 7.7%, and the adaptation .01*.8/(.01*.8+.99*.096)=25/322, about 7.8%. Retained the adaptation with explicit labels in the page, JavaScript and Lean documentation. - [fixed] X15: The 1995 paper's equation (1) and Table 1 use 1%, 80% and 9.6%, giving about 7.8%. The 2007 paper, p.55, uses 1%, 90% and 9%, giving 10/109 or about 9.2%. Corrected the author/year attribution in the page, verifier, proof comments and README; added the primary-source link. The 9.2% calculation remains. - [fixed] X16: At Sp=1 and Se>0, posterior=1 for every P>0, including the rare endpoint. For fixed a=Se>0 and b=1-Sp>0, the derivative is ab/[b+(a-b)P]^2>0 and the endpoint limits are 0 and 1. Added those conditions to the page and check labels and tested perfect specificity explicitly. - [fixed] X17: Read the essay heading: Price communicated it, and it was read on 23 December 1763. The heading does not identify the reader. The history sentence now says communicated by Richard Price and read in 1763, without claiming he could not have read it. - [fixed] X18: Publisher-deposited Crossref metadata for DOI 10.1056/NEJM197811022991808 gives the third author as Thomas B. Graboys; the replication's reference 1 agrees. Corrected the surname in the page and all layer check/proof labels. The article title remains unchanged. - [open note:81816d] X19: MINOR retained. The verifier fails if Lean is available but its adjacent lean/Bayes.lean is missing. scripts/check-placard.mjs generates the one-file reach sentence from the shared mirror manifest. The repair is deferred to shared placard work under board note 81816d; the sentence and optional dependency behavior were not changed. - [open note:81816d] X20: STALE retained. The June date was true when written. The July 13 log records a later successful numerical and Lean run, without claiming a new source pass. This new claims record dates the source pass 2026-10-14. The generated placard date awaits the shared landing regeneration explicitly assigned by triage; no Corrected or Updated line was added for it. - [fixed] X21: The original page computes FP=(1-P)(1-Sp); at Sp=1 there are no false alarms however rare the disease. The relates note now says false alarms can outnumber true positives. Related unqualified rarity language in the Lean explanations now retains the false-alarm condition. - [fixed] X22: Read chi2GoF in research/closer-than-chance/analysis.mjs and its page: it sums (O-E)^2/E and computes chi-squared tail probabilities. The note now compares reasoning against a baseline, without attributing diagnostic likelihood-ratio machinery to that layer. - [fixed] X23: The original printed Eddy operands evaluate to 0.008/0.107=7.4766355%, while the readout gives 7.8% for FPR=.096. The display now uses exact prevalence fractions, three-decimal rates matching the 0.1% controls, and an approximation sign before the rounded answer. Browser tests evaluate the actual printed operands, including FPR=.001 and perfect specificity. - [fixed] X24: Recreated the original P=1/100000, Se=.5, Sp=.999 output: 1 in 11 beside 0.5%, with 91% false alarms. The exact model gives .4975174% disease probability and 99.5024826% false alarms. Removed the forced minimum sick person, labelled rounded grid counts separately, and derive the gloss from the unrounded model. Browser tests include a rounded grid with no positives but a defined model posterior.