Skip to content

Millrace

v0.21.0 Breaking

This release includes 1 breaking change for platform teams planning a safe upgrade.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

agent-loop agentic-ai-development agentic-coding agentic-engineering agentic-framework agentic-workflow
+7 more
autonomous-agents governed-autonomy governed-loop harness-engineering loop-engineering runtime-engine runtime-engineering

Affected surfaces

auth rbac

Summary

AI summary

Removed Recon terminal-operation whitelist requiring compiled metadata for routing.

Full changelog

[0.21.0] - 2026-06-15

Added

  • Added conceptual config mappings (config-mapping.md) documenting the five
    tested configuration profiles and their resolution to shipped mode IDs,
    aliases, or fixture packages.
  • Added config-swap behavior tests proving graph-only, recovery-policy-only,
    and required-extension declarations change runtime behavior without Python
    source edits.
  • Added absence and maintenance guardrail tests proving minimal fixture configs
    do not load undeclared Recon, Blueprint, closure, or Learning domain behavior.
  • Added structural AST guardrails that forbid family-ID branch tables, forbidden
    domain string literals as active-kernel control flow, and kernel-direct domain
    imports outside documented compatibility facades.

Changed

  • Restored the optional millrace-web sidecar package and synchronized
    release/CI smoke paths so v0.21.0 publishes both millrace-ai and the
    read-only local dashboard while keeping web dependencies out of the base
    runtime package.
  • Tightened Arbiter closure freshness discipline: Arbiter prompts now require
    reading the runtime-authored freshness window before old verdict/report
    artifacts, per-criterion evidence provenance, and runtime-owned closure
    remediation enqueueing. Shipped closure-capable modes now assign Arbiter via
    an explicit high-depth model alias so missing or downgraded assignment is
    visible in compile diagnostics.
  • Made the pure graph-authority cleanup explicit as a breaking pre-1.0
    contract: runtime decisions require compiled graph, extension, policy,
    lifecycle, runtime-effect, queue-family, and artifact-contract metadata.
    Missing compiled policy now fails as an authority error instead of falling
    back to shipped defaults; stale workspaces may need managed asset refresh or
    reinitialization.
  • Cleaned up legacy graph-authority authority paths: per-plane routing wrappers
    are now compatibility-only facades, route-time max-cycle recovery knobs are
    removed, and fallback route reasons/classes derive from compiled node_id
    rather than source_stage.value.
  • Bounded routine runtime-event reads and idle-event growth: status, closure,
    and inspection surfaces now use streaming/recent/latest event helpers for normal
    operation, while durable no-work idle events are transition and heartbeat
    records instead of one append per idle tick. The default durable idle-event
    heartbeat is 6 hours, with explicit shorter operator configuration still
    supported.
  • Removed the fixed Recon terminal-operation whitelist; Recon routing now
    resolves through compiled terminal-action runtime_operation_id metadata.
  • Reworked stage_metadata.py to derive shipped stage legality from JSON
    stage-kind registry assets instead of hard-coded enums; fixture stage kinds
    remain discoverable without entering the shipped-stage facade.
  • Route caller-level family-ID branching in active-kernel claim, lifecycle,
    status, and counter code through compiled policy and the generic
    QueueFamilyInterpreter.
  • Updated shipped mode required_extensions declarations to list only the
    built-in extensions each mode actually uses; compile validation rejects
    undeclared domain vocabulary.
  • Moved neutral router decision contracts to millrace_ai.contracts.router;
    millrace_ai.router remains importable only as a contract facade, and active
    runtime dispatch no longer imports it.

Fixed

  • Fixed compiled-plan currentness so persisted plans missing scheduler or
    selected recovery-policy authority are treated as stale and recompiled
    instead of being reused as incomplete modern plans.
  • Fixed installed-wheel smoke failures by declaring packaging>=24,<27 as a
    runtime dependency for extension validation's packaging.version import.
  • Fixed daemon reconciliation so a lane's persisted active-run ownership is not
    replaced while the supervisor still owns a live or pending-completion worker
    for that same lane, and occupied-lane deferrals now emit an auditable
    runtime_reconciliation_deferred diagnostic decision.
  • Fixed runtime recovery-counter reads so generic counter_id records are
    authoritative (including explicit 0 values) with no legacy fixed-field
    compatibility projection.
  • Bounded basic terminal monitor run/display state so long daemon monitor
    sessions do not retain unbounded completed-run handles while active run
    handles remain stable.

Documentation

  • Reframed public documentation around Millrace as a loop
    engineering/runtime framework. LAD is now described as one shipped
    code-development loop family, with lad_codex, lad_pi,
    learning_lad_codex, efficient_learning_lad_mixed,
    learning_lad_pi, lad_codex_integrated,
    learning_lad_codex_integrated, blueprint_lad_codex, and
    blueprint_learning_lad_codex as the recommended mode names.
  • Updated graph and mode documentation to use execution.lad,
    execution.lad_integrator, and planning.lad as canonical loop IDs while
    documenting the former execution.standard, execution.with_integrator,
    planning.standard, default_*, old unqualified learning_*,
    efficient_learning_mixed, and conceptual standard_* names as
    compatibility aliases.
  • Documented closure freshness windows, historical versus current Arbiter
    evidence, runtime-owned remediation incidents, repeated-remediation guard
    interpretation, and operator diagnosis for closure_repeated_remediation_blocked.
  • Updated README.md, ROADMAP.md, graph docs, runtime docs, source package
    map, and maintenance registers to accurately describe the generic engine
    boundary, extension-backed domains, compatibility-only surfaces, fixture
    mode limitations, and unsupported topologies (arbitrary plane IDs and
    arbitrary runtime stages remain deferred).
  • Clarified the public README and runner docs comparison with Claude Code and
    other coding harnesses: Millrace does not claim those harnesses lack hooks,
    skills, subagents, memory, or workflow helpers; the distinction is that
    Millrace owns the external compiled-plan, queue, daemon, recovery, and
    closure layer around bounded harness invocations.
  • Documented the runtime idle/event-log memory-bounds contract: durable idle
    suppression is in-memory only and separate from live terminal monitor idle
    output throttling; read_runtime_events() is reserved for explicit
    full-history audit/debug use.

Compatibility Notes

  • Package-root compatibility facades (router.py, compiler.py,
    queue_store.py, runner.py, paths.py, state_store.py,
    stage_kinds.py, loop_graphs.py) remain importable; active runtime
    authority derives from the compiled plan and compiled workflow primitives.
  • Blueprint remains available through blueprint_lad_codex and
    blueprint_learning_lad_codex, but it is extension-backed graph configuration.
    Generic packages do not export Blueprint compatibility APIs; old Python
    imports of retired Blueprint facades such as
    millrace_ai.contracts.blueprint, millrace_ai.cli.status.blueprint,
    millrace_ai.runtime.context.blueprint, and
    millrace_ai.workspace.blueprint_state may now raise ImportError.
  • standard_plain, standard_millrace, and learning_enabled_millrace remain
    compatibility aliases that resolve to lad_codex, lad_pi, and
    learning_lad_pi respectively.

Breaking Changes

  • Removed the fixed Recon terminal-operation whitelist; Recon routing now resolves through compiled terminal-action `runtime_operation_id` metadata.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track Millrace

Get notified when new releases ship.

Sign up free

About Millrace

All releases →

Related context

Beta — feedback welcome: [email protected]