From 21c74244ba51f56887610dc386a8a11814058a78 Mon Sep 17 00:00:00 2001 From: 0thernet <894119+0thernet@users.noreply.github.com> Date: Wed, 7 Oct 2026 13:27:24 -0400 Subject: [PATCH] Release xcb 0.20.3: per-workspace native writer lock Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 10 ++++++++++ Cargo.lock | 8 ++++---- Cargo.toml | 2 +- crates/xcb-cli/Cargo.toml | 4 ++-- crates/xcb-core/Cargo.toml | 2 +- crates/xcb-runtime/Cargo.toml | 4 ++-- package.json | 2 +- src/cli.ts | 2 +- 8 files changed, 22 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95e20ec4..b00c17f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,16 @@ workflow copies that section onto the GitHub Release page and refuses to publish when it is missing, empty, or still says Unreleased. Write it in the version bump pull request by renaming `## Unreleased` to the version. +## 0.20.3 - 2026-10-07 + +Native commands in different workspaces no longer block each other. + +- The supervisor's in-process writer lock is now scoped to one workspace. A + long native command in one workspace no longer makes native commands in + every other workspace fail after five seconds with "workspace writer is + busy; retry", which stalled concurrent unattended schedules. One workspace + still runs one writer at a time (#480). + ## 0.20.2 - 2026-10-07 Signing in loads the account's models, and native grants can let workspace diff --git a/Cargo.lock b/Cargo.lock index 2c50f017..3c40c374 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3207,7 +3207,7 @@ checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" [[package]] name = "xcb-cli" -version = "0.20.2" +version = "0.20.3" dependencies = [ "clap", "clap_complete", @@ -3225,7 +3225,7 @@ dependencies = [ [[package]] name = "xcb-core" -version = "0.20.2" +version = "0.20.3" dependencies = [ "proptest", "serde", @@ -3236,7 +3236,7 @@ dependencies = [ [[package]] name = "xcb-platform" -version = "0.20.2" +version = "0.20.3" dependencies = [ "tempfile", "windows-sys 0.61.2", @@ -3244,7 +3244,7 @@ dependencies = [ [[package]] name = "xcb-runtime" -version = "0.20.2" +version = "0.20.3" dependencies = [ "aes-gcm", "aicharts-core", diff --git a/Cargo.toml b/Cargo.toml index 420303f0..7d6604c9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ members = ["crates/xcb-platform", "crates/xcb-core", "crates/xcb-runtime", "crat resolver = "3" [workspace.package] -version = "0.20.2" +version = "0.20.3" edition = "2024" rust-version = "1.97.1" license = "MIT" diff --git a/crates/xcb-cli/Cargo.toml b/crates/xcb-cli/Cargo.toml index b78ed794..dafaabc7 100644 --- a/crates/xcb-cli/Cargo.toml +++ b/crates/xcb-cli/Cargo.toml @@ -21,8 +21,8 @@ serde = "=1.0.229" serde_json = "=1.0.151" tokio = { version = "=1.47.1", features = ["rt-multi-thread", "macros", "signal", "sync", "time"] } unicode-width = "=0.2.2" -xcb-core = { version = "0.20.2", path = "../xcb-core" } -xcb-runtime = { version = "0.20.2", path = "../xcb-runtime" } +xcb-core = { version = "0.20.3", path = "../xcb-core" } +xcb-runtime = { version = "0.20.3", path = "../xcb-runtime" } zeroize = "=1.9.0" [target.'cfg(unix)'.dependencies] diff --git a/crates/xcb-core/Cargo.toml b/crates/xcb-core/Cargo.toml index a4bb055e..751348f1 100644 --- a/crates/xcb-core/Cargo.toml +++ b/crates/xcb-core/Cargo.toml @@ -18,4 +18,4 @@ thiserror = "=2.0.21" proptest = "=1.11.0" [target.'cfg(windows)'.dependencies] -xcb-platform = { version = "0.20.2", path = "../xcb-platform" } +xcb-platform = { version = "0.20.3", path = "../xcb-platform" } diff --git a/crates/xcb-runtime/Cargo.toml b/crates/xcb-runtime/Cargo.toml index f21ac374..18c5ce33 100644 --- a/crates/xcb-runtime/Cargo.toml +++ b/crates/xcb-runtime/Cargo.toml @@ -36,7 +36,7 @@ tokio = { version = "=1.47.1", features = ["rt-multi-thread", "macros", "process tokio-rustls = { version = "=0.26.6", default-features = false, features = ["ring", "tls12"] } uuid = { version = "=1.27.0", features = ["v4", "v7", "serde"] } webpki-roots = "=1.0.9" -xcb-core = { version = "0.20.2", path = "../xcb-core" } +xcb-core = { version = "0.20.3", path = "../xcb-core" } zeroize = "=1.9.0" [target.'cfg(unix)'.dependencies] @@ -46,4 +46,4 @@ local-custody = { git = "https://github.com/hraness/local-custody", rev = "4fd65 rustix = { version = "=1.1.5", features = ["fs", "process", "pty", "termios"] } [target.'cfg(windows)'.dependencies] -xcb-platform = { version = "0.20.2", path = "../xcb-platform" } +xcb-platform = { version = "0.20.3", path = "../xcb-platform" } diff --git a/package.json b/package.json index 569693d4..f3fa2da8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@hraness/xcb", - "version": "0.20.2", + "version": "0.20.3", "description": "TypeScript SDK and compatibility CLI for Excalibur (xcb), which routes coding tasks across the Claude and Codex subscriptions you already pay for.", "type": "module", "license": "MIT", diff --git a/src/cli.ts b/src/cli.ts index 70096d1f..a0a15fed 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -3,7 +3,7 @@ import { fileURLToPath } from "node:url"; import { runCliUpdate } from "@hraness/cli-update"; import { compatibilityUpdateOptions } from "./cli/update.ts"; -const VERSION = "0.20.2"; +const VERSION = "0.20.3"; function reportStartupError(error: unknown): number { process.stderr.write(`xcb-compat: ${error instanceof Error ? error.message : "unexpected failure"}\n`);