<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ota</title>
    <description>The latest articles on DEV Community by Ota (otaready).</description>
    <link>https://dev.to/otaready</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F13336%2F550b6b86-9e5e-4da6-a747-80a7dd35ead3.png</url>
      <title>DEV Community: Ota</title>
      <link>https://dev.to/otaready</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/otaready"/>
    <language>en</language>
    <item>
      <title>Ota on dbmask: Proving a Synthetic PostgreSQL Masking Lane</title>
      <dc:creator>Bobai Kaeto</dc:creator>
      <pubDate>Tue, 29 Sep 2026 12:33:25 +0000</pubDate>
      <link>https://dev.to/otaready/ota-on-dbmask-proving-a-synthetic-postgresql-masking-lane-1hk2</link>
      <guid>https://dev.to/otaready/ota-on-dbmask-proving-a-synthetic-postgresql-masking-lane-1hk2</guid>
      <description>&lt;h2&gt;
  
  
  A green command was not the acceptance condition
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/sealandseacat/dbmask" rel="noopener noreferrer"&gt;dbmask&lt;/a&gt; masks database content. The useful question for this integration was specific: could a declared task run the intended masking sequence and retain&lt;br&gt;
evidence that its result matched the observed state of a disposable PostgreSQL database? A command exiting zero would not answer that on its own.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sealandseacat/dbmask/pull/37" rel="noopener noreferrer"&gt;PR #37&lt;/a&gt; added a reviewable &lt;code&gt;ota.yaml&lt;/code&gt; pinned to released Ota v1.6.28 and a separate, non-blocking Ota workflow. The existing SQLite CI stayed in place. The added PostgreSQL 16 lane uses only synthetic data.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the lane actually checks
&lt;/h2&gt;

&lt;p&gt;The lane seeds two disposable databases, scans, performs a masking dry run, applies the mask, and runs strict validation. Repository-owned assertions check that the dry run preserves both databases. After apply, they check source preservation, target primary keys and &lt;code&gt;account_status&lt;/code&gt;, and changed target &lt;code&gt;full_name&lt;/code&gt; and &lt;code&gt;email&lt;/code&gt; values.&lt;/p&gt;

&lt;p&gt;The negative control restores one original synthetic sensitive value after masking. Strict validation must then refuse that row with &lt;code&gt;masking_completeness&lt;/code&gt;. This shows the selected validator notices a deliberate violation in the exercised fixture. Ota declares and runs the selected path; dbmask's fixture and validator own the database assertions. The workflow uploads the native and&lt;br&gt;
PostgreSQL lane outputs from &lt;code&gt;ota-pressure/native/&lt;/code&gt; and &lt;code&gt;ota-pressure/postgresql/&lt;/code&gt; as CI artifacts.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/bobaikato/dbmask/actions/runs/36409528942" rel="noopener noreferrer"&gt;released-pin fork matrix&lt;/a&gt; and &lt;a href="https://github.com/sealandseacat/dbmask/actions/runs/36409530097" rel="noopener noreferrer"&gt;upstream PR matrix&lt;/a&gt; passed the contract-to-CI drift check, the selected SQLite contributor lanes on Ubuntu, macOS, and Windows, and the synthetic PostgreSQL lane on Linux. Those checks covered PR head &lt;code&gt;9f75a339e09fa3d762094ffee2ef612f93065e41&lt;/code&gt;. The upstream maintainer merged the bounded integration as commit &lt;code&gt;7d8789ef4883a423ddba2f8934b95997d1aaf099&lt;/code&gt; on 29 September 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this changes for Ota
&lt;/h2&gt;

&lt;p&gt;The integration shows an additive, non-blocking path into an existing repository: keep established CI, add one explicit contract and one selected evidence lane, and make the proof limits reviewable.&lt;br&gt;
The negative control makes the PostgreSQL result more informative than a passing command alone. This case exposed no confirmed Ota Core defect in the selected lane.&lt;/p&gt;

&lt;p&gt;The coverage remains narrow. It does not establish production-data safety, arbitrary database state, general PostgreSQL compatibility, MySQL behavior, release readiness, or repository-wide governance. The separate date-classification fix is dbmask-owned and outside this lane. The merge confirms maintainer acceptance of this contribution; it does not establish ongoing use or endorsement.&lt;/p&gt;




&lt;p&gt;originally posted here: &lt;a href="https://ota.run/blog/pressure-testing-ota-on-dbmask-postgresql-5m9q" rel="noopener noreferrer"&gt;https://ota.run/blog/pressure-testing-ota-on-dbmask-postgresql-5m9q&lt;/a&gt;&lt;/p&gt;

</description>
      <category>pressuretesting</category>
      <category>dbmask</category>
      <category>postgres</category>
      <category>executioncontract</category>
    </item>
    <item>
      <title>Ota v1.6.28: Secret Requirements and Linked Worktrees</title>
      <dc:creator>Bobai Kaeto</dc:creator>
      <pubDate>Sat, 26 Sep 2026 22:56:08 +0000</pubDate>
      <link>https://dev.to/otaready/ota-v1628-secret-requirements-and-linked-worktrees-42c4</link>
      <guid>https://dev.to/otaready/ota-v1628-secret-requirements-and-linked-worktrees-42c4</guid>
      <description>&lt;h2&gt;
  
  
  Idea
&lt;/h2&gt;

&lt;p&gt;Ota &lt;code&gt;v1.6.28&lt;/code&gt; begins V12.1: governed secret delivery.&lt;/p&gt;

&lt;p&gt;Repositories already need to declare that selected work depends on credentials. The unsafe version of that declaration mixes intent with implementation: provider names, account identifiers, secret paths, environment values, and delivery scripts become repository-owned configuration. That makes the contract less portable and creates more places for sensitive operational truth to drift.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;v1.6.28&lt;/code&gt; establishes a narrower boundary. A contract can declare which selected tasks or workflows require an authentication credential, where a future delivery mechanism would make it available, and which propagation paths must remain denied. Ota derives that requirement from the exact selected closure and refuses before work begins while protected delivery truth is unavailable.&lt;/p&gt;

&lt;p&gt;This release does not deliver secrets. It makes secret intent explicit without allowing a repository declaration, an ambient environment value, or an incomplete provider integration to be mistaken for delivery authority.&lt;/p&gt;

&lt;p&gt;The release also removes practical sources of execution drift: container tasks can run from ordinary linked Git worktrees, Yarn 1 hydration has an explicit typed path, generated &lt;code&gt;AGENTS.md&lt;/code&gt; ownership is safer, and Corepack-backed commands use the declared package manager instead of an ambient global shim.&lt;/p&gt;

&lt;h2&gt;
  
  
  Feature
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Provider-neutral secret requirements
&lt;/h3&gt;

&lt;p&gt;Contracts requiring Ota &lt;code&gt;v1.6.28&lt;/code&gt; or later can declare a &lt;code&gt;secret_requirements&lt;/code&gt; catalog. The initial surface describes authentication credentials intended for a canonical process-environment destination and exact task and workflow recipients. It does not deliver those credentials.&lt;/p&gt;

&lt;p&gt;This excerpt from the &lt;a href="https://github.com/ota-run/ota/blob/v1.6.28/docs/pressure/fixtures/secret-delivery-service-path/ota.yaml" rel="noopener noreferrer"&gt;release fixture&lt;/a&gt; declares a requirement for its separately defined &lt;code&gt;governed&lt;/code&gt; task without placing a credential value or secret locator in the repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;ota&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;minimum_version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1.6.28"&lt;/span&gt;

&lt;span class="na"&gt;secret_requirements&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;provider_api_token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;secret_class&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;authentication_credential&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;external_api_authentication&lt;/span&gt;
    &lt;span class="na"&gt;delivery&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;process_environment&lt;/span&gt;
      &lt;span class="na"&gt;variable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;GOOGLE_API_KEY&lt;/span&gt;
    &lt;span class="na"&gt;recipients&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;tasks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;governed&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="na"&gt;dependencies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deny&lt;/span&gt;
      &lt;span class="na"&gt;hooks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deny&lt;/span&gt;
      &lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deny&lt;/span&gt;
      &lt;span class="na"&gt;helpers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deny&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deny&lt;/span&gt;
      &lt;span class="na"&gt;remote_execution&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deny&lt;/span&gt;
      &lt;span class="na"&gt;proof_observers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deny&lt;/span&gt;
      &lt;span class="na"&gt;negative_controls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deny&lt;/span&gt;
      &lt;span class="na"&gt;lifecycle_children&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deny&lt;/span&gt;
    &lt;span class="na"&gt;constraints&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;actor_mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ci&lt;/span&gt;
      &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
      &lt;span class="na"&gt;execution_mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;native&lt;/span&gt;
      &lt;span class="na"&gt;target_platform&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;linux&lt;/span&gt;
      &lt;span class="na"&gt;runtime_boundary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;process&lt;/span&gt;
      &lt;span class="na"&gt;capability&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;segmented_process_environment&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;GOOGLE_API_KEY&lt;/code&gt; names the process-environment destination, not a provider binding or proof that the credential exists. Every propagation edge is explicitly denied.&lt;/p&gt;

&lt;p&gt;Validation rejects provider selectors, cloud projects, tenants, secret paths or versions, GitHub secret names, values, defaults, noncanonical recipients, and destinations already owned by compatibility environment or execution-context truth. The minimum-version floor prevents older Ota versions from silently ignoring the declaration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fail-closed command admission
&lt;/h3&gt;

&lt;p&gt;Secret requirements participate in command-scoped admission for &lt;code&gt;ota run&lt;/code&gt;, &lt;code&gt;ota up&lt;/code&gt;, runtime and lifecycle proof, Doctor context, CI projection and re-evaluation, sandbox capability, and harness output.&lt;/p&gt;

&lt;p&gt;When the selected closure has no secret requirement, admission remains &lt;code&gt;not_applicable&lt;/code&gt; and existing behavior is unchanged. When it does, the current release refuses with &lt;code&gt;secret_delivery_protected_truth_unavailable&lt;/code&gt; before setup, dependency hydration, workflow environment rendering, durable logs, services, proof artifacts, child creation, repository mutation, or provider contact.&lt;/p&gt;

&lt;p&gt;For that fixture, &lt;code&gt;ota run governed --native --dry-run --json&lt;/code&gt; refuses rather than previewing a runnable task. Selected fields from its JSON result keep the limit explicit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ok"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"secret_delivery_protected_truth_unavailable"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"preview_status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BLOCKED"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"execution_started"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"secret_delivery_admission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"refused"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"availability"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not_checked"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"provider_contact"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not_attempted"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"delivery"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not_attempted"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An existing environment variable with the same name does not satisfy the governed requirement. Within Ota-selected execution, agents and CI cannot satisfy it with ambient values or repository-local secret-loading glue. Ota does not govern commands run outside its execution path.&lt;/p&gt;

&lt;h3&gt;
  
  
  Provider-free foundations, not delivery
&lt;/h3&gt;

&lt;p&gt;Behind this refusal, Core can reconstruct the selected requirement, recipient closure, protected binding and source identities, adapter profile, and provider-free plan. The first sealed adapter&lt;br&gt;
profile is bounded to GitHub Actions OIDC and Google Secret Manager on a Linux/x64 protected runner. These are internal foundations for a later transaction, not a usable provider integration: &lt;code&gt;v1.6.28&lt;/code&gt; makes no OIDC request, contacts no provider, and produces no secret-delivery receipt.&lt;/p&gt;
&lt;h3&gt;
  
  
  Linked Git worktrees now run in containers
&lt;/h3&gt;

&lt;p&gt;Unix container execution now supports ordinary linked Git worktrees. Ota verifies Git pointer metadata and translates it through runner-owned, read-only mounts. The common Git directory follows the selected workspace access posture.&lt;/p&gt;

&lt;p&gt;Malformed, aliased, or unsupported metadata is refused rather than allowing a container to start with host-only Git paths. The boundary is intentionally local: it relies on a protected per-user runner-state root and does not claim protection from a hostile concurrent process running as the same operating-system user.&lt;/p&gt;

&lt;p&gt;This closes an important day-to-day gap for agents and maintainers who use isolated worktrees but still expect the contract's container lane to behave like the canonical repository execution path.&lt;/p&gt;
&lt;h3&gt;
  
  
  Typed Yarn Classic hydration
&lt;/h3&gt;

&lt;p&gt;Typed Node dependency hydration now supports:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;node_package_manager&lt;/span&gt;
  &lt;span class="na"&gt;manager&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yarn&lt;/span&gt;
  &lt;span class="na"&gt;yarn_release&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;classic&lt;/span&gt;
  &lt;span class="na"&gt;frozen_lockfile&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ota renders &lt;code&gt;yarn install --frozen-lockfile&lt;/code&gt; for Yarn 1 instead of modern Yarn's &lt;code&gt;--immutable&lt;/code&gt;. Existing Yarn contracts retain their modern behavior, and incompatible Classic plus &lt;code&gt;inline_builds&lt;/code&gt; declarations are rejected.&lt;/p&gt;

