refactor: drop the vestigial bot_bottle_root/host_db_path re-exports (#352)

paths is the single home now, so stop re-exporting the path helpers from
supervise: remove host_db_path from supervise's imports + __all__ (it was
re-export-only) and drop bot_bottle_root from __all__ (kept as an import,
still used by audit_dir). supervise_types was already clean. Repoint the
last readers (test_supervise imports host_db_path from paths;
test_supervise_edge calls paths.bot_bottle_root) and refresh the doc
mentions. No supervise.bot_bottle_root / supervise.host_db_path references
remain.

Behavior-preserving: full unit suite unchanged (only the pre-existing
/bin/sleep sidecar-init errors).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WBMWTEtQdJ4W5UrWuLHCck
This commit is contained in:
2026-07-13 14:30:13 -04:00
parent 590f3cebd7
commit 1175e17d4e
6 changed files with 11 additions and 13 deletions
+2 -4
View File
@@ -74,9 +74,9 @@ except ImportError:
try: try:
from .paths import bot_bottle_root, host_db_path from .paths import bot_bottle_root
except ImportError: # flat imports inside the sidecar bundle except ImportError: # flat imports inside the sidecar bundle
from paths import bot_bottle_root, host_db_path # type: ignore[import-not-found,no-redef] # pylint: disable=import-error,no-name-in-module from paths import bot_bottle_root # type: ignore[import-not-found,no-redef] # pylint: disable=import-error,no-name-in-module
SUPERVISE_HOSTNAME = "supervise" SUPERVISE_HOSTNAME = "supervise"
@@ -289,8 +289,6 @@ __all__ = [
"archive_proposal", "archive_proposal",
"audit_dir", "audit_dir",
"audit_log_path", "audit_log_path",
"bot_bottle_root",
"host_db_path",
"list_pending_proposals", "list_pending_proposals",
"list_all_pending_proposals", "list_all_pending_proposals",
"read_audit_entries", "read_audit_entries",
+3 -3
View File
@@ -2,7 +2,7 @@
Isolates ``HOME`` to a throwaway directory for the entire unit suite so Isolates ``HOME`` to a throwaway directory for the entire unit suite so
no test ever reads or writes the real ``~/.bot-bottle`` (state, queue, no test ever reads or writes the real ``~/.bot-bottle`` (state, queue,
and audit dirs all derive from ``supervise.bot_bottle_root()`` → and audit dirs all derive from ``paths.bot_bottle_root()`` →
``Path.home()``). Without this, a test that takes a ``flock`` on the ``Path.home()``). Without this, a test that takes a ``flock`` on the
real audit log can **block indefinitely** when a live bottle's supervise real audit log can **block indefinitely** when a live bottle's supervise
sidecar holds that lock — observed as a hung ``coverage run`` at 0% CPU — sidecar holds that lock — observed as a hung ``coverage run`` at 0% CPU —
@@ -49,8 +49,8 @@ def use_bottle_root(root: Path) -> Callable[[], None]:
``BOT_BOTTLE_ROOT`` — the supported override. Returns a callable that ``BOT_BOTTLE_ROOT`` — the supported override. Returns a callable that
undoes it (store it as the test's restore hook, or pass to addCleanup). undoes it (store it as the test's restore hook, or pass to addCleanup).
Replaces monkey-patching ``supervise.bot_bottle_root``; one env var Replaces monkey-patching ``paths.bot_bottle_root``; one env var covers
covers every module and the flat/package copies alike (they all read it).""" every module and the flat/package copies alike (they all read it)."""
patcher = mock.patch.dict(os.environ, {"BOT_BOTTLE_ROOT": str(root)}) patcher = mock.patch.dict(os.environ, {"BOT_BOTTLE_ROOT": str(root)})
patcher.start() patcher.start()
return patcher.stop return patcher.stop
+1 -1
View File
@@ -8,6 +8,7 @@ from datetime import datetime, timezone
from pathlib import Path from pathlib import Path
from bot_bottle import supervise from bot_bottle import supervise
from bot_bottle.paths import host_db_path
from tests.unit import use_bottle_root from tests.unit import use_bottle_root
from bot_bottle.audit_store import AuditStore from bot_bottle.audit_store import AuditStore
from bot_bottle.queue_store import QueueStore from bot_bottle.queue_store import QueueStore
@@ -21,7 +22,6 @@ from bot_bottle.supervise import (
TOOL_EGRESS_ALLOW, TOOL_EGRESS_ALLOW,
TOOL_GITLEAKS_ALLOW, TOOL_GITLEAKS_ALLOW,
archive_proposal, archive_proposal,
host_db_path,
list_pending_proposals, list_pending_proposals,
read_audit_entries, read_audit_entries,
read_proposal, read_proposal,
+1 -1
View File
@@ -51,7 +51,7 @@ def _proposal(slug: str = "dev", tool: str = TOOL_EGRESS_ALLOW) -> Proposal:
class _FakeHomeMixin: class _FakeHomeMixin:
"""Patch supervise.bot_bottle_root to a temp dir for the test.""" """Point bot_bottle_root at a temp dir (via BOT_BOTTLE_ROOT) for the test."""
def _setup_fake_home(self): def _setup_fake_home(self):
self._tmp = tempfile.TemporaryDirectory(prefix="supervise-test.") self._tmp = tempfile.TemporaryDirectory(prefix="supervise-test.")
@@ -40,9 +40,8 @@ class TestDieCarriesMessage(unittest.TestCase):
class _FakeHomeMixin: class _FakeHomeMixin:
"""Point supervise.bot_bottle_root (what _write_crash_log resolves """Point bot_bottle_root (what _write_crash_log resolves through) at a
through) at a temp dir so the crash log doesn't touch the real temp dir so the crash log doesn't touch the real ~/.bot-bottle."""
~/.bot-bottle."""
def _setup_fake_home(self): def _setup_fake_home(self):
self._tmp = tempfile.TemporaryDirectory(prefix="supervise-crash-test.") self._tmp = tempfile.TemporaryDirectory(prefix="supervise-crash-test.")
+2 -1
View File
@@ -12,6 +12,7 @@ from unittest.mock import patch
from bot_bottle import supervise from bot_bottle import supervise
from bot_bottle.audit_store import AuditStore from bot_bottle.audit_store import AuditStore
from bot_bottle.paths import bot_bottle_root
from bot_bottle.queue_store import QueueStore from bot_bottle.queue_store import QueueStore
from bot_bottle.supervise import ( from bot_bottle.supervise import (
AuditEntry, AuditEntry,
@@ -39,7 +40,7 @@ def _proposal() -> Proposal:
class TestPathHelpers(unittest.TestCase): class TestPathHelpers(unittest.TestCase):
def test_bot_bottle_root(self) -> None: def test_bot_bottle_root(self) -> None:
self.assertTrue(str(supervise.bot_bottle_root()).endswith(".bot-bottle")) self.assertTrue(str(bot_bottle_root()).endswith(".bot-bottle"))
class TestReadMalformed(unittest.TestCase): class TestReadMalformed(unittest.TestCase):