Triage + assign + resolve reports

Once your jurisdiction is claimed, the workflow lives in `/civicreports` → **Inbox** (Kanban) and **List** (filtered list with status / category dropdowns).

Lifecycle:

1. **Reported** — initial state on submission. Visible publicly.
2. **Triaged** — an editor accepts it as in-scope. (Out-of-scope reports get **rejected** with a public note.)
3. **Assigned** — assigned to a worker. SLA timer starts; default targets are per-category (water = 24h, pothole = 7d, sidewalk = 30d).
4. **In Progress** — work has started.
5. **Resolved** — work is complete. Upload "after" photos to prove it. The original reporter (if signed in) can then **Verify** to confirm.

Tools:
- Click any card to open the report detail page (`/report/<id>`) and see the full timeline.
- "Merge as duplicate" collapses two reports of the same issue into one (the canonical one keeps both vote counts).
- The SLA escalation scheduler runs every 6 hours — any `assigned` / `inProgress` report past its SLA target auto-escalates to urgent priority.
- Wally tools `civicReports_assign` and `civicReports_resolve` let staff drive the workflow from chat ("assign that pothole to Marcus", "the Granby St leak is patched").