Skip to content
The Liberation Engine

The claim against the record / Lesson 1 of 5 · Check

Did the rescue save the jobs it counted?

An April claim about American workers meets a July release of federal loan figures. Be the editor who must decide what a headline can say before you see the later audit.

What the agent made

Ran it for real with OMP 18.10.4 on 2026-10-14. 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.

Make your own

  1. Get the files

    Download the practice folder (ZIP)

    Unzip it: you get a folder called cli-practice with 4 practice files. Dated remarks, original federal rule, July 6 Treasury release and official national PPP report, plus three loan-size aggregates and a seeded twenty-row random sample of the contemporaneous Delaware under-$150,000 government-origin loan file. Its immutable July 6 archive commit, source SHA-256, and sample checksum are documented; later audit and research remain withheld. 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 claims-and-rule.txt, loan-summary.txt, loan-slice.txt and SOURCES.csv. Leave those inputs byte-for-byte unchanged. Do not read files outside this folder, use the network, install packages, call APIs, or request a reply. Python 3 standard library only. Do not use em dashes or en dashes. Your information stops on July 6, 2020, after the Treasury data release. State separately what was knowable when the April remarks were delivered and what first became public by July. Do not fetch or infer later events. Quote any statement you attribute to a named person exactly, with the record's date and source URL.
    
    You are an editor choosing whether to publish the claim as written, publish a narrower alternative, or hold publication for evidence. Parse the official national lender-asset table and independently reconcile its loan and jobs counts to the reported national totals. Parse the national loan-size distribution and reconcile its loan count separately. Then parse the original-vintage Delaware loan-size aggregation and the documented sampled records, checking its row and jobs-field subtotals, money totals, sample selection method, header names and upstream source hashes as far as the local packet permits. Distinguish that original file's Delaware under-$150,000 scope from the national June 30 snapshot; never scale it up to the whole nation or confuse lender asset size with loan amount. Derive useful unit-labeled ratios from the reported counts and benchmark; examine whether each published percentage follows from the printed inputs. Name the denominators, timing mismatch and unobserved quantities needed before a causal employment claim can be made. Respect workers and businesses: do not name or accuse a borrower. Distinguish approved net loan dollars from disbursements, reported workforce exposure from measured effect, and program intent from demonstrated outcomes. Do not turn a discrepancy into a claim that aid had no effect.
    
    Write only audit.py, analysis.json, check.py, and analysis.html. audit.py parses all four source files, not remembered constants, and produces analysis.json with a source ledger, national lender buckets, separate national loan-size buckets, Delaware loan-size groups and sampled rows, reconciliations, editorial call, scope/timing caveats and unknowns. check.py independently reparses all inputs without importing or running audit.py; calculate the important totals by another method, compare every decision-critical JSON amount and tagged HTML value, validate source links and dates, and reject a made-up jobs-saved count, a national jobs-by-loan-size breakout invented from the Delaware file, a missing field silently recoded as an observed zero, or a fabricated counterfactual. Its --self-test makes at least three distinct in-memory corruptions one at a time and demonstrates rejection without editing the files.
    
    Make analysis.html a complete self-contained offline editorial evidence desk, not a generic dashboard. Lead with the editorial call, the dated official claim, July national measure, and unanswered question. Include a source-linked inline SVG sorted zero-baseline bar chart of reported jobs by the three Delaware loan-size groups, with Delaware and under-$150,000 scope, units, source PJ7, and all underlying values unmissable; independently exhibit the separate national totals and their PJ4 citation. Give the reader a useful control to inspect one loan-size group's reported count and field coverage or open the exact published source excerpt: click or keyboard action must visibly change substantive text or data, not just colors. All original groups and figures remain readable as semantic HTML with JavaScript off. If an optional denominator calculation is added, label assumed denominators as hypothetical and never call the quotient an effect.
    In reader-facing HTML use fully written dollar amounts everywhere: write $50,000 and under, over $50,000 to $100,000, over $100,000 to $150,000, and so on, never $50k, $1m, "150 thousand", "$000", or a USD-k key. This applies to table labels and cells, buttons, dynamic inspection text, SVG text, <title>, <desc>, accessibility labels, and embedded JavaScript strings. Keep the numeric source files, printed brackets, source units, parsing, and checksums verbatim; a source's abbreviated units may be reproduced in HTML only inside a clearly labeled verbatim source quotation. Preserve the same bracket boundaries, including "over" versus "and under."
    
    Make the result look designed for its subject, not like a default dashboard: a dated newspaper correction or annotated press statement is a fitting motif. Lead with a clear display heading, readable body, one restrained accent and source/date marks. No pie/donut, mixed units on one plot, external font, CDN, external runtime assets, animation-dependent evidence or invented charts. At 390 pixels wide, the page fits the screen. No word or amount ever breaks mid-word; narrow tables become stacked cards. Long random-sample formulas and checksums must NOT appear as one unbroken string inside a stacked table cell: show a short human-readable method label there and link to PJ7 for the exact expression, or break the expression at punctuation into separate semantic lines without breaking a word or amount. No table, SVG, code or disclosure may make document.documentElement.scrollWidth exceed innerWidth at 390 pixels, including near the bottom of a long page and after a control is used. At 1280 pixels it stays readable. Do not use overflow-wrap:anywhere or word-break:break-all. Every number and working citation must be in plain HTML with JavaScript off. Use reduced-motion-safe inline JavaScript only for progressive interactivity, with reset or full static equivalent.
    
    Run python3 audit.py, python3 check.py and python3 check.py --self-test and report their exit codes.

    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/analysis.html in your web browser (double-click it), then:

    Human check: PJ4: seven lender-asset groups sum to 4,885,388 loans and 51,125,937 reported jobs, a reported-at-approval count, not jobs saved. PJ7 Delaware original-vintage loan slice (10,431 loans up to $150,000): 20,706 + 15,243 + 11,465 = 47,414; 950 + 222 + 106 = 1,278 blanks, kept distinct from 1,439 + 244 + 79 = 1,762 explicit zeros. Loan dollars total $392,158,493.26. The seeded 20-row excerpt has three blanks and three explicit zeros; its SHA-256 starts 0a8f8045e1d1 and the source CSV's starts 381235069500 (full hashes in loan-slice.txt). PJ4's national 51,125,937 / 59,900,000 Census benchmark = 85.35%, not its printed 'as much as 84%' from those rounded numbers alone. PJ1's 'supported or saved 30 million American jobs at least' is April 28; PJ4's count through June 30 released July 6 cannot establish an April saved-jobs effect. Compare no-PPP counterfactual and at-risk jobs denominator as unknown; run independent checker and self-test.

    When we checked the recording above: Pinned openai-codex/gpt-6-sol clean OMP process; exit 0, four files, source inputs unchanged. Independent check.py and --self-test pass (four corruptions rejected). HTML amount regex zero hits across recorded pages, national and Delaware loan brackets and SVG title/desc show fully written USD values. Chromium 390/1280 and JS-off fit without horizontal overflow; 390 expanded disclosures fit; button changes substantive Delaware numbers.

