From eb5fdb40e45317c96ff5cbb541f83271f303c08a Mon Sep 17 00:00:00 2001 From: "sw-release-bot[bot]" <255865126+sw-release-bot[bot]@users.noreply.github.com> Date: Sun, 1 Nov 2026 21:03:30 +0000 Subject: [PATCH 1/2] chore: release v0.10.0 --- CHANGELOG.md | 288 +++++++++++++++++++ Cargo.lock | 44 +-- Cargo.toml | 26 +- crates/coordinode-bench/CHANGELOG.md | 6 + crates/coordinode-cluster/CHANGELOG.md | 6 + crates/coordinode-core/CHANGELOG.md | 49 ++++ crates/coordinode-embed/CHANGELOG.md | 150 ++++++++++ crates/coordinode-migrate/CHANGELOG.md | 20 ++ crates/coordinode-modality/CHANGELOG.md | 57 ++++ crates/coordinode-query/CHANGELOG.md | 104 +++++++ crates/coordinode-raft/CHANGELOG.md | 60 ++++ crates/coordinode-replicate/CHANGELOG.md | 7 + crates/coordinode-s3/CHANGELOG.md | 8 + crates/coordinode-search/CHANGELOG.md | 22 ++ crates/coordinode-storage/CHANGELOG.md | 109 +++++++ crates/coordinode-swarm/CHANGELOG.md | 6 + crates/coordinode-test-fixtures/CHANGELOG.md | 10 + crates/coordinode-vector/CHANGELOG.md | 28 ++ crates/coordinode-wire/CHANGELOG.md | 11 + 19 files changed, 976 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e0b13f3ba..6011cb300 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,293 @@ # Changelog +## v0.10.0 - 2026-11-01 + +### Added + +- *(storage)* use the io_uring backend by default +- *(raft)* measure log syncs and entry applies +- *(wire)* probe idle client and peer connections with keepalive +- *(raft)* carry the history domain with every database image +- *(query)* answer AS OF past the retention from temporal history +- *(index)* bound the bytes of implication placement and folding +- *(index)* key unique entries by their owner +- *(search)* configure the text index worker's step and retry +- *(index)* configure the pages of an implication change +- *(schema)* give labels a catalog identity records store +- *(schema)* declare type, implied and auxiliary labels +- *(cluster)* replace a member whose vote no copy proves +- *(storage)* collect orphan blobs and return their space +- *(storage)* give blobs owners, a catalog and a guarded lifetime +- *(storage)* per-table pressure series that go with the table +- *(vector)* exact scores and domain errors end to end +- *(storage)* hold the database to a strict total footprint limit +- *(storage)* hold a temporal unique value per instant of valid time +- *(modality)* read temporal node versions as known at a system time +- *(modality)* assert temporal node versions in their history +- *(storage)* keep node history and write records keyed by their commit +- *(index)* keep label counts exact across an implication change +- *(storage)* bind history to the store's deployment before it lands +- *(vector)* follow a change of what a type implies +- *(query)* refuse a RETYPE NODE that would move a node's shard +- *(index)* answer a text search with its view's interpretation +- *(schema)* change what a type implies through a schema package +- *(index)* fold what a concluded implication change kept apart +- *(index)* keep a B-tree index's moved carriers apart under ALTER IMPLIES +- *(query)* change a node's type with RETYPE NODE +- *(storage)* judge, repair and drop columnar tables as partitions +- *(embed)* physical backup of the whole database +- *(search)* keep both interpretations of a change in one text index +- *(vector)* score vectors exactly in binary64 with one reduction +- *(operation)* apply each client write once +- *(storage)* store index generations under local installations +- *(migrate)* add the node sizes report module +- *(migrate)* catalog record migrations, check and journal stats +- *(migrate)* offline tool to bring a data directory current + +### Documentation + +- *(cypher)* describe ALTER NODE TYPE SET IMPLIES and test its restart +- *(cluster)* describe a replacement refused by a changed group +- *(query)* drop the type-keyed index reason from relabel +- *(search)* state what settling a scope costs +- *(storage)* describe the node history partition without a dash +- *(storage)* name a private helper without linking it + +### Fixed + +- *(server)* bound the drain of connections on a stop +- *(storage)* report a write of unknown outcome as such +- *(index)* bound the fan-out everywhere and type every index refusal +- *(server)* map text search refusals like every other service +- *(search)* refuse text reads of an unknown commit, type not-ready +- *(query)* keep rows without a vector in a vector ordering +- *(storage)* refuse a hard limit below the supported minimum +- *(bench)* read git state without optional locks +- *(index)* bound held memory in claim restating and the report queue +- *(index)* reserve room only for claims not held yet +- *(index)* keep a claim's charge only on what is kept +- *(index)* charge unique claims and checks for as long as they live +- *(index)* count a unit's derived fan-out before expanding it +- *(index)* charge an element's encoding room before it grows +- *(index)* refuse keys past the store's limit, bound entry fan-out +- *(index)* charge implication placement memory before taking it +- *(storage)* keep the engine and dump format versions +- *(index)* claim a unique value across the parts of a change +- *(schema)* bind a label's first use through the ordered log +- *(query)* charge exact dedup memory before allocating it +- *(index)* hold index builds and catalog changes to a memory bound +- *(search)* never score what a text search leaves out +- *(embed)* a label's first node is no change for search indexes +- *(query)* count deleted implied labels and allow redundant implications +- *(query)* refuse readers of an index still following a change +- *(query)* activate an implication change once search follows it +- *(query)* reserve a vector index read's memory before allocating it +- *(index)* charge catalog changes to the statement and check skipped fields +- *(index)* walk the catalog by head when publishing or concluding parts +- *(index)* check every field of an integrity record read for its state +- *(index)* fold what a cancelled implication change kept apart +- *(index)* place every changed label and conclude the record read +- *(search)* refuse reads of a lagging text reader, own write refusal +- *(index)* bind text settling to one revision and one catalog state +- *(index)* write text documents under the interpretation held +- *(index)* judge a label's carriers by the view's own catalog +- *(index)* bind a text read to the interpretation its index holds +- *(query)* defer only the retyped nodes' index entries in RETYPE +- *(embed)* outwait the commits in flight before re-running a statement +- *(vector)* draw each HNSW level once and finite +- *(raft)* refuse a member without its vote with a typed error +- *(storage)* serve a rebuilt tree's history above its copy's floor +- *(storage)* refuse a rebuild from a damaged checkpoint copy +- *(storage)* rebuild a partition at its original seqnos +- *(storage)* rebuild a table only from provable state +- *(embed)* finish an interrupted table rebuild on open +- *(query)* plan subqueries with the index access paths +- *(query)* order by variables the projection drops +- *(storage)* capture the journal tail after a checkpoint's trees +- *(query)* subqueries see the outer row; one index search per top-k +- *(query)* keep each edge's orientation in undirected hops +- *(replication)* wait for the leader's address, not pauses +- *(query)* three-valued AND/OR, simple CASE, correlated keys +- *(query)* charge every tuple expansion of index checks and conflicts +- *(index)* read a check's reason stored as bytes as the record does +- *(index)* keep a value's ownership revision while it is held +- *(index)* reap expired members kept in selection parts +- *(index)* read a reconciliation page at one snapshot in every mode +- *(index)* bind text interpretations to their installation +- *(index)* refuse a change until the previous one is folded +- *(raft)* end a member's append stream when it stops +- *(storage)* keep member records from making closing entries due +- *(storage)* stop the log at its first failed write +- *(storage)* never found a new domain over retained history +- *(cluster)* take a replacement's membership only once committed +- *(cluster)* check both members of a replacement in one view +- *(cluster)* fence a replacement on the membership it checked +- *(cluster)* apply each change to a joint config left behind +- *(cluster)* start every membership change from a single config +- *(cluster)* resume a change left in its joint configuration +- *(cluster)* refuse a joiner on another member's store as a join +- *(raft)* bind promises to a member, write copy durably +- *(raft)* keep the purge point and a loss with the vote; replace a member +- *(raft)* keep a second copy of the member's vote +- *(search)* keep a landed text commit when the reader lags +- *(search)* commit the scope epoch with the documents +- *(storage)* admit a write into an empty memtable for its flush +- *(storage)* count a flush allowance per memtable in the debt +- *(storage)* hold a value per instant while its unique index is built +- *(storage)* admit the commit timestamp a stamped key carries +- *(storage)* map a bound too short for a slot past the whole slot +- *(storage)* refuse only a change of what a typed label implies +- *(storage)* decide a schema read from the current state +- *(storage)* save the consensus state below half the space reserve +- *(storage)* name the key a pending-commit conflict is about +- *(storage)* close a dropped table's tree before removing its folder +- *(storage)* admit promise copy writes as recovery work +- *(storage)* let blob collection run below the free-space reserve +- *(storage)* flush and capture a table only while it lives +- *(storage)* no table file is made in a folder being dropped +- *(storage)* a second drop of a table drops the same table +- *(storage)* hold a table name until its drop finishes +- *(storage)* open a checkpoint on its clock, never compacted +- *(storage)* roll back a torn manifest tail instead of repairing +- *(storage)* sync a new journal segment's directory +- *(vector)* keep every HNSW node reachable when lists fill +- *(vector)* keep cosine exact for every finite vector +- *(storage)* never copy a checkpoint over a file it holds +- *(migrate)* find every marked store, Raft snapshot captures too + +### Performance + +- *(server)* write log lines from a dedicated thread +- *(txn)* restate bound trends by moving the claims +- *(query)* read a node's schemas once per write +- *(query)* hashed exact DISTINCT, grouping and UNION +- *(embed)* propose a first use of a name once, not per writer +- *(storage)* keep a transaction's writes in key order +- *(index)* refresh the integrity view without reading the evidence +- *(query)* build only the node properties a statement reads +- *(bench)* declare the label the label-scan bench adds +- *(bench)* measure label kinds on the write path +- *(query)* look the keys of a correlated index join up in batches +- *(query)* look a correlated index key up once per distinct key +- *(index)* record a batch of reports without copying it +- *(index)* keep no per-node or per-page scratch in reconciliation +- *(query)* read a property column without allocating +- index partition trees by discriminant, share index definitions +- *(raft)* record the committed index off the raft core +- *(raft)* write the log from its sync thread, not the raft core +- *(storage)* leave a journaled tree's flush syncs to a barrier +- *(storage)* read a unique value's staged owners by range +- *(storage)* export a generation's history by its own key range +- *(storage)* bench flush and compaction of a table +- *(vector)* reduce four AVX2 blocks vertically +- *(vector)* score exactly only candidates that can rank +- *(vector)* no per-evaluation clear of the reduction stack +- *(vector)* SSE2 exact kernels and cached sums of squares +- *(query)* bound property delta chains with whole writes + +### Refactored + +- *(schema)* store canonical labels and judge RETYPE by its result +- *(index)* open a reconciliation page by holding what it carries +- *(storage)* keep the table repair record crate-private + +### Testing + +- *(server)* a failed log write takes the server out of service +- *(embed)* run the vanished text index test on Unix only +- *(embed)* import the kill signal on Unix only +- *(embed)* kill crash-test children with SIGKILL, not abort +- *(embed)* give a fold thirty seconds on a slow host +- *(embed)* take the least of a few counts for measuring that allocates nothing +- *(embed)* allow expect in the field dictionary tests +- *(embed)* bench temporal unique admission against the length of history +- *(embed)* temporal unique ownership and its history survive collection +- *(embed)* temporal unique ownership is restored after a kill +- *(embed)* a taker racing a release of a temporal unique value +- *(embed)* every key shape of a temporal unique index is held per instant +- *(embed)* temporal unique ownership under derived maintenance and across a reopen +- *(embed)* an ordinary holder of a shared label holds its value at every instant +- *(embed)* later facts leave what history knew before +- *(embed)* a stale certification executor changes nothing +- *(embed)* catch a change in force before its text index is prepared +- *(index)* count what reporting to an integrity record allocates +- *(index)* count a refused compound unique write by the allocator +- *(index)* size the catalog budget test so only the catalog decides +- *(index)* stop a fold at an exact step +- *(index)* a unique value taken on both sides of a change is held once +- *(index)* a fold interrupted by a close finishes after a reopen +- *(index)* a settle raced by a rebuild keeps the rebuilt documents +- *(embed)* cover expiry, merge, restore and failed declarations for label kinds +- *(embed)* keep an operation's outcome across a replacement +- *(embed)* accept a cascade the capacity scanner ran first +- *(embed)* report a table rebuild the open cannot finish +- *(embed)* refuse an unevaluable query vector in every top-k form +- *(embed)* measure the index top-k with the vector not returned +- *(embed)* measure the correlated join one row per key and as a search +- *(embed)* wait for reports and rebuilds before index checks +- *(embed)* cover the fallbacks of the batched correlated join +- *(embed)* wait for the recorded suspicion before a failing check +- *(embed)* measure a correlated join through a unique index +- *(embed)* count allocations per vector statement +- *(embed)* bench the index-served top-k shape, store beside the build +- *(embed)* measure vector statements end to end +- *(embed)* keep the cascade's data on hot until it moves it +- *(embed)* lower a full group to the supported minimum +- *(embed)* lower the limit below the data, not the transient charge +- *(index)* pass over a catalog of unrelated definitions in a small budget +- *(index)* state what the shape agreement test catches +- *(index)* fail the shape agreement test on a variant it lacks +- *(index)* leaving a unique value too long to hold writes nothing +- *(index)* a fold never brings back a posting a writer removed +- *(index)* measure the report queue's memory apart from its accounting +- *(query)* tell a woken snapshot read from a timed-out one by margin +- *(query)* measure the distributed top-k merge +- *(raft)* a failed log write stops consensus and the node restarts +- *(raft)* let the refused bound lie above the read one +- *(raft)* finish a conversion cut short at the marker +- *(raft)* count journal syncs for an unchanged vote +- *(raft)* catch an unchanged vote appended to the journal +- *(raft)* resume a replacement on another leader, refuse old votes +- *(raft)* run the lost-answer case around the actual leader +- *(storage)* use is_multiple_of in the mixed load test +- *(storage)* mixed reads, writes and compactions on the default file system +- *(storage)* a power cut never leaves history without its domain +- *(storage)* name the candidate implication in the admission test +- *(storage)* build the candidate test schema with its own fields +- *(storage)* fail every matching op of a persist +- *(storage)* fail only the persisting partition's files +- *(storage)* wait for the drop to close the tree, not for a sleep +- *(storage)* measure the copy's peak from a steady store +- *(storage)* model clean-stale pages and torn files +- *(storage)* fail each step of a promise copy write +- *(storage)* compare table tree paths absolute, as the tree config does +- *(storage)* compare table tree paths against the endpoints as configured +- *(storage)* hold a slowed table's rows to the write rate +- *(storage)* judge each table into its own verdict and one metrics series +- *(storage)* check the tail-captured segment's bytes on every platform +- *(vector)* choose the exact kernel set for a bench run +- *(vector)* measure the production exhaustive scan, not the unused flat index +- *(vector)* qualify exact vector evaluation before and after +- *(wire)* check the accepting socket's options on windows + +### Bench + +- *(raft)* observe the copy's footprint inside a write +- *(raft)* wait for a leader that confirms its lease +- *(raft)* give the recovery image a promised term above 1 +- *(raft)* measure recovery, the copy's peak footprint and reads +- *(raft)* trace each commit against the device's I/O +- *(raft)* separate leadership seen from confirmed +- *(raft)* bound each promise cost to its own span +- *(raft)* measure what keeping consensus promises costs +- *(storage)* measure statement flushes on a fresh store per series + +### Wip + +- ALTER NODE TYPE SET IMPLIES with per-label lookup generations +- keep only a label change's difference apart in the lookup +- reconcile the label lookup through the implication change + ## v0.9.0 - 2026-10-24 ### Added diff --git a/Cargo.lock b/Cargo.lock index 76fe819ff..5221cc6ba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -765,7 +765,7 @@ dependencies = [ [[package]] name = "coordinode-auth" -version = "0.9.0" +version = "0.10.0" dependencies = [ "serde", "tempfile", @@ -775,7 +775,7 @@ dependencies = [ [[package]] name = "coordinode-bench" -version = "0.9.0" +version = "0.10.0" dependencies = [ "chrono", "clap", @@ -789,7 +789,7 @@ dependencies = [ [[package]] name = "coordinode-client" -version = "0.9.0" +version = "0.10.0" dependencies = [ "parking_lot 0.13.0", "prost", @@ -805,7 +805,7 @@ dependencies = [ [[package]] name = "coordinode-cluster" -version = "0.9.0" +version = "0.10.0" dependencies = [ "coordinode-storage", "coordinode-workspace-hack", @@ -823,7 +823,7 @@ dependencies = [ [[package]] name = "coordinode-core" -version = "0.9.0" +version = "0.10.0" dependencies = [ "atomic-waker", "bytes", @@ -847,7 +847,7 @@ dependencies = [ [[package]] name = "coordinode-embed" -version = "0.9.0" +version = "0.10.0" dependencies = [ "chrono", "coordinode-core", @@ -889,7 +889,7 @@ dependencies = [ [[package]] name = "coordinode-integration" -version = "0.9.0" +version = "0.10.0" dependencies = [ "coordinode-client", "coordinode-test-fixtures", @@ -942,7 +942,7 @@ dependencies = [ [[package]] name = "coordinode-migrate" -version = "0.9.0" +version = "0.10.0" dependencies = [ "anyhow", "coordinode-core", @@ -959,7 +959,7 @@ dependencies = [ [[package]] name = "coordinode-modality" -version = "0.9.0" +version = "0.10.0" dependencies = [ "coordinode-core", "coordinode-lsm-tree", @@ -981,7 +981,7 @@ dependencies = [ [[package]] name = "coordinode-query" -version = "0.9.0" +version = "0.10.0" dependencies = [ "chrono", "coordinode-cluster", @@ -1017,7 +1017,7 @@ dependencies = [ [[package]] name = "coordinode-raft" -version = "0.9.0" +version = "0.10.0" dependencies = [ "bytes", "coordinode-core", @@ -1050,7 +1050,7 @@ dependencies = [ [[package]] name = "coordinode-replicate" -version = "0.9.0" +version = "0.10.0" dependencies = [ "coordinode-core", "coordinode-query", @@ -1076,7 +1076,7 @@ dependencies = [ [[package]] name = "coordinode-s3" -version = "0.9.0" +version = "0.10.0" dependencies = [ "bytes", "coordinode-core", @@ -1097,7 +1097,7 @@ dependencies = [ [[package]] name = "coordinode-search" -version = "0.9.0" +version = "0.10.0" dependencies = [ "aes-gcm", "coordinode-core", @@ -1120,7 +1120,7 @@ dependencies = [ [[package]] name = "coordinode-server" -version = "0.9.0" +version = "0.10.0" dependencies = [ "async-trait", "axum", @@ -1178,7 +1178,7 @@ dependencies = [ [[package]] name = "coordinode-session" -version = "0.9.0" +version = "0.10.0" dependencies = [ "coordinode-core", "parking_lot 0.13.0", @@ -1188,7 +1188,7 @@ dependencies = [ [[package]] name = "coordinode-storage" -version = "0.9.0" +version = "0.10.0" dependencies = [ "byteorder-lite", "bytes", @@ -1226,7 +1226,7 @@ dependencies = [ [[package]] name = "coordinode-swarm" -version = "0.9.0" +version = "0.10.0" dependencies = [ "lz4_flex", "structured-zstd", @@ -1236,7 +1236,7 @@ dependencies = [ [[package]] name = "coordinode-test-fixtures" -version = "0.9.0" +version = "0.10.0" dependencies = [ "coordinode-lsm-tree", "coordinode-storage", @@ -1256,7 +1256,7 @@ dependencies = [ [[package]] name = "coordinode-timeseries" -version = "0.9.0" +version = "0.10.0" dependencies = [ "coordinode-core", "coordinode-modality", @@ -1270,7 +1270,7 @@ dependencies = [ [[package]] name = "coordinode-vector" -version = "0.9.0" +version = "0.10.0" dependencies = [ "coordinode-core", "coordinode-storage", @@ -1293,7 +1293,7 @@ dependencies = [ [[package]] name = "coordinode-wire" -version = "0.9.0" +version = "0.10.0" dependencies = [ "arc-swap", "bytes", diff --git a/Cargo.toml b/Cargo.toml index 26648ec0b..b12d393e4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,7 +34,7 @@ exclude = [ ] [workspace.package] -version = "0.9.0" +version = "0.10.0" edition = "2024" license = "AGPL-3.0-only" repository = "https://github.com/structured-world/coordinode" @@ -163,26 +163,26 @@ criterion = { version = "0.8", features = ["html_reports"] } # Published libraries share one version, including public types and storage # contracts. Cargo packages the complete closure together before publication; # release-plz updates these exact requirements with the coordinated version. -coordinode-core = { path = "crates/coordinode-core", version = "=0.9.0" } -coordinode-query = { path = "crates/coordinode-query", version = "=0.9.0" } +coordinode-core = { path = "crates/coordinode-core", version = "=0.10.0" } +coordinode-query = { path = "crates/coordinode-query", version = "=0.10.0" } coordinode-session = { path = "crates/coordinode-session" } -coordinode-vector = { path = "crates/coordinode-vector", version = "=0.9.0" } -coordinode-search = { path = "crates/coordinode-search", version = "=0.9.0" } -coordinode-storage = { path = "crates/coordinode-storage", version = "=0.9.0" } -coordinode-modality = { path = "crates/coordinode-modality", version = "=0.9.0" } +coordinode-vector = { path = "crates/coordinode-vector", version = "=0.10.0" } +coordinode-search = { path = "crates/coordinode-search", version = "=0.10.0" } +coordinode-storage = { path = "crates/coordinode-storage", version = "=0.10.0" } +coordinode-modality = { path = "crates/coordinode-modality", version = "=0.10.0" } coordinode-timeseries = { path = "crates/coordinode-timeseries" } -coordinode-cluster = { path = "crates/coordinode-cluster", version = "=0.9.0" } -coordinode-raft = { path = "crates/coordinode-raft", version = "=0.9.0" } +coordinode-cluster = { path = "crates/coordinode-cluster", version = "=0.10.0" } +coordinode-raft = { path = "crates/coordinode-raft", version = "=0.10.0" } coordinode-auth = { path = "crates/coordinode-auth" } coordinode-server = { path = "crates/coordinode-server" } coordinode-s3 = { path = "crates/coordinode-s3" } -coordinode-embed = { path = "crates/coordinode-embed", version = "=0.9.0" } -coordinode-swarm = { path = "crates/coordinode-swarm", version = "=0.9.0" } -coordinode-replicate = { path = "crates/coordinode-replicate", version = "=0.9.0" } +coordinode-embed = { path = "crates/coordinode-embed", version = "=0.10.0" } +coordinode-swarm = { path = "crates/coordinode-swarm", version = "=0.10.0" } +coordinode-replicate = { path = "crates/coordinode-replicate", version = "=0.10.0" } coordinode-client = { path = "crates/coordinode-client" } coordinode-test-fixtures = { path = "crates/coordinode-test-fixtures" } coordinode-bench = { path = "crates/coordinode-bench" } -coordinode-wire = { path = "crates/coordinode-wire", version = "=0.9.0" } +coordinode-wire = { path = "crates/coordinode-wire", version = "=0.10.0" } [workspace.lints.rust] unsafe_code = "forbid" diff --git a/crates/coordinode-bench/CHANGELOG.md b/crates/coordinode-bench/CHANGELOG.md index bf2a13d83..9721f4c22 100644 --- a/crates/coordinode-bench/CHANGELOG.md +++ b/crates/coordinode-bench/CHANGELOG.md @@ -2,6 +2,12 @@ All notable changes to this crate are documented in this file. +## v0.10.0 - 2026-11-01 + +### Fixed + +- *(bench)* read git state without optional locks + ## v0.7.0 - 2026-10-06 ### Documentation diff --git a/crates/coordinode-cluster/CHANGELOG.md b/crates/coordinode-cluster/CHANGELOG.md index 9425ccbdd..5f8ce6195 100644 --- a/crates/coordinode-cluster/CHANGELOG.md +++ b/crates/coordinode-cluster/CHANGELOG.md @@ -2,6 +2,12 @@ All notable changes to this crate are documented in this file. +## v0.10.0 - 2026-11-01 + +### Added + +- *(storage)* hold the database to a strict total footprint limit + ## v0.8.0 - 2026-10-23 ### Added diff --git a/crates/coordinode-core/CHANGELOG.md b/crates/coordinode-core/CHANGELOG.md index 469685125..7f338a88f 100644 --- a/crates/coordinode-core/CHANGELOG.md +++ b/crates/coordinode-core/CHANGELOG.md @@ -2,6 +2,55 @@ All notable changes to this crate are documented in this file. +## v0.10.0 - 2026-11-01 + +### Added + +- *(storage)* hold a temporal unique value per instant of valid time +- *(query)* answer AS OF past the retention from temporal history +- *(modality)* read temporal node versions as known at a system time +- *(modality)* assert temporal node versions in their history +- *(storage)* keep node history and write records keyed by their commit +- *(index)* key unique entries by their owner +- *(index)* keep label counts exact across an implication change +- *(schema)* give labels a catalog identity records store +- *(schema)* declare type, implied and auxiliary labels +- *(storage)* collect orphan blobs and return their space +- *(storage)* give blobs owners, a catalog and a guarded lifetime +- *(storage)* hold the database to a strict total footprint limit + +### Fixed + +- *(storage)* report a write of unknown outcome as such +- *(index)* bound held memory in claim restating and the report queue +- *(index)* reserve room only for claims not held yet +- *(index)* keep a claim's charge only on what is kept +- *(index)* charge unique claims and checks for as long as they live +- *(index)* count a unit's derived fan-out before expanding it +- *(index)* bound the fan-out everywhere and type every index refusal +- *(index)* charge an element's encoding room before it grows +- *(index)* refuse keys past the store's limit, bound entry fan-out +- *(index)* charge implication placement memory before taking it +- *(storage)* keep the engine and dump format versions +- *(index)* claim a unique value across the parts of a change +- *(schema)* bind a label's first use through the ordered log +- *(query)* charge exact dedup memory before allocating it + +### Performance + +- *(txn)* restate bound trends by moving the claims +- *(query)* read a node's schemas once per write +- *(query)* hashed exact DISTINCT, grouping and UNION + +### Refactored + +- *(schema)* store canonical labels and judge RETYPE by its result + +### Wip + +- keep only a label change's difference apart in the lookup +- ALTER NODE TYPE SET IMPLIES with per-label lookup generations + ## v0.8.0 - 2026-10-23 ### Added diff --git a/crates/coordinode-embed/CHANGELOG.md b/crates/coordinode-embed/CHANGELOG.md index cefc4267d..1c542fcf1 100644 --- a/crates/coordinode-embed/CHANGELOG.md +++ b/crates/coordinode-embed/CHANGELOG.md @@ -2,6 +2,156 @@ All notable changes to this crate are documented in this file. +## v0.10.0 - 2026-11-01 + +### Added + +- *(storage)* use the io_uring backend by default +- *(wire)* probe idle client and peer connections with keepalive +- *(storage)* hold a temporal unique value per instant of valid time +- *(storage)* bind history to the store's deployment before it lands +- *(query)* answer AS OF past the retention from temporal history +- *(modality)* read temporal node versions as known at a system time +- *(index)* bound the bytes of implication placement and folding +- *(index)* key unique entries by their owner +- *(vector)* follow a change of what a type implies +- *(query)* refuse a RETYPE NODE that would move a node's shard +- *(search)* configure the text index worker's step and retry +- *(index)* configure the pages of an implication change +- *(index)* keep label counts exact across an implication change +- *(index)* answer a text search with its view's interpretation +- *(schema)* change what a type implies through a schema package +- *(index)* fold what a concluded implication change kept apart +- *(index)* keep a B-tree index's moved carriers apart under ALTER IMPLIES +- *(schema)* give labels a catalog identity records store +- *(query)* change a node's type with RETYPE NODE +- *(schema)* declare type, implied and auxiliary labels +- *(cluster)* replace a member whose vote no copy proves +- *(storage)* collect orphan blobs and return their space +- *(storage)* give blobs owners, a catalog and a guarded lifetime +- *(storage)* judge, repair and drop columnar tables as partitions +- *(embed)* physical backup of the whole database +- *(vector)* exact scores and domain errors end to end +- *(storage)* hold the database to a strict total footprint limit + +### Documentation + +- *(cypher)* describe ALTER NODE TYPE SET IMPLIES and test its restart +- *(cluster)* describe a replacement refused by a changed group + +### Fixed + +- *(index)* hold index builds and catalog changes to a memory bound +- *(search)* never score what a text search leaves out +- *(storage)* report a write of unknown outcome as such +- *(embed)* a label's first node is no change for search indexes +- *(query)* count deleted implied labels and allow redundant implications +- *(query)* refuse readers of an index still following a change +- *(query)* activate an implication change once search follows it +- *(query)* reserve a vector index read's memory before allocating it +- *(index)* charge catalog changes to the statement and check skipped fields +- *(index)* walk the catalog by head when publishing or concluding parts +- *(index)* check every field of an integrity record read for its state +- *(index)* bound held memory in claim restating and the report queue +- *(index)* charge unique claims and checks for as long as they live +- *(index)* count a unit's derived fan-out before expanding it +- *(index)* bound the fan-out everywhere and type every index refusal +- *(index)* refuse keys past the store's limit, bound entry fan-out +- *(index)* charge implication placement memory before taking it +- *(storage)* keep the engine and dump format versions +- *(index)* claim a unique value across the parts of a change +- *(index)* fold what a cancelled implication change kept apart +- *(index)* place every changed label and conclude the record read +- *(search)* refuse text reads of an unknown commit, type not-ready +- *(search)* refuse reads of a lagging text reader, own write refusal +- *(index)* bind text settling to one revision and one catalog state +- *(index)* write text documents under the interpretation held +- *(index)* judge a label's carriers by the view's own catalog +- *(index)* bind a text read to the interpretation its index holds +- *(schema)* bind a label's first use through the ordered log +- *(query)* defer only the retyped nodes' index entries in RETYPE +- *(embed)* outwait the commits in flight before re-running a statement +- *(vector)* draw each HNSW level once and finite +- *(raft)* refuse a member without its vote with a typed error +- *(storage)* serve a rebuilt tree's history above its copy's floor +- *(storage)* refuse a rebuild from a damaged checkpoint copy +- *(storage)* rebuild a partition at its original seqnos +- *(storage)* rebuild a table only from provable state +- *(embed)* finish an interrupted table rebuild on open +- *(query)* plan subqueries with the index access paths +- *(query)* keep rows without a vector in a vector ordering +- *(query)* order by variables the projection drops +- *(storage)* capture the journal tail after a checkpoint's trees +- *(query)* subqueries see the outer row; one index search per top-k +- *(query)* keep each edge's orientation in undirected hops +- *(replication)* wait for the leader's address, not pauses +- *(query)* three-valued AND/OR, simple CASE, correlated keys +- *(storage)* refuse a hard limit below the supported minimum + +### Performance + +- *(embed)* propose a first use of a name once, not per writer +- *(storage)* keep a transaction's writes in key order +- *(index)* refresh the integrity view without reading the evidence +- *(query)* build only the node properties a statement reads +- *(bench)* declare the label the label-scan bench adds +- *(bench)* measure label kinds on the write path +- *(query)* look the keys of a correlated index join up in batches +- *(query)* look a correlated index key up once per distinct key + +### Refactored + +- *(schema)* store canonical labels and judge RETYPE by its result + +### Testing + +- *(embed)* run the vanished text index test on Unix only +- *(embed)* import the kill signal on Unix only +- *(embed)* kill crash-test children with SIGKILL, not abort +- *(embed)* give a fold thirty seconds on a slow host +- *(embed)* take the least of a few counts for measuring that allocates nothing +- *(embed)* allow expect in the field dictionary tests +- *(embed)* bench temporal unique admission against the length of history +- *(embed)* temporal unique ownership and its history survive collection +- *(embed)* temporal unique ownership is restored after a kill +- *(embed)* a taker racing a release of a temporal unique value +- *(embed)* every key shape of a temporal unique index is held per instant +- *(embed)* temporal unique ownership under derived maintenance and across a reopen +- *(embed)* an ordinary holder of a shared label holds its value at every instant +- *(embed)* later facts leave what history knew before +- *(embed)* a stale certification executor changes nothing +- *(embed)* catch a change in force before its text index is prepared +- *(index)* count what reporting to an integrity record allocates +- *(index)* count a refused compound unique write by the allocator +- *(index)* size the catalog budget test so only the catalog decides +- *(index)* stop a fold at an exact step +- *(index)* a unique value taken on both sides of a change is held once +- *(index)* a fold interrupted by a close finishes after a reopen +- *(index)* a settle raced by a rebuild keeps the rebuilt documents +- *(embed)* cover expiry, merge, restore and failed declarations for label kinds +- *(embed)* keep an operation's outcome across a replacement +- *(embed)* accept a cascade the capacity scanner ran first +- *(embed)* report a table rebuild the open cannot finish +- *(embed)* refuse an unevaluable query vector in every top-k form +- *(embed)* measure the index top-k with the vector not returned +- *(embed)* measure the correlated join one row per key and as a search +- *(embed)* wait for reports and rebuilds before index checks +- *(embed)* cover the fallbacks of the batched correlated join +- *(embed)* wait for the recorded suspicion before a failing check +- *(embed)* measure a correlated join through a unique index +- *(embed)* count allocations per vector statement +- *(embed)* bench the index-served top-k shape, store beside the build +- *(embed)* measure vector statements end to end +- *(embed)* keep the cascade's data on hot until it moves it +- *(embed)* lower a full group to the supported minimum +- *(embed)* lower the limit below the data, not the transient charge + +### Wip + +- reconcile the label lookup through the implication change +- keep only a label change's difference apart in the lookup +- ALTER NODE TYPE SET IMPLIES with per-label lookup generations + ## v0.9.0 - 2026-10-24 ### Fixed diff --git a/crates/coordinode-migrate/CHANGELOG.md b/crates/coordinode-migrate/CHANGELOG.md index 525f51682..07d9f7712 100644 --- a/crates/coordinode-migrate/CHANGELOG.md +++ b/crates/coordinode-migrate/CHANGELOG.md @@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## v0.10.0 - 2026-11-01 + +### Added + +- *(schema)* give labels a catalog identity records store +- *(operation)* apply each client write once +- *(storage)* store index generations under local installations +- *(migrate)* add the node sizes report module +- *(migrate)* catalog record migrations, check and journal stats +- *(migrate)* offline tool to bring a data directory current + +### Fixed + +- *(storage)* never copy a checkpoint over a file it holds +- *(migrate)* find every marked store, Raft snapshot captures too + +### Performance + +- *(query)* bound property delta chains with whole writes + ## v0.9.0 - 2026-10-24 ### Added diff --git a/crates/coordinode-modality/CHANGELOG.md b/crates/coordinode-modality/CHANGELOG.md index f1e635d46..8657b76a3 100644 --- a/crates/coordinode-modality/CHANGELOG.md +++ b/crates/coordinode-modality/CHANGELOG.md @@ -2,6 +2,63 @@ All notable changes to this crate are documented in this file. +## v0.10.0 - 2026-11-01 + +### Added + +- *(query)* answer AS OF past the retention from temporal history +- *(modality)* read temporal node versions as known at a system time +- *(modality)* assert temporal node versions in their history +- *(index)* bound the bytes of implication placement and folding +- *(index)* key unique entries by their owner +- *(index)* keep label counts exact across an implication change +- *(index)* answer a text search with its view's interpretation +- *(index)* keep a B-tree index's moved carriers apart under ALTER IMPLIES +- *(schema)* give labels a catalog identity records store +- *(storage)* collect orphan blobs and return their space +- *(storage)* give blobs owners, a catalog and a guarded lifetime +- *(vector)* exact scores and domain errors end to end +- *(storage)* hold the database to a strict total footprint limit + +### Fixed + +- *(query)* charge every tuple expansion of index checks and conflicts +- *(query)* reserve a vector index read's memory before allocating it +- *(index)* charge catalog changes to the statement and check skipped fields +- *(index)* walk the catalog by head when publishing or concluding parts +- *(index)* read a check's reason stored as bytes as the record does +- *(index)* check every field of an integrity record read for its state +- *(index)* charge unique claims and checks for as long as they live +- *(index)* bound the fan-out everywhere and type every index refusal +- *(index)* refuse keys past the store's limit, bound entry fan-out +- *(index)* charge implication placement memory before taking it +- *(index)* keep a value's ownership revision while it is held +- *(index)* claim a unique value across the parts of a change +- *(index)* place every changed label and conclude the record read +- *(index)* bind a text read to the interpretation its index holds +- *(index)* reap expired members kept in selection parts +- *(schema)* bind a label's first use through the ordered log + +### Performance + +- *(index)* refresh the integrity view without reading the evidence +- *(index)* record a batch of reports without copying it +- *(index)* keep no per-node or per-page scratch in reconciliation +- *(query)* look the keys of a correlated index join up in batches + +### Testing + +- *(index)* pass over a catalog of unrelated definitions in a small budget +- *(index)* state what the shape agreement test catches +- *(index)* fail the shape agreement test on a variant it lacks +- *(index)* leaving a unique value too long to hold writes nothing +- *(index)* a fold never brings back a posting a writer removed + +### Wip + +- keep only a label change's difference apart in the lookup +- ALTER NODE TYPE SET IMPLIES with per-label lookup generations + ## v0.8.0 - 2026-10-23 ### Added diff --git a/crates/coordinode-query/CHANGELOG.md b/crates/coordinode-query/CHANGELOG.md index a58aa853f..3c456ca21 100644 --- a/crates/coordinode-query/CHANGELOG.md +++ b/crates/coordinode-query/CHANGELOG.md @@ -2,6 +2,110 @@ All notable changes to this crate are documented in this file. +## v0.10.0 - 2026-11-01 + +### Added + +- *(storage)* hold a temporal unique value per instant of valid time +- *(query)* answer AS OF past the retention from temporal history +- *(modality)* read temporal node versions as known at a system time +- *(index)* bound the bytes of implication placement and folding +- *(index)* key unique entries by their owner +- *(vector)* follow a change of what a type implies +- *(query)* refuse a RETYPE NODE that would move a node's shard +- *(index)* configure the pages of an implication change +- *(index)* keep label counts exact across an implication change +- *(index)* answer a text search with its view's interpretation +- *(schema)* change what a type implies through a schema package +- *(index)* fold what a concluded implication change kept apart +- *(index)* keep a B-tree index's moved carriers apart under ALTER IMPLIES +- *(schema)* give labels a catalog identity records store +- *(query)* change a node's type with RETYPE NODE +- *(schema)* declare type, implied and auxiliary labels +- *(storage)* give blobs owners, a catalog and a guarded lifetime +- *(storage)* judge, repair and drop columnar tables as partitions +- *(vector)* exact scores and domain errors end to end +- *(storage)* hold the database to a strict total footprint limit + +### Documentation + +- *(query)* drop the type-keyed index reason from relabel + +### Fixed + +- *(index)* hold index builds and catalog changes to a memory bound +- *(search)* never score what a text search leaves out +- *(storage)* report a write of unknown outcome as such +- *(query)* charge every tuple expansion of index checks and conflicts +- *(query)* count deleted implied labels and allow redundant implications +- *(query)* refuse readers of an index still following a change +- *(query)* activate an implication change once search follows it +- *(query)* reserve a vector index read's memory before allocating it +- *(index)* charge catalog changes to the statement and check skipped fields +- *(index)* walk the catalog by head when publishing or concluding parts +- *(index)* bound held memory in claim restating and the report queue +- *(index)* reserve room only for claims not held yet +- *(index)* keep a claim's charge only on what is kept +- *(index)* charge unique claims and checks for as long as they live +- *(index)* bound the fan-out everywhere and type every index refusal +- *(index)* refuse keys past the store's limit, bound entry fan-out +- *(index)* charge implication placement memory before taking it +- *(index)* claim a unique value across the parts of a change +- *(index)* fold what a cancelled implication change kept apart +- *(index)* read a reconciliation page at one snapshot in every mode +- *(index)* place every changed label and conclude the record read +- *(search)* refuse text reads of an unknown commit, type not-ready +- *(search)* refuse reads of a lagging text reader, own write refusal +- *(index)* bind text interpretations to their installation +- *(index)* bind text settling to one revision and one catalog state +- *(index)* write text documents under the interpretation held +- *(index)* judge a label's carriers by the view's own catalog +- *(index)* bind a text read to the interpretation its index holds +- *(index)* refuse a change until the previous one is folded +- *(index)* reap expired members kept in selection parts +- *(schema)* bind a label's first use through the ordered log +- *(query)* defer only the retyped nodes' index entries in RETYPE +- *(query)* plan subqueries with the index access paths +- *(query)* keep rows without a vector in a vector ordering +- *(query)* order by variables the projection drops +- *(query)* subqueries see the outer row; one index search per top-k +- *(query)* keep each edge's orientation in undirected hops +- *(query)* three-valued AND/OR, simple CASE, correlated keys +- *(query)* charge exact dedup memory before allocating it + +### Performance + +- *(storage)* keep a transaction's writes in key order +- *(index)* refresh the integrity view without reading the evidence +- *(index)* record a batch of reports without copying it +- *(index)* keep no per-node or per-page scratch in reconciliation +- *(query)* build only the node properties a statement reads +- *(query)* read a property column without allocating +- *(query)* read a node's schemas once per write +- *(query)* look the keys of a correlated index join up in batches +- *(query)* look a correlated index key up once per distinct key +- index partition trees by discriminant, share index definitions +- *(query)* hashed exact DISTINCT, grouping and UNION + +### Refactored + +- *(index)* open a reconciliation page by holding what it carries +- *(schema)* store canonical labels and judge RETYPE by its result + +### Testing + +- *(embed)* a stale certification executor changes nothing +- *(index)* measure the report queue's memory apart from its accounting +- *(index)* stop a fold at an exact step +- *(query)* tell a woken snapshot read from a timed-out one by margin +- *(query)* measure the distributed top-k merge + +### Wip + +- reconcile the label lookup through the implication change +- keep only a label change's difference apart in the lookup +- ALTER NODE TYPE SET IMPLIES with per-label lookup generations + ## v0.8.0 - 2026-10-23 ### Added diff --git a/crates/coordinode-raft/CHANGELOG.md b/crates/coordinode-raft/CHANGELOG.md index fda135d51..9ff365d6f 100644 --- a/crates/coordinode-raft/CHANGELOG.md +++ b/crates/coordinode-raft/CHANGELOG.md @@ -2,6 +2,66 @@ All notable changes to this crate are documented in this file. +## v0.10.0 - 2026-11-01 + +### Added + +- *(raft)* measure log syncs and entry applies +- *(wire)* probe idle client and peer connections with keepalive +- *(raft)* carry the history domain with every database image +- *(storage)* bind history to the store's deployment before it lands +- *(storage)* keep node history and write records keyed by their commit +- *(index)* key unique entries by their owner +- *(schema)* give labels a catalog identity records store +- *(storage)* hold the database to a strict total footprint limit + +### Fixed + +- *(raft)* end a member's append stream when it stops +- *(storage)* keep member records from making closing entries due +- *(storage)* stop the log at its first failed write +- *(storage)* never found a new domain over retained history +- *(index)* refuse keys past the store's limit, bound entry fan-out +- *(cluster)* take a replacement's membership only once committed +- *(cluster)* check both members of a replacement in one view +- *(cluster)* fence a replacement on the membership it checked +- *(cluster)* apply each change to a joint config left behind +- *(cluster)* start every membership change from a single config +- *(cluster)* resume a change left in its joint configuration +- *(cluster)* refuse a joiner on another member's store as a join +- *(raft)* bind promises to a member, write copy durably +- *(raft)* keep the purge point and a loss with the vote; replace a member +- *(raft)* refuse a member without its vote with a typed error +- *(raft)* keep a second copy of the member's vote +- *(replication)* wait for the leader's address, not pauses + +### Performance + +- *(raft)* record the committed index off the raft core +- *(raft)* write the log from its sync thread, not the raft core +- *(storage)* leave a journaled tree's flush syncs to a barrier + +### Testing + +- *(raft)* a failed log write stops consensus and the node restarts +- *(raft)* let the refused bound lie above the read one +- *(raft)* finish a conversion cut short at the marker +- *(raft)* count journal syncs for an unchanged vote +- *(raft)* catch an unchanged vote appended to the journal +- *(raft)* resume a replacement on another leader, refuse old votes +- *(raft)* run the lost-answer case around the actual leader + +### Bench + +- *(raft)* observe the copy's footprint inside a write +- *(raft)* wait for a leader that confirms its lease +- *(raft)* give the recovery image a promised term above 1 +- *(raft)* measure recovery, the copy's peak footprint and reads +- *(raft)* trace each commit against the device's I/O +- *(raft)* separate leadership seen from confirmed +- *(raft)* bound each promise cost to its own span +- *(raft)* measure what keeping consensus promises costs + ## v0.9.0 - 2026-10-24 ### Fixed diff --git a/crates/coordinode-replicate/CHANGELOG.md b/crates/coordinode-replicate/CHANGELOG.md index a607d39bc..60578c6ef 100644 --- a/crates/coordinode-replicate/CHANGELOG.md +++ b/crates/coordinode-replicate/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this crate are documented in this file. +## v0.10.0 - 2026-11-01 + +### Added + +- *(wire)* probe idle client and peer connections with keepalive +- *(storage)* hold the database to a strict total footprint limit + ## v0.9.0 - 2026-10-24 ### Testing diff --git a/crates/coordinode-s3/CHANGELOG.md b/crates/coordinode-s3/CHANGELOG.md index f65930452..f5b96fd79 100644 --- a/crates/coordinode-s3/CHANGELOG.md +++ b/crates/coordinode-s3/CHANGELOG.md @@ -2,6 +2,14 @@ All notable changes to this crate are documented in this file. +## v0.10.0 - 2026-11-01 + +### Added + +- *(storage)* use the io_uring backend by default +- *(storage)* collect orphan blobs and return their space +- *(storage)* give blobs owners, a catalog and a guarded lifetime + ## v0.9.0 - 2026-10-24 ### Fixed diff --git a/crates/coordinode-search/CHANGELOG.md b/crates/coordinode-search/CHANGELOG.md index 12484d70d..58868dfc2 100644 --- a/crates/coordinode-search/CHANGELOG.md +++ b/crates/coordinode-search/CHANGELOG.md @@ -2,6 +2,28 @@ All notable changes to this crate are documented in this file. +## v0.10.0 - 2026-11-01 + +### Added + +- *(index)* answer a text search with its view's interpretation +- *(search)* keep both interpretations of a change in one text index +- *(storage)* hold the database to a strict total footprint limit + +### Documentation + +- *(search)* state what settling a scope costs + +### Fixed + +- *(search)* never score what a text search leaves out +- *(search)* refuse text reads of an unknown commit, type not-ready +- *(search)* refuse reads of a lagging text reader, own write refusal +- *(search)* keep a landed text commit when the reader lags +- *(search)* commit the scope epoch with the documents +- *(index)* bind text settling to one revision and one catalog state +- *(index)* bind a text read to the interpretation its index holds + ## v0.8.0 - 2026-10-23 ### Added diff --git a/crates/coordinode-storage/CHANGELOG.md b/crates/coordinode-storage/CHANGELOG.md index 556d84ceb..7ec72ed6d 100644 --- a/crates/coordinode-storage/CHANGELOG.md +++ b/crates/coordinode-storage/CHANGELOG.md @@ -2,6 +2,115 @@ All notable changes to this crate are documented in this file. +## v0.10.0 - 2026-11-01 + +### Added + +- *(storage)* use the io_uring backend by default +- *(storage)* hold a temporal unique value per instant of valid time +- *(storage)* bind history to the store's deployment before it lands +- *(query)* answer AS OF past the retention from temporal history +- *(storage)* keep node history and write records keyed by their commit +- *(index)* bound the bytes of implication placement and folding +- *(index)* key unique entries by their owner +- *(search)* configure the text index worker's step and retry +- *(index)* answer a text search with its view's interpretation +- *(schema)* give labels a catalog identity records store +- *(schema)* declare type, implied and auxiliary labels +- *(storage)* collect orphan blobs and return their space +- *(storage)* give blobs owners, a catalog and a guarded lifetime +- *(storage)* per-table pressure series that go with the table +- *(storage)* judge, repair and drop columnar tables as partitions +- *(storage)* hold the database to a strict total footprint limit + +### Documentation + +- *(storage)* describe the node history partition without a dash +- *(storage)* name a private helper without linking it + +### Fixed + +- *(storage)* admit a write into an empty memtable for its flush +- *(storage)* count a flush allowance per memtable in the debt +- *(storage)* keep member records from making closing entries due +- *(storage)* report a write of unknown outcome as such +- *(storage)* hold a value per instant while its unique index is built +- *(storage)* stop the log at its first failed write +- *(storage)* never found a new domain over retained history +- *(storage)* admit the commit timestamp a stamped key carries +- *(index)* keep a claim's charge only on what is kept +- *(index)* charge unique claims and checks for as long as they live +- *(index)* count a unit's derived fan-out before expanding it +- *(index)* bound the fan-out everywhere and type every index refusal +- *(index)* refuse keys past the store's limit, bound entry fan-out +- *(storage)* map a bound too short for a slot past the whole slot +- *(index)* charge implication placement memory before taking it +- *(storage)* keep the engine and dump format versions +- *(storage)* refuse only a change of what a typed label implies +- *(schema)* bind a label's first use through the ordered log +- *(storage)* decide a schema read from the current state +- *(storage)* save the consensus state below half the space reserve +- *(storage)* name the key a pending-commit conflict is about +- *(storage)* close a dropped table's tree before removing its folder +- *(storage)* admit promise copy writes as recovery work +- *(raft)* bind promises to a member, write copy durably +- *(raft)* keep the purge point and a loss with the vote; replace a member +- *(raft)* keep a second copy of the member's vote +- *(storage)* let blob collection run below the free-space reserve +- *(storage)* flush and capture a table only while it lives +- *(storage)* no table file is made in a folder being dropped +- *(storage)* a second drop of a table drops the same table +- *(storage)* hold a table name until its drop finishes +- *(storage)* serve a rebuilt tree's history above its copy's floor +- *(storage)* open a checkpoint on its clock, never compacted +- *(storage)* refuse a rebuild from a damaged checkpoint copy +- *(storage)* rebuild a partition at its original seqnos +- *(storage)* rebuild a table only from provable state +- *(storage)* roll back a torn manifest tail instead of repairing +- *(storage)* capture the journal tail after a checkpoint's trees +- *(storage)* refuse a hard limit below the supported minimum +- *(storage)* sync a new journal segment's directory + +### Performance + +- *(storage)* keep a transaction's writes in key order +- *(storage)* read a unique value's staged owners by range +- *(txn)* restate bound trends by moving the claims +- *(query)* read a node's schemas once per write +- *(storage)* leave a journaled tree's flush syncs to a barrier +- *(storage)* export a generation's history by its own key range +- *(storage)* bench flush and compaction of a table +- index partition trees by discriminant, share index definitions + +### Refactored + +- *(schema)* store canonical labels and judge RETYPE by its result +- *(storage)* keep the table repair record crate-private + +### Testing + +- *(storage)* use is_multiple_of in the mixed load test +- *(storage)* mixed reads, writes and compactions on the default file system +- *(storage)* a power cut never leaves history without its domain +- *(storage)* name the candidate implication in the admission test +- *(storage)* build the candidate test schema with its own fields +- *(storage)* fail every matching op of a persist +- *(storage)* fail only the persisting partition's files +- *(storage)* wait for the drop to close the tree, not for a sleep +- *(storage)* measure the copy's peak from a steady store +- *(storage)* model clean-stale pages and torn files +- *(storage)* fail each step of a promise copy write +- *(storage)* compare table tree paths absolute, as the tree config does +- *(storage)* compare table tree paths against the endpoints as configured +- *(storage)* hold a slowed table's rows to the write rate +- *(storage)* judge each table into its own verdict and one metrics series +- *(storage)* check the tail-captured segment's bytes on every platform + +### Bench + +- *(storage)* measure statement flushes on a fresh store per series +- *(raft)* separate leadership seen from confirmed + ## v0.8.0 - 2026-10-23 ### Added diff --git a/crates/coordinode-swarm/CHANGELOG.md b/crates/coordinode-swarm/CHANGELOG.md index e457a04d3..bbb8372d9 100644 --- a/crates/coordinode-swarm/CHANGELOG.md +++ b/crates/coordinode-swarm/CHANGELOG.md @@ -2,6 +2,12 @@ All notable changes to this crate are documented in this file. +## v0.10.0 - 2026-11-01 + +### Added + +- *(storage)* hold the database to a strict total footprint limit + ## v0.8.0 - 2026-10-23 ### Added diff --git a/crates/coordinode-test-fixtures/CHANGELOG.md b/crates/coordinode-test-fixtures/CHANGELOG.md index 772913098..0162934c3 100644 --- a/crates/coordinode-test-fixtures/CHANGELOG.md +++ b/crates/coordinode-test-fixtures/CHANGELOG.md @@ -2,6 +2,16 @@ All notable changes to this crate are documented in this file. +## v0.10.0 - 2026-11-01 + +### Added + +- *(wire)* probe idle client and peer connections with keepalive + +### Testing + +- *(embed)* kill crash-test children with SIGKILL, not abort + ## v0.9.0 - 2026-10-24 ### Fixed diff --git a/crates/coordinode-vector/CHANGELOG.md b/crates/coordinode-vector/CHANGELOG.md index d18e83e93..4c78a4eec 100644 --- a/crates/coordinode-vector/CHANGELOG.md +++ b/crates/coordinode-vector/CHANGELOG.md @@ -2,6 +2,34 @@ All notable changes to this crate are documented in this file. +## v0.10.0 - 2026-11-01 + +### Added + +- *(vector)* follow a change of what a type implies +- *(vector)* exact scores and domain errors end to end +- *(vector)* score vectors exactly in binary64 with one reduction +- *(storage)* hold the database to a strict total footprint limit + +### Fixed + +- *(vector)* draw each HNSW level once and finite +- *(vector)* keep every HNSW node reachable when lists fill +- *(vector)* keep cosine exact for every finite vector + +### Performance + +- *(vector)* reduce four AVX2 blocks vertically +- *(vector)* score exactly only candidates that can rank +- *(vector)* no per-evaluation clear of the reduction stack +- *(vector)* SSE2 exact kernels and cached sums of squares + +### Testing + +- *(vector)* choose the exact kernel set for a bench run +- *(vector)* measure the production exhaustive scan, not the unused flat index +- *(vector)* qualify exact vector evaluation before and after + ## v0.8.0 - 2026-10-23 ### Added diff --git a/crates/coordinode-wire/CHANGELOG.md b/crates/coordinode-wire/CHANGELOG.md index ff8b09d39..5348254ec 100644 --- a/crates/coordinode-wire/CHANGELOG.md +++ b/crates/coordinode-wire/CHANGELOG.md @@ -2,6 +2,17 @@ All notable changes to this crate are documented in this file. +## v0.10.0 - 2026-11-01 + +### Added + +- *(wire)* probe idle client and peer connections with keepalive +- *(storage)* hold the database to a strict total footprint limit + +### Testing + +- *(wire)* check the accepting socket's options on windows + ## v0.9.0 - 2026-10-24 ### Fixed From 6111383eaf34f1e01a1b4527a21478207d8cd402 Mon Sep 17 00:00:00 2001 From: "sw-release-bot[bot]" Date: Sun, 1 Nov 2026 21:03:35 +0000 Subject: [PATCH 2/2] chore(examples): require the 0.10 release --- examples/embedded-quickstart/Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/embedded-quickstart/Cargo.toml b/examples/embedded-quickstart/Cargo.toml index 37b94c8a7..e62b9eba2 100644 --- a/examples/embedded-quickstart/Cargo.toml +++ b/examples/embedded-quickstart/Cargo.toml @@ -11,5 +11,5 @@ description = "An application embedding CoordiNode: an on-disk database, paramet [workspace] [dependencies] -coordinode-embed = "0.9" -coordinode-core = "0.9" +coordinode-embed = "0.10" +coordinode-core = "0.10"