docs(prd-0024): consolidate per-bottle sidecars into a single bundle #54

Merged
didericis merged 1 commits from prd-0024-consolidate-sidecar-bundle into main 2026-05-26 23:57:33 -04:00
Owner

Summary

New PRD for collapsing pipelock + egress + git-gate + supervise from four per-bottle containers into a single claude-bottle-sidecars bundle image with a small stdlib Python init supervisor. Same daemons, same ports, same protocols, same per-bottle lifetime — fewer containers per bottle, one Dockerfile to maintain instead of three.

The compose file for a bottle goes from five services (agent, pipelock, egress, git-gate, supervise) to two (agent, sidecars). Inside the bundle, egress stays as pipelock's localhost upstream; nothing on the agent side ever addressed it directly anyway.

Why now

PRD 0023's smolmachines backend wants one host-side sidecar container per bottle, not four. Rather than ship two divergent sidecar topologies, converge both backends on the same bundle. This PRD produces the image; PRD 0023 chunk 3 consumes it.

Sized

Five chunks: bundle image + init supervisor → compose renderer collapse (feature-flagged) → backend Python trim + delete old Dockerfiles → integration test sweep → docs and flag removal.

Open questions

Six. Most load-bearing: init failure semantics (bundle exits on any child death vs restart-the-child), exit-code propagation when multiple daemons die under SIGTERM, and healthcheck aggregation across four ports in one container. None block landing chunk 1.

## Summary New PRD for collapsing pipelock + egress + git-gate + supervise from four per-bottle containers into a single `claude-bottle-sidecars` bundle image with a small stdlib Python init supervisor. Same daemons, same ports, same protocols, same per-bottle lifetime — fewer containers per bottle, one Dockerfile to maintain instead of three. The compose file for a bottle goes from five services (`agent`, `pipelock`, `egress`, `git-gate`, `supervise`) to two (`agent`, `sidecars`). Inside the bundle, egress stays as pipelock's localhost upstream; nothing on the agent side ever addressed it directly anyway. ## Why now PRD 0023's smolmachines backend wants one host-side sidecar container per bottle, not four. Rather than ship two divergent sidecar topologies, converge both backends on the same bundle. This PRD produces the image; PRD 0023 chunk 3 consumes it. ## Sized Five chunks: bundle image + init supervisor → compose renderer collapse (feature-flagged) → backend Python trim + delete old Dockerfiles → integration test sweep → docs and flag removal. ## Open questions Six. Most load-bearing: init failure semantics (bundle exits on any child death vs restart-the-child), exit-code propagation when multiple daemons die under SIGTERM, and healthcheck aggregation across four ports in one container. None block landing chunk 1.
didericis added 1 commit 2026-05-26 23:54:42 -04:00
docs(prd-0024): consolidate per-bottle sidecars into a single bundle
test / unit (pull_request) Successful in 17s
test / integration (pull_request) Successful in 1m11s
1894f621dd
Replace pipelock + egress + git-gate + supervise as four
separate containers with one bundle image
(claude-bottle-sidecars) running all four daemons under a small
stdlib Python init supervisor. Compose file collapses from five
services to two; same daemons, same ports, same protocols, one
container.

Sized: bundle image + init → renderer collapse (feature-flagged)
→ backend Python trim → integration sweep → flag removal.

Prerequisite for PRD 0023 chunk 3 (smolmachines backend reuses
the same bundle as its sole host-side sidecar container).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
didericis merged commit 616889db1b into main 2026-05-26 23:57:33 -04:00
Sign in to join this conversation.