A green check is a temperature reading. It is not permission to merge.

You merge when three mechanical gates have already fired: a hook refused undeclared fixtures, each test wrote into an isolated directory, and a flake budget was spent in the open. A model can comment after that path. It should not be the gate.

The rest of this article is a proposed workflow you can paste into a throwaway repo. None of the files below claim a flake-rate improvement. They only make the merge rule visible.

Why "retry until green" is a merge bug

Retries without a cap convert a race into a shippable artifact. You see green. The next pull request sees the same race on a colder runner. Shared fixtures amplify it. One test rewrites tests/fixtures/users.json. The next test reads a slightly newer file. CI then lies in both directions.