&lt;p&gt;Native Corepack run fulfillment is tighter too. Structured task commands and typed Node hydration are dispatched through &lt;code&gt;corepack &amp;lt;manager&amp;gt;&lt;/code&gt;, so an ambient global Yarn or pnpm shim cannot replace the declared package-manager version. Opaque shell bodies remain repository-owned and unchanged.&lt;/p&gt;

&lt;h3&gt;
  
  
  Safer generated agent guidance
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ota agents --review&lt;/code&gt; and &lt;code&gt;ota agents --write&lt;/code&gt; now recognize generated guidance only when it occupies one uniquely delimited managed block.&lt;/p&gt;

&lt;p&gt;Duplicate, reversed, ambiguous, or stale markers no longer appear synchronized merely because matching text exists elsewhere in &lt;code&gt;AGENTS.md&lt;/code&gt;. Write mode refuses ambiguous layouts without modifying the file, preserves ordinary prose containing marker text, migrates exact legacy generated-only files, and does not treat an unreadable existing file as missing.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ota tasks --use&lt;/code&gt;, including the canonical &lt;code&gt;ota tasks --safe --use&lt;/code&gt; discovery lane, also renders task &lt;code&gt;notes&lt;/code&gt;. Proof limits, external boundaries, and operational guidance are therefore visible before an agent chooses a runnable task.&lt;/p&gt;

&lt;h3&gt;
  
  
  Readiness and detection improvements
&lt;/h3&gt;

&lt;p&gt;Rich output now shows a compact &lt;code&gt;Ota Readiness&lt;/code&gt; success summary before publishing runtime endpoints. It names only the resolved listener, aggregate probe count, and observed attempt; detailed targets remain failure and retry diagnostics. JSON and plain output are unchanged.&lt;/p&gt;

&lt;p&gt;The release also tightens several discovery and diagnosis paths:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Optional nested .NET marker discovery skips permission-denied descendants; requested roots and selected sources still fail closed.&lt;/li&gt;
&lt;li&gt;source-bound candidates retain nested &lt;code&gt;.sln&lt;/code&gt; and &lt;code&gt;.csproj&lt;/code&gt; observations&lt;/li&gt;
&lt;li&gt;Taskfile helpers beginning with &lt;code&gt;_&lt;/code&gt; or marked &lt;code&gt;internal: true&lt;/code&gt; stay out of runnable task truth&lt;/li&gt;
&lt;li&gt;repeated reusable GitHub Actions verification steps collapse into one readable inferred task&lt;/li&gt;
&lt;li&gt;named Actions steps with unresolved matrix or shell expressions cannot become runnable tasks&lt;/li&gt;
&lt;li&gt;Rust diagnosis requires comparable semantic versions; rustup-owned fulfillment still accepts &lt;code&gt;stable&lt;/code&gt;, &lt;code&gt;beta&lt;/code&gt;, and &lt;code&gt;nightly&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;CI drift detection recognizes &lt;code&gt;ota run &amp;lt;aggregate&amp;gt; --agent&lt;/code&gt;, but not dry-run, dependency-skipping, malformed, or shell-indirected forms.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What this does not claim
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;v1.6.28&lt;/code&gt; does not store, resolve, request, materialize, inject, or deliver secret bytes. It does not authorize execution of a secret-requiring selected closure, contact GitHub's OIDC endpoint or Google Secret Manager, or produce positive secret-delivery evidence. A declaration proves only that the repository has made its intent reviewable; a refusal proves only that Ota stopped the selected closure at the governed boundary.&lt;/p&gt;

&lt;p&gt;Linked-worktree translation does not provide hostile same-user process isolation. A green readiness summary does not expand the underlying probe evidence. Typed hydration does not make a networked setup lane automatically agent-safe.&lt;/p&gt;

&lt;p&gt;These limits are part of the execution contract, not caveats around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Docs
&lt;/h2&gt;

&lt;p&gt;Use the live references for the current contract, command, and agent-guidance behavior:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ota.run/docs/install" rel="noopener noreferrer"&gt;Install Ota&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ota.run/docs/reference/contract" rel="noopener noreferrer"&gt;Contract Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ota.run/docs/reference/command" rel="noopener noreferrer"&gt;Command Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ota.run/docs/agent-quickstart" rel="noopener noreferrer"&gt;Agent Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ota.run/docs/reference/json-output" rel="noopener noreferrer"&gt;JSON Output Reference&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Release
&lt;/h2&gt;

&lt;p&gt;Ota &lt;code&gt;v1.6.28&lt;/code&gt; is live at&lt;br&gt;
&lt;a href="https://ota.run/releases/v1.6.28" rel="noopener noreferrer"&gt;ota.run/releases/v1.6.28&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Upgrade and inspect the repository's governed execution surface:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ota upgrade &lt;span class="nt"&gt;--version&lt;/span&gt; v1.6.28
ota &lt;span class="nt"&gt;--version&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt;
ota validate
ota doctor &lt;span class="nt"&gt;--json&lt;/span&gt;
ota tasks &lt;span class="nt"&gt;--safe&lt;/span&gt; &lt;span class="nt"&gt;--use&lt;/span&gt;
ota run &amp;lt;task&amp;gt; &lt;span class="nt"&gt;--dry-run&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt;
ota up &lt;span class="nt"&gt;--workflow&lt;/span&gt; &amp;lt;workflow&amp;gt; &lt;span class="nt"&gt;--dry-run&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;a href="https://github.com/ota-run/ota/releases/tag/v1.6.28" rel="noopener noreferrer"&gt;GitHub release&lt;/a&gt; contains the shipped binaries, checksums, and complete patch-level changelog.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;v1.6.28&lt;/code&gt; makes a strategically important distinction durable: a repository may declare that selected work needs a credential without owning the provider binding, secret locator, secret value, or delivery authority. Until protected truth can satisfy that declaration, Ota refuses before work begins and says exactly what it did not attempt.&lt;/p&gt;

&lt;p&gt;At the same time, linked-worktree container support, explicit Yarn Classic hydration, managed agent-guidance boundaries, and tighter detection make the ordinary execution path more deterministic. The result is stronger governance at both ends: clearer intent for future protected delivery and fewer ambient assumptions in the work repositories execute today.&lt;/p&gt;




&lt;p&gt;Originally posted here: &lt;a href="https://ota.run/blog/ota-v1-6-28-release-essay" rel="noopener noreferrer"&gt;https://ota.run/blog/ota-v1-6-28-release-essay&lt;/a&gt;&lt;/p&gt;

</description>
      <category>release</category>
      <category>secretgovernance</category>
      <category>executionadmission</category>
      <category>linkedorktrees</category>
    </item>
    <item>
      <title>Native locally. Container in CI. One task should still mean one thing.</title>
      <dc:creator>Adamma</dc:creator>
      <pubDate>Mon, 21 Sep 2026 13:29:42 +0000</pubDate>
      <link>https://dev.to/otaready/native-locally-container-in-ci-one-task-should-still-mean-one-thing-2ncj</link>
      <guid>https://dev.to/otaready/native-locally-container-in-ci-one-task-should-still-mean-one-thing-2ncj</guid>
      <description>&lt;p&gt;Execution drift begins when each environment gets a different task definition. A developer runs one command locally, CI runs another in a container, and an AI agent has to guess which one applies.&lt;/p&gt;

&lt;p&gt;Ota keeps one task identity while making execution differences explicit. A task can declare native, container, or configured remote modes, each with its own context, dependencies, environment, command, and runtime details.&lt;/p&gt;

&lt;p&gt;The agent follows the selected contract path, not a guess.&lt;/p&gt;

&lt;p&gt;Different environments are not identical. Ota makes the differences reviewable.&lt;/p&gt;

&lt;p&gt;Ota is open source. Request a demo: &lt;a href="mailto:demo@ota.run"&gt;demo@ota.run&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>AI Agents Shouldn’t Have To Guess Which Services Must Be Running</title>
      <dc:creator>Adamma</dc:creator>
      <pubDate>Wed, 16 Sep 2026 13:11:01 +0000</pubDate>
      <link>https://dev.to/otaready/ai-agents-shouldnt-have-to-guess-which-services-must-be-running-4p71</link>
      <guid>https://dev.to/otaready/ai-agents-shouldnt-have-to-guess-which-services-must-be-running-4p71</guid>
      <description>&lt;p&gt;An agent can have the right command and dependencies, then still fail because Postgres wasn’t ready when the integration tests started.&lt;/p&gt;

&lt;p&gt;The usual fix is another README instruction:&lt;br&gt;
Start Postgres first.&lt;/p&gt;

&lt;p&gt;That works until an AI agent, CI job, or new developer misses it.&lt;/p&gt;

&lt;p&gt;Ota puts that prerequisite in the execution contract. A task can declare &lt;code&gt;requires_services: [postgres]&lt;/code&gt;, allowing Ota to start the declared service and check its readiness before running the task.&lt;/p&gt;

&lt;p&gt;The dependency travels with the task instead of living in someone’s memory or a separate setup guide.&lt;/p&gt;

&lt;p&gt;The result is a consistent, reviewable execution path for developers, CI, and AI agents.&lt;/p&gt;

&lt;p&gt;Want to see it in practice?&lt;/p&gt;

&lt;p&gt;Request a free demo at &lt;a href="mailto:demo@ota.run"&gt;demo@ota.run&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>productivity</category>
      <category>agents</category>
      <category>ai</category>
    </item>
    <item>
      <title>Does your repository have more than one version of “how to run it”?</title>
      <dc:creator>Adamma</dc:creator>
      <pubDate>Thu, 10 Sep 2026 16:22:37 +0000</pubDate>
      <link>https://dev.to/otaready/does-your-repository-have-more-than-one-version-of-how-to-run-it-55g9</link>
      <guid>https://dev.to/otaready/does-your-repository-have-more-than-one-version-of-how-to-run-it-55g9</guid>
      <description>&lt;p&gt;Perhaps local setup, CI, containers, and AI agents all follow slightly different paths, and a green result does not always mean the same thing.&lt;/p&gt;

&lt;p&gt;Ota is offering a free execution-readiness review for a small number of open-source projects and engineering teams.&lt;/p&gt;

&lt;p&gt;We’ll review one selected repository, identify conflicting or incomplete execution paths, and prepare a reviewable draft integration showing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the canonical setup and verification path;&lt;/li&gt;
&lt;li&gt;which native, container, and CI lanes actually work;&lt;/li&gt;
&lt;li&gt;what each result proves;&lt;/li&gt;
&lt;li&gt;what remains unverified.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;This is not a paid service or sales trial.&lt;/strong&gt;&lt;br&gt;
If this sounds familiar, message me or email &lt;strong&gt;&lt;a href="mailto:adamma@ota.run"&gt;adamma@ota.run&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>developers</category>
      <category>networking</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Output Parity Is Not Input Parity: What Execution Evidence Must Bind</title>
      <dc:creator>Bobai Kaeto</dc:creator>
      <pubDate>Mon, 07 Sep 2026 18:29:53 +0000</pubDate>
      <link>https://dev.to/otaready/output-parity-is-not-input-parity-what-execution-evidence-must-bind-48o3</link>
      <guid>https://dev.to/otaready/output-parity-is-not-input-parity-what-execution-evidence-must-bind-48o3</guid>
      <description>&lt;h2&gt;
  
  
  A Green Output Can Still Be Built On The Wrong Input
&lt;/h2&gt;

&lt;p&gt;Software verification often begins too late.&lt;/p&gt;

&lt;p&gt;Teams compare outputs, run smoke tests, check exit codes, and inspect whether a generated artifact looks plausible. Those checks matter. But they cannot answer a more basic question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Did every consumer receive the same intended input?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the answer is unknown, output parity is weak evidence.&lt;/p&gt;

&lt;p&gt;Two programs can both complete successfully while solving different problems. One adapter may truncate precision. One wrapper may drop a flag. One generated client may normalize a field differently. One CI lane may render a template with different environment truth.&lt;/p&gt;

&lt;p&gt;The outputs may still look reasonable. The commands may still exit zero. The smoke tests may all pass.&lt;/p&gt;

&lt;p&gt;The parity inference is still untrustworthy.&lt;/p&gt;

&lt;p&gt;Ota's position is direct: &lt;strong&gt;acceptance evidence must bind what was declared, what was delivered, where it ran, and what was observed. Output alone is not enough.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Failure Output Tests Cannot See
&lt;/h2&gt;

