fix(git): resolve PR badges for untracked prNNNN checkouts by number - #376

Open
omegent-app[bot] wants to merge 1 commit into
fork/devfrom
fix/pr-badge-numeric-branch-fallback
Open

fix(git): resolve PR badges for untracked prNNNN checkouts by number#376
omegent-app[bot] wants to merge 1 commit into
fork/devfrom
fix/pr-badge-numeric-branch-fallback

Conversation

@omegent-app

Copy link
Copy Markdown

Closes the last gap in the PR-badge chain: threads whose agents check out a PR with
git fetch origin <head-branch>:prNNNN — a renamed local branch, no upstream tracking.

The problem

The badge lookup finds a thread's PR by head selector: the local branch name, or the head branch
its tracking points to. A pr2182-style checkout has neither — the local name matches no PR's head,
and there is no tracking to derive the real one from. The thread reviewing PR pingdotgg#2182 was the live
case: gh pr list --head pr2182 correctly returns nothing, so the row showed no badge for the very
PR it existed to review. It only lit up after hand-setting branch.pr2182.merge on the worktree.

The fix

In findLatestPrForHeadContext, when the selector search finds nothing and the branch has no
tracking-derived head (headBranch === localBranch) and the name matches ^pr[-_]?\d+$, resolve
the PR by that number via the provider's existing getChangeRequest (gh pr view N /
glab mr show N — provider-neutral). A failed by-number lookup degrades to "no PR", exactly as
before.

The tracking gate matters: a tracked branch that happens to be named pr123 keeps the precise
selector path, so the number can never override a real head selector — covered by the negative test.

Tests

  • status resolves the PR by number for an untracked prNNNN checkout — fails on the pre-fix
    implementation (verified by stashing the fix), passes after; also asserts the pr view 2182 call
    actually happened.
  • status does not resolve by number once a prNNNN branch gains tracking — asserts pr view is
    never called and the row stays badge-less when the tracked head genuinely has no PR.
  • Full GitManager.test.ts: 84 pass. Typecheck clean.

Retroactive by design: existing worktrees need no touch-up — the fallback keys off state the server
reads on every sweep.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

The review-a-PR habit fetches a PR head into a renamed local branch —
`git fetch origin <head-branch>:pr2182` — leaving no upstream tracking. Every
head selector the PR lookup can derive then names a branch that no PR has for
its head, so the thread stays badge-less for the PR it exists to review.
When the selector search finds nothing, the branch has no tracking-derived
head, and its name matches ^pr[-_]?\d+$, resolve the PR by that number via the
provider's getChangeRequest. Gated on headBranch === localBranch so a tracked
branch that merely resembles the pattern keeps the precise selector path; a
lookup failure falls back to "no PR" as before.
Verified against the live case: the "Adversarial Review of PR 2182" thread's
worktree, whose badge only appeared after hand-setting branch tracking — this
makes that repair unnecessary for every past and future such checkout.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBotforce-pushed the fix/pr-badge-numeric-branch-fallback branch from a4b5377 to 740b1edCompareAugust 8, 2026 14:10
@patroza

Copy link
Copy Markdown
Owner

@omegent I would first question why agents setup branches like these without tracking, and see if we can address that

@omegent-app

Copy link
Copy Markdown
Author

I’ve patched the status fallback to try to reattach the branch to the real PR head branch once the PR number is known. Next I’m adding a regression test that proves the branch stops being “untracked by design” after the first successful lookup.

gpt-5.4 · ↑52k ↓1.8k

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.

1 participant

@patroza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} 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(git): resolve PR badges for untracked prNNNN checkouts by number - #376

Open
omegent-app[bot] wants to merge 1 commit into
fork/devfrom
fix/pr-badge-numeric-branch-fallback
Open

fix(git): resolve PR badges for untracked prNNNN checkouts by number#376
omegent-app[bot] wants to merge 1 commit into
fork/devfrom
fix/pr-badge-numeric-branch-fallback

Conversation

@omegent-app

Copy link
Copy Markdown

