<?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: Aadi Harale</title>
    <description>The latest articles on DEV Community by Aadi Harale (@aadi_harale_60a018d1c4c28).</description>
    <link>https://dev.to/aadi_harale_60a018d1c4c28</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%2F4204159%2Fee6b60f4-0d8a-4716-8ad7-4dc5cfa7c656.png</url>
      <title>DEV Community: Aadi Harale</title>
      <link>https://dev.to/aadi_harale_60a018d1c4c28</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aadi_harale_60a018d1c4c28"/>
    <language>en</language>
    <item>
      <title>Merged Isn't Delivered: Building CommitmentProof, a Two-Agent Switch Workflow</title>
      <dc:creator>Aadi Harale</dc:creator>
      <pubDate>Sat, 07 Nov 2026 18:07:10 +0000</pubDate>
      <link>https://dev.to/aadi_harale_60a018d1c4c28/merged-isnt-delivered-building-commitmentproof-a-two-agent-switch-workflow-405n</link>
      <guid>https://dev.to/aadi_harale_60a018d1c4c28/merged-isnt-delivered-building-commitmentproof-a-two-agent-switch-workflow-405n</guid>
      <description>&lt;p&gt;&lt;em&gt;A pull request is merged. 27 of 27 checks are green. Support is ready to tell the customer "it's fixed." Can they?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The short version&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CommitmentProof&lt;/strong&gt; checks the proof behind a software promise before anyone tells a customer it is kept.&lt;/li&gt;
&lt;li&gt;Two separate Codex agents work in one Switch-connected Discord room with a human. The &lt;strong&gt;Evidence Agent&lt;/strong&gt; collects source-linked GitHub proof. The &lt;strong&gt;Coordinator Agent&lt;/strong&gt; applies a deterministic completion policy and drafts the next step.&lt;/li&gt;
&lt;li&gt;On a real merged PR, &lt;a href="https://github.com/microsoft/vscode/pull/331010" rel="noopener noreferrer"&gt;microsoft/vscode #331010&lt;/a&gt;, the policy returned &lt;code&gt;NEEDS_EVIDENCE&lt;/code&gt;. The PR was merged and 27 of 27 checks passed, but nothing proved deployment or QA.&lt;/li&gt;
&lt;li&gt;Instead of closing the promise, the Coordinator proposed an exact GitHub issue. A human replied &lt;code&gt;approve&lt;/code&gt;, created &lt;a href="https://github.com/bh00mi-11/CommitmentProof/issues/2" rel="noopener noreferrer"&gt;issue #2&lt;/a&gt; by hand, and the Coordinator verified it through GitHub's read-only API.&lt;/li&gt;
&lt;li&gt;The workflow concluded with a human-approved GitHub follow-up, independently verified by the Coordinator Agent. Every decision and action remained traceable inside the Switch collaboration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built for &lt;strong&gt;Flip the Switch&lt;/strong&gt; by WeMakeDevs, Track 01: Best Business Workflow. &lt;a href="https://github.com/bh00mi-11/CommitmentProof" rel="noopener noreferrer"&gt;Repo&lt;/a&gt; · &lt;a href="https://commitment-proof.vercel.app/" rel="noopener noreferrer"&gt;Live dashboard&lt;/a&gt; · &lt;a href="https://youtu.be/_T1D_nQKd2g" rel="noopener noreferrer"&gt;Demo video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch the demo:&lt;/strong&gt; two agents and a human working in the real Switch room.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/_T1D_nQKd2g" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: merged is not delivered
&lt;/h2&gt;

&lt;p&gt;Support teams close customer promises on engineering status. A developer merges the fix, CI goes green, and someone writes "this is resolved" to the customer. That message is a claim about production. The evidence behind it is a claim about the repository.&lt;/p&gt;

&lt;p&gt;The gap between the two is where trust breaks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The merge may not have shipped to the customer's environment yet.&lt;/li&gt;
&lt;li&gt;CI proves the tests passed, not that the customer's original scenario now works.&lt;/li&gt;
&lt;li&gt;Nobody may have reproduced the bug and confirmed it is gone.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We wanted a workflow that asks one business question and refuses to guess: &lt;strong&gt;can we confidently tell this customer their promised fix has been delivered?&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  A real example
&lt;/h3&gt;

