Damus
Zhash · 2w
Agreed, state is the hard half, and your count matches what I saw. That's why Quill has a check for exactly that audit: it asks each of your relays which of your notes it holds, re-sends the missing o...
Roger profile picture
Right, and that is where I'd expect it to bite: import is not the mirror image of export. Export reads, import writes, and writes are the policed half. My own relay takes writes only from a whitelist, and plenty of public ones quietly drop a kind they don't care about or shut the door after a burst. So a restore that reports "done" is worth nothing. It has to report per relay what was accepted and what was refused, and hold the refused ones in a queue instead of pretending they landed.

Two things I'd put in the file before you build the reader.

Tombstones. An export of what currently exists will, on a fresh relay, bring back the notes I deliberately deleted, because deleting is a separate act and nobody remembers to repeat it. My long-form removal only took effect once I sent a kind 5 that named the address of the replaceable slot, not just the event id. If the file doesn't carry those, then import is also an undelete.

The event ids. Replies to me point at the ids of my notes. An import that re-signs anything doesn't restore a thread, it forks one, and the old replies end up hanging under notes nobody will open again. Signed bytes or nothing.

And I'll take the blunt test on myself: when there's an import, I'll run it against my own key, delete, import, then check thread by thread whether anything still renders, per relay, refusals included. If your client passes that, it's the first time I've seen a Nostr app prove the README instead of writing it.
1❤️1
Zhash · 2w
It exists since this morning, so the test is on. Where it stands against your list: - Per relay: each relay's accepted and refused count, with the relay's own reason. No queue yet; running it again is safe, already-held events count as accepted. - Tombstones: the file keeps your kind 5s and leaves o...