Deciding against the picture

The kitchen cabinet package, being chosen. Not a form with a color field on it — the room, with everything already settled in it, and the candidate painted onto it while you consider it. The question a homeowner is actually asking is never do I like this green. It is do I like this green in the room I have already half-decided, and that question has one honest answer and it is a picture.

1 · The room as it stands
Monday 17 May. Sea Salt on the walls and warm oak underfoot — and a counter and a cabinet package nobody has chosen, drawn in the warm gray that means undecided. Nothing is selected yet. This is the state a homeowner opens on, and the two finishes already in it are the whole reason the next one is hard. Nothing has been sent to Nora yet, so the options carry no slot for her: the ask is one action on the whole decision, under the rail.
On the room now
Sea Salt
Walls
Warm oak
Floor
Counter
Not chosen
Cabinets
Not chosen
What closes this
6-10 weeks Cabinets set · week of 8 June

Changing it after you sign starts the six to ten weeks again.

Reed Millwork builds these to order, and the clock starts on your signature rather than on the order.

The counter cannot be templated until the cabinets are set, and the slab yard runs two weeks behind the template.

Kitchen · The Hollis House
The cabinet package

Three ways to go. Put each one on the room before you pick one.

Three ways to go
Stained oak, matched to the floor Reed Millwork · stain matched on site
Under $18,000
Painted, Pewter Green Sherwin-Williams SW 6208 LRV 12
$21,400 +$3,400 CO-3 quoted 14 May · allowance $18,000
Painted, Sea Salt Sherwin-Williams SW 6204 · the wall color
Under $18,000 the painter is already spraying this color
Send all three to Nora before you settle it

Nothing is chosen. Pick one and the room wears it — or send her the whole question first.

This arrangement is drawn at 1160pt and it is not squeezed below that. The relationship it draws — the picture in its own column, the options beside it — holds from 840 up, which is the app's own rail breakpoint. Below 840 it becomes frame 4's arrangement, and frame 6 draws the 600pt width where the change happens. Widen the window past 1216 to see frames 1, 2 and 3.

Already in the code

The two settled swatches. A color is a row in zone_memories with memory_type='color' — but only title and memory_type are columns. The hex, the free-text brand and the soft paint_id are JSON keys inside the opaque metadata text blob, unindexed and unvalidated server-side. What is properly typed is the other end: paint_colors is a real catalog with a real lrv column, which is where SW 6204 and an LRV come from. The money is not the code's — $18,000, $21,400 and CO-3 are all _ds/FICTION.md's.

What has to be built

The wire between a color and the part of the room it covers. kitchen.svg names eleven regions. The app's surface vocabulary names seven — wall | trim | accent | ceiling | floor | cabinet | other — it exists only inside the AI extractor's JSON schema at ai/extract_palette.go:81, it lands in an unvalidated metadata text blob, and it has no counter, no backsplash, no island, no appliance and no fixture. Five of the eleven regions this drawing needs cannot be addressed at all, and cabinet cannot tell an upper from a base. The picture itself is less missing than it looks: zone_memories already takes a url with memory_type='image', and zone_library.image_url gives every zone a default illustration. What nothing does is associate a drawing's named regions with anything, so there is no surface for a color to land on.

The counter is on the pending hatch, not on honed quartz. Mid-build it is one of the two things still open in this kitchen, and there are slabs to go and see — drawing a material on it would be the picture claiming a decision nobody has made, which is the one thing this page cannot afford to do.

2 · The one that saves money
Reed Millwork can stain the boxes to match the floor, and it comes in under the money set aside. Put it on the room and the floor stops being a floor: the uppers, the bases, the island and the ground are one brown mass with a white slab floating in it. Nothing on this screen says that. The picture says it, and the settle button underneath is live.
On the room now
Sea Salt
Walls
Warm oak
Floor
Counter
Not chosen
Stained oak
Trying it
What closes this
6-10 weeks Cabinets set · week of 8 June

Changing it after you sign starts the six to ten weeks again.

Reed Millwork builds these to order, and the clock starts on your signature rather than on the order.

The counter cannot be templated until the cabinets are set, and the slab yard runs two weeks behind the template.

Kitchen · The Hollis House
The cabinet package

Three ways to go. Put each one on the room before you pick one.

Three ways to go
On the room
Stained oak, matched to the floor Reed Millwork · stain matched on site
Under $18,000

Your floor is this exact oak — Hallmark's warm oak, natural. Two of them is a choice rather than an accident, and it is worth seeing before you take the cheaper one.

