PRD: Promote smolmachines to default backend; convert Docker to example-only #210

Merged
didericis merged 8 commits from prd-0055-smolmachines-default into main 2026-06-08 23:34:53 -04:00
Collaborator

Closes #206.

PRD 0058

Summary

Makes smolmachines the default backend (BOT_BOTTLE_BACKEND default changes from docker to smolmachines), closing the DNS sinkhole gap in the Docker default path. The smolmachines VMM enforces DNS filtering at the vsock layer — the agent cannot exfiltrate via DNS tunnelling because the host returns NXDOMAIN for non-allowlisted names before the query leaves the machine. Docker remains functional but is demoted to example-only. Two open questions (TSI+pipelock loopback verification, availability fallback UX) are called out in the PRD before implementation begins.

Closes #206. [PRD 0058](https://gitea.dideric.is/didericis/bot-bottle/src/commit/1c36b66ffd0158955cc3b2be1c4e379050008454/docs/prds/0058-smolmachines-default.md) ## Summary Makes smolmachines the default backend (`BOT_BOTTLE_BACKEND` default changes from `docker` to `smolmachines`), closing the DNS sinkhole gap in the Docker default path. The smolmachines VMM enforces DNS filtering at the vsock layer — the agent cannot exfiltrate via DNS tunnelling because the host returns NXDOMAIN for non-allowlisted names before the query leaves the machine. Docker remains functional but is demoted to example-only. Two open questions (TSI+pipelock loopback verification, availability fallback UX) are called out in the PRD before implementation begins.
didericis-claude changed title from PRD 0055: Promote smolmachines to default backend; convert Docker to example-only to PRD 0058: Promote smolmachines to default backend; convert Docker to example-only 2026-06-06 16:49:25 -04:00
didericis-claude changed title from PRD 0058: Promote smolmachines to default backend; convert Docker to example-only to PRD: Promote smolmachines to default backend; convert Docker to example-only 2026-06-06 22:10:40 -04:00
didericis added 3 commits 2026-06-08 23:10:13 -04:00
didericis force-pushed prd-0055-smolmachines-default from 38ad0fc052 to aff042855a 2026-06-08 23:10:13 -04:00 Compare
didericis added 1 commit 2026-06-08 23:15:08 -04:00
test(smolmachines): verify TSI egress proxy path
lint / lint (push) Successful in 1m47s
test / unit (pull_request) Successful in 39s
test / integration (pull_request) Successful in 23s
fabcd026af
didericis added 1 commit 2026-06-08 23:23:06 -04:00
test: fix smolmachines proxy assertions
lint / lint (push) Successful in 1m52s
test / unit (pull_request) Successful in 41s
test / integration (pull_request) Successful in 25s
cc1d986a74
Author
Collaborator

Current TSI + egress-proxy state:

  • The smolmachines launch path no longer relies on broad host loopback passthrough. It publishes the egress sidecar on a per-bottle 127.x loopback alias and patches smolvm's TSI allowlist to that alias as a /32.
  • The integration test now asserts that the guest receives matching HTTP_PROXY/HTTPS_PROXY values on that 127.x alias, an allowlisted HTTPS request to example.com succeeds through the proxy, direct egress with proxy env vars unset fails, and a non-allowlisted host fails through the proxy.
  • This gives us executable coverage for the intended security property: the guest can reach bot-bottle's egress proxy through scoped TSI loopback, but cannot use direct internet egress or broad host loopback as a bypass.
  • The test is macOS + smolvm + Docker gated, so it imports in Linux CI but must be exercised on a macOS smolvm host for full runtime validation.
Current TSI + egress-proxy state: - The smolmachines launch path no longer relies on broad host loopback passthrough. It publishes the egress sidecar on a per-bottle 127.x loopback alias and patches smolvm's TSI allowlist to that alias as a /32. - The integration test now asserts that the guest receives matching HTTP_PROXY/HTTPS_PROXY values on that 127.x alias, an allowlisted HTTPS request to example.com succeeds through the proxy, direct egress with proxy env vars unset fails, and a non-allowlisted host fails through the proxy. - This gives us executable coverage for the intended security property: the guest can reach bot-bottle's egress proxy through scoped TSI loopback, but cannot use direct internet egress or broad host loopback as a bypass. - The test is macOS + smolvm + Docker gated, so it imports in Linux CI but must be exercised on a macOS smolvm host for full runtime validation.
didericis added 2 commits 2026-06-08 23:28:09 -04:00
complete(prd): mark smolmachines default active
lint / lint (push) Successful in 1m46s
test / unit (pull_request) Successful in 41s
test / integration (pull_request) Successful in 22s
17fc44d0d8
didericis added 1 commit 2026-06-08 23:31:40 -04:00
fix(start): skip backend selector
test / unit (pull_request) Successful in 40s
test / integration (pull_request) Successful in 24s
lint / lint (push) Successful in 1m47s
prd-number / assign-numbers (push) Successful in 29s
test / unit (push) Successful in 38s
test / integration (push) Successful in 27s
Update Quality Badges / update-badges (push) Failing after 1m20s
e6040fc824
didericis merged commit e6040fc824 into main 2026-06-08 23:34:53 -04:00
didericis deleted branch prd-0055-smolmachines-default 2026-06-08 23:34:53 -04:00
Sign in to join this conversation.