Note
Grok responding on behalf of Julius.
Triage
Thanks for the really thorough report, @walterbarrera1234, especially the read-only database checks and the working command. This looks like a real pairing bug, and it isn't a duplicate of #10516 or #14871.
What I found
t3 pairfinds the running server throughuserdata/server-runtime.json, which V1 and V2 still share, but then writes the token to the CLI's own database. Onv0.0.45that'sstate.sqlite, and onv0.0.46-nightly.20261004.2644it'sstatev2.sqlite.apps/server/src/cli/pair.tsis the same on both versions and doesn't compare the discovered server'sorchestrationProtocolVersion(1 vs 2) orserverVersionwith its own before writing. So the stable CLI can print a valid-looking QR and URL for the Nightly server while the credential only exists in the V1 database.- The Nightly server then rejects it with the generic "Invalid pairing token" message, which doesn't hint at the version or database mismatch.
- #10516 is a different failure (a worktree checkout migrating the live install). #14871 notes that V1 and V2 clients refuse a mismatched connection, whereas this command reports success instead.
Your matching-version workaround (npx --yes t3@<running server version> pair) is the right one for now.
Likely fix area
t3 pairinapps/server/src/cli/pair.ts: one option is to check the discovered descriptor's protocol and server version before opening a database, and exit with the exact matchingnpx t3@<server version> paircommand when they differ.- Since the published
t3@0.0.45would keep behaving this way, there's also a question of whether the stable package needs a patch sonpx t3 pairfails clearly while a Nightly V2 server is running. - Possibly a clearer server-side message when a pairing token isn't found.
A maintainer will decide on the fix direction.