Files
portal/runs/contractor-planned-2026-09-24/r3/plan.yaml
T
Bendik Aagaard LynghaugandClaude Fable 5.1 4d22f4cb44 plan: a spectator role goes back to the model once; bare-word movers and unlabelled groups parse
Re-planning the contractor showed three wasted rounds: `moves_by: {
checking: submitter }` written as a bare word, a group without a
label, and the two featured owner roles left with nothing to play,
which the builder only warned about after the fact. The bare word and
the missing label now parse (a label defaults to the id), and a plan
that parses with spectator roles is sent back once with the finding;
on the contractor, round three fixed both.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 06:42:05 +02:00

147 lines
5.5 KiB
YAML

business: Nordvik Bygg
language: en
contact: { name: Ingrid Nordvik, email: ingrid@nordvikbygg.example }
about: >
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.
mail: { from: "Nordvik Bygg <post@nordvikbygg.example>", reply_to: ingrid@nordvikbygg.example }
does:
- id: survey-and-build
for: enquiry
text: We survey old buildings, draw up rehabilitation plans, handle the permit, and build.
- id: subcontractor-network
for: subcontractor-application
text: We work with subcontractors for electrical, plumbing and scaffolding.
doors:
- id: work
who: housing boards and owners with a building problem or a project in mind
- id: join
who: trade firms, carpenters and apprentices who want to work with us
groups:
- { id: project_managers, label: Project managers }
- { id: safety_officer, label: Safety officer }
- { id: crew, label: Crew }
needs:
- id: enquiry
who: a housing board or private owner with a problem with a building
wants: someone to look at the building and quote the work
door: work
lands_in: enquiries
handled_by: project_managers
stages: [open, surveyed, quoted, won, lost]
done_when: [won, lost]
success: [won]
turned_down_from: [open, surveyed]
moves_by: { lost: [submitter, project_managers] }
mails: { open: submitter, won: submitter, lost: submitter }
max_fields: 4
collects:
- { name: name }
- { name: email, type: email }
- { name: phone, type: tel }
- { name: problem, type: textarea }
- id: subcontractor-application
who: a trade firm that wants to be on the subcontractor list
wants: to be approved as a subcontractor for electrical, plumbing or scaffolding work
door: join
lands_in: subcontractor_applications
handled_by: project_managers
stages: [open, checking_papers, approved, turned_down]
done_when: [approved, turned_down]
success: [approved]
skippable: [checking_papers]
turned_down_from: [open, checking_papers]
moves_by: { turned_down: [submitter, project_managers] }
mails: { open: submitter, approved: submitter, turned_down: submitter }
max_fields: 5
collects:
- { name: company_name }
- { name: email, type: email }
- { name: trade, type: select, options: [Electrical, Plumbing, Scaffolding] }
- { name: registration_number }
- { name: insurance_details, type: textarea }
- id: job-application
who: a carpenter or apprentice asking if we are hiring
wants: to be considered for a job and invited to interview
door: join
lands_in: job_applications
handled_by: project_managers
stages: [open, interview, hired, declined]
done_when: [hired, declined]
success: [hired]
skippable: [interview]
turned_down_from: [open, interview]
mails: { open: submitter, interview: submitter, hired: submitter, declined: submitter }
max_fields: 4
collects:
- { name: name }
- { name: email, type: email }
- { name: role, type: select, options: [Carpenter, Apprentice] }
- { name: experience, type: textarea, optional: true }
- id: site-report
who: crew, ours and the subcontractors' people, on site
wants: to report a hazard, near miss or wrong delivery so it gets fixed
enters_as: crew
lands_in: site_reports
handled_by: safety_officer
stages: [open, in_progress, closed]
done_when: [closed]
success: [closed]
mails: { closed: submitter }
max_fields: 3
collects:
- { name: email, type: email }
- { name: issue_type, type: select, options: [Hazard, Near miss, Wrong materials] }
- { name: description, type: textarea }
# Held out from every model that writes words.
personas:
- id: housing-board-damp
need: enquiry
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: enquiry
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: enquiry
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: enquiry
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: subcontractor-application
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: subcontractor-application
text: |
I run a scaffolding company. How do I get to do jobs for you?
- id: carpenter-jobseeker
need: job-application
text: |
I'm a certified carpenter with eight years on rehabilitation jobs. Are you hiring?
- id: apprentice
need: job-application
text: |
I finish vocational school this spring and need an apprenticeship as a bricklayer.
- id: loose-railing
need: site-report
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: site-report
text: |
The bathroom membrane delivered today is not the one in the specification. We stopped work on it.