A choice is one act. What it turns into is four things arriving on four different days, and only one of them is late. Eleven of these twenty-one frames extend a frame the deck already draws — and the first four are only about how you reach the rest.
Four frames before anything new, because the first draft of this page opened on a screen nobody could reach. Every route below starts at a door that already exists.
Seven ways in
Every route ends inside a record that already has a door — a room, a decision, the last mile, project settings. That is the test NAV_AND_COMMIT_RULINGS.md Ruling 1 sets: a tab declares what the product is about, and saved things and where my refrigerator is are questions about a house, not two more things the product is about.
Saying where they go and then not drawing them is the honest shape: they are real parts of the design, they are not selections, and a page that sketched them badly would be read as having settled them.
/house/room/:zoneId. The board is unchanged. What is new is that a card opens.Kitchen
Nora, 2 April
fireclay.example.com
You, 19 April · became an option
Nora, 2 April
fireclay.example.com
You, 19 April · became an option
Four faces and not one chip. A photograph, two colors, a link and a sentence do not need telling apart in words when the tile already says it — and the fourth tile peeking past the edge is the only thing that says the row scrolls.
Still a rail, and wider. A canvas gives it more of itself to show; it does not give the homeowner a reason to audit what they saved, which is the only thing that would make it a wall.
/house/keepsThe kit's Carousel names saved items as rail material and draws the line with a test rather than a preference: for a set with no duty to be seen whole — prompts, saved items, suggestions. Anything the homeowner has to survey stays a grid. A room board fails that test; nobody opens the kitchen to audit what they saved, and keeps are one section here among colors, decisions and drawings. Frame 11 passes it, and draws the same keeps as a wall.
Color is the only kind that combines. A paint color is meaningful next to the others being weighed, and stacked as bands they read as a chip off a fan deck where two near-identical rectangles side by side tell the eye nothing. Bands mean candidates for the same thing, which is exactly what page 16 argues about these two — so the rule is that a palette combines only what one wall already holds, never across rooms, and never photographs, links or notes.
Nothing is added to this screen to reach the new one. A keep is the most tappable thing on the board and, until now, tapping it did nothing — which is the actual defect the keep screen fixes. Tapping a band opens that one color, not the palette: the palette is an arrangement, and a keep is what was saved.
/house/keeps, the binder's lens over every kept row, and the unfiled list in frame 10. Three entrances, one destination, and no new place in the map.
/now/decision/:id. One screen, two moments — and the second is the only place a selection is ever reached from.Appliance package
The one row that reaches frame 12. It is the row page 17 is already opened from; nothing about it changes except what is behind it.
The row that reaches frame 15, and the only place in the product where a settled choice is opened. There is no selections list to browse, because a selection is a fact about a decision.
Options, the settled selection and its four members all hang off one decision, so all three are reached from it. The alternative — a place that lists every selection in the house — is the project-management surface Ruling 1 declined, and it would answer a question nobody standing in a kitchen asks.
One of them has not been ordered is what makes the row worth tapping. A row that said only The Hollis package would be a label, and the late refrigerator would stay invisible until somebody went looking.
/house/last-mile. The row that reaches the handoff exists; it gains one sub-line.The last mile
Not a badge and not a count. One thing not ordered is a sentence, and it is the only new text on this screen.
The handoff row is already here and already says what it is for. Adding a second row for orders would split one record — what was chosen and where it got to — across two places, and the reader would have to know which half they wanted before tapping.
A count in a pill says a number and no meaning. One thing not ordered says what the number is about, which is the difference between a nudge and a notification.
The saved things — a note, a picture, a link with what it looked like, a color. Four kinds and one row, which 44 already settled. What is new is that a keep can be in more than one place and that you can open one — so three of these seven frames are the same screen carrying a kind that has no picture in it.
Keep this
Deep single-bowl sinks, the undermount ones
fireclay.example.com · pasted just now
The title and the picture came off the page on their own. Both are copied and kept; a year from now the link may be dead and this card will be exactly as it is.
The deck holds four room photographs and no product photography, so frames 5, 6 and 13 borrow the kitchen. The shape is the claim being made here — media, then title, then source — not this particular image.
The first draft of this page drew a pasted link as a row of text, which is how a board of things somebody liked becomes a list of filenames. The reference pattern is consistent across every app that keeps links: image first, title second, domain third, and the URL itself usually not shown at all.
Everything on this card is stored when it is saved. A preview fetched at read time makes the board depend on somebody else's server staying up, and the one thing a binder has to do is still be there.
This is the keep door. The option door is frame 13 and it has a price on it. 17: folding them into one flow would put a price field in front of somebody who is only saving a picture, which is exactly where people stop capturing.
/house/room/:zoneId/keep/:memoryId. Reached from frame 2, from /house/keeps, and from the unfiled list in frame 10.
Deep single-bowl sinks, the undermount ones fireclay.example.com · saved by you, 19 April
Kept in
Deep single-bowl sinks, the undermount ones fireclay.example.com · saved by you, 19 April
Kept in
The face stops bleeding once it has a column. A full-bleed picture in half a canvas is a picture that lost its margin, not one that was given the screen — so it takes the card radius back and the lift goes with it.
A keep is a card on 44 and nothing else, so there is nowhere to see what it is attached to. Multi-attachment is unreadable without this, which is why it is the only new homeowner screen the whole feature needs.
The app design kit shipped KeepFace and KeptIn for exactly this, and where they disagreed with what was drawn here the kit won. What survived unchanged is the argument: a keep is not a record, so it does not take the record grammar.
KeptIn forbids dividers between places — a divider above a line that is already a sentence makes the block read as a table of entries; the places sit apart on air. A glyph tells a room from a question, and a place's second line is a sentence rather than a status: the moment one takes a status color, this has become a ledger row.
memories.decision_idThat column means what this is evidence of — a photograph of a delivery is evidence of the delivery — and page 26 owns it. Turned up on a decision is a different sentence and a different relation.
The bin has to be next to the sink, not across the room. That's the one I will notice every day.
Saved by you · 3 May
44's own closing line, made structural: nothing here has to become a decision — and the sink note already has. It's why the bin question is open.
A gray placeholder rectangle where an image would go says this failed to load, which is untrue of a note — nothing is missing. But a white note on a near-white page gives the words no object to sit in. The kit's KeepFace answers both with an inversion: ink ground, paper text, so it flips with the appearance rather than being a color or a tint.
The sentence was set at --text-xl and carried quotation marks. --text-lg is the block-title step and is always bold, so a homeowner's sentence set at or above it reads as a heading — --text-md at regular weight is the rule. And quotation marks belong to CoachBubble, where a named person is being quoted; the product does not quote somebody's own sentence back at them.
The words are verbatim, the same rule replies.body and a substitution's reason already follow. The product does not summarize somebody's sentence back at them.
Opened this question is a third relationship, and it is the deck's own example. It is not became an option and it is not a room — which is why the decision list carries a reason line rather than a status.
Hale Navy Benjamin Moore · photographed at the shop, 11 April
Kept in
Placed, with no surface named. That is the ordinary case rather than an edge one, and page 16 already rules it: a color can be in a room before anybody has said whether it is the wall.
HC-154 sits on a chip because this screen resolved the paint. The room board deliberately does not draw it: the code lives on paint_colors.code behind an optional join, and a color somebody typed by hand has nothing to join on. One chip is the honest answer there; two are honest here.
The swatch is the subject and takes the media slot the picture takes, at the same size. A hex string in a monospaced row would be the product describing a color to somebody who is looking at it.
A placement is its own relation with its own table, so it takes the pin glyph rather than the question mark. Filing it under decisions would claim somebody decided this, and nobody has.
Also keep this in…
Kitchen
Where you saved it
Primary bath
Mudroom
Great room
Laundry
The room it was saved in is ticked and can be un-ticked. It is where you were standing, not a claim that it belongs there forever.
44 frame B is one room on purpose — it goes to the kitchen because that's where you are. A second room is a later, deliberate act, so it is a sheet off the keep rather than a field on the capture form nobody wanted.
This sheet cannot put the keep on a decision and does not offer to. That is frame 13, and it has a price field, which is exactly why the two acts are not one sheet with a second section.
/house/unfiled. Third door onto frame 6, and the state that proves a keep does not need a room.Kept, with no room
Two things. They keep perfectly well like this.
You, just now
No file these, no count on another screen, and no badge. A keep with no room is a finished act; the room is an optional later fact.
One kept color is a single swatch at 4:5 — the taller ratio, because a color has no detail to read and a squat one reads as a bar. Two or more on one wall combine into a palette. FICTION.md pins exactly two non-settled colors, Hale Navy and Alabaster, and page 16's argument is the pair of them claiming the same kitchen wall, so on this house they are always a palette and never a lone tile. The single-swatch tile is therefore drawn at full size in frame 8 and nowhere on a wall — the same face at a different scale. Drawing it here would have meant inventing a third color, which is the one thing that file forbids.
An earlier pass drew this list as rows while the room board was tiles, which said the same thing twice in two grammars. Nothing about having no room makes a keep more like a ledger entry.
There is no file these call to action and no count nagging on another screen. A keep with no room is a finished act; the room is an optional later fact, which is why this list is browsable rather than a chore.
Unfiled still means no room at all, so the partial index the count reads is exactly the one that exists. Making rooms plural did not move this screen, and that is a deliberate constraint on the schema rather than a lucky outcome.
/house/keeps — already built, and named in frame 1 as a door onto frame 6. Drawn here because a page that claims an entrance owes a picture of it.Everything kept
7 kept · 2 rooms · since 2 April
Nora, 2 April
fireclay.example.com
You, also in Primary bath
fireclay.example.com
You, also in Kitchen
Nora, 2 April
fireclay.example.com
You, also in Primary bath
fireclay.example.com
You, also in Kitchen
The kitchen holds five keeps in four tiles, because two colors combine. The sink hangs on both walls and each tile says so. The header counts things kept; a wall counts what is pinned to it; neither is wrong and neither is the other.
Four columns from the canvas's own width, and the single keep still collapses to one. Both are the wall's own rules rather than a breakpoint: it is bounded by its container, never by the viewport.
This screen already says so in its own source: everything the house has kept — a lens over the same rows, not a seventh tab. The binder's six record doors stay six. Nothing on this page changes that; multi-room keeps just make one row appear under two headings.
Seven kept, five in the kitchen, four tiles on its wall. They differ for two honest reasons: the sink is pinned to two rooms, and two colors share one tile. Making them agree would mean hiding the sink under one of its rooms or splitting a palette that exists to be read together.
The photograph, the sink link and the bin note are 44's. Hale Navy and Alabaster are FICTION.md's two non-settled colors, pinned to 16's wall argument. The Primary bath row is frame 9's second room and the two unfiled are frame 10's. Nothing was added to that file for this screen, which is the test a count on a mockup should pass.
An earlier pass held that a grid was wrong here because most keeps have no picture. That was only true while a note had no face. Given one — its own words — the wall is simply what this screen is, and no second layout has to be built or switched between.
A keep is something noticed; an option is something being decided. 17 already draws three ways onto a decision. These are the two that were missing, on the same screen.
/now/decision/:id/options. Reached from frame 3.Add an option
Three are already on this decision. Whatever you add sits beside them until you settle it.
The two new rows lead, because on a job with a connected builder they are the two that will actually be used.
17's rule holds through both new rows: the screen was opened from the appliance package and the eyebrow says so, so nothing here asks which decision this is for.
Add it as an option
Deep single-bowl sinks, the undermount ones
Kept on the kitchen's board · 19 April
It stays on the kitchen's board. Adding it here does not take it off, and the board's card gains one line saying it became an option.
The picture and the page come across. Nothing else does, because nothing else was ever asked for.
One tap from the board, and it still crosses that field. What it does not do is put the field on the board.
Promotion copies; it does not move. A keep that vanished off the board when somebody priced it would punish the person who did the right thing, and the board would get quieter the more the house decided.
What Dave offers
Kitchen appliances · revision 4, 2 April
Three rows, one kind of number. Every price came off Dave's list, so the provenance line says the same thing three times rather than distinguishing three things that are not different.
Opened from the row above it. The eleven weeks is visible before anybody chooses — a package total hides the one number that decides when the kitchen finishes.
The deck already distinguishes you typed this, check it against the tag and it came off a quote. A builder's list price is a fourth, and recording it as one of the other three would be the exact lie 17 says gets somebody hurt.
A homeowner choosing a package is choosing four appliances, and the one that governs the schedule is the refrigerator. Showing members only after settlement would make the package total the whole basis of the decision.
Revision 4 was copied onto this project when it was assigned. Dave editing his list does not reach back into this decision — frame 20 is what happens instead.
Settling copies what was chosen and never reads it live again. Then four things arrive on four different days, and the record of that is the same record.
/now/decision/:id after settling, reached from frame 3. Everything here is a copy taken on 17 May.Appliance package
A choice is one act; what it turns into is four, and each of the four can be somebody's job. Nothing here is a specification — the finish, the fuel and the panel are answers, and they live where answers live.
Dave's list moves, links die and options get edited. A settled decision that reads any of those live can change what it says a year after nobody touched it. This is the same snapshot the schema already takes of a resolution's answers, applied to the thing chosen.
Ruled in Q256: the role comes from whether an accepted builder is connected, and the seat is not guessed. This job has more than one builder seat, so naming one would put a durable obligation in a person's name for no reason.
49 owns the questions the choice leaves unanswered. This card says what; that page says which finish, which fuel, which panel. Folding them would make the snapshot mutable, because answers keep arriving after a decision settles.
/house/last-mile/handoff, reached from frame 4.Appliance package
Four states, one list, and the amber is spent once. The package total said $14,800 and never said this.
45 frame A: the settled specification and every later record stay together. Ordered, delivered and installed are three more later records of exactly that kind.
Every order-tracking pattern worth copying does this: the summary is one line per thing, and the rail only appears when you open one. Four rails stacked would make the page about the journey rather than about which thing is late.
Each row reads the last event on that item. A status column would be a second answer that goes stale the moment somebody records a correction — the ruling lead_times already carries.
Wall hood, 36 inch
Zephyr AK7736AS · $1,400 · the builder
The last node carries the substitution rather than replacing what was chosen. Both facts survive, which is what the record is for.
.spine is page 41's, in shared CSS since the time axis was drawn: a filled node for what happened, a ring for where you are, and a rail that stretches to hold whatever sits beside it. Procurement needed exactly that and needed nothing new.
The chosen-against-installed pair is 45 frame A's, unchanged. Editing the selection to say BS would erase the fact that somebody chose AS and a decision was made without them.
A wrong date is corrected by a further node saying what it corrects. That is why the sheet has no edit affordance and why the rail can be trusted.
Record where it got to
Ordered
It is bought and on its way
Delivered
It is here, or it is at the yard
Installed
It is in and working
Saved on this device. It goes up when there is signal, and it is yours either way. You are recording your own work.
Three states and one answer, so these are options rather than tick rows — the deck's single-select shape, filled rather than ticked.
Each save is a node on frame 17's rail, not an edit. A wrong date is corrected by a further record that says what it corrects — the shape 45 frame A already gives a substitution, where only the effective record offers another change or correction.
Recording an arrival asserts the recorder's own work and is safe offline: two people recording the same delivery both wrote something true. Changing who owes a row changes what somebody else is on the hook for, and that is a server-guarded write — frame 19 says so on its own screen.
Chosen is not offered because settling already wrote it. A screen that let somebody re-choose here would be a second way to settle a decision, in a form with no options on it.
Q256 ruled has to be drawable: a role with no name on it.Who is getting this
The builder
Nobody named yet. Set when the package settled, because Dave is on this job.
Dave Marsh
Builder
Renee Boothe
Dave Marsh Builders · office
You
Move it to your side
Naming somebody changes what another person owes, so it goes up now rather than waiting for signal.
An earlier draft drew this on 45's .spec, which is a RUN of label-and-value pairs and needs a run to make sense of its 34% label column. One pair in it gives a two-word label a third of the screen and wraps the answer to three lines. A single current fact is a sentence with a heading, and the heading is the screen's own title.
There is more than one accepted builder seat on this job, so a default that picked one would be picking a person out of a set with no reason to prefer any member — and the snapshot is immutable, so it would assert that obligation in their name permanently.
The builder · nobody named yet is a real and expected state. Drawing the first builder on the project instead would be the product inventing an answer.
Custom, semi-custom and spec change nothing on this sheet. Connection decides, per Q254.
A builder's list is a living thing and a settled decision is not. The mechanism that keeps those two facts apart already exists.
/house/settings/reconcile/:reviewId, reached from the reconcile row already on project settings.A newer list is ready
This is a new review of the newer list. What you already chose is unchanged.
48 already built a source becomes a durable review before it becomes a choice, with successor reviews that never rewrite the finished one, per-decision candidates and a guarded adoption. A builder's list is a second kind of source into the same pipeline, which is why this frame is a copy of one that exists rather than a new screen.
48 frames 3 and 4 are an extractor working on a PDF and failing. A published revision needs no reading, so a list review opens at ready and those two states cannot occur.
Project settings already carries a reconcile row pointing at this route. A list review adds a second row in the same family, not a second place to look.
/jobs/listsWhere Dave builds revision 5. It is the first genuinely cross-job builder screen in the product — every builder route today is scoped to one house — and it belongs on its own page rather than as a nineteenth frame here. docs/STATE.md has carried it as deferred since before this feature was proposed.
Sam suggesting an appliance Dave did not offer, when Dave has opened that decision to it. The policy is one row on 50's existing group and exception cards, and the review is on the builder's decision screen. Neither is a selection, and both wait on that page.
/house/keepsEvery app that keeps things browses them as a grid of pictures, and the binder's kept-rows lens already calls itself a lens over the same rows, not a seventh tab — so a board is a second renderer on a screen that exists. Frame 6 is what makes multi-attachment readable, and it is the part that has to come first. A grid with nothing to open is a screensaver.
The design kit ships Unstarted for exactly this — empty because nobody has started yet, one action, a hairline and no fill — and its own example is keep-shaped: “Nothing saved for the mudroom yet. Photos, quotes and tearsheets you save land here.” It is a real state of every wall on this page and it is owed, not designed away.
The package, its four members, their prices and Dave's two revisions were authored for this page and written into _ds/FICTION.md first, per that file's own rule. Every other name, date and figure on these frames was already pinned. That block should be read as a proposal.