From c7d97decd6ae8470740b9bd501eb537677edd7c6 Mon Sep 17 00:00:00 2001 From: phernandez Date: Sat, 28 Feb 2026 13:53:29 -0600 Subject: [PATCH] docs: update v0.19.0 release notes with recent commits Add write_note overwrite guard (#632) to new capabilities, 8 bug fixes (#631, #630, #30, #31, #28, plus schema_validate/Post/frontmatter fixes), and write_note idempotency breaking change to upgrade notes. Bump commit count from 80+ to 90+. Co-Authored-By: Claude Opus 4.6 Signed-off-by: phernandez --- docs/releases/v0.19.0.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/releases/v0.19.0.md b/docs/releases/v0.19.0.md index 7cb2c076..27246b60 100644 --- a/docs/releases/v0.19.0.md +++ b/docs/releases/v0.19.0.md @@ -4,7 +4,7 @@ v0.19.0 is a major release that introduces semantic vector search, a schema validation system, project-prefixed permalinks, per-project cloud routing, and a significant upgrade to FastMCP 3.0. -It includes 80+ commits since v0.18.0 spanning new features, architectural improvements, and +It includes 90+ commits since v0.18.0 spanning new features, architectural improvements, and stability fixes across both SQLite and Postgres backends. --- @@ -138,6 +138,13 @@ Search results now surface more relevant context: - `TOP_CHUNKS_PER_RESULT` increased from 3 to 5, catching answers deeper in large notes (~2700 → ~4500 chars) - `CONTENT_DISPLAY_LIMIT` doubled from 2000 to 4000 chars for results without matched chunks +### `write_note` Overwrite Guard (#632) + +`write_note` is now non-idempotent by default. If a note already exists, the tool returns an +error instead of silently overwriting. Pass `overwrite=True` to replace, or use `edit_note` +for incremental updates. Config option `write_note_overwrite_default` restores the old upsert +behavior. + --- ## Architecture Changes @@ -242,6 +249,14 @@ making all major CLI commands scriptable for CI pipelines and automation. - **#606**: Accept `null` for `expected_replacements` in `edit_note` - **#579, #607**: Guard against closed streams in promo panel and missing vector tables on shutdown - **#609**: FTS-only hybrid results missing `matched_chunk_text`; content limits too conservative +- **#631**: `build_context` related_results schema validation failure — replaced fragile `_slim_context()` stripping with Pydantic `exclude=True` field config +- **#630**: Skip workspace resolution when client factory is active — prevents 401 errors in cloud MCP server mode +- **#30**: `tag:` prefix query fails with hybrid search — moved tag prefix parsing to MCP tool level so it works with all search modes +- **#31**: `search_notes` returns cluttered observation/relation-level results — now defaults to entity-level results +- **#28**: `schema_infer` and `schema_diff` return raw Pydantic models as "undefined" in LLM output — added markdown formatters +- Fix `schema_validate` identifier resolution (now uses LinkResolver) and text rendering (markdown formatter) +- Fix `Post(**metadata)` crash when frontmatter contains `content` or `handler` keys +- Fix list-valued frontmatter fields (`title`, `type`) crashing on `.strip()` — now coerced to strings - Cap sqlite-vec knn `k` parameter at 4096 to prevent backend errors - Parameterize SQL queries in search repository type filters - Double-default display in project list @@ -297,3 +312,6 @@ making all major CLI commands scriptable for CI pipelines and automation. added on next sync. Set `ensure_frontmatter_on_sync: false` to preserve old behavior. - **Config migration** runs automatically for cloud projects with bisync — `local_sync_path` is promoted to `path` so filesystem operations work correctly. +- **`write_note` is no longer idempotent** — calls to `write_note` for existing notes now + return an error unless `overwrite=True` is passed. Use `edit_note` for incremental changes, + or set `write_note_overwrite_default: true` in config to restore the old behavior.