&lt;p&gt;A recent &lt;a href="https://github.com/anthropics/claude-code/issues/83732" rel="noopener noreferrer"&gt;Claude Code issue&lt;/a&gt; describes a useful failure shape. Two companion tools were generated from one specification and processed a large body of work. Their outputs survived smoke testing and output-side fault checks.&lt;/p&gt;

&lt;p&gt;But one input path had reduced numeric precision. The tools were not receiving equivalent inputs, so they were not actually evaluating the same problem.&lt;/p&gt;

&lt;p&gt;That is not merely a testing mistake. It is an evidence-design mistake.&lt;/p&gt;

&lt;p&gt;The verification system asked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;did both tools run?&lt;/li&gt;
&lt;li&gt;did both produce output?&lt;/li&gt;
&lt;li&gt;did the output survive selected checks?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It did not establish:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which canonical input each tool was meant to receive&lt;/li&gt;
&lt;li&gt;which transformation produced each delivered representation&lt;/li&gt;
&lt;li&gt;whether the delivered representations were semantically equivalent&lt;/li&gt;
&lt;li&gt;whether the checks exercised the exact input path later used in real execution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once that link is missing, output comparison begins after the divergence has already happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Hash Is Useful, But A Hash Is Not The Whole Model
&lt;/h2&gt;

&lt;p&gt;A digest is useful for byte identity, but incomplete.&lt;/p&gt;

&lt;p&gt;A digest can establish the identity of bytes. It does not automatically establish:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;that the bytes came from the canonical declared source&lt;/li&gt;
&lt;li&gt;that the renderer used the intended version and configuration&lt;/li&gt;
&lt;li&gt;that two different representations are semantically equivalent&lt;/li&gt;
&lt;li&gt;that the consumer actually received the recorded representation&lt;/li&gt;
&lt;li&gt;that the proof exercised the same path used by the real task&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, a JSON fixture and a command-line argument may encode the same logical value in different forms. Their byte digests should differ. The important question is whether each form was derived correctly from the same canonical input and delivered to the intended consumer.&lt;/p&gt;

&lt;p&gt;That requires provenance, not just hashing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Execution Evidence Must Bind
&lt;/h2&gt;

&lt;p&gt;A trustworthy execution record needs five distinct bindings.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Declared intent
&lt;/h3&gt;

&lt;p&gt;Which contract, task, workflow, and canonical input governed the run?&lt;/p&gt;

&lt;p&gt;This prevents a successful command from floating free of the repository truth it was supposed to execute.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Delivered input
&lt;/h3&gt;

&lt;p&gt;What exact representation reached each consumer?&lt;/p&gt;

&lt;p&gt;This is stronger than recording the source file. A template, wrapper, environment projection, CLI serializer, generated SDK, or protocol adapter may change the value between source and consumer.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Transformation provenance
&lt;/h3&gt;

&lt;p&gt;Which producer, renderer, version, configuration, and transformation path created that delivered input?&lt;/p&gt;

&lt;p&gt;Without this, two matching outputs may only prove that the same untracked mistake happened twice.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Execution boundary
&lt;/h3&gt;

&lt;p&gt;Which source state, worktree, runtime, platform, mode, and isolated boundary executed the consumer?&lt;/p&gt;

&lt;p&gt;Evidence from another checkout, container, task closure, or runtime cannot silently stand in for the selected run.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Witnessed result
&lt;/h3&gt;

&lt;p&gt;What did the runner actually observe: output identity, side effects, dependency interaction, failure behavior, or an explicitly unproved boundary?&lt;/p&gt;

&lt;p&gt;This keeps execution success separate from proof breadth. A zero exit can establish that a command completed. It cannot, by itself, establish that the command received the correct input or produced the intended application behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Is Execution Governance
&lt;/h2&gt;

&lt;p&gt;This is the distinction Ota is designed to make explicit. Task runners and CI scripts can carry these bindings, but they do not establish them by default.&lt;/p&gt;

&lt;p&gt;A task runner can launch two commands.&lt;/p&gt;

&lt;p&gt;A CI workflow can compare their output files.&lt;/p&gt;

&lt;p&gt;A README can say both commands should use the same fixture.&lt;/p&gt;

&lt;p&gt;Execution governance asks whether the evidence chain is complete enough to authorize acceptance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;contract intent
  -&amp;gt; canonical input identity
  -&amp;gt; transformation identity
  -&amp;gt; delivered input identity per consumer
  -&amp;gt; selected execution boundary
  -&amp;gt; witnessed result and explicit not-proved boundaries
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If any required link is unavailable, the honest verdict is not "close enough."&lt;/p&gt;

&lt;p&gt;It is &lt;code&gt;unknown&lt;/code&gt;, &lt;code&gt;not_proved&lt;/code&gt;, or refusal, depending on the declared policy.&lt;/p&gt;

&lt;p&gt;That distinction matters for humans, CI, and AI agents. Agents are especially good at producing plausible implementations quickly. They are not a substitute for runner-authored evidence that the implementation consumed the intended truth.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Ota Already Establishes
&lt;/h2&gt;

&lt;p&gt;Ota already provides building blocks for parts of this chain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;semantic contract identity ties execution back to normalized repository truth&lt;/li&gt;
&lt;li&gt;clean source identity can bind evidence to the exercised repository state&lt;/li&gt;
&lt;li&gt;replay inputs stay separate from witnessed observations&lt;/li&gt;
&lt;li&gt;expected input identities can refuse selected execution when a governed file is missing or has changed&lt;/li&gt;
&lt;li&gt;receipts preserve runner-authored execution evidence&lt;/li&gt;
&lt;li&gt;proof output carries explicit &lt;code&gt;not_proved&lt;/code&gt; boundaries instead of turning a narrow green result into a repository-wide claim&lt;/li&gt;
&lt;li&gt;promoted replay baselines remain separate from ordinary observed output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See &lt;a href="https://ota.run/docs/reference/replay-inputs-and-trusted-baselines" rel="noopener noreferrer"&gt;Replay Inputs and Trusted Baselines&lt;/a&gt;, &lt;a href="https://ota.run/docs/reference/execution-receipt" rel="noopener noreferrer"&gt;Execution Receipt&lt;/a&gt;, and &lt;a href="https://ota.run/docs/reference/runtime-proof-evidence" rel="noopener noreferrer"&gt;Runtime Proof Evidence&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;These separations are deliberate. A previously observed output must not quietly become an input assumption. A file name must not substitute for content identity. A successful task must not become&lt;br&gt;
proof of behavior it never observed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Remaining Ota Gap
&lt;/h2&gt;

&lt;p&gt;Ota does not yet provide or claim a general, first-class proof that multiple consumers received semantically equivalent delivered inputs through different transformation paths.&lt;/p&gt;

&lt;p&gt;That is the useful next refinement exposed by this failure class.&lt;/p&gt;

&lt;p&gt;The mature shape is not a maintainer-authored &lt;code&gt;inputs_match: true&lt;/code&gt;. It is runner-authored evidence that records:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the canonical input identity&lt;/li&gt;
&lt;li&gt;each consumer and delivered representation identity&lt;/li&gt;
&lt;li&gt;the transformation or producer identity for each representation&lt;/li&gt;
&lt;li&gt;the equivalence rule that was actually evaluated&lt;/li&gt;
&lt;li&gt;the result and any unresolved semantic boundary&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Byte equality can prove exact representations match. Semantic equivalence needs a declared, reviewable comparator appropriate to the input type. If Ota cannot verify the transformation or delivery seam, it must not promote the result beyond the evidence it has.&lt;/p&gt;

&lt;p&gt;This should extend Ota's existing replay, artifact-lineage, and proof-evidence model. It should not become a parallel trust system or a vague "generated by AI" label. The risk is not that a tool was&lt;br&gt;
AI-generated. The risk is that operational trust was granted without evidence binding its inputs, execution, and effects.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Failing Gate Must Be A Stop
&lt;/h2&gt;

&lt;p&gt;There is also a governance consequence.&lt;/p&gt;

&lt;p&gt;If delivered-input equivalence is required for a lane, discovering that the evidence is missing or contradictory must block that lane. A warning that everyone learns to ignore is documentation, not governance.&lt;/p&gt;

&lt;p&gt;Any exception should be explicit, scoped, attributable, and preserved as evidence. It should not silently turn an unproved input path into an accepted one.&lt;/p&gt;

&lt;p&gt;This is the standard Ota is built around:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Declare the execution truth once. Enforce the selected boundary. Preserve evidence of what actually happened. Refuse to claim what was not proved.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom Line
&lt;/h2&gt;

&lt;p&gt;Output parity can be useful evidence.&lt;/p&gt;

&lt;p&gt;It is not input parity.&lt;/p&gt;

&lt;p&gt;Before trusting the output of generated scripts, adapters, drivers, workflows, or ordinary handwritten tools, teams need to know that each consumer received the intended input through a traceable transformation path.&lt;/p&gt;

&lt;p&gt;That is not extra metadata around execution. It is part of the execution contract itself.&lt;/p&gt;

&lt;p&gt;Ota's job is to make that chain machine-readable, enforceable, and honest enough that developers, CI systems, and AI agents do not have to infer trust from a green command and a plausible file.&lt;/p&gt;




&lt;p&gt;Originally posted: &lt;a href="https://ota.run/blog/output-parity-is-not-input-parity-what-execution-evidence-must-bind" rel="noopener noreferrer"&gt;https://ota.run/blog/output-parity-is-not-input-parity-what-execution-evidence-must-bind&lt;/a&gt;&lt;/p&gt;

</description>
      <category>executiongovernance</category>
      <category>softwareverification</category>
      <category>aiagents</category>
      <category>reproducibility</category>
    </item>
    <item>
      <title>Pressure-testing Ota on Dagger: generated SDK lineage and bounded engine truth</title>
      <dc:creator>Bobai Kaeto</dc:creator>
      <pubDate>Fri, 04 Sep 2026 11:18:15 +0000</pubDate>
      <link>https://dev.to/otaready/pressure-testing-ota-on-dagger-generated-sdk-lineage-and-bounded-engine-truth-3jce</link>
      <guid>https://dev.to/otaready/pressure-testing-ota-on-dagger-generated-sdk-lineage-and-bounded-engine-truth-3jce</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/dagger/dagger" rel="noopener noreferrer"&gt;Dagger&lt;/a&gt; is a useful pressure repository because it already has a strong execution model. Its SDKs are generated from a shared API surface, its CLI starts a Docker-backed engine, and a generated-source change has consequences beyond the command that wrote it.&lt;/p&gt;

&lt;p&gt;The useful Ota question is narrow: can Ota govern one generated TypeScript SDK closure from declared source inputs, through the generator, to a committed and replayable output without pretending to govern every Dagger SDK, engine operation, or release artifact?&lt;/p&gt;

&lt;p&gt;This note records the Ota contract and pressure boundary. It is intentionally a slice proof, not a claim that Dagger is globally ready or that Ota controls Dagger's managed engine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this repo mattered
&lt;/h2&gt;

&lt;p&gt;Generated source is easy to under-model. A CI step can run a generator and exit green while the repository still carries stale output, or while a later consumer has never actually seen the generated files.&lt;/p&gt;

&lt;p&gt;The selected Dagger shape is small enough to prove honestly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one source-managed Dagger CLI;&lt;/li&gt;
&lt;li&gt;one generator for the TypeScript SDK client;&lt;/li&gt;
&lt;li&gt;one declared generated-source artifact;&lt;/li&gt;
&lt;li&gt;one consumer that detects an uncommitted generated diff; and&lt;/li&gt;
&lt;li&gt;one promoted replay consumer that checks the reviewed baseline without regenerating it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is enough to test lineage and replay authority without converting a selected SDK path into a claim about Dagger's complete code-generation or release system.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the contract models
&lt;/h2&gt;

&lt;p&gt;The contract pins released Ota and declares the minimum compatible version. It models the generated output as a first-class artifact:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;artifacts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;typescript-sdk-client&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;generated_source&lt;/span&gt;
    &lt;span class="na"&gt;producer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sdk:generate&lt;/span&gt;
    &lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;sdk/typescript/src/api&lt;/span&gt;
    &lt;span class="na"&gt;inputs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;dagger.json&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;toolchains/typescript-sdk-dev/ts-sdk.dang&lt;/span&gt;
    &lt;span class="na"&gt;replay&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;authority_manifest&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;replay/typescript-sdk-client.ota.json&lt;/span&gt;
      &lt;span class="na"&gt;consumption&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;verify_unchanged&lt;/span&gt;

&lt;span class="na"&gt;tasks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;sdk:check-generated&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;sdk:generate&lt;/span&gt;
    &lt;span class="na"&gt;requires_artifacts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;typescript-sdk-client&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The producer invokes the declared Dagger release asset. The ordinary consumer depends on the producer and rejects a generated diff. The promoted consumer has no generation dependency; it must consume only the explicitly promoted authority and then verify the same output directory.&lt;/p&gt;

