Workflow: a PR that does not finish its issue writes Part of #n

jklein committed 2026-09-27 22:02:20 +00:00
1 parent fb1be28644
commit dbe83f9f8f
1 file changed
+1
+1
@@ -57,6 +57,7 @@ Page names are file names: `outline.md` is the page `outline`. Links between pag
- **No `Co-Authored-By` trailer and no "Generated with Claude Code" footer.**
- **Commits must be signed.** In the Coder workspace that needs no extra step — its own SSH signer does it — but verify before opening the PR: `git log --format='%G?' -1` must print `G`. If signing fails, stop and report rather than pushing unsigned work; branch protection rejects unsigned commits on `main`, and discovering that at merge time wastes the review.
- **A PR that does not finish its issue writes `Part of #n`, never `Fixes #n`.** The forge reads `Fixes` as an instruction to close the issue at merge, so putting it on a PR that deliberately leaves work behind files an open task as done. The repair — reopening the issue by hand and recording what is left — depends on somebody remembering that the PR was partial, and nobody rereads a merged PR body. This is not hypothetical: Gitea PR #48 replaced the outdated sentence in twenty charts but not in `rss-bridge`, which had to be dropped because its install test fails on the runner (Gitea #51), and the decision was explicitly that Gitea #40 stays open until the remainder is caught up. The PR text carried `Fixes #40` anyway; the merge closed #40 with one occurrence still open, and it was reopened by hand only because the implementing agent happened to think of it. This way of working produces the case regularly — one issue and several PRs, a chart taken out of a sweep, a finding that earns its own issue — so the keyword is chosen against the PR's actual scope and not copied out of the template. Step 8 above verifies the auto-close; that check is only worth anything if the keyword was right to begin with.
- **Write new issue references with the Gitea number.** `#n` inside the repo's files means the old GitHub tracker, and Gitea silently resolves a bare `#n` against its own counter — so an old reference can render as a link to something unrelated. See [Forge and tooling](Forge-and-Tooling#issue-numbers-changed-with-the-move).
## Documentation that is not the wiki