878f7728eb
- N-F1: commit the wrap/rumor/slate dedup markers immediately after the durable receive/finalize, before the reply+sync tail, so a crash there can't re-trigger the action on catch-up. (grin + decide() already backstopped it; this closes the window cleanly.) - N-F3: prune the processed-dedup store hourly in the heartbeat, not only at startup — a long-lived session could otherwise grow it unbounded under fresh-keypair spam since the 30-day TTL never re-applied. - N-F2: kept Created/SendFailed in the finalize allow-set (removing them would strand a real send whose S1 reached the peer before we persisted AwaitingS2) and documented why it is not a forgery vector; added a test. - Update replay_check e2e: a same-pubkey second register is now blocked by the name-change cooldown (fires before the one-name rule); accept either. Validated: 35 lib tests + live nip17_slatepack_roundtrip + replay_check green.