Introduce error types.
Handle upserts with Keychain, rename backend implementation, handle do-not-exist cases.