Repository navigation
feat(investigate): forward human_input_responses to the investigator - #1581
Conversation
The DevLoop continuation (mctl-agents#473, dev_loop.py) sends accepted human-input answers as human_input_responses, and the investigator consumes them as --human-input-responses since mctl-agents#558. The template did not declare the parameter, so the answer never reached the run and the continuation re-asked the same question. Declared optional and omitted from argv when empty, so every run that does not carry answers keeps its exact current argv. Read through env, never spliced into the shell, like the other caller-supplied values. Claude-Session: https://claude.ai/code/session_012kWiYf1BX6wcXB2kc8x15U
|
Claude finished @mashkovd's task in 2m 31s —— View job Reviewing PR #1581
Verdict: Changes requested (1 P2, 0 P1, 0 P3) The implementation itself follows the file's established pattern correctly:
P2 — missing test coverage: |
Antigravity (agy) review — informationalModel: gemini-3.8-flash-medium · commit Findings[P3] No test visible in this diff for workflow parameter forwarding
|
There was a problem hiding this comment.
Has P1/P2 findings, changes requested: 1 P2 (0 P1, 0 P3). The implementation itself is correct and follows the file's established pattern exactly: optional parameter defaulting to empty (zero behaviour change when omitted), env-bound (never shell-interpolated — consistent with scripts/validate-shell-param-interpolation.py's safe pattern), appended to argv only when non-empty, and the env var lives in the same container as the script that reads it. Remaining gap is missing test coverage: tests/test_cwft_investigate_work_context_argv.py exists specifically to pin this exact argv-building block for every prior optional identifier (work_item_id, execution_id, temporal_workflow_id, temporal_run_id, execution_request_id) — omit-empty passthrough, flag ordering, and injection safety — and was not extended for the new human_input_responses flag.
Extends test_cwft_investigate_work_context_argv.py, which pins every optional identifier this set -- block forwards, to the new flag: a realistic JSON answers array reaches the investigator as one verbatim token, appended last, omitted when empty, and a hostile value never executes. Removing the forwarding block or splicing the value through eval each fails four of the new checks. Claude-Session: https://claude.ai/code/session_012kWiYf1BX6wcXB2kc8x15U
|
Claude finished @mashkovd's task in 1m 31s —— View job Reviewing PR #1581 (commit
|
Antigravity (agy) review — informationalModel: gemini-3.8-flash-medium · commit No significant issues found. |
cwftDeclaredParams transcribes cwft-mctl-agents-investigate, which declares human_input_responses since mctlhq/mctl-gitops#1581. Claude-Session: https://claude.ai/code/session_012kWiYf1BX6wcXB2kc8x15U
Why
The human-input producer shipped in mctl-agents#558 (release 1.66.0). After a human answers a sealed question, the DevLoop continuation sends the accepted answers as the
human_input_responsesparameter (dev_loop.py), and the investigator reads them as--human-input-responses.mctl-agents-investigatedid not declare the parameter, so the answer never reached the run. Asdocs/runbooks/human-input-e2e.mdin mctl-agents notes, the continuation then re-asks the question and the workflow skips it by hash. This is the gitops half of mctl-api#372 item 3.What
cwft-mctl-agents-investigate.yaml:human_input_responsesparameter, empty by default.WORKFLOW_HUMAN_INPUT_RESPONSES.--human-input-responses "$WORKFLOW_HUMAN_INPUT_RESPONSES"only when the value is non-empty. Every run without answers keeps its exact current argv.issue_urland the correlation ids.Order and what this does not do
registry.go(it is indevLoopParamsPendingDeclarationtoday). Until then mctl-api strips it, so this PR alone changes no live run.legacyresolver mode (agent-platform README, "Kill switch"). This PR does not change the resolver mode.Refs mctlhq/mctl-agents#473, mctlhq/mctl-api#372
🤖 Generated with Claude Code
https://claude.ai/code/session_012kWiYf1BX6wcXB2kc8x15U