release: sandy 1.6.0 — Debian trixie, Python 3.13, Node 24, Go 1.26 - #136
Merged
Conversation
Base-image modernization plus two additive features and a LAN-allowlist fix. Every pinned toolchain was on an unsupported or maintenance-only release: - Debian 12 bookworm left regular security support 2026-07-12 -> trixie (13), which brings system Python 3.11 -> 3.13. (#133) - Go 1.24 left its two-release support window entirely, and the pin was a Mar-2025 patch untouched for 16 months -> 1.26, with the newest patch now resolved at build time instead of frozen. The egress proxy's documented monthly --pull refresh had been silently no-op since ~Feb 2026 (no further 1.24.x pushes existed), so it was refreshing Debian but not the Go stdlib implementing its TLS/HTTP/CONNECT I/O; pinning a supported minor restores it. Node 22 (Maintenance LTS) -> 24 (Active LTS). (#131) - SANDY_EFFORT pins Claude Code reasoning effort and records it in the session marker, so a run's effort is provable rather than inferred. (#115) - SANDY_SESSION_NONCE lets an operator pin the attestation nonce so a harness can prove a run is the one it launched; env-only, so a committed workspace config cannot set it. (#118) - SANDY_ALLOW_LAN_HOSTS no longer reports success when iptables rejected the rule — a silently missing hole is the worst direction to be wrong in. (#119) Additive minor per the CLAUDE.md semver rule: new keys, no retiering or renames, introspection schema_version stays 1. SANDY_SANDBOX_MIN_COMPAT stays 0.7.10 — the Python bump moves where pip --user packages live, but the sandbox still works, so this is not a compat-floor event and no sandbox needs recreating. Four user-visible upgrade consequences are documented at the top of RELEASE_NOTES.md: the first launch rebuilds every image; persistent pip --user packages become invisible to 3.13 (sandy now detects and reports the stale tree); native Node addons may need npm rebuild; and binaries built inside sandy now link glibc 2.41. Also lands the test-suite work: three macOS-only failures CI structurally cannot see (#134) — including §68 executing the real sandy binary via a backtick inside a double-quoted python3 -c string — and per-section timing, section selection, a fast-model pin, and an image warm-up preflight for the integration suite (#135). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Cuts v1.6.0. Sets
SANDY_VERSION=1.6.0and adds the release notes.Why this is a release, not a patch
Every pinned toolchain was on an unsupported or maintenance-only release:
1.24.1— EOL major, patch frozen since Mar 2025Plus two additive features (
SANDY_EFFORT#115,SANDY_SESSION_NONCE#118) and a real security fix (SANDY_ALLOW_LAN_HOSTSreporting success when iptables had rejected the rule, #119).The part worth reading twice
The egress proxy's documented monthly
--pullrefresh had been silently doing nothing since ~Feb 2026. It pinnedgolang:1.24-bookworm, a floating minor tag, which genuinely delivered 12 patches through Go 1.24.13 — but once 1.24 left the support window there were no further pushes, so the monthly rebuild re-resolved an unchanged digest, refreshing Debian but not the Go stdlib that implements the proxy's TLS/HTTP/CONNECT I/O. Pinning a supported minor is what makes that mechanism work at all.Upgrade consequences (documented at the top of the notes)
pip --userpackages become invisible to 3.13 (sandy now detects the stale tree and prints the cleanup)npm rebuild(22→24 ABI).venvoverlays are unaffected (uv-managed interpreters). No sandbox needs recreating.Compat
Additive minor per the CLAUDE.md semver rule — new keys, no retiering or renames,
schema_versionstays1.SANDY_SANDBOX_MIN_COMPATstays0.7.10: the Python bump moves wherepip --userpackages live, but the sandbox still works, so this is not a compat-floor event.Verification
Maintainer host run reported clean:
run-tests.sh,run-integration-tests.sh(85/85, with §15 down from 306s to seconds after the warm-up + seed fixes), and aSANDY_SKILL_PACKS=gstackbuild confirming Playwright'sinstall-depsworks on trixie — the one path CI never covers.Post-merge
Tag
v1.6.0immediately after this merges: for a bare release version_sandy_proxy_refreturnsv$SANDY_VERSIONwith no branch fallback, so until the tag exists a local./sandywould try to clone a nonexistent ref. Then the GitHub release, then a follow-up bump to1.6.1-dev.🤖 Generated with Claude Code