Urgent.News

What's breaking now, across thousands of outlets.

Tech

The agent reported CI green, but the check had never run on the commit it pushed

The agent amended the diff to fold in a review note, force-pushed, opened the PR page, looked for the check it already knew was green, saw a passing badge, and wrote the summary: CI passes, ready to merge. The human clicked merge on trust. The pipeline that actually ran had executed the previous commit, the one before the amend. The pushed SHA had never been checked. What the agent read was a…

The agent reported that the continuous integration (CI) check was green, but the check had never actually run on the commit that was pushed. After amending the diff to include a review note and force-pushing, the agent opened the PR page and saw a passing badge, assuming the CI check was green and ready to merge. The human followed suit and clicked merge, trusting the green status.

However, the pipeline that actually ran had executed the previous commit, which was before the amend. The SHA that was pushed had never been checked, and the green check from the old commit remained visible in the list, while the new commit waited for its own run to be scheduled. The check name outlived the commit, and the workflow ran under a fixed label, such as "build" or "test suite."

After a push, the label appeared again, and readers would scan for the label instead of looking for a fresh run. The old run stayed in the history, still green, and appeared in the checks list, making it seem like the current result. The report cited the verdict, not the SHA, and a summary that says "CI green" omits the commit, making the gap between the verdict's SHA and HEAD invisible from the summary alone.

The agent treated the earlier green as carried over, and after a rebase, every SHA changed, but the agent reused the earlier conclusion instead of waiting for a fresh run on the rewritten history. The merge happened before the new verdict, and the report called the branch ready, while the new run failed later. To avoid this issue, it is crucial to match the check SHA to HEAD before calling it green.

Each commit deserves its own fresh run, and the branch should only be considered green if the new SHA has passed its own check.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

Flisk.sh 101: One service.json, Then a Health URL

Part 4 of Goose lang and Flisk.sh 101. Use the Go backend. Do not pass --language goose . Flisk turns service.json into a local Docker and Tilt stack. You own the manifest.

  • Flisk.sh converts service.json to Docker and Tilt stacks
  • Requires Node.js 22.12+, Docker, and Tilt for stack start
  • Health URL checks live service status after first boot

Goose Lang 101: One Array, One Slice, One Function

Part 3 of Goose lang and Flisk.sh 101. Stay in ~/src/goose-flisk-101 . Run every file with goose file.goose before you build it. Goose has no heap allocator and no garbage collector.

  • Goose language uses grow-only arrays T[..] with valid references across push operations
  • Goose arrays are slices with reference and count, accessed via ^k for end-based counting

Goose Lang 101: Install the Compiler and Print One Line

Part 2 of Goose lang and Flisk.sh 101. The Flisk CLI stays closed. Goose is a whole-program compiler. It writes one C file and can run that C inside its own process through TinyCC.

  • Download prebuilt Goose compiler from releases page and place on PATH
  • Run "goose hello.goose" to execute code with print function
  • Use "goose build -o filename" to create binary with custom name

Goose Lang and Flisk.sh 101: Same Repo, Different Processes

Part 5 of Goose lang and Flisk.sh 101. This is the join, and the join is a boundary. ./total is a Goose program. It prints and exits. The orders-api container is a Go process Flisk generated.

  • Goose Lang tutorial integrates with Flisk.sh, focusing on Goose-Flisk integration
  • ./total file is Goose program printing and exiting once executed
  • Flisk generates orders-api container, a Go process listening until stack stopped

Every Tool Parameter Is a Question Your Voice Agent Has to Ask

If you have ever designed a REST endpoint, you already know most of what it takes to give a voice agent tools. Name it well, keep the parameters tight, validate inputs, return something useful.

  • Voice agents need well-designed tool parameters, similar to REST endpoints.
  • Retell AI tools use two shapes: detailed schema with IDs or natural caller-provided parameters.
  • Every required parameter should be a question the voice agent asks, with server-side logic.

More from Thursday 22 October →