Skip to content
The Liberation Engine

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

Could this apartment deal carry its own mortgage?

A 2007 financing prospectus offers a glimpse of one of New York's biggest apartment deals before its outcome was known. Rebuild coverage from actual 2006 income, then expose the growth behind its future-income case. A later, separate session opens the public record of what happened.

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

Make your own

  1. Get the files

    Download the practice folder (ZIP)

    Unzip it: you get a folder called cli-practice with 3 practice files. Public 2007 CMBS collateral excerpt, 2006 acquisition announcement and source URLs only. The court ruling and default statement are held back 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 collateral.txt, acquisition.txt, and SOURCES.csv. Do not change these inputs, read outside the folder, use the network, install packages, or ask for a reply. Python 3 standard library only. Do not use em dashes or en dashes. The folder is frozen at the March 2007 prospectus: nothing that happened later is available to you.
    
    Your job is a historical investment debt-stress audit, NOT a refinancing cash-needed calculation. For each year's reported historical NOI, compute coverage against annual interest on the WHOLE senior interest-only mortgage at the filed coupon, the change between years, and NOI divided by the disclosed transaction price. Compare the filed forecast NOI with observed 2006 NOI; determine the total and annual compounded growth the forecast needs over the intervening years, and the NOI required merely to cover that senior interest. Explain which filed ratio uses a future underwriting year, and keep the filed ratio distinct from a simple coupon-based forecast coverage proxy if they differ. Keep the trust's share of senior debt, whole senior mortgage, and separate mezzanine principal in different labeled columns; no double counting. Make dated assumptions, source IDs, formula and units explicit. Show why occupancy or average rent alone cannot reconstruct collections or legal deregulation. Where there is no lender offer, payoff, exact 2010 cash or complete operating ledger, label the resulting refinance gap and an all-in debt service or mezzanine coverage UNKNOWN rather than inventing them. This is historical education, not investment or legal advice.
    
    Write only audit.py, analysis.json, check.py, and analysis.html. audit.py must parse the original input documents to compute analysis.json and include an input/source ledger, yearly historical coverage, senior interest, forecast comparison and unknown fields. Do not copy constants from a remembered answer into the outputs. check.py must independently re-read the original inputs, without importing or running audit.py, calculate the material amounts by a different method, and compare every decision-critical JSON figure and its tagged value in HTML. Reject an absent citation, a projected year disguised as historical, the trust slice used as the whole mortgage, or a numeric refinance funding gap. Its --self-test changes at least three distinct JSON values one at a time in memory, proves each is rejected and leaves source files unchanged.
    
    analysis.html is a designed, self-contained, offline evidence room, not a generic dashboard. Lead with the sourced income-to-interest bridge and an explicit historical versus forecast split, then a compact source-linked inline SVG bar chart of historical NOI by date with the forecast visibly distinguished from observations: dollars as units, zero baseline, readable labels and source IDs. Include the underlying complete numeric rows as ordinary semantic HTML. Give a useful bounded control for assumed NOI growth: let a reader choose a labeled hypothetical growth rate and see the recomputed future NOI and senior coverage beside the immutable filed scenario and actual 2006 baseline. Do not turn the assumption into a forecast or probability; static HTML must already contain all decision-critical baseline numbers, source links and unanswered questions even with JavaScript disabled. Both mouse and keyboard must cause visible numeric/text change. 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. Also fit a 1280-pixel desktop. No external assets, APIs, fonts, CDNs or network at runtime. Inline SVG scales within its parent. Honor reduced motion. Chart values and visible HTML numbers must match check.py; if the display differs from the numeric output, fail closed. Cite every filed number by SOURCES.csv ID with direct URLs. Show the tenants' housing interests as a human stake, without imputing blame or claiming a later court result was predictable.
    
    Run python3 audit.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: Recalculate from ST1: $3,000,000,000 times 6.4340 percent equals $193,020,000 annual senior coupon interest; 2006 NOI $112,242,474 covers this 0.5815 times, a shortfall of $80,777,526. The projected 2011 NOI $336,156,380 is 2.9949 times 2006 NOI, requiring about 24.53 percent compounded annual NOI growth over five years. The prospectus's reported underwritten coverage is 1.71 times, NOT the 1.7416 coupon-only proxy; explain rather than silently equate them. The $800 million trust note is just part of the $3 billion mortgage and the $1.4 billion mezzanine is additional. No public refinance gap can be calculated. Run checker and self-test; confirm source IDs and no hindsight in initial page.

    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 lesson human check and the other tool's run; headless sweep at 360/375/390 with all disclosures open and after every control, then resized 400-1300 in 4px steps: nothing 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 outcome 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 the original frozen sources and your prior outputs first, then read outcomes.txt and the added OUTCOME_SOURCES.csv. Leave all inputs and all prior outputs unchanged. No network, file access outside the folder, installs, APIs, or replies from me. Standard Python 3 only. No em dashes or en dashes. This is a FRESH historical session: no later facts may be falsely presented as knowable in 2007.
