Application. When a connection opens, the server sets its audience from its own records. Harlan's crew holds partner and nothing more. Every handler that changes data requires crew, so a partner's call to reportDefect stops at the entry with the clause name in the refusal.
# a/audience.tri
flagset audience { crew = 1, partner = 2, dispatcher = 4, admin = 8 }
# s/defects.tri
handle reportDefect(const ctx, u64 truck, text note) require (ctx.audience.has(audience.crew), "crew audience") {
defect.insert({ truck = truck, note = note, reporter = ctx.auth.subject })
}