The /jobs API exposes cancelled and failed as distinct statuses, but the
frontend was collapsing them into a single failed state. As a result,
cancelled jobs displayed a Failed label and rendered an empty error
message container in the details popover.
- Add cancelled to JobState and a dedicated mapping in jobStateFromTask
- Render cancelled jobs with their own icon, labels, and detail rows
- Add a Cancelled filter tab that only appears when cancelled jobs exist
- Skip the error message section for cancelled jobs in the popover
- Allow cancelled jobs to be deleted from the list like failed jobs
Fixes empty error container for cancelled jobs.