{"version":"2.1.293","anchor":"list-gated-error-path-fixed-and-marked-permanent","canonical_anchor":"list-gated-error-path-fixed-and-marked-permanent","heading":"File-staging failures that cannot succeed are marked permanent","tier":"notice","area":"Internals","scope":"individual","heads_up":false,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.293\/e\/list-gated-error-path-fixed-and-marked-permanent","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.293","markdown":"### File-staging failures that cannot succeed are marked permanent\n\nFile staging in cloud sessions now marks unrecoverable failures as permanent so they are not retried, fixes the gated-list error text and notes overwrites\n\n**What**\n\nStaging is how files are copied into a session, for example in cloud sessions. Failures that will never succeed on a retry are now tagged `permanent: true`, where before they only reported failure and an error message.\n\n- HTTP 4xx errors are permanent, except 408 (timeout) and 429 (too many requests).\n\n- These file-system errors are permanent: `ENAMETOOLONG`, `ENOSPC`, `EDQUOT`, `EFBIG`, `EISDIR`, `ENOTDIR`, `EINVAL`, `ELOOP`, `ENOTEMPTY`, and `STAGE_PARENT_ESCAPE` (a file trying to land outside its allowed folder).\n\n- Fetches blocked by a gate are permanent. The \"list gated\" error used to print the wrong value as its reason; it now shows the real reason (`list gated: ${r.reason}`).\n\n- The record of a completed staging gains a `replaced` field, and overwriting a file with different contents is logged as a warning.\n\n**Why**\n\nCallers can stop retrying uploads that cannot work, such as a full disk or a name that is too long, instead of looping. A gated list now explains itself with a readable reason.\n\n- Area: Internals\n- Tier: You'll notice\n- Useful: 1\/5\n- Signal: 1\/5\n- Scope: individual\n- Heads-up: no"}