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

2.2 KiB

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.