<?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: Bobai Kato</title>
    <description>The latest articles on DEV Community by Bobai Kato (@bobaikato).</description>
    <link>https://dev.to/bobaikato</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%2Fuser%2Fprofile_image%2F661554%2F4a338586-db17-473a-9765-46cf00fc51bd.jpg</url>
      <title>DEV Community: Bobai Kato</title>
      <link>https://dev.to/bobaikato</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bobaikato"/>
    <language>en</language>
    <item>
      <title>Pressure-testing Ota on Dagger: generated SDK lineage and bounded engine truth</title>
      <dc:creator>Bobai Kato</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 Kato</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 Kato</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 Kato</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 Kato</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 is here. We’re looking for design partners.</title>
      <dc:creator>Bobai Kato</dc:creator>
      <pubDate>Tue, 18 Aug 2026 19:05:38 +0000</pubDate>
      <link>https://dev.to/bobaikato/-1iop</link>
      <guid>https://dev.to/bobaikato/-1iop</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/faithada/ota-v1626-is-here-were-looking-for-design-partners-395e" class="crayons-story__hidden-navigation-link"&gt;Ota v1.6.26 is here. We’re looking for design partners.&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/faithada" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3914302%2Fa87dc571-f7e3-4056-92de-46f02f3e5906.jpeg" alt="faithada profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/faithada" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Adamma
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Adamma
                
                
              
              &lt;div id="story-author-preview-content-4428556" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/faithada" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3914302%2Fa87dc571-f7e3-4056-92de-46f02f3e5906.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Adamma&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/faithada/ota-v1626-is-here-were-looking-for-design-partners-395e" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 18&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/faithada/ota-v1626-is-here-were-looking-for-design-partners-395e" id="article-link-4428556"&gt;
          Ota v1.6.26 is here. We’re looking for design partners.
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/github"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;github&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/faithada/ota-v1626-is-here-were-looking-for-design-partners-395e" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;7&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/faithada/ota-v1626-is-here-were-looking-for-design-partners-395e#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            1 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Ota v1.6.26 Now Available: Protected Execution Foundations and Receipt History</title>
      <dc:creator>Bobai Kato</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>
    <item>
      <title>Pressure-testing Ota on Flagr: native and container Go verification with honest boundaries</title>
      <dc:creator>Bobai Kato</dc:creator>
      <pubDate>Fri, 14 Aug 2026 23:06:06 +0000</pubDate>
      <link>https://dev.to/otaready/pressure-testing-ota-on-flagr-native-and-container-go-verification-with-honest-boundaries-4gi0</link>
      <guid>https://dev.to/otaready/pressure-testing-ota-on-flagr-native-and-container-go-verification-with-honest-boundaries-4gi0</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/openflagr/flagr" rel="noopener noreferrer"&gt;Flagr&lt;/a&gt; is a useful test of whether Ota can keep a real service repository legible. It has a portable Go verification path, a local SQLite-backed API, a six-instance Docker Compose integration topology, four database services, and a locally tagged integration image. Those are different execution truths. One green test command should not flatten them into one readiness or deployment claim.&lt;/p&gt;

&lt;p&gt;The pressure contract pins released Ota &lt;code&gt;v1.6.25&lt;/code&gt;, separates deterministic verification from runtime and integration work, and gives the Compose topology a runner-owned lifecycle proof.&lt;br&gt;
It also removes Windows from the selected verification surface rather than carrying an audit-only lane that could be mistaken for execution support.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why this repo mattered
&lt;/h2&gt;

&lt;p&gt;Flagr combines several patterns that show up in mature service repositories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a finite Go verification lane;&lt;/li&gt;
&lt;li&gt;a long-running local service with a declared HTTP surface;&lt;/li&gt;
&lt;li&gt;an integration topology that needs an image build, Compose startup, readiness, test execution, and teardown; and&lt;/li&gt;
&lt;li&gt;CI that needs to distinguish a safe verification lane from deliberately external-state-mutating integration work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pressure question was not merely whether &lt;code&gt;go test&lt;/code&gt; could pass. It was whether the contract could own hydration, execution mode, runtime readiness, image construction, service dependencies, failure cleanup, and agent refusal without hiding the important transitions in CI shell.&lt;/p&gt;
&lt;h2&gt;
  
  
  What the contract models
&lt;/h2&gt;

&lt;p&gt;The deterministic lane uses typed Go module hydration in native and container contexts. Linux and macOS own the native verification path; Linux also owns the container path through &lt;code&gt;golang:1.26-bookworm&lt;/code&gt;. The selected Go closure is intentionally unavailable on Windows.&lt;/p&gt;

&lt;p&gt;The integration image is not a raw &lt;code&gt;docker build&lt;/code&gt; string:&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;integration:image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build the locally tagged image consumed by the six-node Compose integration topology&lt;/span&gt;
  &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;build&lt;/span&gt;
  &lt;span class="na"&gt;action&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;build_container_image&lt;/span&gt;
    &lt;span class="na"&gt;file&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;integration_tests/Dockerfile-Integration-Test&lt;/span&gt;
    &lt;span class="na"&gt;context&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;.&lt;/span&gt;
    &lt;span class="na"&gt;tag&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;flagr_integration_tests&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The workflow split stays explicit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;verify&lt;/code&gt; is deterministic Go package verification;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;local&lt;/code&gt; owns the SQLite-backed API runtime;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;integration&lt;/code&gt; owns the image, Compose topology, readiness, integration suite, benchmark, and
explicit teardown;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;integration:lifecycle&lt;/code&gt; gives Ota ownership of service start, assertion, teardown, and archive
evidence;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;integration:lifecycle:failure-control&lt;/code&gt; intentionally fails the real assertion and verifies that
teardown still completes; and&lt;/li&gt;
&lt;li&gt;agent refusal canaries exercise the real boundary around the unsafe image task and integration
workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The lifecycle model includes the Flagr services and their MySQL and PostgreSQL dependencies. Each managed service declares &lt;code&gt;manager_inactive&lt;/code&gt; as its teardown assertion. Readiness failure is not accepted as proof that a service stopped; the Compose manager must report the terminal state.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Flagr exposed in Ota
&lt;/h2&gt;

&lt;p&gt;Flagr exposes several real Ota boundaries without needing repository-specific workarounds.&lt;/p&gt;

&lt;p&gt;Aggregate verification needed to remain visible as executable closure support in task discovery.&lt;br&gt;
Doctor also had to stop probing repo-owned commands before their producer task had created them.&lt;br&gt;
Those are ordering and discovery problems in the runner, not defects in a Go repository.&lt;/p&gt;

&lt;p&gt;The CI pressure exposed another distinction: a finite workflow cannot stop after a readiness-oriented &lt;code&gt;ota up&lt;/code&gt;. Ota's provider-neutral CI projection distinguishes a finite task closure from a service-runtime path. The finite lane executes its selected task; runtime proof owns&lt;br&gt;
its own execution path.&lt;/p&gt;

