The pr-review cascade's acknowledgement comment @-mentions the bot itself (@donpetry-bot I'm on it…). That self-mention is an issue_comment: created event, which pr-review-mention-reusable.yml interprets as a review request and re-triggers the cascade → another identical ack. On petry-projects/.github-private#860 this produced 1,481 byte-identical comments at a ~9s cadence for ~4.5h (93.6% of the PR's 1,582 comments). This is the org-repo half of the #860 runaway; the .github-private half (per-PR churn breaker + human-gated cap reset) landed in .github-private#928, but it only bounds the storm — the self-trigger still fires at the source.
Root cause
pr-review-mention-reusable.yml does not exclude the bot's own comments, so the agent triggers itself. The #467 3-cycle cap couldn't stop it because the cap's documented re-engage path is "mention the bot," which the ack performs.
Fix (P0)
In pr-review-mention-reusable.yml, ignore mention events authored by the bot itself (github.event.comment.user.login == ) and any comment carrying a marker — a comment the agent posts about its own work must never trigger the agent.
And/or change the ack text so it does not literally @-mention donpetry-bot (plain text fires no mention webhook). Do both for defense-in-depth.
Acceptance
[ ] A comment authored by the bot, or carrying a pr-review-agent marker, never re-triggers the mention listener.
[ ] The ack comment fires no mention webhook.
[ ] Land org-first (before/with the .github-private stub guard) so the stub never assumes undeployed reusable behavior.
References: .github-private#860 (incident), .github-private#926 (tracker), .github-private#928 (merged .github-private half), .github-private#855 / #916 (same class).
The pr-review cascade's acknowledgement comment @-mentions the bot itself (@donpetry-bot I'm on it…). That self-mention is an issue_comment: created event, which pr-review-mention-reusable.yml interprets as a review request and re-triggers the cascade → another identical ack. On petry-projects/.github-private#860 this produced 1,481 byte-identical comments at a ~9s cadence for ~4.5h (93.6% of the PR's 1,582 comments). This is the org-repo half of the #860 runaway; the .github-private half (per-PR churn breaker + human-gated cap reset) landed in .github-private#928, but it only bounds the storm — the self-trigger still fires at the source.
Root cause
pr-review-mention-reusable.yml does not exclude the bot's own comments, so the agent triggers itself. The #467 3-cycle cap couldn't stop it because the cap's documented re-engage path is "mention the bot," which the ack performs.
Fix (P0)
In pr-review-mention-reusable.yml, ignore mention events authored by the bot itself (github.event.comment.user.login == ) and any comment carrying a marker — a comment the agent posts about its own work must never trigger the agent.
And/or change the ack text so it does not literally @-mention donpetry-bot (plain text fires no mention webhook). Do both for defense-in-depth.
Acceptance
[ ] A comment authored by the bot, or carrying a pr-review-agent marker, never re-triggers the mention listener.
[ ] The ack comment fires no mention webhook.
[ ] Land org-first (before/with the .github-private stub guard) so the stub never assumes undeployed reusable behavior.
References: .github-private#860 (incident), .github-private#926 (tracker), .github-private#928 (merged .github-private half), .github-private#855 / #916 (same class).