Skip to content
The Liberation Engine

The claim against the record / Lesson 3 of 5 · Decide

Could the Afghan force fly after the contractors left?

On July 8, 2021, a public confidence claim met a maintenance record full of dependencies. Build the sustainment case from what was known that day, then open the dated record of the collapse.

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 dated collapse record.

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. The packet is frozen at July 8, 2021: the President's remarks, the April SIGAR quarterly report, and the March DoW Lead Inspector General report. The August outcome and later evaluation are held for a fresh 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 inside this practice folder using only samples/records.txt and samples/SOURCES.csv. Do not change these inputs. Do not use the network, install packages, read outside the folder, or ask for a reply. Use Python 3 standard library only. Do not use em dashes or en dashes. The historical packet is frozen at July 8, 2021. Do not use any fact from later than that date.
    
    Build a sustainment audit for a decision maker on July 8, 2021. The question is whether the Afghan force could sustain aircraft and logistics after contractor support and U.S. forces left. Do not answer with a fake probability. Instead, trace what the sources establish, what they suggest but do not prove, and what remains unknown.
    
    Write only audit.py, analysis.json, check.py, and analysis.html. audit.py must parse the source text rather than copying remembered constants. Create a source ledger with source IDs, exact dates, URLs, page references, and each claim's status as observed, quoted assessment, or unknown. Extract the force-strength figure, aircraft inventory and usable count, qualified aircrew positions, each airframe's maintainer fill percentages, contractor maintainer counts, the C-130 qualified-versus-required maintainer comparison, and the report's stated few-months sustainment bound. Compute shares and totals with units. Build a dated scenario table with at least three clearly labeled cases such as continued contractor support, remote or partial support, and no contractor support. Do not assign probabilities. Every scenario must distinguish sourced facts from your bounded assumption and list the observation that would falsify or revise it. Do not claim that maintenance readiness alone predicts political cohesion, battlefield performance, or the timing of a government collapse.
    
    analysis.json must include the parsed evidence, arithmetic, dated scenario bounds, explicit unknowns, source URLs, and a conclusion that answers the call without hindsight. check.py must independently re-read the original source files, without importing or invoking audit.py, calculate the decision-critical figures by a different method, compare every such JSON value with the tagged values in HTML, verify the source IDs and dates, reject any post-cutoff fact or probability presented as a finding, and require all three scenario cases. Its --self-test must exercise at least three separate in-memory corruptions, including a changed source-derived number, a changed date, and a removed unknown or scenario.
    
    Make analysis.html a complete, self-contained offline evidence room that opens from disk and on a static website. Put the baseline finding, every important claim, the complete evidence, source links, and all decision-critical numbers in ordinary HTML first so it remains usable with JavaScript disabled. 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 or code box; charts 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 as page text; narrow tables become stacked cards; each source shows as a short named link with its URL in the link, never printed as page text. Lead with the sustainment bridge, then show a responsive table of aircrew, aircraft, maintainer, and contractor evidence. Include a source-linked inline SVG chart with a zero baseline and units comparing aircraft inventory versus usable aircraft and qualified versus total aircrew positions. Use source IDs beside marks and provide the full numeric rows in semantic HTML. Add one meaningful interaction: let a reader switch among the three bounded support scenarios and visibly reveal the changed sustainment interpretation, assumptions, and falsifier while keeping the immutable sourced baseline visible. Make the control touch and keyboard friendly, bounded, and usable with reduced motion. The static HTML must still show all baseline numbers and the scenario bounds without JavaScript.
    
    Use only local files and inline CSS, JavaScript, and SVG. Do not use a CDN, external asset, external font, or network request. Every displayed number must be computed from parsed source content and checked. Do not describe the later collapse in this first page, and do not put the answer in a hidden script or metadata. Run python3 audit.py, python3 check.py, and python3 check.py --self-test and leave only the four requested files.

    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: From AF2, verify 307,947 ANDSF personnel; 162 aircraft in inventory and 143 usable, or 88.2716 percent; 42 qualified aircrew positions required and 18 filled, or 42.8571 percent; contractor maintainers total 409 across A-29 39, AC-208 41, C-130 25, MD-530 106, and UH-60 198; and C-130 qualified maintainers 9 versus 60 required, or 15 percent. Verify AF2's quoted assessment that without continued contractor support none of the airframes could be sustained as combat effective for more than a few months, depending on parts, maintenance capability, and withdrawal timing. The July 8 page must not use later events or a numeric probability. Run checker and self-test, confirm the three dated scenario cases and source IDs, and confirm the page's interaction changes interpretation while the baseline remains visible.

    When we checked the recording above: Re-recorded with the 360-and-tablet layout prompt after the earlier Claude Code run scrolled sideways near 768px. Clean-folder rebuild: checks and self-tests exit 0, no inputs changed; 307,947, 143 of 162, 18 of 42, 409 contractors and C-130 9 of 60 present, reveal dates August 15/16 2021 and February 28 2023; sweep at 360-1280 after every control and 400-1300 resize fit.

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 dated collapse record

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 inside this practice folder. Read your prior audit.py, analysis.json, check.py, and analysis.html plus the original samples/ files first. Then read later/reveal/outcomes.txt and later/reveal/OUTCOME_SOURCES.csv. Leave every input and prior output unchanged. Do not use the network, install packages, read outside the folder, or ask for a reply. Use Python 3 standard library only. Do not use em dashes or en dashes. This is a fresh historical session: keep the July 8, 2021 column limited to what the original packet established, and put all later facts in a separately dated reveal column.

