The setup flow in order: 2a the empty tab, 2b and 2j the two ways in. By document: 6c while it reads, then 2c or 4g to check it, 4e if part of it failed, 3c if none of it read, 4f if two documents disagree, and 4a and 4b to place the budget lines. By hand: 6a and 6b. Either way, 6d for the loan and 6e when it is done. Afterwards, 6f the terms, with 6g, 6m and 6n to change one and 6o for the parts. Every add, edit and remove on these lists is drawn: 6h to 6k, and 6l when the parts do not add up. 6p and 6q are Money while a contract reads and once it is ready. 6r and 6s keep a paper, and 6t is what leaving setup partway does. Manual entry now carries all four contract types the backend knows plus nothing signed, the ask-first threshold, and allowances.
The one manual-entry frame. Five contract types: the four the backend reads plus nothing signed. The first field changes its label with the type, because a cost-plus estimate is not a sum and a GMP figure is a cap. The fee only appears where there is one. Ask-first and allowances are both here and on the terms screen, and allowances can still be added from a room.
6a at the desk. The terms sit on the left and the breakdowns on the right, so the sum and the parts that divide it are in one eyeline. One primary at the foot, stating what it records.
The moment between sending and 2c. It says how long, says she can leave, and lists what it is looking for so a missing item on the next screen is not a surprise. Nothing on it counts yet, so there is nothing to confirm.
Reached from 6a, 6e or the terms. Two facts the homeowner actually knows: who the lender is and what the loan stops at. Draws are not typed here; they arrive as they are released, per 5b.
Where both routes land. It reads back what is in, in counts rather than a percentage, and names what is still open with the route to each. Neither open item stops anything working, and it says so. "Go to Money" lands on 1a (or 1b on cost plus).
Where setup lives afterwards, replacing the screen with a Save under every field. It reads as a record: each term with where it came from. Tapping one opens a sheet to change that one thing (6g), so there is no form-wide save and no primary on the screen itself.
A single-answer sheet, so its action is pinned and states the new value. The room behind stays where it was. The hint says what the change does not do, which is the question a homeowner lowering the threshold mid-build actually has.
From "Add another part" on 6a, 6b or 6o. A single-answer sheet: two fields and a pinned action that repeats what it adds. The button reads "Add a part" until both fields have something in them, and does nothing until then. On save the sheet closes and the row appears at the foot of the list.
Tapping any part row opens the same sheet, filled. Save is the primary. Remove is an outline button below it, with the consequence stated above it, because a destructive action never takes the filled weight. Removing is immediate: no second confirmation, and the list note recalculates.
From "Add an allowance" on 6a, 6b or 6f. Three things: what it is for, how much, and which room. The room is a pick run inside a card, so the allowance also appears in that room, and one added from a decision (Decision 6d) lands in this list with that decision's room already set. "Across the house" is a real answer.
Same shape as 6i. The extra line is what removal does to purchases already charged against it: they stay recorded and stop counting against an allowance. If nothing has been charged yet, the line says so instead.
6a scrolled to the parts, with Finishes left out. The note under the list states the difference in dollars and says it is fine. Nothing is blocked and nothing turns amber: a partial breakdown is allowed. When they match, the note reads as it does on 6a.
From the first row on 6f. The same five picks as 6a. Picking a different one adds a line saying what changes in the words the screens use, and the button names the new type. If the type came from the contract, the note says where.
Any term that came from a document (sum, contingency). The hint names the page it came from and says the page stays in papers. The row caption on 6f becomes "You changed this, 18 June · the contract says $792,000". Figures you typed yourself get the same sheet without that line.
From "Six parts" on 6f. The same list and the same sheets as setup (6h, 6i), on a screen of its own because it can be long. No primary: each change saves in its sheet.
Where "Back to Money" on 6c lands. The reading is one row at the top with the in-flight mark. Recording a purchase still works, and the callout says so.
The same row, finished. It is the one primary on the screen until it is checked, and it opens 2c, or 4e or 3c if the read was partial or failed. Nothing from the contract counts until then.
"Add it to your papers" on 6d, 5b and 5c. The pattern is designed in Kept Things 1a; this is it with a document in mind, so a file joins the camera and the library. A routing sheet: a chevron run and nothing pinned. The same sheet serves every "keep the paper" slot on the money screens.
The confirm step from Kept Things 1b. Each page comes back before it is kept, and a multi-page letter is added one page at a time. On keep, the sheet closes and the slot on 6d becomes a row naming the document and its page count. The close button throws the shot away.
What the two controls on every setup app bar do. Back goes one step up the flow (6a to 2b) and keeps what was typed. The close leaves setup for Money and keeps it too, as a draft: nothing is recorded and nothing counts, and there is no "discard changes?" dialog. Money shows the draft as one row that reopens 6a exactly as it was left.
The states that have no frame of their own. Each follows a rule already drawn elsewhere in this file.
Contract kind (fixed_price, cost_plus, tm, gmp), the contract sum and named allowances are read by the existing contract extraction. The rest is drawn here and has not been checked against a served contract. Each needs a yes before its frame is built.
Four of the five blocked frames were promising a write or a fact the served contracts cannot hold, and they are revised to fit what is served. One is the opposite case: purchases can be created and never read back, which makes capture a hole rather than a feature, so 5a asks for the projection to return them and the contract delta below says exactly what it needs. 5b and 5c hand the draw release and the change order back to the builder seat that owns them and leave the homeowner the two things they really can do — keep the paper, and ask. 5d removes the chooser: there is one thing to record, so the plus records it. 5e stops claiming cached figures. 5f and 5g are the desk. The documentation under the frames is the implementation contract: a dossier per state, the route matrix, the one backend delta, and the final copy.
Ruling A, and the only one. A purchase that can be written and never read is a hole, not a feature — so the Money projection returns what the owner recorded, and the figure and the run below it both come from the server. The client sums nothing. The note says whose money this is a count of, because a figure that silently mixes her receipts with Dave's invoices is the thing this screen exists to prevent. Blocked until the delta below ships.
A chooser with one live option is a door with a corridor behind it. Draws and change orders are the builder's to raise, so the plus goes straight into the purchase sheet — same sheet, same fields, and a direct route of its own at /house/money/purchase/new for anybody arriving from outside. Nothing is hidden by removing the chooser: 5f names where the other two come from, in the run where they will appear.
Release needs the builder's seat and the Draw record has no recipient, so the homeowner never records one, and editing the schedule is not offered anywhere near this — a date is not a release. The expectation is answered rather than dimmed: the inert control names Dave and says what he does. What she can genuinely do is keep the lender's letter, which is a real document route, and ask.
Agreement method, agreement date and contingency use have nowhere to be stored, and a change order is Dave's draft, so the homeowner screen stops pretending to write one. What is left is true and useful: the paper is a document, the ask is a message, and the contract has not moved. When Dave raises it, the existing change-order read and decline states take over — nothing here duplicates them.
Nothing is cached and the projection carries no date, so the honest screen shows no figure and no "as of" — the previous frame promised both. It says what is true instead: the figures are kept with us, they have not changed, and a number nobody can stand behind is worse than a gap. One way forward, one line about the receipt on the phone, and no cause.
5a and 5d at the desk, one river as 1g argues. The foot of the screen is where the removed chooser goes: two named absences at the outline rung, each saying who fills it and what arrives when they do, so a reader who came looking for "record a draw" finds the answer rather than nothing. The three things she has not told us yet keep their run: the contract opens 2b, the loan opens 6d, and contingency opens 6a with the contingency field focused.
5e at the desk, and the reason the old stale desktop screen was removed: it drew Tuesday's figures and an as-of line from the same contract that has neither. The block sits at the top of the river at its own width rather than centred in an empty canvas, because the rail and the chrome are still working and the screen has not broken.
One ruling each, no alternatives left open. Four fit the served contracts. One asks for a contract expansion, and Money capture stays behind a flag until it lands.
One per revised state. 5f takes 5a's dossier and 5g takes 5e's: the desk differs in composition only, never in route, seat, fields or refusal.
/house/money remains the only primary homeowner Money destination. Everything launched from it is a sheet with a direct-entry route of its own; nothing below is reachable only as a sheet.
One expansion, for ruling A. Nothing else in turn 5 needs a backend change: 5b, 5c, 5d and 5e are built on endpoints that exist today. Purchase capture ships when this lands, and not before — a create with no read is not shippable as a homeowner feature.
Every user-facing string in the revised states, including the error conditions that have no frame of their own. Nothing here is a placeholder.
Build health needs a cost code on every budget line, and a 62-line budget cannot be 62 pickers. So the review inverts: 4a is the phone, and it opens on the eight we could not place rather than on the sixty-two. 4b is the same review at the desk, where the whole table fits and the builder's own code maps inline. 4c splits one receipt across several codes and 4d confirms a quoted lump against the estimate lines it covers, without splitting it. The last five extend frames that already exist: 4e gives 3c the partial read, 4f gives 3d the suppressed verdict, 4g separates an estimate from a cap in 2c, 4h makes the payer an attribute in 4h. Manual entry moved to 6a.
The inversion, and the whole reason the review is not a table on a phone. The screen never says "assign a code to 62 lines"; it says fifty-four are placed and here are the eight that are not. One line at a time, three candidates and a tap that agrees — nothing asks her to originate a code. The builder's own code maps inline, at the builder level, so the next budget Dave sends costs less than this one.
Propose, then confirm. The split arrives already made, with tax and delivery allocated in proportion rather than dumped on the largest line, and the reader's job is to check it. Exactly one item is genuinely ambiguous, so exactly one question is asked — and the answer is remembered against the supplier line, which is what keeps the second Builders FirstSource receipt from costing what the first one did.
Dave quotes $70,000 for framing as one number; the estimate has six lines under it. The lump is never split — inventing six numbers inside it would be making them up — so the six are grouped and the two totals are compared whole. This is a different comparison from Decision 3c, which puts one quote beside another; here a quote is being read against a baseline.
The state 3c did not have. A total failure to read is the rare case; on a 62-line budget the normal outcome is that most of it came through and some of it did not. What is missing is named line by line, what was read is already usable, and the two routes out are the same two the total failure offers. "Type the four in myself" opens the 6h sheet once per line, with the description already filled from the page.
What 3d states, carried through to its consequence. An open conflict about the contract sum sits at the root of the projection, so build health is not read at all while it is open — and the place where the verdict would be is a container-shaped absence at the outline rung, not a card apologising. Everything she recorded herself is untouched and still readable below it.
2c on a cost-plus job, where the number on the front of the budget is an estimate and recording it as a contract sum would tell her she is capped when she is not. The second rule this frame carries: the figure confirmed is the document's own stated total, never a sum of its lines — a 62-line budget that also prints its bottom line has 63 numbers on it, and adding all of them once turned $571,128.60 into $1.2 million.
The purchase screen, with the payer section added, and it is the section that lets a builder's bill walk the same path as a receipt from the counter. Payer is an attribute of a purchase, so there is no second capture flow to build and no second tree for the money to land in — the cost code, the allowance and the ledger row are identical whichever answer is picked. This is the one purchase form: direct entry at /house/money/purchase/new renders it as this screen, and the plus opens it as the 5d sheet with the same fields in the same order.
Not 4a widened — a different layout for the same job, because a 62-row table is the thing a desk can do and a phone cannot. The eight exceptions keep the top, each with the group I would put it in, how sure I am and one control that agrees; Dave's own code sits in its own column so the mapping is confirmed where the line is, rather than on a screen of its own. Underneath, the 54 already placed, in full, changeable.
Says what still works before what stopped, and never why. Money is the one thing in the product that has to reach us as it happens, so the primary cannot be a button that pretends — it becomes the inert control with the ask on it, which names who or what can act instead of dimming a button and going quiet. Everything typed stays where it is.
A read that fails says so rather than returning an empty document — the honest version of the failure the extractor already refuses to fake. No cause, no retry-only dead end: two real routes out, and the file stays in her papers either way. Photographing goes to 6r; typing goes to 6a.
The case the amendments file flagged as having no drawing yet, now drawn. A genuine clash is the one place terracotta ink appears, and it appears as a mark on the card rather than as a colored panel. Both numbers keep their page, neither is preselected, and picking one does not delete the other — the loser stays in the papers with what it said.
The released draw, on the phone of somebody seated on the job who does not hold the account. Names the person rather than the permission, and the whole record stays readable — reading and asking never depend on being allowed to act. "Something looks wrong" survives, because the one thing everybody can always do is ask.
She opened 1c to confirm $1,850 and Dave had already replaced it. Replaced, not superseded: the old one was not wrong, it is out of date, and the state that reads that way always points forward. It stands in for the card it replaces and the headroom figure above it is untouched, because nothing went on the contract.
One line with the date, saying what stays, and no action on it — the person who can restart a subscription may not be the person holding the phone. Everything recorded is still here and still readable; what goes is the plus in the app bar and the primary at the foot. A money screen that hid its own ledger behind a paywall would be the one unforgivable version of this state.
No contract read, no builder connected, nothing recorded. Not drawn as reassurance — an empty money tab is a gap in what we know, and the gap says what closes it. The slot is the hairline ghost of what will fill it, with exactly one action, and the callout says the contract is not a prerequisite for recording what you spend.
Two sections rather than two options: the way in that reads a document, and the way in that never needs one. On a phone the document route takes a photo or a file; the desk frame 2j drops the camera and takes a drop area instead. Typing it in is a real button because it leads to a screen — 6a — rather than being an aside.
2b at the desk, and the camera is gone: on a machine with no camera the photo button is an offer that fails. The document route becomes a drop area with a file picker inside it, drawn at the outline rung because it is a container-shaped absence, and the typed route keeps its own block beside it so neither reads as the fallback.
Every number carries the page it came off, which is the same provenance rule the ledger uses for a moment you were told. Nothing is recorded until she says so, and what the read missed is named rather than left out — a scan that quietly drops the draw schedule is worse than one that admits it. Recording lands on 6e. The ask-first threshold is never read off a contract; 6e lists it as still open when it was not typed.
One headline figure and it is headroom. The three layers in order: what is left to commit, what went over and when you heard, then the two pools that have a ceiling. The contract is cited to its clause in the head's meta line, because contract type is a fact about their contract rather than a setting. The terms row at the foot opens 6f.
Same three layers, different vocabulary, and one figure that does not exist on 1a: the fee. An allowance is about scope and a threshold is about authority, so the threshold gets its own block and says what it did last week. Nothing waiting on you is drawn as a sentence with a dot, not as a card apologising for being empty. The $2,500 is the ask-first threshold set in 6a and changed in 6g; the terms row opens 6f.
The amendment sits beside the total and never inside it, so the headroom figure stays true and the confirmation is about something real. The action names its own scope. Being signed in is the proof, which is why a paid homeowner never sees a code.
The one place a denominator is permitted: the loan is a fixed pool the lender stops at, and the three segments sum to the whole so there is no empty track to read as progress. The six are dates, so they are drawn on the spine rather than as rows — paid, due, and one with no date at all.
The money is gone, so nothing here pretends otherwise: what it collects is that you know. Acknowledgement, never approval — and the disagreement is a real door rather than a dead end. No "5 of 6" in the head: a position is not a count, and the last line says what is left instead.
One draw left after this, and it is the certificate of occupancy. Nothing about that one is scheduled yet.
Declining is a state on the change order, not a deletion of it — the ledger is worthless if only the yeses survive. The decision returns to open with the declined amendment cited on it, nothing is pre-selected, and the forecast is recalculated against the new deadline. Pick an option and the primary says what it will settle.
The same content as 1a, and deliberately not widened into columns: the widest thing on this screen is a ledger row, and side by side would put the overrun list next to the pools it has nothing to do with. The desk earns its width by holding the whole river at once instead of two of anything. The one waiting amendment from 1c sits at the foot with the sentence that says what confirming it moves.
1d at the desk, and the one screen in Money that earns two columns: the composition and the schedule are the same six facts read two ways, so they belong in an eyeline rather than a scroll. The left cell is a column of three short blocks against the spine's height, which is how the two cells come out even.