Hmbown/CodeWhale · error · Error
The text received by the practice window did not match…
Error message
The text received by the practice window did not match. Check the app log and retry.
What it means
After clicking Apply, the check waits for the 'applied' event and compares the value the practice window reports it received against the exact typed phrase 'Background check complete 🐋'. A mismatch means the text arrived altered (truncated, mis-encoded, or a different field received it). The check treats this as a typing/input-path failure and points you at the app log.
Solutions
- Check the practice app's log to see exactly what text it received and where it diverged.
- Re-run the check; transient focus or keystroke drops often pass on a second run.
- If the emoji is consistently mangled, test whether plain-ASCII input works and report a Unicode typing bug in the computer-use backend.
Defensive patterns
Strategy: try-catch
Try / catch
try {
await runBackgroundCheck({ bundle });
} catch (e) {
if (String(e.message).includes("did not match")) {
console.error("Typed text arrived altered — capture the practice app log and retry.");
}
throw e;
} Prevention
- Check the practice app log to see exactly what text was received.
- Retry once — transient keystroke drops are the most common cause.
- If non-ASCII/emoji consistently breaks, test plain ASCII and report a Unicode input bug.
When it happens
Trigger: In runBackgroundCheck, the 'applied' event fires but applied.value !== 'Background check complete 🐋' — e.g. partial keystroke delivery, Unicode/emoji handling issues, or the click landed before focus settled.
Common situations: Keyboard-synthesis drops under load, the text field not focused when typing started, non-ASCII/emoji handling bugs in the input path, or an overlong paste being truncated.
Related errors
- app_denied
- Automation name is required
- Automation prompt is required
- click supports left with 1-3 clicks, right x1 or middle x1
- Codewhale successful run contained an error event
AI-assisted analysis of Hmbown/CodeWhale@73e0f67d83 (2026-09-22).
Data as JSON: /api/errors/e083a6c256aab9d9.
Report an issue: GitHub.
Appendix: source
Thrown at crates/tui/plugins/computer-use/app/background-check.mjs:74
await delay(100, undefined, { signal: controller.signal });
}
}
}
const entry = state.elements.find(element => element.role === "AXTextField" && element.label === "Practice text");
const apply = state.elements.find(element => element.role === "AXButton" && element.label === "Apply");
if (!entry || !apply) throw new Error("The practice controls could not be read. Check Accessibility permission and retry.");
// Backend targets are resolved AX records, using the exact state index.
const focus = await call("resolve_element", { app_ref: { pid: child.pid }, windowIndex: entry.windowIndex, path: entry.path });
if (!focus.found) throw new Error("The practice text field changed. Run the check again.");
await call("left_click", { target: { ...focus.element, type: "element", app_ref: { pid: child.pid } } });
const phrase = "Background check complete 🐋";
await call("type", { text: phrase });
if (demoDirectory) await call("screenshot", { app_ref: { pid: child.pid }, path: path.join(demoDirectory, "02-entered.png") });
const button = await call("resolve_element", { app_ref: { pid: child.pid }, windowIndex: apply.windowIndex, path: apply.path });
if (!button.found) throw new Error("The practice Apply button changed. Run the check again.");
await call("left_click", { target: { ...button.element, type: "element", app_ref: { pid: child.pid } } });
await until(() => applied);
if (applied.value !== phrase) throw new Error("The text received by the practice window did not match. Check the app log and retry.");
const capture = await call("screenshot", { app_ref: { pid: child.pid }, path: path.join(scratch, "practice.png") });
if (demoDirectory) fs.copyFileSync(capture.file, path.join(demoDirectory, "03-verified.png"));
if (capture.app_ref?.pid !== child.pid || !capture.pixels?.w || !capture.pixels?.h) throw new Error("The practice window screenshot could not be verified. Check Screen Recording permission.");
const count = latest.samples;
await until(() => latest.samples > count);
const isolated = latest.samples > 0 && latest.pointerChanges === 0 && latest.foregroundChanges === 0;
return { ok: isolated, edited: true, screenshot: true, samples: latest.samples, pointerChanges: latest.pointerChanges, foregroundChanges: latest.foregroundChanges,
message: isolated ? "Text entered, Apply verified and the practice window captured. Your foreground app and pointer stayed unchanged."
: "Edit and screenshot verified. Your app or pointer moved during the check, so background isolation is inconclusive." };
} finally {
clearTimeout(timer);
try { await closeSession(sessionId); }
finally {
if (child.exitCode === null && child.signalCode === null) child.kill("SIGTERM");
fs.rmSync(scratch, { recursive: true, force: true });
}
}
}View on GitHub (pinned to 73e0f67d83)