release: v0.1.3#52
Merged
Merged
Conversation
…thin-client model (D-005) (#47) * docs(plans): adopt rust-canonical thin-client model (D-005) Supersedes the dual-maintain Rust + TS plan with a Rust-only implementation accessed by non-Rust consumers via a long-running local daemon (kindling serve) over Unix domain socket. - New design spec at plans/specs/2026-05-03-rust-canonical-thin-client-design.md - Old spec (2026-04-15) marked Superseded with header pointer - Module 05 rewritten: 10 crates (added kindling-client), 4 phases, 20 tasks - Phase 4 changed from "ts-rs sync gate" to thin TS client + npm postinstall + TS implementation package deprecation - Index updated: D-005 recorded, schedule reframed around rust port phases, module 01 marked Done (v0.1.2 already on npm) Driver: sole-operator project means no external migration coordination; every realistic TS consumer can hit a localhost daemon; dual-maintain pays a real tax for a use case nobody asked for. * feat(rust): PORT-001 cargo workspace scaffold Initialise the Rust workspace at crates/ with the 10 crate skeletons from the rust-canonical design spec: - kindling-types (lib) — domain types, ts-rs derives (PORT-002) - kindling-store (lib) — SQLite persistence (PORT-003) - kindling-filter (lib) — secret masking, truncation (PORT-004) - kindling-provider (lib) — local FTS retrieval (PORT-005) - kindling-service (lib) — in-process orchestration API (PORT-006) - kindling-server (lib) — daemon, UDS transport (PORT-007) - kindling-client (lib) — Rust HTTP-over-UDS client (PORT-008) - kindling-hook (lib) — Claude Code hook handlers (PORT-009) - kindling-cli (lib) — CLI command tree (PORT-012) - kindling (bin) — umbrella binary entry point (PORT-013) Each crate has a doc-comment lib.rs / main.rs pointing at the task that will fill it in. Workspace pins edition 2021, rust 1.85, forbids unsafe_code, warns on clippy::all. Release profile uses thin LTO + strip. Adds .github/workflows/rust.yml running cargo fmt --check, clippy with -D warnings, test --workspace, and build --workspace --release on push and PR to dev/main. Local verification: - cargo build --workspace --release: green (all 10 crates) - cargo fmt --all -- --check: clean - cargo clippy --workspace --all-targets -- -D warnings: clean - cargo test --workspace: 0 tests, 0 failures (expected for scaffold) - ./target/release/kindling: prints "kindling 0.0.1" * fix(rust): address PR #47 review feedback Six findings from the copilot review on the scaffold: - Cargo.toml: license narrowed from "MIT OR Apache-2.0" to "Apache-2.0" to match the repo's single Apache-2.0 LICENSE file (matches all existing package.json declarations). - rust-toolchain.toml: pinned channel to 1.95.0 with a comment explaining why — reproducible rustfmt/clippy across machines and over time, instead of the moving "stable" channel which can break CI on a stable bump. - .github/workflows/rust.yml: dropped --all-features from the test job so optional features don't become an implicit CI requirement; we'll add a separate feature-matrix job if/when that becomes useful. - plans/specs/2026-05-03-rust-canonical-thin-client-design.md: clarified that the workspace root Cargo.toml lives at the repo root with member crates under crates/ (was misleadingly "workspace lives at crates/"). - plans/modules/05-rust-port.aps.md (×2): same wording clarification in both the In Scope bullet and the Exposes bullet. Local verification: cargo build/fmt/clippy/test all green with pinned 1.95.0. --------- Co-authored-by: aneki <josh@eddacraft.io>
Add docs/guides/{branching-strategy,worktree-policy,release-runbook}.md
adapted to Kindling's npm pipeline (lockstep workspace versioning,
publish.yml triggered by GitHub Releases). Update CLAUDE.md and
CONTRIBUTING.md to point at the guides and align PR-process language
with the two-branch policy.
Authored-By: Aneki (joshuaboys)
Co-authored-by: aneki <josh@eddacraft.io>
chore: back-merge main into dev
Branch protection is now configured directly in the GitHub UI; the script is no longer the source of truth and would drift.
Canonical Rust types for Observation, Capsule, Summary, Pin, retrieval, and ScopeIds. Wire format mirrors the existing TS shapes: camelCase fields, snake_case enum variants, optional fields omitted (never null), counts and timestamps as JSON numbers. ts-rs feature derives a TypeScript projection per type into bindings/. The .ts files are committed and a new ts-bindings CI job regenerates them on every push and fails on drift, so a Rust-side type change cannot land without refreshing the projection. Result<T, E> is intentionally excluded — it's a TS control-flow shape; Rust uses native std::result::Result. i64/u64 are avoided in public types so the projection emits number rather than bigint, matching the existing wire format.
…rride The README and PORT-002 status claimed `i64`/`u64` were not used in public types, but `Timestamp` is publicly defined as `i64`. The bindings emit `number` (not `bigint`) only because every field that holds a `Timestamp` carries a per-field `ts(type = "number")` override. Document the actual mechanism so contributors adding new `Timestamp` fields know the override is required. Addresses PR #50 review feedback.
Addresses CodeQL workflow-permissions findings on rust.yml jobs (fmt, clippy, test, ts-bindings, build). Top-level block applies to every job since none of them need write access.
Contributor
Author
Review Feedback AddressedCode Changes (1 commit pushed)
Workflow noteThe fix was pushed directly to |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Promote
devtomainfor release v0.1.3 — a maintenance release on the 0.1.x line. After merge, tagv0.1.3onmainand create a GitHub Release; that triggerspublish.ymland ships every workspace package to npm with provenance.This is the last 0.1.x release before the Rust cutover. The 0.1.x line continues maintenance until the daemon + thin client land; the existing TS implementation packages (
-core,-store-sqlite,-store-sqljs,-provider-local,-server,-cli) are deprecated and will be removed at 1.0.0 per D-005.What's shipping in 0.1.3
kindling logandkindling capsulewrite commands, install script, expanded README with cross-platform install guidesrecallskill for agent memory retrieval (auto-invoke +/kindling:recall <query>)schema/(SCHEMA-001..005)fastify5.7.4 → 5.8.1kindling-api-server→kindling-server(npm package name unchanged)Internal (no shipping impact)
main/devbranching model and documented it underdocs/guides/prettierwithoxfmtcrates/. Crates are not published to npm.Full notes in
CHANGELOG.md.Post-merge steps
Per
docs/guides/release-runbook.md. The publish workflow gates on CI re-run, asserts tag matches rootpackage.jsonversion, and publishes withpnpm publish -r --access public.Test plan
dev(build, type-check, lint, test)dev(PR chore(release): prepare v0.1.3 #51)publish.ymlnpm view @eddacraft/kindling versionreturns 0.1.3