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
42 lines
2.2 KiB
Markdown
42 lines
2.2 KiB
Markdown
# 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_incident` wants `enters_as:
|
|
crew`. The model gave it no `enters_as` and put it on the front
|
|
door.
|
|
- **A stage was dropped again.** "Often papers are missing and we have
|
|
to ask again" is an `awaiting_papers` stage, skippable. The model's
|
|
subcontractor machine is `open -> 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.** `enquiry` and
|
|
`permit_application` have identical stages and the same handler and
|
|
should share `enquiries`; as written the project managers get two
|
|
lists of the same kind of case.
|
|
- **Small things.** `email` has no `type: 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.
|