Closes the last gap in the PR-badge chain: threads whose agents check out a PR with
git fetch origin <head-branch>:prNNNN — a renamed local branch, no upstream tracking.

The problem

The badge lookup finds a thread's PR by head selector: the local branch name, or the head branch
its tracking points to. A pr2182-style checkout has neither — the local name matches no PR's head,
and there is no tracking to derive the real one from. The thread reviewing PR pingdotgg#2182 was the live
case: gh pr list --head pr2182 correctly returns nothing, so the row showed no badge for the very
PR it existed to review. It only lit up after hand-setting branch.pr2182.merge on the worktree.

The fix

In findLatestPrForHeadContext, when the selector search finds nothing and the branch has no
tracking-derived head (headBranch === localBranch) and the name matches ^pr[-_]?\d+$, resolve
the PR by that number via the provider's existing getChangeRequest (gh pr view N /
glab mr show N — provider-neutral). A failed by-number lookup degrades to "no PR", exactly as
before.

The tracking gate matters: a tracked branch that happens to be named pr123 keeps the precise
selector path, so the number can never override a real head selector — covered by the negative test.

Tests

  • status resolves the PR by number for an untracked prNNNN checkout — fails on the pre-fix
    implementation (verified by stashing the fix), passes after; also asserts the pr view 2182 call
    actually happened.
  • status does not resolve by number once a prNNNN branch gains tracking — asserts pr view is
    never called and the row stays badge-less when the tracked head genuinely has no PR.
  • Full GitManager.test.ts: 84 pass. Typecheck clean.

Retroactive by design: existing worktrees need no touch-up — the fallback keys off state the server
reads on every sweep.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

The review-a-PR habit fetches a PR head into a renamed local branch —
`git fetch origin <head-branch>:pr2182` — leaving no upstream tracking. Every
head selector the PR lookup can derive then names a branch that no PR has for
its head, so the thread stays badge-less for the PR it exists to review.
When the selector search finds nothing, the branch has no tracking-derived
head, and its name matches ^pr[-_]?\d+$, resolve the PR by that number via the
provider's getChangeRequest. Gated on headBranch === localBranch so a tracked
branch that merely resembles the pattern keeps the precise selector path; a
lookup failure falls back to "no PR" as before.
Verified against the live case: the "Adversarial Review of PR 2182" thread's
worktree, whose badge only appeared after hand-setting branch tracking — this
makes that repair unnecessary for every past and future such checkout.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBotforce-pushed the fix/pr-badge-numeric-branch-fallback branch from a4b5377 to 740b1edCompareAugust 8, 2026 14:10
@patroza

Copy link
Copy Markdown
Owner

@omegent I would first question why agents setup branches like these without tracking, and see if we can address that

@omegent-app

Copy link
Copy Markdown
Author

I’ve patched the status fallback to try to reattach the branch to the real PR head branch once the PR number is known. Next I’m adding a regression test that proves the branch stops being “untracked by design” after the first successful lookup.

gpt-5.4 · ↑52k ↓1.8k

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.

1 participant

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

fix(git): resolve PR badges for untracked prNNNN checkouts by number - #376

Open
omegent-app[bot] wants to merge 1 commit into
fork/devfrom
fix/pr-badge-numeric-branch-fallback
Open

fix(git): resolve PR badges for untracked prNNNN checkouts by number#376
omegent-app[bot] wants to merge 1 commit into
fork/devfrom
fix/pr-badge-numeric-branch-fallback

Conversation

@omegent-app

Copy link
Copy Markdown

Closes the last gap in the PR-badge chain: threads whose agents check out a PR with
git fetch origin <head-branch>:prNNNN — a renamed local branch, no upstream tracking.

The problem

The badge lookup finds a thread's PR by head selector: the local branch name, or the head branch
its tracking points to. A pr2182-style checkout has neither — the local name matches no PR's head,
and there is no tracking to derive the real one from. The thread reviewing PR pingdotgg#2182 was the live
case: gh pr list --head pr2182 correctly returns nothing, so the row showed no badge for the very
PR it existed to review. It only lit up after hand-setting branch.pr2182.merge on the worktree.

