Skip to content
The Liberation Engine

Real deals: real estate / Lesson 5 of 5 · Decide

Could a pension pay retirees without selling its buildings?

Dallas police officers and firefighters trusted a pension whose investments included hard-to-sell property. Freeze the record before the crisis, decide how much cash to defend, then open the dated outcome in a second session.

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 pension outcome.

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. A dated 2015 pension annual report excerpt and source ledger available by November 1, 2016. Later withdrawals, asset sales and pension legislation remain sealed until the reveal 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 pension-2015.txt and SOURCES.csv. This decision is frozen as of November 1, 2016; the filing's asset snapshot is December 31, 2015, NOT a November 2016 balance. Leave both inputs unchanged. No outside files, network, installs, APIs, or further replies. Python 3 standard library only. Do not use em dashes or en dashes.
    
    Act as a skeptical trustee asked whether to protect a liquidity reserve and establish an orderly sale policy for property and private assets before an unexpected surge of withdrawals. Parse the audited investment detail, fiduciary statement and DROP table, converting the latter's thousands to dollars. Separately read the consultant's asset-allocation presentation, but do not substitute its values for audited cash or pretend its different accounting bases reconcile exactly. Quantify real-estate and private-equity concentrations, baseline cash plus short-term investments as a limited proxy, DROP account exposure and several explicitly hypothetical fractions withdrawn. Contrast property targets and explain why yearly benefit outflows, notes payable and possible collateral demands mean the proxy is NOT free cash or a forecast. Write a specific reserve/sale-policy recommendation with a trigger and a source-backed unknowns list: no assumed cap rate, parcel income, appraisal haircut, exact 2016 cash, withdrawal timing, property sale schedule, unconditional credit-line availability, or point forecast for a run. Do not mistake the DROP account balance for a bank deposit pool or assume every member can withdraw the entire aggregate at once. Do not infer a legal power to stop distributions in 2016 from later law. State your call before seeing the outcome.
    Express converted DROP figures in explanatory prose, chart labels and JSON derivations as full dollar amounts. Preserve exact source wording and original units only in clearly labeled source quotations or as-printed ledger fields; explain that each source table entry must be multiplied by 1,000. Never treat an unconverted table entry as a dollar figure.
    
    Write only model.py, analysis.json, check.py, and analysis.html. model.py reads source files to generate JSON with an input ledger, unrounded dollar inputs, computed concentration and scenario arithmetic, separate audited-versus-consultant conventions, recommendation and unknowns. check.py independently reads the original excerpts without importing or running model.py, recomputes decision-critical values by another method and compares them against JSON AND machine-tagged visible HTML text. It must reject missing citations, wrong unit conversion, treating the full DROP liability as due immediately, falsely declaring audited and consultant cash equal, or inventing a real-estate cap rate or parcel income. Its --self-test must deliberately corrupt at least three distinct in-memory JSON or HTML values, show each is caught, and never alter source files.
    
    Make analysis.html a complete self-contained offline editorial trustee's evidence room, not a generic dashboard. Lead with the consequential cash-versus-obligation distinction and an actionable reserve/sale-policy decision. Draw a source-linked inline SVG sorted zero-baseline bar chart of comparable audited asset categories with dollars as units, correct source row and clear distinction between asset value and immediately spendable cash; present every source number and derived decision-critical number in semantic text HTML too. Add one labeled, bounded hypothetical DROP withdrawal fraction control that visibly recalculates demand and uncovered amount beside an unchanged sourced baseline, with a meaningful default and reset. It is a mechanical stress, not an estimated likelihood. Include source URLs and a small explicit unknowns list. Design for this subject: a clear decision bridge and restrained ink/paper contrast, not decorative theater. At 360 pixels wide and wider, the page fits the screen and nothing scrolls sideways, not even inside a table or chart box; the chart scales to the width; no word or amount ever breaks mid-word; narrow tables become stacked cards; each source shows as a short named link with its URL in the link, never printed as page text. Inline CSS/JS/SVG only, no external assets, fonts, requests or CDN; responsive at 1280 too. Full evidence, sources, recommendation, scenario baseline and every number remain in ordinary HTML when JavaScript is off. The action must work with touch and keyboard, visibly changing a real figure; restore resets it. Respect reduced motion. Never include later events in this blind page.
    
    Run python3 model.py, python3 check.py, and python3 check.py --self-test and report 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: From DP15's audited December 2015 tables: real estate $651,936,804 plus private equity $445,014,054 = $1,096,950,858, or 38.79% of $2,827,858,515 total investments. Cash $77,072,359 plus short-term investments $29,986,714 = $107,059,073, only 7.06% of combined and supplemental DROP balances ($1,505,721,000 plus $10,894,000 = $1,516,615,000). Hypothetical 10% withdrawal is $151,661,500 and exceeds the cash/short-term proxy by $44,602,427; 20% is $303,323,000 and exceeds it by $196,263,927. This is NOT actual cash immediately available or a run forecast. Consultant reports property 23.48% and private equity 15.34% using different conventions; March 2016 targets property 12% and private equity 5%. Verify independent checker, self-test, page source links, no hindsight.

    When we checked the recording above: 2026-10-14 re-record (360px prompt): exit 0, no changed inputs; in a clean rebuilt folder the lesson checks and self-tests all exit 0; headline call and key figures match the other tool's checked run; headless sweep at 360/375/390/800/1024/1280 with all disclosures open and after every control: no element past the edge, no sideways scroller, no printed URLs; controls change visible text; no external requests

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 pension outcome

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

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

