jackwener/OpenCLI · error · CommandExecutionError
Nothing changed. Open the tweet in the browser and retry.
Error message
Nothing changed. Open the tweet in the browser and retry.
What it means
This CommandExecutionError is thrown when the like attempt completed without starting a write (unconfirmed is false) but returned ok:false, meaning the like definitively did not happen. The action failed cleanly, so the message advises opening the tweet in the browser and retrying.
Source
Thrown at clis/twitter/like.js:77
await new Promise(r => setTimeout(r, 1000));
// Verify success by checking if the 'unlike' button reappeared
const verifyArticle = findTargetArticle() || targetArticle;
const verifyBtn = verifyArticle?.querySelector('[data-testid="unlike"]');
if (verifyBtn) {
return { ok: true, message: 'Tweet successfully liked.' };
} else {
return { ok: false, unconfirmed: true, message: 'Like action was initiated but UI did not update as expected.' };
}
} catch (e) {
return { ok: false, unconfirmed: writeStarted, message: e.toString() };
}
})()`);
if (result.unconfirmed) {
throw new TimeoutError('twitter like confirmation', 1, `${result.message} Check the tweet before retrying; the like may already have succeeded.`);
}
if (!result.ok) {
throw new CommandExecutionError(result.message, 'Nothing changed. Open the tweet in the browser and retry.');
}
await page.wait(2);
return [{
status: 'success',
message: result.message
}];
}
});
View on GitHub (pinned to 49907e53dc)
Solutions
- Open the tweet in the browser to verify its visibility and current like state
- Confirm the session is logged in and can interact with the tweet
- Re-run `twitter like` once the page state is verified
- Check the underlying result.message (the first argument) for the in-page failure reason
- Update the library if Twitter changed its UI selectors
Defensive patterns
Strategy: try-catch
Validate before calling
// pre-check: confirm the tweet is visible and not already liked
await page.goto(target.url);
await page.wait({ selector: '[data-testid="primaryColumn"]' }); Try / catch
try {
await clis.twitter.like.func(page, { url });
} catch (e) {
if (e.message.includes('Nothing changed')) {
// clean failure: inspect result reason, verify session/tweet, retry once
} else throw e;
} Prevention
- Confirm the session can view/interact with the tweet (not protected/deleted)
- Log the inner failure message (first constructor arg) for diagnosis
- Update the library when Twitter changes its UI
- Retry only after verifying page state in the browser
When it happens
Trigger: During `twitter like`, the in-page evaluate returned {ok:false, unconfirmed:false} — e.g. the like button/confirmation was never found, the write never started, and no exception escalated to the TimeoutError branch.
Common situations: Tweet is protected/deleted or the account cannot see it; already-liked state causing the button lookup to fail; Twitter DOM/selector changes; page loaded partially (primaryColumn present but the like control not rendered); logged-out or restricted session.
Related errors
- Nothing changed. Open the tweet in the browser and retry.
- Failed to delete list ${listId}: ${deleteResult?.message ||
- Unexpected 12306 probe: ${JSON.stringify(probe)}
- Waiting for 12306 tk auth cookie
- Failed to upload file to ChatGPT project knowledge
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/e4ea1c933d0e5a62.
Report an issue: GitHub.