Yes — with those facts, this looks like the known bad state / likely bug class: the device is stable, but the cached operator device token remains narrowed to operator.pairing, so every fresh CLI process reconnects with that narrow cached scope and triggers another upgrade.
One important nuance: openclaw devices approve ... updates the Gateway’s paired-device record. It does not directly edit ~/.openclaw/identity/device-auth.json; that file is only refreshed after a successful client connect receives a new hello-ok device token.
First, confirm whether approval is actually broadening the Gateway-side token:
TOKEN="$(openclaw config get gateway.auth.token)"
REQ=<current_request_id>
openclaw devices approve "$REQ" \
--url ws://127.0.0.1:18789 \
--token "$TOKEN" \
--json | jq '{approvedScopes: .device.approvedScopes, tokenScopes: .device.tokens.operator.scopes}'
If tokenScopes is still only operator.pairing, then the approve path is not persisting the requested scopes — that’s a bug/regression. Please file it with that JSON output: https://github.com/openclaw/openclaw/issues