&lt;p&gt;That is why the image build matters. Ota owns the action, Dockerfile, context, local tag, and evidence surface. Flagr still owns what the image means and how its integration system behaves.&lt;/p&gt;

&lt;p&gt;The lifecycle lane closes the remaining shell-shaped gap. Starting Compose, probing six Flagr endpoints, running an assertion, and calling &lt;code&gt;down&lt;/code&gt; in a final CI step showed that readiness was proved but transaction-owned cleanup was not. Ota's managed lifecycle surface now acquires cleanup authority before start, runs the declared assertion, finalizes each managed service, and archives the bounded result. The failure control matters because successful cleanup alone would not prove that the same finalization path survives an assertion failure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Matrix design
&lt;/h2&gt;

&lt;p&gt;The released matrix is deliberately split by evidence type:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lane&lt;/th&gt;
&lt;th&gt;Platform and mode&lt;/th&gt;
&lt;th&gt;Evidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Managed &lt;code&gt;verify&lt;/code&gt; projection&lt;/td&gt;
&lt;td&gt;Linux native&lt;/td&gt;
&lt;td&gt;Contract validation, Doctor, safe discovery, dry-run admission, real verification, receipt archive, and two refusal canaries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Managed &lt;code&gt;verify&lt;/code&gt; projection&lt;/td&gt;
&lt;td&gt;macOS native&lt;/td&gt;
&lt;td&gt;The same finite verification and refusal boundary on the second supported host OS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Managed &lt;code&gt;verify&lt;/code&gt; projection&lt;/td&gt;
&lt;td&gt;Linux container&lt;/td&gt;
&lt;td&gt;The same selected verification closure inside the contract-owned Go image&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native runtime proof&lt;/td&gt;
&lt;td&gt;Ubuntu and macOS&lt;/td&gt;
&lt;td&gt;Bounded execution of the SQLite-backed local API and its declared health surface&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Container runtime and integration&lt;/td&gt;
&lt;td&gt;Ubuntu&lt;/td&gt;
&lt;td&gt;Container runtime proof plus the six-instance Compose suite, benchmark, receipt, and explicit teardown&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Managed lifecycle pressure&lt;/td&gt;
&lt;td&gt;Ubuntu&lt;/td&gt;
&lt;td&gt;Successful lifecycle archive plus an assertion-failure control that must still finalize every transaction-owned service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contract-to-CI drift&lt;/td&gt;
&lt;td&gt;Ubuntu&lt;/td&gt;
&lt;td&gt;The first-party Action checks that CI consumes contract-owned bootstrap and verification truth&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The contract and generated workflows bind bootstrap to released &lt;code&gt;v1.6.25&lt;/code&gt;. All three supported managed projections are generated from the final contract, and their human-owned caller bindings are checked against the same projection identities before hosted execution.&lt;/p&gt;

&lt;p&gt;The complete hosted governance matrix is green in&lt;br&gt;
&lt;a href="https://github.com/bobaikato/flagr/actions/runs/31834610141" rel="noopener noreferrer"&gt;run 31834610141&lt;/a&gt; at commit &lt;code&gt;58f5263a&lt;/code&gt;. It executed Linux and macOS native verification, Linux container verification, both refusal canaries in every generated lane, native runtime proof on Ubuntu and macOS, container runtime proof, the Compose integration suite and benchmark, explicit teardown, and the contract-to-CI drift gate.&lt;/p&gt;

&lt;p&gt;The managed lifecycle lane is independently green in&lt;br&gt;
&lt;a href="https://github.com/bobaikato/flagr/actions/runs/31834610099" rel="noopener noreferrer"&gt;run 31834610099&lt;/a&gt;. The successful transaction acquired ownership for and finalized ten services, passed the real integration assertion, and observed every declared teardown state. Its separate failure control sent the same assertion to an unreachable endpoint, recorded the expected non-zero outcome, and still completed finalization for all ten services.&lt;/p&gt;

&lt;p&gt;That lifecycle result is deliberately &lt;code&gt;passed_with_unproven_boundaries&lt;/code&gt;, not a bare pass. The four&lt;br&gt;
database services do not declare readiness or another manager-backed start-state observer, so &lt;code&gt;service_started_state_not_proved&lt;/code&gt; remains attached to each database obligation. Application output and broader repository completion also remain explicitly unproved.&lt;/p&gt;

&lt;p&gt;The distinction between the lanes is part of the result. A refusal canary is not a successful integration run; it proves that the real runner still rejects that path in agent mode. Runtime readiness is not lifecycle finalization. Lifecycle finalization is not application correctness or production deployment evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Doctor stayed honest
&lt;/h2&gt;

&lt;p&gt;The released contract validates with no errors, but Doctor intentionally retains two classes of warning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the agent-safe verification closure performs declared Go dependency hydration over the network;
and&lt;/li&gt;
&lt;li&gt;the lifecycle closure mutates Docker, MySQL, and PostgreSQL external state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those warnings are not noise to remove. They tell an operator that repository write boundaries do not govern registries, the Docker engine, or database state. The managed verification lanes remain&lt;br&gt;
agent-admitted because the network effect is typed as dependency hydration. The integration and lifecycle lanes remain outside agent-safe admission.&lt;/p&gt;

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

&lt;p&gt;The pressure result is bounded as follows:&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;typed Go module hydration for the selected native and container verification modes;&lt;/li&gt;
&lt;li&gt;deterministic Go package verification on Linux, macOS, and Linux container execution;&lt;/li&gt;
&lt;li&gt;SQLite-backed local API runtime and HTTP readiness;&lt;/li&gt;
&lt;li&gt;the locally tagged integration-image build;&lt;/li&gt;
&lt;li&gt;the selected six-instance Compose integration suite and benchmark;&lt;/li&gt;
&lt;li&gt;successful and assertion-failure lifecycle finalization; and&lt;/li&gt;
&lt;li&gt;agent refusal canaries plus contract-to-CI drift detection.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Explicitly outside this proof
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;the UI build, browser E2E lane, actionlint job, dependency-freshness policy, and broader upstream benchmark surface remain repo-owned CI behavior outside this selected Ota pressure contract;&lt;/li&gt;
&lt;li&gt;GitHub triggers, permissions, credentials, runner policy, and artifact retention remain provider-owned;&lt;/li&gt;
&lt;li&gt;release publication to GHCR, multi-architecture release images, and production deployment remain outside Ota's selected execution scope; and&lt;/li&gt;
&lt;li&gt;external production services, production data, and deployment credentials were neither selected nor proved.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;This pressure lane exercises shipped Ota surfaces without adding a repo-local workaround. Any hosted failure must be classified before editing: contract defect, upstream Flagr behavior, provider failure, or a new Ota platform gap. A green matrix does not erase the explicit boundaries above.&lt;/p&gt;

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

&lt;p&gt;The matrix does not prove Windows execution. The contract prevents that over-read by excluding the selected verification tasks from Windows rather than publishing a non-executing audit lane.&lt;/p&gt;

