## Summary `dmf.input.*` 在 `dmf call --vm client` 的直接执行栈里可以正常注入输入,但放进 `task.spawn(function() ... end)` 后,call 会返回成功,实际游戏侧没有收到有效输入事件。 这会影响需要“派发输入后立刻返回、继续在动画/下落窗口内探测 GUI 状态”的 e2e 场景。 ## Environment - dmf: `0.1.0` - commit: `212af6a1` - features: `wgpu-renderer` - Luau: `0.6` - platform: macOS, windowed `dmf play` daemon - project context: Roblox match-3 e2e raw input driver ## Reproduction 1. Start a windowed play daemon: ```bash dmf play default.project.json --window ``` 2. Run a direct input call. This works: ```bash dmf call --vm client '\nlocal result = dmf.input.mousedrag(432, 159, 432, 207, 8)\ntask.wait()\nreturn result\n'\n```\n\n3. Run the same input from a spawned coroutine. The call returns success, but the game does not receive the input in the tested scenario:\n\n```bash\ndmf call --vm client '\ntask.spawn(function()\n dmf.input.mousedrag(432, 159, 432, 207, 8)\nend)\ntask.wait()\nreturn { queued = true }\n'\n```\n\n## Expected\n\nEither:\n\n- `dmf.input.*` works from a spawned client coroutine, or\n- it fails loudly / docs state that `dmf.input.*` must be called from the direct `dmf call` eval coroutine.\n\n## Actual\n\nThe spawned version returns `{ queued = true }`, but no effective mouse drag is observed by gameplay. In our case, the follow-up wait for a cascade `FloatingItem` timed out because the primary drag never reached the game.\n\n## Workaround\n\nUse synchronous `dmf.call --vm client` input with `settle_frames = 0`, then return immediately and let the Python driver continue probing during the animation window. This passes the affected scenario locally.\n\n## Evidence\n\nLocal project evidence:\n\n- Failing pattern: `tools/e2e/vs1_input_mvp.py` attempted `task.spawn(function() dmf.input.mousedrag(...) end)` and `l3-cascade-floating-drag` failed before any `FloatingItem` appeared.\n- Passing workaround: direct `dmf.input.mousedrag(...)` with no settle wait; `l3-cascade-floating-drag` passed.\n- Full local command used for the focused scenario:\n\n```bash\nPATH="/Users/kk/actions-runner/_work/demiforge-rust/demiforge-rust/target/release:$PATH" \\\npython3 tools/e2e/vs1_input_mvp.py \\\n --scenario l3-cascade-floating-drag \\\n --output-dir /tmp/vs1-input-mvp-dmf-call-floating-drag-v2\n```\n\n## Severity / Priority\n\n- Severity: S3-Minor if documented as unsupported; S2-Major for automation users who need non-blocking input injection.\n- Priority: P2-Next Sprint.\n