SYMBIONT_PORT=8111 is set in the live service shell, causing runtime.exs
to override test.exs's port: 0 even under MIX_ENV=test. Wrap all env-based
overrides in a config_env() != :test guard so tests can run against the
live host without port collision.
40 tests, 0 failures.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds the Telepathy email communication layer as an OTP subtree:
- Telepathy.JMAP: GenServer that discovers Fastmail JMAP session,
periodically polls inbox for new emails, and provides send_email/3.
Uses :httpc (no external HTTP dep). Deduplicates via seen_ids MapSet
seeded from existing MessageStore entries.
- Telepathy.MessageStore: JSONL-backed message persistence, compatible
with the existing Python messages.jsonl format. Supports store, unread,
mark_read, list, count operations.
- Telepathy.Supervisor: rest_for_one supervisor (MessageStore then JMAP).
- Conditionally enabled via config (:telepathy, :enabled). Disabled in
test env. Can be disabled at runtime via TELEPATHY_ENABLED=false.
Validated against live Fastmail: session discovery, inbox fetch (20
emails), message storage all working.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>