fix(pairing): backport upstream mobile pairing and tailscale endpoint fixes - #70

Merged
enisze merged 5 commits into
mainfrom
fix/upstream-pairing-fixes
Aug 28, 2026
Merged

fix(pairing): backport upstream mobile pairing and tailscale endpoint fixes#70
enisze merged 5 commits into
mainfrom
fix/upstream-pairing-fixes

Conversation

@enisze

Copy link
Copy Markdown
Owner

Our fork is 653 commits behind pingdotgg/t3code (152 ahead). While chasing a phone that couldn't pair with the desktop, I checked what upstream already fixed in this area and found four commits we simply never picked up. This backports them rather than reinventing them — a full 653-commit merge conflicts in 86 files / 300 hunks (including Migrations.ts, the orchestration decider, and ChatView.tsx at 45 hunks alone), so that stays a separate job.

Backported (cherry-picked with -x, original authors preserved)

UpstreamWhat it fixes
pingdotgg#4990fix(mobile): default bare IP pairing to HTTPTyping 192.168.1.21:3773 built an https URL against a plain-HTTP desktop, so the handshake failed and reported an opaque transport error
pingdotgg#7086fix(mobile): stop a directly-saved backend from hiding its T3 Connect environmentA directly-saved backend masked the same machine's T3 Connect entry
pingdotgg#6487fix(mobile): recover the QR pairing scanner when camera access is deniedPermanently-denied camera left the scanner dead with no route to Settings
pingdotgg#7116fix(desktop): keep tailscale spawn defects from breaking advertised endpointsA tailscale spawn defect took down the whole advertised-endpoint list — which matters here, since Tailscale is the answer for pairing from cellular

(Numbers refer to upstream pingdotgg/t3code PRs; each commit keeps its cherry picked from trailer.)

One conflict, in ConnectionsNewRouteScreen.tsx: upstream's hunk also imported useRef for a commit we haven't taken. Resolved by keeping our hook set and taking only Linking, which pingdotgg#6487 actually needs.

Also included: a one-line fixture fix (sidebarV2GroupByProject missing from DesktopClientSettings.test.ts). That test was already failing on main and typecheck already flagged the object as incomplete — unrelated to the backports, but the suite had to be green to verify them.

Verification

  • apps/mobile 556, apps/desktop 406 (was 405 + 1 pre-existing failure), packages/tailscale 14, packages/shared 323 — all pass.
  • Lint and format clean across the touched paths; desktop typecheck reports no errors.
  • Two pre-existing mobile typecheck errors remain in Stack.tsx and archivedThreadList.test.ts. Both files are untouched by this branch — confirmed against the diff — so they predate it and are out of scope here.
  • arm64 DMG built from this branch.

Relationship to the open PRs

#68 independently reimplemented upstream pingdotgg#4990's scheme fix before I knew upstream had it. Upstream's version is canonical, so #68 should be trimmed to just its transport-error hint (which upstream lacks) and #69 rebased on top.

What this does not fix

Not the original report. The desktop serves http://192.168.1.21:3773 correctly, the firewall is off, Android cleartext HTTP is already enabled by withAndroidCleartextTraffic.cjs, iOS declares NSLocalNetworkUsageDescription — and with the correct address entered, no connection from the phone reaches this machine. That points at the network path between phone and Mac, not at app code.

🤖 Generated with Claude Code

Lucenx9and others added 5 commits August 28, 2026 19:42
`sidebarV2GroupByProject` landed in ClientSettings without reaching this
fixture, so the suite failed on main and typecheck flagged the object as
incomplete. Unrelated to the cherry-picks above, but it has to be green to
verify them.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@enisze@Lucenx9@Rishet11@hey-jj
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(pairing): backport upstream mobile pairing and tailscale endpoint fixes - #70

Merged
enisze merged 5 commits into
mainfrom
fix/upstream-pairing-fixes
Aug 28, 2026
Merged

fix(pairing): backport upstream mobile pairing and tailscale endpoint fixes#70
enisze merged 5 commits into
mainfrom
fix/upstream-pairing-fixes

Conversation

@enisze

Copy link
Copy Markdown
Owner

