When Forge encounters contested review comments during implement_review, it posts objections on the GitHub PR and pauses the workflow at review_response_gate. However, the reviewer's response on the PR is ignored because the worker only handles pull_request_review events when current_node == "human_review_gate".
Expected behavior
A pull_request_review event (changes requested, comment, or approval) should unpause the workflow at review_response_gate, the same way it does at human_review_gate.
Actual behavior
The worker logs:
Workflow is paused at review_response_gate
No valid signal detected for AISOS-XXXX at review_response_gate — ignoring event, workflow state unchanged
The reviewer must go to Jira and post a ! comment to unpause the workflow, even though the entire review conversation is happening on the GitHub PR.
Root cause
src/forge/orchestrator/worker.py line 1054 — the pull_request_review handler is gated to human_review_gate only:
if (
message.source == EventSource.GITHUB
and "pull_request_review" in message.event_type
and current_node == "human_review_gate" # <-- excludes review_response_gate
):
Suggested fix
Extend the condition to also match review_response_gate:
and current_node in ("human_review_gate", "review_response_gate")
When Forge encounters contested review comments during
implement_review, it posts objections on the GitHub PR and pauses the workflow atreview_response_gate. However, the reviewer's response on the PR is ignored because the worker only handlespull_request_reviewevents whencurrent_node == "human_review_gate".Expected behavior
A
pull_request_reviewevent (changes requested, comment, or approval) should unpause the workflow atreview_response_gate, the same way it does athuman_review_gate.Actual behavior
The worker logs:
The reviewer must go to Jira and post a
!comment to unpause the workflow, even though the entire review conversation is happening on the GitHub PR.Root cause
src/forge/orchestrator/worker.pyline 1054 — thepull_request_reviewhandler is gated tohuman_review_gateonly:Suggested fix
Extend the condition to also match
review_response_gate: