Files
portal/runs/contractor-plan-2026-09-22/reply.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

3.1 KiB

business: Nordvik Bygg language: en contact: { name: Ingrid Nordvik, email: ingrid@nordvikbygg.example }

about: > We are twelve people. We survey old buildings, draw up rehabilitation plans, handle the permit application, and do the building work with our own carpenters plus subcontractors for electrical, plumbing and scaffolding.

needs:

  • id: enquiry who: housing boards and private owners who have a problem with a building and want someone to look at it wants: someone to look at the building and send a quote lands_in: enquiry handled_by: project_manager stages: [open, surveyed, quoted, won, lost] done_when: [won, lost] success: [won] skippable: [] moves_by: {} watched_by: [] max_fields: 4 collects:

    • { name: name }
    • { name: phone, type: tel }
    • { name: problem, type: textarea }
    • { name: urgency, type: select, options: [This week, This month, No rush] }
  • id: subcontractor_application who: trade firms who want to be on our list of subcontractors wants: to be on our list of subcontractors lands_in: subcontractor handled_by: project_manager stages: [open, approved, rejected] done_when: [approved, rejected] success: [approved] skippable: [] moves_by: {} watched_by: [] max_fields: 5 collects:

    • { name: company_name }
    • { name: trade_approval }
    • { name: insurance }
    • { name: phone, type: tel }
    • { name: email }
  • id: job_application who: carpenters and apprentices asking if we are hiring wants: a job lands_in: job_application handled_by: project_manager stages: [open, interviewed, hired, declined] done_when: [hired, declined] success: [hired] skippable: [] moves_by: {} watched_by: [] max_fields: 6 collects:

    • { name: name }
    • { name: phone, type: tel }
    • { name: experience }
    • { name: availability }
  • id: site_incident who: the crew, ours and the subcontractors' people, who report things wants: for the safety officer to decide what is done about it and close it when it is fixed lands_in: site_incident handled_by: safety_officer stages: [reported, decided, closed] done_when: [closed] success: [closed] skippable: [] moves_by: {} watched_by: [] max_fields: 3 collects:

    • { name: description, type: textarea }
    • { name: hazard_type, type: select, options: [Hazard, Near miss, Wrong materials] }
    • { name: reported_by, type: text }
  • id: permit_application who: owners who already know what they want built and need drawings, a permit and a price wants: drawings, a permit and a price lands_in: permit handled_by: project_manager stages: [open, surveyed, quoted, won, lost] done_when: [won, lost] success: [won] skippable: [] moves_by: {} watched_by: [] max_fields: 5 collects:

    • { name: name }
    • { name: phone, type: tel }
    • { name: problem, type: textarea }
    • { name: urgency, type: select, options: [This week, This month, No rush] }
    • { name: address }