jackwener/OpenCLI · error · CommandExecutionError
Failed to add @${username} to list ${listId}: no member_coun
Error message
Failed to add @${username} to list ${listId}: no member_count in response What it means
A CommandExecutionError from buildListAddMemberRow thrown when the add-member response contains neither a member_count nor any fatal GraphQL errors. The library uses member_count as its success signal, so an absent count means the mutation's outcome cannot be verified and the command is treated as failed.
Source
Thrown at clis/twitter/list-add-core.js:71
export function buildListAddMemberRow({ addResult, memberCountBefore, listId, username, userId }) {
if (!addResult?.httpOk) {
throw new CommandExecutionError(
`Failed to add @${username} to list ${listId}: HTTP ${addResult?.status ?? 0}${addResult?.fetchError ? ' (' + addResult.fetchError + ')' : ''}${addResult?.raw ? ' — ' + addResult.raw : ''}`
);
}
// X often returns a partial GraphQL error on `default_banner_media_results`
// even on successful mutations. Treat only missing main data or non-decode
// GraphQL errors as command failures.
const hasMemberCount = addResult.mc !== null && addResult.mc !== undefined;
const fatalErrors = fatalGraphqlErrors(addResult.errors);
if (!hasMemberCount && fatalErrors.length) {
const msg = fatalErrors.map((e) => e.message || JSON.stringify(e)).join('; ');
throw new CommandExecutionError(`Failed to add @${username} to list ${listId}: ${msg.slice(0, 300)}`);
}
if (!hasMemberCount) {
throw new CommandExecutionError(`Failed to add @${username} to list ${listId}: no member_count in response`);
}
const memberCountAfter = Number(addResult.mc);
if (!Number.isFinite(memberCountAfter)) {
throw new CommandExecutionError(`Failed to add @${username} to list ${listId}: invalid member_count in response`);
}
if (memberCountAfter < memberCountBefore) {
throw new CommandExecutionError(
`Failed to add @${username} to list ${listId}: member_count decreased unexpectedly (${memberCountBefore} → ${memberCountAfter})`
);
}
const countIncreased = memberCountAfter > memberCountBefore;
const noop = !countIncreased;
if (noop && addResult.isMember !== true) {
throw new CommandExecutionError(
`Failed to add @${username} to list ${listId}: member_count unchanged and membership was not confirmed`View on GitHub (pinned to 49907e53dc)
Solutions
- Update this library to the latest version to pick up fixes for X's current response schema.
- Retry after a short wait — intermittent bot-check pages can produce empty payloads.
- Refresh session cookies; a logged-out or challenged session may receive degraded responses.
- Inspect the raw response (enable debug logging) to confirm what X actually returned and file an issue if the schema changed.
Example fix
// before: outdated library parses old schema
await listAddUser(page, { listId: '123456789', username: 'alice' });
// after
npm update <this-cli-package> # then rerun the list-add command Defensive patterns
Strategy: retry
Validate before calling
null
Type guard
function hasVerifiableMemberCount(r) {
return r?.mc !== null && r?.mc !== undefined;
} Try / catch
let lastErr;
for (let i = 0; i < 3; i++) {
try { return await listAddUser(page, { listId, username }); }
catch (e) {
if (!/no member_count in response/.test(e.message)) throw e;
lastErr = e;
await sleep(5000 * (i + 1));
}
}
throw lastErr; Prevention
- Keep the library updated — schema drift on X's side is the usual cause.
- Refresh cookies to avoid bot-challenge pages that return degraded payloads.
- Retry transient failures with backoff.
- Enable raw response logging to capture payloads for bug reports.
When it happens
Trigger: addResult.mc is null/undefined, fatalGraphqlErrors() returns empty, and HTTP was ok — X returned a success-shaped but structurally unexpected payload (schema drift or a non-mutation response).
Common situations: X changing the GraphQL response shape (version drift); hitting an unexpected page/redirect that returned HTML parsed as an empty payload; a bot-checked response stripped of data.
Related errors
- Failed to add @${username} to list ${listId}: ${msg.slice(0,
- Failed to add @${username} to list ${listId}: invalid member
- Failed to add @${username} to list ${listId}: member_count u
- ${probe.detail}
- 12306 whoami failed: ${probe.detail}
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/07d4e09a995afae5.
Report an issue: GitHub.