&lt;p&gt;The selected integration topology is real local proof, but it is not evidence that every deployment environment has the same topology or that production operations are governed by this contract. The lifecycle archive proves only the selected Compose transaction and its declared teardown assertions. It does not prove Flagr's application outputs, repository-wide correctness, or external&lt;br&gt;
provider policy. It also does not promote the four database services to observed started state; their command execution and terminal manager state are evidenced, while their start-state obligations remain bounded as &lt;code&gt;not_proved&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hosted result
&lt;/h2&gt;

&lt;p&gt;The hosted governance and lifecycle matrices are green on the same pressure commit and install Ota from the contract's released &lt;code&gt;v1.6.25&lt;/code&gt; source. Local validation also passed Doctor, discovery,&lt;br&gt;
native and container dry-run admission, real native and container verification, refusal canaries, managed projection checks, and workflow linting. The hosted runs, not that local result, are the&lt;br&gt;
publication evidence.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Upstream project: &lt;a href="https://github.com/openflagr/flagr" rel="noopener noreferrer"&gt;openflagr/flagr&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pressure contract: &lt;a href="https://github.com/bobaikato/flagr/blob/58f5263a402b771418d8d91c6a0105bbd75c9247/ota.yaml" rel="noopener noreferrer"&gt;&lt;code&gt;ota.yaml&lt;/code&gt; at &lt;code&gt;58f5263a&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Governance matrix: &lt;a href="https://github.com/bobaikato/flagr/actions/runs/31834610141" rel="noopener noreferrer"&gt;run 31834610141&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Lifecycle matrix: &lt;a href="https://github.com/bobaikato/flagr/actions/runs/31834610099" rel="noopener noreferrer"&gt;run 31834610099&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-flagr-native-container-go-5m3c" rel="noopener noreferrer"&gt;https://ota.run/blog/pressure-testing-ota-on-flagr-native-container-go-5m3c&lt;/a&gt;&lt;/p&gt;

</description>
      <category>pressuretesting</category>
      <category>flagr</category>
      <category>go</category>
      <category>containers</category>
    </item>
    <item>
      <title>Test What Your AI Agents Must Not Do</title>
      <dc:creator>Bobai Kato</dc:creator>
      <pubDate>Wed, 12 Aug 2026 14:19:58 +0000</pubDate>
      <link>https://dev.to/otaready/test-what-your-ai-agents-must-not-do-3e1a</link>
      <guid>https://dev.to/otaready/test-what-your-ai-agents-must-not-do-3e1a</guid>
      <description>&lt;h2&gt;
  
  
  A Guardrail Without A Negative Test Is Still An Assumption
&lt;/h2&gt;

&lt;p&gt;Most AI agent governance starts with the positive path.&lt;/p&gt;

&lt;p&gt;A repository tells an agent which task it may run. The agent invokes that task. The test suite&lt;br&gt;
passes. CI goes green.&lt;/p&gt;

&lt;p&gt;That proves one useful thing: the allowed path still works.&lt;/p&gt;

&lt;p&gt;It does not prove that the forbidden path is still forbidden.&lt;/p&gt;

&lt;p&gt;A stale allowlist, an incomplete dependency closure, a runner regression, or a hand-maintained CI&lt;br&gt;
condition can quietly widen what an agent is able to execute. Every positive check may remain green&lt;br&gt;
while the safety boundary has stopped doing its job.&lt;/p&gt;

&lt;p&gt;This is why agent guardrails need negative tests.&lt;/p&gt;

&lt;p&gt;Ota calls those tests &lt;strong&gt;refusal canaries&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;They are available in Ota &lt;code&gt;v1.6.25&lt;/code&gt;, and they reflect a deliberate product position:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Agent safety should be executable contract truth, not a promise that the model will remember to&lt;br&gt;
behave.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ota uses the same &lt;code&gt;ota.yaml&lt;/code&gt; contract to define the safe task surface, evaluate the complete&lt;br&gt;
selected closure, refuse unsafe execution, emit machine-readable evidence, and project the canary&lt;br&gt;
into CI. There is no separate shell rule for the negative test to drift away from.&lt;/p&gt;

&lt;p&gt;That is the difference between documenting a guardrail and operating one.&lt;/p&gt;
&lt;h2&gt;
  
  
  What A Refusal Canary Tests
&lt;/h2&gt;

&lt;p&gt;A refusal canary names a task or workflow that must remain outside the repository's agent-safe&lt;br&gt;
execution boundary.&lt;/p&gt;

&lt;p&gt;For example, a repository may allow agents to run verification while reserving publishing for a&lt;br&gt;
human-controlled path:&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;agent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;safe_tasks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;verify&lt;/span&gt;
  &lt;span class="na"&gt;refusal_canaries&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;publish&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;workflow&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;release&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;verify&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;pnpm&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="nv"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;safe_for_agent&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;publish&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;pnpm&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="nv"&gt;publish&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;safe_for_agent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="na"&gt;workflows&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;release&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;intent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;release&lt;/span&gt;
    &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;publish&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The positive check proves that the allowed lane remains callable:&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 verify &lt;span class="nt"&gt;--agent&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The refusal canary tests the opposite boundary:&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 publish &lt;span class="nt"&gt;--agent&lt;/span&gt; &lt;span class="nt"&gt;--expect-refusal&lt;/span&gt;
ota up &lt;span class="nt"&gt;--workflow&lt;/span&gt; release &lt;span class="nt"&gt;--agent&lt;/span&gt; &lt;span class="nt"&gt;--expect-refusal&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These commands do not run the unsafe task and then inspect its exit code. Ota exercises the same&lt;br&gt;
agent admission boundary used by ordinary execution and requires refusal before the selected task,&lt;br&gt;
its dependencies, or the workflow closure starts.&lt;/p&gt;

&lt;p&gt;That distinction matters. The canary tests the execution boundary, not the behavior of a dangerous&lt;br&gt;
command after it has already begun.&lt;/p&gt;
&lt;h2&gt;
  
  
  Expected Refusal Becomes A Passing Test
&lt;/h2&gt;

&lt;p&gt;An ordinary agent refusal is a blocked execution result. That is the correct behavior for a direct&lt;br&gt;
attempt to run an unsafe task, but it is inconvenient as a CI assertion because the shell sees a&lt;br&gt;
non-zero exit.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;--expect-refusal&lt;/code&gt; gives that result explicit negative-control semantics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;refused_as_expected&lt;/code&gt; means the declared agent-safety boundary refused the selected target before
execution and the canary passes;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;refusal_not_observed&lt;/code&gt; means the target was admitted, so the canary fails; and&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;wrong_refusal_boundary&lt;/code&gt; means execution was blocked for another reason, so the canary still
fails.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The third state prevents an important false positive.&lt;/p&gt;

