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

145 lines
4.9 KiB
YAML

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 }
# Held out from every model that writes words.
personas:
- id: housing-board-damp
need: win-survey-work
text: |
I chair the board of a housing cooperative from the seventies. Two ground-floor flats have damp in the walls and we don't know if it's drainage or the facade. We need someone to tell us.
- id: buyer-before-purchase
need: win-survey-work
text: |
We are about to buy an old timber house. Before we sign we want a professional to go through it and tell us what is wrong with it.
- id: attic-conversion
need: win-design-work
text: |
We want to turn our attic into two bedrooms and a bathroom. We need drawings and someone who handles the application to the municipality.
- id: shop-to-flat
need: win-design-work
text: |
I own a former shop on the ground floor and want to make it a flat. I have no idea what is allowed. Can you sort that out and give me a price?
- id: electrician-firm
need: vet-subcontractor
text: |
We are a four-person electrical firm, fully certified. We would like to get on your list so you call us when you need electricians.
- id: scaffolder
need: vet-subcontractor
text: |
I run a scaffolding company. How do I get to do jobs for you?
- id: carpenter-jobseeker
need: hire-crew
text: |
I'm a certified carpenter with eight years on rehabilitation jobs. Are you hiring?
- id: apprentice
need: hire-crew
text: |
I finish vocational school this spring and need an apprenticeship as a bricklayer.
- id: loose-railing
need: report-deviation
text: |
The railing on the third level of the scaffold on the north side is loose. Nobody got hurt but someone will.
- id: wrong-membrane
need: report-deviation
text: |
The bathroom membrane delivered today is not the one in the specification. We stopped work on it.