The fix

In findLatestPrForHeadContext, when the selector search finds nothing and the branch has no
tracking-derived head (headBranch === localBranch) and the name matches ^pr[-_]?\d+$, resolve
the PR by that number via the provider's existing getChangeRequest (gh pr view N /
glab mr show N — provider-neutral). A failed by-number lookup degrades to "no PR", exactly as
before.

The tracking gate matters: a tracked branch that happens to be named pr123 keeps the precise
selector path, so the number can never override a real head selector — covered by the negative test.

Tests

  • status resolves the PR by number for an untracked prNNNN checkout — fails on the pre-fix
    implementation (verified by stashing the fix), passes after; also asserts the pr view 2182 call
    actually happened.
  • status does not resolve by number once a prNNNN branch gains tracking — asserts pr view is
    never called and the row stays badge-less when the tracked head genuinely has no PR.
  • Full GitManager.test.ts: 84 pass. Typecheck clean.

Retroactive by design: existing worktrees need no touch-up — the fallback keys off state the server
reads on every sweep.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

The review-a-PR habit fetches a PR head into a renamed local branch —
`git fetch origin <head-branch>:pr2182` — leaving no upstream tracking. Every
head selector the PR lookup can derive then names a branch that no PR has for
its head, so the thread stays badge-less for the PR it exists to review.
When the selector search finds nothing, the branch has no tracking-derived
head, and its name matches ^pr[-_]?\d+$, resolve the PR by that number via the
provider's getChangeRequest. Gated on headBranch === localBranch so a tracked
branch that merely resembles the pattern keeps the precise selector path; a
lookup failure falls back to "no PR" as before.
Verified against the live case: the "Adversarial Review of PR 2182" thread's
worktree, whose badge only appeared after hand-setting branch tracking — this
makes that repair unnecessary for every past and future such checkout.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBotforce-pushed the fix/pr-badge-numeric-branch-fallback branch from a4b5377 to 740b1edCompareAugust 8, 2026 14:10
@patroza

Copy link
Copy Markdown
Owner

@omegent I would first question why agents setup branches like these without tracking, and see if we can address that

@omegent-app

Copy link
Copy Markdown
Author

I’ve patched the status fallback to try to reattach the branch to the real PR head branch once the PR number is known. Next I’m adding a regression test that proves the branch stops being “untracked by design” after the first successful lookup.

gpt-5.4 · ↑52k ↓1.8k

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.

1 participant

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

fix(git): resolve PR badges for untracked prNNNN checkouts by number - #376

Open
omegent-app[bot] wants to merge 1 commit into
fork/devfrom
fix/pr-badge-numeric-branch-fallback
Open

fix(git): resolve PR badges for untracked prNNNN checkouts by number#376
omegent-app[bot] wants to merge 1 commit into
fork/devfrom
fix/pr-badge-numeric-branch-fallback

Conversation

@omegent-app

Copy link
Copy Markdown

Closes the last gap in the PR-badge chain: threads whose agents check out a PR with
git fetch origin <head-branch>:prNNNN — a renamed local branch, no upstream tracking.

The problem

The badge lookup finds a thread's PR by head selector: the local branch name, or the head branch
its tracking points to. A pr2182-style checkout has neither — the local name matches no PR's head,
and there is no tracking to derive the real one from. The thread reviewing PR pingdotgg#2182 was the live
case: gh pr list --head pr2182 correctly returns nothing, so the row showed no badge for the very
PR it existed to review. It only lit up after hand-setting branch.pr2182.merge on the worktree.

The fix

In findLatestPrForHeadContext, when the selector search finds nothing and the branch has no
tracking-derived head (headBranch === localBranch) and the name matches ^pr[-_]?\d+$, resolve
the PR by that number via the provider's existing getChangeRequest (gh pr view N /
glab mr show N — provider-neutral). A failed by-number lookup degrades to "no PR", exactly as
before.

