Skip to content

ota-run/ota](https:

v1.6.19 Breaking

This release includes breaking changes 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

cli configuration contracts developer-tools infrastructure ota
+5 more
productivity repo-readiness rust validation workspace

Affected surfaces

auth rbac rce_ssrf deps

ReleasePort's take

Light signal
editorial:auto 1mo

Release v1.6.19 fixes several `ota` command and doctor workflow bugs and adds host‑architecture scoping for execution contexts.

Why it matters: Bugfixes ensure reliable log capture, tool inference, container cleanup, and service readiness checks; the new architecture‑scoped contexts let you target builds precisely to required CPU architectures.

Summary

AI summary

Added repo-scoped execution locking, effect‑governance policies, env bindings from services, and host‑architecture scoping.

Changes in this release

Feature Low

Add host‑architecture scoping for execution contexts via `execution.contexts.<name>.only_arch`.

Add host‑architecture scoping for execution contexts via `execution.contexts.<name>.only_arch`.

Source: llm_adapter@2026-06-06

Confidence: high

Bugfix Medium

Preserve explicitly requested execution mode overrides in `ota run`.

Preserve explicitly requested execution mode overrides in `ota run`.

Source: llm_adapter@2026-06-06

Confidence: high

Bugfix Medium

Recreate deleted stdout/stderr log files during `ota run --log`.

Recreate deleted stdout/stderr log files during `ota run --log`.

Source: llm_adapter@2026-06-06

Confidence: high

Bugfix Medium

Exclude `where` (Windows) and `which` (Unix) from inferred tool requirements in Windows native proof CI.

Exclude `where` (Windows) and `which` (Unix) from inferred tool requirements in Windows native proof CI.

Source: llm_adapter@2026-06-06

Confidence: high

Bugfix Medium

Probe Corepack‑managed tools like Yarn through the normal container backend.

Probe Corepack‑managed tools like Yarn through the normal container backend.

Source: llm_adapter@2026-06-06

Confidence: high

Bugfix Medium

Retry transient Docker container removal races during cleanup.

Retry transient Docker container removal races during cleanup.

Source: llm_adapter@2026-06-06

Confidence: high

Bugfix Medium

Align environment evaluation between `ota doctor`, `ota up --dry-run`, and `ota run --dry-run`.

Align environment evaluation between `ota doctor`, `ota up --dry-run`, and `ota run --dry-run`.

Source: llm_adapter@2026-06-06

Confidence: high

Bugfix Medium

Fail compose‑managed service readiness immediately when not running.

Fail compose‑managed service readiness immediately when not running.

Source: llm_adapter@2026-06-06

Confidence: high

Bugfix Medium

Diagnose only required services for selected workflows in `ota doctor`.

Diagnose only required services for selected workflows in `ota doctor`.

Source: llm_adapter@2026-06-06

Confidence: high

Bugfix Medium

Skip later readiness evaluation after a blocking error in workflow‑scoped gating.

Skip later readiness evaluation after a blocking error in workflow‑scoped gating.

Source: llm_adapter@2026-06-06

Confidence: high

Full changelog
  • hardened repo execution lock guidance in ota run: rerun commands now preserve explicitly
    requested execution mode overrides including --mode native, and lock-contention errors now
    surface the active task/mode/lifecycle/pid/start-time metadata for the live Ota execution that
    currently holds the repo lock
  • hardened streaming durable log capture for ota run --log: if the live stdout/stderr log path
    is deleted while a task is still running, Ota now recreates the named log file and continues
    writing there instead of silently writing only to the unlinked file handle
  • fixed Windows native proof CI: where (Windows) and which (Unix) are now excluded from
    inferred tool requirements so that run: where cl in a task or check no longer triggers a
    spurious where --version probe that exits with code 1 on Windows
  • hardened selected-path command inference for shell wrappers: ota doctor and ota run --dry-run
    no longer infer wrapper shells like sh, bash, or zsh from run: / script: bodies as
    required tools, avoiding bogus shell-version probes on wrapper forms such as sh -c '...'
  • fixed Corepack-managed container tool probing in ota doctor: owned package-manager tools such
    as yarn are now probed through the normal container backend in the repo workdir, so contracts
    that rely on packageManager truth no longer drift to global image defaults during diagnosis
  • hardened ephemeral container cleanup after container-backed probes and dry-runs: Ota now retries
    transient Docker removal of container ... is already in progress races instead of surfacing
    them as spurious probe failures when the container cleanup path briefly lags
  • fixed a container workflow preflight trust gap in ota doctor and ota up --dry-run: selected
    container task/workflow paths now evaluate required env the same way ota run --dry-run does,
    instead of suppressing real env blockers behind the generic "host-only checks" note
  • hardened ota doctor for compose-managed services: when a required compose service is not
    running, Ota now fails that service readiness path immediately from manager truth instead of
    spending the full declared TCP/HTTP probe retry budget before reporting the same not-ready state
  • fixed workflow-scoped ota doctor service selection: selected workflows now diagnose only the
    services required by their explicit workflow service list plus selected task closure, instead of
    falling back to unrelated repo-global services whenever workflows.<name>.services.required
    was empty
  • hardened workflow-scoped ota doctor gating: once selected workflow checks or probes produce a
    blocking error, Ota now skips later workflow surface readiness evaluation instead of spending the
    full surface retry budget on a path already proven invalid
  • fixed Windows host tool probing for wrapper scripts such as corepack.cmd: ota doctor now
    executes .cmd / .bat tool probes through cmd /C instead of failing with a generic
    executable-not-found probe error when the tool is otherwise present on PATH
  • added host-architecture scoping for execution contexts: execution.contexts.<name>.only_arch
    now lets contracts fail early in ota doctor, ota run --dry-run, and execution when a
    selected context is not supported on the current host architecture, instead of falling through
    to later container image manifest failures
  • hardened container runtime-proof cleanup for dependency-isolation volumes: Ota now retries
    transient Docker volume is in use cleanup races with backoff instead of turning a proven ready
    container proof into a cleanup failure on the first short release lag
  • improved ota run failure excerpts for noisy test runners: Ota now prioritizes real failing-test
    markers such as FAIL, Failed Tests, and AssertionError over surrounding passing test
    chatter, so captured output centers on the actual failure instead of adjacent success lines
  • fixed a native runtime/tool trust bug across ota doctor and ota run: Ota no longer
    prepends mise shim directories into its own process PATH, and native version probes now run
    commands from the contract working directory instead of reconstructing shim paths, so active
    mise exec environments and repo-scoped version-manager context are preserved instead of being
    overwritten by Ota-owned PATH drift
  • fixed a Python toolchain trust bug in ota doctor: toolchains.python with provider: uv
    now probes Python runtime candidates (python3.12, python3, python) instead of probing
    the uv executable as if it were the runtime, so native/container diagnosis no longer reports
    bogus python@uv-version mismatches or false missing-Python blockers on Python container images
  • fixed a trust bug in failed-task output excerpts: relevance ranking now prefers real test
    failure summaries/assertions over incidental package-manager noise containing words like
    failed, so captured failure excerpts point at the actual failing test surface instead of
    unrelated install/build chatter
  • fixed a trust bug in container run failure classification: managed isolated-path mutation now
    requires a real filesystem-mutation signal tied to the isolated path, so unrelated task failures
    (for example long-running Go test timeouts with .go paths in stack traces) keep their true
    primary diagnosis instead of being misclassified as isolated-path mutation errors
  • added a contract advisory for container contexts that isolate .yarn/.yarn/releases while
    Yarn tasks run in that same context, so ota doctor warns before runtime about container
    isolation shadowing committed .yarn/releases/yarn-*.cjs artifacts
  • fixed dotnet remediation trust drift across doctor and provider-owned toolchain guidance:
    dotnet install commands are now requirement-first, use global.json only when it satisfies the
    declared contract requirement, and fall back to channel-based install guidance for broad or
    range requirements (for example 9.0 or >=9.0,<10.0) instead of surfacing conflicting exact-
    version suggestions
  • hardened ota init --pack node for monorepo/root-script truth: node starter contracts now seed
    dev and test tasks only when the root package.json actually declares scripts.dev and
    scripts.test, avoiding non-runnable default task emission on repos where those scripts live in
    subpackages only
  • added first-class check-only toolchains.dotnet ownership for .NET repos and migrated
    ota init --pack dotnet to seed provider: dotnet under toolchains instead of split
    runtimes.dotnet / tools.dotnet / duplicate installed checks
  • updated the shell installer and install docs to point optional skill setup at
    npx skills add ota-run/skills --full-depth instead of separate Codex and Claude Code
    ota skills install commands
  • tightened the shell installer success receipt so optional skill setup now renders on one compact
    line (Install Ota skill: npx skills add ota-run/skills --full-depth) without changing the
    existing accent color treatment
  • recorded the Hoppscotch pressure-test adoption outcome in the v9.1 pressure-test ledger
    (hoppscotch/hoppscotch#6382 closed as not planned) while preserving the contract/matrix
    evidence as reusable Ota readiness signal
  • promoted the remaining maturity backlog into explicit pressure-ledger entries with concrete
    acceptance evidence for: (1) toolchain fulfillment depth beyond check-only providers, (2)
    pre-execution effect-governance parity for network / external_state, and (3)
    planning-doc status hygiene
  • clarified planning status semantics in the v9.1 plan (planned / active / completed) and
    marked the shipped v9.1 slice as completed so shipped work is not presented as still-planned
  • tightened explicit mode-override trust in ota run / ota execution plan: when a task declares
    execution.modes, unsupported explicit overrides (for example --mode container with only a
    native branch) now fail with a task-scoped mode-branch error that reports requested mode and
    declared mode branches instead of generic execution-plan resolution text
  • relaxed execution schema ergonomics for named-context contracts: execution.default_context /
    execution.contexts can now coexist with root execution.lifecycle and
    execution.backends defaults, while execution.preferred remains disallowed in named-context
    mode to keep backend selection unambiguous
  • expanded toolchain package-manager version validation from token-only strings to shell-safe
    version constraints (for example >=2.5.3,<2.6.0) and aligned validation messaging to
    version constraint semantics
  • expanded detector-led toolchain parity for Go and Ruby: ota detect now promotes detected
    go and ruby runtime lanes into canonical toolchains.go (provider: go) and
    toolchains.ruby (provider: ruby) ownership when repo signals confirm those ecosystems, and
    normalizes legacy tools.bundler detection into toolchains.ruby.package_managers.bundler
  • expanded detector-led .NET ownership parity: detected .NET runtime/tool lanes now converge to
    canonical toolchains.dotnet (provider: dotnet) ownership on detect write/merge so contracts
    do not regress back to split runtimes.dotnet / tools.dotnet declarations
  • expanded toolchain_repo_signals(...) support for Go (go.mod, go.work, .tool-versions)
    and Ruby (Gemfile, Gemfile.lock, .ruby-version, Rakefile, .tool-versions) so
    detector-led toolchain synthesis is gated by explicit ecosystem signals instead of broad runtime
    inference alone
  • added first-class check-only toolchains.go ownership for Go repos, updated the Go starter pack
    to emit provider: go instead of split runtimes.go ownership, removed duplicate
    toolchain-owned *-installed starter checks from Node/Python/Go/Rust packs, and kept
    starter-pack agent boundary inference aligned with toolchain-owned stacks
  • added first-class check-only toolchains.ruby ownership for Ruby repos and added
    ota init --pack ruby so starter contracts seed toolchain-owned Ruby setup/test paths instead
    of split runtime/tool declarations, including explicit Bundler version governance under
    toolchains.ruby.package_managers.bundler
  • closed planning drift for task launch sources: tasks.<name>.launch is now documented as a
    shipped baseline (command + container launch kinds), and the v9.1 pressure-test ledger now marks
    first-class task launch sources as closed
  • tightened uv-backed Python ownership so toolchains.python owns the uv tool surface and
    starter packs no longer duplicate it under top-level tools.uv
  • reject env requirements that combine secret: true with a contract default during validation,
    so ota validate, ota doctor, and dry-run previews fail before task execution reaches env
    resolution
  • fixed ota run <task> --dry-run env reporting so mode-specific task env overrides are resolved
  • fixed selected-path toolchain trust across ota doctor and ota run --dry-run: Ota now
    infers required executables from ordinary task run: / script: command bodies (not only
    launch blocks), projects toolchain-owned commands such as uv, go, dotnet, and
    bundler into the selected requirement surface, and blocks early when the chosen native or
    container context does not actually provide that owned tool instead of incorrectly reporting the
    path as runnable
  • extended toolchains.python.provider: uv so package_managers.uv declares the required uv
    version explicitly; ota doctor, ota run --dry-run, and real ota run now block early when
    the selected path resolves a uv binary outside that required version range instead of failing
    later during uv sync / uv run
  • fixed alias-aware selected-path owned-tool projection so Bundler version governance survives
    task commands that invoke bundle; ota doctor, ota run --dry-run, and real ota run now
    block early on mismatched Bundler versions instead of treating bundle as an unrelated wildcard
    tool
  • stopped treating repo-local executables such as bin/bundle as host tool probes during selected
    path inference; ota doctor and dry-run previews now let repo wrappers run inside the selected
    working tree instead of incorrectly failing early on missing global bin/... commands
  • added task env_bindings.<NAME>.from_service so contracts can derive task environment values
    from declared service endpoints, including container callers that need host-view services, and
    added password_env for secret-safe service URL credentials while keeping literal password
    limited to documented local/dev use
  • clarified container image acquisition failures during container runtime/tool probes so Ota reports
    one actionable container-image blocker instead of downstream runtime/tool probe noise
  • fixed ota run <task> --dry-run precondition scoping so task previews evaluate only the
    selected task dependency path, avoiding unrelated top-level precondition/native-prerequisite
    checks while still blocking when the selected task actually requires them
  • fixed ota run <task> --dry-run --mode container next-step rewriting so explicit host-readiness
    guidance (ota doctor --mode native) is preserved instead of being rewritten to container-mode
    ota up --dry-run commands
  • added targeted run-failure guidance for container non-root package-install errors (for example
    apt-get permission failures on /var/lib/apt/lists) so Ota points operators to baking OS
    dependencies into the container image instead of installing them inside task commands
  • added repo-scoped execution locking for ota run task execution so concurrent local runs fail
    fast with explicit lock guidance instead of contending silently on shared package/tool caches
  • added first-class effect governance policy under policies.effects (mode + tasks +
    safe_tasks, each using allow|warn|deny for network lanes and external-state targets),
    enforced deny decisions pre-execution in both ota run and ota up preflights, and surfaced
    resolved governance decisions in run receipts under the existing policy evidence lines
  • hardened ota up effect-governance enforcement to fail closed before provisioning/setup side
    effects whenever selected-path policy decisions resolve to deny, including workflows that declare
    a setup task
  • allowed policy-governed fulfillment: run for toolchains.go, toolchains.ruby, and
    toolchains.dotnet (removing check-only validation blocks for those providers) while keeping
    provisioning authority in org policy/back-end requirement fulfillment
  • allowed policy-governed fulfillment: run for toolchains.node (provider: corepack) and
    toolchains.java (provider: sdkman) by removing check-only validation blocks and treating
    those fulfillment lanes as selected-path run intent governed by org policy/provisioning rules
  • added --effect-override <effect>=<allow|warn|deny> to ota run and ota up for explicit
    per-invocation effect-governance overrides on selected task/workflow paths

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 ota-run/ota](https:

Get notified when new releases ship.

Sign up free

About ota-run/ota](https:

All releases →

Related context

Earlier breaking changes

  • v1.6.16 Enforce `metadata.ota.minimum_version` at contract load time across all commands.

Beta — feedback welcome: [email protected]