This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+5 more
Affected surfaces
ReleasePort's take
Light signalRelease 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 summaryAdded repo-scoped execution locking, effect‑governance policies, env bindings from services, and host‑architecture scoping.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| 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) andwhich(Unix) are now excluded from
inferred tool requirements so thatrun: where clin a task or check no longer triggers a
spuriouswhere --versionprobe that exits with code 1 on Windows - hardened selected-path command inference for shell wrappers:
ota doctorandota run --dry-run
no longer infer wrapper shells likesh,bash, orzshfromrun:/script:bodies as
required tools, avoiding bogus shell-version probes on wrapper forms such assh -c '...' - fixed Corepack-managed container tool probing in
ota doctor: owned package-manager tools such
asyarnare now probed through the normal container backend in the repo workdir, so contracts
that rely onpackageManagertruth no longer drift to global image defaults during diagnosis - hardened ephemeral container cleanup after container-backed probes and dry-runs: Ota now retries
transient Dockerremoval of container ... is already in progressraces instead of surfacing
them as spurious probe failures when the container cleanup path briefly lags - fixed a container workflow preflight trust gap in
ota doctorandota up --dry-run: selected
container task/workflow paths now evaluate required env the same wayota run --dry-rundoes,
instead of suppressing real env blockers behind the generic "host-only checks" note - hardened
ota doctorfor 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 doctorservice 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 wheneverworkflows.<name>.services.required
was empty - hardened workflow-scoped
ota doctorgating: 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 doctornow
executes.cmd/.battool probes throughcmd /Cinstead 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 inota 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 Dockervolume is in usecleanup races with backoff instead of turning a proven ready
container proof into a cleanup failure on the first short release lag - improved
ota runfailure excerpts for noisy test runners: Ota now prioritizes real failing-test
markers such asFAIL,Failed Tests, andAssertionErrorover 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 doctorandota run: Ota no longer
prependsmiseshim 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 execenvironments 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.pythonwithprovider: uv
now probes Python runtime candidates (python3.12,python3,python) instead of probing
theuvexecutable as if it were the runtime, so native/container diagnosis no longer reports
boguspython@uv-versionmismatches 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.gopaths 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/releaseswhile
Yarn tasks run in that same context, soota doctorwarns before runtime about container
isolation shadowing committed.yarn/releases/yarn-*.cjsartifacts - fixed dotnet remediation trust drift across doctor and provider-owned toolchain guidance:
dotnet install commands are now requirement-first, useglobal.jsononly when it satisfies the
declared contract requirement, and fall back to channel-based install guidance for broad or
range requirements (for example9.0or>=9.0,<10.0) instead of surfacing conflicting exact-
version suggestions - hardened
ota init --pack nodefor monorepo/root-script truth: node starter contracts now seed
devandtesttasks only when the rootpackage.jsonactually declaresscripts.devand
scripts.test, avoiding non-runnable default task emission on repos where those scripts live in
subpackages only - added first-class check-only
toolchains.dotnetownership for .NET repos and migrated
ota init --pack dotnetto seedprovider: dotnetundertoolchainsinstead 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-depthinstead of separate Codex and Claude Code
ota skills installcommands - 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#6382closed 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 fornetwork/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 ascompletedso 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 containerwith 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.contextscan now coexist with rootexecution.lifecycleand
execution.backendsdefaults, whileexecution.preferredremains 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 constraintsemantics - expanded detector-led toolchain parity for Go and Ruby:
ota detectnow promotes detected
goandrubyruntime lanes into canonicaltoolchains.go(provider: go) and
toolchains.ruby(provider: ruby) ownership when repo signals confirm those ecosystems, and
normalizes legacytools.bundlerdetection intotoolchains.ruby.package_managers.bundler - expanded detector-led .NET ownership parity: detected
.NETruntime/tool lanes now converge to
canonicaltoolchains.dotnet(provider: dotnet) ownership on detect write/merge so contracts
do not regress back to splitruntimes.dotnet/tools.dotnetdeclarations - 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.goownership for Go repos, updated the Go starter pack
to emitprovider: goinstead of splitruntimes.goownership, removed duplicate
toolchain-owned*-installedstarter 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.rubyownership for Ruby repos and added
ota init --pack rubyso 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>.launchis 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.pythonowns theuvtool surface and
starter packs no longer duplicate it under top-leveltools.uv - reject env requirements that combine
secret: truewith a contractdefaultduring validation,
soota validate,ota doctor, and dry-run previews fail before task execution reaches env
resolution - fixed
ota run <task> --dry-runenv reporting so mode-specific task env overrides are resolved - fixed selected-path toolchain trust across
ota doctorandota run --dry-run: Ota now
infers required executables from ordinary taskrun:/script:command bodies (not only
launchblocks), projects toolchain-owned commands such asuv,go,dotnet, and
bundlerinto 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: uvsopackage_managers.uvdeclares the required uv
version explicitly;ota doctor,ota run --dry-run, and realota runnow block early when
the selected path resolves a uv binary outside that required version range instead of failing
later duringuv sync/uv run - fixed alias-aware selected-path owned-tool projection so Bundler version governance survives
task commands that invokebundle;ota doctor,ota run --dry-run, and realota runnow
block early on mismatched Bundler versions instead of treatingbundleas an unrelated wildcard
tool - stopped treating repo-local executables such as
bin/bundleas host tool probes during selected
path inference;ota doctorand dry-run previews now let repo wrappers run inside the selected
working tree instead of incorrectly failing early on missing globalbin/...commands - added task
env_bindings.<NAME>.from_serviceso contracts can derive task environment values
from declared service endpoints, including container callers that need host-view services, and
addedpassword_envfor secret-safe service URL credentials while keeping literalpassword
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-runprecondition 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 containernext-step rewriting so explicit host-readiness
guidance (ota doctor --mode native) is preserved instead of being rewritten to container-mode
ota up --dry-runcommands - added targeted run-failure guidance for container non-root package-install errors (for example
apt-getpermission 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 runtask 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 usingallow|warn|denyfor network lanes and external-state targets),
enforced deny decisions pre-execution in bothota runandota uppreflights, and surfaced
resolved governance decisions in run receipts under the existingpolicyevidence lines - hardened
ota upeffect-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: runfortoolchains.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: runfortoolchains.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>toota runandota upfor 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
About ota-run/ota](https:
All releases →Related context
Related tools
Earlier breaking changes
- v1.6.16 Enforce `metadata.ota.minimum_version` at contract load time across all commands.
Beta — feedback welcome: [email protected]