Skip to content

Commit f41a749

Browse files
committed
adding release notes
1 parent e1154ac commit f41a749

1 file changed

Lines changed: 42 additions & 9 deletions

File tree

CHANGELOG.md

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,45 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
- See `docs/latest-untagged.md` for the untagged `latest` image changelog.
1111

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.
28+
- **Repository path compatibility**: Fixed checked-in path issues affecting cross-platform repository handling (including Windows-unfriendly path forms).
29+
- **Auto-TLP + memory decay settings persistence**: Fixed settings-save behavior for these configuration paths.
30+
31+
### Tests
32+
33+
- Expanded deterministic coverage in Fabric/Cypher/Server execution paths, including planner/executor/transaction and `USE`/composite branches.
34+
- Added regression coverage for OpenAI truncation handling and fulltext index behavior.
35+
- Added CLI log-compaction tests and additional resolver/config test coverage.
36+
37+
### Documentation
38+
39+
- Updated operations docs index and configuration references.
40+
- Added/updated planning docs for UI enhancements and topology guidance.
41+
42+
### Technical Details
43+
44+
- **Range covered**: `v1.0.17..main`
45+
- **Commits in range**: 12 (non-merge)
46+
- **Repository delta**: 41 files changed, +9,255 / -392 lines
47+
- **Non-test surface changed**: 9 files
48+
- **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
1351

1452
### Added
1553

@@ -231,9 +269,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
231269
- **Write Forwarding**: Follower nodes in replication deployments automatically forward write requests to the leader, removing the need for clients to route writes explicitly.
232270
- **macOS File Browser View**: New file browser tab in the macOS menu bar app for browsing and tagging indexed files directly from the UI.
233271
- **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`.
237275
- **ANTLR Parser: REDUCE and FOREACH**: ANTLR parser now supports `REDUCE()` accumulator expressions and `FOREACH` iteration clauses.
238276
- **Orphan Detection Improvement**: Stale vector index entries for deleted nodes are identified and removed during index rebuild, preventing phantom candidates in search results.
239277
- **`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:
720758
### Fixed
721759

722760
- **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-
724761
- Atomic counters (`nodeCount`, `edgeCount`) in `BadgerEngine` became out of sync during delete+recreate cycles
725762
- Root cause: Nodes created via implicit transactions (MERGE, CREATE) bypass `CreateNode()` and use `UpdateNode()`
726763
- `UpdateNode()` checks if key exists to determine `wasInsert=true/false`, only incrementing counter when `wasInsert=true`
@@ -777,7 +814,6 @@ Docs:
777814
### Fixed
778815

779816
- **Critical: Node/Edge Count Tracking During DETACH DELETE** - Edge counts became incorrect (negative, double-counted, or stale) during `DETACH DELETE` operations
780-
781817
- `deleteEdgesWithPrefix()` was deleting edges but not returning count of edges actually deleted
782818
- `deleteNodeInTxn()` wasn't tracking edges deleted along with the node
783819
- `BulkDeleteNodes()` only decremented node count, not edge count for cascade-deleted edges
@@ -789,15 +825,13 @@ Docs:
789825
- **Impact**: `/admin/stats` and Cypher `count()` queries now remain accurate during bulk delete operations
790826

791827
- **Critical: ORDER BY Ignored for Relationship Patterns** - `ORDER BY`, `SKIP`, and `LIMIT` clauses were completely ignored for queries with relationship patterns
792-
793828
- Queries like `MATCH (p:Person)-[:WORKS_IN]->(a:Area) RETURN p.name ORDER BY p.name` returned unordered results
794829
- `executeMatchWithRelationships()` was returning immediately without applying post-processing clauses
795830
- Fixed by capturing result, applying ORDER BY/SKIP/LIMIT, then returning
796831
- Affects all queries with relationship traversal: `(a)-[:TYPE]->(b)`, `(a)<-[:TYPE]-(b)`, chained patterns
797832
- **Impact**: Fixes data integrity issues where clients relied on sorted results
798833

799834
- **Critical: Cartesian Product MATCH Returns Zero Rows** - Comma-separated node patterns returned empty results instead of cartesian product
800-
801835
- `MATCH (p:Person), (a:Area) RETURN p.name, a.code` returned 0 rows (should return N×M combinations)
802836
- `executeMatch()` only parsed first pattern, ignoring subsequent comma-separated patterns
803837
- Fixed by detecting multiple patterns via `splitNodePatterns()` and routing to new `executeCartesianProductMatch()`
@@ -806,7 +840,6 @@ Docs:
806840
- **Impact**: Critical for Northwind-style bulk insert patterns like `MATCH (s), (c) CREATE (p)-[:REL]->(c)`
807841

808842
- **Critical: Cartesian Product CREATE Only Creates One Relationship** - `MATCH` with multiple patterns followed by `CREATE` only created relationships for first match
809-
810843
- `MATCH (p:Person), (a:Area) CREATE (p)-[:WORKS_IN]->(a)` created 1 relationship (should create 3 for 3 persons × 1 area)
811844
- `executeMatchCreateBlock()` was collecting only first matching node per pattern variable
812845
- Fixed by collecting ALL matching nodes and iterating through cartesian product combinations

0 commit comments

Comments
 (0)