Unify git status PR metadata and surface PR state in server and UI - #122

Merged
juliusmarminge merged 8 commits into
mainfrom
codething/10276f55
Feb 28, 2026
Merged

Unify git status PR metadata and surface PR state in server and UI#122
juliusmarminge merged 8 commits into
mainfrom
codething/10276f55

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Feb 28, 2026

Copy link
Copy Markdown
Member

Summary

  • Replaced gitStatus.openPr with a unified gitStatus.pr object in shared contracts and all server/web call sites.
  • Expanded server PR resolution to return the latest relevant PR across states (open, closed, merged) and prefer an open PR when present.
  • Added robust PR list parsing/normalization in GitManager (including state and updatedAt handling) with graceful fallback to null on lookup failures.
  • Updated Git action logic to treat only pr.state === "open" as an existing open PR for action gating and CTA behavior.
  • Added sidebar PR status indicators per thread (open/closed/merged) using git status queries keyed by cwd/branch.
  • Updated tests across server and web to reflect the pr shape and new PR-state behavior.

Testing

  • apps/server/src/git/Layers/GitManager.test.ts: added/updated cases for open PR metadata, merged PR fallback, open-vs-merged precedence, and GH lookup failure fallback.
  • apps/web/src/components/GitActionsControl.logic.test.ts: updated logic tests to the new pr field and explicit state handling.
  • apps/server/src/wsServer.test.ts: updated git status fixture to use pr.
  • Lint: Not run
  • Full test suite: Not run

Note

Medium Risk
Medium risk because this is a cross-cutting contract change (GitStatusResult) that updates server/client call sites and adds new gh pr list parsing/sorting logic, which could cause status/action regressions if PR data is unexpected.

Overview
Unifies git status PR metadata by replacing GitStatusResult.openPr with GitStatusResult.pr (now including state: open|closed|merged) across contracts, server, and web consumers.

Improves PR lookup in GitManager.status to query the latest relevant PR across all states via gh pr list --state all, normalize/parse results (including updatedAt), and prefer an open PR when present, falling back to null on lookup/parse failures.

Updates UI behavior and indicators so git actions only treat pr.state === "open" as an existing open PR (menu gating + “Open PR” CTAs), and the sidebar shows per-thread PR state icons by polling git status per repo/worktree.

Tests are updated/expanded to cover the new pr shape and merged/open precedence cases.

Written by Cursor Bugbot for commit 7f2a95f. This will update automatically on new commits. Configure here.

Note

Unify Git status PR metadata by renaming GitCore.makeGitCore.status result field to pr and surface PR state across server contracts and UI, including GitManager.status using findLatestPr with --limit 20 and --state all

Introduce pr with state in wire contracts and server status, add PR parsing and latest selection, and update UI logic to treat only state === "open" as an existing PR; start with GitManager.status and findLatestPr in GitManager.ts.

📍Where to Start

Start with the GitManager.status handler and the findLatestPr effect in GitManager.ts, then review parsePullRequestList and toStatusPr.

Macroscope summarized 7f2a95f.

juliusmarmingeand others added 8 commits February 15, 2026 14:04
- extend `GitStatusResult` with nullable `mergedPr` metadata
- in server git status, query merged PR only when no open PR is found
- in sidebar, display a `Merged` status pill for threads on branches with merged PRs
- update server/web/contracts tests for the new status shape
- server: only query open PRs when the current branch has an upstream; still fall back to merged PR lookup
- tests: cover status behavior for branches without upstream tracking
- web: fetch git status once per cwd, validate query data with schema parsing, and map merged PR badges by thread branch match
- Replace `openPr`/`mergedPr` with `pr` in server and contracts
- Add PR `state` (`open`/`closed`/`merged`) to git status schema
- Resolve latest branch PR via `gh pr list --state all` sorted by `updatedAt`
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
- Update GitManager PR selection to return the latest open PR before merged ones
- Add regression test covering open-vs-merged ordering by updatedAt
@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codething/10276f55

Comment @coderabbitai help to get the list of available commands and usage tips.

@juliusmarminge
juliusmarminge merged commit b500106 into mainFeb 28, 2026
4 checks passed
dcherrera pushed a commit to dcherrera/t3code that referenced this pull request Jul 7, 2026
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
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

@juliusmarminge
, '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

