# The contractor, planned end to end, 2026-09-24 The first site made with no hand in it after the intake: `plan` with Sonnet against the reference that now teaches the opener, the sender, the mails and the guards; the ten held-out construction personas mapped to the plan's need ids by a second model call (ids only, after the plan was final); `build` with Sonnet writing the words and iris green; then the visitor. - Plan: 5 needs, 3 groups, 4 buckets, an opener for the two owner roles, a sender, mails on four needs. The builder warned twice, and rightly: neither featured owner got a move after sending. That is the plan model's omission and the reader's to fix before shipping. - Score with descriptions, three seeds: 7, 7, 6 of 8. The hand-written contractor plan of 2026-09-21 scored 8 of 8 on the same personas, one seed. Inside the spread of each other; the planned site is as good as the hand-planned one on routing, and it took one command. - Not done here: rating, and the headings-only pass, which the noise floor says would not have told us anything. ## Rated Thirteen mails, LIX 13 to 31, all very easy or easy, 23 to 39 words. Every page: which, where, asked and next at 2 of 2 for every persona, every control passing, prose at LIX 19 to 24. The budget audit found four of five needs with max_fields equal to their required fields, the tell of a model counting the form; only the crew's report (gloves on, 3 tolerated, 2 asked) was decided from the intake. `plan` now says so, and the reference tells the model to decide the number first. ## Re-planned twice, 2026-09-24 `r2/`: the reference now teaches the opener, the mails, stage words and `turned_down_from`. The model used the opener, the sender and mails again, ignored the words and the turned-down key (its ids are English, so they cost nothing), lost round one to `moves_by: { checking: submitter }` written as a bare word, and again gave the two featured owner roles no move. Desks: 19 of 19, English ids scoring fine. `r3/`: the bare word is accepted, and the spectator finding goes back to the model for one more round: round two flagged both roles, round three fixed them, and the built site raised no warning. A group without a `label` cost a round too; the label now defaults to the id. The budget tell fired on both: three or four of the needs with max_fields equal to the form. The model does not decide that number first however it is told; the reader does.