Gitea sends `requested_reviewer` (singular) field for `review_requested`
webhook actions, not always the `requested_reviewers` (plural/array).
The processor only checked the array form, so `usersToNotify` was always
empty and no notification was sent.
Also add more INFO-level logging for debugging the review_requested path.
Fixes: manual mappings worked but were never reached because the
processor never added the reviewer to the notification list.
JimKarvo's Gitea email (dimitris@jksoftware.gr) differs from Slack
email (jimkarvo@gmail.com), so the email-based Slack lookup fails.
Add MANUAL_USER_MAPPINGS env var (format: GiteaUsername:SlackID,...)
to bypass email lookup when a manual mapping exists.
Changes:
- cache.go: ParseManualMappings() parses env var format
- cache.go: CachedResolver checks manual mappings first (step 0)
- main.go: reads MANUAL_USER_MAPPINGS env var, passes to resolver
The review_requested case was reading e.RequestedReviewer (singular *GiteaUser),
but in some Gitea versions/webhook payloads this field is nil while the
reviewer data comes in requested_reviewers (plural array).
Now uses event.Reviewers from normalizePREvent, which handles both
PullRequest.RequestedReviewers and top-level requested_reviewers.
Keeps e.RequestedReviewer as a fallback for older Gitea versions.