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.