v3.2.0
v3.2.0
Released 2026-07-10.
A resumability and availability release. Interrupted runs continue from a
verified ledger instead of starting over, provider outages reroute along
declared fallback chains with a receipt for every decision, and certified
local endpoints join the worker pool behind a certification gate.
Durable work ledger (#2358)
An interrupted orchestration run no longer discards finished work. The
scheduler records every task transition in a Merkle-chained work ledger:
- Every state transition of the task graph appends a redacted,
content-addressed ledger entry whose hash links its predecessor, using the
same canonical-JSON contract as the per-step replay journal. bernstein ledger resumerebuilds scheduler state purely by replaying the
chain and re-dispatches only tasks without a completion entry. Completed
work is never re-run.- The ledger is machine-portable: clone the repository on another machine and
resume there with zero lost completed work. Tampering or divergence
surfaces as a hash mismatch at an exact position, never as a silent merge. bernstein resume <task-id>picks up a single paused, killed, or crashed
task from its last checkpoint and points at the ledger when the id matches
a portable run.
Checkpointed retries (#2359)
A failed task retry no longer has to start cold. When the native agent
session recorded a checkpoint, the retry engine resumes it warm:
- Warm resume replays the recorded session checkpoint with a templated
corrective instruction, so in-context progress is preserved. - Fork branches a fresh session off the checkpoint and leaves the original
session intact. Cold restart stays the always-safe fallback. - Every decision (warm, fork, or the downgrade reason that forced cold) is
anchored in the journal and mirrored to the audit chain, so a retry replays
identically and the decision trail survives the worktree.
Provider availability policy (#2355)
Provider outages reroute instead of failing the spawn. Roles declare a
fallback chain, and failover is a deterministic, receipted decision:
- Per-role fallback chains list providers in preference order; health probes
are cached with an explicit TTL so dispatch bursts do not re-probe. - Chain resolution is deterministic: the same policy and probe results always
produce the same decision hash, and every failover lands a journal receipt
mirrored to the audit chain. bernstein doctor --failover-drillexercises every declared chain against
simulated outages and reports the route each role would take, before a real
outage forces the question.
Local-model worker tier (#2356)
OpenAI-compatible local endpoints can now serve worker roles behind a
certification gate:
bernstein doctor --endpointruns the conformance suite against an
endpoint and produces a signed certification receipt; certified endpoint
profiles are the only ones the config gate accepts for role assignments.- Certification receipts are anchored to the audit chain, so an assignment
can always be traced back to the exact probe run that admitted the
endpoint. - Three verified local configurations are documented in the local-endpoints
reference, each reproduced from its certification receipt.
Cross-adapter coordination (#2357)
Workers on different adapters now coordinate through a signed task mailbox
instead of ad-hoc files:
- Every mailbox message is HMAC-chained and Ed25519-signed; the response to a
post is the signed journal entry itself. - The claim API is dependency-gated: a task cannot be claimed until the tasks
it depends on have verified completions, and every claim emits a claim
receipt into the audit chain. - Delivery is replay-identical: replaying the same journal reproduces the
same message order and the same claim outcomes, byte for byte.
Housekeeping
- Resolved all open scanner alerts in the new feature code: applied the
suggested idiom cleanups, restricted the endpoint conformance transport to
http/https handlers only, and added containment checks for filenames
derived from session and approval ids. - Dependency updates, including a pip lockfile bump past CVE-2026-8643.