v0.3.0
sluice is a sandboxed, firewalled, non-root container for any project: drop a sluice.config.sh in a directory and run sluice. This release adds a signed base image, fixes a Linux egress bug for rotating-CDN hosts, and verifies rootless Podman.
Added
- Cosign-signed base image. The generic sandbox core (proxy, firewall, dnsmasq, non-root user) is now published to GHCR as a multi-arch (amd64 + arm64) image, keyless-signed with cosign (GitHub OIDC). Opt a project into building FROM it with
SLUICE_BASE_IMAGE=ghcr.io/pyronewbic/sluice-base:0.3.0instead of rebuilding the core locally —sluiceverifies the signature when cosign is installed (SLUICE_REQUIRE_SIGNED=1to make a missing/failed signature fatal). The image carries no private key: the squid splice cert is generated per-container at runtime. Local-from-core stays the default this release.
Fixed
- Egress to rotating-CDN hosts on Linux. HTTPS to allowlisted hosts on large rotating IP pools (Google/Akamai/Fastly — e.g.
proxy.golang.org,static.crates.io) could fail with an opaque TLS error. squid's transparent-intercept Host-forgery check was rejecting a legitimate host when the client and squid resolved its name to different pool IPs milliseconds apart. A small in-box dnsmasq cache now pins one IP set per session, so both agree and the connection splices through. (Surfaced on Linux only; macOS Docker Desktop's resolver masked it.) - Eliminated
rm: Permission deniedcleanup noise in the test harnesses (chown the mount back to the host uid before teardown).
Changed
- The non-root sandbox user is now
sluice(wasnode; uid unchanged at 1000). A/home/node→/home/sluicesymlink keeps existingSLUICE_MOUNTSworking. Node + npm remain in the base as the agent runtime. - Rootless Podman verified. The acceptance harness now probes rootless Podman in CI; the full egress matrix passes in an unprivileged user namespace, so the
route_localnet/disable_ipv6sysctls and in-netns iptables the proxy needs work rootless too (no rootful requirement). - Docs:
sluice doctor, the at-exit visible-egress hint, the--HEADdev stream, and running any language viaSLUICE_EXTRA_PKGS+SLUICE_RUN_CMD.
Full changelog: v0.2.0...v0.3.0