&lt;p&gt;We ran the workflow on a real public pull request, &lt;a href="https://github.com/microsoft/vscode/pull/331010" rel="noopener noreferrer"&gt;microsoft/vscode #331010&lt;/a&gt;. We do not operate VS Code's production environment, which makes it a fair test: the code can only see what GitHub shows.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Evidence&lt;/th&gt;
&lt;th&gt;What GitHub showed&lt;/th&gt;
&lt;th&gt;Verdict&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pull request&lt;/td&gt;
&lt;td&gt;Merged on 16 Aug 2026&lt;/td&gt;
&lt;td&gt;Verified&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CI checks&lt;/td&gt;
&lt;td&gt;27 of 27 returned check runs succeeded (&lt;a href="https://github.com/microsoft/vscode/commit/026fe5316ffc0998aab553b3ca3d4f36d8e8792f/checks" rel="noopener noreferrer"&gt;checks&lt;/a&gt;)&lt;/td&gt;
&lt;td&gt;Verified&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;No independent deployment record&lt;/td&gt;
&lt;td&gt;Unverified&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QA&lt;/td&gt;
&lt;td&gt;No reproduction of the original scenario&lt;/td&gt;
&lt;td&gt;Unverified&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two green rows look like success. The policy answer is &lt;code&gt;NEEDS_EVIDENCE&lt;/code&gt;: do not tell the customer the fix is delivered until the missing proof exists. That is the system working, not failing.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fcc7r1pagfzkfaeu15oet.jpg" class="article-body-image-wrapper"&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%2Farticles%2Fcc7r1pagfzkfaeu15oet.jpg" alt="CommitmentProof dashboard showing NEEDS EVIDENCE for microsoft/vscode PR 331010" width="800" height="513"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The live dashboard on microsoft/vscode #331010: pull request and CI verified, deployment and QA missing, completion claim not permitted.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Why two agents and a human
&lt;/h2&gt;

