feat(ui-automation): Add rs/1 runtime automation parity #416
4 issues
xcodebuildmcp-test-boundary-review: Found 4 issues (2 high, 2 low)
High
Test's `toEqual` expectation contradicts `normalizeTestCases` filter logic - `src/snapshot-tests/__tests__/json-normalize.test.ts:26-36`
The test expects all three test cases (failed + two passed) to be returned, but normalizeTestCases in json-normalize.ts returns failed only when failed.length > 0 — so the actual output would be a single-item array containing only the failed case, causing the test to fail.
SDKROOT expected value bypasses normalization — test will fail - `src/snapshot-tests/__tests__/json-normalize.test.ts:156`
The expected output at line 156 uses the raw value 'iphoneos', but normalizeBuildSettingsEntryValue in json-normalize.ts unconditionally returns '<SDK_PATH>' for any SDKROOT key, so normalizeStructuredEnvelope will produce '<SDK_PATH>' and this assertion will fail. Either update the expected value back to '<SDK_PATH>', or update the normalizer to only replace full SDK paths.
Low
Inline mock executor duplicates existing `createCommandMatchingMockExecutor` helper - `src/mcp/tools/ui-automation/__tests__/screenshot.test.ts:36-57`
Replace createBootedScreenshotMockExecutor with the existing createCommandMatchingMockExecutor from test-utils/mock-executors.ts, which is purpose-built for routing multiple commands to different mock responses.
Also found at:
src/mcp/tools/ui-automation/__tests__/ui-action-test-helpers.ts:52-54
swipe success snapshot coverage replaced with error case without explicit acknowledgement - `src/snapshot-tests/suites/ui-automation-suite.ts:124-136`
The swipe describe block in the snapshot suite no longer exercises the success path: the previous it('success', ...) test was replaced with it('error - target not actionable', ...), flipping expect(isError).toBe(false) to toBe(true) and switching the fixture key from swipe--success to swipe--error-not-actionable. Per the skill, snapshot updates are contract changes requiring review, and silently removing the only swipe success snapshot assertion (while leaving an orphan cli/json/ui-automation/swipe--success.json fixture in the tree) loses regression coverage for the swipe happy path. This may be intentional given the rs/1 post-action snapshot changes that affect what counts as 'actionable', but the loss of success-path snapshot coverage should be called out and either restored with a now-actionable element ref or explicitly justified.
⏱ 30m 50s · 4.2M in / 200.8k out · $7.92
Annotations
Check failure on line 36 in src/snapshot-tests/__tests__/json-normalize.test.ts
sentry-warden / warden: xcodebuildmcp-test-boundary-review
Test's `toEqual` expectation contradicts `normalizeTestCases` filter logic
The test expects all three test cases (failed + two passed) to be returned, but `normalizeTestCases` in `json-normalize.ts` returns `failed` only when `failed.length > 0` — so the actual output would be a single-item array containing only the failed case, causing the test to fail.
Check failure on line 156 in src/snapshot-tests/__tests__/json-normalize.test.ts
sentry-warden / warden: xcodebuildmcp-test-boundary-review
SDKROOT expected value bypasses normalization — test will fail
The expected output at line 156 uses the raw value `'iphoneos'`, but `normalizeBuildSettingsEntryValue` in `json-normalize.ts` unconditionally returns `'<SDK_PATH>'` for any `SDKROOT` key, so `normalizeStructuredEnvelope` will produce `'<SDK_PATH>'` and this assertion will fail. Either update the expected value back to `'<SDK_PATH>'`, or update the normalizer to only replace full SDK paths.