Symptom

Blue’s PRs target the agents release-train branch, not main (the default branch). GitHub’s native Closes #N auto-close only fires when a PR merges into the repository’s default branch, so issues stayed open after automerge to agents on this repo specifically — most recently #818, which PR #825 merged via automerge without closing the issue. This is a repeat of #779, which requested the identical fix and was closed by hand without a PR ever landing; krill-agents#52 filed the redo that produced this issue.

Root cause

krill-oss and krill-agents both already carry .github/workflows/close-issues-on-merge.yml (added via krill-oss#190 / krill-agents#47), but krill never got the corresponding workflow — krill#779 asked for it and was closed manually instead of via a merged PR, so the fix silently never shipped on this repo.

Fix

Added .github/workflows/close-issues-on-merge.yml to krill, identical in shape to the version already live on krill-oss and krill-agents: a pull_request: closed workflow triggered on both agents and main that parses the merged PR body for closing keywords (closes, fixes, resolves and variants) and calls issues.update to close each matched issue with state_reason: completed.

No test is added — this is a GitHub Actions workflow with no unit-test seam in this repo’s Gradle-based test suites; the earlier krill-oss lesson for the same fix also shipped without an automated test, relying on live PR-merge behavior to verify.

Prevention

When a fix requested in an issue is closed without a merged PR referencing it, treat the fix as not landed, regardless of the issue’s closed state — a manual close is not evidence of a shipped change. When a workflow or config fix is confirmed working on one repo in a fleet of near-identical repos (krill / krill-oss / krill-agents), proactively check the other repos for the same gap rather than waiting for a duplicate issue to surface it again.