Custom flow with HumanInputComponent fails ~40 s after resume (INPUT_REQUIRED → FAILED) when approved via UI or resume API

Everyone can contribute. Help move this issue forward while earning points, leveling up and collecting rewards.

Summary

A custom AI Catalog flow (flow registry v1, environment: ambient, triggered by an issue @mention, executed in the CI workload) pauses correctly at a HumanInputComponent (interaction_type: approval): the session shows INPUT_REQUIRED. When the human approves — with the Approve button on the session page or POST /api/v4/ai/duo_workflows/workflows/:id/resume with human_approval=true (HTTP 201) — a new CI workload starts, the executor connects, and about 40 seconds later the session goes INPUT_REQUIRED → FAILED. 3/3 sessions, two flow shapes, independent of how long the session was paused (2 min or ~95 min).

Related, but not the same: #628833 (there the session never stays in input_required; here the pause works and the resume fails).

Steps to reproduce

  1. Public custom flow proposer (AgentComponent) → human_approval (HumanInputComponent, approval, sends_response_to: proposer) → conditional router on context:human_approval.approval → on_approve / on_reject → end (the shape of the flow-registry v1 example). YAML: https://gitlab.com/gitlab-ai-hackathon/transcend-october-2026/35646169/showcase/-/blob/266d19f/flows/approval-spike-b.yml.
  2. Enable it in a project with a mention trigger; mention its service account on an issue → session pauses at INPUT_REQUIRED.
  3. Wait 2 minutes, then approve (UI button or resume API).

Expected: the flow resumes and runs on_approve. Actual: the resume workload starts; ~40 s later the session is FAILED.

Evidence (public project https://gitlab.com/gitlab-ai-hackathon/transcend-october-2026/35646169/showcase)

session flow shape resumed by paused for result
9203566 sends_response_to the next agent UI Approve ~95 min FAILED 2026-10-08 16:07:27 UTC (resume job 17036852973)
9209534f same resume API 2 min FAILED 16:21:25 UTC, 43 s after resume
9210313 sends_response_to the agent that already ran + conditional router (registry example) resume API 2 min FAILED 16:38:04 UTC

Executor log after resume (job 17036852973):

[DuoWorkflowNodeExecutor][9203566] Received new checkpoint: {"workflowStatus":"INPUT_REQUIRED"}
[RunController] Tool completed: tool-b6e85d1d-...
[DuoWorkflowNodeExecutor][9203566] Received new checkpoint: {"workflowStatus":"FAILED"}
[GitLabBackend] Workflow turn ended: finished
There was an error processing your request in the Duo Agent Platform, please contact support if the issue persists.

Full write-up: https://gitlab.com/gitlab-ai-hackathon/transcend-october-2026/35646169/showcase/-/blob/main/docs/transcend/BUG_HUMANINPUT_RESUME.md (SPIKE.md §5/§5b).

Environment

GitLab.com, 2026-10-08; hosted runner saas-linux-small-amd64 (tag gitlab--duo); project-level enablement (Developer + custom AI role); default model; default flow image / Duo CLI executor.

Workaround

The approval is a human note on the MR that mentions a separate flow (mention trigger), bound to the commit SHA and re-verified in CI.


Drafted with Claude Code for the reporter.

Edited by 🤖 GitLab Bot 🤖