feat: Add Docker Sandbox staging smoke example [INT-976]#440
Open
AlexanderZ-Band wants to merge 1 commit into
Open
feat: Add Docker Sandbox staging smoke example [INT-976]#440AlexanderZ-Band wants to merge 1 commit into
AlexanderZ-Band wants to merge 1 commit into
Conversation
Manual, resumable Docker Sandbox staging smoke: a headless band-sdk LangGraph agent runs inside a real Docker Sandbox (sbx exec) against staging, proving WS receipt + REST reply, and reconnect across three real interruptions (Wi-Fi cycle, host sleep/wake, sandbox daemon restart). probe.py reuses tests/e2e/baseline's pytest-free toolkit (ResourceManager, UserOps, reply_capture) for dynamic per-run agent/room provisioning + reap, instead of a static staging credential or hand-rolled REST/WS calls. skill/SKILL.md lets an AI client (Codex, Claude Code) drive and resume the workflow across the manual checkpoints; a plain operator runs the same scenario by hand via setup.sh/run.sh/probe.py. Both paths share one state.json and produce the same evidence.md. Deliberately not an automated E2E test: a manual, occasionally-run example under examples/, not tests/e2e/. Live-validated against staging in one continuous run (all 4 checks PASS: initial round trip, Wi-Fi reconnect, sleep/wake recovery, daemon-restart recovery via full re-provision). Two real bugs surfaced only by running live, both worked around: band-sdk's git+https:// install fails inside the sandbox (private SSH-only .claude submodule) so agent.py installs from PyPI instead; the sandbox proxy answers CONNECT with HTTP/1.0, which websockets<=15.0.1 rejects and langgraph-sdk pins, so agent.py overrides to websockets>=16. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
AlexanderZ-Band
force-pushed
the
feat/sandbox-smoke-test-band-sdk-agent-headless-in-a-do-INT-976
branch
from
July 15, 2026 13:07
686a29d to
6b98ff7
Compare
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.
Summary
band-sdkLangGraph agent runs inside a real Docker Sandbox (sbx exec) against staging, proving WS receipt + REST reply, and reconnect across three real interruptions (Wi-Fi cycle, host sleep/wake, sandbox daemon restart).probe.pyreusestests/e2e/baseline's pytest-free toolkit (ResourceManager,UserOps,reply_capture) for dynamic per-run agent/room provisioning + reap — no static staging credential.skill/SKILL.mdlets an AI client (Codex, Claude Code) drive and resume the workflow across the manual checkpoints; a plain operator runs the same scenario by hand viasetup.sh/run.sh/probe.py. Both paths share onestate.jsonand produce the sameevidence.md.examples/, nottests/e2e/.Live validation (staging, run
db69a529)sbx daemonrestart (full re-provision)One continuous run, 26m31s. Full report attached to INT-976.
Two real bugs surfaced only by running live (both fixed, see
README.mddesign notes):band-sdk'sgit+https://install fails inside the sandbox (private SSH-only.claudesubmodule) — install from PyPI instead.CONNECTwithHTTP/1.0 200, whichwebsockets <=15.0.1rejects;langgraph-sdkpinswebsockets<16, breaking WS for anyband-sdk[langgraph]behind an HTTP/1.0 proxy. Workaround:agent.py's[tool.uv] override-dependencies = ["websockets>=16"].Test plan
ruff check/ruff format --checkcleanpyrefly checkclean🤖 Generated with Claude Code