Our fork is 653 commits behind pingdotgg/t3code (152 ahead). While chasing a phone that couldn't pair with the desktop, I checked what upstream already fixed in this area and found four commits we simply never picked up. This backports them rather than reinventing them — a full 653-commit merge conflicts in 86 files / 300 hunks (including Migrations.ts, the orchestration decider, and ChatView.tsx at 45 hunks alone), so that stays a separate job.

Backported (cherry-picked with -x, original authors preserved)

UpstreamWhat it fixes
pingdotgg#4990fix(mobile): default bare IP pairing to HTTPTyping 192.168.1.21:3773 built an https URL against a plain-HTTP desktop, so the handshake failed and reported an opaque transport error
pingdotgg#7086fix(mobile): stop a directly-saved backend from hiding its T3 Connect environmentA directly-saved backend masked the same machine's T3 Connect entry
pingdotgg#6487fix(mobile): recover the QR pairing scanner when camera access is deniedPermanently-denied camera left the scanner dead with no route to Settings
pingdotgg#7116fix(desktop): keep tailscale spawn defects from breaking advertised endpointsA tailscale spawn defect took down the whole advertised-endpoint list — which matters here, since Tailscale is the answer for pairing from cellular

(Numbers refer to upstream pingdotgg/t3code PRs; each commit keeps its cherry picked from trailer.)

One conflict, in ConnectionsNewRouteScreen.tsx: upstream's hunk also imported useRef for a commit we haven't taken. Resolved by keeping our hook set and taking only Linking, which pingdotgg#6487 actually needs.

Also included: a one-line fixture fix (sidebarV2GroupByProject missing from DesktopClientSettings.test.ts). That test was already failing on main and typecheck already flagged the object as incomplete — unrelated to the backports, but the suite had to be green to verify them.

Verification

  • apps/mobile 556, apps/desktop 406 (was 405 + 1 pre-existing failure), packages/tailscale 14, packages/shared 323 — all pass.
  • Lint and format clean across the touched paths; desktop typecheck reports no errors.
  • Two pre-existing mobile typecheck errors remain in Stack.tsx and archivedThreadList.test.ts. Both files are untouched by this branch — confirmed against the diff — so they predate it and are out of scope here.
  • arm64 DMG built from this branch.

Relationship to the open PRs

#68 independently reimplemented upstream pingdotgg#4990's scheme fix before I knew upstream had it. Upstream's version is canonical, so #68 should be trimmed to just its transport-error hint (which upstream lacks) and #69 rebased on top.

What this does not fix

Not the original report. The desktop serves http://192.168.1.21:3773 correctly, the firewall is off, Android cleartext HTTP is already enabled by withAndroidCleartextTraffic.cjs, iOS declares NSLocalNetworkUsageDescription — and with the correct address entered, no connection from the phone reaches this machine. That points at the network path between phone and Mac, not at app code.

🤖 Generated with Claude Code

Lucenx9and others added 5 commits August 28, 2026 19:42
`sidebarV2GroupByProject` landed in ClientSettings without reaching this
fixture, so the suite failed on main and typecheck flagged the object as
incomplete. Unrelated to the cherry-picks above, but it has to be green to
verify them.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@enisze@Lucenx9@Rishet11@hey-jj
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(pairing): backport upstream mobile pairing and tailscale endpoint fixes - #70

Merged
enisze merged 5 commits into
mainfrom
fix/upstream-pairing-fixes
Aug 28, 2026
Merged

fix(pairing): backport upstream mobile pairing and tailscale endpoint fixes#70
enisze merged 5 commits into
mainfrom
fix/upstream-pairing-fixes

Conversation

@enisze

Copy link
Copy Markdown
Owner

Our fork is 653 commits behind pingdotgg/t3code (152 ahead). While chasing a phone that couldn't pair with the desktop, I checked what upstream already fixed in this area and found four commits we simply never picked up. This backports them rather than reinventing them — a full 653-commit merge conflicts in 86 files / 300 hunks (including Migrations.ts, the orchestration decider, and ChatView.tsx at 45 hunks alone), so that stays a separate job.

Backported (cherry-picked with -x, original authors preserved)

