From 44bab110406356717af0904a71a78c0338a56c40 Mon Sep 17 00:00:00 2001 From: Patrick Date: Sat, 2 May 2026 18:55:15 -0700 Subject: [PATCH] fix(memory): remove rollover from startup chain + add sentence-transformers dep MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two fixes: 1. Remove _run_memory_check() from trigger startup handler — rollover no longer fires on every drone command. Rollover is now on-demand only (drone @memory rollover) or via the watcher daemon. This eliminates the noisy "Memory - Rollover Execution" banner from every drone invocation. 2. Add sentence-transformers>=2.0 to pyproject.toml [memory] extras — the embedding subprocess was failing because torch/sentence-transformers were missing from the dependency list. chromadb alone is insufficient; the custom embed_subprocess.py requires sentence-transformers directly. Co-Authored-By: Claude Opus 4.6 --- pyproject.toml | 1 + src/aipass/trigger/README.md | 1 - .../trigger/apps/handlers/events/startup.py | 20 --------------- .../trigger/tests/test_startup_handler.py | 25 ------------------- 4 files changed, 1 insertion(+), 46 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index b30638cd..28944819 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,6 +46,7 @@ trinity = [ memory = [ "numpy>=2.0", "chromadb>=1.0", + "sentence-transformers>=2.0", ] seedgo = [] dev = [ diff --git a/src/aipass/trigger/README.md b/src/aipass/trigger/README.md index b16d0ad2..e4dca03f 100644 --- a/src/aipass/trigger/README.md +++ b/src/aipass/trigger/README.md @@ -181,7 +181,6 @@ trigger/ - `aipass.prax` — Logging via `system_logger` - `aipass.cli` — Console output and formatting - `aipass.ai_mail` — `deliver_email_to_branch()` for dispatch emails (lazy import, graceful fallback) -- `aipass.memory` — `run_rollover()` check on startup (lazy import) ### Provides To - All branches — Event bus (`Trigger.fire`, `Trigger.on`, `Trigger.off`) diff --git a/src/aipass/trigger/apps/handlers/events/startup.py b/src/aipass/trigger/apps/handlers/events/startup.py index 51b98d0c..5aedbb73 100644 --- a/src/aipass/trigger/apps/handlers/events/startup.py +++ b/src/aipass/trigger/apps/handlers/events/startup.py @@ -364,23 +364,6 @@ def _run_error_catchup(fire_event: Optional[Callable[..., None]] = None) -> None return -def _run_memory_check() -> None: - """Run memory rollover check if available. - - Uses memory's public modules API to avoid cross-branch handler guard. - Silent failure - handlers cannot use logger or print. - """ - try: - from aipass.memory.apps.modules.rollover import run_rollover - - run_rollover() - except ImportError: - return # Memory not available - except Exception as exc: - _log_warning(f"memory check failed: {exc}") - return - - def handle_startup(**kwargs: Any) -> None: """Run startup checks - replaces Prax logger's hardcoded calls. @@ -390,6 +373,3 @@ def handle_startup(**kwargs: Any) -> None: # Error catch-up (scan for missed errors) fire_event = kwargs.get("fire_event") _run_error_catchup(fire_event) - - # Memory rollover check - _run_memory_check() diff --git a/src/aipass/trigger/tests/test_startup_handler.py b/src/aipass/trigger/tests/test_startup_handler.py index dca67903..fadc3608 100644 --- a/src/aipass/trigger/tests/test_startup_handler.py +++ b/src/aipass/trigger/tests/test_startup_handler.py @@ -57,51 +57,26 @@ class TestHandleStartup: """Passes fire_event kwarg to _run_error_catchup.""" mod = _import_startup() mod._run_error_catchup = MagicMock() - mod._run_memory_check = MagicMock() fire_event = MagicMock() mod.handle_startup(fire_event=fire_event) mod._run_error_catchup.assert_called_once_with(fire_event) # type: ignore[union-attr] - def test_calls_memory_check(self) -> None: - """Invokes _run_memory_check on every startup.""" - mod = _import_startup() - mod._run_error_catchup = MagicMock() - mod._run_memory_check = MagicMock() - - mod.handle_startup() - - mod._run_memory_check.assert_called_once() # type: ignore[union-attr] - def test_passes_none_when_no_fire_event(self) -> None: """Without fire_event kwarg, passes None to error catchup.""" mod = _import_startup() mod._run_error_catchup = MagicMock() - mod._run_memory_check = MagicMock() mod.handle_startup() mod._run_error_catchup.assert_called_once_with(None) # type: ignore[union-attr] - def test_calls_both_helpers_in_order(self) -> None: - """Error catchup runs before memory check.""" - mod = _import_startup() - call_order: list[str] = [] - mod._run_error_catchup = MagicMock(side_effect=lambda *a, **kw: call_order.append("catchup")) - mod._run_memory_check = MagicMock(side_effect=lambda *a, **kw: call_order.append("memory")) - - mod.handle_startup(fire_event=MagicMock()) - - assert call_order == ["catchup", "memory"] - def test_extra_kwargs_do_not_crash(self) -> None: """Arbitrary extra kwargs are silently ignored.""" mod = _import_startup() mod._run_error_catchup = MagicMock() - mod._run_memory_check = MagicMock() mod.handle_startup(fire_event=MagicMock(), extra_arg="ignored", count=42) mod._run_error_catchup.assert_called_once() # type: ignore[union-attr] - mod._run_memory_check.assert_called_once() # type: ignore[union-attr]