--- title: v0.2.2 — 2026.05.18 --- ## 2026.05.18 Release v0.2.2 ### 🛡️ Security Fixes - **`hypervisor`: `vmm-sys-util` bumped to 0.12.1** (CVE-2023-50711, GHSA-875g-mfp6-g7f9): `FamStructWrapper::deserialize` failed to verify header length against the flexible-array length, allowing out-of-bounds memory access from safe Rust code. Now pinned to the workspace version shared by all other hypervisor crates. - **`agent` / `hypervisor`: `bytes` and `env_logger` security bumps** as part of the same dependency-refresh pass. - **Reverted `time` crate bump (CVE-2026-25727)**: CubeSandbox only uses `Rfc3339` for outbound timestamp formatting and never parses untrusted `Rfc2822` input — the affected attack vector is not reachable. The upgrade was rolled back pending an MSRV bump and will be tracked separately. ### 🛠️ Critical Fixes - **Fixed duplicate template-image job creation (`CubeMaster`)**: A `request_id` column with a unique index on `(request_id, operation)` makes job submissions idempotent, preventing duplicate build jobs from concurrent or retried API calls. - **Fixed `cubecli exec` nil-deref panic on stdin EOF**: `StdinCloser.Read` triggered a nil-pointer dereference at stdin EOF, silently aborting the exec lifecycle. Fixed using `errors.Is(err, io.EOF)` for proper error-wrapping compatibility; shim logs now emit the expected paired exec lifecycle entries. - **Fixed ext4 artifact runtime file materialization for PVM templates**: `RefreshArtifactRuntimeFiles`, `validateArtifactRuntimeFilesPresent`, and `ensureArtifactRuntimeFiles` are simplified to handle only kernel files; `copyKernelFileAtomically` is renamed to `CopyFileAtomically` for reuse outside the package. ### ✨ Enhancements - **E2B-compatible default exposed port**: Default sandbox exposed port changed to **49983** to match the E2B sandbox protocol. `CubeMaster` is now the single source of truth — hardcoded defaults removed from `Cubelet` and `network-agent`. - **`cubelet`: configurable `cmdTimeout` via storage plugin TOML config**: A new optional `cmd_timeout` field replaces the hardcoded 3 s default, letting operators raise the limit for multi-GiB ext4 operations without recompiling. Default behavior is unchanged when the field is absent. - **`cubelet`: richer diagnostics on `newExt4RawByReflinkCopy` failures**: Error messages now include elapsed time, file sizes, and free space — e.g. `[step=N/4 cmd="…" elapsed=…ms target=size=… base=size=… free=…B]`. - **Deploy: sync CubeMaster custom ports from `.env`**: `cubemaster.yaml` now uses `__CUBE_SANDBOX_MYSQL_PORT__` / `__CUBE_SANDBOX_REDIS_PORT__` placeholders substituted by `install.sh`, enabling non-default MySQL/Redis ports without manual YAML edits. ### ⚙️ Engineering Improvements - **`cubecli`: removed dead `listmd` command**: The unreachable `listmd` subcommand and its 128-line implementation are deleted. ### 🤖 CI / DevOps - **Claude-powered code review and issue triage automation**: Five AI reviewer agents (code quality, performance, security, test coverage, documentation) added under `.agents/agents/`. Automated workflows handle PR review, duplicate issue detection, and issue label triage. Helper scripts `gh.sh` and `edit-issue-labels.sh` added under `scripts/`. ### 📚 Documentation - **Chinese translation of `CONTRIBUTING.md`**: `CONTRIBUTING_zh.md` added as a full Chinese translation of the contribution guide. - **Community doc PR requirements relaxed**: Both `CONTRIBUTING.md` and `CONTRIBUTING_zh.md` now allow single-language submissions; bilingual docs are optional. - **Network port allocation ranges documented**: `docs/architecture/network.md` (EN & ZH) now documents the three port-range buckets: `10000–19999` (network-agent), `20000–29999` (CubeProxy), `30000–65535` (CubeVS SNAT). - **Community docs sections added**: New bilingual troubleshooting, use-cases, and integrations sections added to VitePress; a CI workflow enforces bilingual parity. - **Domain update**: CNAME switched from `docs.cubesandbox.ai` to `cubesandbox.com`. - **Fixed `browser-sandbox` example**: Added missing `load_dotenv()` call and `python-dotenv` dependency. - **WeChat group QR code refreshed**.