UpstreamWhat it fixes
pingdotgg#4990fix(mobile): default bare IP pairing to HTTPTyping 192.168.1.21:3773 built an https URL against a plain-HTTP desktop, so the handshake failed and reported an opaque transport error
pingdotgg#7086fix(mobile): stop a directly-saved backend from hiding its T3 Connect environmentA directly-saved backend masked the same machine's T3 Connect entry
pingdotgg#6487fix(mobile): recover the QR pairing scanner when camera access is deniedPermanently-denied camera left the scanner dead with no route to Settings
pingdotgg#7116fix(desktop): keep tailscale spawn defects from breaking advertised endpointsA tailscale spawn defect took down the whole advertised-endpoint list — which matters here, since Tailscale is the answer for pairing from cellular

(Numbers refer to upstream pingdotgg/t3code PRs; each commit keeps its cherry picked from trailer.)

One conflict, in ConnectionsNewRouteScreen.tsx: upstream's hunk also imported useRef for a commit we haven't taken. Resolved by keeping our hook set and taking only Linking, which pingdotgg#6487 actually needs.

Also included: a one-line fixture fix (sidebarV2GroupByProject missing from DesktopClientSettings.test.ts). That test was already failing on main and typecheck already flagged the object as incomplete — unrelated to the backports, but the suite had to be green to verify them.

Verification

  • apps/mobile 556, apps/desktop 406 (was 405 + 1 pre-existing failure), packages/tailscale 14, packages/shared 323 — all pass.
  • Lint and format clean across the touched paths; desktop typecheck reports no errors.
  • Two pre-existing mobile typecheck errors remain in Stack.tsx and archivedThreadList.test.ts. Both files are untouched by this branch — confirmed against the diff — so they predate it and are out of scope here.
  • arm64 DMG built from this branch.

Relationship to the open PRs

#68 independently reimplemented upstream pingdotgg#4990's scheme fix before I knew upstream had it. Upstream's version is canonical, so #68 should be trimmed to just its transport-error hint (which upstream lacks) and #69 rebased on top.

What this does not fix

Not the original report. The desktop serves http://192.168.1.21:3773 correctly, the firewall is off, Android cleartext HTTP is already enabled by withAndroidCleartextTraffic.cjs, iOS declares NSLocalNetworkUsageDescription — and with the correct address entered, no connection from the phone reaches this machine. That points at the network path between phone and Mac, not at app code.

🤖 Generated with Claude Code

Lucenx9and others added 5 commits August 28, 2026 19:42
`sidebarV2GroupByProject` landed in ClientSettings without reaching this
fixture, so the suite failed on main and typecheck flagged the object as
incomplete. Unrelated to the cherry-picks above, but it has to be green to
verify them.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@enisze@Lucenx9@Rishet11@hey-jj
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(pairing): backport upstream mobile pairing and tailscale endpoint fixes - #70

Merged
enisze merged 5 commits into
mainfrom
fix/upstream-pairing-fixes
Aug 28, 2026
Merged

fix(pairing): backport upstream mobile pairing and tailscale endpoint fixes#70
enisze merged 5 commits into
mainfrom
fix/upstream-pairing-fixes

Conversation

@enisze

Copy link
Copy Markdown
Owner

Our fork is 653 commits behind pingdotgg/t3code (152 ahead). While chasing a phone that couldn't pair with the desktop, I checked what upstream already fixed in this area and found four commits we simply never picked up. This backports them rather than reinventing them — a full 653-commit merge conflicts in 86 files / 300 hunks (including Migrations.ts, the orchestration decider, and ChatView.tsx at 45 hunks alone), so that stays a separate job.

Backported (cherry-picked with -x, original authors preserved)

UpstreamWhat it fixes
pingdotgg#4990fix(mobile): default bare IP pairing to HTTPTyping 192.168.1.21:3773 built an https URL against a plain-HTTP desktop, so the handshake failed and reported an opaque transport error
pingdotgg#7086fix(mobile): stop a directly-saved backend from hiding its T3 Connect environmentA directly-saved backend masked the same machine's T3 Connect entry
pingdotgg#6487fix(mobile): recover the QR pairing scanner when camera access is deniedPermanently-denied camera left the scanner dead with no route to Settings
pingdotgg#7116fix(desktop): keep tailscale spawn defects from breaking advertised endpointsA tailscale spawn defect took down the whole advertised-endpoint list — which matters here, since Tailscale is the answer for pairing from cellular

