- Add DispatchContext field to Task model for rule metadata storage
- Add BlocklistEmails config (BLOCKLIST_EMAILS env var)
- Wire rules.Pipeline into IMAPWatcher, replacing inline whitelist check
- Pass rule metadata through DispatchContext to OpenClaw dispatch
- Remove isWhitelisted method (now handled by WhitelistRule)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Address review feedback on PR #13:
- Remove docs/superpowers/plans/ files not related to issue #4
- gofmt internal/mail/resolve_thread_test.go
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Add references variable to extract References header
- Replace manual inReplyTo handling with resolveThreadID call
- Maintain existing body parsing functionality
- Includes proper lambda function for database lookups
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add CI workflow at .gitea/workflows/ci.yml triggered on pull_request
with two jobs: fmt (gofmt check) and test (go test ./...).
Fix gofmt issues (import ordering) in 7 files so CI passes from
the start.
Fixes#7
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Use context-based SOCKS dialing and bounded TLS handshake so proxy negotiation and handshake cannot hang indefinitely, with regression tests for both paths.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Preserve the 30s dial timeout semantics for proxy connections by using a timeout-backed forward dialer, and add a regression test to lock this behavior.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Use IMAP_PROXY_URL to route IMAP TLS connections through SOCKS5 when configured, while preserving direct dialing when unset.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>