Unify git status PR metadata and surface PR state in server and UI - #122

Merged
juliusmarminge merged 8 commits into
mainfrom
codething/10276f55
Feb 28, 2026
Merged

Unify git status PR metadata and surface PR state in server and UI#122
juliusmarminge merged 8 commits into
mainfrom
codething/10276f55

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Feb 28, 2026

Copy link
Copy Markdown
Member

Summary

  • Replaced gitStatus.openPr with a unified gitStatus.pr object in shared contracts and all server/web call sites.
  • Expanded server PR resolution to return the latest relevant PR across states (open, closed, merged) and prefer an open PR when present.
  • Added robust PR list parsing/normalization in GitManager (including state and updatedAt handling) with graceful fallback to null on lookup failures.
  • Updated Git action logic to treat only pr.state === "open" as an existing open PR for action gating and CTA behavior.
  • Added sidebar PR status indicators per thread (open/closed/merged) using git status queries keyed by cwd/branch.
  • Updated tests across server and web to reflect the pr shape and new PR-state behavior.

Testing

  • apps/server/src/git/Layers/GitManager.test.ts: added/updated cases for open PR metadata, merged PR fallback, open-vs-merged precedence, and GH lookup failure fallback.
  • apps/web/src/components/GitActionsControl.logic.test.ts: updated logic tests to the new pr field and explicit state handling.
  • apps/server/src/wsServer.test.ts: updated git status fixture to use pr.
  • Lint: Not run
  • Full test suite: Not run

Note

Medium Risk
Medium risk because this is a cross-cutting contract change (GitStatusResult) that updates server/client call sites and adds new gh pr list parsing/sorting logic, which could cause status/action regressions if PR data is unexpected.

Overview
Unifies git status PR metadata by replacing GitStatusResult.openPr with GitStatusResult.pr (now including state: open|closed|merged) across contracts, server, and web consumers.

Improves PR lookup in GitManager.status to query the latest relevant PR across all states via gh pr list --state all, normalize/parse results (including updatedAt), and prefer an open PR when present, falling back to null on lookup/parse failures.

Updates UI behavior and indicators so git actions only treat pr.state === "open" as an existing open PR (menu gating + “Open PR” CTAs), and the sidebar shows per-thread PR state icons by polling git status per repo/worktree.

Tests are updated/expanded to cover the new pr shape and merged/open precedence cases.

Written by Cursor Bugbot for commit 7f2a95f. This will update automatically on new commits. Configure here.

Note

Unify Git status PR metadata by renaming GitCore.makeGitCore.status result field to pr and surface PR state across server contracts and UI, including GitManager.status using findLatestPr with --limit 20 and --state all

Introduce pr with state in wire contracts and server status, add PR parsing and latest selection, and update UI logic to treat only state === "open" as an existing PR; start with GitManager.status and findLatestPr in GitManager.ts.

📍Where to Start

Start with the GitManager.status handler and the findLatestPr effect in GitManager.ts, then review parsePullRequestList and toStatusPr.

Macroscope summarized 7f2a95f.

juliusmarmingeand others added 8 commits February 15, 2026 14:04
- extend `GitStatusResult` with nullable `mergedPr` metadata
- in server git status, query merged PR only when no open PR is found
- in sidebar, display a `Merged` status pill for threads on branches with merged PRs
- update server/web/contracts tests for the new status shape
- server: only query open PRs when the current branch has an upstream; still fall back to merged PR lookup
- tests: cover status behavior for branches without upstream tracking
- web: fetch git status once per cwd, validate query data with schema parsing, and map merged PR badges by thread branch match
- Replace `openPr`/`mergedPr` with `pr` in server and contracts
- Add PR `state` (`open`/`closed`/`merged`) to git status schema
- Resolve latest branch PR via `gh pr list --state all` sorted by `updatedAt`
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
- Update GitManager PR selection to return the latest open PR before merged ones
- Add regression test covering open-vs-merged ordering by updatedAt
@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codething/10276f55

Comment @coderabbitai help to get the list of available commands and usage tips.

@juliusmarminge
juliusmarminge merged commit b500106 into mainFeb 28, 2026
4 checks passed
dcherrera pushed a commit to dcherrera/t3code that referenced this pull request Jul 7, 2026
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
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

@juliusmarminge
, '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

