The fix was to use _createOffsetBasedKeyPath() (which is exported by stdlib) to resolve the key path, and change my APIs to use AnyKeyPath rather than PartialKeyPath<CommonSuperclass> (which makes sense, see @Joe_Groff's post on contra variance here).
1 Like