I think this scam example is a good one to measure solutions against, as most people would (I hope) agree that the baddie should not be able to get away with this in a modern chat app.
And perhaps a sister example with the same scam but two baddies vs. two normies. (The two baddies are working together, tagging each others fake events and fake-tagging the normies real events.)
But one baddie to start.
The simple methods like "just hit reply" don’t work.
The slightly more complex method of tagging the last seen message at time of compose/send is easily thwarted by the praying hands emoji.
So then the more complex options.
Caveat, I suspect they all end up in the uncanny valley between NIP17 and MLS, where you’ve lost the simplicity of NIP17 and haven’t gained the functionality of MLS. But open to some solution if it's out there.
The e-tag all/some past messages option (Batman The Dark Night master view option) I did game out before and remain ambivalent about it. Depends how far you take it. Security-wise is it a good idea to have an event ID history in every single new message? And for clients to detect a mismatch they'd have to basically traverse a DAG every time a new message arrives, and often on cheap mobiles. For both those reasons you’d seemingly be pushed towards a small sliding window to save on client-side computation and avoid too big of an ID map in each message. But go too small and the baddie can bury the scam. Maybe there’s a sweet spot. But the biggest issue for me about this one is false positives. If this produces a warning two or three times a day due to lag and just general nostr jitters the user will start ignoring those warnings pretty quick.
False positives for the invisible receipts method would be pretty extreme too, I think.
My gut is still that NIP17 one-to-one is a big win, best to go hard on that. NIP17 groups feels like getting greedy and paying the price, and harming the one-to-one use case in the process.
But I’m open to there being some tweak of, or combo between, what’s on the table (Dark Knight mode, invisible receipts, bloom filters, multisig, ring signatures, a few ZK things I've looked at and not mentioned yet) that won't blow interop to smithereens and that doesn’t end up deep in the uncanny valley.
For this use case what would you say is the most efficient solution that doesn't result in a detrimental amount of false positives?