Done in 73dc0d4. PipelockProxy.prepare() now reads module-level CA path constants from claude_bottle/pipelock.py (universal to pipelock, not docker-specific), and the four empty Docker* sidecar subclasses are gone. Both backends instantiate PipelockProxy / Egress / GitGate / Supervise directly. 552 unit tests still pass.
Fair — fixed in 085a0c1 (pass instead of del plan, target). The del was just to silence unused-arg warnings, but pass is the idiomatic stub marker and reads cleaner.
Follow-up: the gvproxy network design this PRD landed has been reversed in PR #63 after chunk-1's empirical spike against smolvm 0.8.0. Short version: smolvm exposes no virtio-net-over-unixgram…
Addressed in commit 2aca9e6: dropped the three internal-detail lines (gvproxy subnet, smolfile path, gvproxy-config path) and lifted the multi-value printer into claude_bottle/backend/print_util.py:print_multi — both backends share it now.