From 7c5ab361fbb85d822947ebde26cc0d4618e5b51c Mon Sep 17 00:00:00 2001 From: jnasbyupgrade Date: Wed, 5 Aug 2026 15:47:28 -0500 Subject: [PATCH 1/2] Document PR title convention for CI-only PRs A CI-only PR (diff confined to .github/workflows/) gets a "CI: " title prefix, so it's a standing instruction rather than re-derived per session. --- CLAUDE.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index 9ca72cf..9f33264 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -13,3 +13,14 @@ failures before treating the work as done: Do not consider a push complete until its CI run is green (or the failure is understood and explicitly accepted by the user). + +## PR title convention for CI-only PRs + +A PR whose diff is confined entirely to files under `.github/workflows/` gets a +title starting with `CI: ` (capital, colon, space). A PR that's CI-*motivated* +but also touches a real file elsewhere (a `bin/` script a workflow calls, a +linter's `Makefile` wiring, a submodule, etc.) is NOT CI-only under this +reading, even though CI is the reason it exists — don't stretch the prefix to +cover those. Check the actual file list +(`gh pr view --json files --jq '.files[].path'`) before applying it, don't +guess from the title/description alone. From 72b49316ad2f2ef5ac95ab4c42e837723420d203 Mon Sep 17 00:00:00 2001 From: jnasbyupgrade Date: Fri, 7 Aug 2026 13:30:04 -0500 Subject: [PATCH 2/2] Refine CI-only PR boundary: about touching code, not the workflows/ path The hard boundary is whether a change touches the actual code (SQL source, the .control file, anything affecting what ships/how it behaves) -- not literally "lives under .github/workflows/". Files elsewhere that don't touch the code (.gitignore, this file) qualify too. test/ is treated as NOT CI-only by default despite being a bit of a grey area. --- CLAUDE.md | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 9f33264..bfe3744 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -16,11 +16,25 @@ understood and explicitly accepted by the user). ## PR title convention for CI-only PRs -A PR whose diff is confined entirely to files under `.github/workflows/` gets a -title starting with `CI: ` (capital, colon, space). A PR that's CI-*motivated* -but also touches a real file elsewhere (a `bin/` script a workflow calls, a -linter's `Makefile` wiring, a submodule, etc.) is NOT CI-only under this -reading, even though CI is the reason it exists — don't stretch the prefix to -cover those. Check the actual file list +A PR gets a title starting with `CI: ` (capital, colon, space) when its diff +doesn't touch anything involved with the actual code itself — this is a HARD +boundary, not a synonym for "lives under `.github/workflows/`": + +- If a change touches ANYTHING that's part of the actual code — SQL source, + `object_reference.control`, anything that affects what gets installed or + how it behaves at runtime — it is NOT CI-only, full stop. When unsure, + **always err on the side of NOT CI-only.** +- Files elsewhere that genuinely don't touch the code qualify too, not just + `.github/workflows/*`: e.g. `.gitignore`, this `CLAUDE.md`, other pure + documentation/metadata. +- **`test/` is treated as NOT CI-only, even though it's a bit of a grey + area.** Test files aren't the shipped code itself, but default to + excluding them from the prefix rather than trying to judge case by case. +- A PR that's CI-*motivated* but also touches a real code/test file (a + `bin/` script a workflow calls, a linter's `Makefile` wiring if it affects + what ships, a submodule) is NOT CI-only under this reading, even though CI + is the reason it exists — don't stretch the prefix to cover those. + +Check the actual file list (`gh pr view --json files --jq '.files[].path'`) before applying it, don't guess from the title/description alone.