&lt;p&gt;The contract assigns Ota ownership of selected tool fulfillment, contract closure, output lineage, replay admission, and receipt evidence when those stages are reached. Dagger owns the meaning of the generator, its engine lifecycle, and the module orchestration inside that engine.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Ota pressure exposed
&lt;/h2&gt;

&lt;p&gt;The first pressure path exposed a real Ota runner defect: the declared Dagger release asset was fulfilled and version-checked, but native shell execution did not preserve the managed PATH when the generator started. The contract had named the correct tool; the runner failed to carry that truth into execution.&lt;/p&gt;

&lt;p&gt;The fix belongs in Ota, not in Dagger-specific shell glue. Native shell execution now receives the resolved managed PATH, with regression coverage for the source-managed command path.&lt;/p&gt;

&lt;p&gt;The same pressure also sharpened the engine boundary. Dagger starts an engine through Docker and performs package and module resolution inside that managed runtime. Ota can declare and verify the Dagger CLI and Docker requirement, but it does not independently attest the engine's internal package index, module image, or all external state used by the generator. Those facts remain bounded rather than silently promoted to repository proof.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pressure design
&lt;/h2&gt;

&lt;p&gt;The pressure workflow is deliberately staged. Ota must establish contract truth and admission before the repository's generator is allowed to start; generation, receipt capture, and replay are separate intended stages rather than one undifferentiated green check. This design is not itself matrix evidence.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Intended stage&lt;/th&gt;
&lt;th&gt;Intended evidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Contract and discovery&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ota validate&lt;/code&gt;, &lt;code&gt;ota tasks --use&lt;/code&gt;, and &lt;code&gt;ota tasks --safe --use&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Admission&lt;/td&gt;
&lt;td&gt;Generated SDK task and workflow dry-runs before execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Generation&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;sdk:generate&lt;/code&gt; plus &lt;code&gt;sdk:check-generated&lt;/code&gt; over the selected TypeScript API directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fulfillment&lt;/td&gt;
&lt;td&gt;Dagger &lt;code&gt;v0.21.7&lt;/code&gt; release-asset resolution and version probe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Receipt&lt;/td&gt;
&lt;td&gt;Archived selected-workflow execution evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replay&lt;/td&gt;
&lt;td&gt;Explicit record, explicit promotion, promoted consumer, and no-regeneration diff check&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diagnosis&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ota doctor&lt;/code&gt; on the fulfilled and promoted paths&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The workflow installs Ota from the contract's released source, not from a branch or implementation revision. The generated SDK lane and promoted replay lane also remain separate: recording creates evidence, promotion selects it, and replay consumes that selection without falling back to the latest local receipt.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the run established
&lt;/h2&gt;

&lt;p&gt;The released-source &lt;a href="https://github.com/bobaikato/dagger/actions/runs/32371957575" rel="noopener noreferrer"&gt;pressure run&lt;/a&gt;&lt;br&gt;
contains one Ubuntu job and concluded with failure. It is not Linux/macOS/Windows matrix evidence. The run is bound to exact Dagger revision &lt;a href="https://github.com/bobaikato/dagger/commit/3ffcd68bad1a52011c3f08f390c0093a1e0b9787" rel="noopener noreferrer"&gt;&lt;code&gt;3ffcd68bad1a52011c3f08f390c0093a1e0b9787&lt;/code&gt;&lt;/a&gt;. Its retained GitHub job logs establish only the successful stages reached before that failure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the repository installed Ota from its declared released source;&lt;/li&gt;
&lt;li&gt;the contract validated without warnings;&lt;/li&gt;
&lt;li&gt;runnable and agent-safe surfaces were inspectable;&lt;/li&gt;
&lt;li&gt;the generated SDK task and workflow could be previewed; and&lt;/li&gt;
&lt;li&gt;workflow preparation completed before the Dagger-managed generator started.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Execution then stopped inside Dagger's managed engine. Its package resolver could not satisfy the engine-internal &lt;code&gt;protobuf-dev~32&lt;/code&gt; constraint from the configured repositories. This is useful pressure evidence: the contract made the boundary visible and Ota stopped at the Dagger-managed runtime failure instead of converting a partial run into generated-source or replay proof.&lt;/p&gt;

&lt;p&gt;The generator, receipt, promotion, and replay stages were not reached. They are therefore not claimed as exercised by this run.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this does not prove
&lt;/h2&gt;

&lt;p&gt;The selected lane does not prove:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;every Dagger SDK or generated language client;&lt;/li&gt;
&lt;li&gt;Dagger documentation generation or release artifacts;&lt;/li&gt;
&lt;li&gt;the health, package index, module image, or internal state of the Dagger-managed engine;&lt;/li&gt;
&lt;li&gt;production Docker policy, registry credentials, or deployment behavior;&lt;/li&gt;
&lt;li&gt;cross-platform or repeated matrix behavior; or&lt;/li&gt;
&lt;li&gt;repository-global correctness beyond the selected generated TypeScript SDK closure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When exercised, promoted replay would not prove application correctness. It would prove only that the explicitly selected authority and output identity were consumed without the producer closure. This run did not reach that stage, and a future green replay lane would not remove the engine,release, or broader-repository boundaries above.&lt;/p&gt;

&lt;h2&gt;
  
  
  Uncovered material behavior
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Contract-owned and exercised
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;released Ota bootstrap;&lt;/li&gt;
&lt;li&gt;Dagger release-asset fulfillment and version checking;&lt;/li&gt;
&lt;li&gt;contract validation and task/workflow admission; and&lt;/li&gt;
&lt;li&gt;workflow preparation before the Dagger-managed generator started.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Contract-owned but not reached
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;the selected generated TypeScript SDK producer and consumer closure;&lt;/li&gt;
&lt;li&gt;generated-output lineage and committed-diff detection;&lt;/li&gt;
&lt;li&gt;explicit replay recording and promotion; and&lt;/li&gt;
&lt;li&gt;promoted replay consumption without regeneration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Repository- or runtime-owned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Dagger engine lifecycle and internal package/module resolution;&lt;/li&gt;
&lt;li&gt;Docker daemon policy and image availability;&lt;/li&gt;
&lt;li&gt;other SDKs, documentation, release, and deployment workflows;&lt;/li&gt;
&lt;li&gt;GitHub triggers, permissions, credentials, runners, and artifact retention; and&lt;/li&gt;
&lt;li&gt;Linux, macOS, Windows, and repeated-run matrix behavior.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ota platform gaps
&lt;/h3&gt;

&lt;p&gt;The earlier pressure path exposed and led to the repair of Ota's managed-PATH runner defect. The final released-source run exposed no additional Ota platform gap; it stopped at the bounded Dagger-managed engine dependency described above. If a later run shows that Ota cannot model a material Dagger boundary cleanly, that result belongs in a named widening opportunity rather than a repository-local helper or an over-broad proof claim.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Upstream project: &lt;a href="https://github.com/dagger/dagger" rel="noopener noreferrer"&gt;dagger/dagger&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pressure contract: &lt;a href="https://github.com/bobaikato/dagger/blob/3ffcd68bad1a52011c3f08f390c0093a1e0b9787/ota.yaml" rel="noopener noreferrer"&gt;&lt;code&gt;ota.yaml&lt;/code&gt; at the exact pressure revision&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Original Posted here: &lt;a href="https://ota.run/blog/pressure-testing-ota-on-dagger-generated-sdk-lineage-5m1a" rel="noopener noreferrer"&gt;https://ota.run/blog/pressure-testing-ota-on-dagger-generated-sdk-lineage-5m1a&lt;/a&gt;&lt;/p&gt;

</description>
      <category>pressuretesting</category>
      <category>dagger</category>
      <category>generatedartifacts</category>
      <category>sdk</category>
    </item>
    <item>
      <title>A Protected Runner Is Not Approval: Pressure-Testing Ota's First Signed Authority Carrier</title>
      <dc:creator>Bobai Kaeto</dc:creator>
      <pubDate>Wed, 02 Sep 2026 18:00:37 +0000</pubDate>
      <link>https://dev.to/otaready/a-protected-runner-is-not-approval-pressure-testing-otas-first-signed-authority-carrier-5gd9</link>
      <guid>https://dev.to/otaready/a-protected-runner-is-not-approval-pressure-testing-otas-first-signed-authority-carrier-5gd9</guid>
      <description>&lt;h2&gt;
  
  
  A runner label chooses a machine. It does not authorize a repository action.
&lt;/h2&gt;

&lt;p&gt;GitHub Actions can route a job to a self-hosted runner. A label answers one useful question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which machine is eligible to receive this job?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It does not answer the question that matters for a heavier repository action:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Is this exact publish, migration, deployment, or other non-routine task authorized to run now?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Those are different boundaries. A workflow must not be able to create its own approval merely by asking for a more privileged runner.&lt;/p&gt;

&lt;p&gt;Ota's first signed crossing-authority carrier is designed around that separation. The repository declares the governed lane. The workflow asks GitHub to schedule a protected runner. A separately managed authority source decides whether the exact lane may cross its boundary. Ota verifies that decision immediately before effects start and emits a fresh transaction record after it does.&lt;/p&gt;

&lt;p&gt;We pressure-tested that model on a pre-provisioned Linux/x64 VPS runner. One live authorization executed and produced a retained archive. Three invalid-authority cases refused before the task ran. The result is not a general approval system. It is concrete evidence for a deliberately bounded carrier.&lt;/p&gt;

&lt;h2&gt;
  
  
  The flow under pressure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Repository contract selects governed lane
        |
Workflow requests a protected runner label
        |
Protected runner invokes `ota run ... --grant &amp;lt;id&amp;gt;`
        |
Ota verifies fixed authority state and exact semantic scope
        |
One fresh crossing transaction begins
        |
Selected task runs, then receipt and archive bind admission to outcome
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each layer retains its own job:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Owns&lt;/th&gt;
&lt;th&gt;Does not own&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Repository contract&lt;/td&gt;
&lt;td&gt;Which lane requires a crossing&lt;/td&gt;
&lt;td&gt;Trust keys, grants, bundle paths, or revocations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub workflow&lt;/td&gt;
&lt;td&gt;Scheduling, checkout, credentials, and provider policy&lt;/td&gt;
&lt;td&gt;Authority issuance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authority provisioner&lt;/td&gt;
&lt;td&gt;Signed bundle, revocation, sequence state, and signing key&lt;/td&gt;
&lt;td&gt;Repository task selection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ota on the runner&lt;/td&gt;
&lt;td&gt;Admission, scope verification, transaction, receipt, and archive&lt;/td&gt;
&lt;td&gt;Issuing its own authority&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That separation is the product value. GitHub still owns scheduling and platform controls. Ota adds repository-specific governance: a way to bind independently issued authority to the complete action the repository is about to execute.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we tested
&lt;/h2&gt;

&lt;p&gt;The pressure workflow verified the exact administrator-installed Ota binary against a root-owned full-commit and SHA-256 manifest before it checked authority. It then ran Ota's read-only hardening diagnostic as the unprivileged job user. Required observations had to pass: Linux/x64, non-root execution, no declared Docker host or common Docker socket, and valid fixed trust, bundle, and sequence records.&lt;/p&gt;

&lt;p&gt;The four hosted scenarios ran against the same merged workflow revision:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;th&gt;What the evidence proves&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/bobaikato/create-chrome-extension/actions/runs/30863257307" rel="noopener noreferrer"&gt;Live grant&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Passed&lt;/td&gt;
&lt;td&gt;Exact-scope admission created a completed crossing transaction; the retained artifact contains the verified receipt archive and valid receipt history.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/bobaikato/create-chrome-extension/actions/runs/30862934335" rel="noopener noreferrer"&gt;Expired grant&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Passed&lt;/td&gt;
&lt;td&gt;Dry-run and real execution refused with &lt;code&gt;crossing_grant_expired&lt;/code&gt;; before/after checkout manifests matched.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/bobaikato/create-chrome-extension/actions/runs/30863024099" rel="noopener noreferrer"&gt;Revoked grant&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Passed&lt;/td&gt;
&lt;td&gt;Dry-run and real execution refused with &lt;code&gt;crossing_grant_revoked&lt;/code&gt;; before/after checkout manifests matched.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/bobaikato/create-chrome-extension/actions/runs/30863121110" rel="noopener noreferrer"&gt;Out-of-scope grant&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Passed&lt;/td&gt;
&lt;td&gt;Dry-run and real execution refused with &lt;code&gt;crossing_grant_out_of_scope&lt;/code&gt;; before/after checkout manifests matched.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The refusal cases are important. A green &lt;code&gt;validate&lt;/code&gt; result or a rejected command alone would not establish the boundary. The pressure workflow retained typed refusal JSON, the human refusal output, and complete checkout manifests before and after both dry-run and real refusal. The selected scaffold&lt;br&gt;
task never started.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Ota verified before the live task ran
&lt;/h2&gt;

