Just version byte everything.
Data
->serialization_method_btye+serialized_data
->compression_method_byte+compressed_data
->encryption_method_byte+encrypted_data
Then store the data by it's blake3 hash and send a signed notification of its existence with any data (nonce) needed for assymetic keygen.
Reserve 0 bytes for not_serialized, not_compressed, not_encrypted
Then every application built on your protocol can pick defaults that make sense.
Every application can maintain separate keys by noting the context of the data in the notification. Context being a hash of something like H("namespace/application/permission") e.g. H("nostr_core/microblog/write")
Then each user can just keep a list of application context hashes they support.