Before submitting
Area
apps/desktop
Steps to reproduce
-
Start T3 Code Desktop.
-
Open a Codex-backed thread with the T3 preview MCP tools available.
-
Save this minimal page as background-click-repro.html:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>T3 Preview Background Click Repro</title>
</head>
<body>
<h1>T3 Preview Background Click Repro</h1>
<p>Selected: <strong id="selected">Alpha</strong></p>
<p>Click count: <strong id="count">0</strong></p>
<button id="alpha" type="button" aria-pressed="true">Alpha</button>
<button id="beta" type="button" aria-pressed="false">Beta</button>
<script>
let count = 0;
const selected = document.querySelector("#selected");
const countNode = document.querySelector("#count");
const buttons = Array.from(document.querySelectorAll("button"));
for (const button of buttons) {
button.addEventListener("click", () => {
count += 1;
selected.textContent = button.textContent;
countNode.textContent = String(count);
for (const candidate of buttons) {
candidate.setAttribute(
"aria-pressed",
candidate === button ? "true" : "false",
);
}
});
}
</script>
</body>
</html>
-
Serve the directory containing that file:
python -m http.server 8000
-
Open the page in a new hidden/background tab:
{
"show": false,
"reuseExistingTab": false,
"url": "http://localhost:8000/background-click-repro.html"
}
-
Verify evaluation works and capture the initial page state:
({
selected: document.querySelector("#selected").textContent,
count: document.querySelector("#count").textContent,
betaMatches: document.querySelectorAll("#beta").length
})
Expected initial result:
{
"selected": "Alpha",
"count": "0",
"betaMatches": 1
}
-
Click the Beta button with a text locator:
{
"locator": "text=Beta",
"timeoutMs": 15000
}
-
Check the page state again with the expression from step 6.
-
Repeat with the preflighted CSS selector:
{
"selector": "#beta",
"timeoutMs": 15000
}
-
Check the page state again.
Expected behavior
If a hidden/background tab supports navigation and evaluation, preview_click should dispatch clicks to matching elements in that tab or return a clear unsupported-state error.
After either preview_click call above, the page state should be:
{
"selected": "Beta",
"count": "1",
"betaMatches": 1
}
It should not return a success-shaped result when the page did not receive the click.
Actual behavior
The hidden tab loaded normally and preview_evaluate worked.
The text-locator click returned null, but the page state stayed unchanged:
{
"selected": "Alpha",
"count": "0",
"betaMatches": 1
}
The CSS selector was preflighted to match exactly one element. The CSS click also returned null without changing the page state:
{
"selected": "Alpha",
"count": "0",
"betaMatches": 1
}
In an earlier run against a more complex page, a later retry timed out and evaluation on that background tab also began timing out. The minimal repro above focuses on the deterministic part: hidden-tab clicks can return null without dispatching.
Impact
Major degradation or frequent failure
Version or commit
T3 Code desktop 0.0.28-1 via t3code-bin AUR package.
Environment
Arch Linux x86_64, kernel 7.0.13-arch1-1, T3 Code desktop AppImage package via t3code-bin, Codex provider.
Logs or stack traces
No stack trace. The failing calls return null while the page state remains unchanged.
Screenshots, recordings, or supporting files
Minimal repro page attached above. A screenshot is not needed; the selected and count fields show whether the click dispatched.
Workaround
Use hidden/background tabs for navigation, waits, and evaluation only. Use a shown tab for click-heavy flows, and verify every click effect with preview_evaluate or preview_status.
Before submitting
Area
apps/desktop
Steps to reproduce
Start T3 Code Desktop.
Open a Codex-backed thread with the T3 preview MCP tools available.
Save this minimal page as
background-click-repro.html:Serve the directory containing that file:
Open the page in a new hidden/background tab:
{ "show": false, "reuseExistingTab": false, "url": "http://localhost:8000/background-click-repro.html" }Verify evaluation works and capture the initial page state:
Expected initial result:
{ "selected": "Alpha", "count": "0", "betaMatches": 1 }Click the
Betabutton with a text locator:{ "locator": "text=Beta", "timeoutMs": 15000 }Check the page state again with the expression from step 6.
Repeat with the preflighted CSS selector:
{ "selector": "#beta", "timeoutMs": 15000 }Check the page state again.
Expected behavior
If a hidden/background tab supports navigation and evaluation,
preview_clickshould dispatch clicks to matching elements in that tab or return a clear unsupported-state error.After either
preview_clickcall above, the page state should be:{ "selected": "Beta", "count": "1", "betaMatches": 1 }It should not return a success-shaped result when the page did not receive the click.
Actual behavior
The hidden tab loaded normally and
preview_evaluateworked.The text-locator click returned
null, but the page state stayed unchanged:{ "selected": "Alpha", "count": "0", "betaMatches": 1 }The CSS selector was preflighted to match exactly one element. The CSS click also returned
nullwithout changing the page state:{ "selected": "Alpha", "count": "0", "betaMatches": 1 }In an earlier run against a more complex page, a later retry timed out and evaluation on that background tab also began timing out. The minimal repro above focuses on the deterministic part: hidden-tab clicks can return
nullwithout dispatching.Impact
Major degradation or frequent failure
Version or commit
T3 Code desktop
0.0.28-1viat3code-binAUR package.Environment
Arch Linux x86_64, kernel
7.0.13-arch1-1, T3 Code desktop AppImage package viat3code-bin, Codex provider.Logs or stack traces
No stack trace. The failing calls return
nullwhile the page state remains unchanged.Screenshots, recordings, or supporting files
Minimal repro page attached above. A screenshot is not needed; the
selectedandcountfields show whether the click dispatched.Workaround
Use hidden/background tabs for navigation, waits, and evaluation only. Use a shown tab for click-heavy flows, and verify every click effect with
preview_evaluateorpreview_status.