feat(ui-automation): Add rs/1 runtime automation parity #416
1 issue
xcodebuildmcp-runtime-boundary-review: Found 1 issue (1 medium)
Medium
key_press and key_sequence manifests omit routing.stateful, breaking daemon routing parity for UI automation - `manifests/tools/type_text.yaml:10-11`
manifests/tools/key_press.yaml and manifests/tools/key_sequence.yaml do not declare routing.stateful: true, while every other UI automation tool in the same workflow — tap, swipe, touch, long_press, type_text, batch, snapshot_ui, and wait_for_ui — does. In src/runtime/tool-catalog.ts the catalog reads toolManifest.routing?.stateful ?? false, and src/runtime/tool-invoker.ts uses tool.stateful to decide whether the CLI path routes through the daemon. As a result, CLI invocations of key-press and key-sequence silently fall back to direct in-process invocation, bypassing the daemon session that owns the AXe HID connection used by the sibling tools. This violates the skill guardrails 'Stateful CLI tools route through daemon only when routing.stateful requires it' and 'Avoid silent fallbacks and parallel invocation paths.'
⏱ 14m 1s · 2.1M in / 98.7k out · $3.36
Annotations
Check warning on line 11 in manifests/tools/type_text.yaml
sentry-warden / warden: xcodebuildmcp-runtime-boundary-review
key_press and key_sequence manifests omit routing.stateful, breaking daemon routing parity for UI automation
`manifests/tools/key_press.yaml` and `manifests/tools/key_sequence.yaml` do not declare `routing.stateful: true`, while every other UI automation tool in the same workflow — `tap`, `swipe`, `touch`, `long_press`, `type_text`, `batch`, `snapshot_ui`, and `wait_for_ui` — does. In `src/runtime/tool-catalog.ts` the catalog reads `toolManifest.routing?.stateful ?? false`, and `src/runtime/tool-invoker.ts` uses `tool.stateful` to decide whether the CLI path routes through the daemon. As a result, CLI invocations of `key-press` and `key-sequence` silently fall back to direct in-process invocation, bypassing the daemon session that owns the AXe HID connection used by the sibling tools. This violates the skill guardrails 'Stateful CLI tools route through daemon only when routing.stateful requires it' and 'Avoid silent fallbacks and parallel invocation paths.'