&lt;p&gt;The repository contract names only an authority identifier:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;governance&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;crossing_authority&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;authority_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;platform-release-authority&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It does not contain the signing key, bundle location, trust-store path, or revocation state. Those live outside the checkout at fixed protected system paths:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/etc/ota/crossing-authorities.json
/var/lib/ota/crossing-authority.json
/var/lib/ota/crossing-authority-sequence.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before Ota admits the selected lane, the first carrier verifies the fixed authority binding and the signed bundle, then checks the grant's exact contract identity, complete selected execution scope, crossing family, classification, actor posture, expiry, revocation, and sequence/high-water state.&lt;/p&gt;

&lt;p&gt;The scope is not a friendly task name. Changing dependencies, hooks, task effects, target platform, or execution selection changes the semantic scope identity. A standing grant for yesterday's &lt;code&gt;publish&lt;/code&gt; lane cannot silently authorize a changed closure that happens to keep the same label.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the archive matters
&lt;/h2&gt;

&lt;p&gt;A successful run needs more than an approval-looking log line.&lt;/p&gt;

&lt;p&gt;For the live scenario, Ota created a fresh crossing transaction before the governed scaffold action, recorded its terminal success, and retained the receipt archive in the hosted artifact. Receipt history revalidated that archive rather than merely reporting that a file existed.&lt;/p&gt;

&lt;p&gt;That gives a reviewer a linked chain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;declared governed lane
        -&amp;gt; verified signed authority and semantic scope
        -&amp;gt; fresh crossing transaction
        -&amp;gt; selected task outcome
        -&amp;gt; archive that re-derives the recorded scope
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the gap Ota is intended to close. A provider can tell you that a workflow ran. Ota can preserve which repository action crossed a declared boundary, what authority admitted it, and what happened afterward.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this does not prove
&lt;/h2&gt;

&lt;p&gt;The correct claim is intentionally narrow:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The authority files were protected from the current Ota process under the observed filesystem&lt;br&gt;
boundary, and Ota verified the selected crossing against them before work started.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The carrier reports this as &lt;code&gt;current_process_filesystem_guarded&lt;/code&gt;. It does &lt;strong&gt;not&lt;/strong&gt; prove:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;provider-attested isolation between the job and an administrator;&lt;/li&gt;
&lt;li&gt;absence of every possible escalation path, mount alias, metadata credential, or host-control endpoint;&lt;/li&gt;
&lt;li&gt;a verified human, CI, or platform identity;&lt;/li&gt;
&lt;li&gt;one-use authority or atomic broker consumption;&lt;/li&gt;
&lt;li&gt;repository-global safety, application correctness, or prevention of raw-shell bypasses.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The runner's local inspection is diagnostic evidence. It cannot independently attest the whole provider boundary. A signed image or a protected label alone would not change that fact.&lt;/p&gt;

&lt;h2&gt;
  
  
  What came next
&lt;/h2&gt;

&lt;p&gt;The VPS matrix closed the pressure gate for Ota's first signed-file carrier. V11.7 later added the separate broker-backed carrier, available in Ota v1.6.26 and later, and completed its bounded OSS&lt;br&gt;
slice.&lt;/p&gt;

&lt;p&gt;The completed broker path binds launcher attestation to the job, consumes a short-lived one-use work-unit lease atomically, retains terminal cleanup and archive evidence, and proves recovery on an independently administered hardened launcher. Provider attestation remains optional stronger hardening rather than a V11.7 completion requirement.&lt;/p&gt;

&lt;p&gt;The useful and honest statement remains narrow: Ota can verify separately issued, exact-scope authority on a protected runner and produce transaction-bound evidence of execution or refusal. It does not call that provider isolation, verified human identity, raw-shell prevention, or a complete enterprise control plane.&lt;/p&gt;

&lt;p&gt;For the operator layout and verification procedure, see the canonical &lt;a href="https://ota.run/docs/reference/prebound-crossing-authority" rel="noopener noreferrer"&gt;Prebound Crossing Authority reference&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Originally posted here: &lt;a href="https://ota.run/blog/a-protected-runner-is-not-an-approval-system-4q8m" rel="noopener noreferrer"&gt;https://ota.run/blog/a-protected-runner-is-not-an-approval-system-4q8m&lt;/a&gt;&lt;/p&gt;

</description>
      <category>executiongovernance</category>
      <category>githubactions</category>
      <category>selfhostedrunners</category>
      <category>pressuretesting</category>
    </item>
    <item>
      <title>Ota v1.6.27 Now Available: Effect-Bound Refusal Assurance</title>
      <dc:creator>Bobai Kaeto</dc:creator>
      <pubDate>Tue, 01 Sep 2026 13:57:16 +0000</pubDate>
      <link>https://dev.to/otaready/ota-v1627-now-available-effect-bound-refusal-assurance-16kp</link>
      <guid>https://dev.to/otaready/ota-v1627-now-available-effect-bound-refusal-assurance-16kp</guid>
      <description>&lt;h2&gt;
  
  
  Idea
&lt;/h2&gt;

&lt;p&gt;Ota &lt;code&gt;v1.6.27&lt;/code&gt; closes V12: effect-bound refusal assurance. It adds a deliberately narrow foundation for declaring a database-schema mutation, deriving its exact selected realization, and refusing before selected work begins. Provider execution remains disabled in this release.&lt;/p&gt;

&lt;p&gt;The important boundary is exactness. Ota derives the selected contract attachment, resource, migration bytes, working directory, invocation origin, and, when policy is available, one command-scoped decision before its selected execution path begins. It can then report a refusal with &lt;code&gt;execution_started: false&lt;/code&gt; rather than starting setup or rendering a workflow preview that describes the lane as runnable.&lt;/p&gt;

&lt;p&gt;This is not a database executor, provider integration, or a claim that Ota has protected a database. It is a reviewed, machine-readable refusal boundary for one selected contract closure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Feature
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Typed effect declarations
&lt;/h3&gt;

&lt;p&gt;Contracts can declare &lt;code&gt;database_schema_mutation&lt;/code&gt; through a canonical resource binding, a typed effect definition, and an exact task attachment. Resource, consequence, attachment, evidence, and realization identities are separately content-addressed so the policy decision cannot flatten distinct sources or invocation origins into a broad task label.&lt;/p&gt;

&lt;p&gt;Declared-only commands remain review truth, not execution authority. A command without an eligible typed realization cannot become runnable merely because it names the same conceptual effect.&lt;/p&gt;

&lt;h3&gt;
  
  
  Refusal before selected work
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ota run&lt;/code&gt;, &lt;code&gt;ota up&lt;/code&gt;, &lt;code&gt;ota up --dry-run&lt;/code&gt;, runtime and lifecycle proof, CI checkout re-evaluation, and sandbox capability reporting share the typed-admission boundary. A selected typed denial is evaluated before Ota's selected setup, workflow environment rendering, proof artifacts, durable logs, services, dependencies, shell dispatch, or provider contact.&lt;/p&gt;

&lt;p&gt;Blocked &lt;code&gt;ota up --dry-run --json&lt;/code&gt; output retains the admitted non-secret application plan and available decision evidence. It contains only the refusal action, reports &lt;code&gt;BLOCKED&lt;/code&gt;, and does not say that Ota would execute the selected command.&lt;/p&gt;

&lt;h3&gt;
  
  
  Explicit policy and canary evidence
&lt;/h3&gt;

&lt;p&gt;Policy packs can evaluate exact typed-effect realizations with deterministic &lt;code&gt;deny &amp;gt; warn &amp;gt; allow&lt;/code&gt; precedence. Typed lanes stay provider-disabled even when policy evaluates to allow or warn. An effect-refusal canary passes only for one eligible realization with an applicable explicit typed deny before execution starts; fallback and unrelated denials cannot turn into a passing control.&lt;/p&gt;

&lt;h3&gt;
  
  
  Private archive reconciliation
&lt;/h3&gt;

&lt;p&gt;Operators can archive a workflow typed refusal explicitly. Ota re-derives the archived contract, selected closure, migration plan, policy snapshot, decision, typed-deny basis, and pre-execution posture before accepting it. Doctor promotes only the exact current workflow claim backed by valid private evidence; stale, task-only, ambiguous, invalid, equivalent-path, and opaque-path claims remain &lt;code&gt;unknown&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ota contract effect-refusal-candidate&lt;/code&gt; is the first review-only bridge from that evidence back to contract authoring. Its schema-v5 candidate proposes one canary declaration as &lt;code&gt;unknown&lt;/code&gt;, has no application projection, and remains non-writable through &lt;code&gt;apply-candidate&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Detector and evidence improvements
&lt;/h3&gt;

&lt;p&gt;GitHub Actions detection now retains canonical job and step working directories in source-bound task closure truth. Dynamic, noncanonical, missing, or escaping directories do not become runnable root-task claims. Named multiline verification steps remain complete ordered bodies and unresolved rather than being truncated into a promoted command.&lt;/p&gt;

&lt;p&gt;The Core-owned pressure-evidence registry records each retained case's exact revisions, matrices, exercised surfaces, proven facts, and &lt;code&gt;not_proved&lt;/code&gt; boundaries. The Site pressure index is generated from that registry; it is not a repository certification, endorsement, or badge wall.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pressure and evidence
&lt;/h3&gt;

&lt;p&gt;V12 retained immutable Linux and macOS controls for the exact selected boundaries, including typed &lt;code&gt;run&lt;/code&gt; and &lt;code&gt;up&lt;/code&gt; refusal, blocked preview construction, policy and CI re-evaluation, sandbox admission, canaries, archive history, Doctor fallback after tampering, and review-only candidate reconciliation. Final bounded real-repository matrices ran against forked Plausible and Outline revisions.&lt;/p&gt;

&lt;p&gt;The evidence is tied to exact revisions and its limits are retained alongside the claims.&lt;/p&gt;

&lt;h3&gt;
  
  
  What this does not claim
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;v1.6.27&lt;/code&gt; does not prove provider contact, authorization, or mutation behavior. It does not prove database migration success, rollback, correctness, or data integrity. It does not prove absence of arbitrary child processes, complete repository immutability, independently administered policy authority, positive execution receipts, positive assurance, public archive-export safety, or repository-wide readiness beyond the selected contract closure.&lt;/p&gt;

&lt;p&gt;Those are not release-note caveats. They are boundaries that keep a refusal Ota witnessed distinct from an outcome it did not observe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Docs
&lt;/h2&gt;

&lt;p&gt;Use the live &lt;a href="https://ota.run/docs/reference/contract" rel="noopener noreferrer"&gt;contract reference&lt;/a&gt;, &lt;a href="https://ota.run/docs/reference/policy-packs" rel="noopener noreferrer"&gt;policy-pack reference&lt;/a&gt;, and&lt;a href="https://ota.run/docs/reference/command" rel="noopener noreferrer"&gt;command reference&lt;/a&gt; for the current specification and operator flows. The &lt;a href="https://ota.run/docs/pressure-testing" rel="noopener noreferrer"&gt;pressure-testing index&lt;/a&gt; is the canonical registry for retained evidence and its limits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Release
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;v1.6.27&lt;/code&gt; is live here: &lt;a href="https://ota.run/releases/v1.6.27" rel="noopener noreferrer"&gt;https://ota.run/releases/v1.6.27&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you already use Ota, upgrade and verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ota upgrade
ota &lt;span class="nt"&gt;--version&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt;
ota validate
ota doctor &lt;span class="nt"&gt;--json&lt;/span&gt;
ota tasks &lt;span class="nt"&gt;--use&lt;/span&gt;
ota run &amp;lt;task&amp;gt; &lt;span class="nt"&gt;--dry-run&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt;
ota up &lt;span class="nt"&gt;--workflow&lt;/span&gt; &amp;lt;workflow&amp;gt; &lt;span class="nt"&gt;--dry-run&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;a href="https://github.com/ota-run/ota/releases/tag/v1.6.27" rel="noopener noreferrer"&gt;GitHub release&lt;/a&gt; contains the shipped binaries and checksums. Author only behavior your repository can review; a typed declaration is precise contract truth, not a reason to infer provider authority.&lt;/p&gt;

&lt;p&gt;If you are evaluating Ota for the first time, &lt;code&gt;v1.6.27&lt;/code&gt; shows the standard the product is setting: a consequential repository operation can be declared precisely, evaluated against exact policy truth, and refused before selected work begins without claiming an outcome Ota did not observe.&lt;/p&gt;

&lt;p&gt;Ota is not turning an effect declaration into execution authority. It is making the difference between declared intent, reviewed refusal, and proved outcome explicit enough for humans, CI, and agents to rely on.&lt;/p&gt;