&lt;p&gt;Suppose &lt;code&gt;publish&lt;/code&gt; accidentally becomes agent-safe, but an unrelated organization policy still&lt;br&gt;
denies the command. A weak negative test would see "something failed" and call the guardrail&lt;br&gt;
healthy. Ota does not. The canary passes only when the safety boundary it was created to test is&lt;br&gt;
the boundary that refused the lane.&lt;/p&gt;

&lt;p&gt;For machine consumers, the same result is available as structured JSON:&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 publish &lt;span class="nt"&gt;--agent&lt;/span&gt; &lt;span class="nt"&gt;--expect-refusal&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 output carries the canary target, the runner-authored refusal record, whether execution&lt;br&gt;
started, and the associated blocked receipt when refusal was observed. The agent does not&lt;br&gt;
self-report that it behaved safely.&lt;/p&gt;

&lt;p&gt;This is where Ota is intentionally more opinionated than a task runner. A task runner answers,&lt;br&gt;
"Can I invoke this command?" Ota also asks, "Should this actor be admitted to this complete&lt;br&gt;
execution closure, and what evidence should exist when the answer is no?"&lt;/p&gt;
&lt;h2&gt;
  
  
  Why This Must Run Through The Real Runner
&lt;/h2&gt;

&lt;p&gt;It is easy to imitate a refusal canary with shell logic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$AGENT_MODE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"true"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
  &lt;/span&gt;&lt;span class="nb"&gt;exit &lt;/span&gt;1
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That only proves the shell condition still exists.&lt;/p&gt;

&lt;p&gt;It does not prove that Ota's selected task closure, safety declaration, dependency expansion, and&lt;br&gt;
execution admission agree. It can also drift independently from local execution, turning CI into a&lt;br&gt;
second policy system.&lt;/p&gt;

&lt;p&gt;A useful refusal canary has to pass through the same chokepoint as the real action. Otherwise the&lt;br&gt;
test and the boundary can fail independently while both appear green.&lt;/p&gt;

&lt;p&gt;Ota therefore derives the refusal from current contract truth at execution time. Authors declare&lt;br&gt;
which task or workflow is the canary; they do not author the reason that should make it pass.&lt;/p&gt;
&lt;h2&gt;
  
  
  Put Refusal Canaries In CI
&lt;/h2&gt;

&lt;p&gt;Local refusal gives agents and developers fast feedback. CI turns the same boundary into a&lt;br&gt;
repository-level control.&lt;/p&gt;

&lt;p&gt;A mature governance lane should test both directions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;At least one meaningful safe verification path is admitted and completes.&lt;/li&gt;
&lt;li&gt;Each material unsafe path selected as a canary is refused by the agent boundary.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ota's provider-neutral CI projection includes each declared refusal canary. The GitHub adapter&lt;br&gt;
emits each one as its own provider check with a stable merge-check identity. That lets a repository&lt;br&gt;
make the negative control merge-required instead of hiding several boundaries inside one opaque&lt;br&gt;
script step.&lt;/p&gt;

&lt;p&gt;This is stronger than one broad "agent safety" job. If the publish canary fails while verification&lt;br&gt;
still passes, the provider shows exactly which execution boundary widened.&lt;/p&gt;

&lt;p&gt;Branch protection remains provider-owned. Ota can generate and identify the GitHub check, but the&lt;br&gt;
repository's GitHub policy must make it required if the organization wants a non-optional merge&lt;br&gt;
gate. Future provider adapters must preserve the same ownership boundary rather than pretending&lt;br&gt;
Ota controls provider policy.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Refusal Canaries Prove
&lt;/h2&gt;

&lt;p&gt;A passing refusal canary proves a narrow and valuable claim:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;At this contract snapshot and runner boundary, the selected task or workflow was refused for the&lt;br&gt;
expected agent-safety reason before execution started.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It does not prove:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;that every dangerous repository action has been declared;&lt;/li&gt;
&lt;li&gt;that the maintainer classified every task correctly;&lt;/li&gt;
&lt;li&gt;that raw shell execution outside Ota is impossible;&lt;/li&gt;
&lt;li&gt;that CI branch protection requires the canary check;&lt;/li&gt;
&lt;li&gt;that runtime filesystem, network, credential, or provider controls were enforced; or&lt;/li&gt;
&lt;li&gt;that the repository is globally safe for autonomous operation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are different obligations.&lt;/p&gt;

&lt;p&gt;Contract-claim assurance can evaluate whether observable repository evidence supports a declared&lt;br&gt;
safety claim. Sandbox and capability providers can enforce runtime controls. CI policy can make&lt;br&gt;
checks mandatory. Refusal canaries test whether one declared runner boundary still refuses what it&lt;br&gt;
is supposed to refuse.&lt;/p&gt;

&lt;p&gt;Keeping those claims separate is what makes the result trustworthy.&lt;/p&gt;
&lt;h2&gt;
  
  
  Turn Incidents Into Permanent Negative Tests
&lt;/h2&gt;

&lt;p&gt;A refusal canary protects a boundary the repository has already identified. It cannot protect an&lt;br&gt;
omitted path merely because that path reaches a similar outcome.&lt;/p&gt;

&lt;p&gt;If &lt;code&gt;publish&lt;/code&gt; is refused, Ota has proved that the selected &lt;code&gt;publish&lt;/code&gt; closure was refused. It has not&lt;br&gt;
proved that another task, migration, helper script, or raw shell command cannot reach the same&lt;br&gt;
external effect. Presenting task-level refusal as effect-level protection would turn a precise&lt;br&gt;
negative test into a broader claim the evidence does not support.&lt;/p&gt;

&lt;p&gt;The practical operating model is a ratchet: when an incident or review exposes another material&lt;br&gt;
execution path, add that real task or workflow as a permanent canary. The incident should improve&lt;br&gt;
the executable governance suite, not remain only in a retrospective document.&lt;/p&gt;

&lt;p&gt;Ota's current refusal canaries are task- and workflow-bound. Effect-level assurance across&lt;br&gt;
equivalent execution paths is a separate, planned governance boundary; it is not something this&lt;br&gt;
feature claims to provide today. Until that boundary is implemented and pressure-tested, canary&lt;br&gt;
coverage should remain explicit about which declared lanes it exercises and which equivalent paths&lt;br&gt;
remain unproved.&lt;/p&gt;
&lt;h2&gt;
  
  
  Choosing Useful Canaries
&lt;/h2&gt;

&lt;p&gt;Do not turn every non-agent-safe helper into a canary. Choose actions whose accidental admission&lt;br&gt;
would materially weaken the repository's governance story.&lt;/p&gt;

&lt;p&gt;Good candidates include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;package publishing and release workflows;&lt;/li&gt;
&lt;li&gt;production deployment;&lt;/li&gt;
&lt;li&gt;destructive database operations;&lt;/li&gt;
&lt;li&gt;credentialed external mutations;&lt;/li&gt;
&lt;li&gt;infrastructure apply or teardown tasks; and&lt;/li&gt;
&lt;li&gt;expensive or metered execution that should require a different authority path.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The canary should name the real contract task or workflow. Do not create a fake unsafe command&lt;br&gt;
whose only purpose is to be refused; that proves the fixture, not the material repository boundary.&lt;/p&gt;

