Files
portal/runs/contractor-plan-2026-09-22/README.md
T
Bendik Aagaard LynghaugandClaude Fable 5.1 255aeb4f4b plan: intake to plan by a model; doors, labelled groups, the whole card
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
2026-09-23 12:31:51 +02:00

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.