Unify git status PR metadata and surface PR state in server and UI - #122

Merged
juliusmarminge merged 8 commits into
mainfrom
codething/10276f55
Feb 28, 2026
Merged

Unify git status PR metadata and surface PR state in server and UI#122
juliusmarminge merged 8 commits into
mainfrom
codething/10276f55

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Feb 28, 2026

Copy link
Copy Markdown
Member

Summary

  • Replaced gitStatus.openPr with a unified gitStatus.pr object in shared contracts and all server/web call sites.
  • Expanded server PR resolution to return the latest relevant PR across states (open, closed, merged) and prefer an open PR when present.
  • Added robust PR list parsing/normalization in GitManager (including state and updatedAt handling) with graceful fallback to null on lookup failures.
  • Updated Git action logic to treat only pr.state === "open" as an existing open PR for action gating and CTA behavior.
  • Added sidebar PR status indicators per thread (open/closed/merged) using git status queries keyed by cwd/branch.
  • Updated tests across server and web to reflect the pr shape and new PR-state behavior.

Testing

  • apps/server/src/git/Layers/GitManager.test.ts: added/updated cases for open PR metadata, merged PR fallback, open-vs-merged precedence, and GH lookup failure fallback.
  • apps/web/src/components/GitActionsControl.logic.test.ts: updated logic tests to the new pr field and explicit state handling.
  • apps/server/src/wsServer.test.ts: updated git status fixture to use pr.
  • Lint: Not run
  • Full test suite: Not run

Note

Medium Risk
Medium risk because this is a cross-cutting contract change (GitStatusResult) that updates server/client call sites and adds new gh pr list parsing/sorting logic, which could cause status/action regressions if PR data is unexpected.

Overview
Unifies git status PR metadata by replacing GitStatusResult.openPr with GitStatusResult.pr (now including state: open|closed|merged) across contracts, server, and web consumers.

Improves PR lookup in GitManager.status to query the latest relevant PR across all states via gh pr list --state all, normalize/parse results (including updatedAt), and prefer an open PR when present, falling back to null on lookup/parse failures.

Updates UI behavior and indicators so git actions only treat pr.state === "open" as an existing open PR (menu gating + “Open PR” CTAs), and the sidebar shows per-thread PR state icons by polling git status per repo/worktree.

Tests are updated/expanded to cover the new pr shape and merged/open precedence cases.

Written by Cursor Bugbot for commit 7f2a95f. This will update automatically on new commits. Configure here.

Note

Unify Git status PR metadata by renaming GitCore.makeGitCore.status result field to pr and surface PR state across server contracts and UI, including GitManager.status using findLatestPr with --limit 20 and --state all

Introduce pr with state in wire contracts and server status, add PR parsing and latest selection, and update UI logic to treat only state === "open" as an existing PR; start with GitManager.status and findLatestPr in GitManager.ts.

📍Where to Start

Start with the GitManager.status handler and the findLatestPr effect in GitManager.ts, then review parsePullRequestList and toStatusPr.

Macroscope summarized 7f2a95f.

juliusmarmingeand others added 8 commits February 15, 2026 14:04
- extend `GitStatusResult` with nullable `mergedPr` metadata
- in server git status, query merged PR only when no open PR is found
- in sidebar, display a `Merged` status pill for threads on branches with merged PRs
- update server/web/contracts tests for the new status shape
- server: only query open PRs when the current branch has an upstream; still fall back to merged PR lookup
- tests: cover status behavior for branches without upstream tracking
- web: fetch git status once per cwd, validate query data with schema parsing, and map merged PR badges by thread branch match
- Replace `openPr`/`mergedPr` with `pr` in server and contracts
- Add PR `state` (`open`/`closed`/`merged`) to git status schema
- Resolve latest branch PR via `gh pr list --state all` sorted by `updatedAt`
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
- Update GitManager PR selection to return the latest open PR before merged ones
- Add regression test covering open-vs-merged ordering by updatedAt
@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codething/10276f55

Comment @coderabbitai help to get the list of available commands and usage tips.

@juliusmarminge
juliusmarminge merged commit b500106 into mainFeb 28, 2026
4 checks passed
dcherrera pushed a commit to dcherrera/t3code that referenced this pull request Jul 7, 2026
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
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

@juliusmarminge
, '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