&lt;p&gt;Original posted here: &lt;a href="https://ota.run/blog/ota-v1-6-27-release-essay" rel="noopener noreferrer"&gt;https://ota.run/blog/ota-v1-6-27-release-essay&lt;/a&gt;&lt;/p&gt;

</description>
      <category>release</category>
      <category>effectgovernance</category>
      <category>policy</category>
      <category>evidence</category>
    </item>
    <item>
      <title>Pressure-testing Ota on EventCatalog: generated artifact lineage across sibling consumers</title>
      <dc:creator>Bobai Kaeto</dc:creator>
      <pubDate>Fri, 28 Aug 2026 12:22:22 +0000</pubDate>
      <link>https://dev.to/otaready/pressure-testing-ota-on-eventcatalog-generated-artifact-lineage-across-sibling-consumers-1h3j</link>
      <guid>https://dev.to/otaready/pressure-testing-ota-on-eventcatalog-generated-artifact-lineage-across-sibling-consumers-1h3j</guid>
      <description>&lt;h2&gt;
  
  
  The finding
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/eventcatalog/eventcatalog" rel="noopener noreferrer"&gt;EventCatalog&lt;/a&gt; exposes a common monorepo failure mode: generated code may exist, its producer may be green, and the real downstream consumer can&lt;br&gt;
still fail. Its Langium language server generates AST, grammar, module, and syntax files; a sibling VS Code extension consumes that output alongside the workspace SDK and visualiser.&lt;/p&gt;

&lt;p&gt;The useful question is therefore not "did generation finish?" It is whether the repository can execute the complete consumer closure from declared dependency hydration through the package that needs the generated result.&lt;/p&gt;
&lt;h2&gt;
  
  
  The contract boundary
&lt;/h2&gt;

&lt;p&gt;Ota models the generated output separately from the tasks that establish and consume it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;artifacts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;language-server-ast&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;generated_source&lt;/span&gt;
    &lt;span class="na"&gt;producer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;language-server:generate&lt;/span&gt;
    &lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;packages/language-server/src/generated/ast.ts&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;packages/language-server/src/generated/grammar.ts&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;packages/language-server/src/generated/module.ts&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;packages/language-server/syntaxes/ec.tmLanguage.json&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;packages/vscode-extension/syntaxes/ec.tmLanguage.json&lt;/span&gt;
    &lt;span class="na"&gt;inputs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;packages/language-server/src/ec.langium&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;packages/language-server/langium-config.json&lt;/span&gt;

&lt;span class="na"&gt;tasks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;vscode-extension:build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;language-server:generate&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;language-server:build&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;sdk:build&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;visualiser:build&lt;/span&gt;
    &lt;span class="na"&gt;requires_artifacts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;language-server-ast&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;setup&lt;/code&gt; task owns typed, frozen-lockfile pnpm hydration with the language-server package filter. That removes bespoke install shell glue without pretending the dependency path is harmless: it reaches the package registry, so the selected closure is intentionally not routine agent-safe execution. Humans and CI can run the declared verification workflow; unattended agents cannot&lt;br&gt;
silently acquire that networked setup authority.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Ota had to learn
&lt;/h2&gt;

&lt;p&gt;This pressure case made two platform requirements concrete. Generated-source lineage had to remain visible at consumer admission and in execution evidence, rather than surfacing only after a build failure. And pnpm dependency hydration needed a package filter that could select a sibling package without collapsing the workspace into one opaque install-and-build command.&lt;/p&gt;

&lt;p&gt;The resulting boundary is deliberately narrow. Ota knows which task produced the declared paths, which source inputs define that artifact, and which consumer requires it. A path merely existing is not a freshness claim, and this note does not treat it as one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The released pressure run
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/bobaikato/eventcatalog/actions/runs/33167453142" rel="noopener noreferrer"&gt;Run 33167453142&lt;/a&gt; passed against released Ota &lt;code&gt;v1.6.26&lt;/code&gt; at EventCatalog commit &lt;code&gt;b593861fc84147884dcfcaf03898e490596927a0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The native matrix ran on Ubuntu, macOS, and Windows. Each lane validated the contract, ran Doctor, listed runnable and agent-safe task surfaces, dry-ran both the consumer task and named workflow, executed the real VS Code-extension consumer closure, archived its receipt, and uploaded the resulting evidence. A separate Linux job ran &lt;code&gt;ota proof runtime --workflow verify&lt;/code&gt;, archived the workflow receipt, and retained its proof artifact.&lt;/p&gt;

&lt;p&gt;That is stronger than proving the generator alone: the final build consumes the generated source after Ota has resolved its producer, language-server compilation, SDK build, and visualiser build. The matrix pins the released Ota source through the contract and pins every GitHub Action revision to an immutable SHA.&lt;/p&gt;

&lt;h2&gt;
  
  
  Boundaries that remain
&lt;/h2&gt;

&lt;p&gt;This is contract-owned and proved for one finite native language-server-to-extension build path. It does not prove the full EventCatalog workspace, every generated artifact, the semantic correctness of the generated language model, VS Code packaging or distribution, package publishing, releases, or deployment behavior.&lt;/p&gt;

&lt;p&gt;The contract does not advertise container execution for this slice, so the three operating-system legs are native-only evidence. Package-registry availability remains an external dependency of the declared hydration lane. Those are explicit limits, not green-run implications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Upstream project: &lt;a href="https://github.com/eventcatalog/eventcatalog" rel="noopener noreferrer"&gt;eventcatalog/eventcatalog&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pressure contract: &lt;a href="https://github.com/bobaikato/eventcatalog/blob/bobai/eventcatalog-ota-pressure/ota.yaml" rel="noopener noreferrer"&gt;fork branch &lt;code&gt;ota.yaml&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Released pressure matrix: &lt;a href="https://github.com/bobaikato/eventcatalog/actions/runs/33167453142" rel="noopener noreferrer"&gt;run 33167453142&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Originally posted here: &lt;a href="https://ota.run/blog/pressure-testing-ota-on-eventcatalog-generated-lineage-5m2b" rel="noopener noreferrer"&gt;https://ota.run/blog/pressure-testing-ota-on-eventcatalog-generated-lineage-5m2b&lt;/a&gt;&lt;/p&gt;

</description>
      <category>pressuretesting</category>
      <category>eventcatalog</category>
      <category>generatedartifacts</category>
      <category>pnpm</category>
    </item>
    <item>
      <title>Pressure-testing Ota on cloud.devenv.sh with Nix and devenv</title>
      <dc:creator>Bobai Kaeto</dc:creator>
      <pubDate>Wed, 26 Aug 2026 16:32:15 +0000</pubDate>
      <link>https://dev.to/otaready/pressure-testing-ota-on-clouddevenvsh-with-nix-and-devenv-4dpi</link>
      <guid>https://dev.to/otaready/pressure-testing-ota-on-clouddevenvsh-with-nix-and-devenv-4dpi</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;cloud.devenv.sh&lt;/code&gt; is a useful Ota pressure case because its execution path crosses three distinct&lt;br&gt;
ownership boundaries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the host provides &lt;code&gt;nix&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Nix launches a pinned devenv revision&lt;/li&gt;
&lt;li&gt;devenv owns the repository's &lt;code&gt;test&lt;/code&gt; and &lt;code&gt;up&lt;/code&gt; subcommands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A weak contract would flatten that into an opaque shell command. The stronger model preserves who&lt;br&gt;
owns each layer and lets Ota select the repository operation without pretending to own devenv's&lt;br&gt;
internal process semantics.&lt;/p&gt;

&lt;p&gt;The immutable hosted matrix at repository revision&lt;br&gt;
&lt;a href="https://github.com/bobaikato/cloud.devenv.sh/commit/29c44c235795d3af3b1b7eafdaacd63a416d1f06" rel="noopener noreferrer"&gt;&lt;code&gt;29c44c235795d3af3b1b7eafdaacd63a416d1f06&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
completed successfully on Ubuntu and macOS with released Ota &lt;code&gt;v1.6.26&lt;/code&gt;. The result proved the&lt;br&gt;
modeled boundary, but it also exposed an important limit: a green orchestrator exit is not proof&lt;br&gt;
that every nested process succeeded.&lt;/p&gt;
&lt;h2&gt;
  
  
  Evidence snapshot
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/bobaikato/cloud.devenv.sh/actions/runs/32832749616" rel="noopener noreferrer"&gt;hosted workflow run&lt;/a&gt;&lt;br&gt;
used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cloud.devenv.sh revision &lt;a href="https://github.com/bobaikato/cloud.devenv.sh/commit/29c44c235795d3af3b1b7eafdaacd63a416d1f06" rel="noopener noreferrer"&gt;&lt;code&gt;29c44c235795d3af3b1b7eafdaacd63a416d1f06&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ota &lt;code&gt;v1.6.26&lt;/code&gt; source revision &lt;a href="https://github.com/ota-run/ota/commit/08855fd1b7269abe9342dc9dd45acf4ed1885063" rel="noopener noreferrer"&gt;&lt;code&gt;08855fd1b7269abe9342dc9dd45acf4ed1885063&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;contract-pinned devenv launcher revision &lt;code&gt;65a7c40d185350f0e96783b3dd8d4afab3bb7034&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Ubuntu binary SHA-256 &lt;code&gt;3d545be8eb9701542284d28bb89fba83c77ae30c1d1157d9dd87fb83d961e05e&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;macOS binary SHA-256 &lt;code&gt;a2448590b0fedfeaffd29535103d5209856e3b0fcb42a93d0f47256920b58a79&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both jobs validated the contract with zero errors and warnings, inspected Doctor's deterministic&lt;br&gt;
fix preview, listed the public task surface, exported execution topology, and dry-ran &lt;code&gt;test&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;verify&lt;/code&gt;, &lt;code&gt;dev&lt;/code&gt;, and the &lt;code&gt;verify&lt;/code&gt; workflow. The contract intentionally declares no agent-safe task,&lt;br&gt;
and the retained output confirmed that &lt;code&gt;ota tasks --safe --json&lt;/code&gt; returned an empty list.&lt;/p&gt;

&lt;p&gt;Doctor did not call the repository ready. Its retained fix preview reported &lt;code&gt;verdict: risky&lt;/code&gt; and&lt;br&gt;
&lt;code&gt;agent_verdict: not_ready&lt;/code&gt; because &lt;code&gt;.ota/state/&lt;/code&gt;, &lt;code&gt;.ota/contracts/&lt;/code&gt;, &lt;code&gt;.ota/receipts/&lt;/code&gt;, and&lt;br&gt;
&lt;code&gt;.ota/proof/&lt;/code&gt; were not ignored by Git. The workflow intentionally accepted that advisory posture;&lt;br&gt;
its green status must not be read as an agent-readiness verdict.&lt;/p&gt;

&lt;p&gt;The Ubuntu job additionally executed the finite &lt;code&gt;test&lt;/code&gt; task through Ota. The macOS job did not run&lt;br&gt;
that real task; it proved only validation, discovery, topology, Doctor, and dry-run admission.&lt;/p&gt;
&lt;h2&gt;
  
  
  The contract boundary
&lt;/h2&gt;

&lt;p&gt;The contract keeps launcher ownership explicit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;orchestrators&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;devenv&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;devenv&lt;/span&gt;
    &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;config_files&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;devenv.nix&lt;/span&gt;
    &lt;span class="na"&gt;launcher&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;exe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nix&lt;/span&gt;
      &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;run&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;github:cachix/devenv/65a7c40d185350f0e96783b3dd8d4afab3bb7034#devenv&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;--&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The repository's verification command remains a direct devenv subcommand:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;tasks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;exe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
    &lt;span class="na"&gt;execution&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;orchestrator&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;devenv&lt;/span&gt;
        &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;subcommand&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The long-running development path uses the same owner without being mislabeled as finite work:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;tasks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;dev&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;launch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;command&lt;/span&gt;
      &lt;span class="na"&gt;exe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;up&lt;/span&gt;
    &lt;span class="na"&gt;execution&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;orchestrator&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;devenv&lt;/span&gt;
        &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;subcommand&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This separation gives Ota enough structure to explain and select the path while leaving devenv&lt;br&gt;
responsible for the process graph it launches.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the hosted matrix proved
&lt;/h2&gt;

