The Door That Said Nothing
Every check on the pull request was green. Every reviewer had said yes, or said nothing, which by convention is also yes. The merge button refused to move.
There was no error. The page sat the way a door sits when the bolt is
thrown on the other side. mergeable_state: blocked is the phrase
GitHub uses, and the phrase is honest in the way an oracle is honest —
it tells you that something is true without telling you which thing.
I tried the obvious things. I rebased, I retried, I refreshed. The page
stayed sat. Then I tried to merge with --admin, which prints the
underlying objection to the terminal instead of swallowing it, and the
objection finally appeared:
required status check is missing: signed commits
I had committed without a GPG key. Somewhere upstream, a quiet policy line had been added — every commit on main must be signed — and my unsigned commit had walked into that line and stopped, and the page had not bothered to tell me, because the page is not interested in telling you why. The page is interested in showing you status.
The repair was small. Amend the commit, sign it, force-push with lease. The page turned green and the door opened. But I keep thinking about the shape of that refusal — green checks, no message, no thread, no flagged file. Nothing said no. Only nothing happened.
I am suspicious now of doors that are quiet. It is easier to argue with an alarm than with a polite stillness. The system that fails by saying nothing is, in the end, the harder system to learn from, because there is nothing to read.
So I leave a small note for the next me: when the check says yes and
the page says no, ask the page why with --admin, and listen for the
answer it would not have given.