Skip to content
Changelog, page 2

What shipped, and when.

A day-by-day record of what landed in Underwrite, kept by hand. Page 2 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-10-13
3 entries

The desk keeps the verdict on screen and folds the rest behind one control, the IC memo reads as a decision memo in chapters, the charts are redrawn, three engine paths are corrected, commercial expense recoveries arrive as an optional input, the home page is shorter and the pricing page names one plan. Card checkout is not open yet. The canonical figures do not move: 15.34% IRR, 2.44x and PURSUE at a 6.50% exit cap, 13.51% IRR, 2.19x and PASS at 7.00%.

  1. The home page has five sections instead of eleven: the hero, a 30-second proof, how it works, Check the work and pricing with the founder note. The second button reads Try the worked example, and labels are 14px in sentence case.

  2. Fields are 16px so the phone does not zoom, buttons and button-shaped links are 44px targets, wide tables and boxes show a swipe cue, chip rows wrap and the macro grids fit. A shared link lands with its verdict word on the first screen at 360 by 780, the stress dot plot puts each scenario's name and figure above its track, and the memo footer wraps.

  3. The pricing page now shows one plan card, Underwrite Core at $49 per month, with what is free (the worked example) and what Core adds; the card for a team plan and its inquiry flow are gone. Card checkout is not open yet: the card says so and offers the request form, and the desk, Parse and the memo work as before with no sign-in.

2026-10-06
1 entry

The IRR is reported only when it is a true root of the deal's cash flows, so a deal with no return no longer reads a false high one. The canonical figures do not move: 15.34% IRR, 2.44x and PURSUE at a 6.50% exit cap, 13.51% IRR, 2.19x and PASS at 7.00%.

  1. When the IRR solver stalled it handed back its last step whether or not the cash flows' net present value was zero there, so the worked example at a 12.00% exit cap with flat rents read PURSUE at 132.63%. A rate is now returned only when it is a root: a series with no root reads no IRR and shows the no-return plate, so that case reads PASS, and a deep loss reads its negative IRR. Every deal whose old IRR was a true root is unchanged.

2026-10-04
5 entries

A document can now set a deal's operating expenses and its vacancy, every input still the sample deal's is labeled where it is shown, and a second document adds to the first instead of replacing it. The canonical figures do not move: 15.34% IRR, 2.44x and PURSUE at a 6.50% exit cap, 13.51% IRR, 2.19x and PASS at 7.00%.

  1. No document could set an operating expense, so every parsed deal was scored on the worked example's $197,000 of fixed costs, 4.00% management and 2.00% reserves. The model now reports each expense line as written, with its period, its basis and its own quote, and the server does the arithmetic in code. Lines that add to a stated total set every expense line on the desk, and a line the document does not list is zero. Lines without a total set only their own lines. A total with no lines is carried in one line and said so. A management fee listed below NOI is moved above it. Interest, depreciation, debt service, capital items and income tax are listed as not taken, each with its reason. The parser panel says which column was applied, such as 2025 Actual, and names a pro forma column it left.

  2. A stated occupancy converts to a vacancy in code, on a row that says it is today's figure and not a stabilized assumption. A stated vacancy applies as stated. A rent roll's vacant units give a physical vacancy, applied only when the document states none. A whole-property figure that cannot go to a line says why: the document gives no commercial area or rent, or it describes no commercial space at all.

  3. A parsed deal kept the worked example's loan terms, exit cap, hold and growth wherever the document was silent, and only a paragraph in the parser panel said so. Each such input now carries a Sample assumption mark, and one short line in the parsed-deal note names the groups. A deal that is Not scored carries one sentence instead of the list, because there is no verdict to qualify.

  4. A rent roll and then the same building's operating statement lost the rent roll's name and income, and the reverse order replaced the statement's expense lines with the rent roll's one total. A later document now keeps every input it does not state, and its source quotes join the first document's. Itemized expense lines are never replaced by a later total; a later itemized read replaces an earlier total. The parsed-deal note says when a deal combines documents.

  5. A scanned statement applied nothing on one run and every line on the next, and the not-taken list did not show what the model had reported. Each refused figure now repeats the sentence it quoted. On a table or a scan a figure counts as stated when its label and its figure sit on the same row; a figure quoted alone is not taken. When nothing could be applied, the panel says to run the parse again or type the lines. An expense ratio stated alone, such as 38% of EGI, is named and never applied.

