Conversation
Maestro killApp triggers system-initiated process death (adb shell am kill on Android) instead of stopApp's force-stop. On other platforms it aliases stopApp through the shared close dispatcher. - contracts: optional Interactor.kill, CloseApplicationInput.mode, with fallback to close in invokeApplicationClose - android: killAndroidApp (am kill) wired onto the interactor - maestro: killApp IR kind, parser, runtime port, daemon projection to an app-only close carrying killApp dispatch, conformance canonical - daemon: replay dispatch folds killApp; session close passes mode kill into closeApplication - upstream/116_kill_app now classifies identical; divergence removed
executeLifecycleCommand grew a sixth case for killApp and tripped the complexity gate. The stopApp/killApp/clearState legs share one shape, so dispatch them through a lookup instead of three switch cases.
am kill only reaps background processes, so a foreground killApp used to succeed without killing anything. Refuse a foreground target naming the background-first precondition, and verify the process is gone after the kill instead of reporting an unproven success.
|
Reviewed 78727e3. I found no code defect, but the kill route has only run against adb fakes, and I have one smaller-design question. The route (Maestro replay → close with Could this be smaller? Only the Android lifecycle owner reads Not blocking: the support matrix and replay-e2e.md do not say that a foreground killApp is refused rather than a silent no-op; a process that survives All checks are green and there are no conflicts. I could not check whether upstream Maestro's killApp also refuses a foreground app. |
Summary
Supports Maestro
killApp(system-initiated process death) end to end, mirroringstopAppplumbing. On Android it dispatchesadb shell am kill; every other platform aliasesstopAppthrough the shared close dispatcher (Interactor.killfallback). No new public CLI surface —killAppstays inside the Maestro compatibility layer.Interactor.kill,CloseApplicationInput.mode, kill-with-fallback ininvokeApplicationClosekillAndroidApp(am kill) wired onto the interactorkillAppIR kind, parser, runtime port, daemon projection to an app-only close carryingkillAppdispatchkillApp; session close passesmode: killintocloseApplicationupstream/116_kill_appnow classifies identical; declared divergence removed. Touched 30 files.Validation
Tested commit
369a51b35. Focused suites pass: contracts interaction, maestro parser/runtime-port/daemon-port/conformance-verify (node --test, 14 pass), android app-lifecycle, session-close, replay-maestro-request, fuzz arbitraries, maestro help/docs sync.pnpm check:quick(lint + typecheck) passes.pnpm check:affected --run: fallow audit clean on changed files; complexity gate shows only the 2 inherited findings after table-driving the lifecycle dispatch. Unresolved:check:production-exportsreports 68 unused exports — reproduced identical onorigin/main, pre-existing and unrelated. No live-device run; risk is Androidam killsemantics on a real emulator (unit asserts the exact argv).