Just wanted to share that I’m doing something pretty similar in Radial (an issue tracker for humans/agents: disnetdev.com/radial at main · Tangled). Along with public spaces (where all the records live in public atproto repos) Radial supports “private spaces” that keep their records off the public repo and instead move signed envelopes between replicas over Iroh. In private spaces public repos are used only for device keys, endpoint addresses, and space bookmarks. Basically the same rough approach as this proposal: atproto for identity and discovery, Iroh for the application data plane.
The main difference is that Radial uses separate records for a device’s signing key and endpoint id and doesn’t require the endpoint to countersign its binding to the DID. What makes this safe is that the endpoint record doesn’t carry trust. A connection just gives you the ability to sync between peers, and every envelope’s signature covers the author’s DID so the signing key proves possession continuously. A space member that publishes someone else’s endpoint id at worst causes a misattributed connection, but then every envelope is checked against the author’s repo-published device key.
The countersigning is of course necessary for a generic lexicon that can’t assume consumers will perform the self-binding so that totally makes sense as a standard. Radial would probably adopt this proposal for the endpoint discovery part while keeping its separate device key record to handle deciding which application-specific records to trust.
On the proposal’s revocation open question, what I did in Radial is have a retiredAt timestamp on the address record so you don’t have to watch for deletion events. Also, revocation just governs connections not data validity so peers that see revocation at different times don’t diverge.