The tracking gate matters: a tracked branch that happens to be named pr123 keeps the precise
selector path, so the number can never override a real head selector — covered by the negative test.

Tests

  • status resolves the PR by number for an untracked prNNNN checkout — fails on the pre-fix
    implementation (verified by stashing the fix), passes after; also asserts the pr view 2182 call
    actually happened.
  • status does not resolve by number once a prNNNN branch gains tracking — asserts pr view is
    never called and the row stays badge-less when the tracked head genuinely has no PR.
  • Full GitManager.test.ts: 84 pass. Typecheck clean.

Retroactive by design: existing worktrees need no touch-up — the fallback keys off state the server
reads on every sweep.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

The review-a-PR habit fetches a PR head into a renamed local branch —
`git fetch origin <head-branch>:pr2182` — leaving no upstream tracking. Every
head selector the PR lookup can derive then names a branch that no PR has for
its head, so the thread stays badge-less for the PR it exists to review.
When the selector search finds nothing, the branch has no tracking-derived
head, and its name matches ^pr[-_]?\d+$, resolve the PR by that number via the
provider's getChangeRequest. Gated on headBranch === localBranch so a tracked
branch that merely resembles the pattern keeps the precise selector path; a
lookup failure falls back to "no PR" as before.
Verified against the live case: the "Adversarial Review of PR 2182" thread's
worktree, whose badge only appeared after hand-setting branch tracking — this
makes that repair unnecessary for every past and future such checkout.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBotforce-pushed the fix/pr-badge-numeric-branch-fallback branch from a4b5377 to 740b1edCompareAugust 8, 2026 14:10
@patroza

Copy link
Copy Markdown
Owner

@omegent I would first question why agents setup branches like these without tracking, and see if we can address that

@omegent-app

Copy link
Copy Markdown
Author

I’ve patched the status fallback to try to reattach the branch to the real PR head branch once the PR number is known. Next I’m adding a regression test that proves the branch stops being “untracked by design” after the first successful lookup.

gpt-5.4 · ↑52k ↓1.8k

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.

1 participant

@patroza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } 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(git): resolve PR badges for untracked prNNNN checkouts by number - #376

Open
omegent-app[bot] wants to merge 1 commit into
fork/devfrom
fix/pr-badge-numeric-branch-fallback
Open

fix(git): resolve PR badges for untracked prNNNN checkouts by number#376
omegent-app[bot] wants to merge 1 commit into
fork/devfrom
fix/pr-badge-numeric-branch-fallback

Conversation

@omegent-app

Copy link
Copy Markdown

Closes the last gap in the PR-badge chain: threads whose agents check out a PR with
git fetch origin <head-branch>:prNNNN — a renamed local branch, no upstream tracking.

The problem

The badge lookup finds a thread's PR by head selector: the local branch name, or the head branch
its tracking points to. A pr2182-style checkout has neither — the local name matches no PR's head,
and there is no tracking to derive the real one from. The thread reviewing PR pingdotgg#2182 was the live
case: gh pr list --head pr2182 correctly returns nothing, so the row showed no badge for the very
PR it existed to review. It only lit up after hand-setting branch.pr2182.merge on the worktree.

The fix

In findLatestPrForHeadContext, when the selector search finds nothing and the branch has no
tracking-derived head (headBranch === localBranch) and the name matches ^pr[-_]?\d+$, resolve
the PR by that number via the provider's existing getChangeRequest (gh pr view N /
glab mr show N — provider-neutral). A failed by-number lookup degrades to "no PR", exactly as
before.

The tracking gate matters: a tracked branch that happens to be named pr123 keeps the precise
selector path, so the number can never override a real head selector — covered by the negative test.

Tests

  • status resolves the PR by number for an untracked prNNNN checkout — fails on the pre-fix
    implementation (verified by stashing the fix), passes after; also asserts the pr view 2182 call
    actually happened.
  • status does not resolve by number once a prNNNN branch gains tracking — asserts pr view is
    never called and the row stays badge-less when the tracked head genuinely has no PR.
  • Full GitManager.test.ts: 84 pass. Typecheck clean.

