Summary
When Ladon requests changes for a real finding, then a later run verifies that finding is fixed but must escalate because the PR touches a gated path, the original CHANGES_REQUESTED review remains active. The escalation logic then reads that same review state and repeatedly reports that human approval is required, leaving the PR self-locked by Ladon's superseded review.
Reproduction
Observed on adcontextprotocol/adcp#7363:
- On head
8841e829, Ladon correctly requested changes because a breaking schema narrowing used a minor changeset.
- The author changed the changeset to
major in 90aab3de.
- On heads
90aab3de and 6bfd712f, Ladon reported a clean delta with no Critical/High/Medium findings, but submitted COMMENTED escalation reviews because static/schemas/source/** requires human/CODEOWNERS approval.
- The original review remains
CHANGES_REQUESTED; the fixed inline thread is outdated and now resolved, but GitHub's PR reviewDecision is still CHANGES_REQUESTED and merge remains blocked.
- The current-head Ladon review uses that state as an escalation reason and says a human approval will flip
review_decision to APPROVED. The outstanding Ladon change request may instead need explicit dismissal, creating a confusing circular gate.
Relevant reviews:
Expected behavior
After Ladon verifies that all of its blocking findings are fixed and transitions to a human-only escalation, its superseded CHANGES_REQUESTED state should no longer block the PR. Possible approaches:
- dismiss/clear Ladon's prior change-request review before submitting the escalation; or
- model the hard gate independently of the aggregate
reviewDecision, and clearly instruct maintainers to dismiss the superseded bot review when GitHub cannot clear it automatically.
The system should preserve the human/CODEOWNERS hard gate without requiring maintainers to diagnose stale bot-review state.
Summary
When Ladon requests changes for a real finding, then a later run verifies that finding is fixed but must escalate because the PR touches a gated path, the original
CHANGES_REQUESTEDreview remains active. The escalation logic then reads that same review state and repeatedly reports that human approval is required, leaving the PR self-locked by Ladon's superseded review.Reproduction
Observed on adcontextprotocol/adcp#7363:
8841e829, Ladon correctly requested changes because a breaking schema narrowing used aminorchangeset.majorin90aab3de.90aab3deand6bfd712f, Ladon reported a clean delta with no Critical/High/Medium findings, but submittedCOMMENTEDescalation reviews becausestatic/schemas/source/**requires human/CODEOWNERS approval.CHANGES_REQUESTED; the fixed inline thread is outdated and now resolved, but GitHub's PRreviewDecisionis stillCHANGES_REQUESTEDand merge remains blocked.review_decisiontoAPPROVED. The outstanding Ladon change request may instead need explicit dismissal, creating a confusing circular gate.Relevant reviews:
Expected behavior
After Ladon verifies that all of its blocking findings are fixed and transitions to a human-only escalation, its superseded
CHANGES_REQUESTEDstate should no longer block the PR. Possible approaches:reviewDecision, and clearly instruct maintainers to dismiss the superseded bot review when GitHub cannot clear it automatically.The system should preserve the human/CODEOWNERS hard gate without requiring maintainers to diagnose stale bot-review state.