Converge every ticket-detail surface onto the canonical IssueDetail (in
DetailModal) + TicketCard, per reference_ticket_detail_disparities.
STATUS — one model:
- IssueDetail no longer double-renders status. The green button (shared
TicketStatusControl) is relabelled "Reporter" with a schedule icon — it is
a postpone/snooze + quick-close control, not a 2nd status setter. The single
5-value status select (Open/Replied/On Hold/Resolved/Closed) is canonical.
TAGS — one source, via the shared TagEditor:
- New useTagCatalog composable unifies the tag catalogue: ERPNext "Dispatch Tag"
∪ roster technician skills (hub /roster/technicians). Roster skills like
"sans-fil"/"épissure" now appear on ticket tags (were missing before).
- IssueDetail replaces its bespoke q-select + chip row with TagEditor; the tag
manager (rename/recolor/delete) is delegated to the composable's CRUD.
ONE ticket-row component (TicketCard):
- LocationCard's ad-hoc per-address ticket list now renders TicketCard.
- TicketsPage mobile card mode (DataTable #item slot) renders TicketCard.
- assignee handling (assigned_staff/opened_by_staff avatars) is now consistent
across fiche, location, and /tickets.
Verified in local preview against live backend: Reporter button + single
status select, TagEditor dropdown surfacing roster skills ("sans-fil" under
"Compétence"), TicketCard rows on fiche + LocationCard, no component errors.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>