π€ Agent-authored β found by an independent review of #1634 and filed under that PR's deferral discipline: valid, pre-existing in a shared module, and out of scope for the PR that surfaced it.
Problem
fetch_review_evidence / has_current_head_review (plugins/source-control/skills/babysit-prs/scripts/babysit_review_trigger.py) admit a review as reviewer evidence only when is_review_bot_item passes, which requires GitHub to type the author as a Bot (__typename/type == "Bot", or is_bot). A matching login is not sufficient.
That excludes an account class this plugin explicitly supports elsewhere. reference/safety.md documents --extra-bot-logins as existing precisely for "automation accounts that post as ordinary users" β no [bot] suffix, API __typename of User β and babysit_merge.py's autopilot tier carries its own comment about tolerating exactly that misreporting. So two consumers in the same plugin apply different bot tests to the same operator-configured account.
fetch_review_evidence's ReviewTriggerConfig never consults extra_bot_logins at all.
Impact
Two consumers, both degraded for a User-typed configured reviewer:
Fail-closed in direction β it holds longer, never merges sooner β but permanently slower, and silently so.
Verified by probe: the same review on the live head, with only the API-reported author type differing.
type: "Bot" β reviewSettle.state: reviewed, ready: true
type: "User" β reviewSettle.state: settling, ready: false
Why this was not fixed in #1634
It is not a defect that PR introduced β the constraint is pre-existing in the shared module, and the reviewer that motivated #1629 (chatgpt-codex-connector) is genuinely Bot-typed, so the shipped feature works for it. Fixing it means changing a predicate shared with the review-trigger flow, which is a wider blast radius than that PR's scope. #1634 documents the limitation at the hold's safety.md section rather than leaving it implicit, and points here.
Suggested direction (not prescriptive)
Login-only matching is defensible for this specific purpose: the reviewer login set is operator configuration, a GitHub login is unique, and a PR author cannot author a review as someone else. So the authoritative-Bot test buys little here that the configured allowlist does not already provide.
Options, for whoever takes it:
- Thread an explicit allowance (e.g.
require_bot_type: bool = True) through is_review_bot_item and fetch_review_evidence, and have the settle hold pass it as False. Narrow; leaves the trigger flow's behavior untouched unless it opts in too.
- Have
ReviewTriggerConfig consult extra_bot_logins the way the rest of the plugin does, so a registered non-structural bot account is classified consistently across every consumer. Wider, and arguably the real fix β the inconsistency, not the strictness, is the defect.
- Leave the strictness and document it as intended. Cheapest, but it means the
--extra-bot-logins seam does not reach two consumers that look like it should.
Whoever takes this should decide whether the review-trigger flow wants the same widening; changing it for one consumer and not the other reintroduces the inconsistency at a different seam.
Acceptance criteria
- A configured reviewer that GitHub types as
User is recognized as having reviewed the live head, in whichever consumers the chosen option covers.
- Regression tests with
"type": "User" for each covered consumer.
- If the review-trigger flow is deliberately left strict, that asymmetry is recorded at both sites with the reason.
reference/safety.md's Review-Settle Hold section drops its limitation note and its pointer here.
Related
#1634 (the PR that surfaced it), #1629 (the hold), #1614 (the adjudication that produced both).
π€ Agent-authored β found by an independent review of #1634 and filed under that PR's deferral discipline: valid, pre-existing in a shared module, and out of scope for the PR that surfaced it.
Problem
fetch_review_evidence/has_current_head_review(plugins/source-control/skills/babysit-prs/scripts/babysit_review_trigger.py) admit a review as reviewer evidence only whenis_review_bot_itempasses, which requires GitHub to type the author as aBot(__typename/type == "Bot", oris_bot). A matching login is not sufficient.That excludes an account class this plugin explicitly supports elsewhere.
reference/safety.mddocuments--extra-bot-loginsas existing precisely for "automation accounts that post as ordinary users" β no[bot]suffix, API__typenameofUserβ andbabysit_merge.py's autopilot tier carries its own comment about tolerating exactly that misreporting. So two consumers in the same plugin apply different bot tests to the same operator-configured account.fetch_review_evidence'sReviewTriggerConfignever consultsextra_bot_loginsat all.Impact
Two consumers, both degraded for a
User-typed configured reviewer:gh api repos/{repo}/commits/{sha}request it did not need.Fail-closed in direction β it holds longer, never merges sooner β but permanently slower, and silently so.
Verified by probe: the same review on the live head, with only the API-reported author type differing.
type: "Bot"βreviewSettle.state: reviewed,ready: truetype: "User"βreviewSettle.state: settling,ready: falseWhy this was not fixed in #1634
It is not a defect that PR introduced β the constraint is pre-existing in the shared module, and the reviewer that motivated #1629 (
chatgpt-codex-connector) is genuinelyBot-typed, so the shipped feature works for it. Fixing it means changing a predicate shared with the review-trigger flow, which is a wider blast radius than that PR's scope. #1634 documents the limitation at the hold'ssafety.mdsection rather than leaving it implicit, and points here.Suggested direction (not prescriptive)
Login-only matching is defensible for this specific purpose: the reviewer login set is operator configuration, a GitHub login is unique, and a PR author cannot author a review as someone else. So the authoritative-
Bottest buys little here that the configured allowlist does not already provide.Options, for whoever takes it:
require_bot_type: bool = True) throughis_review_bot_itemandfetch_review_evidence, and have the settle hold pass it asFalse. Narrow; leaves the trigger flow's behavior untouched unless it opts in too.ReviewTriggerConfigconsultextra_bot_loginsthe way the rest of the plugin does, so a registered non-structural bot account is classified consistently across every consumer. Wider, and arguably the real fix β the inconsistency, not the strictness, is the defect.--extra-bot-loginsseam does not reach two consumers that look like it should.Whoever takes this should decide whether the review-trigger flow wants the same widening; changing it for one consumer and not the other reintroduces the inconsistency at a different seam.
Acceptance criteria
Useris recognized as having reviewed the live head, in whichever consumers the chosen option covers."type": "User"for each covered consumer.reference/safety.md's Review-Settle Hold section drops its limitation note and its pointer here.Related
#1634 (the PR that surfaced it), #1629 (the hold), #1614 (the adjudication that produced both).