Skip to content
The Liberation Engine

Numbers on trial / Lesson 2 of 3 · Decide

Can a rare tragedy prove a mother guilty?

Two babies died and a court heard a staggering number. Stand in the first appeal's courtroom with only its dated record, rebuild what the number actually counts, and decide what it can and cannot prove before opening the later record.

What the agent made

Ran it for real with Claude Code 2.1.300 and OMP 18.11.0 on 2026-10-15. The first session started with no saved memory; each later session was a new one that kept only the files in the folder. Your result will differ.

Then a brand-new session used what it saved on new input: see the proof.

The same prompts in OMP made their own versions, every session recorded and checked: session 1 · Open the statisticians' warning and the second appeal.

Make your own

  1. Get the files

    Download the practice folder (ZIP)

    Unzip it: you get a folder called cli-practice with 2 practice files. Only the Court of Appeal's 2 October 2000 first-appeal judgment is available initially. Quotations identify judgment paragraphs and link to the full public transcript; subsequent professional statements and the second appeal are added in a separate session. It also has a for-later folder with the new files for the fresh sessions.

  2. Open your agent in that folder

    Open a terminal in cli-practice and type claude or omp --approval-mode always-ask. First time? Set up in about five minutes, with steps for Mac, Windows, and Linux.

  3. Paste this prompt

    Work only inside this practice folder. Read first-appeal.txt and SOURCES.csv. Do not change these inputs, use the network, read outside the folder, install anything, use APIs, or ask for replies. Python 3 standard library only. Do not use em dashes or en dashes. Freeze your knowledge at the dated Court of Appeal first-appeal judgment. The case concerns two dead infants and a mother convicted of their murders: handle people and disputed evidence without spectacle. Attribute every claim about a named person to an exact quoted passage with its paragraph, date and original URL; distinguish the court's holding from a witness's testimony and from an appellant's argument. Do not treat absence of an identified natural cause as proof of homicide or quantify medical evidence the packet does not measure.
    
    The call: does the quoted figure measure the probability of innocence, and is there enough information in this record to compare the prior odds of two SIDS deaths against two maternal homicides for a family with the stated characteristics? Reproduce the reported arithmetic exactly and explain its denominator, its assumptions, and any necessary conditional probability. Read the judgment's competing accounts fairly. Derive the two-hypothesis prior-odds expression from the records with only supported numerical inputs; mark the conditional recurrence and double-homicide incidence unknown if no sourced measurement exists, and give defensible mathematical bounds rather than making up a rate. Distinguish prior odds from a likelihood ratio based on actual physical evidence and from a posterior probability of guilt. If you write a likelihood-ratio equation, check the direction: odds of two SIDS versus two maternal homicides must be multiplied by the likelihood of the same findings under two SIDS divided by their likelihood under two maternal homicides, not by the reciprocal. Never multiply a ratio and its reciprocal while labeling the product posterior odds. These two alternatives do not exhaust all causes of infant death. Make an as-of decision for a court reporter about whether to publish a numeric guilt probability, and show precisely what evidence would be needed to revise it. No later outcome or professional statement may appear in the original page.
    
    Write only model.py, analysis.json, check.py and odds.html. model.py must parse the quoted inputs from the original source and build analysis.json with the arithmetic, source IDs, quoted evidence ledger, conditional expression, bounds, unknowns and chronology. check.py independently re-reads original source files without importing or executing model.py, recomputes all critical inputs and arithmetic, and checks analysis.json and tagged values in odds.html, links and source dates; reject numeric posterior claims or invented double-homicide rates. Its --self-test must reject at least three different in-memory corruptions without modifying inputs. Run model.py, check.py, and check.py --self-test using python3.
    
    Make odds.html a complete, self-contained offline courtroom evidence page, not a generic dashboard. Lead with the as-of call, then the sourced arithmetic and two-column explanation of what the statistic counts versus what remains unmeasured, with accessible quoted evidence. Let the reader adjust a clearly labeled hypothetical conditional recurrence assumption in a bounded control and see the resulting two-death frequency and its unchanged unknown homicide comparator. Do not imply the selected assumption is an empirical finding; preserve the source-derived arithmetic and complete baseline with all important values and links in ordinary semantic HTML even with JavaScript off. Include one inline source-linked SVG zero-baseline chart plotting the algebraic two-death frequency against the explicitly hypothetical conditional recurrence range, with axis units, the source for the first-child estimate, and an explanation that there is no sourced point estimate for recurrence or homicide. Do not confuse per-birth and per-family denominators. The chart illustrates a formula, not observed frequencies. A touch or keyboard action must visibly change both a value and its explanatory sentence, not just the chart color.
    
    Make the result look designed for its subject, not like a default dashboard. Lead with the consequential finding, then show the cited evidence and the next action. Use a restrained courtroom annotation motif, a readable editorial type hierarchy and accessible contrast. Give the page a clear source trail and a genuine static equivalent of the interactive reasoning. Respect reduced motion. At 360 pixels wide and wider, including tablet widths from 600 to 1000 pixels, the page fits the screen and nothing scrolls sideways, not even inside a table, chart, timeline or code box; charts and timelines scale to the width; no word, field name or amount ever breaks mid-word or runs past the edge, so never print long code identifiers or URLs as page text; narrow tables become stacked cards. Every numerical finding remains visible in plain HTML with JavaScript off, including the entire sourced baseline and missing-data conclusion. Keep all code and assets inline, all source links working and no external fetch.

    The prompt asks the agent to stay in this folder; it cannot enforce that. Read each file change and command before you approve it.

  4. Check it yourself

    Open cli-practice/odds.html in your web browser (double-click it), then:

    Human check: SC1 gives one-in-8,543 for the specified birth-risk group. 8,543 squared is 72,982,849, so the trial's one-in-73,000,000 is rounded arithmetic under equal independent risks, not a posterior innocence probability. With first-child p = 1/8,543 and unknown recurrence r, the illustrative two-SIDS risk is p*r, bounded from 0 to 1/8,543 given r in [0,1]; unknown double-homicide incidence h makes prior odds (p*r)/h undetermined, and these hypotheses are not exhaustive. Do not infer a homicide rate, numeric posterior, or verdict from the arithmetic. SC1 paragraph 258 dismissed the first appeal on 2 October 2000. Run check.py and --self-test, inspect citations, chronology and live interaction.

    When we checked the recording above: Re-recorded with the 360-and-tablet layout prompt. Clean-folder rebuild: lesson checks and self-tests exit 0, no inputs changed; key figures match human_check; sweep at 360/375/390/800/1024/1280 after every control shows no overflow, inner scroller or printed URL; resize 400-1300 in 4px steps fits.

