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
- 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
- One logical change per PR
- Include tests for new functionality
- Ensure all existing tests pass (
go test ./...) - Follow the commit message conventions above