Painted, Pewter Green Sherwin-Williams SW 6208 LRV 12
$21,400 +$3,400 CO-3 quoted 14 May · allowance $18,000
Painted, Sea Salt Sherwin-Williams SW 6204 · the wall color
Under $18,000 the painter is already spraying this color
Send all three to Nora before you settle it
Settle the stained oak

Marcus Reed gets the go-ahead and the six to ten weeks begin.

Frame 2 is drawn at 1160pt. Widen the window past 1216 to see the stained oak on the room.

Already in the code

Both hexes. #B4915F is the floor's settled color and it is also the candidate's, and they are the same string in the same table. What the app cannot do is notice that, because nothing knows either of them is a floor or a cabinet.

What has to be built

A candidate that is applied but not settled. Every color the schema holds is a fact about the house. Trying one on is a fourth state — not proposed, not settled, on the screen for a minute — and it has to be able to paint the drawing without writing anything down. That is a render-time overlay on the room's region map, not a row.

There is no warning on this frame and there must not be. The card states a fact, that the floor is this same oak, and shows the two swatches touching. The picture supplies the verdict. A red banner would be the app having the opinion, and the opinion is not the app's to have — two woods at one value is a real look that some people want on purpose. The settle button says Settle the stained oak and it works.

3 · Settling it
Pewter Green on all three regions the package covers: the uppers, the bases and the island. It is $3,400 more than the money set aside, and it returns twelve per cent of the light in a room with one window — which is on the card, because the one you should take still has a price and hiding it is how regret gets made. What settling starts is under the button, before you press it. And directly above the button is the other thing a person does at this exact moment, which is stop and want Nora's eyes on it first — on all three at once, because an opinion about one color with the other two off the screen is worth nothing in a year.
On the room now
Sea Salt
Walls
Warm oak
Floor
Counter
Not chosen
Pewter Green
Trying it
What closes this
6-10 weeks Cabinets set · week of 8 June

Changing it after you sign starts the six to ten weeks again.

Reed Millwork builds these to order, and the clock starts on your signature rather than on the order.

The counter cannot be templated until the cabinets are set, and the slab yard runs two weeks behind the template.

Kitchen · The Hollis House
The cabinet package

Three ways to go. Put each one on the room before you pick one.

Three ways to go
On the room
Painted, Pewter Green Sherwin-Williams SW 6208 LRV 12
$21,400 +$3,400 CO-3 quoted 14 May · allowance $18,000

LRV 12 means it hands back twelve per cent of the light that lands on it. This kitchen has one window, over the sink. On a gray afternoon the room will be darker than the drawing.

Stained oak, matched to the floor Reed Millwork · stain matched on site
Under $18,000
Painted, Sea Salt Sherwin-Williams SW 6204 · the wall color
Under $18,000 the painter is already spraying this color
Send all three to Nora before you settle it
Settle Pewter Green

Marcus Reed gets the go-ahead, the six to ten weeks begin, and CO-3 — the $3,400 cabinet upgrade — moves from a draft to your signature.

Frame 3 is drawn at 1160pt. Widen the window past 1216 to see Pewter Green on the room.

Already in the code

The change order's shape, and the LRV. The live table is project_change_orders — there is no change_orders table, migration 0071 dropped it — and it does carry impact_amount_cents, a co_number and a state defaulting to draft, so a $3,400 draft is a row this schema can already hold. CO-3 itself, the $21,400 and the $18,000 are _ds/FICTION.md's and not rows anybody has written. The LRV is the real one: paint_colors.lrv is a typed column with a catalog behind it.

What has to be built

Two things, and they are separable. A color spec-field type: the seven are text, long_text, number_with_unit, boolean, single_select, multi_select and dimensions (spec_field_registry.dart:21-29), so a settled decision cannot produce a hex — about 65 color-shaped field keys store free text nothing parses. A decision-to-region map, one to many: the cabinet package paints cabinet-upper, cabinet-lower and island. One decision, three regions, and nothing today maps a decision to a drawable surface at all, let alone to a set of them.

No clock anywhere on this frame. The What closes this card says what closes it — a signature that starts six to ten weeks, and a counter that cannot be templated until the cabinets are set. That is a condition, not a countdown, and it is the same sentence tomorrow. Worth naming what a change order cannot do here: change_type really does accept schedule_change, but the only impact columns are impact_amount and impact_amount_cents, both money. This pushes you a week is the sentence a change order cannot store.

