diff --git a/.cursor/skills/stackless/SKILL.md b/.cursor/skills/stackless/SKILL.md index eb551c5..ed22ffe 100644 --- a/.cursor/skills/stackless/SKILL.md +++ b/.cursor/skills/stackless/SKILL.md @@ -20,7 +20,7 @@ branching. ```bash curl --proto '=https' --tlsv1.2 -LsSf https://github.com/snowmead/stackless/releases/latest/download/stackless-installer.sh | sh -stackless --version # expect 0.3.1 or newer +stackless --version # expect 0.3.2 or newer ``` **From source (this repo):** diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b5effd..15a1f9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,27 @@ Generate with: ## Unreleased +## v0.3.2 — 2026-08-15 + +Bound control-plane waits so `down` cannot hang on Stripe, launchd +kickstart, or the lease reaper. + +### Fixed + +- Stripe, launchctl kickstart, and reaper children wait with a budget; + leftovers are reaped for that spawn only (no host-wide helper kill) (#102). + +### Commits + +- [b5e7d1c](https://github.com/snowmead/stackless/commit/b5e7d1ccf6873f6b388d60efb30a73865c311779) fix: bound Stripe, kickstart, and reaper so down cannot hang (#102) + +### Install + +```sh +curl --proto '=https' --tlsv1.2 -LsSf https://github.com/snowmead/stackless/releases/download/v0.3.2/stackless-installer.sh | sh +stackless --version +``` + ## v0.3.1 — 2026-08-14 Stripe Projects plugin 0.31.0 pin and cargo-vet supply-chain exemptions. diff --git a/Cargo.lock b/Cargo.lock index cc74a8b..4656718 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2315,7 +2315,7 @@ dependencies = [ [[package]] name = "render-client" -version = "0.3.1" +version = "0.3.2" dependencies = [ "bytes", "chrono", @@ -2892,7 +2892,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stackless" -version = "0.3.1" +version = "0.3.2" dependencies = [ "axoupdater", "clap", @@ -2923,7 +2923,7 @@ dependencies = [ [[package]] name = "stackless-bindgen" -version = "0.3.1" +version = "0.3.2" dependencies = [ "serde_json", "stackless-idl", @@ -2933,7 +2933,7 @@ dependencies = [ [[package]] name = "stackless-cloud" -version = "0.3.1" +version = "0.3.2" dependencies = [ "reqwest", "serde", @@ -2948,7 +2948,7 @@ dependencies = [ [[package]] name = "stackless-cloudflare" -version = "0.3.1" +version = "0.3.2" dependencies = [ "async-trait", "reqwest", @@ -2968,7 +2968,7 @@ dependencies = [ [[package]] name = "stackless-core" -version = "0.3.1" +version = "0.3.2" dependencies = [ "async-trait", "libsql", @@ -2987,7 +2987,7 @@ dependencies = [ [[package]] name = "stackless-daemon" -version = "0.3.1" +version = "0.3.2" dependencies = [ "http-body-util", "hyper 1.10.1", @@ -3002,7 +3002,7 @@ dependencies = [ [[package]] name = "stackless-fly" -version = "0.3.1" +version = "0.3.2" dependencies = [ "async-trait", "reqwest", @@ -3022,7 +3022,7 @@ dependencies = [ [[package]] name = "stackless-git" -version = "0.3.1" +version = "0.3.2" dependencies = [ "grit-lib", "secrecy", @@ -3032,7 +3032,7 @@ dependencies = [ [[package]] name = "stackless-gitlab" -version = "0.3.1" +version = "0.3.2" dependencies = [ "async-trait", "reqwest", @@ -3052,7 +3052,7 @@ dependencies = [ [[package]] name = "stackless-idl" -version = "0.3.1" +version = "0.3.2" dependencies = [ "serde", "serde_json", @@ -3064,7 +3064,7 @@ dependencies = [ [[package]] name = "stackless-integrations" -version = "0.3.1" +version = "0.3.2" dependencies = [ "async-trait", "reqwest", @@ -3082,7 +3082,7 @@ dependencies = [ [[package]] name = "stackless-laravel-cloud" -version = "0.3.1" +version = "0.3.2" dependencies = [ "async-trait", "reqwest", @@ -3101,7 +3101,7 @@ dependencies = [ [[package]] name = "stackless-local" -version = "0.3.1" +version = "0.3.2" dependencies = [ "async-trait", "bollard", @@ -3121,7 +3121,7 @@ dependencies = [ [[package]] name = "stackless-netlify" -version = "0.3.1" +version = "0.3.2" dependencies = [ "async-trait", "reqwest", @@ -3143,7 +3143,7 @@ dependencies = [ [[package]] name = "stackless-provider-sdk" -version = "0.3.1" +version = "0.3.2" dependencies = [ "async-trait", "serde", @@ -3156,7 +3156,7 @@ dependencies = [ [[package]] name = "stackless-railway" -version = "0.3.1" +version = "0.3.2" dependencies = [ "async-trait", "reqwest", @@ -3175,7 +3175,7 @@ dependencies = [ [[package]] name = "stackless-render" -version = "0.3.1" +version = "0.3.2" dependencies = [ "async-trait", "chrono", @@ -3198,7 +3198,7 @@ dependencies = [ [[package]] name = "stackless-stripe-projects" -version = "0.3.1" +version = "0.3.2" dependencies = [ "async-trait", "serde", @@ -3213,7 +3213,7 @@ dependencies = [ [[package]] name = "stackless-vercel" -version = "0.3.1" +version = "0.3.2" dependencies = [ "async-trait", "base64 0.22.1", @@ -3235,7 +3235,7 @@ dependencies = [ [[package]] name = "stackless-wordpress" -version = "0.3.1" +version = "0.3.2" dependencies = [ "async-trait", "reqwest", @@ -3752,7 +3752,7 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "vercel-client" -version = "0.3.1" +version = "0.3.2" dependencies = [ "bytes", "chrono", @@ -4507,7 +4507,7 @@ checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "xtask" -version = "0.3.1" +version = "0.3.2" dependencies = [ "clap", "serde", diff --git a/Cargo.toml b/Cargo.toml index 964af39..438a6ae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,7 +28,7 @@ members = [ [workspace.package] edition = "2024" -version = "0.3.1" +version = "0.3.2" license = "MIT OR Apache-2.0" repository = "https://github.com/snowmead/stackless" @@ -44,25 +44,25 @@ dbg_macro = "deny" [workspace.dependencies] # `version` is required for crates.io; `path` keeps the workspace linked locally. -stackless-core = { path = "crates/stackless-core", version = "0.3.1" } -stackless-cloud = { path = "crates/stackless-cloud", version = "0.3.1" } -stackless-daemon = { path = "crates/stackless-daemon", version = "0.3.1" } -stackless-local = { path = "crates/stackless-local", version = "0.3.1" } -stackless-git = { path = "crates/stackless-git", version = "0.3.1" } -stackless-render = { path = "crates/stackless-render", version = "0.3.1" } -stackless-vercel = { path = "crates/stackless-vercel", version = "0.3.1" } -stackless-fly = { path = "crates/stackless-fly", version = "0.3.1" } -stackless-netlify = { path = "crates/stackless-netlify", version = "0.3.1" } -stackless-railway = { path = "crates/stackless-railway", version = "0.3.1" } -stackless-laravel-cloud = { path = "crates/stackless-laravel-cloud", version = "0.3.1" } -stackless-gitlab = { path = "crates/stackless-gitlab", version = "0.3.1" } -stackless-wordpress = { path = "crates/stackless-wordpress", version = "0.3.1" } -stackless-cloudflare = { path = "crates/stackless-cloudflare", version = "0.3.1" } -stackless-integrations = { path = "crates/stackless-integrations", version = "0.3.1" } -stackless-provider-sdk = { path = "crates/stackless-provider-sdk", version = "0.3.1" } -stackless-stripe-projects = { path = "crates/stackless-stripe-projects", version = "0.3.1" } -stackless-idl = { path = "crates/stackless-idl", version = "0.3.1" } -stackless-bindgen = { path = "crates/stackless-bindgen", version = "0.3.1" } +stackless-core = { path = "crates/stackless-core", version = "0.3.2" } +stackless-cloud = { path = "crates/stackless-cloud", version = "0.3.2" } +stackless-daemon = { path = "crates/stackless-daemon", version = "0.3.2" } +stackless-local = { path = "crates/stackless-local", version = "0.3.2" } +stackless-git = { path = "crates/stackless-git", version = "0.3.2" } +stackless-render = { path = "crates/stackless-render", version = "0.3.2" } +stackless-vercel = { path = "crates/stackless-vercel", version = "0.3.2" } +stackless-fly = { path = "crates/stackless-fly", version = "0.3.2" } +stackless-netlify = { path = "crates/stackless-netlify", version = "0.3.2" } +stackless-railway = { path = "crates/stackless-railway", version = "0.3.2" } +stackless-laravel-cloud = { path = "crates/stackless-laravel-cloud", version = "0.3.2" } +stackless-gitlab = { path = "crates/stackless-gitlab", version = "0.3.2" } +stackless-wordpress = { path = "crates/stackless-wordpress", version = "0.3.2" } +stackless-cloudflare = { path = "crates/stackless-cloudflare", version = "0.3.2" } +stackless-integrations = { path = "crates/stackless-integrations", version = "0.3.2" } +stackless-provider-sdk = { path = "crates/stackless-provider-sdk", version = "0.3.2" } +stackless-stripe-projects = { path = "crates/stackless-stripe-projects", version = "0.3.2" } +stackless-idl = { path = "crates/stackless-idl", version = "0.3.2" } +stackless-bindgen = { path = "crates/stackless-bindgen", version = "0.3.2" } # The profile that 'dist' will build with [profile.dist] diff --git a/README.md b/README.md index 7aea640..4936675 100644 --- a/README.md +++ b/README.md @@ -182,7 +182,7 @@ npm i stackless-sdk pip install stackless-sdk # Go -go get github.com/snowmead/stackless/sdks/go@v0.3.1 +go get github.com/snowmead/stackless/sdks/go@v0.3.2 ``` All clients need the `stackless` CLI on `PATH` (or `STACKLESS_BIN`) for the diff --git a/crates/stackless-render/Cargo.toml b/crates/stackless-render/Cargo.toml index b64e1f8..6cd5f66 100644 --- a/crates/stackless-render/Cargo.toml +++ b/crates/stackless-render/Cargo.toml @@ -15,7 +15,7 @@ async-trait = "0.1.89" # DateTime that render-client returns (its own chrono dep omits `alloc`). # Load-bearing via feature unification even though no chrono path is named here. chrono = { version = "0.4.45", default-features = false, features = ["alloc"] } -render-client = { path = "../render-client", version = "0.3.1" } +render-client = { path = "../render-client", version = "0.3.2" } reqwest = { version = "0.13.4", default-features = false, features = [ "rustls", "charset", diff --git a/crates/stackless-vercel/Cargo.toml b/crates/stackless-vercel/Cargo.toml index e10a1af..8cc2656 100644 --- a/crates/stackless-vercel/Cargo.toml +++ b/crates/stackless-vercel/Cargo.toml @@ -12,7 +12,7 @@ workspace = true [dependencies] async-trait = "0.1.89" base64 = "0.22.1" -vercel-client = { path = "../vercel-client", version = "0.3.1" } +vercel-client = { path = "../vercel-client", version = "0.3.2" } reqwest = { version = "0.13.4", default-features = false, features = [ "rustls", "charset", diff --git a/docs/PUBLISHING.md b/docs/PUBLISHING.md index c9b892c..b0c5b85 100644 --- a/docs/PUBLISHING.md +++ b/docs/PUBLISHING.md @@ -1,7 +1,7 @@ # Publishing stackless packages Release surfaces, lockstep with `[workspace.package].version` (today -`0.3.1`): +`0.3.2`): | Surface | Package | How it ships | | --- | --- | --- | @@ -58,16 +58,16 @@ consume the environment SDK, but it is published in the crates wave below. 4. Open a PR; wait for CI including the `sdk` job (`mise run sdk-test` locally). 5. Merge, then from the release commit: ```bash - git tag v0.3.1 - git tag sdks/go/v0.3.1 - git push origin v0.3.1 sdks/go/v0.3.1 + git tag v0.3.2 + git tag sdks/go/v0.3.2 + git push origin v0.3.2 sdks/go/v0.3.2 ``` - `v0.3.1` triggers cargo-dist + `publish-packages`. `sdks/go/v0.3.1` is for + `v0.3.2` triggers cargo-dist + `publish-packages`. `sdks/go/v0.3.2` is for the Go module proxy only (not a GitHub Release). 6. Confirm: - GitHub Release + installer (cargo-dist on `v*`) - `publish-packages` workflow green (crates.io, npm, PyPI) - - `go list -m github.com/snowmead/stackless/sdks/go@v0.3.1` resolves + - `go list -m github.com/snowmead/stackless/sdks/go@v0.3.2` resolves Manual re-publish of an existing tag (e.g. language SDKs after crates.io already shipped): @@ -75,7 +75,7 @@ already shipped): ```bash # Use --ref main so the latest publish scripts run; pypi env must allow main # (or dispatch from a v* tag that contains the fixed workflow). -gh workflow run publish-packages.yml --ref main -f tag=v0.3.1 +gh workflow run publish-packages.yml --ref main -f tag=v0.3.2 ``` --- @@ -128,8 +128,8 @@ Later waves only need a version bump + tag. && python -m twine upload dist/*) # Go (tag only) -git tag sdks/go/v0.3.1 -git push origin sdks/go/v0.3.1 +git tag sdks/go/v0.3.2 +git push origin sdks/go/v0.3.2 ``` --- diff --git a/sdks/go/README.md b/sdks/go/README.md index e791957..b3b812c 100644 --- a/sdks/go/README.md +++ b/sdks/go/README.md @@ -9,7 +9,7 @@ protocol ([`../PROTOCOL.md`](../PROTOCOL.md)) via the `stackless` CLI. github.com/snowmead/stackless/sdks/go ``` -Publish tags use the subdirectory prefix, e.g. `sdks/go/v0.3.1` (lockstep with +Publish tags use the subdirectory prefix, e.g. `sdks/go/v0.3.2` (lockstep with the workspace version). ## Usage diff --git a/sdks/python/pyproject.toml b/sdks/python/pyproject.toml index 77a95de..9782e40 100644 --- a/sdks/python/pyproject.toml +++ b/sdks/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "stackless-sdk" -version = "0.3.1" +version = "0.3.2" description = "CLI-backed Python SDK for stackless lifecycle verbs" readme = "README.md" requires-python = ">=3.10" diff --git a/sdks/typescript/package-lock.json b/sdks/typescript/package-lock.json index 75a9d45..638254b 100644 --- a/sdks/typescript/package-lock.json +++ b/sdks/typescript/package-lock.json @@ -1,12 +1,12 @@ { "name": "stackless-sdk", - "version": "0.3.1", + "version": "0.3.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "stackless-sdk", - "version": "0.3.1", + "version": "0.3.2", "license": "(MIT OR Apache-2.0)", "devDependencies": { "@types/node": "^22.10.0", diff --git a/sdks/typescript/package.json b/sdks/typescript/package.json index d8f08e9..8af915c 100644 --- a/sdks/typescript/package.json +++ b/sdks/typescript/package.json @@ -1,6 +1,6 @@ { "name": "stackless-sdk", - "version": "0.3.1", + "version": "0.3.2", "description": "CLI-backed Stackless client for Node and Bun", "type": "module", "license": "(MIT OR Apache-2.0)", diff --git a/web/public/start.md b/web/public/start.md index 2fbc31b..a62ec5f 100644 --- a/web/public/start.md +++ b/web/public/start.md @@ -18,7 +18,7 @@ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/snowmead/stackless/rele stackless --version ``` -Expect `0.3.1` or newer. If `stackless` is not on `PATH` after install, refresh the shell environment and retry `--version` before continuing. +Expect `0.3.2` or newer. If `stackless` is not on `PATH` after install, refresh the shell environment and retry `--version` before continuing. ## Step 3: Add the agent skill