The problem. Every UI redesign breaks end-to-end tests that were never wrong: a renamed test id, a reworded label, a new wrapper div, a CSS-module hash that changed on the last build. At Google, 16% of tests show some flakiness, and 84% of pass-to-fail transitions were flaky tests rather than real bugs (Google Testing Blog, 2016). Teams re-run, skip or delete the test, and the check quietly disappears. Missing checks are expensive: CrowdStrike's own root-cause analysis of its 2024 outage names "the lack of a specific test". Asking an AI agent to "fix the failing tests" is not safe either. We ran plain IBM Bob six times on the same redesign. In one run it decided "the tests are the source of truth" and reverted the redesign in the app. In all three React runs it fixed a duplicate row by position ("the second list item"), which clicks the wrong person as soon as the list changes. The solution. Relocate heals stale Playwright locators and proves every fix. For each failing test it: 1. captures the page exactly as it was at the moment of failure; 2. maps every interactive element with ZeroDOM, which gives each one a collision-free handle and a selector that matches exactly one element; 3. picks the element the test meant (test title, the assertion after the failing line, row text), writes the locator in the test's own style (getByRole, getByTestId, or a row filtered by name), patches only that one line, re-runs the test, and ships before/after screenshots, a receipt and a pull request. Who uses it, and how. QA and front-end teams with Playwright suites, through three entry points: - IBM Bob IDE, "Relocate Healer" mode: one prompt; Bob spawns one subagent per failure, all in parallel, and each explains its pick. - One command: npm run heal. - A GitHub Action: when a redesign PR turns E2E red, Relocate opens a heal PR into that branch. Results. Bob healed 12/12 stale tests across a static site and a React app (CSS-module hashes, translations, composed test ids, three identical Edit rows): 12 subagents spawned in one turn, 1.74 Bobcoins, zero assertions changed, zero positional or build-hash selectors (PR #1). On a new redesign Relocate had never seen (PR #2), the Action opened the healed PR #3 73 seconds later: 4/4 healed, full suite green. Why it's new. Runtime self-healing tools hide the drift with fallbacks at run time; Relocate fixes the source and ships a reviewable PR. LLM selector guessing can confidently click the wrong element; Relocate only chooses among verified handles that match exactly one element. And unlike a general coding agent, it is checkable: only the locator line can change (any other patch is rejected), Bob cannot write to test files in this mode, and a fix that does not pass is undone. Heal the locator. Never the check.
Category tags: