Stability
Every top-level coding-scaffold command carries one of three stability markers,
rendered in --help next to the command name:
The marker is a contract about how aggressively the command may change.
What each marker promises
[stable]
- The flag set, output shape, and exit codes will not change in a backward-incompatible
way without a major version bump (
0.x → 1.0) and a deprecation cycle. - A removed flag is preserved as a hidden alias for at least one minor release with a deprecation message.
- The CHANGELOG names every change under a
Deprecatedheading.
Build automation, CI checks, and team docs against stable commands without
hesitation.
[preview]
- Feature-complete and tested. May still grow new flags or refine output in a minor release.
- Breaking shape changes are possible but called out in the CHANGELOG with a migration note.
- Used in production with caution: a
previewcommand is on the path tostable, and the wiki page for that area should note the target release.
Treat preview commands like a beta API: depend on them, pin your scaffold version,
and watch the CHANGELOG.
[experimental]
- Fast-moving. May change shape, flag names, or behavior without warning.
- Output formats are not part of the contract; do not parse them in CI.
- Useful for exploration and feedback; not yet suitable as a build dependency.
If you find an experimental command load-bearing for your team, open an issue —
graduating to preview is a signal we look for.
Lifecycle
- A new command lands as
experimentalby default. - It graduates to
previewonce the flag set is settled and at least one team is using it. - It graduates to
stableonce the maintainers commit to the deprecation policy above. The graduation lands in a minor release; the CHANGELOG notes it.
How to read the marker registry
src/coding_scaffold/cli_stability.py is the single source of truth. The marker for
a command is whatever appears there; the --help text is generated from it.
A test (tests/test_cli_stability.py) asserts:
- Every command surfaced in
--helphas a registry entry. - Every registry entry uses one of
stable | preview | experimental.
When you move a command between markers, update the registry and add a CHANGELOG
entry under Stability.