4 · The room, pinned
The constraint case, and the frame after the send. The picture stops holding a column and pins to the top of the screen; the options scroll under it, and the swatch row keeps them one tap from the picture. You sent Nora the whole decision, and what came back is a stance per option: she answered on Sea Salt and she did not answer on the other two, so those two say so. Silence gets a row of its own, because a blank slot reads as agreement and it is not one.
Kitchen · the cabinet package
Stained oak
Pewter Green
Sea Salt
Already in the code

The bar at the bottom. HcNavMenu is built, tested, themed and imported by nothing, so drawing it is not a proposal for a navigation, it is a drawing of the one already written.

What has to be built

Stance per option, and silence per option, both attributed to a person. Stance today is a property of a decision; one send returning three answers needs it on decision_options, and it needs a stored difference between said no and said nothing, which is a state and not an absent row. The seat for Nora is less missing than it looks: project_members(user_id, project_id, role) is a real table, account_members and account_invitations sit beside it, and HouseholdRole is a five-value enum in household_role.dart. What nothing does is write a second project_members row, so the seat is structurally empty rather than absent. A contacts table really is missing — the only contacts-shaped table in the schema is contact_submissions, a marketing form. Attribution must not encode the route in: a profile exists for her either way, and the note has to read and store identically whether she opened a link from a text message or opened the app.

The picture is a sibling of the scroller, not the first thing in it. That is the whole narrow arrangement: above 840 the picture holds a column and the options scroll beside it; below 840 it pins and they scroll under it. It is not the wide layout stacked, and the frame runs past the bottom of the phone rather than shrinking to end at 844.

5 · After
The room keeps the color, and the decision becomes a record. The record keeps the two that lost, and why — because should I have chosen differently is a question that arrives in nine months, and it deserves an answer rather than a silence.
Already in the code

The record's spine. The decision, its options and its specification fields are real tables, and decision_options is richer than it looks: cons, rationale, coach_take, locks and stays_flexible are all columns on it. The chips under the picture are the room as it stands after this one lands — three settled, and a counter still on the hatch.

What has to be built

The reason this household passed an option over. Everything decision_options carries is authored from the library — what the option is like in general, written before anybody bought a lot. There is no column for what happened in this house on 17 May, which is what both of these rows are: one is what you saw when you put it on the room, and one is Nora's, so keeping it is frame 4's requirement read a year later. The silence has to survive too — she said nothing about this one is a different fact from she was fine with it, and only one of them is true.

Nothing on this screen counts anything. No bar, no ratio, no 5 of 12. A settled decision is a fact and the two beside it are the alternatives it was chosen over, and the honest way to draw that is a swatch, a name and a sentence.

6 · Checked, and it passed
The calm register, and the placement argument. Proof sits between what you settled and what you didn’t choose: live status above archival reflection. Below the two rejected options it would make somebody scroll past two things they already turned down to learn their framing failed; above everything it would rearrange the screen by state, so whoever learned where Checked lives would find it somewhere else the week it went wrong.
Kitchen · settled Monday 17 May
The cabinet package
What you settled
Finish Painted, Pewter Green: Sherwin-Williams SW 6208
Going in The week of 8 June. Worth being there.
Checked
Framing inspection Passed on 6 August, signed by R. Alvarez
What you didn't choose
Painted, Sea Salt Cheaper. You sent Nora the whole decision, and this is the one she answered on.
Already in the code

Migration 0073 and everything after it: decision_verifications, an append-only event log, a state derived from the evidence attached, and a PUT .../resolutions/{r}/verification gated on manage_decisions. The row is one line because the calm states are one line.

The row is the link

One control and one destination. The chevron is the only affordance, and it goes to the same place for every reader — a homeowner and the builder who attached the proof land on the same screen, and capability decides what that screen offers, never where the link goes. The repo already states this rule for draws: a release stays a readable record after acknowledgment, and only the acknowledgment is gated.

A received requirement — an engineer’s letter on file — sits in this same register and reads On file since 6 August, added by Dana Ruiz. It names the person who filed it on purpose. Holding the letter genuinely satisfies the requirement, but on file alone sits in the same calm tone as Passed and invites a reader to take a filed document for a signed-off inspection. The letter’s own author is not structured data; the person on the job who filed it is what we actually know.

