Repository navigation
feat(web): issue list narrows in place while GitHub answers - #1422
Merged
Merged
Conversation
4 tasks done
donjor
force-pushed
the
t3code/issues-keep-list-while-loading
branch
from
September 29, 2026 20:50
e7d263c to
5039691
Compare
donjor
force-pushed
the
t3code/issues-keep-list-while-loading
branch
2 times, most recently
from
September 29, 2026 22:54
b08eb9f to
c741d71
Compare
Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no
donjor
force-pushed
the
t3code/issues-keep-list-while-loading
branch
from
September 29, 2026 23:03
c741d71 to
bc7ed5c
Compare
donjor
added a commit
that referenced
this pull request
Sep 29, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Sep 29, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Sep 30, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
3 tasks
donjor
added a commit
that referenced
this pull request
Sep 30, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Sep 30, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Sep 30, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Sep 30, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 1, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 1, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 1, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 1, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
pushed a commit
that referenced
this pull request
Oct 2, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
pushed a commit
that referenced
this pull request
Oct 2, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 2, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
pushed a commit
that referenced
this pull request
Oct 4, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
pushed a commit
that referenced
this pull request
Oct 4, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
pushed a commit
that referenced
this pull request
Oct 4, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 4, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
pushed a commit
that referenced
this pull request
Oct 4, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 4, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
pushed a commit
that referenced
this pull request
Oct 4, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 4, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 4, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 6, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 6, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 6, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 6, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 8, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 8, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 10, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 10, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 10, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 10, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 10, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 10, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 11, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 11, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 11, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 11, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 12, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 12, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 12, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 12, 2026
…1423) > 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue detail header gets the Pull Request panel's "More actions" menu. | Item | Does | | --- | --- | | **Refresh** | Re-reads the issue; the trigger spins while it runs | | **Ask a question** | Issue reference in a composer; reader types the question | | **Explain this issue** | What it asks for, where it lands, what is risky | | **Open on GitHub** | Opens through the host, like the PR panel | | **Copy link** | Shows the page's copy shortcut | | **Copy issue number** | Copies `#N` | - **Work on this issue:** stays the one primary button - **Beside a thread:** Ask and Explain land in that thread's composer - **On the page:** they open a new thread on the issue's project - **Typed text:** kept; the prompt goes below it - **Repeat press:** no second copy - **Shortcut label:** page only; beside a thread the shortcut copies the thread - **Replaces:** the loose refresh and external-link icons Prompts and the composer append are pure helpers with focused tests. ## Why The issue panel had one real action; the PR panel has a full menu. Asking an agent about an issue meant copying its link by hand. ## UI Changes | Before | After | | --- | --- | |  |  | **After, Explain this issue:** a new thread holds the prompt, ready to send  **Before:** open an issue; refresh, link and one button https://github.com/user-attachments/assets/14086482-297c-47a2-bc7e-5fe087a14cd6 **After:** open an issue, open the menu, explain it https://github.com/user-attachments/assets/1e775167-9fbb-4459-8744-6f68c664ef4f ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run ask logic + detail + page → exit 0 (17 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1422. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
donjor
added a commit
that referenced
this pull request
Oct 13, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high) ## What Changed The issue list keeps its rows while a new state or search loads, like the Pull Requests list. - **Held rows:** the last answer for the same projects stands in - **Narrowed:** held rows filter to the new state and search terms - **Search terms:** title, number, repository, author, labels - **Qualifiers:** `label:bug` and the like stay GitHub's to apply - **Marked:** rows dim; the group header says what is loading - **Ghosts:** only when nothing held fits, or a first load - **No false empty:** a narrowed-to-nothing carry shows ghosts, not "No issues" The carry is a pure helper with focused tests; `useGitHubIssueList` returns `carried` beside `data`. ## Why Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds. The rows the reader already had were the best answer until GitHub replied. ## UI Changes | Before | After | | --- | --- | |  |  | |  |  | **Before:** Open to All, then search; the list blanks each time https://github.com/user-attachments/assets/fec4ef5c-abe5-48c8-bf52-a9092617e503 **After:** same flow; rows stay and narrow in place https://github.com/user-attachments/assets/8365227c-1205-4008-b32f-9a1b7a54867c ## Checks ```text tsc --noEmit (apps/web) → exit 0 vp test run carry logic + issues page → exit 0 (10 tests) vp lint (changed files) → exit 0 vp run fork:ci → exit 0 ``` ## Checklist - [x] This PR is small and focused - [x] I explained what changed and why - [x] I included before/after screenshots for any UI changes - [x] I included a video for animation/interaction changes Stacked on #1421. Opus 5.5 via Claude Code in T3 Code. ## Fork trailers Fork-Domain: github-issues Fork-Tier: qol Fork-Upstreamable: no Co-authored-by: donjor <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What Changed
The issue list keeps its rows while a new state or search loads, like the Pull Requests list.
label:bugand the like stay GitHub's to applyThe carry is a pure helper with focused tests;
useGitHubIssueListreturnscarriedbesidedata.Why
Every new state or search was a new query that started empty, so the whole list blanked to skeletons for a few seconds.
The rows the reader already had were the best answer until GitHub replied.
UI Changes
Before: Open to All, then search; the list blanks each time
reload-before.mp4
After: same flow; rows stay and narrow in place
reload-after.mp4
Checks
Checklist
Stacked on #1421.
Opus 5.5 via Claude Code in T3 Code.
Fork trailers
Fork-Domain: github-issues
Fork-Tier: qol
Fork-Upstreamable: no