From 4d1f2294e3d8769d6f90a4689a2eaf2e9ec047c4 Mon Sep 17 00:00:00 2001 From: Lukas Wuttke Date: Sat, 25 Jul 2026 11:34:37 +0200 Subject: [PATCH] docs(pr-template): owner-qualify cross-repo closing keywords (tracebloc/backend#930) GitHub auto-closes an issue in another repository only when the PR body names it owner-qualified. A bare `repo#N` merely cross-references and closes nothing -- and the template's own hint taught `Ref tracebloc/other-repo#456`, which is not a closing keyword at all. Eight code-complete issues stayed open for days-to-weeks this way (tracebloc/backend#1171-#1176, tracebloc/client#376, tracebloc/cli#393), dragging two epics to 0% and 14% when the true figures were 67% and 24%. Someone had to notice and close all eight by hand. Also corrects CONTRIBUTING.md, which asserted that a `Closes #N` body line auto-closes on merge. This repo's default branch is `main` while PRs land on `develop`, and GitHub fires closing keywords only on merges into the default branch -- so that claim was wrong in both directions and helped propagate the bug. cli#393 is one of the eight. Co-Authored-By: Claude Fable 5 --- .github/pull_request_template.md | 3 ++- CONTRIBUTING.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 97c7f3c2..cf6b56bc 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -2,7 +2,7 @@ ## Related - + ## Type of change - [ ] Feature @@ -19,3 +19,4 @@ - [ ] `go build ./...`, `go vet`, and the Lint job's checks pass locally - [ ] Terminal output follows [STYLE.md](../STYLE.md) — Printer tones (no hardcoded colour/emoji), "secure environment" not "workspace"; `bash scripts/check-style.sh` passes - [ ] No secrets / credentials in the diff +- [ ] Cross-repo issues use `Fixes tracebloc/#N` — a bare `repo#N` closes nothing diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b1374a67..15123e47 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -55,7 +55,7 @@ This repo follows the same conventions as the rest of the tracebloc org: fix(#150): handle empty kubeconfig gracefully ``` -- **PR body** should include a `Closes #N` line (on its own line) for any ticket the PR fully resolves. GitHub auto-closes the issue on merge. The `feat(#N):` convention in the title is for kanban tracking; `Closes #N` in the body is what triggers auto-close. +- **PR body** should include a `Closes #N` line (on its own line) for any ticket the PR fully resolves. The `feat(#N):` convention in the title is for kanban tracking; the body line is what links the issue. Owner-qualify anything in another repo — `Fixes tracebloc/backend#123` — because a bare `backend#123` only cross-references and closes nothing. And since GitHub fires closing keywords only on merges into the default branch (`main`), a PR merged to `develop` won't auto-close on its own: confirm the ticket, and close it by hand if needed. - **One PR per ticket** when practical. Roll-up sync PRs (`Sync develop → main for vX.Y.Z release`) are an exception.