Then prove it: fresh sessions

Each run below is a brand-new session, recorded for real in Claude Code. It remembers nothing from the run before except the files saved in the folder, so the short prompt is the whole instruction.

2 · Open the statisticians' warning and the second appeal

Before this run, copy the files from for-later/reveal in the ZIP into cli-practice: OUTCOME_SOURCES.csv, outcomes.txt.

Quit the agent, start it again in cli-practice, and paste only this:

Work only inside this practice folder. Read your frozen original sources and outputs before opening outcomes.txt and OUTCOME_SOURCES.csv. Leave all inputs and previous outputs unchanged. No network, outside files, installs, APIs, or replies. Python 3 standard library only. Do not use em dashes or en dashes. This is a fresh session: none of the newly supplied documents was available as of 2 October 2000. The later court made an oral ruling and released Sally Clark before its written judgment was handed down: distinguish those dates from the records. Attribute every personal statement to a quotation and original source URL; distinguish the RSS's professional criticism from the court's findings, and the biological evidence from the statistical question.

Write only reveal.json, reveal.html, reveal-check.py. Build a self-contained offline two-column evidence page: what the 2000 judgment actually contained versus what SC2, SC3 and SC4 established later. Recompute the original source-based arithmetic without silently rewriting the earlier output. Trace the statement, letter and appeal in dated order; quote the later reasons on statistical independence and comparison, and the separate, principal microbiological disclosure issue. Distinguish the 2003 decision/release from the date of its written reasons. Preserve unknown double-homicide incidence and unknown conditional recurrence even after the reveal; neither the later statistical criticism nor the case outcome supplies a defensible numerical probability of innocence. Do not claim the first appeal was successful or that statistics alone quashed the convictions.

reveal.json must record both evidence columns, all source IDs, dates and unknown quantities. reveal-check.py must independently parse both sets of sources without importing or running model.py or check.py; verify chronological firewall, arithmetic, source-linked quotes, dates and all tagged HTML figures; --self-test must reject three distinct in-memory corruptions. Run python3 reveal-check.py and python3 reveal-check.py --self-test. Use a source-linked SVG dated timeline with ordinary HTML text equivalents, an accessible touch/keyboard disclosure that visibly reveals a consequential later quotation, and full baseline plus later outcomes visible and navigable when scripts are off. No outside assets, no external requests, meaningful contrast, reduced-motion support. At 360 pixels wide and wider, including tablet widths from 600 to 1000 pixels, the page fits the screen and nothing scrolls sideways, not even inside a table, chart, timeline or code box; charts and timelines scale to the width; no word, field name or amount ever breaks mid-word or runs past the edge, so never print long code identifiers or URLs as page text; narrow tables become stacked cards. No em dashes or en dashes in any files.

Human check: SC2 was embargoed until 23 October 2001 and rejects unsupported familial independence; SC3 dated 23 January 2002 additionally warns about using the same data to select family characteristics and estimate frequency. SC4, written 11 April 2003, paragraph 5 says the court heard the appeal 28 and 29 January 2003, set aside the convictions and released Clark, with detailed reasons supplied later; paragraphs 2 and 6 identify undisclosed microbiology as the principal ground. The blind first appeal was dismissed 2 October 2000. Check both source columns, unknown incidence and interaction; run reveal-check.py and --self-test.

When we checked the recording: Re-recorded with the 360-and-tablet layout prompt. Clean-folder rebuild: lesson checks and self-tests exit 0, no inputs changed; key figures match human_check; sweep at 360/375/390/800/1024/1280 after every control shows no overflow, inner scroller or printed URL; resize 400-1300 in 4px steps fits.

Do it for real

If a claim about a real person relies on a startling small probability, preserve the dated primary record, the reference population, conditional dependence and all plausible alternative explanations. Ask a qualified statistician and legal professional to review a real case; do not turn a frequency into an accusation, diagnosis or individual guilt probability.

Why an agent, not a chat window

An agent traces a quoted statistic through a dated court judgment, writes reproducible conditional-probability arithmetic, and independently checks both a machine-readable model and a source-linked visual. A fresh session tests the original call against dated statistical guidance and a later judgment without leaking hindsight.

Go deeper

Why the prompt is written this way

The recorded runs

ToolModelFirst run tookFiles madeSessions
Claude Code 2.1.300claude-opus-5-59 min 12 s4first session + 1 later
OMP 18.11.0not logged by this tool16 min 51 s4first session + 1 later

Both refused to publish a probability of guilt and let a reader slide a clearly hypothetical recurrence assumption to watch the two-death frequency change while the homicide comparator stays unknown. Claude Code's self-tests rejected 13 and 8 planted corruptions, OMP's 16 and 10. In the reveal, Claude Code toggles the court's principal microbiology reason with a button; OMP opens it in a native disclosure.

Push it further