log.Fatal called os.Exit from a goroutine, bypassing deferred cleanup
and crashing the process on any transient fetch error. Errors now
propagate back to the caller via a buffered channel. Also adds a drain
defer so the goroutine can always exit if the consumer returns early.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Bounce messages and MAILER-DAEMON notices can have no From address,
causing a panic on the bare [0] index access.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Route all log output to AWP_LOG_FILE (from .env) if set, else stderr
- Log errors explicitly before returning so they appear in the log file
- Replace log.Fatal in fetch.go with proper error return so callers control logging
- Remove chatty success/no-op log lines that would bloat cron log files
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add missing bcc argument to NewEmail call in pkg/email/fetch.go
- Upgrade github.com/a-h/templ from v0.3.833 to v0.3.1020 to match generator
- Add player management routes (add/delete/edit) and playershandler
- Update templates and loaddata with pending changes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>