diff --git a/claude_bottle/backend/docker/compose.py b/claude_bottle/backend/docker/compose.py index ccec1ac..cc3c047 100644 --- a/claude_bottle/backend/docker/compose.py +++ b/claude_bottle/backend/docker/compose.py @@ -83,7 +83,6 @@ from .sidecar_bundle import ( SIDECAR_BUNDLE_IMAGE, sidecar_bundle_container_name, ) -from .supervise import supervise_container_name # Repo root, used as the build context for the bundle Dockerfile. @@ -246,7 +245,6 @@ def _sidecar_bundle_service(plan: DockerBottlePlan) -> dict[str, Any]: internal_aliases.append(git_gate_container_name(plan.slug)) if sp is not None: internal_aliases.append(SUPERVISE_HOSTNAME) - internal_aliases.append(supervise_container_name(plan.slug)) service: dict[str, Any] = { "image": SIDECAR_BUNDLE_IMAGE, diff --git a/claude_bottle/backend/docker/prepare.py b/claude_bottle/backend/docker/prepare.py index 5e3cf1c..0d2314c 100644 --- a/claude_bottle/backend/docker/prepare.py +++ b/claude_bottle/backend/docker/prepare.py @@ -40,7 +40,6 @@ from .bottle_state import ( write_metadata, ) from .pipelock import pipelock_container_name -from .supervise import supervise_container_name def resolve_plan( @@ -141,8 +140,6 @@ def resolve_plan( sidecar_probes.append(("git-gate", git_gate_container_name(slug))) if bottle.egress.routes: sidecar_probes.append(("egress", egress_container_name(slug))) - if bottle.supervise: - sidecar_probes.append(("supervise", supervise_container_name(slug))) for label, sidecar_name in sidecar_probes: if docker_mod.container_exists(sidecar_name): die( diff --git a/claude_bottle/backend/docker/supervise.py b/claude_bottle/backend/docker/supervise.py deleted file mode 100644 index 5948b05..0000000 --- a/claude_bottle/backend/docker/supervise.py +++ /dev/null @@ -1,17 +0,0 @@ -"""Docker-side supervise helpers: container naming for the legacy -per-sidecar topology (kept so the bundle's docker-network alias -resolves the old name to the bundle IP). The prepare-time -queue-dir + current-config staging lives on the platform-neutral -`Supervise` ABC — backends instantiate it directly. The -supervise daemon's container lifecycle is owned by the sidecar -bundle (PRD 0024).""" - -from __future__ import annotations - - -def supervise_container_name(slug: str) -> str: - """The legacy per-sidecar container name. Kept as a function so - the renderer can register it as a docker-network alias on the - bundle — any code still referring to - `claude-bottle-supervise-` resolves to the bundle's IP.""" - return f"claude-bottle-supervise-{slug}" diff --git a/claude_bottle/supervise.py b/claude_bottle/supervise.py index 6576527..11b1256 100644 --- a/claude_bottle/supervise.py +++ b/claude_bottle/supervise.py @@ -21,8 +21,8 @@ to the agent. This module defines the host-side library: dataclasses for the queue file shapes, queue read/write helpers, the audit log writer, and the diff renderer. The in-container sidecar lives in -claude_bottle/supervise_server.py; the Docker lifecycle in -claude_bottle/backend/docker/supervise.py. +claude_bottle/supervise_server.py; the supervise daemon's container +lifecycle is owned by the sidecar bundle (PRD 0024). For 0013 the supervisor's approval handlers are deliberately no-ops: on approval the audit log is written and the response file is diff --git a/tests/unit/test_compose.py b/tests/unit/test_compose.py index c6aa212..e5af704 100644 --- a/tests/unit/test_compose.py +++ b/tests/unit/test_compose.py @@ -325,7 +325,6 @@ class TestSidecarBundleShape(unittest.TestCase): aliases = set(sc["networks"]["internal"]["aliases"]) self.assertIn(f"claude-bottle-git-gate-{SLUG}", aliases) self.assertIn("supervise", aliases) - self.assertIn(f"claude-bottle-supervise-{SLUG}", aliases) def test_daemons_csv_lists_only_active(self): # Egress + pipelock are always in the daemon set even when