Breaking changes
- Refactored `getRelatedReferences` into `getWithRelationship` and `getWithRelationships` to better define the two possible batch-axis, and simplify implementation on both sides of the API. This also changes the methods over to callback signatures for consistency with the rest of the API, and migrates them to C++ with Python bindings. [847](https://github.com/OpenAssetIO/OpenAssetIO/issues/847) [#919](https://github.com/OpenAssetIO/OpenAssetIO/issues/919) [#913](https://github.com/OpenAssetIO/OpenAssetIO/issues/913)
- Removed version query APIs (`entityVersion`, `entityVersions`, `finalizedEntityVersion`) in favour of use of the more general `resolve` and `getWithRelationship` methods. See [DR017](./doc/decisions/DR017-Entity-version-queries.md) for details. [980](https://github.com/OpenAssetIO/OpenAssetIO/issues/980)
- Updated `castToPyObject` to convert a `nullptr` input to a Python `None`, rather than throwing an exception. [988](https://github.com/OpenAssetIO/OpenAssetIO/issues/988)
- Removed out of date constants from the Python `openassetio.constants` module. These have been replaced by domain-specific traits and specifications defined in their own repositories, such as [OpenAssetIO-MediaCreation](https://github.com/OpenAssetIO/OpenAssetIO-MediaCreation).
- Migrated remaining constants to C++ with Python bindings. This means that `from openassetio.constants import <name>` no longer works - the `constants` module must be imported wholesale. [998](https://github.com/OpenAssetIO/OpenAssetIO/issues/998)
Deprecated
- Renamed manager info dictionary key constants, which were prefixed with `kField_`, to use an `InfoKey_` prefix instead. The deprecated constant variables will be removed in a future release. [998](https://github.com/OpenAssetIO/OpenAssetIO/issues/998)
Improvements
- Added paged implementations of `getWithRelationship` and `getWithRelationships`, called `getWithRelationshipPaged` and `getWithRelationshipsPaged`. These methods are the equivalent of the non-paged versions, but provide an `EntityReferencePager` object, rather than a direct list of results, allowing for correct handling of extremely large/unbounded data sets. [971](https://github.com/OpenAssetIO/OpenAssetIO/issues/971)
- Added default implementations of `getWithRelationship` and `getWithRelationships` that return empty lists, making these methods opt-in for manager implementations. [163](https://github.com/OpenAssetIO/OpenAssetIO/issues/163)
- Added coverage of the `getWithRelationship[s]` and `getWithRelationship[s]Paged` methods of the `ManagerInterface` to the `openassetio.manager.test` harness. [914](https://github.com/OpenAssetIO/OpenAssetIO/issues/914) [#972](https://github.com/OpenAssetIO/OpenAssetIO/issues/972)
- Added `requireEntityReferenceFixture` and `requireEntityReferencesFixture` utility methods for cases written for the `openassetio.test.manager` (aka `apiComplianceSuite`) test harness. These convert a string fixture into an `EntityReference` object, or a list-of-strings fixture into a list of `EntityReference` objects, respectively. [914](https://github.com/OpenAssetIO/OpenAssetIO/issues/914)
- Migrated the `ManagerInterface`/`Manager` `flushCaches` method to C++ with Python bindings. [994](https://github.com/OpenAssetIO/OpenAssetIO/issues/994)
- Added a call to `flushCaches` after every `openassetio.test.manager` (aka `apiComplianceSuite`) test case, giving the manager plugin a chance to clean up between tests. [994](https://github.com/OpenAssetIO/OpenAssetIO/issues/994)
Bug fixes
- Reintroduced the optional optimized entity reference prefix check for `isEntityReferenceString`, allowing the plugin's implementation to be short-circuited. In particular, if the plugin's implementation is written in Python, then a prefix check short-circuits the need for a costly Python function call for this hot code path. [566](https://github.com/OpenAssetIO/OpenAssetIO/issues/566)