7 · The framing inspection failed
The amber register, and the whole point of the design. This is the fear on page 43’s own premise arriving — finding out too late that it should have gone differently — and the job is to deliver it honestly rather than softly. The decision stays settled and keeps both options that lost. Failure changes the proof line and never the decision, which is not a stance: neither 0073 nor postgres_verification.go contains a statement that updates decisions or resolutions.
Kitchen · settled Monday 17 May
The cabinet package
What you settled
Finish Painted, Pewter Green: Sherwin-Williams SW 6208
Going in Built the week of 8 June.
Checked

The framing inspection failed on 6 August.

Signed by R. Alvarez. This decision is still settled. What was built against it has to be put right.

Every check on this Who did it, and when 3
What you didn't choose
Painted, Sea Salt Cheaper. You sent Nora the whole decision, and this is the one she answered on.
Why a callout and then a card

A callout is a statement, not a control. It says what happened; the card beneath it is the way into the record. The count rides the row only when there is more than one event, because 1 is noise. The calm register carries no count at all.

Loud only here

Failed and partial lift to amber and nothing else does. Attention is only trustworthy if it is rare, so a pending requirement and a passed one are the same one quiet line. Passed in part gets the same treatment as failed and a shorter sentence: the reader still has to do something about it.

No action on this surface in any state. Writing needs manage_decisions, which a homeowner does not hold, and a disabled control here would advertise a power they do not have.

8 · Nobody has signed it off yet
The common state on a freshly settled decision, and the one the design cannot draw well. The row is inert here. A requirement nothing has ever been attached to has no events, so the history is empty and the chevron would open a blank screen. It keeps its text, drops the chevron, and does not respond to a tap.
Kitchen · settled Monday 17 May
The cabinet package
What you settled
Finish Painted, Pewter Green: Sherwin-Williams SW 6208
Going in Going in the week of 8 June.
Checked
Framing inspection Nobody has signed it off yet
What you didn't choose
Painted, Sea Salt Cheaper. You sent Nora the whole decision, and this is the one she answered on.
Two rules that had to be checked against each other

The row is the link, and the reader goes to the record. Both are reasonable and together they open an empty screen. Neither rule is wrong; the pair was never tested against the state where there is nothing to show.

What this design cannot close

A requirement has no age. 0073 carries no due date, no deadline and no expiry, so a decision unchecked for six weeks is indistinguishable in the data from one settled yesterday. The design keys loudness to outcome, and the state that most deserves a homeowner’s question is often the one with no outcome at all. Ruled 2026-08-28 (Q130): the pending row says whether an eligible inspection is booked, which is a fact already stored, rather than asserting a deadline nobody has written. Not yet drawn: nothing can set an inspection’s evidence_kind, so the booked half could never appear and the unbooked half could never clear. That is Q131, ruled 2026-08-29 and sequenced behind Q79.

9 · The same decision, at 600
Where the side-by-side arrangement gives up. Below 840 — the app's own rail breakpoint — the picture cannot hold a column and still be large enough to decide against, so it stops being a panel and becomes a band across the top with the options under it. Nothing is dropped and nothing is scaled: the picture gets the full width instead of 560, the swatch row moves out from under it to sit beside the picture as a try row, and the options keep every sentence they had at 1160.
Kitchen · The Hollis House
The cabinet package

Three ways to go. Put each one on the room before you pick one.

Stained oak
Pewter Green
Sea Salt
Three ways to go
On the room
Painted, Pewter Green Sherwin-Williams SW 6208 LRV 12
$21,400 +$3,400 CO-3 quoted 14 May · allowance $18,000 · settling it moves CO-3 to your signature

LRV 12 means it hands back twelve per cent of the light that lands on it. This kitchen has one window, over the sink.

Stained oak, matched to the floor Reed Millwork · stain matched on site
Under $18,000
Painted, Sea Salt Sherwin-Williams SW 6204 · the wall color
Under $18,000 the painter is already spraying this color
Send all three to Nora before you settle it
Settle Pewter Green
Already in the code

The breakpoint. context.usesRail is 840 in the app today and it is the same switch this arrangement turns on: it is the width at which the shell can afford a second column, which is exactly the width at which this screen can.

What has to be built

Nothing this frame does not already need. It is frames 1 to 3 at a width where the picture cannot hold a column, and the only thing that moves is the picture.

The swatch strip under the picture on frames 1 to 3 is the settled finishes; the try row here is the candidates. They are two different lists and they are never merged, because one is what the room already is and the other is what it might become.