Unify git status PR metadata and surface PR state in server and UI - #122

Merged
juliusmarminge merged 8 commits into
mainfrom
codething/10276f55
Feb 28, 2026
Merged

Unify git status PR metadata and surface PR state in server and UI#122
juliusmarminge merged 8 commits into
mainfrom
codething/10276f55

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Feb 28, 2026

Copy link
Copy Markdown
Member

Summary

  • Replaced gitStatus.openPr with a unified gitStatus.pr object in shared contracts and all server/web call sites.
  • Expanded server PR resolution to return the latest relevant PR across states (open, closed, merged) and prefer an open PR when present.
  • Added robust PR list parsing/normalization in GitManager (including state and updatedAt handling) with graceful fallback to null on lookup failures.
  • Updated Git action logic to treat only pr.state === "open" as an existing open PR for action gating and CTA behavior.
  • Added sidebar PR status indicators per thread (open/closed/merged) using git status queries keyed by cwd/branch.
  • Updated tests across server and web to reflect the pr shape and new PR-state behavior.

Testing

  • apps/server/src/git/Layers/GitManager.test.ts: added/updated cases for open PR metadata, merged PR fallback, open-vs-merged precedence, and GH lookup failure fallback.
  • apps/web/src/components/GitActionsControl.logic.test.ts: updated logic tests to the new pr field and explicit state handling.
  • apps/server/src/wsServer.test.ts: updated git status fixture to use pr.
  • Lint: Not run
  • Full test suite: Not run

Note

Medium Risk
Medium risk because this is a cross-cutting contract change (GitStatusResult) that updates server/client call sites and adds new gh pr list parsing/sorting logic, which could cause status/action regressions if PR data is unexpected.

Overview
Unifies git status PR metadata by replacing GitStatusResult.openPr with GitStatusResult.pr (now including state: open|closed|merged) across contracts, server, and web consumers.

Improves PR lookup in GitManager.status to query the latest relevant PR across all states via gh pr list --state all, normalize/parse results (including updatedAt), and prefer an open PR when present, falling back to null on lookup/parse failures.

Updates UI behavior and indicators so git actions only treat pr.state === "open" as an existing open PR (menu gating + “Open PR” CTAs), and the sidebar shows per-thread PR state icons by polling git status per repo/worktree.

Tests are updated/expanded to cover the new pr shape and merged/open precedence cases.

Written by Cursor Bugbot for commit 7f2a95f. This will update automatically on new commits. Configure here.

Note

Unify Git status PR metadata by renaming GitCore.makeGitCore.status result field to pr and surface PR state across server contracts and UI, including GitManager.status using findLatestPr with --limit 20 and --state all

Introduce pr with state in wire contracts and server status, add PR parsing and latest selection, and update UI logic to treat only state === "open" as an existing PR; start with GitManager.status and findLatestPr in GitManager.ts.

📍Where to Start

Start with the GitManager.status handler and the findLatestPr effect in GitManager.ts, then review parsePullRequestList and toStatusPr.

Macroscope summarized 7f2a95f.

juliusmarmingeand others added 8 commits February 15, 2026 14:04
- extend `GitStatusResult` with nullable `mergedPr` metadata
- in server git status, query merged PR only when no open PR is found
- in sidebar, display a `Merged` status pill for threads on branches with merged PRs
- update server/web/contracts tests for the new status shape
- server: only query open PRs when the current branch has an upstream; still fall back to merged PR lookup
- tests: cover status behavior for branches without upstream tracking
- web: fetch git status once per cwd, validate query data with schema parsing, and map merged PR badges by thread branch match
- Replace `openPr`/`mergedPr` with `pr` in server and contracts
- Add PR `state` (`open`/`closed`/`merged`) to git status schema
- Resolve latest branch PR via `gh pr list --state all` sorted by `updatedAt`
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
- Update GitManager PR selection to return the latest open PR before merged ones
- Add regression test covering open-vs-merged ordering by updatedAt
@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codething/10276f55

Comment @coderabbitai help to get the list of available commands and usage tips.

@juliusmarminge
juliusmarminge merged commit b500106 into mainFeb 28, 2026
4 checks passed
dcherrera pushed a commit to dcherrera/t3code that referenced this pull request Jul 7, 2026
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
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

@juliusmarminge
, '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

