This release includes 1 security fix for security teams reviewing exposed deployments.
Topics
+14 more
Affected surfaces
Summary
AI summaryResume now authenticates suspend receipts before acting.
Full changelog
v3.8.0
Feature release: a microVM sandbox tier, a callable A2A node, a browser activity worker, and a signed automation bridge, landed alongside a large security-hardening pass whose every fix ships with a regression test that fails on the pre-fix code.
Features
- MicroVM sandbox backend with content-addressed snapshots (#2701). A new isolation tier for deterministic fork-and-race: candidate workspaces are canonicalised to a content address, so two operators with the same inputs derive the same snapshot digest. Opt-in via
--sandbox microvm(#2714); never auto-selected. Contributed by @ecgang. - Callable, discoverable A2A node (#2677). A signed
/.well-known/agent.jsoncard, a persisted A2A handler that survives restart, and agent-registry publication. Every inbound delegation returns a signed response receipt. - Browser activity worker with replayable site checks (#2669). A non-coding activity modality whose site checks are recorded as replayable, lineage-attested artifacts.
- Automation bridge (#2670). Signed trigger receipts and chain-anchored status callbacks, so an external automation firing a goal leaves a verifiable trail.
- Declarative adapter capability profiles (#2672). Each adapter declares a machine-readable capability profile (MCP client/server, sandbox tier, vision, computer-use, parallelism) with a content-addressed profile hash.
Security and integrity hardening
Each item is a confirmed defect with a regression test that fails on the pre-fix code, several found by cross-model adversarial review of already-merged work.
- Resume authenticates the suspend receipt before acting (#2725). The resume/release path authorized off an unauthenticated audit-chain read, so a forged suspend receipt with an invalid HMAC could drive a real resume. It now reads through the authenticated
scan_verifiedprimitive; a forged receipt is refused. sandbox receipt verifyis anchored by default and never conflates absent with tampered (#2713). One shared verdict definition backs both the CLI and the library; an unanchored receipt never exits 0, an unreadable blob is reported as a reader-side problem rather than as a missing record, and a malformed input returns a verdict instead of a traceback. Contributed by @ecgang.- Snapshot canonicalisation is a pure function of the tree (#2719). The digest no longer folds in the calling process's execute permission, host symlink targets, or dropped special files, so a snapshot written on one host verifies on another.
- Intent-capsule verification derives from signed state (#2674) and its journal reads route through the shared containment barrier (#2727), so a run journal planted outside the runs root is refused rather than read.
- Clearance-gate atomicity, idempotence, and verification hardened (#2678); approval-card resolution made terminal, bounded, and verifiable (#2671); sovereign attestation made equal to the enforced posture (#2681); recipe fires now submit and receipt real work, with lineage, DST, and collision handling hardened (#2673).
Fixed
- Local dashboard auth no longer locks the CLI and browser out of their own task server (#2726). With dashboard auth configured,
bernstein runandbernstein gui servereturned 401 against the server they had just started. The CLI now authenticates to its own server, and the UI shell plus PWA assets are served without a bearer token while every data route still requires one. External unauthenticated access still returns 401; the posture is unchanged. - Drain-merge subprocess is killed on every exit path, including cancellation (#2718). A cancelled drain no longer leaves a coding-agent subprocess running against the repository with write access.
- Worktree and session-fork creation undo themselves when a post-creation step fails (#2716); fork-race teardown is cancellation-resilient and its lifecycle receipts are honest (#2720);
fork-race --outis validated before any candidate is dispatched (#2707).
CI and release infrastructure
- Per-PR CI load cut by shifting full-width validation toward a merge-queue lane (#2724); review-bot-ack now reports on
merge_group(#2723); the release chain self-dispatches past the GITHUB_TOKEN handoffs that previously needed two manual dispatches (#2722).
Code-scanning
The open-alert set was worked to disposition: real defects fixed with regression tests, and canonical-serialisation coercions dismissed as false positives with a documented rationale, because removing them would change hash inputs and break byte-identical replay.
Security Fixes
- Resume authenticates the suspend receipt before acting (#2725) – prevents forged receipt from triggering a real resume.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About chernistry/bernstein
Deterministic multi-agent orchestrator for 18 CLI coding agents (Claude Code, Codex, Cursor, Aider, Gemini CLI, OpenAI Agents SDK, and more). MCP server mode (stdio + HTTP/SSE) exposes the orchestrator to any MCP client. Git worktree isolation per agent, HMAC-chained audit trail, cost-aware model routing via contextual bandit. ~11K monthly PyPI downloads, Apache 2.0.
Related context
Related tools
Earlier breaking changes
- v3.7.1 `bernstein approve` and `bernstein reject` now enforce identifier regex `[A-Za-z0-9._-]{1,64}`.
- v3.7.1 Tampered mission ledger reports as unverified rather than not-found.
- v3.7.1 `mission define` now refuses phases without gate tasks.
- v3.5.0 MCP client, transport, and gateway become stateless; calls carry content‑derived trace IDs in _meta.
Beta — feedback welcome: [email protected]