phernandez
c50d97e548
fix(sync): instrument single markdown indexing
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-16 18:04:17 -05:00
Drew Cain
e2e65575d6
fix(core): honor BASIC_MEMORY_CONFIG_DIR across remaining call sites ( #744 )
...
Signed-off-by: Drew Cain <groksrc@gmail.com >
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-15 22:55:25 -05:00
Drew Cain
bf9a6b4a75
fix(core): resolve FastEmbed cache under data dir instead of /tmp ( #743 )
...
Signed-off-by: Drew Cain <groksrc@gmail.com >
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-15 22:55:00 -05:00
Paul Hernandez
474100efef
ci(core): reduce duplicate CI and normalize Windows assertions ( #749 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-15 22:53:33 -05:00
Paul Hernandez
b3d5448355
fix(sync): preserve canonical markdown in single-file sync ( #746 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-15 20:04:28 -05:00
Paul Hernandez
4e53bb83fd
refactor(core): simplify note write flow ( #739 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-15 17:56:27 -05:00
phernandez
8f2b25f0e0
test(core): stabilize postgres fixtures
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-13 14:25:26 -05:00
Paul Hernandez
052545b661
chore(core): make ty the default typechecker ( #736 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-13 10:34:01 -05:00
Paul Hernandez
a872947e03
fix(cli): show cloud index freshness in project info ( #734 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-10 09:22:35 -05:00
Paul Hernandez
093c94fea5
fix(core): clean up delete vectors and cloud sync ( #733 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-09 21:23:45 -05:00
Paul Hernandez
7945c1e2f7
perf(core): speed up vector sync and tune fastembed defaults ( #731 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-09 00:20:12 -05:00
Paul Hernandez
540da418b3
perf(sync): batch file indexing in core ( #726 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-08 01:21:49 -05:00
Paul Hernandez
3e40cb9657
fix(core): remove runtime ALTER TABLE from vector init ( #728 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-08 00:39:37 -05:00
Paul Hernandez
8c81d3ce17
perf(core): reduce postgres vector sync work ( #723 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-07 19:00:19 -05:00
Drew Cain
b35d594ef0
fix(core): preserve external_id during entity upsert on re-index ( #724 )
...
Signed-off-by: Drew Cain <groksrc@gmail.com >
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-07 10:26:10 -05:00
phernandez
e982900084
fix(core): strip null bytes from markdown content before database insert
...
PostgreSQL rejects null bytes (0x00) in text columns, causing
CharacterNotInRepertoireError when syncing files like Claude agent
definitions that contain embedded nulls. SQLite silently accepts them,
so this only surfaces in cloud environments.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-06 23:14:40 -05:00
Drew Cain
b3403e96b3
fix: add workspace routing to cloud upload and API client ( #704 )
...
Signed-off-by: Drew Cain <groksrc@gmail.com >
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
Co-authored-by: phernandez <paul@basicmachines.co >
2026-04-06 18:18:40 -05:00
Paul Hernandez
fe04a0b2a2
fix(mcp): pass workspace parameter through client factory ( #722 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-06 16:57:37 -05:00
jope-bm
86ad639890
fix(cli): show display_name instead of UUID for private projects in CLI ( #718 )
...
Signed-off-by: Joe P <joe@basicmemory.com >
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-06 10:14:46 -06:00
Paul Hernandez
88c8f18200
feat(core): add note_content tenant schema primitive ( #719 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-04 22:06:37 -05:00
Drew Cain
367fcaac50
perf: eliminate redundant DB queries in upsert_entity_from_markdown ( #714 )
...
Signed-off-by: Drew Cain <groksrc@gmail.com >
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
Co-authored-by: phernandez <paul@basicmachines.co >
2026-04-04 12:40:27 -05:00
Paul Hernandez
69808b23ca
perf(core): reuse written note content after writes ( #717 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-04 00:16:22 -05:00
Paul Hernandez
6f207c20c0
test(api): add recent activity hydration regression coverage ( #716 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-03 17:30:44 -05:00
Paul Hernandez
cff31c5797
feat(cli): support cloud project visibility on add ( #715 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-03 17:30:09 -05:00
Paul Hernandez
e6b98a15c7
fix(cli): propagate cloud workspace routing and incremental sync ( #712 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-03 14:25:02 -05:00
Drew Cain
733c4f7514
fix: eliminate N+1 query in search hydrate_results ( #713 )
...
Signed-off-by: Drew Cain <groksrc@gmail.com >
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-03 12:54:24 -05:00
Paul Hernandez
cfa70004be
fix: concurrent delete race conditions in delete_entity ( #702 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-30 19:57:30 -05:00
phernandez
7696fca826
fix: restore MCP telemetry compatibility and outcomes
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-03-28 15:31:13 -05:00
phernandez
98a2a3cbaf
Unify MCP telemetry spans across routers and services
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-03-28 14:42:18 -05:00
phernandez
01cbad1dbe
Allow long relation_type values in responses
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-03-28 09:56:22 -05:00
phernandez
a4e0422926
perf fixes
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-03-27 22:12:44 -05:00
Paul Hernandez
d1320f671e
fix: (cloud) CLI cloud commands now use API key when configured ( #698 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-26 22:56:45 -05:00
Paul Hernandez
4791e19685
feat: add Logfire phased instrumentation ( #692 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-24 20:39:42 -05:00
Paul Hernandez
36848410a1
feat(core): add default_search_type config setting ( #676 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-17 22:19:53 -05:00
jope-bm
a77b51a28e
fix(core): allow double-dot filenames while still blocking path traversal ( #673 )
...
Signed-off-by: Joe P <joe@basicmemory.com >
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-16 07:47:49 -06:00
Paul Hernandez
1a6a65571e
fix(mcp): add project detection from memory:// URLs in edit_note and delete_note ( #668 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 19:14:22 -05:00
Paul Hernandez
c8b00449d2
fix(core): exclude stale entity rows from embedding coverage stats ( #675 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 18:45:36 -05:00
Paul Hernandez
013864ebf0
fix(cli): use resolved project path in doctor command ( #667 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 18:43:23 -05:00
Drew Cain
7c96a0777d
fix(cli): handle brew outdated exit code 1 as outdated, not error
...
Signed-off-by: Drew Cain <groksrc@gmail.com >
2026-03-10 23:13:54 -05:00
Drew Cain
db60942267
fix(core): invalidate config cache when file is modified by another process ( #662 )
...
Signed-off-by: Drew Cain <groksrc@gmail.com >
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-10 23:05:55 -05:00
Drew Cain
7bfac158df
fix(cli): project list MCP column shows transport type instead of DB presence ( #661 )
...
Signed-off-by: Drew Cain <groksrc@gmail.com >
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-10 23:05:48 -05:00
Paul Hernandez
a94a717b1b
feat(cli): add default-on auto-update system and bm update command ( #643 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Signed-off-by: Drew Cain <groksrc@users.noreply.github.com >
Co-authored-by: Drew Cain <groksrc@users.noreply.github.com >
2026-03-10 22:06:33 -05:00
Paul Hernandez
a5c9e77f16
fix: coerce string params to list/dict in MCP tools ( #657 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-09 22:19:07 -05:00
Paul Hernandez
30a89357cb
fix(core): handle SQLite and Windows semantic regressions ( #655 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-03-09 22:18:17 -05:00
Paul Hernandez
9809b469c6
fix: enforce strict entity resolution in destructive MCP tools ( #650 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 15:56:07 -05:00
Paul Hernandez
ad3f2650d9
feat: add insert_before_section and insert_after_section edit operations ( #648 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 10:54:10 -05:00
phernandez
af71cf4896
fix(test): clear search_vector_chunks before embedding backfill test
...
Test was polluted by other tests leaving rows in search_vector_chunks,
causing _needs_semantic_embedding_backfill to return False.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
Signed-off-by: phernandez <paul@basicmachines.co >
2026-03-07 13:54:58 -06:00
phernandez
e846ae85d8
fix: semantic embeddings not generated on fresh DB or upgrade
...
The previous backfill trigger relied on Alembic revision tracking, but
alembic_version only stores the head revision — intermediate revisions
(like the backfill trigger) are invisible after a multi-step upgrade or
fresh DB creation.
Three changes fix this:
1. Replace Alembic revision check with a simple "entities exist but
embeddings are empty" check that works regardless of migration path
2. Generate embeddings during sync — after FTS indexing, batch-embed all
synced entities at the end of the sync operation
3. Add background backfill at MCP startup for the upgrade path (entities
already exist, no embeddings) without blocking server readiness
Also adds clear startup logging for semantic embedding status so issues
are easy to spot in the logs.
📋 Covers: fresh DB, upgrade from pre-embedding version, db reset,
interrupted backfill
Signed-off-by: Pedro Hernandez <pedro@basicmachines.co >
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
Signed-off-by: phernandez <paul@basicmachines.co >
2026-03-07 13:23:39 -06:00
phernandez
63e4bcdf1d
fix: clarify search_notes parameter naming and fix note_types case sensitivity
...
- Add Annotated descriptions to note_types and entity_types parameters so
LLMs can distinguish frontmatter type filtering from knowledge graph item
type filtering (search.py, ui_sdk.py)
- Lowercase note_types values at filter time so "Chapter" matches stored
"chapter"
- Fix misleading entity_types references in schema.py guidance strings
(should be note_types)
- Add permalink pattern documentation note about full path matching
- Add test for note_types case-insensitive lowercasing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
Signed-off-by: phernandez <paul@basicmachines.co >
2026-03-05 15:08:52 -06:00
phernandez
f23dd0474b
fix(test): patch API fallback in project_context tests for Postgres
...
In Postgres test mode, stale dependency_overrides on the module-level
FastAPI app allow _resolve_default_project_from_api() to query a live
database and return 'test-project' even when the test sets
default_project=None. Monkeypatch the async fallback in the three
affected tests to isolate config-based resolution from API leakage.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
Signed-off-by: phernandez <paul@basicmachines.co >
2026-03-04 15:34:35 -06:00