Declares the stable lifecycle contract of a native resource.
Declarations are data: generated bindings and test tooling can inspect the same identity, ownership and upgrade promises without coupling production code to a test observer.
@type t() :: %Kinda.Resource.Declaration{ abi_version: pos_integer(), identity: atom() | binary(), owner: atom() | binary() | nil, upgrade: upgrade() }
@type upgrade() :: :unsupported | :takeover
@spec new( atom() | binary(), keyword() ) :: t()
@spec supports_upgrade?(t()) :: boolean()