Work from another session, committed as found (tests green): - `plan` reads an intake into a plan.yaml (a model decides needs, stages, forms and budgets; a person reads the result before build). - Plans gain `doors` (a first question before the forms, when a front door would carry more than five needs), `groups` with labels that a select may draw its options from (`options_from: groups`), `private` fields kept off public pages, `multiple` selects, and `max_fields` as what the intake said the person will tolerate. - `card.rs`: an alternative as the visitor meets it, in text, so the answering visitor and `rate` read the served card, not the heading. - `rate` reads followup pages from the repo and reports "what happens next" as not measured rather than zero when it cannot. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L4jrCgLiKKHAEFuZUJjckH
The contractor intake read into a plan by a local model
portal-trainer plan --intake intakes/contractor.yaml --personas sectors/construction/needs.yaml, nemotron-3.5-lightning:30b-a3b on
ergo's Ollama, temperature 0.2. One round, 41 seconds: the YAML
parsed and passed every check build makes, first try.
That is the mechanical result. What a person reading plan.yaml next
to the intake finds is what the check cannot:
- The crew's report is public. "The crew, ours and the
subcontractors' people, are the ones on site who report things" is
a role inside the business, so
site_incidentwantsenters_as: crew. The model gave it noenters_asand put it on the front door. - A stage was dropped again. "Often papers are missing and we have
to ask again" is an
awaiting_papersstage, skippable. The model's subcontractor machine isopen -> approved | rejected. This is the same omission the Sonnet-class model made on enquiries in the first generated run, from a different model on a different need. - The need nobody asked for is missing. "Enquiries arrive by phone,
email and text and get lost" is a project manager logging a call,
with
enters_as: project_managers. The reference says the "what slows us down" answer usually names one; the model wrote none. - Two needs with one machine land in two buckets.
enquiryandpermit_applicationhave identical stages and the same handler and should shareenquiries; as written the project managers get two lists of the same kind of case. - Small things.
emailhas notype: email. The job application tolerates 6 fields for people the intake says are asking "if we are hiring"; 3 is nearer. Group ids are singular (project_manager).
None of the ten attached personas name a need in this plan, because
the sector file's ids are its own; plan listed all ten and left the
mapping to the reader, which is the intended shape.
What this run says: the step works as a draft for a person, and the
person is not optional. The three structural misses above are all
things the intake states in one sentence and the model read past. A
check for the third is possible (an intake with what_slows_us_down
and no enters_as need is suspicious); the first two need a reader.