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
+14Lines changed: 14 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,20 @@ All notable changes to this project are documented here.
4
4
5
5
---
6
6
7
+
## [2.0.0] — 2026-04-13
8
+
9
+
### Added
10
+
11
+
**v2.0 — Semantic explainability + model provenance**
12
+
13
+
-**`ExplainMatch { query, result_uri, top_k, chunk_lines, model }`** — explain *why*`result_uri` ranked as a strong semantic match. Chunks `result_uri`'s source into `chunk_lines`-line windows, embeds each in one batch call, cosine-scores each against the query embedding (cached for URI queries; embedded on the fly for text queries), and returns the top-`top_k` chunks with `(start_line, end_line, chunk_text, score)`. Turns "this file is relevant" into "these specific lines are relevant." Not permitted inside `BatchQuery` (requires HTTP). Returns `ExplainMatchResult { chunks: Vec<ExplanationChunk>, query_model }`.
14
+
-**Model provenance** — every `set_file_embedding` and `set_symbol_embedding` now records the model name that produced the vector. The name is supplied by the `EmbeddingBatch` handler from `embed_texts`'s return value, so it reflects the model actually used (not just what was configured). `QueryFileStatus` now returns `embedding_model: Option<String>`. `QueryIndexStatus` now returns `mixed_models: bool` and `models_in_index: Vec<String>` — clients can warn users when a model upgrade left the index with mixed-model vectors, making cosine scores unreliable across the boundary.
-**MCP updates**: `lip_file_status` response now includes `embedding_model`; `lip_index_status` response now includes `mixed_models` flag and `models_in_index` list with a `⚠ MIXED MODELS` warning in text output.
|`lip_prune_deleted`| Remove index entries for files no longer on disk (v1.8) |
237
237
|`lip_get_centroid`| Server-side embedding centroid of a file set (v1.9) |
238
238
|`lip_stale_embeddings`| Files whose embedding is older than their current mtime (v1.9) |
239
+
|`lip_explain_match`| Why a result matched: top-scoring chunks of `result_uri` against a query (v2.0) |
239
240
240
241
**Recommended agent workflow before modifying code:**
241
242
1.`lip_workspace_symbols` — find URIs for all symbols you plan to touch
@@ -377,7 +378,7 @@ Requires Rust 1.78+. No system `protoc` required.
377
378
378
379
## Status
379
380
380
-
v1.9 — Connective tissue: `filter` glob + `min_score` threshold on all nearest-neighbour calls, `GetCentroid` (server-side mean embedding, no raw vectors shipped), `QueryStaleEmbeddings` (mtime vs indexed-at freshness probe). v1.8: `FindBoundaries`, `SemanticDiff`, `QueryNearestInStore` (cross-repo federation), `QueryNoveltyScore`, `ExtractTerminology`, `PruneDeleted`. v1.7: 6 semantic retrieval primitives. v1.6: `ReindexFiles`, `Similarity`, `QueryExpansion`, `Cluster`, `ExportEmbeddings`. Wire format is JSON; FlatBuffers IPC is planned for v2.0 (see roadmap).
381
+
v2.0 — `ExplainMatch` (chunk-level explanation: which lines in a result file drove the match), model provenance (`FileStatus` exposes the embedding model per file; `IndexStatus` warns when the index contains mixed-model vectors). v1.9: `filter` glob + `min_score` on all NN calls, `GetCentroid`, `QueryStaleEmbeddings`. v1.8: `FindBoundaries`, `SemanticDiff`, `QueryNearestInStore` (cross-repo federation), `QueryNoveltyScore`, `ExtractTerminology`, `PruneDeleted`. v1.7: 6 semantic retrieval primitives. v1.6: `ReindexFiles`, `Similarity`, `QueryExpansion`, `Cluster`, `ExportEmbeddings`. Wire format is JSON.
0 commit comments