Skip to content
Changelog, page 21

What shipped, and when.

A day-by-day record of what landed in Underwrite, kept by hand. Page 21 of 23.

Want to verify? The six files the decision depends on are rendered from the live source at /methodology/engine.

Show only

Filter by engine, UI, AI, ops, marketing or fixes.

2026-05-13
15 entries

Monte Carlo, Deal Strength composite score, sensitivity curves, break-even cushions, risk-adjusted returns, tenant concentration, hotel ops overlay, GP coinvest sweep, debt sizing optimizer, NOI decomp, a below-NOI leasing-capex parser, and 15 more analytics. The day the memo went from 'pro forma + waterfall' to 'institutional IC packet.'

  1. Each tenant lease can now carry a downtimeMonths field, the vacant period between this lease expiring and the next lease commencing at market. Engine applies it at whole-year resolution, zero-renting the rollover year and pushing the re-lease commencement (with its TI/LC and free rent) one year forward. Closes the last item on the office /beyond-phase-1 rent-roll TODO. Typical institutional ranges baked into the AI parser hints: office 6-12mo, retail 3-9mo, industrial 4-8mo.

  2. New section: per-tier hurdle dollars, LP/GP split percentages, and LP/GP dollar share for each of the 4 tiers, plus a totals row. Pro Forma table also gains 'Debt Service' (senior + mezz when present) and 'Equity CF' rows so the IC can read income → debt service → equity flow on one table. Cash-on-Cash row shows per-year equity yield.

  3. New section on the IC memo: 1,000 trials sampling rent growth (±200 bps), exit cap (-50 bps to +100 bps), and vacancy (base to 2× base) from triangular distributions, with the full deterministic DCF re-running on each trial. Output: P10/P25/P50/P75/P90 IRR percentiles, mean, dispersion (stdev), histogram of the distribution, and hit-rate probabilities vs the 15% and 12% thresholds. Seeded Mulberry32 PRNG keeps the trial cloud byte-identical across reloads. Canonical Cherry Street values locked in regression.

  4. Engine fix. Earlier versions folded TI/LC into NOI, which understated DSCR on rent-roll deals: a lender sizing on Y1 DSCR was seeing operating income already net of leasing capex, but institutional capital sources, sponsor models and credit committee memos test DSCR on NOI proper. Pro Forma table now shows Leasing Capex as a separate below-NOI line with 'Cash Flow After Capex' breakout; xlsx PRO_FORMA sheet matches. Cherry Street is byte-identical because it has no rent roll; Pine Tower and rent-roll deals now show institutionally correct, higher DSCR.

  5. Optional value-add / ground-up overlay. Engine linearly interpolates vacancy from a higher lease-up start rate down to the stabilized rate over leaseUpYears. Residential and commercial curve separately. Validation guards for inverted vacancy curves, lease-up > 5 years, and lease-up exceeding hold period.

  6. Each tenant lease can now carry freeRentMonths (proportional rent abatement at lease commencement) and tiLcPerSF (one-time capex deducted from NOI in each lease-start year, including re-leases on rollover). Engine, validation, IC memo table, Excel TENANT_ROLL sheet all updated.

  7. Add / edit / remove tenants directly in the inputs panel. Each tenant card has 8 fields (name, SF, base rent, escalator, term, start year, free rent, TI/LC). The engine's per-tenant revenue build activates automatically when the first tenant is added.

  8. Office / Retail / Industrial deals can now be modeled tenant-by-tenant. Engine builds year-by-year retail revenue from the per-tenant schedule: each tenant compounds rent at its own escalator while in-term, re-leases at market rate when leases roll mid-hold. Closes the biggest item on /beyond-phase-1.

  9. New example deal on /methodology/examples demonstrating the full rent roll feature: 4 tenants, mixed lease terms, escalators, free rent, and TI/LC capex on rollover. Click 'Open in tool' to see the per-tenant editing UI; 'View memo' to see the rent roll table.

  10. 35 new assertions in scripts/regression.mjs pinning the canonical mezz / refi / after-tax / cost-seg numbers within tolerance. /api/preset-check exposes the diagnostic snapshots; the regression suite asserts every IRR, MoIC, balance, tax figure, and verdict. A refactor that drifts the math fails that suite, which is run by hand against a candidate before a release.

  11. RETURNS sheet gains a full AFTER-TAX ECONOMICS block when the tax overlay is enabled: depreciable basis, annual depreciation, cost-seg breakdown if active, accumulated depreciation, exit cap-gain + recapture tax, pre-tax IRR vs after-tax IRR vs MoIC, tax drag, plus footnotes on NOL and state tax configuration.

  12. Optional state-level tax rates (ordinary and cap gains) added flat to federal. Cap gains rate defaults to state ordinary when undefined since most states tax LTCG as ordinary. Closes the third remaining tax simplification on /methodology/beyond-phase-1.

  13. Generate-with-AI button at the top of the IC memo. Claude drafts a 2-4 sentence IC opener in the voice of a senior MD, restates the engine's outputs in plain English, never recomputes. Auto-clears when the deal changes so the analyst can't end up with a stale summary describing different numbers.

  14. Optional. Negative taxable income accumulates as NOL balance offsetting future positive income, capped at 80% of current-year income (post-TCJA federal default). Per-year breakdown surfaces nolBeginning / nolApplied / nolGenerated / nolEnding so the trail is auditable.

  15. Curated public day-by-day shipping log. Maintained by hand so each entry is something a CRE underwriter cares about, not raw git noise. Tagged by category (engine / ui / ai / ops / marketing / fix).

The engine math is on the methodology page, the six files the decision depends on are on the engine viewer, and the Phase 1 simplification list is at /methodology/beyond-phase-1.