Tasker API errors now return JSON with a stable error.code, a human-readable error.message, and an optional error.field. For example, an invalid cron expression returns HTTP 400 with invalid_cron and field: "cron", so clients can handle it without parsing message text.
The same format covers task and schedule validation, authentication, missing resources/routes, unsupported methods, body size limits, and internal failures. HTTP statuses, Allow, WWW-Authenticate, and request IDs are preserved. Internal storage details remain in logs. This changes error bodies from plain text to JSON; successful responses are unchanged.
E2E coverage exercises every code against the real executable, including storage failures induced in a disposable SQLite database. Documentation lists the codes and compatibility change.
Validation: nix develop -c go test ./... -count=1 -timeout=5m and nix develop -c go vet ./....