From 0d58846962f37320812981cd383686d7b16f1fc1 Mon Sep 17 00:00:00 2001 From: Josh Boys Date: Fri, 26 Jun 2026 03:52:36 +0800 Subject: [PATCH] chore(release): 0.3.0 Workspace-wide minor bump for the downstream-integration release that anvil consumes from crates.io. - Breaking: kindling-client SpoolConfig is now #[non_exhaustive] (+ max_bytes / max_age_ms), and kindling-runtime's public config/error/strategy types are #[non_exhaustive]. Pre-1.0, a breaking change bumps the minor -> 0.3.0. - Ships KINTEG-003 (observation list/enumerate read API), KINTEG-009 (spool retention cap), and KINTEG-008 (kindling-runtime facade, first publish). - Bumps workspace.package version + all intra-workspace dep pins to 0.3.0, npm package versions to 0.3.0, the publish_readiness lockstep constant, and adds a CHANGELOG [0.3.0] section. No schema change (stays v5). The crates.io publish (cargo login + scripts/publish.sh) and the v0.3.0 tag / GitHub Release stay user-gated. --- CHANGELOG.md | 34 +++++++++++++++++++ Cargo.lock | 16 ++++----- Cargo.toml | 2 +- crates/kindling-client/Cargo.toml | 6 ++-- crates/kindling-provider/Cargo.toml | 4 +-- crates/kindling-runtime/Cargo.toml | 8 ++--- crates/kindling-server/Cargo.toml | 6 ++-- crates/kindling-service/Cargo.toml | 6 ++-- crates/kindling-store/Cargo.toml | 2 +- crates/kindling/Cargo.toml | 10 +++--- crates/kindling/tests/publish_readiness.rs | 4 +-- package.json | 2 +- .../kindling-adapter-opencode/package.json | 2 +- .../kindling-adapter-pocketflow/package.json | 2 +- packages/kindling-adapter-vscode/package.json | 2 +- packages/kindling/package.json | 2 +- 16 files changed, 71 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c2abeb..0d30022 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,8 +16,42 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.3.0] - 2026-06-26 + +Downstream-integration release. The daemon/client contract anvil consumes gains +an exhaustive read API and a bounded spool, plus a one-dependency runtime facade. +This is a **breaking** release for `kindling-client` (`SpoolConfig` is now +`#[non_exhaustive]`); pre-1.0, a breaking change bumps the minor — hence 0.3.0. + +### Breaking + +- **`kindling-client::SpoolConfig` is now `#[non_exhaustive]`** and gains + `max_bytes` / `max_age_ms` fields. Construct it via `SpoolConfig::new(path)` + plus the `with_max_bytes` / `with_max_age_ms` builders rather than a struct + literal. +- **`kindling-runtime`'s public config/error/strategy types are + `#[non_exhaustive]`** (built via their constructors/builders). + ### Added +- **Observation list/enumerate read API (KINTEG-003).** New + `POST /v1/observations/list` and `Client::list_observations` return the _full_ + set of observations matching a `(kind, scope, half-open time-range)` filter, + deterministically paginated with an opaque keyset cursor over the stable + `(ts, id)` order — distinct from the ranked, capped `POST /v1/retrieve`. Lets a + consumer compute exact counts / set-differences over every matching row; + redacted rows are excluded unless `includeRedacted` is set. No schema change + (still v5). Unblocks anvil's daemon-backed usage views (KDS-004). +- **Spool retention cap (KINTEG-009).** `SpoolConfig` gains optional + `max_bytes` / `max_age_ms` caps (default unbounded). When set, `flush()` trims + the oldest entries (age, then bytes) under its file lock — preserving drain + order and never dropping an un-drained entry ahead of a kept newer one; shed + entries are counted in `SpoolStatus::dropped_count`. Lets a downstream replace + a rolling NDJSON sidecar without a retention regression (KDS-005 prerequisite). +- **`kindling-runtime` facade crate (KINTEG-008).** A single dependency bundling + attach-or-start daemon wiring and a spooled client, so a Rust consumer can embed + kindling without the `kindling` CLI on `PATH` or manual client + server glue. + First crates.io publish. - **Conversion surface** merged to main: `kindling demo`, `kindling browse`, `@eddacraft/kindling-adapter-vscode`, onboarding docs (`docs/quickstart/`, `docs/integrations.md`, adapter cookbook), Homebrew formula updates (macOS + Linux glibc), and automated homebrew-tap PR on release. ### Removed diff --git a/Cargo.lock b/Cargo.lock index a5edaf0..c041ede 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -289,7 +289,7 @@ dependencies = [ [[package]] name = "eddacraft-kindling" -version = "0.2.0" +version = "0.3.0" dependencies = [ "anyhow", "clap", @@ -593,7 +593,7 @@ dependencies = [ [[package]] name = "kindling-client" -version = "0.2.0" +version = "0.3.0" dependencies = [ "http-body-util", "hyper", @@ -611,7 +611,7 @@ dependencies = [ [[package]] name = "kindling-provider" -version = "0.2.0" +version = "0.3.0" dependencies = [ "kindling-store", "kindling-types", @@ -623,7 +623,7 @@ dependencies = [ [[package]] name = "kindling-runtime" -version = "0.2.0" +version = "0.3.0" dependencies = [ "kindling-client", "kindling-server", @@ -636,7 +636,7 @@ dependencies = [ [[package]] name = "kindling-server" -version = "0.2.0" +version = "0.3.0" dependencies = [ "axum", "chrono", @@ -657,7 +657,7 @@ dependencies = [ [[package]] name = "kindling-service" -version = "0.2.0" +version = "0.3.0" dependencies = [ "kindling-provider", "kindling-store", @@ -671,7 +671,7 @@ dependencies = [ [[package]] name = "kindling-store" -version = "0.2.0" +version = "0.3.0" dependencies = [ "kindling-types", "rusqlite", @@ -684,7 +684,7 @@ dependencies = [ [[package]] name = "kindling-types" -version = "0.2.0" +version = "0.3.0" dependencies = [ "serde", "serde_json", diff --git a/Cargo.toml b/Cargo.toml index 8d8d532..477858f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ resolver = "2" members = ["crates/*"] [workspace.package] -version = "0.2.0" +version = "0.3.0" edition = "2021" license = "Apache-2.0" repository = "https://github.com/eddacraft/kindling" diff --git a/crates/kindling-client/Cargo.toml b/crates/kindling-client/Cargo.toml index ca48acb..7cd3c08 100644 --- a/crates/kindling-client/Cargo.toml +++ b/crates/kindling-client/Cargo.toml @@ -14,7 +14,7 @@ authors.workspace = true rust-version.workspace = true [dependencies] -kindling-types = { path = "../kindling-types", version = "0.2.0" } +kindling-types = { path = "../kindling-types", version = "0.3.0" } tokio = { version = "1", features = ["rt", "macros", "net", "time", "process"] } hyper = { version = "1", features = ["client", "http1"] } hyper-util = { version = "0.1", features = ["client", "http1", "tokio"] } @@ -33,8 +33,8 @@ spool = ["dep:uuid", "tokio/sync"] all-features = true [dev-dependencies] -kindling-server = { path = "../kindling-server", version = "0.2.0" } -kindling-store = { path = "../kindling-store", version = "0.2.0" } +kindling-server = { path = "../kindling-server", version = "0.3.0" } +kindling-store = { path = "../kindling-store", version = "0.3.0" } tempfile = "3" tokio = { version = "1", features = ["rt-multi-thread", "macros", "net", "time"] } diff --git a/crates/kindling-provider/Cargo.toml b/crates/kindling-provider/Cargo.toml index 2115f4d..22c85e7 100644 --- a/crates/kindling-provider/Cargo.toml +++ b/crates/kindling-provider/Cargo.toml @@ -17,8 +17,8 @@ rust-version.workspace = true workspace = true [dependencies] -kindling-store = { path = "../kindling-store", version = "0.2.0" } -kindling-types = { path = "../kindling-types", version = "0.2.0" } +kindling-store = { path = "../kindling-store", version = "0.3.0" } +kindling-types = { path = "../kindling-types", version = "0.3.0" } rusqlite = { version = "0.40", features = ["bundled"] } serde_json = "1" thiserror = "2" diff --git a/crates/kindling-runtime/Cargo.toml b/crates/kindling-runtime/Cargo.toml index 694a834..3b2e0de 100644 --- a/crates/kindling-runtime/Cargo.toml +++ b/crates/kindling-runtime/Cargo.toml @@ -14,9 +14,9 @@ authors.workspace = true rust-version.workspace = true [dependencies] -kindling-types = { path = "../kindling-types", version = "0.2.0" } -kindling-client = { path = "../kindling-client", version = "0.2.0", optional = true } -kindling-server = { path = "../kindling-server", version = "0.2.0", optional = true } +kindling-types = { path = "../kindling-types", version = "0.3.0" } +kindling-client = { path = "../kindling-client", version = "0.3.0", optional = true } +kindling-server = { path = "../kindling-server", version = "0.3.0", optional = true } tokio = { version = "1", features = ["rt", "macros", "net", "time", "sync"] } thiserror = "2" @@ -37,7 +37,7 @@ external-spawn = ["client"] all-features = true [dev-dependencies] -kindling-store = { path = "../kindling-store", version = "0.2.0" } +kindling-store = { path = "../kindling-store", version = "0.3.0" } tempfile = "3" tokio = { version = "1", features = ["rt-multi-thread", "macros", "net", "time"] } diff --git a/crates/kindling-server/Cargo.toml b/crates/kindling-server/Cargo.toml index 7fa5d13..976e93f 100644 --- a/crates/kindling-server/Cargo.toml +++ b/crates/kindling-server/Cargo.toml @@ -14,9 +14,9 @@ authors.workspace = true rust-version.workspace = true [dependencies] -kindling-types = { path = "../kindling-types", version = "0.2.0" } -kindling-store = { path = "../kindling-store", version = "0.2.0" } -kindling-service = { path = "../kindling-service", version = "0.2.0" } +kindling-types = { path = "../kindling-types", version = "0.3.0" } +kindling-store = { path = "../kindling-store", version = "0.3.0" } +kindling-service = { path = "../kindling-service", version = "0.3.0" } axum = "0.8" tokio = { version = "1", features = [ "rt-multi-thread", diff --git a/crates/kindling-service/Cargo.toml b/crates/kindling-service/Cargo.toml index bf2e7cc..00e44aa 100644 --- a/crates/kindling-service/Cargo.toml +++ b/crates/kindling-service/Cargo.toml @@ -14,9 +14,9 @@ authors.workspace = true rust-version.workspace = true [dependencies] -kindling-types = { path = "../kindling-types", version = "0.2.0" } -kindling-store = { path = "../kindling-store", version = "0.2.0" } -kindling-provider = { path = "../kindling-provider", version = "0.2.0" } +kindling-types = { path = "../kindling-types", version = "0.3.0" } +kindling-store = { path = "../kindling-store", version = "0.3.0" } +kindling-provider = { path = "../kindling-provider", version = "0.3.0" } thiserror = "2" regex = "1" serde = { version = "1", features = ["derive"] } diff --git a/crates/kindling-store/Cargo.toml b/crates/kindling-store/Cargo.toml index 8ac5273..6028b06 100644 --- a/crates/kindling-store/Cargo.toml +++ b/crates/kindling-store/Cargo.toml @@ -17,7 +17,7 @@ rust-version.workspace = true workspace = true [dependencies] -kindling-types = { path = "../kindling-types", version = "0.2.0" } +kindling-types = { path = "../kindling-types", version = "0.3.0" } rusqlite = { version = "0.40", features = ["bundled"] } serde = { version = "1", features = ["derive"] } serde_json = { version = "1", features = ["preserve_order"] } diff --git a/crates/kindling/Cargo.toml b/crates/kindling/Cargo.toml index 81d2003..a580390 100644 --- a/crates/kindling/Cargo.toml +++ b/crates/kindling/Cargo.toml @@ -25,11 +25,11 @@ name = "kindling" path = "src/main.rs" [dependencies] -kindling-types = { path = "../kindling-types", version = "0.2.0" } -kindling-store = { path = "../kindling-store", version = "0.2.0" } -kindling-service = { path = "../kindling-service", version = "0.2.0" } -kindling-client = { path = "../kindling-client", version = "0.2.0", features = ["spool"] } -kindling-server = { path = "../kindling-server", version = "0.2.0" } +kindling-types = { path = "../kindling-types", version = "0.3.0" } +kindling-store = { path = "../kindling-store", version = "0.3.0" } +kindling-service = { path = "../kindling-service", version = "0.3.0" } +kindling-client = { path = "../kindling-client", version = "0.3.0", features = ["spool"] } +kindling-server = { path = "../kindling-server", version = "0.3.0" } clap = { version = "4", features = ["derive"] } rusqlite = { version = "0.40", features = ["bundled"] } serde = { version = "1", features = ["derive"] } diff --git a/crates/kindling/tests/publish_readiness.rs b/crates/kindling/tests/publish_readiness.rs index 8e69062..102f7ac 100644 --- a/crates/kindling/tests/publish_readiness.rs +++ b/crates/kindling/tests/publish_readiness.rs @@ -6,7 +6,7 @@ use std::fs; use std::path::{Path, PathBuf}; use std::process::Command; -const WORKSPACE_VERSION: &str = "0.2.0"; +const WORKSPACE_VERSION: &str = "0.3.0"; const CRATES: &[&str] = &[ "kindling-types", "kindling-store", @@ -38,7 +38,7 @@ fn legacy_standalone_spool_crate() -> String { } #[test] -fn workspace_version_is_020() { +fn workspace_version_is_030() { let root = workspace_root(); let workspace_toml = read(root.join("Cargo.toml")); assert!( diff --git a/package.json b/package.json index a2f3e75..2894d49 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kindling-monorepo", - "version": "0.2.0", + "version": "0.3.0", "type": "module", "private": true, "description": "Local memory and continuity engine for AI-assisted development", diff --git a/packages/kindling-adapter-opencode/package.json b/packages/kindling-adapter-opencode/package.json index ff42d16..41f3ae7 100644 --- a/packages/kindling-adapter-opencode/package.json +++ b/packages/kindling-adapter-opencode/package.json @@ -1,6 +1,6 @@ { "name": "@eddacraft/kindling-adapter-opencode", - "version": "0.2.0", + "version": "0.3.0", "description": "OpenCode session adapter for kindling - capture tool calls, commands, and file changes from AI coding sessions", "type": "module", "main": "./dist/index.js", diff --git a/packages/kindling-adapter-pocketflow/package.json b/packages/kindling-adapter-pocketflow/package.json index 8e971c1..90eb923 100644 --- a/packages/kindling-adapter-pocketflow/package.json +++ b/packages/kindling-adapter-pocketflow/package.json @@ -1,6 +1,6 @@ { "name": "@eddacraft/kindling-adapter-pocketflow", - "version": "0.2.0", + "version": "0.3.0", "description": "PocketFlow workflow adapter for kindling - capture node executions with intent and confidence", "type": "module", "main": "./dist/index.js", diff --git a/packages/kindling-adapter-vscode/package.json b/packages/kindling-adapter-vscode/package.json index afa78b6..40a0569 100644 --- a/packages/kindling-adapter-vscode/package.json +++ b/packages/kindling-adapter-vscode/package.json @@ -1,6 +1,6 @@ { "name": "@eddacraft/kindling-adapter-vscode", - "version": "0.2.0", + "version": "0.3.0", "description": "VS Code, Cursor, and Windsurf extension for kindling - capture file saves and editor activity into local memory", "type": "module", "main": "./dist/extension.js", diff --git a/packages/kindling/package.json b/packages/kindling/package.json index 55c9a89..2dbb14c 100644 --- a/packages/kindling/package.json +++ b/packages/kindling/package.json @@ -1,6 +1,6 @@ { "name": "@eddacraft/kindling", - "version": "0.2.0", + "version": "0.3.0", "description": "Thin TypeScript client for the kindling daemon — local memory and continuity engine for AI-assisted development", "type": "module", "main": "./dist/index.js",