(Numbers refer to upstream pingdotgg/t3code PRs; each commit keeps its cherry picked from trailer.)

One conflict, in ConnectionsNewRouteScreen.tsx: upstream's hunk also imported useRef for a commit we haven't taken. Resolved by keeping our hook set and taking only Linking, which pingdotgg#6487 actually needs.

Also included: a one-line fixture fix (sidebarV2GroupByProject missing from DesktopClientSettings.test.ts). That test was already failing on main and typecheck already flagged the object as incomplete — unrelated to the backports, but the suite had to be green to verify them.

Verification

  • apps/mobile 556, apps/desktop 406 (was 405 + 1 pre-existing failure), packages/tailscale 14, packages/shared 323 — all pass.
  • Lint and format clean across the touched paths; desktop typecheck reports no errors.
  • Two pre-existing mobile typecheck errors remain in Stack.tsx and archivedThreadList.test.ts. Both files are untouched by this branch — confirmed against the diff — so they predate it and are out of scope here.
  • arm64 DMG built from this branch.

Relationship to the open PRs

#68 independently reimplemented upstream pingdotgg#4990's scheme fix before I knew upstream had it. Upstream's version is canonical, so #68 should be trimmed to just its transport-error hint (which upstream lacks) and #69 rebased on top.

What this does not fix

Not the original report. The desktop serves http://192.168.1.21:3773 correctly, the firewall is off, Android cleartext HTTP is already enabled by withAndroidCleartextTraffic.cjs, iOS declares NSLocalNetworkUsageDescription — and with the correct address entered, no connection from the phone reaches this machine. That points at the network path between phone and Mac, not at app code.

🤖 Generated with Claude Code

Lucenx9and others added 5 commits August 28, 2026 19:42
`sidebarV2GroupByProject` landed in ClientSettings without reaching this
fixture, so the suite failed on main and typecheck flagged the object as
incomplete. Unrelated to the cherry-picks above, but it has to be green to
verify them.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@enisze@Lucenx9@Rishet11@hey-jj
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(pairing): backport upstream mobile pairing and tailscale endpoint fixes - #70

Merged
enisze merged 5 commits into
mainfrom
fix/upstream-pairing-fixes
Aug 28, 2026
Merged

fix(pairing): backport upstream mobile pairing and tailscale endpoint fixes#70
enisze merged 5 commits into
mainfrom
fix/upstream-pairing-fixes

Conversation

@enisze

Copy link
Copy Markdown
Owner

Our fork is 653 commits behind pingdotgg/t3code (152 ahead). While chasing a phone that couldn't pair with the desktop, I checked what upstream already fixed in this area and found four commits we simply never picked up. This backports them rather than reinventing them — a full 653-commit merge conflicts in 86 files / 300 hunks (including Migrations.ts, the orchestration decider, and ChatView.tsx at 45 hunks alone), so that stays a separate job.

Backported (cherry-picked with -x, original authors preserved)

UpstreamWhat it fixes
pingdotgg#4990fix(mobile): default bare IP pairing to HTTPTyping 192.168.1.21:3773 built an https URL against a plain-HTTP desktop, so the handshake failed and reported an opaque transport error
pingdotgg#7086fix(mobile): stop a directly-saved backend from hiding its T3 Connect environmentA directly-saved backend masked the same machine's T3 Connect entry
pingdotgg#6487fix(mobile): recover the QR pairing scanner when camera access is deniedPermanently-denied camera left the scanner dead with no route to Settings
pingdotgg#7116fix(desktop): keep tailscale spawn defects from breaking advertised endpointsA tailscale spawn defect took down the whole advertised-endpoint list — which matters here, since Tailscale is the answer for pairing from cellular

(Numbers refer to upstream pingdotgg/t3code PRs; each commit keeps its cherry picked from trailer.)

One conflict, in ConnectionsNewRouteScreen.tsx: upstream's hunk also imported useRef for a commit we haven't taken. Resolved by keeping our hook set and taking only Linking, which pingdotgg#6487 actually needs.

