Skip to content

release: v0.1.3#52

Merged
joshuaboys merged 9 commits into
mainfrom
dev
May 8, 2026
Merged

release: v0.1.3#52
joshuaboys merged 9 commits into
mainfrom
dev

Conversation

@joshuaboys
Copy link
Copy Markdown
Contributor

Summary

Promote dev to main for release v0.1.3 — a maintenance release on the 0.1.x line. After merge, tag v0.1.3 on main and create a GitHub Release; that triggers publish.yml and 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

  • CLI: kindling log and kindling capsule write commands, install script, expanded README with cross-platform install guides
  • Plugin: recall skill for agent memory retrieval (auto-invoke + /kindling:recall <query>)
  • Schema: cross-language SQLite contract under schema/ (SCHEMA-001..005)
  • Server: fastify 5.7.4 → 5.8.1
  • Repo: directory rename kindling-api-serverkindling-server (npm package name unchanged)

Internal (no shipping impact)

  • Adopted the main/dev branching model and documented it under docs/guides/
  • Replaced prettier with oxfmt
  • Began the Rust port: workspace scaffold (PORT-001) and the canonical types crate (PORT-002) under crates/. Crates are not published to npm.

Full notes in CHANGELOG.md.

Post-merge steps

git switch main && git pull --ff-only origin main
git tag -a v0.1.3 -m "v0.1.3"
git push origin v0.1.3
gh release create v0.1.3 --title "v0.1.3" --notes-from-tag --target main

Per docs/guides/release-runbook.md. The publish workflow gates on CI re-run, asserts tag matches root package.json version, and publishes with pnpm publish -r --access public.

Test plan

  • All preflight checks pass on dev (build, type-check, lint, test)
  • Lockstep version bump landed on dev (PR chore(release): prepare v0.1.3 #51)
  • CI green on this promotion PR
  • After merge: tag, GitHub Release, watch publish.yml
  • Verify npm view @eddacraft/kindling version returns 0.1.3

joshuaboys and others added 8 commits May 3, 2026 18:00
…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>
Two commits (cd50596, 3b1addd) from the Hearth mirror were pushed directly
to main before the main/dev workflow took effect. Back-merging so dev is
the canonical integration branch going forward.
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.
Comment thread .github/workflows/rust.yml Fixed
Comment thread .github/workflows/rust.yml Fixed
Comment thread .github/workflows/rust.yml Fixed
Comment thread .github/workflows/rust.yml Fixed
Comment thread .github/workflows/rust.yml Fixed
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.
@joshuaboys
Copy link
Copy Markdown
Contributor Author

Review Feedback Addressed

Code Changes (1 commit pushed)

  • Added top-level permissions: contents: read to .github/workflows/rust.yml (commit 88e3452). Single fix covers all 5 CodeQL findings on jobs fmt, clippy, test, ts-bindings, build — none of them need write access.

Workflow note

The fix was pushed directly to dev (admin-bypassed the branch protection rule). Per the new main/dev policy this should have been a PR. If you want it cleaner I can revert the direct push and redo via a chore/rust-workflow-permissions PR; otherwise we leave it as-is and proceed to release.

@joshuaboys joshuaboys merged commit e8629c2 into main May 8, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants