From 32e4d7292d8091d5c5b46bbc3e313591ace328b4 Mon Sep 17 00:00:00 2001 From: dryrun Date: Sun, 25 Oct 2026 22:06:34 +0000 Subject: [PATCH] Release 1.24.0 (TC-1441) --- CHANGELOG.md | 2 ++ Cargo.lock | 2 +- test/m1-realdata-e2e/Cargo.lock | 2 +- test/w5-policy-runtime-node-e2e/Cargo.lock | 2 +- tinycloud-node-server/Cargo.toml | 2 +- 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13293604..4bf054e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## [Unreleased] +## [1.24.0] - 2026-10-25 + - KV puts persist content-addressed blobs before taking the per-space sequence lock, and committed `kv/sync` cursors stay ordered. A preparatory transaction authorizes the write and claims every distinct blob under a durable attempt, committing all claims or none; on PostgreSQL each claim statement also checks that the invocation's spaces are hosted. Uploads hold no pooled database connection, transaction or lock. Protected legacy meeting writes keep their pre-upload freeze barrier, which waits for commit or abort and fails after 30 seconds if stalled (TC-1260). Failed attempts move their last unreferenced hash fence to `deleting`; a new writer cannot deduplicate or upload until confirmed physical absence removes the fence, and known failures refund once after deletion. A 60-second collector reclaims crash leftovers after a five-minute database-time grace when no same-hash writer remains, including lost delete responses; it closes, without deleting, a fence whose blob a committed write references. S3 startup reconstructs pending refunds from the same physical listing as its quota count. Quota stays conservative and per process, not a durable global ledger. A lost connection during registration retries the preparatory transaction with the same attempt ID; neither an upload nor a committed write is replayed on an uncertain outcome. First uploads keep the bare hash key (generation zero); an upload after orphan deletion uses a generation-scoped key `hash@N`, so a delayed delete cannot remove newly committed bytes. Reads take the generation from the KV lookup. A binary without this change cannot read generation-above-zero records, so a fault after such records exist is recovered by a forward fix (`docs/kv-sync.md`). Migration `m20261023_010000_kv_orphan_candidates` adds the `generation` columns and the claim tables and can be applied again over its own tables on PostgreSQL and SQLite. diff --git a/Cargo.lock b/Cargo.lock index 7120cc31..050c16fe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9932,7 +9932,7 @@ dependencies = [ [[package]] name = "tinycloud-node" -version = "1.23.0" +version = "1.24.0" dependencies = [ "aes-gcm", "anyhow", diff --git a/test/m1-realdata-e2e/Cargo.lock b/test/m1-realdata-e2e/Cargo.lock index 3b492c2d..a72491c8 100644 --- a/test/m1-realdata-e2e/Cargo.lock +++ b/test/m1-realdata-e2e/Cargo.lock @@ -8018,7 +8018,7 @@ dependencies = [ [[package]] name = "tinycloud-node" -version = "1.23.0" +version = "1.24.0" dependencies = [ "aes-gcm", "anyhow", diff --git a/test/w5-policy-runtime-node-e2e/Cargo.lock b/test/w5-policy-runtime-node-e2e/Cargo.lock index 878b6f0e..8d1bd3dc 100644 --- a/test/w5-policy-runtime-node-e2e/Cargo.lock +++ b/test/w5-policy-runtime-node-e2e/Cargo.lock @@ -8466,7 +8466,7 @@ dependencies = [ [[package]] name = "tinycloud-node" -version = "1.23.0" +version = "1.24.0" dependencies = [ "aes-gcm", "anyhow", diff --git a/tinycloud-node-server/Cargo.toml b/tinycloud-node-server/Cargo.toml index c030bb27..6156b5bf 100644 --- a/tinycloud-node-server/Cargo.toml +++ b/tinycloud-node-server/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "tinycloud-node" build = "build.rs" -version = "1.23.0" +version = "1.24.0" authors = ["TinyCloud Protocol"] edition = "2021" description = "TinyCloud Protocol Node"