Cases & Triage
A Case is the central unit of work in NestFleet. Every signal that arrives — an email, a Telegram message, a GitHub issue, a webhook event — is normalised into a case before any AI processing occurs. This normalisation ensures consistent triage, routing, and audit regardless of where the signal originated.
What is a Case?
A case captures the essential information from a customer or user signal:
- Source channel — where it arrived (email, Telegram, GitHub, webhook)
- Raw content — the original message text, preserved for the audit log
- Type — classified by the triage agent (see below)
- Severity — P0 through P4, assigned by the triage agent based on urgency signals
- Confidence — how certain the triage agent is about its classification
- Status — where the case is in its lifecycle
- Product — which product this case belongs to
- Assignee — the team member responsible for the case (optional)
- Notes — internal team notes added during investigation
- Linked known issues and change requests
Case lifecycle
Cases move through a defined set of states. Transitions are logged to the audit trail with the actor (user or system) and timestamp.
| State | Meaning |
|---|---|
| new | Just arrived. The triage job has been enqueued but has not yet run. |
| triaged | The triage agent has completed. Severity, type, and confidence have been assigned. The case is waiting to be routed. |
| awaiting-lead | Triage confidence was below the auto-reply threshold, or the case was escalated. A human lead needs to review. |
| open | Acknowledged and actively being worked on by the team. |
| auto-resolved | The triage agent determined the case matches a known issue and sent an auto-reply. Pending human confirmation. |
| closed | Resolved and closed by a team member. Can be reopened if the customer replies. |
Severity badges (P0 – P4)
The triage agent assigns a severity based on urgency signals in the case content — words like "down", "broken", "urgent", and "production" push severity higher. Operators can override the AI assignment from the case detail view.
| Level | Name | Definition | Typical response target |
|---|---|---|---|
| P0 | Critical | Active outage or data loss. Revenue-impacting, all users affected. | Immediate — escalate now |
| P1 | High | Major feature broken, significant subset of users affected, no workaround. | Within 1 hour |
| P2 | Medium | Important feature degraded, workaround exists, or a subset of users affected. | Within 4 hours |
| P3 | Low | Minor issue, cosmetic bug, or inconvenience. Most feature requests. | Within 1 business day |
| P4 | Negligible | Nice-to-have, typos, documentation issues, speculative ideas. | Best-effort |
P0 and P1 cases trigger immediate Telegram and/or Slack alerts to the configured team channels (see Notifications).
Case types
The triage agent classifies each case into one of the following types. Type influences routing — a feature-request is routed to the Product Lead queue; an outage is escalated immediately regardless of confidence.
bug— A defect in existing behaviourfeature-request— A request for new or changed functionalityquestion— A "how do I" or "does it support" inquiryoutage— A reported system-wide or widespread failuresales-inquiry— Pre-sales or pricing questionfeedback— General praise, criticism, or suggestionsecurity— Potential security vulnerability reportspam— Automated or irrelevant noiseother— Catch-all for unclassified signals
Confidence score
The confidence score (0.0 – 1.0) represents the triage agent's certainty about its classification. It is derived from the LLM output and calibrated against the agent's reasoning trace.
Confidence affects routing in two ways:
- Auto-reply gate — If confidence meets or exceeds the product's configured threshold (default: 0.80), and a matching known issue is found, NestFleet proceeds to auto-reply. Below the threshold, the case moves to
awaiting-lead. - Visual indicator — In the queue view, cases with confidence below 0.60 display a yellow badge to signal they need human review even if they are not yet escalated.
You can adjust the auto-reply confidence threshold per product in Settings → Triage. See AI Auto-Reply for details.
The triage agent
When a new case arrives, a triage job is enqueued via pg-boss. The triage agent performs the following steps in a single LLM call with structured output:
- Reads the case content and any available context (product description, recent similar cases)
- Classifies the case type and severity
- Produces a concise one-paragraph reasoning trace (stored on the case for review)
- Assigns a confidence score based on how unambiguous the classification is
- Determines whether to proceed to known-issue matching or route to the awaiting-lead queue
The reasoning trace is visible in the case detail view under the Triage tab. It is stored verbatim and is never edited by the system. This gives your team full visibility into why the AI made a particular decision.
The triage model uses the fast LLM tier (LLM_MODEL_FAST) when configured. For high-volume products, set this to a cheaper model (e.g. claude-haiku) to reduce costs while reserving the standard model for auto-reply generation.
Queue view
The Cases queue is the primary operational view. It shows all cases for the selected product, filterable by:
- Status — filter to open, awaiting-lead, auto-resolved, etc.
- Severity — filter to P0/P1 for on-call monitoring
- Type — separate bugs from feature requests from questions
- Assignee — view your own queue or another team member's
- Channel — filter by source (email, Telegram, GitHub)
- Date range — narrow to a specific time window
The queue sorts by severity (highest first) and then by arrival time (oldest first) by default. You can change the sort order from the column headers.
Bulk actions — select multiple cases with the checkboxes to:
- Assign to a team member
- Change status (e.g. bulk-close resolved cases)
- Change severity
- Link to a known issue
Escalation
Any team member can escalate a case to move it to the awaiting-lead state and notify a Support Lead or Change Lead. Escalation is appropriate when:
- The case requires a decision beyond the responder's authority (e.g. a refund, a breaking change)
- The customer is expressing significant frustration and needs senior attention
- Triage classified the case as P0 or P1 and the on-call lead has not yet acknowledged it
- The case is complex and you need help from the engineering team
To escalate: open the case detail, click Escalate, optionally add a note explaining why, and select the target lead. The lead receives an email notification and a Telegram alert if configured.