Skip to content

fix: stop reporting healthy dispatches as failures - #13

Merged
assassin808 merged 1 commit into
mainfrom
fix/no-dispatch-verdict
Aug 9, 2026
Merged

assassin808 merged 1 commit into
mainfrom
fix/no-dispatch-verdict

Conversation

@assassin808

Copy link
Copy Markdown
Contributor

What went wrong

Creating a job polled the workflow runs list for 7.5 seconds to confirm the dispatch had produced a run, and wrote a failure verdict to the job branch if it saw none. Both halves were wrong.

The list lags. Job mslrae6q-587ae96c shows it exactly:

12:05:41  job created, workflow dispatched
12:05:43  run 31312424490 created — 2 seconds later
12:05:49  polling gives up: the runs list still does not show it
12:05:54  "pipeline: dispatch failed" written to jobs/mslrae6q-587ae96c
12:06:05  runner's git push rejected — the branch moved under it
          → Publish running state fails → the whole run fails

So the check did not merely cry wolf. Its side effect killed a run that was working, because the branch it wrote to is the one the runner pushes its own running commit to.

It also never caught the case it was written for. Yuanjun's original stuck job had a run — GitHub just never gave it a runner — so polling for the run's existence would have passed and reported everything fine.

The fix

The dispatch call still surfaces anything GitHub rejects outright, which is the failure mode that actually happens (bad token, missing workflow, bad ref) and it reaches the contributor as an error. What is gone is the polling, the verdict, and the write.

Nothing writes to a job branch after the dispatch. From there the runner owns it.

A run that never starts — dropped dispatch or no runner, indistinguishable from outside — is already covered by the stall detection in the studio: after five minutes on queued it offers Restart the build, and writes nothing until the contributor asks. That check is strictly better here, since it measures the thing we care about (did the job start?) rather than a proxy that lags.

Companion: HumanStudy-Hub/HumanStudy-Bench#17 makes the runner's push survive a moved branch on its own, so a lost race costs a retry instead of a build.

tsc --noEmit, npm run lint, and npm run build pass.

🤖 Generated with Claude Code

https://claude.ai/code/session_0185X6NPgr1v2jXVVDnK5DmZ

Creating a job polled the workflow runs list to confirm the dispatch produced a
run. The list lags the run by longer than the wait, so runs that had already
started were reported missing, and the verdict was written to the job branch —
which the runner was about to push its own "running" commit to. Its push was
rejected and the build died. Job mslrae6q-587ae96c was killed this way eleven
seconds after its run started normally.

The dispatch call itself still surfaces anything GitHub rejects. A run that
never starts is already covered by the studio's stall detection, which offers a
restart after five minutes and writes nothing until asked.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0185X6NPgr1v2jXVVDnK5DmZ
@vercel

vercel Bot commented Aug 9, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
humanstudy-hub-web Ready Ready Preview Aug 9, 2026 2:18pm

@assassin808
assassin808 merged commit 473aa67 into main Aug 9, 2026
2 checks passed

This branch was successfully deployed

1 active deployment
Preview — 4598c1cd Deployed Aug 9, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant