44
55v0.19.0 is a major release that introduces semantic vector search, a schema validation system,
66project-prefixed permalinks, per-project cloud routing, and a significant upgrade to FastMCP 3.0.
7- It includes 66 commits since v0.18.0 spanning new features, architectural improvements, and
7+ It includes 80+ commits since v0.18.0 spanning new features, architectural improvements, and
88stability fixes across both SQLite and Postgres backends.
99
1010---
@@ -16,13 +16,15 @@ stability fixes across both SQLite and Postgres backends.
1616Full vector and hybrid search for SQLite (via sqlite-vec) and Postgres (via pgvector).
1717
1818- ** Hybrid search mode** combines full-text search (FTS) with vector similarity for best results
19+ - ** Score-based fusion** replaces RRF for hybrid ranking — ` max(vec, fts) + 0.3 * min(vec, fts) ` preserves dominant signals and rewards dual-source agreement (#577 )
1920- ** Default search mode** is now ` hybrid ` when semantic search is enabled, ` text ` when disabled
2021- Embedding providers: FastEmbed (local, default) or OpenAI API
2122- Configurable similarity threshold via ` semantic_min_similarity ` (default 0.55)
2223- Per-query ` min_similarity ` override on ` search_notes ` tool
2324- Auto-backfill: existing entities get embeddings generated on first startup
2425- Backend-specific distance-to-similarity conversion (cosine for SQLite, inner product for Postgres)
2526- FTS fallback: if semantic dependencies are missing, search gracefully degrades to text-only
27+ - sqlite-vec knn ` k ` parameter capped at 4096 to prevent backend errors
2628
2729** Configuration:**
2830``` json
@@ -84,18 +86,19 @@ Cloud projects can target specific workspaces for multi-tenant environments.
8486
8587## New Tools and Capabilities
8688
87- ### JSON Output Mode
89+ ### Dashboard ( ` bm project info ` )
8890
89- All MCP tools now support ` output_format="json" ` for machine-readable responses.
91+ ` bm project info ` now displays an htop-inspired compact dashboard with:
9092
91- - Default remains ` "text" ` for human-readable output (no breaking changes)
92- - ` build_context ` defaults to ` "json" ` with slimmed payloads (redundant fields stripped)
93- - CLI tool commands support ` --format json ` flag
93+ - Horizontal bar charts for note types (top 5)
94+ - Embedding coverage bar with Unicode block characters
95+ - Colored status dots for at-a-glance health
96+ - ` EmbeddingStatus ` schema and ` get_embedding_status() ` service method for programmatic access
9497
95- ### Structured Metadata Search
98+ ### Unified Metadata Search
9699
97- ` search_notes ` now supports filter-only searches — ` query ` is optional, so you can search
98- purely by frontmatter metadata without passing an empty string .
100+ ` search_by_metadata ` has been merged into ` search_notes ` — one tool for all searches.
101+ ` query ` is now optional, so you can search purely by frontmatter metadata .
99102
100103```
101104search_notes(metadata_filters={"status": "in-progress"})
@@ -106,6 +109,14 @@ search_notes(tags=["security"]) # convenience shorthand
106109search_notes(status="draft") # convenience shorthand
107110```
108111
112+ ### JSON Output Mode
113+
114+ All MCP tools now support ` output_format="json" ` for machine-readable responses.
115+
116+ - Default remains ` "text" ` for human-readable output (no breaking changes)
117+ - ` build_context ` defaults to ` "json" ` with slimmed payloads (redundant fields stripped)
118+ - CLI tool commands support ` --format json ` flag
119+
109120### ` tag: ` Search Shorthand
110121
111122Search by tag using convenient shorthand syntax.
@@ -119,14 +130,25 @@ search_notes("tag:coffee AND tag:brewing")
119130
120131Entities now track ` created_by ` and ` last_updated_by ` fields for attribution.
121132
122- ### Matched Chunk Text in Search
133+ ### Improved Search Result Content ( # 609 )
123134
124- Search results now include ` matched_chunk ` field showing the specific text that matched.
135+ Search results now surface more relevant context:
136+
137+ - ` matched_chunk_text ` populated for FTS-only hybrid results (no more fallback to truncated content)
138+ - ` TOP_CHUNKS_PER_RESULT ` increased from 3 to 5, catching answers deeper in large notes (~ 2700 → ~ 4500 chars)
139+ - ` CONTENT_DISPLAY_LIMIT ` doubled from 2000 to 4000 chars for results without matched chunks
125140
126141---
127142
128143## Architecture Changes
129144
145+ ### Score-Based Hybrid Fusion (#577 )
146+
147+ RRF (Reciprocal Rank Fusion) compressed all fused scores to ~ 0.016, destroying ranking
148+ differentiation. The new formula ` max(vec, fts) + FUSION_BONUS * min(vec, fts) ` preserves
149+ dominant signals and rewards dual-source agreement. Zero-score results now produce zero
150+ fused score instead of receiving a 0.1 weight floor.
151+
130152### FastMCP 3.0 Upgrade
131153
132154Upgraded from FastMCP 2.12.3 to 3.0.1.
@@ -204,6 +226,7 @@ making all major CLI commands scriptable for CI pipelines and automation.
204226
205227## Bug Fixes
206228
229+ - ** #577 ** : RRF fusion compressed all hybrid scores to ~ 0.016, destroying ranking differentiation
207230- ** #582 ** : build_context returns empty results on valid note identifiers
208231- ** #575 ** : Remove hardcoded "main" default from default_project
209232- ** #595 ** : recent_activity dedup and pagination across MCP tools
@@ -216,6 +239,10 @@ making all major CLI commands scriptable for CI pipelines and automation.
216239- ** #533 ** : Fix recent_activity prompt defaults
217240- ** #530 ** : Prevent spurious ` metadata: {} ` in frontmatter output
218241- ** #601 ** : Return matched chunk text in search results
242+ - ** #606 ** : Accept ` null ` for ` expected_replacements ` in ` edit_note `
243+ - ** #579 , #607 ** : Guard against closed streams in promo panel and missing vector tables on shutdown
244+ - ** #609 ** : FTS-only hybrid results missing ` matched_chunk_text ` ; content limits too conservative
245+ - Cap sqlite-vec knn ` k ` parameter at 4096 to prevent backend errors
219246- Parameterize SQL queries in search repository type filters
220247- Double-default display in project list
221248- ` ensure_frontmatter_on_sync ` default changed to ` True `
@@ -224,6 +251,13 @@ making all major CLI commands scriptable for CI pipelines and automation.
224251
225252---
226253
254+ ## Security
255+
256+ - Upgrade ` cryptography ` for CVE advisory
257+ - Upgrade ` python-multipart ` for security advisory
258+
259+ ---
260+
227261## Internal / Developer
228262
229263- ** #598 ** : Upgrade FastMCP 2.12.3 → 3.0.1 with tool annotations
@@ -233,6 +267,8 @@ making all major CLI commands scriptable for CI pipelines and automation.
233267- ** #596 ** : Fix CLI runtime defects and audit regressions
234268- CLI refactoring and workspace-aware cloud project listing
235269- Split and speed up PR test matrix in CI
270+ - Fix CI: collect coverage from test jobs instead of re-running all tests
271+ - Create ` search_vector_chunks ` in test fixtures for Postgres compatibility
236272
237273---
238274
@@ -251,6 +287,10 @@ making all major CLI commands scriptable for CI pipelines and automation.
251287- ** Semantic search dependencies** are now included by default. If sqlite-vec fails to load,
252288 search gracefully falls back to FTS. Run ` bm reindex --embeddings ` to generate embeddings
253289 for existing content.
290+ - ** Hybrid search scoring** has changed from RRF to score-based fusion. Search result ordering
291+ may differ — results should be more accurate with better score differentiation.
292+ - ** ` search_by_metadata ` ** is removed as a standalone tool. Use ` search_notes ` with
293+ ` metadata_filters ` instead (same parameters, same behavior).
254294- ** Project-prefixed permalinks** are enabled by default. Existing notes keep their current
255295 permalinks until modified. Set ` permalinks_include_project: false ` to disable.
256296- ** Frontmatter on sync** is now enabled by default. Files without frontmatter will have it
0 commit comments