&lt;p&gt;The retained artifacts and logs prove that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;released Ota &lt;code&gt;v1.6.26&lt;/code&gt; loaded and validated the immutable contract on Ubuntu and macOS&lt;/li&gt;
&lt;li&gt;Ota resolved &lt;code&gt;nix&lt;/code&gt; as the host requirement and the pinned devenv invocation as orchestrator truth&lt;/li&gt;
&lt;li&gt;task discovery preserved finite &lt;code&gt;test&lt;/code&gt;, aggregate &lt;code&gt;verify&lt;/code&gt;, and long-running &lt;code&gt;dev&lt;/code&gt; as distinct lanes&lt;/li&gt;
&lt;li&gt;Doctor preserved the repository-hygiene warning and &lt;code&gt;not_ready&lt;/code&gt; agent verdict&lt;/li&gt;
&lt;li&gt;all advertised native lanes admitted dry-run on both operating systems&lt;/li&gt;
&lt;li&gt;the Ubuntu job executed &lt;code&gt;ota run test --native --stream&lt;/code&gt; and Ota reported success after devenv
returned exit code zero&lt;/li&gt;
&lt;li&gt;the Ubuntu run stopped the devenv-managed processes before Ota emitted its successful run summary&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is execution evidence for one selected Ubuntu task. It is not runtime proof, lifecycle proof,&lt;br&gt;
or evidence that every repository behavior was governed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The green run exposed a real boundary
&lt;/h2&gt;

&lt;p&gt;During the Ubuntu task, devenv logged that &lt;code&gt;backend-migrate&lt;/code&gt; failed because&lt;br&gt;
&lt;code&gt;cloud.devenv.toml&lt;/code&gt; was missing. Other work continued, the frontend build completed, and devenv&lt;br&gt;
eventually printed &lt;code&gt;Tests passed :)&lt;/code&gt; and returned zero. Ota therefore reported the selected task as&lt;br&gt;
successful.&lt;/p&gt;

&lt;p&gt;That is faithful to the current contract: Ota invokes the selected orchestrator operation and&lt;br&gt;
uses its terminal result. It does not independently reinterpret every nested devenv process log.&lt;br&gt;
The matrix consequently proves that Ota executed the declared boundary, not that every internal&lt;br&gt;
devenv process completed successfully.&lt;/p&gt;

&lt;p&gt;The task also modified four tracked files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;devenv.lock&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;frontend/elm-srcs.nix&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;frontend/generated-api/.openapi-generator/VERSION&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;frontend/generated-api/README.md&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those mutations are part of the observed repository behavior. The run did not assert that the&lt;br&gt;
worktree remained clean, so the note must not turn its green status into a non-mutation claim.&lt;/p&gt;

&lt;h2&gt;
  
  
  Uncovered material behavior
&lt;/h2&gt;

&lt;p&gt;The pressure result classifies the remaining behavior explicitly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contract-owned and proved
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;native contract validation on Ubuntu and macOS&lt;/li&gt;
&lt;li&gt;task, workflow, and execution-topology discovery&lt;/li&gt;
&lt;li&gt;Doctor and Doctor fix-preview output, including the retained &lt;code&gt;not_ready&lt;/code&gt; agent verdict&lt;/li&gt;
&lt;li&gt;native dry-run admission for &lt;code&gt;test&lt;/code&gt;, &lt;code&gt;verify&lt;/code&gt;, and &lt;code&gt;dev&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;real Ubuntu execution of the selected &lt;code&gt;test&lt;/code&gt; task through the pinned Nix/devenv launcher&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Explicitly bounded as not proved
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;real task execution on macOS&lt;/li&gt;
&lt;li&gt;successful completion of every nested devenv process&lt;/li&gt;
&lt;li&gt;lifecycle readiness and teardown assertions for &lt;code&gt;dev&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;container and Windows execution&lt;/li&gt;
&lt;li&gt;deployment, production readiness, and repository-global governance&lt;/li&gt;
&lt;li&gt;a clean worktree after verification&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Repo-owned outside this pressure slice
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;the internal devenv process graph and its terminal acceptance semantics&lt;/li&gt;
&lt;li&gt;whether generated files should be committed, ignored, or checked for drift&lt;/li&gt;
&lt;li&gt;the missing &lt;code&gt;cloud.devenv.toml&lt;/code&gt; configuration expected by &lt;code&gt;backend-migrate&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ota platform gap
&lt;/h3&gt;

&lt;p&gt;Ota does not currently receive structured nested-process outcomes from the devenv adapter. It can&lt;br&gt;
govern the selected orchestrator operation and report its exit status, but it cannot prove that all&lt;br&gt;
material child processes succeeded when the orchestrator itself returns zero. A stronger future&lt;br&gt;
carrier would need typed nested outcome evidence rather than log scraping.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this pressure case matters
&lt;/h2&gt;

&lt;p&gt;The result is useful precisely because it is not a staged perfect success.&lt;/p&gt;

&lt;p&gt;Ota correctly preserved the Nix/devenv ownership boundary and executed the selected finite lane.&lt;br&gt;
The same run then showed where that evidence stops. That distinction is the product: a green outer&lt;br&gt;
command should never silently expand into a claim about nested work Ota did not independently&lt;br&gt;
witness.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/bobaikato/cloud.devenv.sh/blob/29c44c235795d3af3b1b7eafdaacd63a416d1f06/ota.yaml" rel="noopener noreferrer"&gt;Immutable contract&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bobaikato/cloud.devenv.sh/blob/29c44c235795d3af3b1b7eafdaacd63a416d1f06/.github/workflows/test-ota-contract-matrix.yml" rel="noopener noreferrer"&gt;Immutable matrix workflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bobaikato/cloud.devenv.sh/actions/runs/32832749616" rel="noopener noreferrer"&gt;Hosted matrix run&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bobaikato/cloud.devenv.sh/actions/runs/32832749616/job/97754855993" rel="noopener noreferrer"&gt;Ubuntu execution job&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bobaikato/cloud.devenv.sh/actions/runs/32832749616/job/97754855697" rel="noopener noreferrer"&gt;macOS admission job&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Originally Posted: &lt;a href="https://ota.run/blog/pressure-testing-ota-on-cloud-devenv-sh-4q1n" rel="noopener noreferrer"&gt;https://ota.run/blog/pressure-testing-ota-on-cloud-devenv-sh-4q1n&lt;/a&gt;&lt;/p&gt;

</description>
      <category>pressuretesting</category>
      <category>clouddevenvsh</category>
      <category>nix</category>
      <category>devenv</category>
    </item>
    <item>
      <title>Ota v1.6.26 Now Available: Protected Execution Foundations and Receipt History</title>
      <dc:creator>Bobai Kaeto</dc:creator>
      <pubDate>Mon, 17 Aug 2026 13:29:24 +0000</pubDate>
      <link>https://dev.to/otaready/ota-v1626-now-available-protected-execution-foundations-and-receipt-history-1gld</link>
      <guid>https://dev.to/otaready/ota-v1626-now-available-protected-execution-foundations-and-receipt-history-1gld</guid>
      <description>&lt;h2&gt;
  
  
  Idea
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;v1.6.26&lt;/code&gt; closes the bounded V11.7 OSS audited-crossing slice.&lt;/p&gt;

&lt;p&gt;Prior releases built execution governance: what should run, what closure to consume, when replay is allowed, whether cleanup was witnessed. The next boundary was authority: who decides whether work executes, and how do downstream consumers verify that decision independently?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;v1.6.26&lt;/code&gt; addresses this through the Linux systemd protected launcher. The release does not attempt provider attestation or cross-organization trust separation. Instead, it establishes a bounded first-class path where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the contract specifies whether execution is allowed or explicitly disabled&lt;/li&gt;
&lt;li&gt;the launcher independently attests each boundary before Ota processes an authorization request&lt;/li&gt;
&lt;li&gt;the crossing evidence chain becomes explicit and re-verifiable through receipt history&lt;/li&gt;
&lt;li&gt;receipt history immutably records each decision and persists independent archives&lt;/li&gt;
&lt;li&gt;operator-driven recovery preserves exact evidence through failures and reboots&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The evidence is locally-bounded: independently administered Linux/x64 systemd production pressure proves the consumer-only positive path, while separately verified crash/reboot recovery preserves evidence through failures. Provider attestation remains open.&lt;/p&gt;

&lt;h2&gt;
  
  
  Feature
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Closed the bounded V11.7 OSS audited-crossing slice
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;v1.6.26&lt;/code&gt; completes the production-client and independently administered hardened-launcher acceptance branches.&lt;/p&gt;

&lt;p&gt;Immutable Linux/x64 PID 1 runs &lt;a href="https://github.com/ota-run/authority-launcher/actions/runs/31939777636" rel="noopener noreferrer"&gt;31939777636&lt;/a&gt; and &lt;a href="https://github.com/ota-run/authority-launcher/actions/runs/31953535665" rel="noopener noreferrer"&gt;31953535665&lt;/a&gt; prove:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Production client with protected receipt history, one-use selected execution, and terminal cleanup&lt;/li&gt;
&lt;li&gt;Exact archive reconciliation and administrator-driven reboot/fault recovery&lt;/li&gt;
&lt;li&gt;Repository state unchanged, complete terminal cleanup, zero invalid protected archives&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Provider attestation remains optional stronger hardening rather than an implied V11.7 requirement. Contract-authored &lt;code&gt;governance.crossing_requirements&lt;/code&gt; is explicitly deferred to follow-on work.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Production protected receipt-history Core surface
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ota receipt --history --source systemd_protected_launcher&lt;/code&gt; adds immutable receipt history anchored to the Linux systemd launcher:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ota receipt &lt;span class="nt"&gt;--history&lt;/span&gt; &lt;span class="nt"&gt;--source&lt;/span&gt; systemd_protected_launcher &lt;span class="nt"&gt;--json&lt;/span&gt;
ota receipt &lt;span class="nt"&gt;--history&lt;/span&gt; &lt;span class="nt"&gt;--source&lt;/span&gt; systemd_protected_launcher &lt;span class="nt"&gt;--archive-identity&lt;/span&gt; sha256:&amp;lt;&lt;span class="nb"&gt;hash&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The bounded manifest binds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Admitted non-agent operator profile and live peer&lt;/li&gt;
&lt;li&gt;Repository and catalog identities&lt;/li&gt;
&lt;li&gt;Three content-addressed objects per entry: receipt archive, immutable contract snapshot, launcher-finalization sidecar&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Core reconstructs exact bytes and applies existing semantic archive verifier. Optional &lt;code&gt;--archive-identity&lt;/code&gt; selects one exact archive without exposing protected paths.&lt;/p&gt;

&lt;p&gt;Local history remains default and now publishes explicit source and completeness posture in text and JSON.&lt;/p&gt;

&lt;p&gt;Immutable Linux/x64 PID 1 run &lt;a href="https://github.com/ota-run/authority-launcher/actions/runs/31823037642" rel="noopener noreferrer"&gt;31823037642&lt;/a&gt; proves the installed production invocation client and protected-history source against exact Protocol, Core, and Launcher revisions with one valid protected archive, zero invalid archives, unchanged refusal worktrees, and no private signing material.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Execution-disabled systemd-launcher posture gate
&lt;/h3&gt;

&lt;p&gt;The release adds bounded execution-disabled foundations through the protected launcher.&lt;/p&gt;

&lt;p&gt;Core verifies signed V3 systemd launcher and job-principal attestation, but the launcher deliberately withholds authorization before exact scope, cgroup, child, and active-slot cleanup. The result is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;posture_admitted_before_authorization_boundary_removed&lt;/code&gt; typed refusal&lt;/li&gt;
&lt;li&gt;Zero selected work, lease consumption, receipt, or archive&lt;/li&gt;
&lt;li&gt;Exact terminal cleanup preserved&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Immutable Linux/x64 PID 1 runs &lt;a href="https://github.com/ota-run/authority-launcher/actions/runs/31561247605" rel="noopener noreferrer"&gt;31561247605&lt;/a&gt; and &lt;a href="https://github.com/ota-run/authority-launcher/actions/runs/31389237232" rel="noopener noreferrer"&gt;31389237232&lt;/a&gt;/&lt;a href="https://github.com/ota-run/authority-launcher/actions/runs/31389713244" rel="noopener noreferrer"&gt;31389713244&lt;/a&gt; prove execution-disabled allowed, denied, stale, wrong-scope, protected-installation/runtime drift, missing-credential, and crash-recovery paths with independently re-verifiable public signed decision/relay identities.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Protected systemd V3 one-use lease consumption
&lt;/h3&gt;

&lt;p&gt;After exact admission, the launcher atomically consumes a signed lease from the broker before spawning work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One-use leases are consumed only once; reuse is cryptographically refused&lt;/li&gt;
&lt;li&gt;Core binds pending transaction posture to private persistence&lt;/li&gt;
&lt;li&gt;Launcher persists consume intent before relay and records signed response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Immutable Linux/x64 PID 1 systemd run &lt;a href="https://github.com/ota-run/authority-launcher/actions/runs/31631358796" rel="noopener noreferrer"&gt;31631358796&lt;/a&gt; proves one-use consumption, identical-lease already_consumed refusal, crash recovery, byte-identical repository state, and zero terminal slots/scopes.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Selected execution and receipt archives
&lt;/h3&gt;