&lt;p&gt;Also keep the positive lane. A system that refuses everything is not safely governed execution. It&lt;br&gt;
is unavailable software. The useful result is selective admission: routine work remains easy, and&lt;br&gt;
materially different work remains outside the agent-safe closure.&lt;/p&gt;
&lt;h2&gt;
  
  
  Try It In Your Repository
&lt;/h2&gt;

&lt;p&gt;The fastest way to understand refusal canaries is to make one fail deliberately on a temporary&lt;br&gt;
branch.&lt;/p&gt;

&lt;p&gt;First, &lt;a href="https://ota.run/docs/install" rel="noopener noreferrer"&gt;install Ota&lt;/a&gt;, then inspect the repository before changing its&lt;br&gt;
contract:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ota doctor
ota tasks &lt;span class="nt"&gt;--use&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;Add one real unsafe task or workflow to &lt;code&gt;agent.refusal_canaries&lt;/code&gt;. Choose publishing, deployment,&lt;br&gt;
infrastructure mutation, or another material lane that already exists in the repository. Then&lt;br&gt;
validate both directions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ota validate
ota run verify &lt;span class="nt"&gt;--agent&lt;/span&gt;
ota run publish &lt;span class="nt"&gt;--agent&lt;/span&gt; &lt;span class="nt"&gt;--expect-refusal&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now temporarily make &lt;code&gt;publish&lt;/code&gt; agent-safe. The positive verification lane can remain green, but the&lt;br&gt;
refusal canary changes to &lt;code&gt;refusal_not_observed&lt;/code&gt; and exits non-zero. That is the failure shape the&lt;br&gt;
feature exists to expose: the repository still works, but its agent execution boundary has widened.&lt;/p&gt;

&lt;p&gt;When the local contract is correct, inspect the provider-neutral CI projection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ota ci projection &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--workflow&lt;/span&gt; verify &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--mode&lt;/span&gt; native &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--target-os&lt;/span&gt; linux &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For GitHub Actions, Ota can render the governed reusable workflow from that projection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ota ci github render &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--workflow&lt;/span&gt; verify &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--mode&lt;/span&gt; native &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--target-os&lt;/span&gt; linux
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The repository keeps ownership of triggers, permissions, secrets, runners, environments, and&lt;br&gt;
branch protection. Ota owns the contract-derived execution and refusal checks. That boundary lets&lt;br&gt;
teams adopt Ota without replacing their CI provider or creating another hand-maintained workflow&lt;br&gt;
language.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Larger Point
&lt;/h2&gt;

&lt;p&gt;AI governance cannot stop at telling agents what they may do.&lt;/p&gt;

&lt;p&gt;It also needs tests for what they must not be allowed to execute.&lt;/p&gt;

&lt;p&gt;Positive tests prove that an allowed path still works. Refusal canaries prove that a selected&lt;br&gt;
forbidden path still stops at the runner boundary. Together they turn an agent allowlist from&lt;br&gt;
static metadata into executable governance.&lt;/p&gt;

&lt;p&gt;That is the standard Ota is building toward: boundaries that are declared once, exercised through&lt;br&gt;
the real chokepoint, and retained as evidence rather than trusted as prose.&lt;/p&gt;

&lt;p&gt;If your repository already tells agents what they may run, the next useful question is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which one unsafe action would you want CI to prove they still cannot run?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Go Deeper
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ota.run/docs/reference/safe-agent-execution-and-refusal" rel="noopener noreferrer"&gt;Safe Agent Execution and Refusal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ota.run/docs/reference/contract-to-ci-governance" rel="noopener noreferrer"&gt;Contract-to-CI Governance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ota.run/blog/why-agent-safety-needs-enforced-boundaries-not-just-declared-ones-4m7q" rel="noopener noreferrer"&gt;Why Agent Safety Needs Enforced Boundaries, Not Just Declared Ones&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ota.run/blog/one-contract-multiple-enforcement-points-for-safe-ai-agent-execution" rel="noopener noreferrer"&gt;One Contract, Multiple Enforcement Points for Safe AI Agent Execution&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Originally posted here: &lt;a href="https://ota.run/blog/test-what-your-ai-agents-must-not-do" rel="noopener noreferrer"&gt;https://ota.run/blog/test-what-your-ai-agents-must-not-do&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aiagents</category>
      <category>agentsafety</category>
      <category>negativetesting</category>
      <category>executiongovernance</category>
    </item>
    <item>
      <title>Pressure-testing Ota on nopCommerce: managed .NET verification across native and container CI</title>
      <dc:creator>Bobai Kato</dc:creator>
      <pubDate>Tue, 11 Aug 2026 11:34:53 +0000</pubDate>
      <link>https://dev.to/otaready/pressure-testing-ota-on-nopcommerce-managed-net-verification-across-native-and-container-ci-icp</link>
      <guid>https://dev.to/otaready/pressure-testing-ota-on-nopcommerce-managed-net-verification-across-native-and-container-ci-icp</guid>
      <description>&lt;h2&gt;
  
  
  The question
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/nopSolutions/nopCommerce" rel="noopener noreferrer"&gt;nopCommerce&lt;/a&gt; is a useful test of where Ota should&lt;br&gt;
stop owning CI. Its .NET repository has substantial provider-owned workflow and deployment policy;&lt;br&gt;
Ota should not turn that into a second CI language. The pressure question was narrower: can Ota own&lt;br&gt;
a restore-and-build verification lane while GitHub retains triggers, runners, permissions,&lt;br&gt;
environments, and release policy?&lt;/p&gt;

&lt;p&gt;The setup task expresses restore as typed dependency hydration, then the workflow runs a finite&lt;br&gt;
aggregate verification task:&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;setup&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;prepare&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;dependency_hydration&lt;/span&gt;
    &lt;span class="na"&gt;medium&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;package_dependencies&lt;/span&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;dotnet_restore&lt;/span&gt;
      &lt;span class="na"&gt;cwd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;src/Tests/Nop.Tests&lt;/span&gt;

&lt;span class="na"&gt;verify&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;aggregate&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="s"&gt;build&lt;/span&gt;

&lt;span class="na"&gt;workflows&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;verify&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;setup&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;setup&lt;/span&gt;
    &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;verify&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The pressure result
&lt;/h2&gt;

&lt;p&gt;The contract declares native and container execution for the same workflow. Ota projects each into&lt;br&gt;
an Ota-owned reusable workflow, binds it to a target OS and projection identity, and asks the&lt;br&gt;
human-owned GitHub caller to supply that identity. The caller is an adapter, not a second authority.&lt;/p&gt;

&lt;p&gt;Moving the contract from the old implementation branch to released &lt;code&gt;v1.6.25&lt;/code&gt; changed both&lt;br&gt;
projection identities. The old caller refused immediately. That was the useful failure: it made&lt;br&gt;
stale governance YAML visible before any verification task ran. We regenerated the native and&lt;br&gt;
container projections with the released Ota binary, updated the caller bindings, and re-ran them.&lt;/p&gt;

