v3.8.3
v3.8.3
A bug-fix release. Most of this wave came out of running the published wheel end to end with a free local model, which surfaced a chain of "green status, no artifact" defects across adapter selection, run verification, and the observability surface. Nothing here changes a public API; upgrade in place.
Adapter selection and routing
- Startup adapter detection now covers the full adapter registry and states when an explicit adapter is pinned instead of claiming auto-routing (#2779).
- An explicit adapter selection is no longer overridden by model-name inference: a route id like
openai/gpt-oss-20b:freeunder a pinned qwen run no longer hijacks the spawn to another adapter (#2776). - Adapter selection in the seed file and
--clinow validates against the live registry rather than three separate stale allowlists, so every registered adapter is actually selectable (#2826). - The qwen adapter stops passing a flag qwen-code removed, which broke spawns whenever a Tavily key was set (#2766); zero-config spawn works for adapters that pick the model server-side (#2753).
Run verification and correctness
path_existscompletion signals are verified against the operator checkout, not the agent's ephemeral worktree, so a gitignored or unmerged file no longer reports the task done with nothing delivered (#2778).- Running on the repository default branch now fails fast with an actionable message and reports the run as unhealthy, instead of discarding every agent's work and printing a clean summary (#2780).
- The scheduled dependency scan no longer audits the orchestrator's own tool venv or injects dozens of foreign upgrade tasks into a scoped run; it is scoped to the target repo's declared manifests, skips its own first tick, and can be turned off (#2825).
- The recovery watchdog now launches from a runnable module, so it actually starts from the published wheel instead of failing silently (#2824).
bernstein democompletes its mock tasks, exits nonzero when they all fail, reports a consistent count, points at a real follow-up command, and cleans up its own processes (#2828).- A merge-back that fails for a non-conflict reason no longer force-deletes the branch holding an agent's only committed copy: the work is preserved to a graveyard ref, the failure is logged at error level, and the task is failed under a bounded retry budget instead of looping (#2832).
Observability
- Live OTLP bridge: the run journal's signed, chain-anchored span projection now streams to any stock OpenTelemetry collector, live during a run and via
bernstein telemetry export-otelbackfill, so orchestrator spans appear in existing tracing stacks with deterministic ids (#2771). bernstein telemetry verify-spanproves a single exported span against the run journal and audit chain: it recomputes the span id from the referenced journal entry and checks the chain anchor, rejecting any span that does not recompute (#2827).
Security
- The webhook secret is no longer written to logs (#2775).
- The identity grant secret is no longer persisted in clear text; the stored reference is a salted hash, and existing chains stay verifiable (#2777).
pyasn1is bumped to 0.6.4 to clear CVE-2026-59885 and CVE-2026-59886 (#2821).
CLI and configuration
- The CLI status, cost, and recap probes resolve the effective server port instead of a hardcoded default, so a run started on a non-default port is reachable (#2819).
- A detached run now persists its auth token to a 0600 file so out-of-process
status,cost, andrecapcan authenticate; a rejected credential is now reported distinctly from an unreachable server (#2830). The browser-dashboard case is tracked separately. - Startup cost lines use the submitted task count (#2752); the first spawn outcome is surfaced before a non-interactive run exits (#2754); unknown top-level seed keys warn with a nearest-match suggestion (#2755); the seed parser accepts
role_model_policy.<role>.endpointand drops unread top-level sections from shipped seed files (#2759, #2757); evolution stops warning about locked files in non-source workspaces (#2750).
Packaging
- The published container image is runnable by default: its entry command no longer points at a removed command, and a foreground
servemode lets the image host a coordinator node (#2829). Multi-arch (arm64) images are tracked separately.
Thanks
Thanks to the external contributors in this release:
- @Sanjays2402 - dropped the removed qwen web-search flag that broke spawns (#2766) and passed the configured model through to the agy adapter (#2813)
- @sairajkasam - the live OTLP bridge that streams chain-anchored journal spans to OpenTelemetry collectors (#2771)
- @AnayGarodia - persisting the effective server port so CLI probes reach a run started on a non-default port (#2819)