From 98bf472e92694cce52cbc2553e40ad1f622eeb62 Mon Sep 17 00:00:00 2001 From: Kacper Wolkiewicz Date: Mon, 26 Oct 2026 16:11:26 +0100 Subject: [PATCH] chore: prepare sdk v0.0.19 Impacts: sdk --- compute_horde/uv.lock | 2 +- compute_horde_sdk/CHANGELOG.md | 19 +++++++++++++++++++ .../changelog.d/+certifi-emudhra.fixed.md | 1 - .../+multi-upload-cancellation.fixed.md | 1 - .../+output-upload-confinement.fixed.md | 1 - .../+output-volume-path-validation.changed.md | 1 - .../changelog.d/+put-upload-chunks.fixed.md | 1 - .../changelog.d/+untrusted-files.added.md | 1 - .../+zipped-output-upload-errors.fixed.md | 1 - compute_horde_sdk/pyproject.toml | 2 +- compute_horde_sdk/uv.lock | 2 +- executor/uv.lock | 2 +- facilitator/uv.lock | 2 +- health_probe/uv.lock | 2 +- local_stack/uv.lock | 2 +- miner/uv.lock | 2 +- scripts/stress/uv.lock | 2 +- validator/uv.lock | 2 +- 18 files changed, 29 insertions(+), 17 deletions(-) delete mode 100644 compute_horde_sdk/changelog.d/+certifi-emudhra.fixed.md delete mode 100644 compute_horde_sdk/changelog.d/+multi-upload-cancellation.fixed.md delete mode 100644 compute_horde_sdk/changelog.d/+output-upload-confinement.fixed.md delete mode 100644 compute_horde_sdk/changelog.d/+output-volume-path-validation.changed.md delete mode 100644 compute_horde_sdk/changelog.d/+put-upload-chunks.fixed.md delete mode 100644 compute_horde_sdk/changelog.d/+untrusted-files.added.md delete mode 100644 compute_horde_sdk/changelog.d/+zipped-output-upload-errors.fixed.md diff --git a/compute_horde/uv.lock b/compute_horde/uv.lock index 8c1ae0dac..c0700c800 100644 --- a/compute_horde/uv.lock +++ b/compute_horde/uv.lock @@ -565,7 +565,7 @@ type-check = [ [[package]] name = "compute-horde-sdk" -version = "0.0.18" +version = "0.0.19" source = { editable = "../compute_horde_sdk" } dependencies = [ { name = "aiohttp" }, diff --git a/compute_horde_sdk/CHANGELOG.md b/compute_horde_sdk/CHANGELOG.md index b77157696..486458ea2 100644 --- a/compute_horde_sdk/CHANGELOG.md +++ b/compute_horde_sdk/CHANGELOG.md @@ -9,6 +9,25 @@ upcoming release can be found in [changelog.d](changelog.d). +## [0.0.19](https://github.com/backend-developers-ltd/compute-horde-sdk/releases/tag/v0.0.19) - 2026-10-26 + +### Changed + +- `HTTPOutputVolume` mount paths must be `/output/` followed by a canonical relative path; paths such as `/output//x`, `/output/../x` or `/output/x/` now raise `ValueError` when the job is created. + +### Fixed + +- HTTP PUT output uploads send the file in chunks of at most 64 KiB instead of one chunk per line, so a file without newlines is no longer read into memory whole. +- Output uploads are confined to the output directory: `relative_path` of single-file uploads must be a canonical relative path with no component longer than 255 bytes, the uploader opens output files without following symlinks and rejects anything that is not a regular file or exceeds the size limit, zipped uploads leave out symlinks, other non-regular entries and empty directories, and the HTTP response of an upload receiver is cut off at the 10 MiB cap. +- The SDK requires `certifi>=2026.10.19`, because earlier certifi releases trust the compromised eMudhra/emSign CAs. +- When one file of a `MultiUpload` fails to upload, the uploads still in progress are cancelled before `OutputUploadFailed` is raised; uploads that already finished stay delivered. +- Zipped output uploads accept files modified after 2107 and fail with `OutputUploadFailed` instead of an unhandled exception when a file name is not valid UTF-8. An output directory with directories nested more than 100 levels deep also fails with `OutputUploadFailed`. `MultiUpload` builds its system output zip before it sends any file. + +### Added + +- Added `compute_horde_core.untrusted_files` for reading files from, and writing files into, a directory populated by an untrusted process without following symlinks and with a size bound checked before reading. + + ## [0.0.18](https://github.com/backend-developers-ltd/compute-horde-sdk/releases/tag/v0.0.18) - 2025-12-18 diff --git a/compute_horde_sdk/changelog.d/+certifi-emudhra.fixed.md b/compute_horde_sdk/changelog.d/+certifi-emudhra.fixed.md deleted file mode 100644 index 19a6c03d1..000000000 --- a/compute_horde_sdk/changelog.d/+certifi-emudhra.fixed.md +++ /dev/null @@ -1 +0,0 @@ -The SDK requires `certifi>=2026.10.19`, because earlier certifi releases trust the compromised eMudhra/emSign CAs. diff --git a/compute_horde_sdk/changelog.d/+multi-upload-cancellation.fixed.md b/compute_horde_sdk/changelog.d/+multi-upload-cancellation.fixed.md deleted file mode 100644 index ac911f50c..000000000 --- a/compute_horde_sdk/changelog.d/+multi-upload-cancellation.fixed.md +++ /dev/null @@ -1 +0,0 @@ -When one file of a `MultiUpload` fails to upload, the uploads still in progress are cancelled before `OutputUploadFailed` is raised; uploads that already finished stay delivered. diff --git a/compute_horde_sdk/changelog.d/+output-upload-confinement.fixed.md b/compute_horde_sdk/changelog.d/+output-upload-confinement.fixed.md deleted file mode 100644 index 9046b9d90..000000000 --- a/compute_horde_sdk/changelog.d/+output-upload-confinement.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Output uploads are confined to the output directory: `relative_path` of single-file uploads must be a canonical relative path with no component longer than 255 bytes, the uploader opens output files without following symlinks and rejects anything that is not a regular file or exceeds the size limit, zipped uploads leave out symlinks, other non-regular entries and empty directories, and the HTTP response of an upload receiver is cut off at the 10 MiB cap. diff --git a/compute_horde_sdk/changelog.d/+output-volume-path-validation.changed.md b/compute_horde_sdk/changelog.d/+output-volume-path-validation.changed.md deleted file mode 100644 index be226f600..000000000 --- a/compute_horde_sdk/changelog.d/+output-volume-path-validation.changed.md +++ /dev/null @@ -1 +0,0 @@ -`HTTPOutputVolume` mount paths must be `/output/` followed by a canonical relative path; paths such as `/output//x`, `/output/../x` or `/output/x/` now raise `ValueError` when the job is created. diff --git a/compute_horde_sdk/changelog.d/+put-upload-chunks.fixed.md b/compute_horde_sdk/changelog.d/+put-upload-chunks.fixed.md deleted file mode 100644 index 2502c36e9..000000000 --- a/compute_horde_sdk/changelog.d/+put-upload-chunks.fixed.md +++ /dev/null @@ -1 +0,0 @@ -HTTP PUT output uploads send the file in chunks of at most 64 KiB instead of one chunk per line, so a file without newlines is no longer read into memory whole. diff --git a/compute_horde_sdk/changelog.d/+untrusted-files.added.md b/compute_horde_sdk/changelog.d/+untrusted-files.added.md deleted file mode 100644 index e53d221a2..000000000 --- a/compute_horde_sdk/changelog.d/+untrusted-files.added.md +++ /dev/null @@ -1 +0,0 @@ -Added `compute_horde_core.untrusted_files` for reading files from, and writing files into, a directory populated by an untrusted process without following symlinks and with a size bound checked before reading. diff --git a/compute_horde_sdk/changelog.d/+zipped-output-upload-errors.fixed.md b/compute_horde_sdk/changelog.d/+zipped-output-upload-errors.fixed.md deleted file mode 100644 index 2363e06d8..000000000 --- a/compute_horde_sdk/changelog.d/+zipped-output-upload-errors.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Zipped output uploads accept files modified after 2107 and fail with `OutputUploadFailed` instead of an unhandled exception when a file name is not valid UTF-8. An output directory with directories nested more than 100 levels deep also fails with `OutputUploadFailed`. `MultiUpload` builds its system output zip before it sends any file. diff --git a/compute_horde_sdk/pyproject.toml b/compute_horde_sdk/pyproject.toml index 1b9a1f8a3..dbe47e51a 100644 --- a/compute_horde_sdk/pyproject.toml +++ b/compute_horde_sdk/pyproject.toml @@ -4,7 +4,7 @@ requires-python = ">=3.10,<3.13" # bittensor doesn't work on 3.13+ keywords = [] license = {text = "MIT"} readme = "README.md" -version = "0.0.18" +version = "0.0.19" authors = [ {name = "Reef Technologies", email = "opensource@reef.pl"}, ] diff --git a/compute_horde_sdk/uv.lock b/compute_horde_sdk/uv.lock index 8b2e1ec6f..5ae143c6e 100644 --- a/compute_horde_sdk/uv.lock +++ b/compute_horde_sdk/uv.lock @@ -601,7 +601,7 @@ wheels = [ [[package]] name = "compute-horde-sdk" -version = "0.0.18" +version = "0.0.19" source = { editable = "." } dependencies = [ { name = "aiohttp" }, diff --git a/executor/uv.lock b/executor/uv.lock index 3615a0a94..443ebe74b 100644 --- a/executor/uv.lock +++ b/executor/uv.lock @@ -630,7 +630,7 @@ type-check = [ [[package]] name = "compute-horde-sdk" -version = "0.0.18" +version = "0.0.19" source = { editable = "../compute_horde_sdk" } dependencies = [ { name = "aiohttp", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, diff --git a/facilitator/uv.lock b/facilitator/uv.lock index f26bcea95..58824c7f5 100644 --- a/facilitator/uv.lock +++ b/facilitator/uv.lock @@ -663,7 +663,7 @@ type-check = [ [[package]] name = "compute-horde-sdk" -version = "0.0.18" +version = "0.0.19" source = { editable = "../compute_horde_sdk" } dependencies = [ { name = "aiohttp", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, diff --git a/health_probe/uv.lock b/health_probe/uv.lock index c1aae29b5..54f3d5010 100644 --- a/health_probe/uv.lock +++ b/health_probe/uv.lock @@ -401,7 +401,7 @@ wheels = [ [[package]] name = "compute-horde-sdk" -version = "0.0.18" +version = "0.0.19" source = { directory = "../compute_horde_sdk" } dependencies = [ { name = "aiohttp" }, diff --git a/local_stack/uv.lock b/local_stack/uv.lock index 66b3bef71..1652a7a5e 100644 --- a/local_stack/uv.lock +++ b/local_stack/uv.lock @@ -676,7 +676,7 @@ type-check = [ [[package]] name = "compute-horde-sdk" -version = "0.0.18" +version = "0.0.19" source = { editable = "../compute_horde_sdk" } dependencies = [ { name = "aiohttp", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, diff --git a/miner/uv.lock b/miner/uv.lock index ccc419c49..ac8e5eb0b 100644 --- a/miner/uv.lock +++ b/miner/uv.lock @@ -675,7 +675,7 @@ type-check = [ [[package]] name = "compute-horde-sdk" -version = "0.0.18" +version = "0.0.19" source = { editable = "../compute_horde_sdk" } dependencies = [ { name = "aiohttp", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, diff --git a/scripts/stress/uv.lock b/scripts/stress/uv.lock index cabcc93a7..c49f6c73e 100644 --- a/scripts/stress/uv.lock +++ b/scripts/stress/uv.lock @@ -515,7 +515,7 @@ type-check = [ [[package]] name = "compute-horde-sdk" -version = "0.0.18" +version = "0.0.19" source = { editable = "../../compute_horde_sdk" } dependencies = [ { name = "aiohttp", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, diff --git a/validator/uv.lock b/validator/uv.lock index 5f1cbf5f2..3e9ae91d6 100644 --- a/validator/uv.lock +++ b/validator/uv.lock @@ -726,7 +726,7 @@ type-check = [ [[package]] name = "compute-horde-sdk" -version = "0.0.18" +version = "0.0.19" source = { editable = "../compute_horde_sdk" } dependencies = [ { name = "aiohttp", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" },