&lt;p&gt;The result is two linked release-backed proofs at commit&lt;br&gt;
&lt;a href="https://github.com/bobaikato/nopCommerce/commit/409bcc073d39ace391e989f1434c223774ccff1d" rel="noopener noreferrer"&gt;&lt;code&gt;409bcc073d&lt;/code&gt;&lt;/a&gt;:&lt;br&gt;
the &lt;a href="https://github.com/bobaikato/nopCommerce/actions/runs/31434829320" rel="noopener noreferrer"&gt;contract matrix&lt;/a&gt; installed&lt;br&gt;
Ota &lt;code&gt;v1.6.25&lt;/code&gt;, executed restore and build on native and container Linux, and dry-ran the selected&lt;br&gt;
surface on macOS and Windows. The &lt;a href="https://github.com/bobaikato/nopCommerce/actions/runs/31434829472" rel="noopener noreferrer"&gt;managed governance run&lt;/a&gt;&lt;br&gt;
verified both regenerated identities before executing the finite task and archiving its receipt.&lt;/p&gt;

&lt;p&gt;This is the ownership split Ota needs: the contract owns restore, verification, admission, mode,&lt;br&gt;
and projection identity; GitHub retains its provider policy. Neither side has to duplicate the&lt;br&gt;
other's truth.&lt;/p&gt;

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

&lt;p&gt;Bootstrap truth is execution truth. Changing an Ota source from an implementation branch to a&lt;br&gt;
release changes the engine that interprets the contract, so it must change the projected lane's&lt;br&gt;
identity too. Treating that as a cosmetic edit would let a caller keep asserting governance that it&lt;br&gt;
was no longer able to reproduce.&lt;/p&gt;

&lt;p&gt;The initial refusal made the mismatch actionable: no task ran, the expected identity was reported,&lt;br&gt;
and &lt;code&gt;ota ci github sync&lt;/code&gt; could regenerate the Ota-owned files from the same release that CI would&lt;br&gt;
install. That is a better failure mode than a hand-maintained workflow silently drifting until a&lt;br&gt;
toolchain or execution change reveals it later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the split is practical
&lt;/h2&gt;

&lt;p&gt;This is not an argument that all GitHub workflow YAML should disappear. nopCommerce still needs&lt;br&gt;
provider-owned decisions that are specific to the repository: when to run, which runner to use,&lt;br&gt;
what credentials are available, and how releases are protected. Those are not contract defaults.&lt;/p&gt;

&lt;p&gt;What Ota can own without overreaching is the governed lane inside that caller: the selected&lt;br&gt;
workflow, its toolchain fulfillment, native or container mode, agent admission, and the stable&lt;br&gt;
check identity branch protection can require. That leaves a small human-owned adapter instead of&lt;br&gt;
two independently authored execution plans.&lt;/p&gt;

&lt;h2&gt;
  
  
  Boundary
&lt;/h2&gt;

&lt;p&gt;This is a restore-and-build baseline, not full nopCommerce proof. The modeled &lt;code&gt;test&lt;/code&gt; task was&lt;br&gt;
admitted and dry-run but not executed. Database-backed behavior, frontend workflows, runtime&lt;br&gt;
readiness, Windows execution, and deployment remain outside the claim. The container image uses a&lt;br&gt;
tag rather than a digest, so the container result is run-specific execution evidence, not immutable&lt;br&gt;
image provenance.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Upstream project: &lt;a href="https://github.com/nopSolutions/nopCommerce" rel="noopener noreferrer"&gt;nopSolutions/nopCommerce&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pressure contract: &lt;a href="https://github.com/bobaikato/nopCommerce/blob/409bcc073d39ace391e989f1434c223774ccff1d/ota.yaml" rel="noopener noreferrer"&gt;commit &lt;code&gt;409bcc073d&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Green contract matrix: &lt;a href="https://github.com/bobaikato/nopCommerce/actions/runs/31434829320" rel="noopener noreferrer"&gt;run 31434829320&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Green managed governance: &lt;a href="https://github.com/bobaikato/nopCommerce/actions/runs/31434829472" rel="noopener noreferrer"&gt;run 31434829472&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-nopcommerce-dotnet-projection-5m4d" rel="noopener noreferrer"&gt;https://ota.run/blog/pressure-testing-ota-on-nopcommerce-dotnet-projection-5m4d&lt;/a&gt;&lt;/p&gt;

</description>
      <category>pressuretesting</category>
      <category>nopcommerce</category>
      <category>dotnet</category>
      <category>containers</category>
    </item>
    <item>
      <title>Pressure-testing Ota on Azure SDK for .NET: typed NuGet hydration across ephemeral containers</title>
      <dc:creator>Bobai Kato</dc:creator>
      <pubDate>Mon, 10 Aug 2026 14:29:16 +0000</pubDate>
      <link>https://dev.to/otaready/pressure-testing-ota-on-azure-sdk-for-net-typed-nuget-hydration-across-ephemeral-containers-nog</link>
      <guid>https://dev.to/otaready/pressure-testing-ota-on-azure-sdk-for-net-typed-nuget-hydration-across-ephemeral-containers-nog</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;Azure SDK for .NET is a large multi-service repository. Its contributor, test, API-compatibility,&lt;br&gt;
code-generation, live-resource, and release paths are not one runnable surface.&lt;/p&gt;

&lt;p&gt;The Ota contract therefore owns one useful contributor slice and names it plainly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;restore the dependencies for &lt;code&gt;sdk/core/Azure.Core&lt;/code&gt; through the repository's &lt;code&gt;NuGet.Config&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;build that library with &lt;code&gt;--no-restore&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;execute the same sequence in native mode and in a fresh .NET SDK container.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is enough to pressure a real boundary without pretending that a green build means the Azure&lt;br&gt;
SDK repository, its services, or its releases are ready.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Contract
&lt;/h2&gt;

&lt;p&gt;The repository owns package-source policy. Ota owns the typed restore operation that consumes 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;tasks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;setup&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;prepare&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;dependency_hydration&lt;/span&gt;
      &lt;span class="na"&gt;medium&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;package_dependencies&lt;/span&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;dotnet_restore&lt;/span&gt;
        &lt;span class="na"&gt;cwd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sdk/core/Azure.Core/src&lt;/span&gt;
        &lt;span class="na"&gt;config_file&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;../../../../NuGet.Config&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The later build is deliberately no-restore:&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;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="nv"&gt;setup&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;dotnet&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="nv"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;--no-restore&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;--framework&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;net10.0&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="na"&gt;cwd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sdk/core/Azure.Core/src&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes the boundary testable. If restore state does not reach the build, &lt;code&gt;--no-restore&lt;/code&gt; fails&lt;br&gt;
instead of silently going back to the network.&lt;/p&gt;
&lt;h2&gt;
  
  
  Ephemeral Container Cache Ownership