Retroactive by design: existing worktrees need no touch-up — the fallback keys off state the server
reads on every sweep.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

The review-a-PR habit fetches a PR head into a renamed local branch —
`git fetch origin <head-branch>:pr2182` — leaving no upstream tracking. Every
head selector the PR lookup can derive then names a branch that no PR has for
its head, so the thread stays badge-less for the PR it exists to review.
When the selector search finds nothing, the branch has no tracking-derived
head, and its name matches ^pr[-_]?\d+$, resolve the PR by that number via the
provider's getChangeRequest. Gated on headBranch === localBranch so a tracked
branch that merely resembles the pattern keeps the precise selector path; a
lookup failure falls back to "no PR" as before.
Verified against the live case: the "Adversarial Review of PR 2182" thread's
worktree, whose badge only appeared after hand-setting branch tracking — this
makes that repair unnecessary for every past and future such checkout.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBotforce-pushed the fix/pr-badge-numeric-branch-fallback branch from a4b5377 to 740b1edCompareAugust 8, 2026 14:10
@patroza

Copy link
Copy Markdown
Owner

@omegent I would first question why agents setup branches like these without tracking, and see if we can address that

@omegent-app

Copy link
Copy Markdown
Author

I’ve patched the status fallback to try to reattach the branch to the real PR head branch once the PR number is known. Next I’m adding a regression test that proves the branch stops being “untracked by design” after the first successful lookup.

gpt-5.4 · ↑52k ↓1.8k

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.

1 participant

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

fix(git): resolve PR badges for untracked prNNNN checkouts by number - #376

Open
omegent-app[bot] wants to merge 1 commit into
fork/devfrom
fix/pr-badge-numeric-branch-fallback
Open

fix(git): resolve PR badges for untracked prNNNN checkouts by number#376
omegent-app[bot] wants to merge 1 commit into
fork/devfrom
fix/pr-badge-numeric-branch-fallback

Conversation

@omegent-app

Copy link
Copy Markdown

Closes the last gap in the PR-badge chain: threads whose agents check out a PR with
git fetch origin <head-branch>:prNNNN — a renamed local branch, no upstream tracking.

The problem

The badge lookup finds a thread's PR by head selector: the local branch name, or the head branch
its tracking points to. A pr2182-style checkout has neither — the local name matches no PR's head,
and there is no tracking to derive the real one from. The thread reviewing PR pingdotgg#2182 was the live
case: gh pr list --head pr2182 correctly returns nothing, so the row showed no badge for the very
PR it existed to review. It only lit up after hand-setting branch.pr2182.merge on the worktree.

The fix

In findLatestPrForHeadContext, when the selector search finds nothing and the branch has no
tracking-derived head (headBranch === localBranch) and the name matches ^pr[-_]?\d+$, resolve
the PR by that number via the provider's existing getChangeRequest (gh pr view N /
glab mr show N — provider-neutral). A failed by-number lookup degrades to "no PR", exactly as
before.

The tracking gate matters: a tracked branch that happens to be named pr123 keeps the precise
selector path, so the number can never override a real head selector — covered by the negative test.

Tests

  • status resolves the PR by number for an untracked prNNNN checkout — fails on the pre-fix
    implementation (verified by stashing the fix), passes after; also asserts the pr view 2182 call
    actually happened.
  • status does not resolve by number once a prNNNN branch gains tracking — asserts pr view is
    never called and the row stays badge-less when the tracked head genuinely has no PR.
  • Full GitManager.test.ts: 84 pass. Typecheck clean.

Retroactive by design: existing worktrees need no touch-up — the fallback keys off state the server
reads on every sweep.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

