| 
 | 1 | +=============  | 
 | 2 | +Compatibility  | 
 | 3 | +=============  | 
 | 4 | + | 
 | 5 | +``referencing`` is currently in beta so long as version numbers begin with a ``0``, meaning its public interface may change if issues are uncovered, though not typically without reason.  | 
 | 6 | +Once it seems clear that the interfaces look correct (likely after ``referencing`` is in use for some period of time) versioning will move to `CalVer <https://calver.org/>`_ and interfaces will not change in backwards-incompatible ways without deprecation periods.  | 
 | 7 | + | 
 | 8 | +In the spirit of `having some explicit detail on Bowtie's public interfaces <regret:before-you-deprecate:document your public api>`, here is a non-exhaustive list of things which are *not* part of the ``referencing`` public interface, and therefore which may change without warning, even once no longer in beta:  | 
 | 9 | + | 
 | 10 | +* All commonly understood indicators of privacy in Python -- in particular, (sub)packages, modules and identifiers beginning with a single underscore.  | 
 | 11 | +  In the case of modules or packages, this includes *all* of their contents recursively, regardless of their naming.  | 
 | 12 | +* All contents in the ``referencing.tests`` package unless explicitly indicated otherwise  | 
 | 13 | +* The precise contents and wording of exception messages raised by any callable, private *or* public.  | 
 | 14 | +* The precise contents of the ``__repr__`` of any type defined in the package.  | 
 | 15 | +* The ability to *instantiate* exceptions defined in `referencing.exceptions`, with the sole exception of those explicitly indicating they are publicly instantiable (notably `referencing.exceptions.NoSuchResource`).  | 
 | 16 | +* The instantiation of any type with no public identifier, even if instances of it are returned by other public API.  | 
 | 17 | +  E.g., `referencing._core.Resolver` is not publicly exposed, and it is not public API to instantiate it in ways other than by calling `referencing.Registry.resolver` or an equivalent.  | 
 | 18 | +  All of its public attributes are of course public, however.  | 
 | 19 | +* Any identifiers in any modules which are imported from other modules.  | 
 | 20 | +  In other words, if ``referencing.foo`` imports ``bar`` from ``referencing.quux``, it is *not* public API to use ``referencing.foo.bar``; only ``referencing.quux.bar`` is public API.  | 
 | 21 | +  This does not apply to any objects exposed directly on the ``referencing`` package (e.g. `referencing.Resource`), which are indeed public.  | 
 | 22 | +* Subclassing of any class defined throughout the package.  | 
 | 23 | +  Doing so is not supported for any object, and in general most types will raise exceptions to remind downstream users not to do so.  | 
 | 24 | + | 
 | 25 | +If any API usage may be questionable, feel free to open a discussion (or issue if appropriate) to clarify.  | 
0 commit comments