Graduates the relay from beta. Replaces the always-on Badger backend with a
purpose-built in-memory store as the default, keeping signing latency off the
disk path; Badger remains available via STORAGE_BACKEND=badger.
- In-memory store indexed by recipient #p / author / id, with time-window and
byte-budget eviction.
- Auto-detects the host/cgroup memory limit and sets GOMEMLIMIT (respecting an
operator-configured one); MAX_MEMORY_MB overrides the event budget.
- Non-NIP-46 read filters now return an empty EOSE instead of CLOSED so NIP-66
monitors can measure read latency; NIP-46 reads still require authors/#p/ids
scoping to prevent firehose harvesting.
- O(1) token-bucket rate limiter, ReadHeaderTimeout, trimpath/-s -w builds,
periodic store stats log.
- Badger value-log GC now runs; cleanup goroutine no longer leaks on timeout.
- .env auto-loaded via godotenv; docker-compose reads env_file; rewritten
.env.example; removed unused ADMIN_PUBKEYS.
- Adds tests for the store, filter, and memory config (pass under -race).
See CHANGELOG.md for the full list.