The capstone: Harbor Point
Everything so far taught one construct or one judgment at a time. Part IV is the payoff: one deal, built the way you would build it at a desk, across five chapters. Each chapter ends in a model that compiles, runs, and answers more of the deal's questions than the last. By chapter 24 the model carries a rent roll, a two-loan capital stack, an exit on a stated cap rate, a downside scenario, a thousand-trial risk book, and an equity waterfall. It will still read aloud, because it is built to Part II's style checklist from its first line.
The case
Harbor Point is a ground-up development: an office building with a retail base, on a site to be acquired January 2026 for 5,500,000. Construction runs eighteen months at roughly 11.9 million of hard and soft cost. The office pre-lease takes occupancy mid-2027 and ramps over a year; the retail suite signs shortly after, with free rent and an allowance. A construction facility funds 65% of the build, taken out at stabilization by an interest-only permanent loan. The plan is to sell at the end of 2030 at a market cap rate and split the proceeds between the LP and the GP over an 8% preferred return and a 20% promote.
Hold the shape in your head — buy, build, lease, finance, sell, split — because each verb is a chapter, and each chapter is one file's worth of claims added to this one.
The two-grain declaration
Chapter 16 said to write this down before the first stream, so we do, in public. Timeline: monthly. The finest documented cadences are monthly — draws, rent, debt service — and the exit's forward-NOI window is naturally twelve of them. Daily would add thirty periods of noise per real claim. Annual would fabricate the inside of the lease-up.
Entities: the property, with the retail lease at unit grain. The office anchor and the retail suite behave differently, with a different start, escalation, and incentives. So retail is a cre.lease_unit of its own, and everything else about the building pools at property level. Every contract in the deal is written on entity asset.harbor: the property is the subject that owns its cash. The construction loan is a contract on the property too, cre.construction_loan, and it opens its own balance account. The parties arrive in chapter 24, when cash finally reaches them.
The skeleton
version 0.1
model "harbor-point"
use pack "cre" version "0.1.0"
time calendar monthly from 2026-01 for 60
phase construction from 2026-01 to 2027-06
phase lease_up from 2027-07 to 2028-06
phase operations from 2028-07 to 2030-12
// examples-allow: harbor — the skeleton compiles before any stream exists
entity asset harbor : CRE.Asset.RealPropertyNine lines, and note what each is doing. The pack is declared up front, because this deal is standard CRE and chapter 19's decision goes pack-first. Bespoke streams join only where the pack has no word for what we mean, and this deal needs none: every claim in the capstone is a pack contract, the construction facility included. The three phases are the deal's entire calendar; per the style checklist, no later claim will carry a date the phases could own. And the property is typed, so every field and contract from here on is checked against the domain's vocabulary.
The first two claims go in today — the land closing and the construction program:
// Land closes at the start of month one.
contract cre.purchase on entity asset.harbor {
term 2026-01..2026-01
terms {
price = 5500000
}
}
// Seventeen level draws, Feb 2026 through Jun 2027: 11,900,000 of hard and
// soft cost. Anchor: 5,500,000 + 11,900,000 = 17,400,000 all-in.
contract cre.budget_line on entity asset.harbor {
term 2026-02..2027-06
terms {
amount = 700000
}
}Both claims are pack contracts, cre.purchase for the land and cre.budget_line for the build, and each carries a category the pack attaches: the language's word for what this cash is, a dotted path whose root is one of three the language settles, operating, investing, or financing, the sections a cash flow statement is read in. The pack's own lowering rules attach a category to every stream they emit (that is the pack's contribution: knowing what a cre.permanent_debt payment is), and the statements aggregate by category rather than by name. A hand-written stream states its own; one without a category lands in no row, and the operating statement reports it as unclassified rather than silently drop it. The land reports as an acquisition and the build as development cost, both investing: capital put into the building, which the equity and the loan will fund in chapter 22.
The purchase is paid on its term's start, the closing month; a price with costs of closing states closing_costs_pct beside it. cre.purchase and cre.budget_line are two of the pack's words for a deal's cost; a standing asset's operating costs have more. Itemized operating lines are instances of cre.opex_line (the pack's templates offer the conventional set, cre.opex_line.property_tax, cre.opex_line.utilities and so on), a tax assessed on value is cre.property_tax, and public support such as a TIF or a grant is cre.incentive. Harbor Point states its operating cost as one line in the next chapter. The construction program is one line of the pack's development budget: level draws over the term, stated by one term. (An S-curve is the same line stated as a total with profile = "s_curve", and a contractor's own schedule is amount = inputs.<schedule>; restating the line either way is an end-of-part exercise.)
What the numbers say
Run it. Total: −17,400,000 — the anchor, checked by hand, the model's first entry in the checklist's ledger of verified numbers. NPV at 10%: about −16.5 million, less negative than the total, and that difference is worth staring at once: development costs discount barely at all because they are paid first. Every dollar of return this deal will ever show has to climb over full-weight costs with discounted revenue. That is why the next four chapters' numbers matter in the order they arrive: revenue first, then cheaper funding, then the exit that carries most of the value, then the stated width around it.
What can go wrong
A phase that lies. The phases were declared from the construction schedule; if the build takes twenty-one months, the fix is the phase line — and every schedule that obeyed the checklist follows. The chapter-9 slip test is now a standing capstone exercise: slip construction one quarter at each checkpoint and watch what re-derives.
An anchor nobody checked. 17,400,000 took one multiplication. Every checkpoint from here adds one hand-checked number to the set; by chapter 24 the model carries five, and any future wrongness lands between two verified anchors instead of anywhere at all.
Exercises
First claims on the ground
The starter file declares the grid, phases, and cast. Add the deal's first two claims, each written on entity asset.harbor.
- Add the land closing: a
cre.purchaseat a price of 5,500,000, its term January 2026. - Add the construction program: a
cre.budget_linewith seventeen draws of 700,000.
Anchor before you run: 5,500,000 + 17 × 700,000 = 17,400,000 all-in, all outflow. Expect the NPV to be less negative than the total — early costs discount least. That asymmetry is why development return math is unforgiving: the money goes out at full weight and comes back discounted.
Then, on your own:
- Slip construction one quarter — phases only — and rerun. Nothing else should need touching, and the total should not move (the same seventeen draws, later). What does move, and why is that correct?
- Sketch, on paper, which of the deal's six verbs will need which constructs. You have the whole toolbox and the whole judgment part now; the next four chapters are your chance to check your own predictions.