Also included: a one-line fixture fix (sidebarV2GroupByProject missing from DesktopClientSettings.test.ts). That test was already failing on main and typecheck already flagged the object as incomplete — unrelated to the backports, but the suite had to be green to verify them.

Verification

  • apps/mobile 556, apps/desktop 406 (was 405 + 1 pre-existing failure), packages/tailscale 14, packages/shared 323 — all pass.
  • Lint and format clean across the touched paths; desktop typecheck reports no errors.
  • Two pre-existing mobile typecheck errors remain in Stack.tsx and archivedThreadList.test.ts. Both files are untouched by this branch — confirmed against the diff — so they predate it and are out of scope here.
  • arm64 DMG built from this branch.

Relationship to the open PRs

#68 independently reimplemented upstream pingdotgg#4990's scheme fix before I knew upstream had it. Upstream's version is canonical, so #68 should be trimmed to just its transport-error hint (which upstream lacks) and #69 rebased on top.

What this does not fix

Not the original report. The desktop serves http://192.168.1.21:3773 correctly, the firewall is off, Android cleartext HTTP is already enabled by withAndroidCleartextTraffic.cjs, iOS declares NSLocalNetworkUsageDescription — and with the correct address entered, no connection from the phone reaches this machine. That points at the network path between phone and Mac, not at app code.

🤖 Generated with Claude Code

Lucenx9and others added 5 commits August 28, 2026 19:42
`sidebarV2GroupByProject` landed in ClientSettings without reaching this
fixture, so the suite failed on main and typecheck flagged the object as
incomplete. Unrelated to the cherry-picks above, but it has to be green to
verify them.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@enisze@Lucenx9@Rishet11@hey-jj
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(pairing): backport upstream mobile pairing and tailscale endpoint fixes - #70

Merged
enisze merged 5 commits into
mainfrom
fix/upstream-pairing-fixes
Aug 28, 2026
Merged

fix(pairing): backport upstream mobile pairing and tailscale endpoint fixes#70
enisze merged 5 commits into
mainfrom
fix/upstream-pairing-fixes

Conversation

@enisze

Copy link
Copy Markdown
Owner

Our fork is 653 commits behind pingdotgg/t3code (152 ahead). While chasing a phone that couldn't pair with the desktop, I checked what upstream already fixed in this area and found four commits we simply never picked up. This backports them rather than reinventing them — a full 653-commit merge conflicts in 86 files / 300 hunks (including Migrations.ts, the orchestration decider, and ChatView.tsx at 45 hunks alone), so that stays a separate job.

Backported (cherry-picked with -x, original authors preserved)

UpstreamWhat it fixes
pingdotgg#4990fix(mobile): default bare IP pairing to HTTPTyping 192.168.1.21:3773 built an https URL against a plain-HTTP desktop, so the handshake failed and reported an opaque transport error
pingdotgg#7086fix(mobile): stop a directly-saved backend from hiding its T3 Connect environmentA directly-saved backend masked the same machine's T3 Connect entry
pingdotgg#6487fix(mobile): recover the QR pairing scanner when camera access is deniedPermanently-denied camera left the scanner dead with no route to Settings
pingdotgg#7116fix(desktop): keep tailscale spawn defects from breaking advertised endpointsA tailscale spawn defect took down the whole advertised-endpoint list — which matters here, since Tailscale is the answer for pairing from cellular

(Numbers refer to upstream pingdotgg/t3code PRs; each commit keeps its cherry picked from trailer.)

One conflict, in ConnectionsNewRouteScreen.tsx: upstream's hunk also imported useRef for a commit we haven't taken. Resolved by keeping our hook set and taking only Linking, which pingdotgg#6487 actually needs.

Also included: a one-line fixture fix (sidebarV2GroupByProject missing from DesktopClientSettings.test.ts). That test was already failing on main and typecheck already flagged the object as incomplete — unrelated to the backports, but the suite had to be green to verify them.

Verification

  • apps/mobile 556, apps/desktop 406 (was 405 + 1 pre-existing failure), packages/tailscale 14, packages/shared 323 — all pass.
  • Lint and format clean across the touched paths; desktop typecheck reports no errors.
  • Two pre-existing mobile typecheck errors remain in Stack.tsx and archivedThreadList.test.ts. Both files are untouched by this branch — confirmed against the diff — so they predate it and are out of scope here.
  • arm64 DMG built from this branch.

