Skip to main content

Versioning Policy

beachcomber follows Semantic Versioning 2.0.0. This document defines what constitutes a breaking change across each public surface.

All versions before 1.0.0 are pre-release. Minor versions may include breaking changes during this period, but they will always be documented in the CHANGELOG.

Public Surfaces

Protocol (Unix socket wire format)

ChangeVersion bump
New operation (e.g., a new "op" value)Minor
New optional field in responseMinor
Remove or rename an operationMajor
Change response field semanticsMajor
Change wire encoding (e.g., away from NDJSON)Major

Config (config.toml)

ChangeVersion bump
New config key with a default valueMinor
New config section with defaultsMinor
Remove or rename a config keyMajor
Change the meaning of an existing valueMajor
Change config file location or formatMajor

Built-in Providers

ChangeVersion bump
New providerMinor
New field on an existing providerMinor
Remove a providerMajor
Remove a field from a providerMajor
Change a field's type or semanticsMajor
Change a provider's default trigger strategyMinor (documented)

CLI (comb)

ChangeVersion bump
New subcommandMinor
New flag on an existing subcommandMinor
Remove a subcommandMajor
Remove or rename a flagMajor
Change default output formatMajor

Client SDKs

Each SDK follows its own language ecosystem versioning. SDK versions are independent of the daemon version, but SDK releases will document which daemon protocol version they target.

Rust Library Crate (beachcomber-client)

Standard Rust API compatibility rules apply. Public API changes follow the Cargo SemVer reference.

What Is Not a Public Surface

These may change in any release without a version bump:

  • Log output format and messages
  • Benchmark results and internal performance characteristics
  • Internal module structure and private APIs
  • Daemon process management details (PID file location, fork behavior)
  • Script provider execution internals (as long as the config contract is maintained)