This document defines what callers and operators may depend on, and what they
may not. It complements versioning-policy.md, which
states when a change is breaking; this document states what a breaking change
is.
Current status: pre-
v1.0.0. Nothing in this table is guaranteed yet. The guarantees below take effect atv1.0.0and are recorded here so the intent is explicit before the first release.
v1.0.0| Stable | Not stable |
|---|---|
| Subcommand names and flags documented in the manual | help text wording and layout |
Exit codes: 0 success, 1 runtime failure, 2 usage error |
progress output format |
Adding a subcommand or an optional flag is a MINOR change. Removing or renaming one is a MAJOR change, and is preceded by a deprecation MINOR that prints a warning naming the replacement.
| Stable | Not stable |
|---|---|
| Path, method, and documented request/response fields | undocumented fields |
| Status code semantics | error message text |
Content-Type and documented media types |
header ordering, whitespace |
Rules:
Deprecation and Sunset
response headers, plus a documentation note.| Stable | Not stable |
|---|---|
Names of documented KROOT_* variables |
internal variable names |
| Accepted value semantics | the exact text of validation error messages |
0 success
1 runtime failure (I/O, network, dependency, configuration rejected)
2 usage error (unknown flag, unknown command, bad argument)
Scripts may branch on these. Any new code is additive and documented.
~/.kroot)The message text is not an interface. The structured keys used by operators for alerting and dashboards are, and change only with a MINOR bump and a documented note.
internal/ — importing them is unsupported and
will break without notice.A change to a guarantee is itself a breaking change and requires a MAJOR bump plus an ADR explaining the migration path.