From 1df3731653c19ab0d94af0a9394675475a1d6862 Mon Sep 17 00:00:00 2001 From: forhappy Date: Mon, 12 Oct 2026 17:41:11 -0700 Subject: [PATCH] release: prepare the matched Cellule 0.2.0 crate set --- .github/workflows/rust.yml | 4 ++-- CHANGELOG.md | 21 +++++++++++++++++++ Cargo.lock | 16 +++++++------- Cargo.toml | 18 ++++++++-------- cookbook/Cargo.lock | 12 +++++------ crates/cellule-app/Cargo.toml | 4 +++- crates/cellule-axum/README.md | 6 +++--- .../application-builder-service/Cargo.lock | 14 ++++++------- crates/cellule-ltx/fuzz/Cargo.lock | 6 +++--- crates/cellule-ltx/perf/cellule/Cargo.lock | 2 +- .../cellule-ltx/perf/replica-cost/Cargo.lock | 6 +++--- docs/releasing.md | 11 +++++----- 12 files changed, 71 insertions(+), 49 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 0efd60eb..54b8bf98 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -136,8 +136,8 @@ jobs: run: cargo clippy --workspace --all-targets --all-features --locked -- -D warnings - name: Validate SQL and peer contracts run: node crates/cellule-runtime/docs/validate.mjs - - name: Package the independent bootstrap crate - run: cargo package -p cellule-types --locked + - name: Package and verify the complete release set + run: cargo package --workspace --locked msrv: runs-on: ubuntu-24.04 diff --git a/CHANGELOG.md b/CHANGELOG.md index dee34817..3ebcbbf8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,30 @@ User-facing changes to the matched Cellule crate set are recorded here. ## [Unreleased] +## [0.2.0] - 2026-10-12 + - Add the optional `cellule-axum` crate with a typed handle extractor, JSON outputs with receipts, outcome-aware HTTP errors, and a runnable local SQL service that drains HTTP before the runtime. +- Add typed application builders, native module registration, scoped bindings, + OpenAPI integration, and persistent prepared commands for exact retries. +- Add durable Fleet movement, maintenance, and recovery orchestration; retain + recovery claims during slow publication and preserve follower admission + deadlines across clock rollback. +- Share and batch Cell publication, pipeline follower replication and checkpoint + preparation, and bound execution and retained publication work. Performance + reports are scoped to their measured revisions and environments; the fresh + three-VM capacity qualification remains pending. This release does not claim + a throughput or latency improvement over 0.1.0. +- **Breaking persisted-format change:** use Node Bundle v1 exclusively, including + its authenticated catalog/history encodings and new `.nodebundle` object paths. + Legacy bundle formats and paths are rejected; there is no fallback reader or + automatic migration. Upgrade publication and recovery consumers together and + use a fresh storage prefix. Before retiring an older deployment, drain and + materialize its complete acknowledged history with the previous binary. + See the [format and cutover contract](docs/bundle-coverage-implementation.md#format-and-bounds). +- Publish all eight framework crates at the matched 0.2.0 version. Consumers must + update their Cellule dependencies together; Rust 1.97 or newer is required. ## [0.1.0] - 2026-09-28 diff --git a/Cargo.lock b/Cargo.lock index 9a80e979..59a725fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -222,7 +222,7 @@ dependencies = [ [[package]] name = "cellule-app" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "blake3", @@ -243,7 +243,7 @@ dependencies = [ [[package]] name = "cellule-axum" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "axum", @@ -274,7 +274,7 @@ dependencies = [ [[package]] name = "cellule-host" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "blake3", @@ -295,7 +295,7 @@ dependencies = [ [[package]] name = "cellule-ltx" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "blake3", @@ -317,7 +317,7 @@ dependencies = [ [[package]] name = "cellule-peer-http" -version = "0.1.0" +version = "0.2.0" dependencies = [ "axum", "blake3", @@ -342,7 +342,7 @@ dependencies = [ [[package]] name = "cellule-runtime" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "blake3", @@ -370,7 +370,7 @@ dependencies = [ [[package]] name = "cellule-store" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "blake3", @@ -393,7 +393,7 @@ dependencies = [ [[package]] name = "cellule-types" -version = "0.1.0" +version = "0.2.0" dependencies = [ "schemars", "serde", diff --git a/Cargo.toml b/Cargo.toml index 0487e1cc..451484b3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,21 +12,21 @@ members = [ ] [workspace.package] -version = "0.1.0" +version = "0.2.0" edition = "2024" license = "Apache-2.0" repository = "https://github.com/crabbuild/cellule" rust-version = "1.97" [workspace.dependencies] -cellule-types = { version = "0.1.0", path = "crates/cellule-types", default-features = false } -cellule-store = { version = "0.1.0", path = "crates/cellule-store", default-features = false } -cellule-ltx = { version = "0.1.0", path = "crates/cellule-ltx", default-features = false } -cellule-runtime = { version = "0.1.0", path = "crates/cellule-runtime", default-features = false } -cellule-app = { version = "0.1.0", path = "crates/cellule-app", default-features = false } -cellule-host = { version = "0.1.0", path = "crates/cellule-host", default-features = false } -cellule-peer-http = { version = "0.1.0", path = "crates/cellule-peer-http", default-features = false } -cellule-axum = { version = "0.1.0", path = "crates/cellule-axum", default-features = false } +cellule-types = { version = "0.2.0", path = "crates/cellule-types", default-features = false } +cellule-store = { version = "0.2.0", path = "crates/cellule-store", default-features = false } +cellule-ltx = { version = "0.2.0", path = "crates/cellule-ltx", default-features = false } +cellule-runtime = { version = "0.2.0", path = "crates/cellule-runtime", default-features = false } +cellule-app = { version = "0.2.0", path = "crates/cellule-app", default-features = false } +cellule-host = { version = "0.2.0", path = "crates/cellule-host", default-features = false } +cellule-peer-http = { version = "0.2.0", path = "crates/cellule-peer-http", default-features = false } +cellule-axum = { version = "0.2.0", path = "crates/cellule-axum", default-features = false } axum = { version = "0.8.9", default-features = false } uuid = { version = "=1.24.0", features = ["v7", "serde"] } async-trait = "0.1" diff --git a/cookbook/Cargo.lock b/cookbook/Cargo.lock index ce26861e..d3aa2715 100644 --- a/cookbook/Cargo.lock +++ b/cookbook/Cargo.lock @@ -227,7 +227,7 @@ dependencies = [ [[package]] name = "cellule-app" -version = "0.1.0" +version = "0.2.0" dependencies = [ "blake3", "cellule-runtime", @@ -753,7 +753,7 @@ dependencies = [ [[package]] name = "cellule-host" -version = "0.1.0" +version = "0.2.0" dependencies = [ "blake3", "cellule-app", @@ -767,7 +767,7 @@ dependencies = [ [[package]] name = "cellule-ltx" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "blake3", @@ -788,7 +788,7 @@ dependencies = [ [[package]] name = "cellule-runtime" -version = "0.1.0" +version = "0.2.0" dependencies = [ "blake3", "bytes", @@ -813,7 +813,7 @@ dependencies = [ [[package]] name = "cellule-store" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "blake3", @@ -835,7 +835,7 @@ dependencies = [ [[package]] name = "cellule-types" -version = "0.1.0" +version = "0.2.0" dependencies = [ "schemars", "serde", diff --git a/crates/cellule-app/Cargo.toml b/crates/cellule-app/Cargo.toml index 4dd2feb1..4a16cd25 100644 --- a/crates/cellule-app/Cargo.toml +++ b/crates/cellule-app/Cargo.toml @@ -17,7 +17,9 @@ cellule-runtime.workspace = true [dev-dependencies] async-trait.workspace = true bytes.workspace = true -cellule-host.workspace = true +# Host-backed scenarios run from the repository; omit this development-only +# dependency from published manifests to avoid app -> host -> app release cycles. +cellule-host = { path = "../cellule-host" } cellule-runtime = { workspace = true, features = ["test-support"] } cellule-ltx = { workspace = true, features = ["replica"] } cellule-store.workspace = true diff --git a/crates/cellule-axum/README.md b/crates/cellule-axum/README.md index 72bd2b5f..e5458554 100644 --- a/crates/cellule-axum/README.md +++ b/crates/cellule-axum/README.md @@ -131,9 +131,9 @@ Add the adapter alongside Axum and your Cellule application crates: ```toml [dependencies] axum = { version = "0.8", features = ["json"] } -cellule-app = "0.1" -cellule-axum = "0.1" -cellule-runtime = "0.1" +cellule-app = "0.2" +cellule-axum = "0.2" +cellule-runtime = "0.2" serde = { version = "1", features = ["derive"] } ``` diff --git a/crates/cellule-axum/examples/application-builder-service/Cargo.lock b/crates/cellule-axum/examples/application-builder-service/Cargo.lock index 9fb496f2..fadb5955 100644 --- a/crates/cellule-axum/examples/application-builder-service/Cargo.lock +++ b/crates/cellule-axum/examples/application-builder-service/Cargo.lock @@ -211,7 +211,7 @@ dependencies = [ [[package]] name = "cellule-app" -version = "0.1.0" +version = "0.2.0" dependencies = [ "blake3", "cellule-runtime", @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "cellule-axum" -version = "0.1.0" +version = "0.2.0" dependencies = [ "axum", "cellule-app", @@ -273,7 +273,7 @@ dependencies = [ [[package]] name = "cellule-host" -version = "0.1.0" +version = "0.2.0" dependencies = [ "blake3", "cellule-app", @@ -287,7 +287,7 @@ dependencies = [ [[package]] name = "cellule-ltx" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "blake3", @@ -308,7 +308,7 @@ dependencies = [ [[package]] name = "cellule-runtime" -version = "0.1.0" +version = "0.2.0" dependencies = [ "blake3", "bytes", @@ -333,7 +333,7 @@ dependencies = [ [[package]] name = "cellule-store" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "blake3", @@ -355,7 +355,7 @@ dependencies = [ [[package]] name = "cellule-types" -version = "0.1.0" +version = "0.2.0" dependencies = [ "schemars", "serde", diff --git a/crates/cellule-ltx/fuzz/Cargo.lock b/crates/cellule-ltx/fuzz/Cargo.lock index 3dcc5b0c..04525ef2 100644 --- a/crates/cellule-ltx/fuzz/Cargo.lock +++ b/crates/cellule-ltx/fuzz/Cargo.lock @@ -220,7 +220,7 @@ dependencies = [ [[package]] name = "cellule-ltx" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "blake3", @@ -249,7 +249,7 @@ dependencies = [ [[package]] name = "cellule-store" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "blake3", @@ -271,7 +271,7 @@ dependencies = [ [[package]] name = "cellule-types" -version = "0.1.0" +version = "0.2.0" dependencies = [ "schemars", "serde", diff --git a/crates/cellule-ltx/perf/cellule/Cargo.lock b/crates/cellule-ltx/perf/cellule/Cargo.lock index 24e50f8a..1d5cf5c5 100644 --- a/crates/cellule-ltx/perf/cellule/Cargo.lock +++ b/crates/cellule-ltx/perf/cellule/Cargo.lock @@ -60,7 +60,7 @@ dependencies = [ [[package]] name = "cellule-ltx" -version = "0.1.0" +version = "0.2.0" dependencies = [ "blake3", "crc-fast", diff --git a/crates/cellule-ltx/perf/replica-cost/Cargo.lock b/crates/cellule-ltx/perf/replica-cost/Cargo.lock index fa4d7a2d..fef9a404 100644 --- a/crates/cellule-ltx/perf/replica-cost/Cargo.lock +++ b/crates/cellule-ltx/perf/replica-cost/Cargo.lock @@ -214,7 +214,7 @@ dependencies = [ [[package]] name = "cellule-ltx" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "blake3", @@ -248,7 +248,7 @@ dependencies = [ [[package]] name = "cellule-store" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "blake3", @@ -270,7 +270,7 @@ dependencies = [ [[package]] name = "cellule-types" -version = "0.1.0" +version = "0.2.0" dependencies = [ "schemars", "serde", diff --git a/docs/releasing.md b/docs/releasing.md index 168b557a..36f83432 100644 --- a/docs/releasing.md +++ b/docs/releasing.md @@ -106,12 +106,11 @@ the versioned commit has merged and passed CI: Allow each package version to reach the registry index before publishing its dependents. Keep the account token in Cargo's local credentials file; never paste it into the repository or workflow configuration. - The first release has a dev-only cycle: `cellule-app` tests depend on - `cellule-host`, while `cellule-host` depends on `cellule-app`. For the - one-time `0.1.0` bootstrap, publish `cellule-app` with that dev-dependency - temporarily removed and `--no-verify`, restore the manifest immediately, - then publish `cellule-host`. Subsequent releases use the normal workflow - after both crate names exist on crates.io. + `cellule-app` uses a path-only development dependency on `cellule-host` for + repository examples and integration tests. Cargo omits it from the published + manifest, so new compatibility lines publish without an app/host development + cycle. Run these examples and tests from a repository checkout; consumers of + the published libraries resolve the normal dependency order above. 2. In the settings for **each** crate, add a GitHub Actions trusted publisher with repository `crabbuild/cellule`, workflow file `release.yml`, and environment `crates-io`. The workflow uses