Skip to main content

Stability and Versioning

Schema Stability

SchemaVersionCommitment
Observationsobs.v0.1Stable — no breaking changes within 1.x
Controlsctrl.v1Stable — no breaking changes within 1.x
Outputout.v0.1Stable — no breaking changes within 1.x

Schema versions are independent of the CLI version. The v0.1 designation indicates the initial stable schema. Breaking changes (if ever needed) would increment to v0.2 with a migration guide.

Observations and controls are validated at runtime against embedded JSON Schema Draft 2020-12 files (see schemas/). Output artifacts are also validated at runtime against embedded schemas (out.v0.1, diagnose.v1) before emission.

See controls/MIGRATION.md for migration guidance.

Exit Code Stability

Exit codes are part of the public API and will not change within a major version:

CodeMeaningStable?
0Success / no violationsYes
1Security-audit gating failureYes
2Input or validation errorYes
3Violations detectedYes
4Internal errorYes
130Interrupted (SIGINT)Yes

Exit code 1 is not used for violations. Exit code 3 means violations.

CLI Flag Stability

Flags documented in the README and command help are stable. Undocumented flags may change without notice.

Output Format Stability

JSON output fields in run, summary, and findings are stable within a major version. New fields may be added (additive changes are not breaking). No fields will be removed or renamed within 1.x.

Pinned Dependencies

Stave pins all dependencies to exact versions. The source of truth is the Go module file (go.mod) and the project's version policy.

DependencyVersionRole
Go1.26.3Build toolchain
Cobrav1.10.2CLI framework
pflagv1.0.10Flag parsing
yaml.v3v3.0.1Control YAML parsing
golangci-lintv2.8.0CI linting

Dependency updates go through CI checks including govulncheck and license compliance (go-licenses check). Forbidden licenses (GPL, AGPL, SSPL, LGPL) fail the build.

Build Reproducibility

Release binaries are reproducible. Anyone with the matching Go version can rebuild from source and compare checksums:

  • CGO_ENABLED=0 — pure Go, no C dependencies
  • -trimpath — removes local filesystem paths
  • -buildid= — removes build ID
  • -ldflags "-s -w" — strips debug symbols

See Release Security for instructions.

Supported Platforms

OSArchitecture
Linuxamd64, arm64
macOSamd64 (Intel), arm64 (Apple Silicon)
Windowsamd64

Deprecation Policy

Before removing a flag, command, or output field:

  1. The item is marked deprecated in help text for at least one minor release.
  2. A migration path is documented.
  3. The removal is noted in the changelog.

Documentation Versioning Policy

Documentation is versioned with source code in this repository.

  • Docs updates for user-visible behavior changes must land in the same PR.
  • CHANGELOG.md is the release-facing summary for docs and code changes.
  • CLI reference pages are generated from command definitions to reduce drift.
  • Docs are validated by CI link checks.