Skip to content

Commit 3d74ab4

Browse files
phernandezclaude
andauthored
docs(core): cover post-entry merges in the v0.23.0 changelog (#1289)
Signed-off-by: phernandez <paul@basicmachines.co> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent ae6d712 commit 3d74ab4

1 file changed

Lines changed: 76 additions & 6 deletions

File tree

CHANGELOG.md

Lines changed: 76 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,15 @@ Milvus adapter, and a batch of embedding-correctness fixes; the indexing and
1010
persistence path is rebuilt around generation-versioned, compare-and-swap
1111
writes so concurrent multi-agent workloads can no longer deadlock or lose
1212
observations and relations. Day-to-day operation gets a real front door with
13-
`bm config`, Rich `bm tool` output, a diagnostics tool, and an honest
14-
reindex; `bm hook` brings harness lifecycle capture into the package; and
15-
cloud adds `bm cloud share`, `bm cloud prune`, and an optional Redis read
16-
cache. Five database migrations run automatically on first start, including
17-
a one-time repair that dedupes duplicate observation rows and purges their
18-
stale full-text search entries.
13+
`bm config`, Rich `bm tool` output, a diagnostics tool, an honest reindex,
14+
and a retrieval inspector — `bm inspect chunks` shows a note exactly as the
15+
index sees it and `bm inspect query` traces how a search ranked its results;
16+
`bm hook` brings harness lifecycle capture into the package; and cloud adds
17+
`bm cloud share`, `bm cloud prune`, an optional Redis read cache, and Team
18+
workspace `bm cloud push`/`pull` over permissioned WebDAV. Five database
19+
migrations run automatically on first start, including a one-time repair
20+
that dedupes duplicate observation rows and purges their stale full-text
21+
search entries.
1922

2023
### Breaking Changes
2124

@@ -73,6 +76,16 @@ stale full-text search entries.
7376
`api_key` for OpenAI-compatible and self-hosted servers (**#1005**), and
7477
literal document/query prefixes support prefix-sensitive asymmetric
7578
models (**#1044**, **#1008**).
79+
- **#1249 / #1250**: New retrieval inspector (**#1155**). `bm inspect
80+
chunks <note>` shows a note exactly as the index sees it — its search
81+
rows, the vector chunks each row produced, and per-chunk
82+
ready/pending/stale/orphaned status — separating chunking problems from
83+
freshness problems in one command. `bm inspect query "<query>"` captures
84+
an opt-in execution trace from the same search call that returns the
85+
results: FTS and vector candidates, fusion, filtering, reranking, and the
86+
final page window, with stable JSON output and `--show-misses` for
87+
rejected candidates. Ordinary search behavior and responses are
88+
unchanged.
7689
- **#1088**: New `bm config` command group: `list` (effective values with
7790
env overrides marked), `get`, `set` (validated through the config model),
7891
and `unset` (**#991**).
@@ -129,9 +142,20 @@ stale full-text search entries.
129142
- **#1061**: New `bm cloud prune` removes `.bmignore`d files from the cloud
130143
on demand (**#1032**; see Breaking Changes for the one-way sync behavior
131144
change).
145+
- **#1263**: Team-workspace `bm cloud push`/`pull` run over the service's
146+
permissioned WebDAV surface instead of tenant-wide storage credentials,
147+
so any member can sync the projects they have access to — previously only
148+
workspace owners could provision the required credentials and every other
149+
member got a 403 (**#1262**). Same flags and semantics: `--on-conflict`
150+
still defaults to `fail`, and transfers stay additive — nothing is ever
151+
deleted. Requires the updated cloud server, already deployed in
152+
production; the Personal rclone path is untouched.
132153
- **#1168 / #1172**: Optional Redis read caching accelerates standalone MCP
133154
reads via the `basic-memory[redis]` extra (`redis_url`,
134155
`redis_max_connections`) (**#980**).
156+
- **#1255**: Semantic note reads make the minimum number of API requests —
157+
exact-ID reads skip resolve and resource calls entirely — and ordinary
158+
read-cache entries live 300 seconds instead of 60.
135159
- **#1062 / #1074**: Cloud project deletion errors are surfaced, with an
136160
optional notes purge and a visible deletion job (**#1033**, **#1034**).
137161
- **#1145**: First-connect MCP onboarding: server instructions, empty-state
@@ -141,6 +165,10 @@ stale full-text search entries.
141165
- **#1075**: `move_note` returns the previous accepted path (**#1072**).
142166
- **#1040 / #1101 / #1103**: `external_id` is exposed in `list_directory`,
143167
`recent_activity`, search results, and `search_notes` markdown output.
168+
- **#1268**: `list_directory` accepts a `sort` parameter (`title_asc`,
169+
`title_desc`, `updated_asc`, `updated_desc`) with deterministic
170+
folders-first ordering applied before pagination (**#1267**); omitting it
171+
keeps the existing filename order.
144172
- **#1031 / #1036 / #1037**: MCP tool annotations are directory-compliant,
145173
destructive hints are explicit, and `edit_note` exposes its operation
146174
enum.
@@ -153,9 +181,17 @@ stale full-text search entries.
153181
(**#1187**, **#1199**, **#1209**).
154182
- A one-time migration dedupes historical duplicate observation rows and
155183
purges their orphaned full-text search entries (companion to **#1228**).
184+
- **#1247**: Incremental `bm reindex --search` purges stale search-index
185+
rows whose backing entity, observation, or relation is gone, so DB-only
186+
search divergence on unchanged files converges without a `--full` rebuild
187+
(**#1226**; the last loose end of the **#1214** repair).
156188
- **#1152 / #1160**: Moves record a durable vacate marker, so a
157189
byte-identical copy at the old path indexes as a new note instead of
158190
being skipped as a lingering move source.
191+
- **#1258**: A note accepted while a project scan is in flight can no
192+
longer be deleted as "externally removed" — destructive project-index
193+
deletes re-verify the database lineage and the path's current absence
194+
from storage at apply time (**#1256**).
159195
- **#1016**: Direct on-disk edits picked up by the file watcher are now
160196
vector-embedded, so externally edited notes no longer go missing from
161197
semantic search until a reindex (closed by the vector-sync overhaul,
@@ -165,6 +201,12 @@ stale full-text search entries.
165201
- **#1071**: SQLite full-text search covers complete note content —
166202
previously content beyond ~6000 characters was invisible (**#1065**) —
167203
and CJK terms work in the relaxed FTS fallback (**#1022**).
204+
- **#1269**: Full-text query relaxation counts non-Latin tokens, so
205+
Cyrillic, Greek, Hebrew, Arabic, and other non-Latin queries relax to an
206+
OR retry instead of silently degrading hybrid search to vector-only
207+
ranking, and combining marks stay inside their word so Devanagari and
208+
Thai terms are not shredded into fragments (extends the CJK-only fix from
209+
**#1022**).
168210
- **#1069**: Unknown semantic/hybrid result totals are explicit in
169211
structured search responses (**#1068**).
170212
- **#1190**: `bm reindex --embeddings` warns when the project has no synced
@@ -175,18 +217,34 @@ stale full-text search entries.
175217
returning the wrong note (**#1148**), and project-scoped entity
176218
resolution is separated from cross-project wikilink resolution
177219
(**#1192**, **#1170**).
220+
- **#1272**: Root-level wikilinks written as filename stems resolve via the
221+
`.md` file-path fallback, and a forgiving underscore/hyphen/case alias
222+
resolves links in directly edited vaults — tried only after every exact
223+
identity, and failing closed when two files collide on the same alias
224+
(**#1253**).
178225
- **#1189**: Note-type filters are case-canonicalized, so `Person` and
179226
`person` match the same population (**#1180**).
180227
- **#1081**: `write_note` rejects filename-convention twins (kebab-case vs
181228
Title Case) instead of creating duplicate notes (**#1077**).
182229
- **#1073**: `edit_note` with a `memory://` URL routes to the target
183230
project instead of creating phantom notes (**#1066**), and scoped
184231
`memory://` URL paths are preserved (**#1092**).
232+
- **#1285**: Glob-filtered directory listings traverse subdirectories
233+
again: `file_name_glob` filters results instead of accidentally pruning
234+
recursion, so `*.md` with depth 2 finds files inside subdirectories.
185235
- **#1188**: Sync preserves malformed frontmatter instead of prepending a
186236
second frontmatter block that shadows `name`/`description` (**#1171**).
187237
- **#1239**: Timestamp-prefixed transcript lines and checkbox markers
188238
(`[x]`, `[/]`, `[>]`, `[?]`) no longer mint junk observation categories
189239
(**#1219**, **#1241**).
240+
- **#1271**: Transcript timestamp ranges like `[24:33.098 - 24:41.260]` no
241+
longer mint junk observation categories either — the remaining
242+
range-shaped case from **#1239** (**#1270**).
243+
- **#1291**: Prose bullets no longer mint typed relations: a sentence like
244+
`- Added [[Target]] to the roster` filed a relation *type* called `Added`
245+
and silently dropped the rest of the line, including any further links in
246+
it. An explicit relation now ends at its target or its `(context)`;
247+
anything else keeps every wikilink as a plain `links_to` edge (**#1260**).
190248
- **#1060**: `schema_validate` with no arguments validates all
191249
schema-covered types instead of type "unknown" (**#1013**), and invalid
192250
schema-validation modes are rejected instead of silently degrading to
@@ -196,6 +254,13 @@ stale full-text search entries.
196254
- **#1010**: `bm project list` shows configured cloud-mode projects even
197255
when uncredentialed (**#1003**), and deleting the default project
198256
auto-reassigns the default instead of refusing (**#1139**).
257+
- **#1273**: Re-selecting the project that is already the default no longer
258+
clears the default flag — a state that broke project discovery and every
259+
project-scoped MCP tool until a default was set again.
260+
- **#1290**: ChatGPT import no longer crashes on conversations missing
261+
`create_time` — timestamps fall back to `update_time`, then the earliest
262+
message time, so the whole archive imports (**#1276**); undecodable
263+
import uploads return a 400 with the parse error instead of a 500.
199264
- **#1058 / #1094**: `bm doctor` never prints a blank failure message, and
200265
migrations adapt to existing event loops (**#1027**).
201266
- **#1080**: Loading config no longer recreates an empty `~/basic-memory`
@@ -210,6 +275,11 @@ stale full-text search entries.
210275
- **#1059 / #1179**: Hermes: `bm mcp` child processes no longer leak
211276
(**#1017**), and bm subprocesses no longer inherit Hermes's Python
212277
environment (**#1093**).
278+
- **#1274**: Hermes: commands and skills register through Hermes's own
279+
registration APIs instead of private PluginManager writes, preserving the
280+
lifecycle ownership that cleans them up on provider unload (**#1257**);
281+
the slash-command monkeypatch docs are split by Hermes version so modern
282+
installs skip the legacy collector workaround (**#1278**).
213283

214284
### Maintenance
215285

0 commit comments

Comments
 (0)