From 9811907a79495f0ebbd700c8ea34544360bf1b3d Mon Sep 17 00:00:00 2001 From: Stephan Fitzpatrick Date: Sat, 24 Oct 2026 23:27:36 +0000 Subject: [PATCH 1/2] Preview builds isb with ra-jit: an edit rebuilds in seconds, not tens of seconds The preview pins Rust 1.99.0 (ra-jit's only toolchain), installs ra-jit 0.1.0 and builds with cargo ra-jit; its VM gets 24 GB for the ~10 GB daemon. CI, scripts/check.sh and releases stay plain cargo, which keeps the borrow checker ra-jit 0.1.0 lacks as the final word. Claude-Session: https://claude.ai/code/session_01DXcK7WYx1aCTzrebDJywPt --- isb.yaml | 2 +- scripts/preview/build.sh | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/isb.yaml b/isb.yaml index 0d5b8267..29e6ce2e 100644 --- a/isb.yaml +++ b/isb.yaml @@ -12,7 +12,7 @@ services: type: vm image: images:ubuntu/24.04/cloud cpus: 8 - mem_limit: 16g + mem_limit: 24g # ra-jit's build daemon holds ~10 GB (scripts/preview/build.sh) labels: { owner: isb-preview } # The firmware refuses this image's bootloader under secure boot # ("prohibited by secure boot policy"), so the VM never boots. diff --git a/scripts/preview/build.sh b/scripts/preview/build.sh index 7a462470..8af6569b 100644 --- a/scripts/preview/build.sh +++ b/scripts/preview/build.sh @@ -2,13 +2,25 @@ # Run as ubuntu inside the preview VM. Builds isb from the read-only checkout # at /src into ~/.local/bin/isb (the target directory stays on the VM's own # disk) and installs the web UI's dependencies. +# +# The build is ra-jit's (github.com/indexable-inc/ra-jit): the first one is +# cargo's, and once its daemon has loaded the workspace a rebuild after an +# edit compiles only the functions that changed, in about a second where +# cargo takes 10 to 20. ra-jit works with Rust 1.99.0 only, so the preview +# pins it; on any other toolchain every build is plain cargo's. The daemon +# holds about 10 GB and exits after 30 minutes without a build. ra-jit 0.1.0 +# has no borrow checker, so an edit cargo rejects can build here: the final +# word stays scripts/check.sh and CI, which are plain cargo. set -euo pipefail -mise use -g --yes rust@stable bun@1 >/dev/null +mise use -g --yes rust@1.99.0 bun@1 >/dev/null mise trust --yes /src/mise.toml >/dev/null +mise exec -- rustup component add rust-src >/dev/null +# A few minutes the first time; after that cargo sees it installed and returns. +mise exec -- cargo install --locked --quiet ra-jit@0.1.0 cd /src export CARGO_TARGET_DIR="$HOME/target" -mise exec -- cargo build --locked --bin isb +mise exec -- cargo ra-jit build --locked --bin isb install -D -m 0755 "$CARGO_TARGET_DIR/debug/isb" "$HOME/.local/bin/isb" bash /src/scripts/preview/node-modules.sh From f987f3ad63db082927fc9d707ec5089f3788d6d8 Mon Sep 17 00:00:00 2001 From: Stephan Fitzpatrick Date: Mon, 26 Oct 2026 00:33:26 +0000 Subject: [PATCH 2/2] isb 3.1.2 Claude-Session: https://claude.ai/code/session_01DXcK7WYx1aCTzrebDJywPt --- Cargo.lock | 14 +++++++------- Cargo.toml | 14 +++++++------- docs/reference/rpc.md | 4 ++-- sdk/python/pyproject.toml | 2 +- sdk/python/src/isb/__init__.py | 2 +- sdk/python/tests/test_unit.py | 6 +++--- sdk/python/uv.lock | 2 +- sdk/typescript/bun.lock | 4 ++-- sdk/typescript/npm/linux-arm64/package.json | 2 +- sdk/typescript/npm/linux-x64/package.json | 2 +- sdk/typescript/package.json | 6 +++--- 11 files changed, 29 insertions(+), 29 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2651c5e3..fa4fd427 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1329,7 +1329,7 @@ checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "isb" -version = "3.1.1" +version = "3.1.2" dependencies = [ "age", "clap", @@ -1351,7 +1351,7 @@ dependencies = [ [[package]] name = "isb-apps" -version = "3.1.1" +version = "3.1.2" dependencies = [ "age", "base64 0.23.1", @@ -1375,7 +1375,7 @@ dependencies = [ [[package]] name = "isb-core" -version = "3.1.1" +version = "3.1.2" dependencies = [ "age", "base64 0.23.1", @@ -1402,7 +1402,7 @@ dependencies = [ [[package]] name = "isb-daemon" -version = "3.1.1" +version = "3.1.2" dependencies = [ "age", "httparse", @@ -1422,7 +1422,7 @@ dependencies = [ [[package]] name = "isb-egress" -version = "3.1.1" +version = "3.1.2" dependencies = [ "base64 0.23.1", "httparse", @@ -1435,7 +1435,7 @@ dependencies = [ [[package]] name = "isb-server" -version = "3.1.1" +version = "3.1.2" dependencies = [ "argon2", "base64 0.23.1", @@ -1458,7 +1458,7 @@ dependencies = [ [[package]] name = "isb-tui" -version = "3.1.1" +version = "3.1.2" dependencies = [ "isb-core", "libc", diff --git a/Cargo.toml b/Cargo.toml index 186cbf25..581f86a7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -54,7 +54,7 @@ members = ["crates/*"] default-members = [".", "crates/*"] [workspace.package] -version = "3.1.1" +version = "3.1.2" edition = "2024" rust-version = "1.87" license = "MIT" @@ -62,12 +62,12 @@ repository = "https://github.com/execution-associates/isb" homepage = "https://github.com/execution-associates/isb" [workspace.dependencies] -isb-core = { path = "crates/isb-core", version = "=3.1.1" } -isb-server = { path = "crates/isb-server", version = "=3.1.1" } -isb-apps = { path = "crates/isb-apps", version = "=3.1.1" } -isb-daemon = { path = "crates/isb-daemon", version = "=3.1.1" } -isb-tui = { path = "crates/isb-tui", version = "=3.1.1" } -isb-egress = { path = "crates/isb-egress", version = "=3.1.1" } +isb-core = { path = "crates/isb-core", version = "=3.1.2" } +isb-server = { path = "crates/isb-server", version = "=3.1.2" } +isb-apps = { path = "crates/isb-apps", version = "=3.1.2" } +isb-daemon = { path = "crates/isb-daemon", version = "=3.1.2" } +isb-tui = { path = "crates/isb-tui", version = "=3.1.2" } +isb-egress = { path = "crates/isb-egress", version = "=3.1.2" } serde = { version = "1", features = ["derive"] } serde_json = "1" diff --git a/docs/reference/rpc.md b/docs/reference/rpc.md index 4b6a8053..68b1de9b 100644 --- a/docs/reference/rpc.md +++ b/docs/reference/rpc.md @@ -19,7 +19,7 @@ it; relative paths resolve against that directory. When it starts, the server writes one hello line: ```json -{"isb": "3.1.1", "protocol": 1} +{"isb": "3.1.2", "protocol": 1} ``` A client checks `protocol` and refuses versions it does not know. @@ -205,7 +205,7 @@ All take `files` (default `./isb.yaml` plus `./isb.override.yaml` if present), ## Example session ```text -<- {"isb":"3.1.1","protocol":1} +<- {"isb":"3.1.2","protocol":1} -> {"id":1,"method":"sandbox.ensure","params":{"spec":{"name":"web","image":"dev-base","cpus":2}}} <- {"id":1,"event":"progress","data":"web: creating from dev-base"} <- {"id":1,"event":"progress","data":"web: starting"} diff --git a/sdk/python/pyproject.toml b/sdk/python/pyproject.toml index fb90e60a..52da5aca 100644 --- a/sdk/python/pyproject.toml +++ b/sdk/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "isb-sdk" -version = "3.1.1" +version = "3.1.2" description = "Python SDK for isb: declarative incus sandboxes (containers and VMs)" readme = "README.md" license = "MIT" diff --git a/sdk/python/src/isb/__init__.py b/sdk/python/src/isb/__init__.py index 58c40b99..6d57423f 100644 --- a/sdk/python/src/isb/__init__.py +++ b/sdk/python/src/isb/__init__.py @@ -62,7 +62,7 @@ async def main(): from ._util import Duration from .volumes import Volumes -__version__ = "3.1.1" +__version__ = "3.1.2" __all__ = [ "PROTOCOL", diff --git a/sdk/python/tests/test_unit.py b/sdk/python/tests/test_unit.py index 87da28dc..243e4574 100644 --- a/sdk/python/tests/test_unit.py +++ b/sdk/python/tests/test_unit.py @@ -222,7 +222,7 @@ async def test_death_fails_pending_requests(self) -> None: path = fake_server( self.tmp.name, """\ - echo '{"isb":"3.1.1","protocol":1}' + echo '{"isb":"3.1.2","protocol":1}' read line echo "boom" >&2 exit 3 @@ -243,7 +243,7 @@ async def test_close_fails_pending(self) -> None: path = fake_server( self.tmp.name, """\ - echo '{"isb":"3.1.1","protocol":1}' + echo '{"isb":"3.1.2","protocol":1}' cat >/dev/null """, ) @@ -261,7 +261,7 @@ async def test_events_and_out_of_order_replies(self) -> None: path = fake_server( self.tmp.name, """\ - echo '{"isb":"3.1.1","protocol":1}' + echo '{"isb":"3.1.2","protocol":1}' read a read b echo 'not json' diff --git a/sdk/python/uv.lock b/sdk/python/uv.lock index 2863153b..171200de 100644 --- a/sdk/python/uv.lock +++ b/sdk/python/uv.lock @@ -72,7 +72,7 @@ wheels = [ [[package]] name = "isb-sdk" -version = "3.1.1" +version = "3.1.2" source = { editable = "." } [package.dev-dependencies] diff --git a/sdk/typescript/bun.lock b/sdk/typescript/bun.lock index 5c829934..3692b65a 100644 --- a/sdk/typescript/bun.lock +++ b/sdk/typescript/bun.lock @@ -12,8 +12,8 @@ "typescript": "^5.9.0", }, "optionalDependencies": { - "@execution-associates/isb-linux-arm64": "3.1.1", - "@execution-associates/isb-linux-x64": "3.1.1", + "@execution-associates/isb-linux-arm64": "3.1.2", + "@execution-associates/isb-linux-x64": "3.1.2", }, }, }, diff --git a/sdk/typescript/npm/linux-arm64/package.json b/sdk/typescript/npm/linux-arm64/package.json index 3195bed8..b1e0a692 100644 --- a/sdk/typescript/npm/linux-arm64/package.json +++ b/sdk/typescript/npm/linux-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@execution-associates/isb-linux-arm64", - "version": "3.1.1", + "version": "3.1.2", "description": "The static isb binary for Linux arm64 (aarch64-unknown-linux-musl), used by @execution-associates/isb", "license": "MIT", "repository": { diff --git a/sdk/typescript/npm/linux-x64/package.json b/sdk/typescript/npm/linux-x64/package.json index d65323e2..56394cb3 100644 --- a/sdk/typescript/npm/linux-x64/package.json +++ b/sdk/typescript/npm/linux-x64/package.json @@ -1,6 +1,6 @@ { "name": "@execution-associates/isb-linux-x64", - "version": "3.1.1", + "version": "3.1.2", "description": "The static isb binary for Linux x64 (x86_64-unknown-linux-musl), used by @execution-associates/isb", "license": "MIT", "repository": { diff --git a/sdk/typescript/package.json b/sdk/typescript/package.json index a1a5b167..419382c8 100644 --- a/sdk/typescript/package.json +++ b/sdk/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@execution-associates/isb", - "version": "3.1.1", + "version": "3.1.2", "description": "TypeScript SDK for isb: declarative incus sandboxes (containers and VMs)", "license": "MIT", "type": "module", @@ -51,8 +51,8 @@ "prepack": "bun run build" }, "optionalDependencies": { - "@execution-associates/isb-linux-arm64": "3.1.1", - "@execution-associates/isb-linux-x64": "3.1.1" + "@execution-associates/isb-linux-arm64": "3.1.2", + "@execution-associates/isb-linux-x64": "3.1.2" }, "devDependencies": { "@biomejs/biome": "^2.2.0",