v2.15.0¶
Released 2026-07-05.
Feature release built around five community contributions by Shane Mattner (@shanemmattner), plus scheduler and test-infrastructure fixes.
Features¶
- Hold/release API (
/orchestrator/holds): heartbeat-renewed leases that keep the spawner alive while an external workflow driver is active, replacing the fixed quiescence settle timer. TTL is a grace window; expired holds release on their own. Operator docs indocs/operations/HOLDS.md. (#2218, thanks @shanemmattner) - Explicit
max_turnsonTaskCreate: per-task turn budgets flow end to end to the adapter spawn, bypassing the complexity heuristic when set; bounded 1..10000 at the schema boundary; retries carry the value forward. Docs indocs/operations/MAX_TURNS.md. (#2217, thanks @shanemmattner) - Per-agent run instrumentation: JSONL records for every LLM call, tool call, and conversation message, captured in real time via SDK hooks and anchored to the project root (not the per-task worktree). Docs in
docs/operations/INSTRUMENTATION.md. (#2219, thanks @shanemmattner) - Council-of-agents redesign: per-member cost attribution, judge synthesis over candidate outputs,
enable_thinking=falseinjected for Qwen models served from Alibaba Cloud endpoints (hostname-suffix detection), andBERNSTEIN_BUILTIN_ALLOW_RUN_COMMANDpassthrough in env isolation. (#2220, thanks @shanemmattner) - Inline
role_model_policy.<role>.councilseed blocks now forward into the runner manifest, behaving identically to thecouncils/*.yamlfile convention. (#2231)
Fixes¶
- Model selection no longer falls back to hardcoded model strings: every selection flows from configuration, and unconfigured paths raise
ModelNotConfiguredErrorinstead of silently guessing. (#2216, thanks @shanemmattner) - Critical-path priority boost applies on the first spawn batch, so a low-priority dependency of a high-priority task is claimed first. (#2233)
- Worker exit codes: when the whole process group receives SIGINT, the worker no longer re-forwards the signal into the child's interpreter shutdown window, so it reports the child handler's exit code instead of 130. (#2238)
- Five integration tests repaired and re-enabled after root-causing failures that predated this cycle. (#2232)
Internal¶
- Unit coverage for the council runner path. (#2230)
- Log-injection sanitization on hold fields; scanner findings resolved across instrumentation and council logging. (#2229)