The review-a-PR habit fetches a PR head into a renamed local branch —
`git fetch origin <head-branch>:pr2182` — leaving no upstream tracking. Every
head selector the PR lookup can derive then names a branch that no PR has for
its head, so the thread stays badge-less for the PR it exists to review.
When the selector search finds nothing, the branch has no tracking-derived
head, and its name matches ^pr[-_]?\d+$, resolve the PR by that number via the
provider's getChangeRequest. Gated on headBranch === localBranch so a tracked
branch that merely resembles the pattern keeps the precise selector path; a
lookup failure falls back to "no PR" as before.
Verified against the live case: the "Adversarial Review of PR 2182" thread's
worktree, whose badge only appeared after hand-setting branch tracking — this
makes that repair unnecessary for every past and future such checkout.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBotforce-pushed the fix/pr-badge-numeric-branch-fallback branch from a4b5377 to 740b1edCompareAugust 8, 2026 14:10
@patroza

Copy link
Copy Markdown
Owner

@omegent I would first question why agents setup branches like these without tracking, and see if we can address that

@omegent-app

Copy link
Copy Markdown
Author

I’ve patched the status fallback to try to reattach the branch to the real PR head branch once the PR number is known. Next I’m adding a regression test that proves the branch stops being “untracked by design” after the first successful lookup.

gpt-5.4 · ↑52k ↓1.8k

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.

1 participant

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

fix(git): resolve PR badges for untracked prNNNN checkouts by number - #376

Open
omegent-app[bot] wants to merge 1 commit into
fork/devfrom
fix/pr-badge-numeric-branch-fallback
Open

fix(git): resolve PR badges for untracked prNNNN checkouts by number#376
omegent-app[bot] wants to merge 1 commit into
fork/devfrom
fix/pr-badge-numeric-branch-fallback

Conversation

@omegent-app

Copy link
Copy Markdown

Closes the last gap in the PR-badge chain: threads whose agents check out a PR with
git fetch origin <head-branch>:prNNNN — a renamed local branch, no upstream tracking.

The problem

The badge lookup finds a thread's PR by head selector: the local branch name, or the head branch
its tracking points to. A pr2182-style checkout has neither — the local name matches no PR's head,
and there is no tracking to derive the real one from. The thread reviewing PR pingdotgg#2182 was the live
case: gh pr list --head pr2182 correctly returns nothing, so the row showed no badge for the very
PR it existed to review. It only lit up after hand-setting branch.pr2182.merge on the worktree.

The fix

In findLatestPrForHeadContext, when the selector search finds nothing and the branch has no
tracking-derived head (headBranch === localBranch) and the name matches ^pr[-_]?\d+$, resolve
the PR by that number via the provider's existing getChangeRequest (gh pr view N /
glab mr show N — provider-neutral). A failed by-number lookup degrades to "no PR", exactly as
before.

The tracking gate matters: a tracked branch that happens to be named pr123 keeps the precise
selector path, so the number can never override a real head selector — covered by the negative test.

Tests

  • status resolves the PR by number for an untracked prNNNN checkout — fails on the pre-fix
    implementation (verified by stashing the fix), passes after; also asserts the pr view 2182 call
    actually happened.
  • status does not resolve by number once a prNNNN branch gains tracking — asserts pr view is
    never called and the row stays badge-less when the tracked head genuinely has no PR.
  • Full GitManager.test.ts: 84 pass. Typecheck clean.

Retroactive by design: existing worktrees need no touch-up — the fallback keys off state the server
reads on every sweep.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

The review-a-PR habit fetches a PR head into a renamed local branch —
`git fetch origin <head-branch>:pr2182` — leaving no upstream tracking. Every
head selector the PR lookup can derive then names a branch that no PR has for
its head, so the thread stays badge-less for the PR it exists to review.
When the selector search finds nothing, the branch has no tracking-derived
head, and its name matches ^pr[-_]?\d+$, resolve the PR by that number via the
provider's getChangeRequest. Gated on headBranch === localBranch so a tracked
branch that merely resembles the pattern keeps the precise selector path; a
lookup failure falls back to "no PR" as before.
Verified against the live case: the "Adversarial Review of PR 2182" thread's
worktree, whose badge only appeared after hand-setting branch tracking — this
makes that repair unnecessary for every past and future such checkout.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBotforce-pushed the fix/pr-badge-numeric-branch-fallback branch from a4b5377 to 740b1edCompareAugust 8, 2026 14:10
@patroza

