hermes: match --events issue_comment, not pull_request_comment
A timeline comment on a PR never reached the route. Gitea reuses the same strings in two namespaces and they collide: subscription name wire name (X-GitHub-Event) what it is pull_request_comment issue_comment comment on a PR issue_comment issue_comment comment on an issue pull_request_review_comment pull_request_comment review on a PR The hook's `events` array takes the subscription name; Hermes matches --events against X-GitHub-Event, the wire name, produced by HookEventType.Event() in modules/webhook/type.go. So --events pull_request_comment was selecting review submissions and could never match a comment -- the exact inversion of what it reads like. That also explains both observed failures. The review submission matched (wire name pull_request_comment) and reached the filter, which correctly dropped it on action=reviewed since a PullRequestPayload carries no comment object. The timeline comment arrived as issue_comment, matched nothing, and was dropped by the events filter before the script ever ran. gitea.nix and hermes-agent.nix now deliberately name the same event differently, so both carry the table and say the other is not a typo. issue_comment on the wire also covers comments on plain issues. The hook does not subscribe those, and the filter's is_pull check drops them regardless, so widening the hook later cannot leak issue comments into the agent. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S94o42aQ8VkBmEWvDem5xa
This commit is contained in:
@@ -54,6 +54,16 @@ defaults to `external` and does NOT include tailnet addresses
|
||||
gitea classifies it). `services/dev/gitea.nix` sets it accordingly; without
|
||||
that, deliveries fail with `webhook can only call allowed HTTP servers`.
|
||||
|
||||
Gitea names webhook events twice, and the two namespaces collide. The hook's
|
||||
`events` array takes the *subscription* name; `X-GitHub-Event`, which is what
|
||||
Hermes matches `--events` against, carries a lossy *wire* name from
|
||||
`HookEventType.Event()`. A comment on a PR subscribes as
|
||||
`pull_request_comment` but arrives as `issue_comment`, while
|
||||
`pull_request_comment` on the wire means a review submission. So
|
||||
`services/dev/gitea.nix` and `hosts/mars/hermes-agent.nix` deliberately name
|
||||
the same event differently; `X-GitHub-Event-Type` carries the subscription
|
||||
name, but Hermes does not read it.
|
||||
|
||||
The route's prompt and its filter script live in `hosts/mars/`, bind-mounted
|
||||
read-only from the nix store so the agent cannot edit its own loop guard out,
|
||||
and are re-subscribed by `hermes-agent-webhook-route` on every start. Run
|
||||
|
||||
Reference in New Issue
Block a user