Conventions
The project uses Conventional Commits:
<type>(<scope>): <description>
[optional body]
feat, fix, docs, style, refactor, test, chore, build, ci
- Fine-grained commits — each commit is a single logical change
- Context-free messages — state what the commit does, not the development story
- No narrative — avoid “I tried X, then Y”; state the result
- Bullet lists in the body, not prose paragraphs
feat(cluster): add worker node lifecycle commands
- sind create worker with --count, --image, --unmanaged flags
- sind delete worker with nodeset expansion
- Update sind-nodes.conf and reconfigure slurmctld for managed nodes
fix(probe): handle systemd degraded state as ready
- systemctl is-system-running returns "degraded" when non-critical
units fail, which is expected in containers
Commits written with substantial help from an AI coding tool carry a Co-Authored-By: trailer naming the tool:
fix(mesh): tolerate stopped DNS container when updating records
- ...
Co-Authored-By: Claude <noreply@anthropic.com>
Commits made by Anthropic’s Claude Code agent are additionally authored as Claude <noreply@anthropic.com>. Please follow the same convention in your contributions.
- Standard Go conventions (
gofmt,go vet) - Use
testifyfor assertions (assertfor non-fatal,requirefor fatal) - Strong types for Docker identifiers (
ContainerName,NetworkName, etc.) - Error wrapping with
fmt.Errorf("context: %w", err)
All Go source files include the SPDX header:
// SPDX-License-Identifier: LGPL-3.0-or-later
- Target the
nextbranch;mainonly moves at release - One logical change per PR
- Include tests for new functionality
- Ensure
make lint,make testandmake check-coveragepass - Follow the commit message conventions above