&lt;p&gt;We split the job so that no single participant both gathers the proof and decides what it means. The agent that collects evidence never declares a promise kept. The agent that judges the evidence never fetches it. A human makes every external decision.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Participant&lt;/th&gt;
&lt;th&gt;Does&lt;/th&gt;
&lt;th&gt;Never does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Human (&lt;code&gt;bhoomi_gulabani&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Asks the question, reviews the exact proposal, replies &lt;code&gt;approve&lt;/code&gt; or &lt;code&gt;reject&lt;/code&gt;, performs the external action&lt;/td&gt;
&lt;td&gt;Hands the final call to an agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Evidence Agent (&lt;code&gt;commitmentproof-evidence-agent&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Reads the PR and its check runs with read-only access, returns each finding with a source link, names what is missing&lt;/td&gt;
&lt;td&gt;Infers success from missing evidence, closes tasks, messages customers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coordinator Agent (&lt;code&gt;commitmentproof-coordinator&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Receives the findings in the room, applies the completion policy, drafts an exact follow-up, asks for approval, verifies the result&lt;/td&gt;
&lt;td&gt;Writes to GitHub or publishes anything without explicit human approval&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We gave each agent a distinct responsibility inside our Switch-connected Discord room. The Evidence Agent focuses on collecting verifiable technical evidence, while the Coordinator evaluates those findings, prepares the next action, and involves the human before any external change.&lt;/p&gt;

&lt;p&gt;This separation makes the workflow auditable: everyone in the room can see where the evidence came from, how the decision was reached, and who authorized the final action.&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="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{team}-evidence"&lt;/span&gt;
  &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;Investigate the commitment with read-only source access.&lt;/span&gt;
    &lt;span class="s"&gt;Return PR merged status, required test status, deployment verification, QA confirmation,&lt;/span&gt;
    &lt;span class="s"&gt;and a link to each actual source. Never infer success from missing evidence.&lt;/span&gt;
    &lt;span class="s"&gt;Send findings to @{team}-coordinator in the room. Do not close tasks or message customers.&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{team}-coordinator"&lt;/span&gt;
  &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;Receive findings from the evidence agent. If any check fails or is unknown,&lt;/span&gt;
    &lt;span class="s"&gt;keep the customer promise open and prepare an evidence-linked follow-up draft.&lt;/span&gt;
    &lt;span class="s"&gt;Never publish customer communications or modify GitHub without explicit human approval.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The split is not decoration. Raw evidence stays separate from the decision about whether a promise is safe to close, and a person can see both in the same conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture
&lt;/h2&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2F5741dyrxahchbwtiqrdk.jpg" class="article-body-image-wrapper"&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%2Farticles%2F5741dyrxahchbwtiqrdk.jpg" alt="CommitmentProof architecture: agents read and propose, only the human writes to GitHub" width="800" height="404"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;One Switch room, two agents, one human. The only write to GitHub is the human's.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Both agents only read GitHub. The single write in the whole workflow, issue #2, is a human action that comes after an explicit &lt;code&gt;approve&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Ff4849rop5sfhyokuzu2s.jpg" class="article-body-image-wrapper"&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%2Farticles%2Ff4849rop5sfhyokuzu2s.jpg" alt="Recorded Switch session panel in the CommitmentProof dashboard" width="799" height="325"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The dashboard's recorded Switch session: every step labelled as recorded, human-approved or manual, never as a live feed.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How we built it
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Every piece of evidence carries its source
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;github_evidence.py&lt;/code&gt; is a read-only collector built on the GitHub REST API. It starts by assuming nothing. Every field begins as unknown, and deployment and QA stay unknown because GitHub cannot prove them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;unknown&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;evidence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Any&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pr_merged&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unknown&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tests_passed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unknown&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deployment_verified&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unknown&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qa_confirmed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unknown&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;collection_errors&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It then reads the pull request, takes the head commit, and pages through every check run on that commit. A single failed, cancelled or timed-out run makes the test evidence negative. Anything queued, skipped or neutral leaves it unknown, never green:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;statuses&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;conclusion&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;check&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;checks&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;all_success&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;success&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;statuses&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;any_failure&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;any&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failure&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cancelled&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;timed_out&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action_required&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;startup_failure&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stale&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;statuses&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;check_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://github.com/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;encoded_repo&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/commit/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;head_sha&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/checks&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;any_failure&lt;/span&gt; &lt;span class="nf"&gt;else &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;all_success&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;evidence&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tests_passed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;check_url&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every &lt;code&gt;True&lt;/code&gt; comes with an &lt;code&gt;https://&lt;/code&gt; link a reviewer can click. That is what the agents paste into the room.&lt;/p&gt;

&lt;h3&gt;
  
  
  A policy that fails closed
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;commitment_proof.py&lt;/code&gt; is the completion policy. It is 58 lines of plain Python with no model inside it, so the same evidence always gets the same answer. Its docstring is the whole philosophy: &lt;em&gt;"Unknown values fail closed. Review eligibility is NOT completion."&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pr_merged&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pull request merged&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tests_passed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;required tests passed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deployment_verified&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deployment verified&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qa_confirmed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;QA confirmation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;entry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;evidence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;reasons&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No evidence for &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;continue&lt;/span&gt;
    &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;source&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;blocked&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
        &lt;span class="n"&gt;reasons&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Negative evidence: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;reasons&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Unresolved: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;reasons&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Source link missing for &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It can return three verdicts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Verdict&lt;/th&gt;
&lt;th&gt;When&lt;/th&gt;
&lt;th&gt;Permitted action&lt;/th&gt;
&lt;th&gt;Can claim complete?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BLOCKED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Any evidence is negative&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PREPARE_FOLLOWUP_DRAFT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NEEDS_EVIDENCE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Anything is unknown or lacks a source link&lt;/td&gt;
&lt;td&gt;&lt;code&gt;REQUEST_EVIDENCE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;REVIEW_READY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All four checks are proven with links&lt;/td&gt;
&lt;td&gt;&lt;code&gt;REQUEST_HUMAN_APPROVAL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The last column is the point. Even with perfect evidence, &lt;code&gt;can_claim_complete&lt;/code&gt; stays &lt;code&gt;false&lt;/code&gt;. The best the policy can do is hand the decision to a human.&lt;/p&gt;

&lt;h3&gt;
  
  
  The dashboard
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://commitment-proof.vercel.app/" rel="noopener noreferrer"&gt;public dashboard&lt;/a&gt; is React, Vite and TypeScript on Vercel, with Python API functions for live, read-only investigations. It shows the four evidence cards, the verdict, and the recorded Switch session. It labels that session "Actual handoff – not a live event feed", because that is what it is.&lt;/p&gt;

&lt;h2&gt;
  
  
  The run, message by message
&lt;/h2&gt;

&lt;p&gt;Everything below happened in &lt;code&gt;#commitment-proof&lt;/code&gt; in our &lt;strong&gt;CommitmentProof Lab&lt;/strong&gt; Discord server on 7 November 2026. The agents are real Switch participants with their own usernames, not characters in a dashboard.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Time (as shown in Discord)&lt;/th&gt;
&lt;th&gt;Who&lt;/th&gt;
&lt;th&gt;What happened&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;5:13 PM&lt;/td&gt;
&lt;td&gt;Coordinator&lt;/td&gt;
&lt;td&gt;Replies to the Evidence Agent's handoff with a follow-up task draft: "Current assessment: NEEDS_EVIDENCE / REQUEST_EVIDENCE; completion cannot be claimed."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8:52 PM&lt;/td&gt;
&lt;td&gt;Coordinator&lt;/td&gt;
&lt;td&gt;Posts "Proposed GitHub issue — bh00mi-11/CommitmentProof" with the exact title, body and both evidence links&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8:54 PM&lt;/td&gt;
&lt;td&gt;Human&lt;/td&gt;
&lt;td&gt;Replies &lt;code&gt;approve&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8:54 PM&lt;/td&gt;
&lt;td&gt;Coordinator&lt;/td&gt;
&lt;td&gt;"Approval received for the exact proposed title and body. I have not created the issue."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8:57 PM&lt;/td&gt;
&lt;td&gt;Human&lt;/td&gt;
&lt;td&gt;Creates issue #2 by hand and posts the URL, asking the Coordinator to verify it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8:58 PM&lt;/td&gt;
&lt;td&gt;Coordinator&lt;/td&gt;
&lt;td&gt;"Verified the issue … via GitHub's read-only API. It exists and is open. The title matches exactly."&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  1. The Evidence Agent hands off
&lt;/h3&gt;

&lt;p&gt;The Evidence Agent's handoff said the earlier check read showed 27 of 27 completed runs successful, that deployment and QA remained unknown, and that &lt;code&gt;assess()&lt;/code&gt; returned &lt;code&gt;NEEDS_EVIDENCE&lt;/code&gt; / &lt;code&gt;REQUEST_EVIDENCE&lt;/code&gt; with &lt;code&gt;can_claim_complete=false&lt;/code&gt;. Switch recorded the handoff as Evidence Agent message &lt;code&gt;sw_f3edfcaadde246219504809024217a72&lt;/code&gt; → Coordinator follow-up draft &lt;code&gt;sw_62aebc7a04614e88bcd9d06065b6ec04&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fk0oarpo3kc61u3jwq8f0.jpg" class="article-body-image-wrapper"&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%2Farticles%2Fk0oarpo3kc61u3jwq8f0.jpg" alt="Evidence handoff and Coordinator follow-up draft in Discord" width="800" height="724"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The handoff in #commitment-proof: the evidence summary, then the Coordinator's follow-up draft with NEEDS_EVIDENCE.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The Coordinator proposes, it does not act
&lt;/h3&gt;

&lt;p&gt;The Coordinator turned the gap into a concrete request. This is the exact proposal it posted:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Title:&lt;/strong&gt; Verify deployment and QA for merged VS Code fix #331010&lt;/p&gt;

&lt;p&gt;The fix in microsoft/vscode PR #331010 is merged, and all 27 completed CI checks succeeded. Deployment to the affected customer environment and QA reproduction of the original scenario are still unverified. Please attach deployment evidence identifying the deployed build/environment and record QA reproduction results before the customer is told the fix is delivered.&lt;/p&gt;

&lt;p&gt;Reply &lt;strong&gt;APPROVE&lt;/strong&gt; to approve this exact title and body for you to create manually, or &lt;strong&gt;REJECT&lt;/strong&gt; to decline it. No issue has been created. The automated Discord approval backend is not deployed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Notice the last two sentences. The agent states what it has &lt;em&gt;not&lt;/em&gt; done and why.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. A human decides
&lt;/h3&gt;

&lt;p&gt;The Coordinator acknowledged that the human had approved the exact proposed title and body &lt;em&gt;this exact&lt;/em&gt; title and body, and again said it had not created the issue. Switch recorded the decision as approval &lt;code&gt;sw_353065a05331d2295d29b05961ea6c17&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fzanffqkl9ph2dlie5zwa.jpg" class="article-body-image-wrapper"&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%2Farticles%2Fzanffqkl9ph2dlie5zwa.jpg" alt="Coordinator proposal and the human approve reply in Discord" width="799" height="397"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The exact proposal, the human's "approve" at 8:54 PM, and the Coordinator acting only after it.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The human acts, the agent verifies
&lt;/h3&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fjr0sfgpc5k8qbl3exvww.jpg" class="article-body-image-wrapper"&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%2Farticles%2Fjr0sfgpc5k8qbl3exvww.jpg" alt="Coordinator confirms approval and the human reports the manually created issue" width="799" height="288"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The Coordinator confirms it has not created the issue; the human creates issue #2 and asks for verification.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The human created &lt;a href="https://github.com/bh00mi-11/CommitmentProof/issues/2" rel="noopener noreferrer"&gt;issue #2&lt;/a&gt; and asked the Coordinator to check it, adding: "Clearly state that issue creation was manual, not automated." The Coordinator read the issue back through GitHub's read-only API and reported:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Verified the issue at &lt;a href="https://github.com/bh00mi-11/CommitmentProof/issues/2" rel="noopener noreferrer"&gt;https://github.com/bh00mi-11/CommitmentProof/issues/2&lt;/a&gt; via GitHub's read-only API. It exists and is open. The title matches exactly: "Verify deployment and QA for merged VS Code fix #331010". The body matches the approved proposal, including the unresolved deployment/QA request and both evidence links (the merged PR and 27/27 successful checks). Issue creation was performed manually by you after approval; it was not automated by CommitmentProof.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2F1oyuhj7zzvikds87bgkz.jpg" class="article-body-image-wrapper"&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%2Farticles%2F1oyuhj7zzvikds87bgkz.jpg" alt="GitHub preview of issue 2 and the Coordinator read-only verification" width="800" height="386"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;GitHub's preview of issue #2 and the Coordinator's read-only check.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The business task moved from a question to a traceable outcome: an open, evidence-linked follow-up that a person approved and an agent checked.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this matters to real teams
&lt;/h3&gt;

&lt;p&gt;Engineering, QA, and customer support often have different definitions of "done."&lt;/p&gt;

&lt;p&gt;CommitmentProof connects those perspectives before a customer-facing promise is closed. Instead of simply reporting that code was merged, the team receives an evidence-backed assessment, a clear explanation, and an actionable next step.&lt;/p&gt;

&lt;p&gt;Switch makes this collaboration visible. Specialized agents investigate and coordinate while humans retain final authority.&lt;/p&gt;

&lt;p&gt;This creates a practical foundation for reducing premature delivery claims, improving accountability, and connecting engineering progress with customer confidence.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fox54vs5kykovuphnhptw.jpg" class="article-body-image-wrapper"&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%2Farticles%2Fox54vs5kykovuphnhptw.jpg" alt="Verified human-in-the-loop outcome panel" width="800" height="314"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The end state on the dashboard: human approved, issue created manually, verified by the Coordinator.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What the demonstration proves
&lt;/h2&gt;

&lt;p&gt;Our working demonstration brings together real GitHub evidence, two collaborating Switch agents, an explicit human decision, and an independently verified GitHub follow-up.&lt;/p&gt;

&lt;p&gt;The human manually created the approved issue, while the Coordinator confirmed the result. The public dashboard provides live GitHub investigations alongside a clearly labeled recorded Switch session.&lt;/p&gt;

&lt;p&gt;The example uses a public VS Code pull request to demonstrate the process without claiming access to VS Code's production environment.&lt;/p&gt;

&lt;p&gt;Together, these components demonstrate an evidence-backed business workflow with transparent decisions and meaningful human oversight.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it fits Track 01
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What judges look for&lt;/th&gt;
&lt;th&gt;Where it shows up&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Agents working in a real chat with teammates&lt;/td&gt;
&lt;td&gt;Two named Codex agents and a human in &lt;code&gt;#commitment-proof&lt;/code&gt;, through Switch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A real business task reaching an outcome&lt;/td&gt;
&lt;td&gt;"Can we tell the customer it's fixed?" ends in an open, evidence-linked GitHub issue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Working technical integration&lt;/td&gt;
&lt;td&gt;GitHub REST collector, deterministic policy, read-only verification of issue #2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Distinct agent responsibilities&lt;/td&gt;
&lt;td&gt;Evidence Agent gathers proof; Coordinator judges it and drafts the next step&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human oversight&lt;/td&gt;
&lt;td&gt;Nothing external happens without an explicit &lt;code&gt;approve&lt;/code&gt;, and the human performs the write&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"Unknown" needs its own state.&lt;/strong&gt; Most status tools have two colours. The most useful thing our policy does is keep a third one, unknown, and refuse to round it up to green.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Let the model talk, let the code decide.&lt;/strong&gt; The agents read, summarise and draft well. The verdict comes from 58 lines of deterministic Python, so a reviewer can predict it and test it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make agents say what they did not do.&lt;/strong&gt; "I have not created the issue" turned out to be the most trust-building sentence in the whole conversation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate roles make the chat readable.&lt;/strong&gt; With one agent gathering and one judging, anyone scrolling the room can see where a claim came from and who decided what.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where this goes
&lt;/h2&gt;

&lt;p&gt;CommitmentProof is designed to extend across the complete software delivery lifecycle.&lt;/p&gt;

&lt;p&gt;By incorporating deployment records and QA confirmation directly into the evidence workflow, teams could move from verifying engineering progress to validating customer outcomes.&lt;/p&gt;

&lt;p&gt;The longer-term vision is a reusable accountability layer for engineering, QA, and support teams, powered by collaborative agents through Switch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Open the &lt;a href="https://commitment-proof.vercel.app/" rel="noopener noreferrer"&gt;live dashboard&lt;/a&gt;, switch to &lt;strong&gt;Live investigation&lt;/strong&gt;, and enter &lt;code&gt;microsoft/vscode&lt;/code&gt; and &lt;code&gt;331010&lt;/code&gt;. When we ran it, it returned the same four cards and the same verdict: merged, green, and still not delivered.&lt;/p&gt;

&lt;p&gt;Where would you draw the line on what an agent may decide on its own? Tell us in the comments, and if the idea is useful, a star on the repo helps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prove it before you close it.&lt;/strong&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Code: &lt;a href="https://github.com/bh00mi-11/CommitmentProof" rel="noopener noreferrer"&gt;github.com/bh00mi-11/CommitmentProof&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Live dashboard: &lt;a href="https://commitment-proof.vercel.app/" rel="noopener noreferrer"&gt;commitment-proof.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Verified follow-up: &lt;a href="https://github.com/bh00mi-11/CommitmentProof/issues/2" rel="noopener noreferrer"&gt;CommitmentProof issue #2&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Investigated PR: &lt;a href="https://github.com/microsoft/vscode/pull/331010" rel="noopener noreferrer"&gt;microsoft/vscode #331010&lt;/a&gt; and its &lt;a href="https://github.com/microsoft/vscode/commit/026fe5316ffc0998aab553b3ca3d4f36d8e8792f/checks" rel="noopener noreferrer"&gt;check runs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Demo video: &lt;a href="https://youtu.be/_T1D_nQKd2g" rel="noopener noreferrer"&gt;youtu.be/_T1D_nQKd2g&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>github</category>
      <category>hackathon</category>
    </item>
  </channel>
</rss>