Unify git status PR metadata and surface PR state in server and UI - #122

Merged
juliusmarminge merged 8 commits into
mainfrom
codething/10276f55
Feb 28, 2026
Merged

Unify git status PR metadata and surface PR state in server and UI#122
juliusmarminge merged 8 commits into
mainfrom
codething/10276f55

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Feb 28, 2026

Copy link
Copy Markdown
Member

Summary

  • Replaced gitStatus.openPr with a unified gitStatus.pr object in shared contracts and all server/web call sites.
  • Expanded server PR resolution to return the latest relevant PR across states (open, closed, merged) and prefer an open PR when present.
  • Added robust PR list parsing/normalization in GitManager (including state and updatedAt handling) with graceful fallback to null on lookup failures.
  • Updated Git action logic to treat only pr.state === "open" as an existing open PR for action gating and CTA behavior.
  • Added sidebar PR status indicators per thread (open/closed/merged) using git status queries keyed by cwd/branch.
  • Updated tests across server and web to reflect the pr shape and new PR-state behavior.

Testing

  • apps/server/src/git/Layers/GitManager.test.ts: added/updated cases for open PR metadata, merged PR fallback, open-vs-merged precedence, and GH lookup failure fallback.
  • apps/web/src/components/GitActionsControl.logic.test.ts: updated logic tests to the new pr field and explicit state handling.
  • apps/server/src/wsServer.test.ts: updated git status fixture to use pr.
  • Lint: Not run
  • Full test suite: Not run

Note

Medium Risk
Medium risk because this is a cross-cutting contract change (GitStatusResult) that updates server/client call sites and adds new gh pr list parsing/sorting logic, which could cause status/action regressions if PR data is unexpected.

Overview
Unifies git status PR metadata by replacing GitStatusResult.openPr with GitStatusResult.pr (now including state: open|closed|merged) across contracts, server, and web consumers.

Improves PR lookup in GitManager.status to query the latest relevant PR across all states via gh pr list --state all, normalize/parse results (including updatedAt), and prefer an open PR when present, falling back to null on lookup/parse failures.

Updates UI behavior and indicators so git actions only treat pr.state === "open" as an existing open PR (menu gating + “Open PR” CTAs), and the sidebar shows per-thread PR state icons by polling git status per repo/worktree.

Tests are updated/expanded to cover the new pr shape and merged/open precedence cases.

Written by Cursor Bugbot for commit 7f2a95f. This will update automatically on new commits. Configure here.

Note

Unify Git status PR metadata by renaming GitCore.makeGitCore.status result field to pr and surface PR state across server contracts and UI, including GitManager.status using findLatestPr with --limit 20 and --state all

Introduce pr with state in wire contracts and server status, add PR parsing and latest selection, and update UI logic to treat only state === "open" as an existing PR; start with GitManager.status and findLatestPr in GitManager.ts.

📍Where to Start

Start with the GitManager.status handler and the findLatestPr effect in GitManager.ts, then review parsePullRequestList and toStatusPr.

Macroscope summarized 7f2a95f.

juliusmarmingeand others added 8 commits February 15, 2026 14:04
- extend `GitStatusResult` with nullable `mergedPr` metadata
- in server git status, query merged PR only when no open PR is found
- in sidebar, display a `Merged` status pill for threads on branches with merged PRs
- update server/web/contracts tests for the new status shape
- server: only query open PRs when the current branch has an upstream; still fall back to merged PR lookup
- tests: cover status behavior for branches without upstream tracking
- web: fetch git status once per cwd, validate query data with schema parsing, and map merged PR badges by thread branch match
- Replace `openPr`/`mergedPr` with `pr` in server and contracts
- Add PR `state` (`open`/`closed`/`merged`) to git status schema
- Resolve latest branch PR via `gh pr list --state all` sorted by `updatedAt`
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
- Update GitManager PR selection to return the latest open PR before merged ones
- Add regression test covering open-vs-merged ordering by updatedAt
@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codething/10276f55

Comment @coderabbitai help to get the list of available commands and usage tips.

@juliusmarminge
juliusmarminge merged commit b500106 into mainFeb 28, 2026
4 checks passed
dcherrera pushed a commit to dcherrera/t3code that referenced this pull request Jul 7, 2026
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
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

@juliusmarminge
, '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