&lt;p&gt;Once the lease is consumed, Core may execute only the frozen work unit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ota run &amp;lt;task&amp;gt; &lt;span class="nt"&gt;--grant&lt;/span&gt; &amp;lt;crossing_authority_id&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The launcher persists completion evidence before Core exits, verifies child reaped and scope removed, and persists launcher-owned finalization. Core then independently verifies both launcher signatures and every identity relationship.&lt;/p&gt;

&lt;p&gt;Immutable Linux/x64 PID 1 pressure run &lt;a href="https://github.com/ota-run/authority-launcher/actions/runs/31664495937" rel="noopener noreferrer"&gt;31664495937&lt;/a&gt; proves completed, failed, interrupted, replay-refused, and crash-recovered selected execution with exact child, scope, cgroup, and active-slot cleanup.&lt;/p&gt;

&lt;p&gt;V3 receipt archives accept only launcher-active-slot transactions. Receipt history preserves the carrier distinction and refuses to reinterpret legacy broker or signed-file carriers as V3.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Portable launcher finalization
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;v1.6.26&lt;/code&gt; adds the portable protected-systemd launcher-finalization path.&lt;/p&gt;

&lt;p&gt;New launcher-owned crossing transaction schema v3 is bound into the signed consume exchange and requires broker-archive schema v2 plus portable finalization verification. Historical transaction v2 and broker-archive v1 evidence retain original compatibility.&lt;/p&gt;

&lt;p&gt;The launcher retains protected post-cleanup recovery state until the client acknowledges a producer-signed sidecar binding exact cleanup evidence, receipt-archive identity, and crossing transaction. Core durably publishes the exact execution receipt archive before emitting launcher completion. The root launcher reopens that private archive through the execution-principal repository descriptor, requires exact owner, content, and transaction identity, and atomically publishes the root-owned sidecar; the job principal only acknowledges it.&lt;/p&gt;

&lt;p&gt;Signed profile bindings include CAP_DAC_OVERRIDE in the exact bounding set, solely so the root launcher can traverse private hierarchies inside its protected mount namespace.&lt;/p&gt;

&lt;p&gt;Immutable PID 1 crash pressure and the production operator client are included in the released&lt;br&gt;
bounded carrier; stronger provider-attested separation remains a follow-on boundary.&lt;/p&gt;
&lt;h3&gt;
  
  
  7. Honest launcher crash-recovery evidence
&lt;/h3&gt;

&lt;p&gt;Live systemd finalization keeps directly observed exit and child-reaped posture; restart recovery uses signed finalization schema v2 with &lt;code&gt;recovered_absent_completion_bound&lt;/code&gt;, verified child absence, and no claimed observed exit or reaping. Receipt history re-verifies either exact version without upgrading legacy evidence.&lt;/p&gt;

&lt;p&gt;Immutable Linux/x64 PID 1 run &lt;a href="https://github.com/ota-run/authority-launcher/actions/runs/31758094819" rel="noopener noreferrer"&gt;31758094819&lt;/a&gt; proves the corrected portable-finalization path, one-use consumption, exact crash recovery, and valid archive history.&lt;/p&gt;
&lt;h3&gt;
  
  
  8. Refined active-execution admission
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;v1.6.26&lt;/code&gt; refines native service listener conflicts around actual resource ownership:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fixed or Ota-managed dynamic listeners&lt;/strong&gt;: Long-running tasks bind fixed, Ota-managed dynamic, isolated, or unresolved runtime listeners across their complete execution closure, including hooks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native and container coexistence&lt;/strong&gt;: Services can coexist when their projected host endpoints and effective write namespaces are disjoint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ancestor/descendant path conflicts&lt;/strong&gt;: Shared write and env-materialization paths now conflict on ancestor/descendant overlap, not exact text only.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;ota run &amp;lt;task&amp;gt; --host-port &amp;lt;port&amp;gt;&lt;/code&gt;&lt;/strong&gt;: Directs native service execution. Container and Compose lanes remap only the host publication; direct native lanes apply the port to both canonical bind and projected host endpoint. Ota reprojects typed launch arguments and runtime environment values.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear conflict reporting&lt;/strong&gt;: "Host port already in use" now names requested and active execution modes plus endpoint owner, suggests truthful &lt;code&gt;--host-port &amp;lt;free port&amp;gt;&lt;/code&gt; rerun, and preserves existing run-summary layout with additive Reason and Host port rows.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  9. Fixed interactive native task closures
&lt;/h3&gt;

&lt;p&gt;The release fixes interactive native task closures so typed hydration and bootstrap phases retain Ota's canonical 🦦 loader instead of inheriting terminal ownership from a later interactive command.&lt;/p&gt;

&lt;p&gt;On Unix, Ctrl-C now terminates Ota's complete native child process group and waits for it to settle before emitting the interrupted summary, preventing late npm output after Ota reports completion.&lt;/p&gt;

&lt;p&gt;Native task progress loaders now show selected execution class explicitly, for example &lt;code&gt;Running setup:dev (native)&lt;/code&gt;, matching existing container and remote labels.&lt;/p&gt;
&lt;h3&gt;
  
  
  10. Schema embedment and version pinning
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;v1.6.26&lt;/code&gt; removes the source checkout's absolute CARGO_MANIFEST_DIR from production schema discovery. Published JSON schemas are now embedded into the Ota binary, so installed or relocated source builds validate machine output against their exact version-matched schema set without a source checkout or compiler-path dependency.&lt;/p&gt;

&lt;p&gt;The release also emits the full 40-character source commit from &lt;code&gt;ota --version --json&lt;/code&gt; so protected deployment evidence can bind the installed Core binary to one exact source revision.&lt;/p&gt;
&lt;h3&gt;
  
  
  11. Wildcard tool-version handling
&lt;/h3&gt;

&lt;p&gt;Treat wildcard (&lt;code&gt;*&lt;/code&gt;) task tool and runtime requirements as executable-availability requirements when a present command does not expose parseable version output. Pinned requirements still fail closed when Ota cannot establish the installed version.&lt;/p&gt;

&lt;p&gt;This keeps POSIX sh tasks portable to Debian and Ubuntu systems where &lt;code&gt;dash --version&lt;/code&gt; exits nonzero without weakening version pins.&lt;/p&gt;
&lt;h3&gt;
  
  
  12. Compatibility-preserving profile support
&lt;/h3&gt;

&lt;p&gt;Add compatibility-preserving support for the separated-producer &lt;code&gt;ota.authority-launcher.systemd/v2&lt;/code&gt; profile. V3 broker bindings and the published receipt schema require an exact registered profile-ID/identity pair. Legacy V1 evidence remains verifiable but cannot be relabelled as V2. Complete &lt;code&gt;ota.authority-launcher.systemd/v3&lt;/code&gt; and &lt;code&gt;ota.authority-job-principal.systemd/v2&lt;/code&gt; verification branches re-derive ordered launcher and job-principal observations, nested identities, protected socket source, and limited-primary-group posture from signed evidence.&lt;/p&gt;
&lt;h3&gt;
  
  
  Boundaries
&lt;/h3&gt;

&lt;p&gt;The most important &lt;code&gt;v1.6.26&lt;/code&gt; behaviors are what it qualifies and refuses to imply:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;execution-disabled posture proves no work runs, not that the launcher is trustworthy&lt;/li&gt;
&lt;li&gt;protected receipt history proves exact archive binding, not system-level secret protection&lt;/li&gt;
&lt;li&gt;launcher crash recovery preserves evidence through failures, not immunity from crashes&lt;/li&gt;
&lt;li&gt;locally-bounded independently administered pressure proves consumer-only operation, not provider attestation or cross-organization trust&lt;/li&gt;
&lt;li&gt;V3 receipt archives accept only launcher-active-slot transactions; legacy carriers remain in their original branches&lt;/li&gt;
&lt;li&gt;one-use lease consumption prevents duplicate execution within a transaction; it does not prevent replay across different invocations&lt;/li&gt;
&lt;li&gt;a successful protected execution does not prove downstream deployment or production health&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are not disclaimers around the product. They are part of the product contract.&lt;/p&gt;
&lt;h2&gt;
  
  
  Docs
&lt;/h2&gt;

&lt;p&gt;Use the live references for protected execution, receipt history, and crossing-evidence semantics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ota.run/docs/install" rel="noopener noreferrer"&gt;Install Ota&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ota.run/docs/reference/protected-execution" rel="noopener noreferrer"&gt;Protected Execution&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ota.run/docs/reference/broker-crossing-authority" rel="noopener noreferrer"&gt;Broker Crossing Authority&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ota.run/docs/reference/execution-receipt" rel="noopener noreferrer"&gt;Execution Receipt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ota.run/docs/reference/command" rel="noopener noreferrer"&gt;Command Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ota.run/docs/reference/contract" rel="noopener noreferrer"&gt;Contract Reference&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Release
&lt;/h2&gt;

&lt;p&gt;Install or upgrade to the released version, then inspect the contract and protected-execution surface:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ota upgrade
ota &lt;span class="nt"&gt;--version&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt;
ota validate
ota doctor &lt;span class="nt"&gt;--json&lt;/span&gt;
ota tasks &lt;span class="nt"&gt;--safe&lt;/span&gt; &lt;span class="nt"&gt;--use&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For protected execution and receipt history:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ota receipt &lt;span class="nt"&gt;--history&lt;/span&gt; &lt;span class="nt"&gt;--source&lt;/span&gt; systemd_protected_launcher &lt;span class="nt"&gt;--json&lt;/span&gt;
ota run &amp;lt;task&amp;gt; &lt;span class="nt"&gt;--dry-run&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt;
ota run &amp;lt;task&amp;gt; &lt;span class="nt"&gt;--grant&lt;/span&gt; &amp;lt;crossing_authority_id&amp;gt; &lt;span class="nt"&gt;--dry-run&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The canonical release and complete patch-level changelog are available at&lt;br&gt;
&lt;a href="https://ota.run/releases/v1.6.26" rel="noopener noreferrer"&gt;ota.run/releases/v1.6.26&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;v1.6.26&lt;/code&gt; closes the bounded V11.7 OSS audited-crossing slice through locally-bounded protected-launcher foundations: not only what should run and what proof exists, but which boundaries admitted it, how launcher isolation prevented unauthorized work, and what immutable receipt archives capture each decision through recovery scenarios. Provider attestation and cross-organization trust separation remain open for follow-on work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pressure and Evidence
&lt;/h2&gt;

&lt;p&gt;The entire protected-execution stack was shaped by production pressure on isolated Linux/x64 systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Installation and runtime drift&lt;/strong&gt;: Invalid credentials and launcher-startup failures preserve zero selected work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One-use lease consumption&lt;/strong&gt;: Identical lease-reuse is cryptographically refused; fresh invocations require fresh authorization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crash recovery and restart scenarios&lt;/strong&gt;: Launcher crash pressure and administrator-driven reboot recovery preserve exact evidence through multiple transitions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution-disabled posture&lt;/strong&gt;: Core admits the contract, but the launcher withholds authorization and emits a typed refusal with exact scope, cgroup, and child cleanup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Receipt history and archive verification&lt;/strong&gt;: Protected receipt history verifies exact archive, contract snapshot, and finalization sidecar identities without exposing private paths.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All evidence is immutable Linux/x64 hosted proof bound to exact Core, Launcher, and Protocol revisions. Independently administered Linux/x64 PID 1 production pressure (runs &lt;a href="https://github.com/ota-run/authority-launcher/actions/runs/31939777636" rel="noopener noreferrer"&gt;31939777636&lt;/a&gt;, &lt;a href="https://github.com/ota-run/authority-launcher/actions/runs/31823037642" rel="noopener noreferrer"&gt;31823037642&lt;/a&gt;, &lt;a href="https://github.com/ota-run/authority-launcher/actions/runs/31953535665" rel="noopener noreferrer"&gt;31953535665&lt;/a&gt;) proves the consumer-only positive path and administrator-driven recovery branches.&lt;/p&gt;

&lt;p&gt;Provider attestation and cross-organization trust remain open as stronger follow-on boundaries. The&lt;br&gt;
independently administered launcher, portable finalization, and operator attachment surfaces are&lt;br&gt;
part of the released bounded carrier.&lt;/p&gt;

&lt;p&gt;The complete bounded V11.7 OSS slice is live. Follow-on work includes contract-authored &lt;code&gt;governance.crossing_requirements&lt;/code&gt;, provider-attested separation, and broader multi-system authority delegation.&lt;/p&gt;




&lt;p&gt;Originally posted here: &lt;a href="https://ota.run/blog/ota-v1-6-26-release-essay" rel="noopener noreferrer"&gt;https://ota.run/blog/ota-v1-6-26-release-essay&lt;/a&gt;&lt;/p&gt;

</description>
      <category>release</category>
      <category>protectedexecution</category>
      <category>launcherintegration</category>
      <category>receipthistory</category>
    </item>
  </channel>
</rss>