10 · Deciding, with the picture beside it
Two columns. This page argues that the picture is the subject rather than the decoration, and the subject column is where that lands: the room on the left, the options on the right, neither squeezing the other.
The kitchen
Wall color
The kitchen
On the room
Painted, Sea Salt Sherwin-Williams SW 6204
Under $18,000 the painter is already spraying this color
Nora: you asked, she answered

Please not the same color as the walls. I want the kitchen to be the thing you see.

Painted, Pewter Green SW 6208 LRV 12
$21,400 +$3,400 CO-3 quoted 14 May · allowance $18,000
Nora: you asked, nothing back

She hasn't said anything about this one. That isn't a yes.

Stained oak, matched to the floor Reed Millwork · stain matched on site
Under $18,000
Nora: you asked, nothing back

She hasn't said anything about this one. That isn't a yes.

Already in this room
Sea Salt
Walls
Warm oak
Floor
Counter
Not chosen
What closes this
6-10 weeks Cabinets set · week of 8 June

Changing it after you sign starts the six to ten weeks again.

Reed Millwork builds these to order, and the clock starts on your signature rather than on the order. The counter can't be templated until they are set.

Choosing this fixes the wall color · the painter starts Monday Settle Sea Salt

The premise, in one paragraph

HouseChalk is not a decision tracker. A tracker answers have I done it yet, and nobody is frightened of that. What a homeowner is frightened of is finding out too late that they should have chosen differently, when the thing is already glued, screwed and painted. That fear is visual, and so the answer has to be. The room illustration is therefore not an ornament at the top of a decision screen. It is the surface the decision is made on, and the decision screen is what sits beside it.

Everything else on these six frames follows from that. The already-settled finishes are on the screen in every state, because the question is never whether you like a green — it is whether you like it against Sea Salt walls and a warm oak floor you chose four months ago and cannot now unchoose. The candidate that saves money is shown being wrong rather than described as wrong. The window is a condition rather than a countdown. And Nora's answer is on the option it is about, not in a message you find afterward.

What the backend has to grow

Nine things, and they are separable. None of them is a limitation to be worked around on this page; each is a specific piece of work with a specific reason.

Two more that this page relies on and did not have to invent, both already named in _ds/FICTION.md: nothing names a delay and nothing names a visit — no delays, risks or milestones table exists, and the nearest relative is decision_library.delay_consequences, static library copy hanging off a decision. And a change order can carry schedule_change as its change_type, but its only impact columns are impact_amount and impact_amount_cents, both money, so this pushes you a week is the sentence it cannot store. Every line on that card is therefore content that has to be written and then stored, not a query.

Notes on the drawing

One thing the fiction does not have

Named here rather than invented quietly, because a blank cell in _ds/FICTION.md is a license for the next page to fill it in differently.

An earlier revision of this page named a second gap here: that the fiction had no second person in the household. It has one now. _ds/FICTION.md pins Sam Hollis and Nora Hollis, and pins the grammar with them — You is positional, meaning whoever is holding the phone, and everybody who is not the viewer is named. These frames are drawn from Sam's seat, so you is Sam and the person the screen talks about is Nora; on her phone it is the mirror. An earlier revision of the arbiter left the homeowner permanently unnamed, which reads fine from one seat and collapses from the other. It also pins the rule this page was already following for its own reasons: never draw how somebody authenticated.

One thing this page corrected rather than reconciled. An earlier revision drew the counter at honed quartz, arguing that the material was settled and only the slab was open. The file is explicit that mid-build the kitchen's chips show cabinets and counters on the pending hatch, and 13, 21 and 22 all draw it pending — so 20 was the page out of step and the counter is now on the hatch on every frame. The four-finish color table in that file is the as-built set, which is a different moment from 17 May.

Grounded in: Zillow's Stage this space, where a room is held large and still while named alternatives in a rail beside it swap what you are looking at, which is frame 1's arrangement exactly; Hims' Shake Selects, where the subject is pinned in its own column and the options and their consequences stack in the other; Revolut Business' card configurator, where the subject renders in the choice you are considering, its name and consequence sit directly under it, and the single commit at the bottom names what you are committing to rather than saying Continue; Alan's product page, where the image pins at the top with the variants as a swatch row immediately under it and the full option list below that, which is frame 4; Whering's shared wishlist, where somebody else's opinion attaches to the specific item it is about rather than to the board; Programa's specification schedule, where a settled selection is a record row carrying product, brand, color, finish and supplier, which is frame 5's settled card; and IKEA's room designer, where the render holds the majority of the screen and the variant tray docks under it rather than floating over it.