Relationship to the open PRs

#68 independently reimplemented upstream pingdotgg#4990's scheme fix before I knew upstream had it. Upstream's version is canonical, so #68 should be trimmed to just its transport-error hint (which upstream lacks) and #69 rebased on top.

What this does not fix

Not the original report. The desktop serves http://192.168.1.21:3773 correctly, the firewall is off, Android cleartext HTTP is already enabled by withAndroidCleartextTraffic.cjs, iOS declares NSLocalNetworkUsageDescription — and with the correct address entered, no connection from the phone reaches this machine. That points at the network path between phone and Mac, not at app code.

🤖 Generated with Claude Code

Lucenx9and others added 5 commits August 28, 2026 19:42
`sidebarV2GroupByProject` landed in ClientSettings without reaching this
fixture, so the suite failed on main and typecheck flagged the object as
incomplete. Unrelated to the cherry-picks above, but it has to be green to
verify them.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@enisze@Lucenx9@Rishet11@hey-jj
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(pairing): backport upstream mobile pairing and tailscale endpoint fixes - #70

Merged
enisze merged 5 commits into
mainfrom
fix/upstream-pairing-fixes
Aug 28, 2026
Merged

fix(pairing): backport upstream mobile pairing and tailscale endpoint fixes#70
enisze merged 5 commits into
mainfrom
fix/upstream-pairing-fixes

Conversation

@enisze

Copy link
Copy Markdown
Owner

Our fork is 653 commits behind pingdotgg/t3code (152 ahead). While chasing a phone that couldn't pair with the desktop, I checked what upstream already fixed in this area and found four commits we simply never picked up. This backports them rather than reinventing them — a full 653-commit merge conflicts in 86 files / 300 hunks (including Migrations.ts, the orchestration decider, and ChatView.tsx at 45 hunks alone), so that stays a separate job.

Backported (cherry-picked with -x, original authors preserved)

UpstreamWhat it fixes
pingdotgg#4990fix(mobile): default bare IP pairing to HTTPTyping 192.168.1.21:3773 built an https URL against a plain-HTTP desktop, so the handshake failed and reported an opaque transport error
pingdotgg#7086fix(mobile): stop a directly-saved backend from hiding its T3 Connect environmentA directly-saved backend masked the same machine's T3 Connect entry
pingdotgg#6487fix(mobile): recover the QR pairing scanner when camera access is deniedPermanently-denied camera left the scanner dead with no route to Settings
pingdotgg#7116fix(desktop): keep tailscale spawn defects from breaking advertised endpointsA tailscale spawn defect took down the whole advertised-endpoint list — which matters here, since Tailscale is the answer for pairing from cellular

(Numbers refer to upstream pingdotgg/t3code PRs; each commit keeps its cherry picked from trailer.)

One conflict, in ConnectionsNewRouteScreen.tsx: upstream's hunk also imported useRef for a commit we haven't taken. Resolved by keeping our hook set and taking only Linking, which pingdotgg#6487 actually needs.

Also included: a one-line fixture fix (sidebarV2GroupByProject missing from DesktopClientSettings.test.ts). That test was already failing on main and typecheck already flagged the object as incomplete — unrelated to the backports, but the suite had to be green to verify them.

Verification

  • apps/mobile 556, apps/desktop 406 (was 405 + 1 pre-existing failure), packages/tailscale 14, packages/shared 323 — all pass.
  • Lint and format clean across the touched paths; desktop typecheck reports no errors.
  • Two pre-existing mobile typecheck errors remain in Stack.tsx and archivedThreadList.test.ts. Both files are untouched by this branch — confirmed against the diff — so they predate it and are out of scope here.
  • arm64 DMG built from this branch.

Relationship to the open PRs

#68 independently reimplemented upstream pingdotgg#4990's scheme fix before I knew upstream had it. Upstream's version is canonical, so #68 should be trimmed to just its transport-error hint (which upstream lacks) and #69 rebased on top.

What this does not fix

Not the original report. The desktop serves http://192.168.1.21:3773 correctly, the firewall is off, Android cleartext HTTP is already enabled by withAndroidCleartextTraffic.cjs, iOS declares NSLocalNetworkUsageDescription — and with the correct address entered, no connection from the phone reaches this machine. That points at the network path between phone and Mac, not at app code.

