You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+42-9Lines changed: 42 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,7 +9,45 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
10
10
- See `docs/latest-untagged.md` for the untagged `latest` image changelog.
11
11
12
-
## [1.0.17-preview] - 2026-03-14
12
+
## [1.0.18] - 2026-03-16
13
+
14
+
### Added
15
+
16
+
-**Canonical environment variable reference**: Added and expanded the operations environment-variable inventory with runtime-referenced `NORNICDB_*` keys, defaults, and usage notes in `docs/operations/environment-variables.md`.
17
+
-**Operations/user documentation additions**: Added Infinigraph topology user guide and linked operations docs/navigation updates.
18
+
19
+
### Changed
20
+
21
+
-**STDIO log growth controls**: Added automatic stdout/stderr compaction limits and scheduling controls in `cmd/nornicdb` with defaults tuned for hourly compaction and KB-based sizing.
22
+
-**Config/docs alignment**: Updated operations configuration docs and resolver coverage to better align documented behavior with runtime config resolution.
23
+
-**README/community metadata refresh**: Updated release badges and repository metadata links.
24
+
25
+
### Fixed
26
+
27
+
-**UTF-8 truncation correctness**: Fixed OpenAI Heimdall truncation behavior to avoid returning invalid UTF-8 when truncating near rune boundaries.
-**Primary focus areas**: env-var documentation, log lifecycle controls, Fabric/Cypher deterministic test expansion, truncation correctness, and release/readme metadata refresh.
49
+
50
+
## [1.0.17] - 2026-03-14
13
51
14
52
### Added
15
53
@@ -231,9 +269,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
231
269
-**Write Forwarding**: Follower nodes in replication deployments automatically forward write requests to the leader, removing the need for clients to route writes explicitly.
232
270
-**macOS File Browser View**: New file browser tab in the macOS menu bar app for browsing and tagging indexed files directly from the UI.
233
271
-**macOS Folder-Level Tag Inheritance**: Tags applied to a folder node propagate automatically as labels to all descendant file nodes.
234
-
-**BM25 Lexical Index Persistence***(experimental, gated by `NORNICDB_PERSIST_SEARCH_INDEXES`)*: BM25 index is saved to disk alongside the HNSW and vector indexes to eliminate rebuild time on restart.
235
-
-**VectorFileStore***(experimental)*: File-backed append-only vector storage keeps only an id→offset map in RAM, reducing in-process memory for large embedding corpora. Only the id→offset map (~80 bytes/vector) lives in RAM; all 4 KB vectors are paged from disk on demand.
236
-
-**HNSW & IVF-HNSW Index Persistence***(experimental)*: Debounced, non-blocking background saves of both HNSW and IVF-HNSW indexes. Configurable via `NORNICDB_SEARCH_INDEX_PERSIST_DELAY_SEC`.
272
+
-**BM25 Lexical Index Persistence**_(experimental, gated by `NORNICDB_PERSIST_SEARCH_INDEXES`)_: BM25 index is saved to disk alongside the HNSW and vector indexes to eliminate rebuild time on restart.
273
+
-**VectorFileStore**_(experimental)_: File-backed append-only vector storage keeps only an id→offset map in RAM, reducing in-process memory for large embedding corpora. Only the id→offset map (~80 bytes/vector) lives in RAM; all 4 KB vectors are paged from disk on demand.
274
+
-**HNSW & IVF-HNSW Index Persistence**_(experimental)_: Debounced, non-blocking background saves of both HNSW and IVF-HNSW indexes. Configurable via `NORNICDB_SEARCH_INDEX_PERSIST_DELAY_SEC`.
237
275
-**ANTLR Parser: REDUCE and FOREACH**: ANTLR parser now supports `REDUCE()` accumulator expressions and `FOREACH` iteration clauses.
238
276
-**Orphan Detection Improvement**: Stale vector index entries for deleted nodes are identified and removed during index rebuild, preventing phantom candidates in search results.
239
277
-**`scripts/seed_and_search.py`**: End-to-end benchmark script for seeding a corpus and measuring search latency at scale.
@@ -720,7 +758,6 @@ Docs:
720
758
### Fixed
721
759
722
760
-**Critical: Node/Edge Count Returns 0 After Delete+Recreate Cycles** - `MATCH (n) RETURN count(n)` returned 0 even when nodes existed in the database
723
-
724
761
- Atomic counters (`nodeCount`, `edgeCount`) in `BadgerEngine` became out of sync during delete+recreate cycles
725
762
- Root cause: Nodes created via implicit transactions (MERGE, CREATE) bypass `CreateNode()` and use `UpdateNode()`
726
763
-`UpdateNode()` checks if key exists to determine `wasInsert=true/false`, only incrementing counter when `wasInsert=true`
@@ -777,7 +814,6 @@ Docs:
777
814
### Fixed
778
815
779
816
-**Critical: Node/Edge Count Tracking During DETACH DELETE** - Edge counts became incorrect (negative, double-counted, or stale) during `DETACH DELETE` operations
780
-
781
817
-`deleteEdgesWithPrefix()` was deleting edges but not returning count of edges actually deleted
782
818
-`deleteNodeInTxn()` wasn't tracking edges deleted along with the node
783
819
-`BulkDeleteNodes()` only decremented node count, not edge count for cascade-deleted edges
@@ -789,15 +825,13 @@ Docs:
789
825
-**Impact**: `/admin/stats` and Cypher `count()` queries now remain accurate during bulk delete operations
790
826
791
827
-**Critical: ORDER BY Ignored for Relationship Patterns** - `ORDER BY`, `SKIP`, and `LIMIT` clauses were completely ignored for queries with relationship patterns
792
-
793
828
- Queries like `MATCH (p:Person)-[:WORKS_IN]->(a:Area) RETURN p.name ORDER BY p.name` returned unordered results
794
829
-`executeMatchWithRelationships()` was returning immediately without applying post-processing clauses
795
830
- Fixed by capturing result, applying ORDER BY/SKIP/LIMIT, then returning
796
831
- Affects all queries with relationship traversal: `(a)-[:TYPE]->(b)`, `(a)<-[:TYPE]-(b)`, chained patterns
797
832
-**Impact**: Fixes data integrity issues where clients relied on sorted results
798
833
799
834
-**Critical: Cartesian Product MATCH Returns Zero Rows** - Comma-separated node patterns returned empty results instead of cartesian product
-`executeMatch()` only parsed first pattern, ignoring subsequent comma-separated patterns
803
837
- Fixed by detecting multiple patterns via `splitNodePatterns()` and routing to new `executeCartesianProductMatch()`
@@ -806,7 +840,6 @@ Docs:
806
840
-**Impact**: Critical for Northwind-style bulk insert patterns like `MATCH (s), (c) CREATE (p)-[:REL]->(c)`
807
841
808
842
-**Critical: Cartesian Product CREATE Only Creates One Relationship** - `MATCH` with multiple patterns followed by `CREATE` only created relationships for first match
809
-
810
843
-`MATCH (p:Person), (a:Area) CREATE (p)-[:WORKS_IN]->(a)` created 1 relationship (should create 3 for 3 persons × 1 area)
811
844
-`executeMatchCreateBlock()` was collecting only first matching node per pattern variable
812
845
- Fixed by collecting ALL matching nodes and iterating through cartesian product combinations
0 commit comments