Skip to main content

Concepts · 7 of 7

Support triage

support.triage/1 triages one support ticket with tool-agnostic actions. What it says today, and what Canon cannot say yet.

protocols/support-triage/1.yaml and decision records 0081, 0083, 0084 and 0087, with each status checked against Canon and engineering protocols code

support.triage/1 is the rules half of a support triage case: one ticket, read at its current revision, ends triaged, escalated or needs_human. It is the first protocol here outside software delivery and incident response. Its actions name what is done to a ticket, never the tracker that holds it; which connection serves ticket.read or ticket.route is a runtime binding outside the protocol (Capabilities and bindings). The generated page, with its graph, is support.triage/1.

Shipped · runs today

  • ShippedProtocol and three fixturesprotocols/support-triage/1.yaml; fixtures tri-48213, tri-48214 and tri-48215; canon check clean.
  • ShippedClassify before routeBy precondition: ticket.route is blocked until the classification is proposed, reviewed and approved for the current revision.
  • ShippedCurrent revision and a fresh readEvidence is bound to the ticket revision; a ticket read expires after 15 minutes.

Planned · roadmap only

  • PlannedReview by someone other than the proposerEvidence independence is in Canon 0.4.0 (independent_on); support.triage/1 does not demand it yet.
  • PlannedCapabilities scoped to one ticket or queueThe scope field of decision record 0083; not in Canon.
  • PlannedEscalation opens an incident casecase.open and case_outcome, decision record 0081; not in Canon.

What it says​

StepActionEffectNeeds
readticket.readreadnothing
know who asksrequester.lookupreada current read
proposeticket.classifynonea current read
reviewclassification.reviewnonea proposal, and authority
routeticket.routewritean approved classification, a known requester, and authority
draft a replyreply.draftwritean approved classification, and authority
escalateescalation.requestwritea current read showing the target breached, and authority
  • Triaged means category, priority and route are decided on current evidence, for an identified requester, with the service-level target not breached.
  • Escalated means the target is breached and an escalation is requested. The obligation escalate_sla_breach stays open until a current read shows the target not breached or an escalation is requested.
  • Needs human means the review rejected the classification or the requester could not be identified.

The ticket's revision moves when the requester's side of the request changes, not when routing fields or internal notes change; otherwise the protocol's own writes would make its evidence stale. When the requester writes again, everything bound to the ticket is UNKNOWN until it is read, classified and reviewed again.

Whether ticket.route or reply.draft needs a person's approval is policy on the capability in a composition (decision record 0087), not part of the protocol. Sending a reply to the requester is not an action of this protocol.

What Canon cannot say yet​

GapWhat the protocol does insteadStatus
The review must come from someone other than the proposernothing; the reviewer holds the classification.review capability, which a composition grants. Canon 0.4.0 can demand that a record's producer be independent of the case's work (independent_on), but this protocol declares no independence dimension and demands noneplanned
The review approves this classification record, made before itboth are bound to the current ticket revision; the protocol uses none of Canon's evidence-order forms (first, before), and Canon has no reference from one record to anotherplanned
A category and a priority from the deployment's own listsa classification is a record; Canon matches one result text and reads no structured valueplanned
Routing only to queues the case may usethe capability is unscoped; the scope of decision record 0083 is not in Canonplanned
An escalation opens an incident.response case whose outcome counts herethe escalation is a record; case.open and case_outcome of decision record 0081 are not in Canonplanned
A second classification after a rejection, on the same revisiona rejecting and an approving review of one revision make classification.reviewed UNKNOWN; the case goes to a personplanned

The 15-minute expiry of a ticket read is Canon freshness and is shipped. The fixture harness passes each state's evaluation instant to Canon. Each triage fixture evaluates every state at the fixture's one instant, at which its read of the ticket's current revision is fresh; the expiry is tested by evaluating tri-48213's routed state with Canon's evaluator at 15 minutes after the current read, where triage still holds, and at 16, where the read is expired and triaged is no longer legitimate.