🤖 Generated with Claude Code

Lucenx9and others added 5 commits August 28, 2026 19:42
`sidebarV2GroupByProject` landed in ClientSettings without reaching this
fixture, so the suite failed on main and typecheck flagged the object as
incomplete. Unrelated to the cherry-picks above, but it has to be green to
verify them.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@enisze@Lucenx9@Rishet11@hey-jj
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(pairing): backport upstream mobile pairing and tailscale endpoint fixes - #70

Merged
enisze merged 5 commits into
mainfrom
fix/upstream-pairing-fixes
Aug 28, 2026
Merged

fix(pairing): backport upstream mobile pairing and tailscale endpoint fixes#70
enisze merged 5 commits into
mainfrom
fix/upstream-pairing-fixes

Conversation

@enisze

Copy link
Copy Markdown
Owner

Our fork is 653 commits behind pingdotgg/t3code (152 ahead). While chasing a phone that couldn't pair with the desktop, I checked what upstream already fixed in this area and found four commits we simply never picked up. This backports them rather than reinventing them — a full 653-commit merge conflicts in 86 files / 300 hunks (including Migrations.ts, the orchestration decider, and ChatView.tsx at 45 hunks alone), so that stays a separate job.

Backported (cherry-picked with -x, original authors preserved)

UpstreamWhat it fixes
pingdotgg#4990fix(mobile): default bare IP pairing to HTTPTyping 192.168.1.21:3773 built an https URL against a plain-HTTP desktop, so the handshake failed and reported an opaque transport error
pingdotgg#7086fix(mobile): stop a directly-saved backend from hiding its T3 Connect environmentA directly-saved backend masked the same machine's T3 Connect entry
pingdotgg#6487fix(mobile): recover the QR pairing scanner when camera access is deniedPermanently-denied camera left the scanner dead with no route to Settings
pingdotgg#7116fix(desktop): keep tailscale spawn defects from breaking advertised endpointsA tailscale spawn defect took down the whole advertised-endpoint list — which matters here, since Tailscale is the answer for pairing from cellular

(Numbers refer to upstream pingdotgg/t3code PRs; each commit keeps its cherry picked from trailer.)

One conflict, in ConnectionsNewRouteScreen.tsx: upstream's hunk also imported useRef for a commit we haven't taken. Resolved by keeping our hook set and taking only Linking, which pingdotgg#6487 actually needs.

Also included: a one-line fixture fix (sidebarV2GroupByProject missing from DesktopClientSettings.test.ts). That test was already failing on main and typecheck already flagged the object as incomplete — unrelated to the backports, but the suite had to be green to verify them.

Verification

  • apps/mobile 556, apps/desktop 406 (was 405 + 1 pre-existing failure), packages/tailscale 14, packages/shared 323 — all pass.
  • Lint and format clean across the touched paths; desktop typecheck reports no errors.
  • Two pre-existing mobile typecheck errors remain in Stack.tsx and archivedThreadList.test.ts. Both files are untouched by this branch — confirmed against the diff — so they predate it and are out of scope here.
  • arm64 DMG built from this branch.

Relationship to the open PRs

#68 independently reimplemented upstream pingdotgg#4990's scheme fix before I knew upstream had it. Upstream's version is canonical, so #68 should be trimmed to just its transport-error hint (which upstream lacks) and #69 rebased on top.

What this does not fix

Not the original report. The desktop serves http://192.168.1.21:3773 correctly, the firewall is off, Android cleartext HTTP is already enabled by withAndroidCleartextTraffic.cjs, iOS declares NSLocalNetworkUsageDescription — and with the correct address entered, no connection from the phone reaches this machine. That points at the network path between phone and Mac, not at app code.

🤖 Generated with Claude Code

Lucenx9and others added 5 commits August 28, 2026 19:42
`sidebarV2GroupByProject` landed in ClientSettings without reaching this
fixture, so the suite failed on main and typecheck flagged the object as
incomplete. Unrelated to the cherry-picks above, but it has to be green to
verify them.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@enisze@Lucenx9@Rishet11@hey-jj