Write only reveal.json, reveal.html, and reveal-check.py. Build an interactive, self-contained offline HTML page with two dated evidence columns: what a reader could calculate in March 2007 versus what the later official court and state statement actually establish. Keep the original 2006 coupon coverage and filed future-NOI growth hurdle in the pre-outcome column; cite each to ST1/ST2. In the outcome column cite ST3 and ST4, distinguish the legal J-51 ruling from the observed missed mortgage payment, and state that neither by itself supplies the realized 2011 NOI, a 2010 refinance offer, all-in debt service, or owner cash. The legal position before 2009 was contested, not a predictable adjudication. Use an inline dated timeline and a native disclosure or accessible comparison control that reveals the later outcome evidence and changes visible text with pointer and keyboard; ordinary HTML must contain the complete answer when scripts are off. At 360 pixels wide and wider, the page fits the screen and nothing scrolls sideways, not even inside a table, chart or timeline box; 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. All content local, no external runtime fetches, reduced-motion support.
reveal.json must include the old computed historical figures, the revealed dated facts and URLs, and explicit unknowns. reveal-check.py independently reads both source folders (without importing or invoking audit.py), recomputes the pre-outcome figures, checks reveal.json and tagged decision-critical numbers in reveal.html, rejects future facts in the 2007 column and fictitious realized NOI; --self-test catches three separate in-memory corruptions. Run python3 reveal-check.py and python3 reveal-check.py --self-test; report exit codes.

Human check: Original historical senior coverage stays 0.5815x; source ST3 is the October 22, 2009 Court of Appeals J-51 ruling and ST4 the January 8, 2010 New York State Senate statement about a missed payment. The opinion is not a 2007-known fact or a claim of sole causation; no realized 2011 NOI or exact refinancing gap is in the packet. Run reveal-check.py and its self-test; check both date columns and live 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 lesson human check and the other tool's run; headless sweep at 360/375/390 with all disclosures open and after every control, then resized 400-1300 in 4px steps: nothing past the edge, no sideways scroller, no printed URLs; controls change visible text; no external requests

Do it for real

For a live apartment loan, use actual property operating records, complete senior and mezzanine loan documents, documented reserves, payoff and lender terms. Remove tenant identifiers and financial account information before sharing with any model. Have a housing attorney review rent rules and a licensed professional check financing before acting. This public case is historical teaching, not investment advice.

Why an agent, not a chat window

The agent parses a real filed collateral table and its footnotes, computes historical versus forecast serviceability and growth from cited inputs, and independently checks its own display. A fresh session receives the later court opinion and default statement to compare a frozen 2007 analysis with documented events without hindsight leakage.

Go deeper

Why the prompt is written this way

The recorded runs

ToolModelFirst run tookFiles madeSessions
Claude Code 2.1.300claude-opus-5-56 min 38 s4first session + 1 later
OMP 18.11.0not logged by this tool18 min 03 s4first session + 1 later

Both found senior coupon interest of $193,020,000 against 2006 NOI of $112,242,474, about 0.58 times coverage, and the 24.53 percent a year of NOI growth the filed 2011 projection needs, and both left the refinancing gap unknown. Claude Code's page moves a hypothetical growth rate one point at a time, with a reset. OMP adds presets for flat growth, the rate that just covers interest and the rate that reaches the filed NOI, and shows its 1.7416x coupon-only proxy beside the filed 1.71x ratio without rewriting it. Both independently checked the dated reveal.

Push it further