Your tickets are lying: a bug tracker, not a mood ring.
The LLM is a sensor, not a judge. The model turns messy reality into typed claims that carry their evidence. Deterministic code verifies those claims, makes every decision and computes every number. Humans approve anything that acts.
Triage takes raw customer feedback and pulls out what each person is actually complaining about, rather than reducing it to a sentiment score.
Complaints about the same underlying problem are grouped into one issue, which then moves through a real state machine that refuses illegal transitions.
Severity is a formula over how often a problem appears and how recently, so the ranking is arithmetic you can audit, not a judgement call.
There is no web application here. Every endpoint below is JSON, and both reads and writes
require a bearer token; unauthenticated requests are refused with 401. The
interactive schema at /docs is deliberately public so the route map can be
read without credentials.
| method | path | what it does |
|---|---|---|
| POST | /api/v1/feedback/import | bulk import feedback items |
| POST | /api/v1/feedback/{id}/aspects/extract | LLM aspect extraction (key-gated) |
| POST | /api/v1/triage/run | cluster, register issues, score severity |
| GET | /api/v1/issues | the issue registry |
| GET | /api/v1/issues/{id} | issue detail with members and transitions |
| POST | /api/v1/issues/{id}/transition | advance state, illegal moves rejected |
version 0.3.2 · commit ae74973 ·
built 2026-08-03T02:39:22Z · environment production
Values are baked from build arguments. unknown means the image was built without
them, which is reported rather than replaced with a plausible-looking string.