Unify git status PR metadata and surface PR state in server and UI - #122

Merged
juliusmarminge merged 8 commits into
mainfrom
codething/10276f55
Feb 28, 2026
Merged

Unify git status PR metadata and surface PR state in server and UI#122
juliusmarminge merged 8 commits into
mainfrom
codething/10276f55

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Feb 28, 2026

Copy link
Copy Markdown
Member

Summary

  • Replaced gitStatus.openPr with a unified gitStatus.pr object in shared contracts and all server/web call sites.
  • Expanded server PR resolution to return the latest relevant PR across states (open, closed, merged) and prefer an open PR when present.
  • Added robust PR list parsing/normalization in GitManager (including state and updatedAt handling) with graceful fallback to null on lookup failures.
  • Updated Git action logic to treat only pr.state === "open" as an existing open PR for action gating and CTA behavior.
  • Added sidebar PR status indicators per thread (open/closed/merged) using git status queries keyed by cwd/branch.
  • Updated tests across server and web to reflect the pr shape and new PR-state behavior.

Testing

  • apps/server/src/git/Layers/GitManager.test.ts: added/updated cases for open PR metadata, merged PR fallback, open-vs-merged precedence, and GH lookup failure fallback.
  • apps/web/src/components/GitActionsControl.logic.test.ts: updated logic tests to the new pr field and explicit state handling.
  • apps/server/src/wsServer.test.ts: updated git status fixture to use pr.
  • Lint: Not run
  • Full test suite: Not run

Note

Medium Risk
Medium risk because this is a cross-cutting contract change (GitStatusResult) that updates server/client call sites and adds new gh pr list parsing/sorting logic, which could cause status/action regressions if PR data is unexpected.

Overview
Unifies git status PR metadata by replacing GitStatusResult.openPr with GitStatusResult.pr (now including state: open|closed|merged) across contracts, server, and web consumers.

Improves PR lookup in GitManager.status to query the latest relevant PR across all states via gh pr list --state all, normalize/parse results (including updatedAt), and prefer an open PR when present, falling back to null on lookup/parse failures.

Updates UI behavior and indicators so git actions only treat pr.state === "open" as an existing open PR (menu gating + “Open PR” CTAs), and the sidebar shows per-thread PR state icons by polling git status per repo/worktree.

Tests are updated/expanded to cover the new pr shape and merged/open precedence cases.

Written by Cursor Bugbot for commit 7f2a95f. This will update automatically on new commits. Configure here.

Note

Unify Git status PR metadata by renaming GitCore.makeGitCore.status result field to pr and surface PR state across server contracts and UI, including GitManager.status using findLatestPr with --limit 20 and --state all

Introduce pr with state in wire contracts and server status, add PR parsing and latest selection, and update UI logic to treat only state === "open" as an existing PR; start with GitManager.status and findLatestPr in GitManager.ts.

📍Where to Start

Start with the GitManager.status handler and the findLatestPr effect in GitManager.ts, then review parsePullRequestList and toStatusPr.

Macroscope summarized 7f2a95f.

juliusmarmingeand others added 8 commits February 15, 2026 14:04
- extend `GitStatusResult` with nullable `mergedPr` metadata
- in server git status, query merged PR only when no open PR is found
- in sidebar, display a `Merged` status pill for threads on branches with merged PRs
- update server/web/contracts tests for the new status shape
- server: only query open PRs when the current branch has an upstream; still fall back to merged PR lookup
- tests: cover status behavior for branches without upstream tracking
- web: fetch git status once per cwd, validate query data with schema parsing, and map merged PR badges by thread branch match
- Replace `openPr`/`mergedPr` with `pr` in server and contracts
- Add PR `state` (`open`/`closed`/`merged`) to git status schema
- Resolve latest branch PR via `gh pr list --state all` sorted by `updatedAt`
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
- Update GitManager PR selection to return the latest open PR before merged ones
- Add regression test covering open-vs-merged ordering by updatedAt
@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codething/10276f55

Comment @coderabbitai help to get the list of available commands and usage tips.

@juliusmarminge
juliusmarminge merged commit b500106 into mainFeb 28, 2026
4 checks passed
dcherrera pushed a commit to dcherrera/t3code that referenced this pull request Jul 7, 2026
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
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

@juliusmarminge
, '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

