{"version":"2.1.239","anchor":"file-uploads-report-why-they-failed-and-stop-retrying-foreve","canonical_anchor":"file-uploads-report-why-they-failed-and-stop-retrying-foreve","heading":"File uploads report why they failed and stop retrying forever","tier":"notice","area":"File Sync","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.239\/e\/file-uploads-report-why-they-failed-and-stop-retrying-foreve","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.239","markdown":"### File uploads report why they failed and stop retrying forever\n\nFailed uploads now name the reason and stop retrying after a fixed number of attempts.\n\n**What**\n\nA failed file upload now carries a machine-readable reason alongside the error: `file_read`, `too_large`, `auth`, `forbidden`, `network` or `canceled`. Retries stop after a fixed number of attempts rather than looping on transient errors.\n\n**Details**\n\n- Filenames are sanitized in the upload's multipart header: `\"`, carriage return and line feed become percent escapes.\n- An upload-from-bytes entry point was added for callers that already hold the content.\n- A separate git helper now classifies a shallow clone as complete, cut or unborn by reading the repository's `shallow` file.\n\n**Evidence**\n\n`Upload succeeded but no file ID returned`\n\n- Area: File Sync\n- Tier: You'll notice\n- Useful: 3\/5\n- Signal: 2\/5"}