Verify what a coding agent claims it deployed: the live commit, a Stop hook and the files it wrote A build SHA gate caught 15 staging deploys of Stackness that reported success between 14 and 16 August 2026 while the server ran an image built from a different branch, according to a first-person account that recommends comparing the commit a live server reports against `git rev-parse HEAD` in a check the coding agent did not write. The account, run on 11 November 2026 with Claude Code 2.1.322 and Docker 29.8.2, separates three failure modes in agent deploy reports — a claim never observed, an observation of the wrong thing, and a check that shares the agent's mistake — and cites chet100's 7 November 2026 report that containers serving traffic "had been built 23 hours earlier" and Debashish Ghosal's release gate whose `curl -sf http://localhost:3200/api/search/tags || true` check "had been passing for weeks" while a second OpenTelemetry backend never started. Verify what a coding agent claims it deployed: the live commit, a Stop hook and the files it wrote To verify what a coding agent claims it deployed, ask the running server which commit it serves and compare that with git rev-parse HEAD , in a check the agent did not write. Between 14 and 16 August 2026, 15 staging deploys of Stackness reported success while the server ran the image built from a different branch. I only found out when the first deploy with a build SHA gate failed within five minutes, and it surprised me. Asking the agent to double-check fixes only one of the three ways its report goes wrong: the claim it never observed. The other two, where it observed the wrong thing and where its own check shares its mistake, need a check the agent neither runs nor wrote. For a deploy that is the live commit compared with HEAD. For the agent's own files it is a scanner rule that knows passwords typed inside commands. The commands below were run on 11 November 2026 with Claude Code https://stackness.dev/tools/claude-code 2.1.322 and Docker 29.8.2. How do you verify what a coding agent claims it deployed? Verifying a coding agent's deploy claim means reading an identifier from the running system, a commit SHA or an image digest, and comparing it with the commit you meant to ship. The agent's message only reports what its shell printed. Chet100's agent reported "deployed, edge clean, no 5xx", and every word was true, chet100 wrote on 7 November 2026 https://dev.to/chet103cc/an-agent-told-me-it-deployed-i-asked-the-server-and-the-containers-were-a-day-old-2b6i : the commit was on the server and nothing was erroring. The containers serving traffic, chet100 wrote, "had been built 23 hours earlier". A green CI run, a healthy container and a successful docker pull are all facts about something next to the deploy. None of them names the code that answers requests. As chet100 puts it, "production facts come from production." Three ways an agent's report goes wrong, and the check for each An agent's report fails in three distinct ways, and only the first is fixed by telling the agent to verify. In the first it claims what it never observed. In the second it observed something real but adjacent: the working tree, the pipeline, the pull. In the third its check agrees with its mistake, because the agent picked or wrote the check. The second and third need a verifier the agent did not author. | Failure | What the agent saw | Example | The check that catches it | |---|---|---|---| | A claim with no observation | Nothing about the result | "Deployed" after a git pull | Make it run a check and quote the output | | It observed the wrong thing | The deploy step, CI, a healthy status, a pulled image | 15 green Stackness staging deploys on the wrong image | The commit the live server reports, compared with HEAD | | Its check shares its mistake | A test, scan or rating it chose or wrote | A gate with \|\| true ; model severity against maintainer severity | A rule or verdict from outside the session | The third row is easy to miss because it looks like verification. Debashish Ghosal's release gate claimed https://dev.to/debashish ghosal/my-second-backend-existed-only-in-the-readme-e7o two OpenTelemetry https://stackness.dev/tools/opentelemetry backends, and its check, curl -sf http://localhost:3200/api/search/tags || true , "had been passing for weeks". The second backend was "never started, never configured, and never received a single span". Ghosal's test for any check is the one I use below: could it fail if the claim were false? What you need The checks below need access to the running system and one change to the app. The deploy and infrastructure side is ordinary tooling from the DevOps and infrastructure tools developers list https://stackness.dev/categories/devops-infrastructure ; nothing here is agent-specific apart from the hook. - A way to read the live service: an HTTP endpoint, ssh to the host, kubectl , or your platform's CLI Vercel https://stackness.dev/tools/vercel , Fly.io https://stackness.dev/tools/fly-io , Render https://stackness.dev/tools/render . - A build that knows its commit, passed in as an environment variable or an image label. - Claude Code for the Stop hook in step 4, plus jq https://stackness.dev/tools/jq and curl . - gitleaks https://stackness.dev/tools/gitleaks or TruffleHog https://stackness.dev/tools/trufflehog for step 5, plus a grep . 1. Make the running server say which commit it serves A server that reports its own build commit turns "did the deploy land" into a string comparison. Stackness passes BUILD SHA into the API container at deploy time and returns it from /health . I asked production on 11 November 2026 and compared the answer with the head of main : bash $ curl -s https://cave.stackness.dev/health {"status":"ok","version":"731eb9fa05eba97ad7524f44dffcc0af1bc6a5d6","checks":{"database":"healthy","redis":"healthy"}} $ git log -1 --format=%H origin/main 731eb9fa05eba97ad7524f44dffcc0af1bc6a5d6 The frontend carries the same SHA in its footer, so curl -s https://stackness.dev/ | grep -o 731eb9fa05eb checks the other half. On Vercel the value is already there: VERCEL GIT COMMIT SHA is available at build and runtime https://vercel.com/docs/environment-variables/system-environment-variables , and the app only has to return it. Platforms also keep their own record: fly releases --image lists the image of each release https://docs.fly.io/flyctl/releases , and vercel inspect