Unify git status PR metadata and surface PR state in server and UI - #122

Merged
juliusmarminge merged 8 commits into
mainfrom
codething/10276f55
Feb 28, 2026
Merged

Unify git status PR metadata and surface PR state in server and UI#122
juliusmarminge merged 8 commits into
mainfrom
codething/10276f55

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Feb 28, 2026

Copy link
Copy Markdown
Member

Summary

  • Replaced gitStatus.openPr with a unified gitStatus.pr object in shared contracts and all server/web call sites.
  • Expanded server PR resolution to return the latest relevant PR across states (open, closed, merged) and prefer an open PR when present.
  • Added robust PR list parsing/normalization in GitManager (including state and updatedAt handling) with graceful fallback to null on lookup failures.
  • Updated Git action logic to treat only pr.state === "open" as an existing open PR for action gating and CTA behavior.
  • Added sidebar PR status indicators per thread (open/closed/merged) using git status queries keyed by cwd/branch.
  • Updated tests across server and web to reflect the pr shape and new PR-state behavior.

Testing

  • apps/server/src/git/Layers/GitManager.test.ts: added/updated cases for open PR metadata, merged PR fallback, open-vs-merged precedence, and GH lookup failure fallback.
  • apps/web/src/components/GitActionsControl.logic.test.ts: updated logic tests to the new pr field and explicit state handling.
  • apps/server/src/wsServer.test.ts: updated git status fixture to use pr.
  • Lint: Not run
  • Full test suite: Not run

Note

Medium Risk
Medium risk because this is a cross-cutting contract change (GitStatusResult) that updates server/client call sites and adds new gh pr list parsing/sorting logic, which could cause status/action regressions if PR data is unexpected.

Overview
Unifies git status PR metadata by replacing GitStatusResult.openPr with GitStatusResult.pr (now including state: open|closed|merged) across contracts, server, and web consumers.

Improves PR lookup in GitManager.status to query the latest relevant PR across all states via gh pr list --state all, normalize/parse results (including updatedAt), and prefer an open PR when present, falling back to null on lookup/parse failures.

Updates UI behavior and indicators so git actions only treat pr.state === "open" as an existing open PR (menu gating + “Open PR” CTAs), and the sidebar shows per-thread PR state icons by polling git status per repo/worktree.

Tests are updated/expanded to cover the new pr shape and merged/open precedence cases.

Written by Cursor Bugbot for commit 7f2a95f. This will update automatically on new commits. Configure here.

Note

Unify Git status PR metadata by renaming GitCore.makeGitCore.status result field to pr and surface PR state across server contracts and UI, including GitManager.status using findLatestPr with --limit 20 and --state all

Introduce pr with state in wire contracts and server status, add PR parsing and latest selection, and update UI logic to treat only state === "open" as an existing PR; start with GitManager.status and findLatestPr in GitManager.ts.

📍Where to Start

Start with the GitManager.status handler and the findLatestPr effect in GitManager.ts, then review parsePullRequestList and toStatusPr.

Macroscope summarized 7f2a95f.

juliusmarmingeand others added 8 commits February 15, 2026 14:04
- extend `GitStatusResult` with nullable `mergedPr` metadata
- in server git status, query merged PR only when no open PR is found
- in sidebar, display a `Merged` status pill for threads on branches with merged PRs
- update server/web/contracts tests for the new status shape
- server: only query open PRs when the current branch has an upstream; still fall back to merged PR lookup
- tests: cover status behavior for branches without upstream tracking
- web: fetch git status once per cwd, validate query data with schema parsing, and map merged PR badges by thread branch match
- Replace `openPr`/`mergedPr` with `pr` in server and contracts
- Add PR `state` (`open`/`closed`/`merged`) to git status schema
- Resolve latest branch PR via `gh pr list --state all` sorted by `updatedAt`
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
- Update GitManager PR selection to return the latest open PR before merged ones
- Add regression test covering open-vs-merged ordering by updatedAt
@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codething/10276f55

Comment @coderabbitai help to get the list of available commands and usage tips.

@juliusmarminge
juliusmarminge merged commit b500106 into mainFeb 28, 2026
4 checks passed
dcherrera pushed a commit to dcherrera/t3code that referenced this pull request Jul 7, 2026
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
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

@juliusmarminge
, '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

