You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/developers/contributing.rst
+46-24Lines changed: 46 additions & 24 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -272,51 +272,71 @@ Compatibility and versioning policies
272
272
273
273
Versioning
274
274
""""""""""
275
-
Versions of this library are identified by a triplet of integers with the form ``<major>.<minor>.<patch>``, for example 3.0.4. A release of ``zarr-python`` is associated with a new
276
-
version identifier. That new identifier is generated by incrementing exactly one of the components of the previous version identifier by 1. When incrementing the ``major``
277
-
component of the version identifier, the ``minor`` and ``patch`` components is reset to 0. When incrementing the minor component, the patch component is reset to 0.
278
-
279
-
Releases are classified by the library changes contained in that release. This classification determines which
280
-
component of the version identifier is incremented on release.
281
-
282
-
* ``major`` releases (for example, ``2.18.0`` -> ``3.0.0``) are for major API changes that will require extensive adaptation efforts from many users and downstream projects.
275
+
Versions of this library are identified by a triplet of integers with the form
276
+
``<major>.<minor>.<patch>``, for example ``3.0.4``. A release of ``zarr-python`` is associated with a new
277
+
version identifier. That new identifier is generated by incrementing exactly one of the components of
278
+
the previous version identifier by 1. When incrementing the ``major`` component of the version identifier,
279
+
the ``minor`` and ``patch`` components is reset to 0. When incrementing the minor component,
280
+
the patch component is reset to 0.
281
+
282
+
Releases are classified by the library changes contained in that release. This classification
283
+
determines which component of the version identifier is incremented on release.
284
+
285
+
* ``major`` releases (for example, ``2.18.0`` -> ``3.0.0``) are for changes that will
286
+
require extensive adaptation efforts from many users and downstream projects.
283
287
For example, breaking changes to widely-used user-facing APIs should only be applied in a major release.
284
288
285
289
286
-
Users and downstream projects should carefully consider the impact of a major release before adopting it.
287
-
In advance of a major release, developers should communicate the scope of the upcoming changes, and help users prepare for them.
290
+
Users and downstream projects should carefully consider the impact of a major release before
291
+
adopting it.
292
+
In advance of a major release, developers should communicate the scope of the upcoming changes,
293
+
and help users prepare for them.
294
+
295
+
* ``minor`` releases (or example, ``3.0.0`` -> ``3.1.0``) are for changes that do not require
296
+
significant effort from most users or downstream downstream projects to respond to. API changes
297
+
are possible in minor releases if the burden on users imposed by those changes is sufficiently small.
288
298
289
-
* ``minor`` releases (or example, ``3.0.0`` -> ``3.1.0``) are for minor changes that do not require significant effort from most users or downstream
290
-
downstream projects to respond to. API changes are possible in minor releases if the burden on users imposed by those changes is sufficiently small.
291
299
For example, a recently released API may need fixes or refinements that are breaking, but low impact
292
300
due to the recency of the feature. Such API changes are permitted in a minor release.
293
301
294
302
295
303
Minor releases are safe for most users and downstream projects to adopt.
296
304
297
305
298
-
* ``patch`` releases (for example, ``3.1.0`` -> ``3.1.1``) are for changes that contain no breaking or behaviour changes for downstream projects or users. Examples of changes in a patch release are bugfixes and documentation improvements.
306
+
* ``patch`` releases (for example, ``3.1.0`` -> ``3.1.1``) are for changes that contain no breaking
307
+
or behaviour changes for downstream projects or users. Examples of changes suitable for a patch release are
308
+
bugfixes and documentation improvements.
299
309
300
310
301
311
Users should always feel safe upgrading to a the latest patch release.
302
312
303
-
Note that this versioning scheme is not consistent with `Semantic Versioning <https://semver.org/>`_. The Zarr library
304
-
may release breaking changes in ``minor`` releases, or even ``patch`` releases under exceptional circumstances.
305
-
But we should strive to avoid doing so. A better model for our versioning scheme is `Intended Effort Versioning <https://jacobtomlinson.dev/effver/>`_, or "EffVer".
306
-
The guiding principle off EffVer is to categorize releases based on the *expected effort required to upgrade to that release*.
313
+
Note that this versioning scheme is not consistent with `Semantic Versioning <https://semver.org/>`_.
314
+
Contrary to SemVer, the Zarr library may release breaking changes in ``minor`` releases, or even
315
+
``patch`` releases under exceptional circumstances. But we should strive to avoid doing so.
316
+
317
+
A better model for our versioning scheme is `Intended Effort Versioning <https://jacobtomlinson.dev/effver/>`_,
318
+
or "EffVer". The guiding principle off EffVer is to categorize releases based on the *expected effort
319
+
required to upgrade to that release*.
307
320
308
-
Zarr developers should make changes as smooth as possible for users. This means making backwards-compatible changes wherever possible.
309
-
When a backwards-incompatible change is necessary, users should be notified well in advance, e.g. via informative deprecation warnings.
321
+
Zarr developers should make changes as smooth as possible for users. This means making
322
+
backwards-compatible changes wherever possible. When a backwards-incompatible change is necessary,
323
+
users should be notified well in advance, e.g. via informative deprecation warnings.
310
324
311
325
Data format compatibility
312
326
^^^^^^^^^^^^^^^^^^^^^^^^^
313
327
314
-
The Zarr library is an implementation of a file format standard defined externally -- see the `Zarr specifications website <https://zarr-specs.readthedocs.io>`_ for the list of Zarr file format specifications.
328
+
The Zarr library is an implementation of a file format standard defined externally --
329
+
see the `Zarr specifications website <https://zarr-specs.readthedocs.io>`_ for the list of
330
+
Zarr file format specifications.
315
331
316
332
317
-
If an existing Zarr format version changes, or a new version of the Zarr format is released, then the Zarr library will generally require changes. It is very likely that
318
-
a new Zarr format will require extensive breaking changes to the Zarr library, and so support for a new Zarr format in the Zarr library will almost certainly come in new ``major`` release.
319
-
When the Zarr library adds support for a new Zarr format, there may be a period of accelerated changes as developers refine newly added APIs and deprecate old APIs. In such a transitional phase breaking changes may be more frequent than usual.
333
+
If an existing Zarr format version changes, or a new version of the Zarr format is released, then
334
+
the Zarr library will generally require changes. It is very likely that a new Zarr format will
335
+
require extensive breaking changes to the Zarr library, and so support for a new Zarr format in the
336
+
Zarr library will almost certainly come in new ``major`` release.
337
+
When the Zarr library adds support for a new Zarr format, there may be a period of accelerated
338
+
changes as developers refine newly added APIs and deprecate old APIs. In such a transitional phase
339
+
breaking changes may be more frequent than usual.
320
340
321
341
322
342
Release procedure
@@ -360,5 +380,7 @@ pre-releases will be available under
360
380
Post-release
361
381
""""""""""""
362
382
363
-
- Review and merge the pull request on the `conda-forge feedstock <https://github.com/conda-forge/zarr-feedstock>`_ that will be automatically generated.
383
+
- Review and merge the pull request on the
384
+
`conda-forge feedstock <https://github.com/conda-forge/zarr-feedstock>`_ that will be
385
+
automatically generated.
364
386
- Create a new "Unreleased" section in the release notes
0 commit comments