Then prove it: fresh sessions

Each run below is a brand-new session, recorded for real in OMP. 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 audit and the employment estimate

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 original inputs, including loan-slice.txt, and your frozen outputs first; then read outcomes.txt and the added OUTCOME_SOURCES.csv. Do not alter inputs or prior outputs. No network, file access outside the folder, installs, APIs, or replies. Python 3 standard library only. Do not use em dashes or en dashes. This is a fresh session: material first published after July 2020 must never appear in the 2020-known column. Quote named people's claims only from dated records with URLs. Do not accuse any named borrower.

Write only reveal.json, reveal.html, and reveal-check.py. Parse the frozen national totals, the Delaware original-vintage loan-slice scope, and the later excerpts into reveal.json. Create a complete self-contained offline evidence page with two plainly dated columns, what July 2020's public counts established and what the separately dated inspector-general report and research later found or estimated. The Delaware group arithmetic is a subset check, never a national jobs denominator or a new population-wide causal estimate. Keep original file's JobsRetained field name distinct from any later renamed field. Preserve exact units and timing: missing-job-field categories in the later audit may overlap, and a later causal employment estimate is neither the originally observed workforce count nor unique jobs guaranteed permanently. Do not recast the inspector-general's observations as proof that all loans were fraudulent, or imply one study settles all estimates. Keep the April claim at its April date and the July release at its July date. Make a source-linked inline SVG dated timeline or zero-baseline same-unit comparison with source IDs and complete accessible HTML figures; compare quantities with differing definitions only when explicitly labeled, never as a direct like-for-like time series. Add a touch/keyboard accessible disclosure that opens a consequential source excerpt and visibly changes the reader's evidence; both dated columns and every key number remain ordinary visible semantic HTML without JavaScript. At 390 pixels wide the page fits; no word or amount ever breaks mid-word; narrow tables become stacked cards. No external assets, CDNs or runtime fetches. No em dashes or en dashes. Keep motion optional and reduced-motion safe.
In reader-facing reveal.html spell out every monetary amount in full, including loan-size bracket labels, table cells, timeline and SVG <title>/<desc> text, accessibility labels, controls, and JavaScript strings: $50,000, $100,000, $150,000, $1,000,000, not $50k, $1m, "150 thousand", "$000", or USD-k keys. Keep source files and source units verbatim; abbreviated original units may appear only as a clearly labeled verbatim source quotation. Preserve exact "over" and "and under" boundaries for the three Delaware brackets.

