jackwener/OpenCLI · error · CommandExecutionError
Xianyu /personal rendered but no user identity extractable —
Error message
Xianyu /personal rendered but no user identity extractable — stale unb or layout drift
What it means
The /personal page rendered (not a login prompt) but neither a DOM user id nor a nickname could be extracted, meaning the identity cannot be confirmed. The library throws CommandExecutionError because the page layout changed (layout drift) or a stale unb cookie produces no matching profile data.
Source
Thrown at clis/xianyu/auth.js:50
`);
if (probe.blocked) {
throw new AuthRequiredError('goofish.com', 'Xianyu blocked by verification / risk control');
}
if (probe.requiresAuth) {
throw new AuthRequiredError('goofish.com', 'Xianyu /personal shows login prompt — anonymous');
}
const userId = probe.domUserId || unb;
let decodedTracknick = '';
if (tracknick) {
try {
decodedTracknick = JSON.parse('"' + tracknick.replace(/\\/g, '\\\\') + '"');
} catch {
decodedTracknick = tracknick;
}
}
const nickname = probe.domNick || decodedTracknick;
if (!userId && !nickname) {
throw new CommandExecutionError('Xianyu /personal rendered but no user identity extractable — stale unb or layout drift');
}
return { user_id: String(userId), nickname: String(nickname) };
}
registerSiteAuthCommands({
site: 'xianyu',
domain: 'goofish.com',
loginUrl: 'https://www.goofish.com/login',
columns: ['user_id', 'nickname'],
quickCheck: hasXianyuIdentityCookie,
verify: verifyXianyuIdentity,
poll: async (page) => {
if (!await hasXianyuIdentityCookie(page)) {
throw new AuthRequiredError('goofish.com', 'Waiting for Xianyu unb/tracknick cookie');
}
return verifyXianyuIdentity(page);
},
});View on GitHub (pinned to 49907e53dc)
Solutions
- Log out and back in to refresh unb/tracknick cookies
- Re-run after clearing cookies and re-authenticating
- Check for goofish.com layout updates and update the DOM extraction selectors in the probe script
- Retry later in case of transient anti-bot rendering
Example fix
// before
const identity = await verifyXianyuIdentity(page); // throws on layout drift
// after
if (!(await hasXianyuIdentityCookie(page))) {
await reLogin(page);
}
const identity = await verifyXianyuIdentity(page); Defensive patterns
Strategy: retry
Validate before calling
if (!(await hasXianyuIdentityCookie(page))) await reLogin(page);
Type guard
function hasIdentity(x) {
return x != null && (x.user_id || x.nickname);
} Try / catch
try {
return await verifyXianyuIdentity(page);
} catch (e) {
if (/no user identity extractable/.test(e.message)) {
await reLogin(page); // refresh stale unb cookie
return verifyXianyuIdentity(page);
}
throw e;
} Prevention
- Re-login when unb cookies are old
- Pin/monitor goofish.com layout changes affecting /personal selectors
- Log probe DOM state on failure to diagnose drift quickly
When it happens
Trigger: verifyXianyuIdentity finds userId (domUserId or unb cookie) and nickname (domNick or decoded tracknick) both empty after the page renders.
Common situations: goofish.com changed its /personal DOM structure; stale/expired unb cookie kept the session half-authenticated; anti-bot rendering served a degraded page.
Related errors
- Unexpected Amazon probe: ${JSON.stringify(probe)}
- amazon review page redirected to sign-in and product page fa
- amazon discussion page did not expose review summary (landed
- amazon offer surface did not expose seller or fulfillment fa
- BOSS detail page did not expose a complete job posting
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/f7e91543e82523cd.
Report an issue: GitHub.