From f37d2adb3aefd5d9f21142df327133bb4f4ac513 Mon Sep 17 00:00:00 2001 From: phernandez Date: Sun, 19 Jul 2026 23:32:37 -0500 Subject: [PATCH] refactor(core): delete dead post-seam compatibility shims Three leftovers from the protocol-seam migration were traps for readers with zero production impact: - deps.py: shadowed by the deps/ package, so the module was unreachable dead code (the package __init__ is the live re-export surface) - basic_memory/cloud/: compat re-export package with no production importers here or in basic-memory-cloud main (already migrated to canonical basic_memory.services/index paths) - mcp/async_client.create_client(): deprecated sync path with zero callers; get_client() is the only client entrypoint Drop the cloud-package parity test and the now-moot import-boundary guard along with the package. Part of #1107 Co-Authored-By: Claude Fable 5 Signed-off-by: phernandez --- src/basic_memory/cloud/__init__.py | 46 ------------------- src/basic_memory/cloud/directory_deletes.py | 3 -- .../cloud/note_content_materialization.py | 3 -- src/basic_memory/cloud/note_content_reads.py | 3 -- src/basic_memory/cloud/note_content_writes.py | 3 -- src/basic_memory/cloud/project_deletes.py | 3 -- src/basic_memory/deps.py | 16 ------- src/basic_memory/mcp/async_client.py | 22 --------- tests/cloud/test_cloud_services.py | 9 ---- tests/test_architecture_boundaries.py | 11 ----- 10 files changed, 119 deletions(-) delete mode 100644 src/basic_memory/cloud/__init__.py delete mode 100644 src/basic_memory/cloud/directory_deletes.py delete mode 100644 src/basic_memory/cloud/note_content_materialization.py delete mode 100644 src/basic_memory/cloud/note_content_reads.py delete mode 100644 src/basic_memory/cloud/note_content_writes.py delete mode 100644 src/basic_memory/cloud/project_deletes.py delete mode 100644 src/basic_memory/deps.py diff --git a/src/basic_memory/cloud/__init__.py b/src/basic_memory/cloud/__init__.py deleted file mode 100644 index 1bdc26077..000000000 --- a/src/basic_memory/cloud/__init__.py +++ /dev/null @@ -1,46 +0,0 @@ -"""Shared cloud-runtime service namespace. - -This package collects route/CLI-facing domain services shared by local Basic -Memory and Basic Memory Cloud. Core owns the orchestration; runtimes provide -storage, queue, session, and tenant adapters around these services. -""" - -from basic_memory.cloud.directory_deletes import ( - DirectoryDeleteService, - DirectoryDeleteServiceError, - DirectoryDeleteSessionMaker, - directory_delete_service_error_from_rejection, -) -from basic_memory.cloud.note_content_reads import ( - NoteContentQueryService, -) -from basic_memory.cloud.note_content_materialization import ( - LocalNoteContentMaterializationProvider, -) -from basic_memory.cloud.note_content_writes import ( - NoteContentMutationService, - NoteContentMutationServiceError, - note_content_mutation_error_from_rejection, -) -from basic_memory.cloud.project_deletes import ( - ProjectDeleteAcceptanceError, - ProjectDeleteAcceptanceRequest, - ProjectDeleteAcceptanceService, - ProjectDeleteJobEnqueuer, -) - -__all__ = [ - "DirectoryDeleteService", - "DirectoryDeleteServiceError", - "DirectoryDeleteSessionMaker", - "NoteContentMutationService", - "NoteContentMutationServiceError", - "NoteContentQueryService", - "LocalNoteContentMaterializationProvider", - "ProjectDeleteAcceptanceError", - "ProjectDeleteAcceptanceRequest", - "ProjectDeleteAcceptanceService", - "ProjectDeleteJobEnqueuer", - "directory_delete_service_error_from_rejection", - "note_content_mutation_error_from_rejection", -] diff --git a/src/basic_memory/cloud/directory_deletes.py b/src/basic_memory/cloud/directory_deletes.py deleted file mode 100644 index 31866a3e2..000000000 --- a/src/basic_memory/cloud/directory_deletes.py +++ /dev/null @@ -1,3 +0,0 @@ -"""Compatibility shim; import from ``basic_memory.services.directory_deletes``.""" - -from basic_memory.services.directory_deletes import * # noqa: F403 diff --git a/src/basic_memory/cloud/note_content_materialization.py b/src/basic_memory/cloud/note_content_materialization.py deleted file mode 100644 index fd04698cd..000000000 --- a/src/basic_memory/cloud/note_content_materialization.py +++ /dev/null @@ -1,3 +0,0 @@ -"""Compatibility shim; import from ``basic_memory.index.note_content_materialization``.""" - -from basic_memory.index.note_content_materialization import * # noqa: F403 diff --git a/src/basic_memory/cloud/note_content_reads.py b/src/basic_memory/cloud/note_content_reads.py deleted file mode 100644 index 92383856e..000000000 --- a/src/basic_memory/cloud/note_content_reads.py +++ /dev/null @@ -1,3 +0,0 @@ -"""Compatibility shim; import from ``basic_memory.services.note_content_reads``.""" - -from basic_memory.services.note_content_reads import * # noqa: F403 diff --git a/src/basic_memory/cloud/note_content_writes.py b/src/basic_memory/cloud/note_content_writes.py deleted file mode 100644 index fdb9ebe15..000000000 --- a/src/basic_memory/cloud/note_content_writes.py +++ /dev/null @@ -1,3 +0,0 @@ -"""Compatibility shim; import from ``basic_memory.services.note_content_writes``.""" - -from basic_memory.services.note_content_writes import * # noqa: F403 diff --git a/src/basic_memory/cloud/project_deletes.py b/src/basic_memory/cloud/project_deletes.py deleted file mode 100644 index 6d2dbb7fd..000000000 --- a/src/basic_memory/cloud/project_deletes.py +++ /dev/null @@ -1,3 +0,0 @@ -"""Compatibility shim; import from ``basic_memory.services.project_deletes``.""" - -from basic_memory.services.project_deletes import * # noqa: F403 diff --git a/src/basic_memory/deps.py b/src/basic_memory/deps.py deleted file mode 100644 index f5065ad45..000000000 --- a/src/basic_memory/deps.py +++ /dev/null @@ -1,16 +0,0 @@ -"""Dependency injection functions for basic-memory services. - -DEPRECATED: This module is a backwards-compatibility shim. -Import from basic_memory.deps package submodules instead: -- basic_memory.deps.config for configuration -- basic_memory.deps.db for database/session -- basic_memory.deps.projects for project resolution -- basic_memory.deps.repositories for data access -- basic_memory.deps.services for business logic -- basic_memory.deps.importers for import functionality - -This file will be removed once all callers are migrated. -""" - -# Re-export everything from the deps package for backwards compatibility -from basic_memory.deps import * # noqa: F401, F403 # pragma: no cover diff --git a/src/basic_memory/mcp/async_client.py b/src/basic_memory/mcp/async_client.py index 594f4158e..16facfe7a 100644 --- a/src/basic_memory/mcp/async_client.py +++ b/src/basic_memory/mcp/async_client.py @@ -457,25 +457,3 @@ async def get_client( logger.debug("Default routing - using ASGI client for local Basic Memory API") async with _asgi_client(timeout) as client: yield client - - -def create_client() -> AsyncClient: - """Create an HTTP client based on explicit routing flags. - - DEPRECATED: Use get_client() context manager instead for proper resource management. - """ - timeout = _build_timeout() - - if _force_local_mode() or not _force_cloud_mode(): - logger.info("Creating ASGI client for local Basic Memory API") - # Deprecated sync path: create_client() cannot await the local ASGI - # pre-initialization used by get_client(), so callers that need proper - # resource setup should use the async context manager instead. - from basic_memory.api.app import app as fastapi_app - - return _build_asgi_client(fastapi_app, timeout) - - logger.info("Creating HTTP client for cloud proxy (legacy create_client path)") - config = ConfigManager().config - proxy_base_url = f"{config.cloud_host}/proxy" - return AsyncClient(base_url=proxy_base_url, timeout=timeout) diff --git a/tests/cloud/test_cloud_services.py b/tests/cloud/test_cloud_services.py index 7063093bf..6782a4736 100644 --- a/tests/cloud/test_cloud_services.py +++ b/tests/cloud/test_cloud_services.py @@ -2,7 +2,6 @@ from contextlib import asynccontextmanager from datetime import UTC, datetime -from importlib import import_module from types import SimpleNamespace from typing import Any, cast from uuid import uuid4 @@ -50,14 +49,6 @@ ) -def test_cloud_package_is_the_canonical_shared_cloud_surface() -> None: - cloud = import_module("basic_memory.cloud") - - assert cloud.NoteContentQueryService is NoteContentQueryService - assert cloud.NoteContentMutationService is NoteContentMutationService - assert cloud.DirectoryDeleteService is DirectoryDeleteService - - class FakeSession: async def __aenter__(self) -> FakeSession: return self diff --git a/tests/test_architecture_boundaries.py b/tests/test_architecture_boundaries.py index a14328a53..846baa801 100644 --- a/tests/test_architecture_boundaries.py +++ b/tests/test_architecture_boundaries.py @@ -18,17 +18,6 @@ def _imported_modules(path: Path) -> set[str]: return modules -def test_core_production_modules_do_not_import_cloud_compatibility_package() -> None: - violations = { - path.relative_to(PACKAGE_ROOT).as_posix(): sorted( - module for module in _imported_modules(path) if module.startswith("basic_memory.cloud") - ) - for path in PACKAGE_ROOT.rglob("*.py") - if "cloud" not in path.relative_to(PACKAGE_ROOT).parts - } - assert not {path: modules for path, modules in violations.items() if modules} - - def test_repositories_do_not_import_indexing_workflows() -> None: repository_root = PACKAGE_ROOT / "repository" violations = {