Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,28 @@ 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 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 <n> --json files --jq '.files[].path'`) before applying it, don't
guess from the title/description alone.
Loading