reveal-check.py must independently parse both source packets, including Delaware loan-slice.txt, without importing audit.py, recompute national and sample totals and later numeric disclosures, verify JSON and tagged HTML figures, reject post-2020 information placed in the earlier column, Delaware extrapolation to a national total and unsupported causal statements, and demonstrate at least three separate in-memory corruptions rejected with --self-test. Run python3 reveal-check.py and python3 reveal-check.py --self-test and report exit codes.

Human check: PJ7's 10,431 Delaware small-loan rows include 1,278 blank and 1,762 zero JobsRetained fields; this is not the national missingness figure. PJ5, January 14, 2021, reports 191,003 loans missing required current employees; 148,019 missing both fields (overlaps first set); and 845,778 missing jobs-retained data. Its point is data quality, not a conviction count. PJ6, issued April 2022 and published in Journal of Public Economics in 2022, estimates an additional 3.6 million jobs as of mid-May 2020 and 1.4 million at end-2020, not directly observed jobs saved or the same date/measure as PJ4's 51,125,937 jobs reported. Run reveal-check.py and --self-test; confirm dates, scope, citations and interactive excerpt.

When we checked the recording: Fresh pinned openai-codex/gpt-6-sol OMP process; exit 0, three reveal files, source inputs and frozen outputs unchanged. Independent reveal-check.py and --self-test pass (five corruptions rejected). HTML amount regex zero hits; Delaware bracket labels use full dollar numbers. Chromium 390/1280 JS-on and JS-off fit; expanded excerpt fits at 390; dates and source scopes preserved.

Do it for real

If you audit a present-day public jobs announcement, obtain the original date-stamped underlying release, definition of the count, missingness audit and a defensible comparison group before saying what a program caused. Report workers' stakes without blaming individual applicants for field-level gaps. This historical exercise is not a finding about any named borrower's eligibility.

Why an agent, not a chat window

The agent parses both an official dated national aggregation and a compact, checkable slice of the original July loan-level release, reconciles jobs and loan counts in disjoint loan-size groups, then tests whether any of those counts establish an employment effect. A separate checker audits its numbers and HTML; a fresh session opens the later federal audit and independent research estimate.

Go deeper

Why the prompt is written this way

The recorded runs

ToolModelFirst run tookFiles madeSessions
OMP 18.10.4openai-codex/gpt-6-sol6 min 28 s4first session + 1 later

Push it further