Copy link
Copy Markdown
Owner

@omegent I would first question why agents setup branches like these without tracking, and see if we can address that

@omegent-app

Copy link
Copy Markdown
Author

I’ve patched the status fallback to try to reattach the branch to the real PR head branch once the PR number is known. Next I’m adding a regression test that proves the branch stops being “untracked by design” after the first successful lookup.

gpt-5.4 · ↑52k ↓1.8k

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.

1 participant

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

fix(git): resolve PR badges for untracked prNNNN checkouts by number - #376

Open
omegent-app[bot] wants to merge 1 commit into
fork/devfrom
fix/pr-badge-numeric-branch-fallback
Open

fix(git): resolve PR badges for untracked prNNNN checkouts by number#376
omegent-app[bot] wants to merge 1 commit into
fork/devfrom
fix/pr-badge-numeric-branch-fallback

Conversation

@omegent-app

Copy link
Copy Markdown

Closes the last gap in the PR-badge chain: threads whose agents check out a PR with
git fetch origin <head-branch>:prNNNN — a renamed local branch, no upstream tracking.

The problem

The badge lookup finds a thread's PR by head selector: the local branch name, or the head branch
its tracking points to. A pr2182-style checkout has neither — the local name matches no PR's head,
and there is no tracking to derive the real one from. The thread reviewing PR pingdotgg#2182 was the live
case: gh pr list --head pr2182 correctly returns nothing, so the row showed no badge for the very
PR it existed to review. It only lit up after hand-setting branch.pr2182.merge on the worktree.

The fix

In findLatestPrForHeadContext, when the selector search finds nothing and the branch has no
tracking-derived head (headBranch === localBranch) and the name matches ^pr[-_]?\d+$, resolve
the PR by that number via the provider's existing getChangeRequest (gh pr view N /
glab mr show N — provider-neutral). A failed by-number lookup degrades to "no PR", exactly as
before.

The tracking gate matters: a tracked branch that happens to be named pr123 keeps the precise
selector path, so the number can never override a real head selector — covered by the negative test.

Tests

  • status resolves the PR by number for an untracked prNNNN checkout — fails on the pre-fix
    implementation (verified by stashing the fix), passes after; also asserts the pr view 2182 call
    actually happened.
  • status does not resolve by number once a prNNNN branch gains tracking — asserts pr view is
    never called and the row stays badge-less when the tracked head genuinely has no PR.
  • Full GitManager.test.ts: 84 pass. Typecheck clean.

Retroactive by design: existing worktrees need no touch-up — the fallback keys off state the server
reads on every sweep.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

The review-a-PR habit fetches a PR head into a renamed local branch —
`git fetch origin <head-branch>:pr2182` — leaving no upstream tracking. Every
head selector the PR lookup can derive then names a branch that no PR has for
its head, so the thread stays badge-less for the PR it exists to review.
When the selector search finds nothing, the branch has no tracking-derived
head, and its name matches ^pr[-_]?\d+$, resolve the PR by that number via the
provider's getChangeRequest. Gated on headBranch === localBranch so a tracked
branch that merely resembles the pattern keeps the precise selector path; a
lookup failure falls back to "no PR" as before.
Verified against the live case: the "Adversarial Review of PR 2182" thread's
worktree, whose badge only appeared after hand-setting branch tracking — this
makes that repair unnecessary for every past and future such checkout.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBotforce-pushed the fix/pr-badge-numeric-branch-fallback branch from a4b5377 to 740b1edCompareAugust 8, 2026 14:10
@patroza

Copy link
Copy Markdown
Owner

@omegent I would first question why agents setup branches like these without tracking, and see if we can address that

@omegent-app

Copy link
Copy Markdown
Author

I’ve patched the status fallback to try to reattach the branch to the real PR head branch once the PR number is known. Next I’m adding a regression test that proves the branch stops being “untracked by design” after the first successful lookup.

gpt-5.4 · ↑52k ↓1.8k

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.

1 participant

@patroza