2026-10-02
6 entries

The fix pass on 29 September's release ships, with what followed it: a deal with no income, or with part of its income missing, reads Not scored instead of PASS, a deal with no computable return says why in plain English, apartment rents are read as a rent roll states them and averaged in code, the AI guard tells advice from a described case, the parser names office space instead of blending it into retail, a hotel keeps its operating overlay wherever the deal goes, and every AI feature runs on Claude Opus 5.5. The canonical figures do not move: 15.34% IRR, 2.44x and PURSUE at a 6.50% exit cap, 13.51% IRR, 2.19x and PASS at 7.00%.

  1. A teaser that states a price and no rent, or an owner-occupied building's memorandum with no lease in it, has no income to score, and it read PASS with a plate saying no IRR could be computed. Underwrite scores income property, so a deal whose potential income is zero in every year the engine scores now reads Not scored on every surface: the desk, the IC memo, a share link and its preview card, Compare, the library, the workbook export and the solvers. The panel says where the missing income came from, that a stated NOI is not an input, and that Not scored is not a mark against the building. The AI Deal Review and the IC summary are off for such a deal: they answer without a model call, and the request does not count against the reader's hourly AI allowance.

  2. A broker's mixed-use rent roll stated each apartment's annual rent and no monthly average, so the parse read the apartments at no rent beside a commercial line that had one, and the desk scored what was left: PASS, no return, coverage far below 1.00x. A deal now reads Not scored when an income line has a quantity and no rent (apartments or hotel keys with no rent, commercial space with no rent and no tenant row carrying one), or when a deal typed Mixed-Use has commercial income and no apartment income, or apartment income and no commercial income. The hold names the missing line, says a return would leave that income out, and releases the deal once the missing rent is typed in.

  3. The parser took only an average monthly rent, and the model is not allowed to compute one, so a rent roll that lists each apartment's annual rent read every apartment at no rent. The model now reports what the rent roll states without arithmetic: a stated total with its period, and each unit's rent with its period, each with its own quote. The server computes the average monthly rent in code, as it does a hotel's revenue per key: a stated average first, else a stated total over a stated unit count, else the unit rents of a whole rent roll, where every listed unit states its rent, every row shows the same period in words and no row is a total of the others. An operating statement's collected income is never taken as the apartments' rent, and an average the server computes outside $100.00 to $20,000.00 a month is not applied. The parser panel shows the row as computed by the server, with its formula, and says when rents were read and not averaged.

  4. When no IRR could be computed the plate read "Cash flows are degenerate (likely all-negative operating CF). Adjust inputs." It now reads the cause from the equity cash flows the return was solved from and says it in words: the deal never pays any cash back at these inputs, no equity goes in, or the yearly cash flows do not give a usable rate of return. The memo's verdict basis gives the same cause, and the Monte Carlo panels on the desk and in the memo say that none of the trials at these inputs produces a return.

  5. A coverage ratio or return below zero prints in accounting parentheses, which is right in a column and reads as an aside in a sentence: the plate gave a negative minimum DSCR and then its distance to the floor, a subtraction that did not appear to add up. The plate, the memo's summary and the desk's critical flag now say it in words, such as Min DSCR is below zero, so the income does not cover any of the debt service, with the figure beside it. The rows beside the plate read in plain words, the exit cap row says it does not apply when Year 1 NOI is not positive, and the Deal Grade prints its figures at house precision.

  6. The guard that withholds AI prose recommending the other verdict read any whole word pass as advice, and a Deal Review is asked to name what would break the deal, so a review of the worked example that said a wider exit cap flips the verdict to PASS was withheld. The guard now reads PASS or PURSUE as advice only where advice governs it: I would pass, we recommend a pass, should pass, pass on it, or the label stated flat with no case around it. Inside a stated case, such as a 7.00% exit cap makes this a PASS, it is a description and the review is shown. Advice is read before any case, so a condition never excuses it, and every other advice word is still refused wherever it appears. The guard also accepts the thresholds the engine prints, such as the 1.20x lender floor, which had withheld the memo's summary of the worked example.

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.