Skip to content

Commit e1df23d

Browse files
phernandezclaude
andcommitted
docs: add v0.19.0 release notes
Covers all 66 commits since v0.18.0: semantic vector search, schema system, project-prefixed permalinks, per-project cloud routing, FastMCP 3.0 upgrade, and 16 bug fixes. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: phernandez <paul@basicmachines.co>
1 parent 0462a7d commit e1df23d

1 file changed

Lines changed: 252 additions & 0 deletions

File tree

docs/releases/v0.19.0.md

Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
# v0.19.0 Release Notes
2+
3+
## Overview
4+
5+
v0.19.0 is a major release that introduces semantic vector search, a schema validation system,
6+
project-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
8+
stability fixes across both SQLite and Postgres backends.
9+
10+
---
11+
12+
## Major Features
13+
14+
### Semantic Vector Search
15+
16+
Full vector and hybrid search for SQLite (via sqlite-vec) and Postgres (via pgvector).
17+
18+
- **Hybrid search mode** combines full-text search (FTS) with vector similarity for best results
19+
- **Default search mode** is now `hybrid` when semantic search is enabled, `text` when disabled
20+
- Embedding providers: FastEmbed (local, default) or OpenAI API
21+
- Configurable similarity threshold via `semantic_min_similarity` (default 0.55)
22+
- Per-query `min_similarity` override on `search_notes` tool
23+
- Auto-backfill: existing entities get embeddings generated on first startup
24+
- Backend-specific distance-to-similarity conversion (cosine for SQLite, inner product for Postgres)
25+
- FTS fallback: if semantic dependencies are missing, search gracefully degrades to text-only
26+
27+
**Configuration:**
28+
```json
29+
{
30+
"semantic_search_enabled": true,
31+
"semantic_embedding_provider": "fastembed",
32+
"semantic_embedding_model": "bge-small-en-v1.5",
33+
"semantic_min_similarity": 0.55
34+
}
35+
```
36+
37+
**Usage:**
38+
```
39+
search_notes("machine learning concepts", search_type="hybrid")
40+
search_notes("similar to my notes on coffee", search_type="vector")
41+
search_notes("exact phrase match", search_type="text")
42+
search_notes("broad search", min_similarity=0.3) # lower threshold for more results
43+
```
44+
45+
### Schema System
46+
47+
Validate note structure against user-defined schemas with frontmatter-based rules.
48+
49+
- Define schemas as YAML in note frontmatter with field types, required fields, and constraints
50+
- Frontmatter validation during sync — malformed notes get clear error messages
51+
- Schema inference from existing notes to bootstrap schemas from your content
52+
- Schema diff to compare two schemas and see changes
53+
- Available via MCP tools and CLI
54+
55+
### Project-Prefixed Permalinks
56+
57+
Permalinks now include the project name for unambiguous cross-project references.
58+
59+
- Memory URLs like `memory://project-name/folder/note` route to the correct project
60+
- Existing non-prefixed permalinks continue to work (backwards compatible)
61+
- Controlled by `permalinks_include_project` config (default: true)
62+
- `build_context` and `search_notes` auto-detect project from URL prefix
63+
64+
### Per-Project Cloud Routing
65+
66+
Individual projects can be routed through the cloud while others stay local.
67+
68+
- Set a project to cloud mode: `bm project set-cloud research`
69+
- Revert to local: `bm project set-local research`
70+
- Uses API key authentication: `bm cloud set-key bmc_abc123...`
71+
- MCP tools automatically route based on each project's mode
72+
- Local MCP server (`bm mcp`) still uses local routing for all projects by default
73+
- `--local` and `--cloud` CLI flags override per-command
74+
75+
### Workspace Selection
76+
77+
Cloud projects can target specific workspaces for multi-tenant environments.
78+
79+
- `workspace` parameter on MCP tools for explicit workspace targeting
80+
- CLI workspace-aware project listing with `bm project list`
81+
- Spinner feedback while fetching cloud projects
82+
83+
---
84+
85+
## New Tools and Capabilities
86+
87+
### JSON Output Mode
88+
89+
All MCP tools now support `output_format="json"` for machine-readable responses.
90+
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
94+
95+
### `bm watch` Command
96+
97+
New CLI command for real-time file watching and sync.
98+
99+
```bash
100+
bm watch # Watch default project
101+
bm watch --project research # Watch specific project
102+
```
103+
104+
### Structured Metadata Search
105+
106+
New `search_by_metadata` tool for searching by frontmatter fields.
107+
108+
```
109+
search_by_metadata({"status": "in-progress"})
110+
search_by_metadata({"tags": ["security", "oauth"]})
111+
search_by_metadata({"priority": {"$in": ["high", "critical"]}})
112+
search_by_metadata({"schema.confidence": {"$gt": 0.7}})
113+
```
114+
115+
### `tag:` Search Shorthand
116+
117+
Search by tag using convenient shorthand syntax.
118+
119+
```
120+
search_notes("tag:security")
121+
search_notes("tag:coffee AND tag:brewing")
122+
```
123+
124+
### Entity User Tracking
125+
126+
Entities now track `created_by` and `last_updated_by` fields for attribution.
127+
128+
### Matched Chunk Text in Search
129+
130+
Search results now include `matched_chunk` field showing the specific text that matched.
131+
132+
---
133+
134+
## Architecture Changes
135+
136+
### FastMCP 3.0 Upgrade
137+
138+
Upgraded from FastMCP 2.12.3 to 3.0.1.
139+
140+
- Tool annotations (`readOnlyHint`, `openWorldHint`) for better client integration
141+
- Improved MCP protocol compliance
142+
- Better error handling and context management
143+
144+
### Prompts Call MCP Tools Directly
145+
146+
MCP prompts (`search`, `continue_conversation`) now call MCP tools directly instead of
147+
going through API endpoints. This fixes empty results in discovery mode and ensures prompts
148+
use the same resolution logic as tools (including LinkResolver fallback).
149+
150+
### build_context LinkResolver Fallback
151+
152+
`build_context` now falls back to LinkResolver when an exact permalink lookup returns empty.
153+
This uses the same 7-strategy resolution pipeline as `read_note`, so callers no longer get
154+
empty results for valid note identifiers that don't match exact permalinks.
155+
156+
### Sync Handles Semantic Dependency Errors Gracefully
157+
158+
When sqlite-vec or another embedding provider is unavailable, `sync_file` now catches
159+
`SemanticDependenciesMissingError` separately. The entity is created and FTS-indexed
160+
successfully — only vector embeddings are skipped, with a clear warning:
161+
162+
```
163+
WARNING: Semantic search dependencies missing — vector embeddings skipped for path=note.md.
164+
Run 'bm reindex --embeddings' after resolving the dependency issue.
165+
```
166+
167+
### Unified Project Path
168+
169+
Cloud projects with bisync now store the local filesystem path in `path` (not the Docker
170+
container path). Config migration automatically promotes `local_sync_path``path` for
171+
existing configs.
172+
173+
---
174+
175+
## CLI Improvements
176+
177+
### Status and Doctor Default to Local Routing
178+
179+
`bm status` and `bm doctor` now default to local routing since they scan the local filesystem.
180+
Previously, cloud-mode projects would route these commands to the cloud API, which returned
181+
Docker-internal paths that don't exist locally.
182+
183+
### `--format json` for CLI Tool Commands
184+
185+
All `bm tool` subcommands support `--format json` for machine-readable output, enabling
186+
integration with scripts and plugins.
187+
188+
### Cloud Promo and Analytics
189+
190+
- Cloud promo panel shown on first run or version bump with OSS discount code
191+
- Anonymous usage telemetry via Umami Cloud (promo/login funnel events only)
192+
- Opt out with `BASIC_MEMORY_NO_PROMOS=1`
193+
- No PII, no file contents, no per-command tracking
194+
- See [Telemetry](https://github.com/basicmachines-co/basic-memory#telemetry) in README
195+
196+
---
197+
198+
## Bug Fixes
199+
200+
- **#582**: build_context returns empty results on valid note identifiers
201+
- **#575**: Remove hardcoded "main" default from default_project
202+
- **#595**: recent_activity dedup and pagination across MCP tools
203+
- **#593**: Backend-specific distance-to-similarity conversion
204+
- **#592**: Strip NUL bytes from content before PostgreSQL search indexing
205+
- **#562**: Use VIRTUAL instead of STORED columns in SQLite migration
206+
- **#558**: Add X-Tigris-Consistent headers to all rclone commands
207+
- **#541**: Handle EntityCreationError as conflict
208+
- **#536**: Stabilize metadata filters on Postgres
209+
- **#533**: Fix recent_activity prompt defaults
210+
- **#530**: Prevent spurious `metadata: {}` in frontmatter output
211+
- **#601**: Return matched chunk text in search results
212+
- Parameterize SQL queries in search repository type filters
213+
- Double-default display in project list
214+
- `ensure_frontmatter_on_sync` default changed to `True`
215+
- Status/doctor commands fail with cloud-mode projects (Docker path error)
216+
- Prompts return "0 projects" in discovery mode
217+
218+
---
219+
220+
## Internal / Developer
221+
222+
- **#598**: Upgrade FastMCP 2.12.3 → 3.0.1 with tool annotations
223+
- **#594**: Add `ty` as supplemental type checker
224+
- **#538**: Add fast feedback loop tooling (`just fast-check`, `just doctor`, `just testmon`)
225+
- **#600**: Rename `entity_type` to `note_type` for consistency
226+
- **#596**: Fix CLI runtime defects and audit regressions
227+
- CLI refactoring and workspace-aware cloud project listing
228+
- Split and speed up PR test matrix in CI
229+
230+
---
231+
232+
## Configuration Changes
233+
234+
| Setting | Old Default | New Default | Notes |
235+
|---------|-------------|-------------|-------|
236+
| `semantic_search_enabled` | `false` | `true` | Semantic search on by default |
237+
| `ensure_frontmatter_on_sync` | `false` | `true` | Frontmatter added during sync |
238+
| `permalinks_include_project` | `false` | `true` | Project prefix in permalinks |
239+
240+
---
241+
242+
## Upgrade Notes
243+
244+
- **Semantic search dependencies** are now included by default. If sqlite-vec fails to load,
245+
search gracefully falls back to FTS. Run `bm reindex --embeddings` to generate embeddings
246+
for existing content.
247+
- **Project-prefixed permalinks** are enabled by default. Existing notes keep their current
248+
permalinks until modified. Set `permalinks_include_project: false` to disable.
249+
- **Frontmatter on sync** is now enabled by default. Files without frontmatter will have it
250+
added on next sync. Set `ensure_frontmatter_on_sync: false` to preserve old behavior.
251+
- **Config migration** runs automatically for cloud projects with bisync — `local_sync_path`
252+
is promoted to `path` so filesystem operations work correctly.

0 commit comments

Comments
 (0)