Versioning and compatibility¶
pycuf follows Semantic Versioning 2.0. Every release is listed in the changelog.
Before 1.0¶
Until version 1.0 the API can still change. pycuf keeps changes predictable:
| Release | May contain |
|---|---|
patch (0.y.Z) |
bug fixes and documentation only |
minor (0.Y.0) |
new features, and breaking changes to the public API, each listed in the changelog with a migration note |
From 1.0 on, breaking changes need a new major version.
What the public API is¶
These are covered by the compatibility promise:
- the names exported by the
pycufpackage (pycuf.__all__), the public modulespycuf.policy,pycuf.tablesandpycuf.spec, and everything documented in the API reference; - the finding codes: a code is never renumbered, reused or given a new meaning. Changing a code's default severity is a listed change;
- the meaning of the policy presets: a changed interpretation becomes a new preset or a new option value, and the default policy only changes in a major release;
- the table schemas: column names and types. New columns may be added;
- the command line: commands, options, exit codes and the JSON layouts, versioned by
schema_version.
These are not covered and may change in any release: modules and names starting with an
underscore (pycuf._xml, pycuf._build, …), the exact wording of finding messages, and the
order of findings with the same severity and line.
Supported Python versions¶
pycuf supports the CPython versions that are not yet end-of-life, starting at 3.11. A Python version is dropped in a minor release after its end of life.