- Each comment is a bordered card with a distinct header bar (author name,
clickable relative timestamp, hover-to-reveal delete) and a body section
- Subtle spine line connects comments in the avatar column
- Composer matches card style: same header bar for Write/Preview tabs,
transparent textarea inside, submit row with border-top
- Comment timestamps default to relative, click to toggle absolute
(mirrors sidebar date toggle pattern)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Routes and links now use /:id (e.g. /V675409888) instead of /tickets/:id.
API calls are unaffected as they go through /api/tickets/.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Delete the now-unused SidebarField component from TicketDetail.tsx
- Add typecheck-client CI job that runs tsc --noEmit on the client before
the Docker build, so TypeScript errors surface fast with a clear message
- build-client now depends on typecheck-client passing
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Defaults to relative time (e.g. '5 hours ago'); clicking switches to
absolute timestamp and back.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Status and Severity now match CTI style (full-width button, hover bg, no chevron)
- Remove 'Change routing' hint text from CTI block
- Replace Assignee dropdown with clickable block that opens a modal picker with avatars
- Add Assignee modal consistent with Status/Severity modal pattern
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Rename 'Details' card to 'Ticket Summary'
- Replace status/severity dropdowns with badge displays that open small modal pickers on click
- Show Category, Type, Issue as separate labeled rows that together act as one clickable unit opening the routing modal
- Reorganize into sections: status/severity, CTI routing, dates (created/modified/resolved), people (assignee + requester)
- Add Requester field showing the ticket creator with avatar
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>