Skip to content

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 resume rebuilds 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-drill exercises 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 --endpoint runs 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.