Skip to content

Decision records

Every rule canon enforces traces to one of these records. There are 25: 24 accepted, and 1 kept for history.

Go

Record Strength Status
Terminal UX uses the Charmbracelet libraries should accepted
One cobra command per file in cmd/ must accepted
CLI configuration resolves flag, then env, then file should accepted
Every function and method has a doc comment should accepted
Wrap errors with %w and context; never log and return must accepted
Critical paths have benchmarks, and input parsers have fuzz targets should accepted
Every Go repo runs the golangci-lint baseline must accepted
HTTP APIs are spec-first with OpenAPI and generated code must accepted
Hand-written Go code keeps 90% test coverage must accepted

Python

Record Strength Status
Python is linted and formatted with ruff must accepted
Python projects are managed with uv and a committed lock file should accepted

Containers

Record Strength Status
Use alpine for small runtime images should superseded
Use distroless or scratch for runtime images must accepted
Dockerfiles follow hadolint's best practices should accepted
Containers run as a non-root user must accepted
Pin every base image by tag and digest must accepted

Terraform

Record Strength Status
Terraform modules are typed, documented and linted should accepted
Terraform passes a security scan before merge must accepted
Pin Terraform and provider versions with bounded constraints must accepted

YAML

Record Strength Status
YAML is linted with yamllint should accepted

CI

Record Strength Status
Workflows declare least-privilege token permissions must accepted
Pin third-party GitHub Actions to a full commit SHA must accepted

Open source

Record Strength Status
Open-source repos ship the standard community files should accepted
Commits and PR titles follow Conventional Commits should accepted
Release assets are signed keylessly with cosign must accepted