f666fe2002
Renames `byStableKey: HashMap<String, Slot>` to `byAddress: HashMap<Address, Slot>` in EventStoreProjection. Address is a data class on every platform so equals/hashCode are derived from (kind, pubKeyHex, dTag) — same identity as the synthetic string key, but typed. `stableKey(event)` / `stableKey(kind, pubKeyHex, dTag)` become `addressOf(...)` returning `Address?`. Plain replaceables map to `Address(kind, pubKey, "")`, addressables to `Address(kind, pubKey, dTag)`, regular events to null. `limit` was already used at insertNew() to enforce the cap on inserts; left unchanged. 15/15 projection tests still pass. https://claude.ai/code/session_01Jny85MTu1ynKgFBgysfWu5