i've just figured out a way that nostr can break out of the current application/nostr+json box
the canonical event format is this:
[0,"<pubkey",,,[["",""]],"<content">"]
it is trivial then to extend that:
[[0,"<pubkey",,,[["",""]],"<content">"],""]
and then you have a new wire format that also doesn't redundantly specify the ID (just hash the canonical form of the message, a dynamic typed but fixed typed array) and the signature is attached to it in a way that is easy to cut out, generate the ID and then extract the sig and verify the sig, and no json object keys were harmed in this process
and then what next?
you can then put this into the "content" field of a more sane, text based format like the one i have been designing, inspired by common standards like email and yaml (ok fuck the python style yaml indent-structuring tho) and the event is now transportable
you have a signature on the outer, new wire format, that can be used with new style APIs (mainly will just mean a different Accept mimetype, probably "application/x-nostr") and the inner object is compatible with the old format once you unpack it, hash the canonical form, derive the wire format object with id and sig added, and then we can attached extra fields in the tags where needed to augment the referencing so a client can see this new format of event, read tags, and find references that point to this new formatted composite event structure
et voila
probably can't deprecate the bundled nostr format of the event data, so they will be a bit more bloated for a while, but once there is enough relay and sdk for client devs out there and enough relays and clients supporting the new format, you can then dispense with the extra data for this hybrid format, and the network can slowly climb out of the magic mud of creation and walk around like a normal protocol