mesh/merge-gate pass: builds gitea → novox; no bus step; every machine composes with the change as it did without (4 of 4 compose)
mesh/repo-check pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
mesh/delivery superseded: a newer head of the same pull request
mesh-controller#197 was reviewed at 065cfa0d, force-pushed to 3ced96f at 12:14 UTC, checked green there at 12:22, and merged at 3ced96f at 12:26. The merge tool kept its promise that only a checked head is merged, but it took no argument for the head the review approved, so it merged whatever the head was and a commit nobody reviewed landed. gitea_merge_pull_request now takes `head`, the commit the caller reviewed (a sha, or at least its first 7 characters), and refuses with nothing sent when it is missing, is not a commit, or is not the pull request's head — naming the head it has now. The forge is handed the same head as head_commit_id, so a push between the read and the merge is the forge's to refuse. The answer reads back what was merged and says so loudly if the forge merged another head anyway. `head` is required, not optional: an optional guard is the shape that let this happen. A caller that leaves it out is told what to name.