# ── Types ─────────────────────────────────────────────
record Triage
trade : text # The trade the repair needs.
urgency : ( 'routine' | 'urgent' )
summary : text
end record
record Vendor
name : text
estimate : money # The written quote for this job.
end record
record Approval
grantedBy : text # Who authorised the spend.
note : text
end record
record Slot
window : text # The agreed access window.
end record
record Confirmation
inWriting : ( 'yes' | 'no' )
note : text
end record
# ── Plan ──────────────────────────────────────────────
# 1 · triage
pluck
try @reasoning=high
: Read the tenant's message and any attached photographs. Classify
: the trade, judge the urgency against the standing urgency rules,
: and summarise the problem in one sentence.
try @reasoning=high
: Consult the unit's maintenance history and classify from prior
: reports of the same fault.
verify → ( 'pass' | 'reattempt' ) @reasoning=high
? $($$.trade) is a real trade, and $($$.urgency) follows the
? standing rules given the evidence in the message.
failure message
! The report could not be classified from what the tenant sent.
end pluck → TRIAGE : Triage
# 2 · vendor
work
do @reasoning=high
: Choose one vendor for $(TRIAGE.trade) from the approved list,
: covering the property's postcode. Record the vendor's name and
: the written estimate for this specific job.
verify → ( 'pass' | 'fail' ) @reasoning=high
? $($$.name) is licensed for $(TRIAGE.trade), insured to date,
? covers the postcode, and has no open dispute.
failure message
! No eligible vendor could be found for this repair.
end work → VENDOR : Vendor
# 3 · the limit
decide
evaluate @reasoning=low
? Is $(VENDOR.estimate) over the owner's standing approval limit
? for a single repair?
end decide → LIMIT : ( 'over' | 'within' )
# 4 · approval
switch $(LIMIT)
when 'over'
interact
select @reasoning=medium
: Pick the owner of the unit.
failure message
! No owner could be identified for this unit.
deliver
: What was reported, which vendor was chosen, and the
: estimate $(VENDOR.estimate).
collect
: Ask for approval to proceed, and wait for the answer —
: however long it takes.
verify → ( 'pass' | 'reask' ) @reasoning=medium
? $($$) is an explicit approval or refusal from the owner.
end interact → APPROVAL
when 'within'
work
do @reasoning=low
: Record the standing approval — $(VENDOR.estimate) is
: within the owner's limit, so no ask is needed.
end work → APPROVAL
end switch → APPROVAL : Approval
# 5 · the slot
negotiate
select @reasoning=medium
: Pick the tenant who reported the fault, and the vendor
: $(VENDOR.name).
failure message
! The tenant or the vendor could not be identified.
collect
: Converge on one access window, honouring the standing
: contact-hours rule. The tenant must be present or give written
: consent recorded against the work order.
end negotiate → SLOT : Slot
# 6 · the work order
work
do @reasoning=medium
: Raise the work order carrying $(VENDOR.name), the approved
: amount from $(APPROVAL.note), $(SLOT.window), and the access
: arrangement.
verify → ( 'pass' | 'fail' ) @reasoning=low
? The work order exists and carries the window, the amount and
? the access note — check the record itself.
failure message
! The work order could not be created.
end work
# 7 · tell the tenant
notify
select @reasoning=low
: Pick the tenant who reported the fault.
failure message
! The tenant could not be identified.
deliver
: Expect $(VENDOR.name) during $(SLOT.window) — with the access
: note, and how to reschedule if the window fails.
end notify
# 8 · confirm
interact
select @reasoning=low
: Pick the tenant who reported the fault.
failure message
! The tenant could not be identified.
deliver
: The access window has passed — checking on the repair.
collect
: Ask whether the repair is complete, and for confirmation in
: writing.
verify → ( 'pass' | 'reask' ) @reasoning=medium
? $($$) says clearly whether the repair is complete, in writing.
end interact → CONFIRMED : Confirmation
# 9 · report
work
do @reasoning=medium
: Report the final cost and the outcome to the owner —
: include $(CONFIRMED.note) and both photographs.
verify → ( 'pass' | 'fail' ) @reasoning=low
? The report names the amount actually invoiced and carries
? both photographs.
failure message
! The owner report could not be assembled.
end work
VERIFIED · draft 3 · 9 steps · every value assigned on every path