Gitea's X-Gitea-Event only gives the coarse event; the precise
"assigned" sub-event lives in X-Gitea-Event-Type (issue_assign,
pull_request_assign). Read that header and check the assignees list
against CLAUDE_GITEA_USERNAME so unrelated assignment changes get a
200 "ignored" instead of triggering a routine fire. Document the known
Gitea limitation where it can't tell us who was just added to
assignees, only the full current list.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Covers the README, all code comments in server.js and .env.example,
diagnostic log messages, and the push/pull_request summaries sent to
the Claude Code routine, so the whole codebase and its output are
consistently in English.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Abort the Anthropic fire request after FIRE_TIMEOUT_MS instead of
letting it hang indefinitely with no outcome logged.
- Log info and error levels both to stdout (JSON has a level field
already) so a single log stream/tail shows the full picture instead
of splitting across stdout/stderr, which was hiding forward failures
from anyone only watching one of the two.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Express service that authenticates Gitea deliveries, verifies the HMAC
signature, builds a readable text summary for push/pull_request events,
and forwards it to the Anthropic routines API with the headers Gitea
can't set itself. Includes in-memory delivery dedup, structured logging,
.env.example, and a Dockerfile for deployment behind nginx.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>