2026.4.21 gateway stuck in device-pair loop after host migration
Env: 2026.4.21 on macOS (Apple Silicon), upgraded from 2026.3.13 today. Local loopback, token auth, 10 Telegram bots, Ollama+GLM.
Symptom: Gateway reaches Capability: pairing-pending and stays. Infinite device.pair.requested loop for one device, new requestId every 20-100ms, isRepair: true, scopes operator.approvals + operator.read.
Suspected cause: Device is paired platform: linux from when OpenClaw ran on a GCP VPS. After migrating to this Mac, every boot tries to repair the platform pin (claimedPlatform=darwin vs pinnedPlatform=linux). It's also the CLI's auth device (clientId: cli), so the CLI's own auth is what's pending β breaking every CLI-based approval path.
Tried:
devices approve <requestId> β always unknown requestId, rotates faster than command completes
Scripted list+approve in one pipeline β same
Stable requestId from pending.json β still fails, file rewrites on every connection
Full downgrade to 3.13 then re-upgrade β same on both
doctor --fix
Dashboard Manual RPC device.pair.approve β also unknown requestId, rotates within dashboard session
channels.logout for all 10 Telegram accounts β slowed briefly but didn't stop. Suggests pair requests come from gateway-client itself, not the Telegram plugin
State: Dashboard reachable + paired with full operator scope. Pending always has 1 entry for same deviceId, requestId rotates. Paired list still has the broken Linux device. Log shows device.pair.requested every few hundred ms, client=gateway-client. Snapshots exist, no data risk.
Not tried: device.token.revoke on the Linux device β reluctant without knowing if it stops the regeneration source or just records a revoke.
Q: Intended recovery for an operator device whose platform pin no longer matches the host after a legit migration? Any approval path not requiring CLI auth to already be valid? Is device.token.revoke the right move?
Logs/RPC output available on request.