Unify git status PR metadata and surface PR state in server and UI - #122

Merged
juliusmarminge merged 8 commits into
mainfrom
codething/10276f55
Feb 28, 2026
Merged

Unify git status PR metadata and surface PR state in server and UI#122
juliusmarminge merged 8 commits into
mainfrom
codething/10276f55

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Feb 28, 2026

Copy link
Copy Markdown
Member

Summary

  • Replaced gitStatus.openPr with a unified gitStatus.pr object in shared contracts and all server/web call sites.
  • Expanded server PR resolution to return the latest relevant PR across states (open, closed, merged) and prefer an open PR when present.
  • Added robust PR list parsing/normalization in GitManager (including state and updatedAt handling) with graceful fallback to null on lookup failures.
  • Updated Git action logic to treat only pr.state === "open" as an existing open PR for action gating and CTA behavior.
  • Added sidebar PR status indicators per thread (open/closed/merged) using git status queries keyed by cwd/branch.
  • Updated tests across server and web to reflect the pr shape and new PR-state behavior.

Testing

  • apps/server/src/git/Layers/GitManager.test.ts: added/updated cases for open PR metadata, merged PR fallback, open-vs-merged precedence, and GH lookup failure fallback.
  • apps/web/src/components/GitActionsControl.logic.test.ts: updated logic tests to the new pr field and explicit state handling.
  • apps/server/src/wsServer.test.ts: updated git status fixture to use pr.
  • Lint: Not run
  • Full test suite: Not run

Note

Medium Risk
Medium risk because this is a cross-cutting contract change (GitStatusResult) that updates server/client call sites and adds new gh pr list parsing/sorting logic, which could cause status/action regressions if PR data is unexpected.

Overview
Unifies git status PR metadata by replacing GitStatusResult.openPr with GitStatusResult.pr (now including state: open|closed|merged) across contracts, server, and web consumers.

Improves PR lookup in GitManager.status to query the latest relevant PR across all states via gh pr list --state all, normalize/parse results (including updatedAt), and prefer an open PR when present, falling back to null on lookup/parse failures.

Updates UI behavior and indicators so git actions only treat pr.state === "open" as an existing open PR (menu gating + “Open PR” CTAs), and the sidebar shows per-thread PR state icons by polling git status per repo/worktree.

Tests are updated/expanded to cover the new pr shape and merged/open precedence cases.

Written by Cursor Bugbot for commit 7f2a95f. This will update automatically on new commits. Configure here.

Note

Unify Git status PR metadata by renaming GitCore.makeGitCore.status result field to pr and surface PR state across server contracts and UI, including GitManager.status using findLatestPr with --limit 20 and --state all

Introduce pr with state in wire contracts and server status, add PR parsing and latest selection, and update UI logic to treat only state === "open" as an existing PR; start with GitManager.status and findLatestPr in GitManager.ts.

📍Where to Start

Start with the GitManager.status handler and the findLatestPr effect in GitManager.ts, then review parsePullRequestList and toStatusPr.

Macroscope summarized 7f2a95f.

juliusmarmingeand others added 8 commits February 15, 2026 14:04
- extend `GitStatusResult` with nullable `mergedPr` metadata
- in server git status, query merged PR only when no open PR is found
- in sidebar, display a `Merged` status pill for threads on branches with merged PRs
- update server/web/contracts tests for the new status shape
- server: only query open PRs when the current branch has an upstream; still fall back to merged PR lookup
- tests: cover status behavior for branches without upstream tracking
- web: fetch git status once per cwd, validate query data with schema parsing, and map merged PR badges by thread branch match
- Replace `openPr`/`mergedPr` with `pr` in server and contracts
- Add PR `state` (`open`/`closed`/`merged`) to git status schema
- Resolve latest branch PR via `gh pr list --state all` sorted by `updatedAt`
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
- Update GitManager PR selection to return the latest open PR before merged ones
- Add regression test covering open-vs-merged ordering by updatedAt
@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codething/10276f55

Comment @coderabbitai help to get the list of available commands and usage tips.

@juliusmarminge
juliusmarminge merged commit b500106 into mainFeb 28, 2026
4 checks passed
dcherrera pushed a commit to dcherrera/t3code that referenced this pull request Jul 7, 2026
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
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

@juliusmarminge