Write only reveal.json, reveal.html, and reveal-check.py. Preserve the original blind arithmetic and the three scenario bounds. Build a self-contained offline evidence room with two dated columns: what could be known on July 8, 2021, and what the August 16, 2021 presidential record plus the February 28, 2023 SIGAR evaluation establish later. Include a dated timeline: the Taliban reached Kabul and President Ghani fled on August 15, 2021, and SIGAR's evaluation says six of seven ANA Corps had surrendered or dissolved by then. Quote and source the August remarks accurately, including that events unfolded more quickly than anticipated. Do not turn the reveal into a single-cause accusation. Preserve SIGAR's multicausal account, including the withdrawal decision, changed support, failure to become self-sustaining, political leadership changes, the absence of a national security plan, and exploitation of weaknesses. Keep the distinction between the April record's few-months aircraft sustainment bound and the later evaluation's statement that the AAF was not projected to be self-sufficient until at least 2030.

Include a source-linked inline SVG timeline or comparison chart, all numbers in ordinary HTML with JavaScript off, and one meaningful interaction that reveals a cited later finding or toggles the two dated columns without hiding the baseline. 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 or code box; charts 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 as page text; narrow tables become stacked cards; each source shows as a short named link with its URL in the link, never printed as page text. Do not use external assets or network requests.

reveal.json must include the original computed figures, the dated outcome facts, source IDs and URLs, explicit unknowns, and a distinction between what the blind record could establish and what later records establish. reveal-check.py must independently re-read both source folders without importing or invoking audit.py, recompute the pre-outcome figures, verify every decision-critical value tagged in reveal.html, reject later facts in the July 8 column, reject a fictitious realized aircraft availability or invented causal certainty, and require the August 15, August 16, and February 28 dates. Its --self-test must catch at least three separate in-memory corruptions. Run python3 reveal-check.py and python3 reveal-check.py --self-test and leave only the three requested files.

Human check: The blind figures remain 307,947 ANDSF personnel, 162 aircraft with 143 usable, 18 of 42 qualified aircrew positions, 409 named contractor maintainers, and C-130 9 of 60 qualified maintainers. AF4 is dated August 16, 2021 and states rapid collapse, that the Afghan political leaders fled and the military collapsed. AF5 is dated February 28, 2023 and records that the Taliban reached Kabul and President Ghani fled on August 15, that six of seven ANA Corps had surrendered or dissolved, and that the AAF was not projected to be self-sufficient until at least 2030. Preserve the distinction between a few-months sustainment assessment and the later multicausal evaluation. Run reveal-check.py and its self-test; confirm both date columns, source links, unknowns, and live interaction.

When we checked the recording: Re-recorded with the 360-and-tablet layout prompt after the earlier Claude Code run scrolled sideways near 768px. Clean-folder rebuild: checks and self-tests exit 0, no inputs changed; 307,947, 143 of 162, 18 of 42, 409 contractors and C-130 9 of 60 present, reveal dates August 15/16 2021 and February 28 2023; sweep at 360-1280 after every control and 400-1300 resize fit.

Do it for real

For a current public-sector or operational decision, preserve the as-of cutoff, obtain primary records, label estimates and unknowns, and have subject-matter experts review safety-critical conclusions. This historical case is for evidence practice, not a forecast or operational advice.

Why an agent, not a chat window

The agent can parse the same dated tables across oversight records, calculate maintainers and aircrew coverage, preserve unknowns, and produce a scenario ledger that separates evidence from assumptions. A fresh session then compares the blind call with the August collapse and the later SIGAR evaluation without rewriting history.

Go deeper

Why the prompt is written this way

The recorded runs

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

Both reached 143 of 162 aircraft usable and 18 of 42 qualified aircrew positions filled, and both let a reader switch among the three bounded support scenarios with radio buttons while the sourced baseline stays in view. Claude Code's self-test rejected 10 planted corruptions, and its reveal checker recomputed 88 pre-outcome and 22 later figures, with a button that shows the July 8 record alone. OMP's self-tests rejected 11 and 23 corruptions, and its reveal uses radio buttons to move between the two dated columns.

Push it further