&lt;/h2&gt;

&lt;p&gt;The selected container context is ephemeral, so restore and build do not share a long-lived&lt;br&gt;
container. The contract declares the NuGet cache as Ota-managed attachment state:&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;execution&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;contexts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;dotnet:container&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;backend&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;container&lt;/span&gt;
      &lt;span class="na"&gt;lifecycle&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ephemeral&lt;/span&gt;
      &lt;span class="na"&gt;container&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mcr.microsoft.com/dotnet/sdk:10.0.103&lt;/span&gt;
      &lt;span class="na"&gt;attachments&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;isolated_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;.nuget/packages&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ota derives &lt;code&gt;NUGET_PACKAGES&lt;/code&gt; for the selected context and carries that cache across the restore and&lt;br&gt;
later no-restore build containers. The repo does not need to duplicate a host cache path or a&lt;br&gt;
Docker volume name in a helper script.&lt;/p&gt;

&lt;p&gt;Azure SDK exposed two Ota corrections while this was pressure-tested:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;command tasks must mount the contract root, then apply &lt;code&gt;command.cwd&lt;/code&gt; inside it, because restore
writes shared intermediates under the repository &lt;code&gt;artifacts/&lt;/code&gt; tree;&lt;/li&gt;
&lt;li&gt;typed &lt;code&gt;dotnet_restore&lt;/code&gt; must carry the resolved NuGet package cache into later ephemeral tasks,
not merely report that restore exited successfully.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are runner ownership fixes. They are not Azure-specific workflow glue.&lt;/p&gt;
&lt;h2&gt;
  
  
  .NET Version Truth
&lt;/h2&gt;

&lt;p&gt;The contract follows &lt;code&gt;global.json&lt;/code&gt;, which requests &lt;code&gt;10.0.103&lt;/code&gt; with &lt;code&gt;rollForward: feature&lt;/code&gt;:&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;toolchains&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;dotnet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;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;&amp;gt;=10.0.103,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;lt;10.1.0"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That admits valid servicing releases in the same feature band. An exact patch equality would turn&lt;br&gt;
the repository's declared roll-forward policy into a false readiness failure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Released Matrix
&lt;/h2&gt;

&lt;p&gt;The requalification matrix installs Ota from the contract as released &lt;code&gt;v1.6.25&lt;/code&gt;, verifies the&lt;br&gt;
binary version before any Ota command runs, and pins all GitHub Actions by immutable revision.&lt;/p&gt;

&lt;p&gt;The released &lt;a href="https://github.com/bobaikato/azure-sdk-for-net/actions/runs/31392647606" rel="noopener noreferrer"&gt;four-lane matrix&lt;/a&gt;&lt;br&gt;
is green. Every lane recorded &lt;code&gt;ota v1.6.25 (source, commit a3e9f98f3)&lt;/code&gt; before running Ota.&lt;/p&gt;

&lt;p&gt;It covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;validate&lt;/code&gt;, Doctor, task/workflow discovery, and safe/unsafe task-surface discovery;&lt;/li&gt;
&lt;li&gt;task and workflow dry-runs on Ubuntu, macOS, Windows, and Ubuntu container mode;&lt;/li&gt;
&lt;li&gt;real restore, no-restore build, and declared workflow execution in each advertised mode;&lt;/li&gt;
&lt;li&gt;retained version, diagnosis, contract snapshot, and archived workflow receipt artifacts on every result.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The receipts agree on one contract snapshot:&lt;br&gt;
&lt;code&gt;sha256:f7a96703141dc4e6cbb9626e0f893f4692d781db48113ac639c18770d972134b&lt;/code&gt;.&lt;br&gt;
The Ubuntu container receipt records &lt;code&gt;dotnet:container&lt;/code&gt; with ephemeral lifecycle; the other three&lt;br&gt;
receipts record the native context. A historical matrix that installed an implementation branch is&lt;br&gt;
not evidence for this release claim.&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Does Not Prove
&lt;/h2&gt;

&lt;p&gt;This is selected-lane evidence only. It does not prove:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;every Azure SDK client library, test suite, API-compatibility check, generator, or release build;&lt;/li&gt;
&lt;li&gt;Azure credentials, live-resource tests, external package-feed availability, or service behavior;&lt;/li&gt;
&lt;li&gt;application correctness, package publication, or repository-wide readiness;&lt;/li&gt;
&lt;li&gt;container execution on macOS or Windows, where those lanes exercise native contract execution;&lt;/li&gt;
&lt;li&gt;hermetic replay or a contract-pinned expected identity for the SDK image tag.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last point is an intentional limitation to keep visible: this contract records the configured&lt;br&gt;
SDK image tag, not an immutable image digest. A mutable tag is not a maintainer-declared immutable&lt;br&gt;
input, so this is not a claim of a pinned container base.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;The useful result is not that Ota can invoke &lt;code&gt;dotnet restore&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It is that the contract declares dependency intent once, while the runner owns the workspace and&lt;br&gt;
cache continuity needed to make a later no-restore build meaningful across fresh containers. The&lt;br&gt;
result remains narrow, inspectable, and honest about the much larger Azure SDK surface it does not&lt;br&gt;
govern.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Upstream repository: &lt;a href="https://github.com/Azure/azure-sdk-for-net" rel="noopener noreferrer"&gt;Azure/azure-sdk-for-net&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pressure contract: &lt;a href="https://github.com/bobaikato/azure-sdk-for-net/blob/bobai/azure-sdk-for-net-ota-pressure/ota.yaml" rel="noopener noreferrer"&gt;Azure SDK &lt;code&gt;ota.yaml&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pressure matrix: &lt;a href="https://github.com/bobaikato/azure-sdk-for-net/blob/bobai/azure-sdk-for-net-ota-pressure/.github/workflows/ota-contract-matrix.yml" rel="noopener noreferrer"&gt;Azure SDK Ota contract matrix&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Released Ota evidence: &lt;a href="https://github.com/bobaikato/azure-sdk-for-net/actions/runs/31392647606" rel="noopener noreferrer"&gt;green Azure SDK matrix run&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-azure-sdk-for-net-3v9q" rel="noopener noreferrer"&gt;https://ota.run/blog/pressure-testing-ota-on-azure-sdk-for-net-3v9q&lt;/a&gt;&lt;/p&gt;

</description>
      <category>pressuretesting</category>
      <category>azuresdk</category>
      <category>dotnet</category>
      <category>nuget</category>
    </item>
    <item>
      <title>Pressure-testing Ota on Grafana: bounded Go proof and a staged Compose slice</title>
      <dc:creator>Bobai Kato</dc:creator>
      <pubDate>Wed, 05 Aug 2026 17:37:56 +0000</pubDate>
      <link>https://dev.to/otaready/pressure-testing-ota-on-grafana-bounded-go-proof-and-a-staged-compose-slice-2hf8</link>
      <guid>https://dev.to/otaready/pressure-testing-ota-on-grafana-bounded-go-proof-and-a-staged-compose-slice-2hf8</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;Grafana is a large mixed repository. Its upstream CI spans sharded backend and frontend tests,&lt;br&gt;
