Yeah I'm moving towards @available.
Looking at the LibraryEvolution documentation (swift/LibraryEvolution.rst at main 路 apple/swift 路 GitHub), I think it's a good fit. It seems like many (all?) uses of @inlineable or @abiPublic will be accompanied by an @available anyway.
@available(1.2)
public func summonDemons()
@available(1.0)
@available(1.2, inlineable)
public func summonElves()
It's a flexible, parameterised attribute which can easily expand to other kinds of binary guarantees.