Work only inside this practice folder. Read original frozen sources and prior outputs first, then outcomes.txt, law-2017.txt and OUTCOME_SOURCES.csv. Do not change any existing file. No outside files, network, installs, APIs, or replies. Python 3 standard library only. Do not use em dashes or en dashes. This is a fresh session: later events were not known as of November 1, 2016.
Use full dollar amounts in your own prose, chart labels and JSON derivations for the original DROP entries. Keep the source's original table unit only in clearly labeled source quotations or as-printed ledger fields, and explain conversions explicitly. Never present an unconverted source entry as a dollar-denominated result.

Write only reveal.json, reveal.html, reveal-check.py. Compare the frozen decision with dated outcomes in two unmistakable evidence columns: what was knowable from the earlier filing versus what the later report and enacted law establish. Read the later report's descriptions of withdrawals, sales, year-end property allocation, cash effects and temporary halt; the legislative summary and actual enrolled statute's exception language. Give source IDs, linked URLs and dates for each, separate changes in asset values from the cash paid to members, separate board policy from statute, and distinguish total fund-sale proceeds approved from amounts received before year-end. Do not imply that the blind stress fraction forecast the actual run or that asset losses alone caused it. Legislation restricts certain distributions subject to exceptions; do not suggest every future lump payment is impossible. No invented realized property cap rate, final sale price, exact November cash, post-reform funding guarantee or named-person motive.

Reveal page: a self-contained offline editorial two-column evidence spread with a dated timeline, original figures shown in normal text beside outcome figures, source-linked inline SVG chart comparing ONLY comparable disclosed amounts on a zero baseline, and a touch/keyboard-friendly native disclosure that unveils a substantive quoted later-record passage and changes visible evidence. At 360 pixels wide and wider, the page fits the screen and nothing scrolls sideways, not even inside a table, chart or timeline box; charts scale to the width; no word or amount ever breaks mid-word; narrow tables become stacked cards; each source shows as a short named link with its URL in the link, never printed as page text. No external assets or network requests; all decisive numbers and source links must remain in plain HTML with JavaScript disabled, even if a disclosure adds detail. Use restrained hierarchy and reduced-motion support.

Independently parse both original and later source files in reveal-check.py without importing or invoking model.py. Check every material JSON number and tagged visible HTML figure, both time columns and source URLs, and reject later facts in the pre-cutoff column or overstated legal ban. --self-test must catch at least three independent in-memory corruptions. Run python3 reveal-check.py and python3 reveal-check.py --self-test and report exit codes.

Human check: Keep frozen DP15 cash/short $107,059,073 against DROP $1,516,615,000. DP16 dated July 25, 2017 reports over $600 million lump-sum DROP payments during 2016, compared with $81 million in 2015; December 2016 temporary lump-payment halt, January 2017 revised policy, and 25.7% property share versus 12% target at end-2016. Its management discussion gives $133 million secondary sale proceeds before 2016 year-end and $113 million in 2017, rather than treating all $246 million as 2016 cash. TX17/TX17S describe HB 3158 restrictions with hardship exceptions and May 31/September 1, 2017 effective-date distinctions. These later observations do not prove a particular hypothetical blind stress was a prediction. Re-run independent checker/self-test, verify date columns, source links and substantive disclosure.

When we checked the recording: 2026-10-14 re-record (360px prompt): exit 0, no changed inputs; in a clean rebuilt folder the lesson checks and self-tests all exit 0; headline call and key figures match the other tool's checked run; headless sweep at 360/375/390/800/1024/1280 with all disclosures open and after every control: no element past the edge, no sideways scroller, no printed URLs; controls change visible text; no external requests

Do it for real

For an active pension plan, obtain current bank and custodial statements, legally payable withdrawal schedules, borrowing covenants, unfunded investment commitments and dated independent property offers. Protect members' private information and have fiduciary, actuarial and legal professionals review any proposed reserve or sale. This public historical exercise is not investment or legal advice.

Why an agent, not a chat window

An agent joins audited asset and DROP tables with a separate consultant allocation, reconciles incompatible denominators and writes a tested independent cash-stress checker. A fresh session opens the subsequent official report and enacted law without changing the original decision.

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 15 s4first session + 1 later
OMP 18.11.0openai-codex/gpt-6-sol6 min 52 s4first session + 1 later

Both made the same call: protect a liquid reserve and prepare staged property and private-asset sales, against the $107,059,073 cash proxy and the $1,516,615,000 DROP balance. Claude Code added the break-even: a hypothetical withdrawal of 7.06 percent of the DROP balance uses up the whole proxy, which covers about 6.26 months of 2015 benefit payments; its page moves the hypothetical share one point at a time, up to 50 percent. OMP, run on openai-codex/gpt-6-sol, used a slider from 0 to 15 percent. At the shared 10 percent default the demand is $151,661,500 and $44,602,427 is uncovered.

Push it further