Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,61 @@ onward the project follows SemVer normally: patch releases are
bug-fix-only, minor releases are backward-compatible additions, and
breaking changes require a major bump.

## v2.5.2: The brain that learns from its own outcomes

Consolidation v1: the first release where citation outcomes reshape the brain
itself, with every mechanism model-free and every constant documented on one
page. Backward-compatible (schema v9 → v10, automatic on open).

### Consolidation v1 (new)

- `kimetsu brain reinforce`: offline consolidation pass. `--staple` merges
memories that were repeatedly cited together into single fact memories
(precomputed multi-hop joins; originals kept; provenance carries part ids).
`--routes` builds a query-routing index from citation history: memories that
answered similar questions before get a bounded retrieval boost.
- `kimetsu brain cite` accepts repeated `--memory-id` (citing a GROUP — the
co-citation signal stapling consumes) and `--query` (linking citations to
the question they answered, feeding the routing index).
- Retrieval-time routing boost with a fixed per-retrieval budget, per-candidate
cap, minimum support, and power-law decay.

### Learning-loop guardrails

- The usefulness boost's relevance gain is capped: a heavily-cited memory can
win ties but can never outrank a genuinely more relevant one (fixes a
measured retrieval-flooding failure mode under sustained citation feedback).
- Cited-in-failure penalty now scales with citation history
(`-1.0 / (1 + prior citations / 3)`): a proven memory absorbs occasional
flaky-run hits; an unproven one takes the full penalty.
- All scoring constants (deltas, caps, envelopes, decay) now live in one
documented module, `scoring.rs`.

### Quality of life

- Schema-mismatch errors name the offending `project.toml` and hint at the
fix (project discovery climbs to the enclosing git root, so the file is
often far from where you ran the command).
- npm packages ship with provenance attestations (Sigstore): every published
package is publicly verifiable as built by CI from this repo.
- Internal: `project.rs` and the CLI `main.rs` split into focused modules.

### Benchmarks

- LoCoMo: 89.4% on the standard 1,540-question set (LLM-judged accuracy).
- Learning-curve harness validated: citation feedback never degrades
retrieval across repeated iterations, with a train/holdout split proving
generalization.

## v2.5.0: Ship the brain to your team

Flagships: retrieval level presets (`basic`/`flexible`/`deep`/`advanced`),
temporal validity and date-aware ingestion, fleet write-safety (concurrent
writers, per-event origin), convergent team sync (HLC replay + conflict
surfacing), Kimetsu Remote GA with per-user attribution, and shareable brain
packs (gzip + security-scrubbed export, merge/replace import from file or
URL). Docs site moved to kimetsu.dev.

## v2.0.0: Never explore twice

The biggest token sink is RE-EXPLORATION: the agent re-deriving what the brain
Expand Down
14 changes: 7 additions & 7 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ resolver = "3"
# everything below except the per-crate `description`, `keywords`,
# and `categories` which live in each `[package]` block since
# crates.io enforces them per crate.
version = "2.5.1"
version = "2.5.2"
edition = "2024"
# Rust ecosystem dual-license (matches tokio, serde, fastembed-rs,
# etc.). UNLICENSED would block crates.io entirely.
Expand Down
4 changes: 2 additions & 2 deletions crates/kimetsu-agent/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ aws-sigv4.workspace = true
aws-smithy-runtime-api.workspace = true
blake3.workspace = true
http.workspace = true
kimetsu-brain = { path = "../kimetsu-brain", version = "2.5.1" }
kimetsu-core = { path = "../kimetsu-core", version = "2.5.1" }
kimetsu-brain = { path = "../kimetsu-brain", version = "2.5.2" }
kimetsu-core = { path = "../kimetsu-core", version = "2.5.2" }
regex.workspace = true
reqwest.workspace = true
rusqlite.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/kimetsu-brain/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ hf-hub = { version = "0.5", optional = true, default-features = false, features
# already native (ort). The lean build never links it.
usearch = { version = "2", optional = true }
ignore.workspace = true
kimetsu-core = { path = "../kimetsu-core", version = "2.5.1" }
kimetsu-core = { path = "../kimetsu-core", version = "2.5.2" }
# v0.4.5: regex backs the secret-redaction patterns in
# `kimetsu_brain::redact`. The crate is already a workspace pin
# elsewhere; we just opt this crate into it now.
Expand Down
6 changes: 3 additions & 3 deletions crates/kimetsu-chat/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ openclaw = ["dep:json5"]
# surface, not a benchmark harness.

[dependencies]
kimetsu-agent = { path = "../kimetsu-agent", version = "2.5.1" }
kimetsu-brain = { path = "../kimetsu-brain", version = "2.5.1" }
kimetsu-core = { path = "../kimetsu-core", version = "2.5.1" }
kimetsu-agent = { path = "../kimetsu-agent", version = "2.5.2" }
kimetsu-brain = { path = "../kimetsu-brain", version = "2.5.2" }
kimetsu-core = { path = "../kimetsu-core", version = "2.5.2" }
base64.workspace = true
crossterm.workspace = true
json5 = { workspace = true, optional = true }
Expand Down
8 changes: 4 additions & 4 deletions crates/kimetsu-cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@ path = "src/main.rs"

[dependencies]
clap.workspace = true
kimetsu-agent = { path = "../kimetsu-agent", version = "2.5.1" }
kimetsu-brain = { path = "../kimetsu-brain", version = "2.5.1" }
kimetsu-chat = { path = "../kimetsu-chat", version = "2.5.1" }
kimetsu-core = { path = "../kimetsu-core", version = "2.5.1" }
kimetsu-agent = { path = "../kimetsu-agent", version = "2.5.2" }
kimetsu-brain = { path = "../kimetsu-brain", version = "2.5.2" }
kimetsu-chat = { path = "../kimetsu-chat", version = "2.5.2" }
kimetsu-core = { path = "../kimetsu-core", version = "2.5.2" }
# v0.4.6: `kimetsu doctor` serializes its report struct so --json
# output can be piped into CI / hooks.
flate2 = "1"
Expand Down
6 changes: 3 additions & 3 deletions crates/kimetsu-e2e/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ publish = false
# Real (non-dev) deps so the test fixtures + scripted provider can be
# re-exported from `kimetsu_e2e::prelude` to the integration tests in
# `tests/`. Integration tests treat this crate as a normal library.
kimetsu-agent = { path = "../kimetsu-agent", version = "2.5.1" }
kimetsu-brain = { path = "../kimetsu-brain", version = "2.5.1" }
kimetsu-core = { path = "../kimetsu-core", version = "2.5.1" }
kimetsu-agent = { path = "../kimetsu-agent", version = "2.5.2" }
kimetsu-brain = { path = "../kimetsu-brain", version = "2.5.2" }
kimetsu-core = { path = "../kimetsu-core", version = "2.5.2" }
rusqlite.workspace = true
serde_json.workspace = true
time.workspace = true
Expand Down
Loading