{ "name": "event.task.state \u2014 a task fails because the file vanished from the server", "description": "Carries the summary so the row repaints in full, and the error whenever the new state is failed or retry_wait. Note that error.code is a TaskErrorCode string, not a JSON-RPC code: the RPC that reported this failure succeeded.", "notification": { "jsonrpc": "2.0", "method": "event.task.state", "params": { "taskId": "3f7a2b1c-5d6e-4f80-9a1b-2c3d4e5f6071", "state": "failed", "previousState": "downloading", "summary": { "taskId": "3f7a2b1c-5d6e-4f80-9a1b-2c3d4e5f6071", "filename": "ubuntu-26.04-desktop-amd64.iso", "saveDir": "/home/sami/Downloads/Programs", "url": "https://releases.ubuntu.com/26.04/ubuntu-26.04-desktop-amd64.iso", "effectiveUrl": "https://releases.ubuntu.com/26.04/ubuntu-26.04-desktop-amd64.iso", "sizeBytes": 6228541440, "downloadedBytes": 0, "state": "failed", "speedBps": 0, "etaSeconds": null, "resumable": true, "segments": 8, "categoryId": "programs", "queueId": null, "queuePosition": null, "description": null, "createdAt": "$isoDate", "lastTryAt": "$isoDate", "completedAt": null, "error": { "code": "not_found", "message": "the server returned 404 when resuming; the file is gone", "httpStatus": 404, "retryable": false, "cause": null, "attempt": 3, "nextRetryAt": null } }, "error": { "code": "not_found", "message": "the server returned 404 when resuming; the file is gone", "httpStatus": 404, "retryable": false, "cause": null, "attempt": 3, "nextRetryAt": null } } }, "assertions": [ "error is present on every failed or retry_wait transition, and also on a paused transition the daemon entered unilaterally -- never on a paused transition the user or scheduler requested", "error.code is a TaskErrorCode, never a JSON-RPC ErrorCode \u2014 the two are different spaces", "retryable false means the scheduler will not pick this up again on its own" ] }