You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Generic approval node defaults to approved and routes to protected tool without human decision #3
The generic approval node in the workflow engine defaults to approved status when no explicit human decision is recorded, allowing the workflow to route to the protected tool without an actual approval.
Suggested fix
Default to pending or denied when no decision is recorded.
Location: agentorch/runtime/workflow_execution.py:405-411 (handle_approval) and agentorch/workflow/runner.py:12-43
The bug: When runtime.human_feedback is None (no feedback mechanism configured), the approval node's handle_approval method returns "approved" by default rather than blocking. The workflow then routes to the protected tool via the condition edge.
PoC (extracted from real source, executed offline):
# RuntimeWorkflowExecutor.handle_approval at line 405-411:# When human_feedback is None, it does NOT wait for input# Instead it returns an approved status, allowing the workflow to proceed# to the tool node which executes write_marker# The proof sets:executor.runtime=SimpleNamespace(tools=FakeTools(), human_feedback=None)
# ↑ human_feedback=None → no human can approve# But the workflow still executes the protected tool# Result: marker file created WITHOUT any human verdictassertexecutor.runtime.human_feedbackisNone# no feedback mechanismassertMARKER.exists() # but the effect happened
Suggested fix: When human_feedback is None, the approval node should either raise an error (no mechanism to obtain approval) or return a "pending" status that blocks the workflow.
Activity
Tardfyou commentedon Oct 24, 2026
Detailed reproduction
Location:
agentorch/runtime/workflow_execution.py:405-411(handle_approval) andagentorch/workflow/runner.py:12-43The bug: When
runtime.human_feedbackisNone(no feedback mechanism configured), the approval node'shandle_approvalmethod returns "approved" by default rather than blocking. The workflow then routes to the protected tool via the condition edge.PoC (extracted from real source, executed offline):
Suggested fix: When
human_feedbackisNone, the approval node should either raise an error (no mechanism to obtain approval) or return a "pending" status that blocks the workflow.