Files
computer-playbook/docs/contributing/artefact/git/branch.md
T
kevinveenbirkenbachandClaude Opus 5 f40d627a1b docs(agents): merge the tool-specific files into AGENTS.md
CLAUDE.md and GEMINI.md existed as per-runtime extensions of AGENTS.md, and
only one of them carried anything at all: GEMINI.md stated that it had no
additions, while CLAUDE.md held rules that bind every runtime anyway — the
permission announcement, the make-over-raw preference, the loop, chain and
heredoc bans, the stream-the-log-to-/tmp rule, the CI-evidence rule, the push
ban and the comment rule. A rule that binds every agent does not belong in one
agent's file. AGENTS.md absorbs them and now states that no tool-specific
extension file exists; agents whose runtime auto-loads a different filename
reach it through their own configuration instead.

The filenames were machinery as much as prose. The PR templates, the branch
and pull-request scope tables, the settings and security docs that justified
the loop deny by "the textual CLAUDE.md rule", six requirement documents whose
push instruction linked ../../CLAUDE.md, and a test docstring citing the
shell-loop ban all named them, and now name AGENTS.md.
scripts/meta/resolve/pr/scope.sh deliberately keeps matching CLAUDE.md and
GEMINI.md: this change deletes them, and without those patterns the change
itself would not classify as agent-scope.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 22:51:04 +02:00

46 lines
3.5 KiB
Markdown

# Branch 🌿
## CI Impact 🔀
The branch prefix MUST match the type of change. The [PR workflow](pull-request.md) uses it to classify the scope and decide which CI pipeline to run.
| Branch prefix | Scope | Matching files | CI behavior |
|---|---|---|---|
| `agent` | Changes to agent instructions or prompts | `AGENTS.md`, `roles/<role>/AGENTS.md`, `docs/agents/*` | Skips [orchestrator](../../../../.github/workflows/call-orchestrator.yml), finishes green through the lightweight scope gate. |
| `documentation` | Documentation-only changes | `**/*.md`, `**/*.rst` (outside agent paths) | Skips [orchestrator](../../../../.github/workflows/call-orchestrator.yml), finishes green through the lightweight scope gate. |
| `feature` | New features or enhancements | `*` | Runs the full [orchestrator](../../../../.github/workflows/call-orchestrator.yml) pipeline. |
| `fix` | Bug fixes | `*` | Runs the full [orchestrator](../../../../.github/workflows/call-orchestrator.yml) pipeline. |
| `update` | Automated or maintenance updates | `*` | Runs the full [orchestrator](../../../../.github/workflows/call-orchestrator.yml) pipeline. |
| `chore` | Maintenance, dependency, and tooling updates (incl. branches created by [cron-update.yml](../../../../.github/workflows/cron-update.yml)) | `*` | Runs the full [orchestrator](../../../../.github/workflows/call-orchestrator.yml) pipeline. |
| `alert-autofix` | Automated alert-triggered fixes | `*` | Runs the full [orchestrator](../../../../.github/workflows/call-orchestrator.yml) pipeline. |
| `dependabot` | Automated dependency updates | `*` | Runs the full [orchestrator](../../../../.github/workflows/call-orchestrator.yml) pipeline. |
## Enforcement 🔒
All rules in this document are actively enforced on `main` via GitHub branch protection. See [branch.md](../../tools/github/branch/security.md) for the full enforcement policy.
The naming conventions below are additionally checked locally by the lint test [test_branch_name.py](../../../../tests/lint/repository/naming/test_branch_name.py), which fails `make test-lint` when the checked-out branch uses an unknown prefix (e.g. `feat/` instead of `feature/`) or a non-kebab-case description.
## Naming Conventions 🏷️
The description MUST use `kebab-case` (lowercase words separated by hyphens) and SHOULD be short enough to read at a glance.
The full branch name MUST follow one of the patterns below, depending on whether the change targets a specific role or is general:
| Case | Pattern | Example |
|---|---|---|
| General feature | `feature/<topic>` | `feature/ldap-integration` |
| Role feature | `feature/<role>/<topic>` | `feature/web-app-matomo/ldap-integration` |
| General fix | `fix/<topic>/<ticket-id>` | `fix/dns-resolution/taiga-123` |
| Role fix | `fix/<role>/<topic>/<ticket-id>` | `fix/web-app-matomo/login-redirect/taiga-789` |
| General update | `update/<topic>` | `update/docker-image-versions` |
| Chore | `chore/<topic>` | `chore/update-docker-image-versions` |
| Alert autofix | `alert-autofix-<alert-id>` | `alert-autofix-261` |
| Documentation | `documentation/<topic>` | `documentation/contributing-setup` |
| Agent | `agent/<topic>` | `agent/improve-commit-instructions` |
| Dependabot | `dependabot/<ecosystem>/<dependency>` | `dependabot/pip/requests-2.32.0` |
`feature`, `update`, `documentation`, and `agent` branches MUST NOT reference a ticket ID.
`alert-autofix` branches reference the alert ID instead of a ticket ID.
`dependabot` branches are created automatically and MUST NOT be renamed.