44470b4821
Drives both EventStore (SQLite reference) and FsEventStore with identical event streams and asserts query() result sets match. SQLite throws on blocked inserts (NIP-09 tombstones, NIP-62 vanish, NIP-40 expiration) while the FS store silently skips — both are observable "event not persisted", so insertBoth() catches SQLite throws and parity is judged on the post-insert state. Coverage: id lookup, kind+author, since/until/limit, single-letter tag query (OR within key), replaceable winner, replaceable older rejected, addressable d-tag dedup, deletion by id (incl. block- reinsert), deletion by address (incl. cutoff semantics), expiration sweep, NIP-50 single-token search (sticking to ASCII where SQLite's unicode61 tokenizer agrees with our port), count, multi-filter union, delete by filter, mixed kitchen-sink scenario. 113 fs tests now green (97 unit + 16 parity).