Files
portal/runs/contractor-planned-2026-09-24/r3/llm/01-reply.md
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

3.6 KiB

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
  - id: safety_officer
  - id: 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]
    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]
    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 }