multiple databases, end-to-end paths, release builds, and a Tilt-owned development environment.&lt;/p&gt;

&lt;p&gt;That makes it a useful pressure target precisely because a plausible-looking single &lt;code&gt;verify&lt;/code&gt;&lt;br&gt;
command would be dishonest.&lt;/p&gt;

&lt;p&gt;The Ota 1.6.25 contract owns two specific surfaces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a Go package build path rooted at &lt;code&gt;./pkg/...&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;a separately declared Compose dependency slice for PostgreSQL, Prometheus, Loki, and Tempo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything else remains outside the claim.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Contract
&lt;/h2&gt;

&lt;p&gt;The backend proof is intentionally narrow. Ota hydrates Go modules, then runs the named package&lt;br&gt;
build rather than guessing at Grafana's full sharded test matrix:&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;setup&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;prepare&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;dependency_hydration&lt;/span&gt;
      &lt;span class="na"&gt;medium&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;package_dependencies&lt;/span&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;go_modules&lt;/span&gt;

  &lt;span class="na"&gt;build:backend:pkg&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;go&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="nv"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;./pkg/...&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="nv"&gt;setup&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;workflows&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;proof:backend:pkg&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;setup&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;setup&lt;/span&gt;
    &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;build:backend:pkg&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Go range is also honest about the claimed lane:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;gt;=1.26.3 &amp;lt;1.27&lt;/code&gt;, not an artificial patch pin;&lt;/li&gt;
&lt;li&gt;native and ephemeral-container modes for the package build;&lt;/li&gt;
&lt;li&gt;no claim that this range proves every Grafana build or test path.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The named lane matters. &lt;code&gt;build:backend:pkg&lt;/code&gt; says what it owns. A generic &lt;code&gt;build&lt;/code&gt; or &lt;code&gt;verify&lt;/code&gt;&lt;br&gt;
would blur frontend, release, and backend truth in a repository where those are different paths.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Compose Boundary
&lt;/h2&gt;

&lt;p&gt;The development workflow is equally bounded. Grafana's frontend-service environment uses more than&lt;br&gt;
the four observability dependencies in this contract, including application and proxy behavior&lt;br&gt;
owned by Tilt. Ota therefore models only the selected Compose services:&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;devenv:observability:up&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;compose&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;up&lt;/span&gt;
      &lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;postgres&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;prometheus&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;loki&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;tempo&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;effects&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;network&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;network_kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;container_image_hydration&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ota captures the Compose adapter inputs, starts only that selection, inspects it with a separate&lt;br&gt;
safe status task, archives a receipt, and stops it again. This is not a claim that Grafana itself,&lt;br&gt;
its frontend, its proxy, or its Tilt orchestration became ready.&lt;/p&gt;
&lt;h2&gt;
  
  
  Released Install Truth
&lt;/h2&gt;

&lt;p&gt;The pressure matrix consumes the Ota version declared in the contract:&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.25"&lt;/span&gt;

&lt;span class="na"&gt;agent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;bootstrap&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;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;version&lt;/span&gt;
        &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1.6.25&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The GitHub workflow installs via &lt;code&gt;ota-run/setup&lt;/code&gt; with &lt;code&gt;source: contract&lt;/code&gt;, checks that the installed&lt;br&gt;
binary is exactly &lt;code&gt;v1.6.25&lt;/code&gt;, and retains the version record, topology, receipts, and proof output&lt;br&gt;
for seven days on every result. The workflow actions themselves are pinned to immutable revisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What The Matrix Covers
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;v1.6.25&lt;/code&gt; requalification matrix covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;contract validation, Doctor, task discovery, safe-task discovery, workflow discovery, and execution-topology export on Ubuntu, macOS, and Windows;&lt;/li&gt;
&lt;li&gt;native task and workflow dry-runs across that matrix;&lt;/li&gt;
&lt;li&gt;container task and workflow dry-runs on Ubuntu;&lt;/li&gt;
&lt;li&gt;real native and ephemeral-container execution of the selected Go build on Ubuntu;&lt;/li&gt;
&lt;li&gt;real start, safe status inspection, archived receipt, receipt diff, and stop for the selected observability Compose dependencies on Ubuntu.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The released-&lt;code&gt;v1.6.25&lt;/code&gt; requalification is green: &lt;a href="https://github.com/bobaikato/grafana/actions/runs/30965322618" rel="noopener noreferrer"&gt;Grafana matrix run&lt;br&gt;
30965322618&lt;/a&gt;. All three legs&lt;br&gt;
recorded &lt;code&gt;ota v1.6.25&lt;/code&gt; at source commit &lt;code&gt;a3e9f98f3&lt;/code&gt;. The Ubuntu evidence also retains the Compose&lt;br&gt;
receipt and its unchanged baseline comparison, including the selected image digests. That comparison&lt;br&gt;
is witness-only: it does not execute a replay or establish hermeticity.&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Does Not Prove
&lt;/h2&gt;

&lt;p&gt;This is selected-lane evidence, not a Grafana-wide readiness verdict. It does not prove:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Grafana's sharded backend unit, integration, frontend, E2E, or release workflows;&lt;/li&gt;
&lt;li&gt;application readiness, user-visible dashboards, API correctness, or migration behavior;&lt;/li&gt;
&lt;li&gt;the Tilt-managed frontend-service application, proxy, or lifecycle;&lt;/li&gt;
&lt;li&gt;Docker Desktop behavior on macOS or Windows;&lt;/li&gt;
&lt;li&gt;registry availability, external services, or host capacity beyond each selected execution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The material uncovered behavior is therefore explicitly repo-owned or unproved, not silently&lt;br&gt;
absorbed into a green label.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Upstream repository: &lt;a href="https://github.com/grafana/grafana" rel="noopener noreferrer"&gt;grafana/grafana&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pressure contract: &lt;a href="https://github.com/bobaikato/grafana/blob/bobai/grafana-ota-pressure/ota.yaml" rel="noopener noreferrer"&gt;grafana &lt;code&gt;ota.yaml&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pressure matrix: &lt;a href="https://github.com/bobaikato/grafana/blob/bobai/grafana-ota-pressure/.github/workflows/test-ota-contract-matrix.yml" rel="noopener noreferrer"&gt;Grafana Ota contract matrix&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Released Ota evidence: &lt;a href="https://github.com/bobaikato/grafana/actions/runs/30965322618" rel="noopener noreferrer"&gt;green matrix run 30965322618&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-grafana-2v3h" rel="noopener noreferrer"&gt;https://ota.run/blog/pressure-testing-ota-on-grafana-2v3h&lt;/a&gt;&lt;/p&gt;

</description>
      <category>pressuretesting</category>
      <category>grafana</category>
      <category>reporeadiness</category>
      <category>go</category>
    </item>
  </channel>
</rss>
