Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
9c3c7ee
perf(pr): actions, title edits and labels show at once on every host
Bil0000 Nov 8, 2026
4a19a46
perf(web): title editor and label picker stop waiting on the host
Bil0000 Nov 8, 2026
d295113
fix(pr): preserve optimistic titles across shared summaries
maria-rcks Nov 10, 2026
8e4a2bc
fix(pr): retain accepted titles when saved summaries tie
maria-rcks Nov 10, 2026
fcf73a0
fix(pr): a queued reopen keeps a closed pull request in open lists
Bil0000 Nov 10, 2026
b42e869
fix(pr): a stored detail snapshot no longer hides a pending title
Bil0000 Nov 10, 2026
3fbca24
fix(pr): a label read still loading restarts when a label change lands
Bil0000 Nov 10, 2026
2ca2584
perf(pr): merge shows its result at once where the host says whether …
Bil0000 Nov 8, 2026
d9655bf
perf(web): hover on a PR row also reads its activity
Bil0000 Nov 10, 2026
2ac76f4
test(pr): fold the unknown-queue merge case into the queue-status table
Bil0000 Nov 10, 2026
5839e47
fix(pr): the checks read shows every queued state change
Bil0000 Nov 10, 2026
a20daf6
Merge branch 'main' into t3/instant-pr-merge-and-load
maria-rcks Nov 11, 2026
138bba6
Merge remote-tracking branch 'origin/main' into rv/32774
Bil0000 Nov 13, 2026
2ce33a1
fix(pr): keep pending edits out of retained list rows
Bil0000 Nov 13, 2026
30240c5
fix(pr): merge list fixes and wait for host merge results
Bil0000 Nov 13, 2026
7a1d2d3
fix(pr): an accepted edit stays on retained list rows
Bil0000 Nov 13, 2026
db380fc
chore(pr): merge retained row fix into rv/32842
Bil0000 Nov 13, 2026
49ae4f6
fix(pr): the PR page loads again, and a pending title shows over a st…
shivamhwp Nov 14, 2026
afbd547
Merge remote-tracking branch 'origin/main' into pr-32774
shivamhwp Nov 14, 2026
697b854
Merge branch 'pr-32774' into pr-32842
shivamhwp Nov 14, 2026
40fceb5
Merge remote-tracking branch 'origin/main' into pr-32842
shivamhwp Nov 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ vi.mock(import("~/state/pullRequests"), async (original) => {
pullRequestEnvironment: {
...actual.pullRequestEnvironment,
detail: ((target: unknown) => target) as never,
activity: ((target: unknown) => ({ activity: target })) as never,
},
};
});
Expand Down Expand Up @@ -46,7 +47,7 @@ function Rows() {
);
}

it("reads the panel's detail once intent rests on a row for 150 ms", async () => {
it("reads the panel's detail and activity once intent rests on a row for 150 ms", async () => {
state.reads = [];
await using screen = await render(<Rows />, {
// A bare hook probe; nothing here navigates.
Expand All @@ -68,19 +69,17 @@ it("reads the panel's detail once intent rests on a row for 150 ms", async () =>
expect(state.reads).toEqual([]);
await act(() => vi.advanceTimersByTime(1));
// Query atoms key on JSON order: this is the order the PRs page panel reads.
expect(JSON.stringify(state.reads.at(-1))).toBe(
JSON.stringify({
environmentId,
input: {
projectId: row.projectId,
repository: "owner/repo",
number: 7,
host: "github.com",
allowStale: false,
},
}),
);
const reference = {
projectId: row.projectId,
repository: "owner/repo",
number: 7,
host: "github.com",
};
expect(state.reads.slice(-2).map((read) => JSON.stringify(read))).toEqual([
JSON.stringify({ environmentId, input: { ...reference, allowStale: false } }),
JSON.stringify({ activity: { environmentId, input: reference } }),
]);

await act(() => leave.click());
expect(state.reads.at(-1)).toBeNull();
expect(state.reads.slice(-2)).toEqual([null, null]);
});
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@ interface PullRequestIntentTarget {
}

/**
* Reads the detail a row's panel will ask for once the pointer or focus rests on it, so the
* click paints from it. Passing over rows asks the host nothing, and leaving a row stops reading it.
* Reads the detail and activity a row's panel will ask for once the pointer or focus rests on it,
* so the click paints from them. Passing over rows asks the host nothing, and leaving a row stops
* reading it.
*/
export function usePullRequestIntentPrefetch(
isListed: (target: PullRequestIntentTarget) => boolean,
Expand All @@ -29,17 +30,23 @@ export function usePullRequestIntentPrefetch(
// A removed row fires no leave event.
const listed = target !== null && isListed(target);
if (target !== null && !listed) setTarget(null);
useEnvironmentQuery(
const reference =
target === null || !listed
? null
: pullRequestPanelReference({ ...target, host: target.host.toLowerCase() });
useEnvironmentQuery(
target === null || reference === null
? null
: pullRequestEnvironment.detail({
environmentId: target.environmentId,
input: {
...pullRequestPanelReference({ ...target, host: target.host.toLowerCase() }),
allowStale: false,
},
input: { ...reference, allowStale: false },
}),
);
useEnvironmentQuery(
target === null || reference === null
? null
: pullRequestEnvironment.activity({ environmentId: target.environmentId, input: reference }),
);
return useStableCallback((next: PullRequestIntentTarget | null) => {
clearTimeout(timer.current);
if (next === null) {
Expand Down
Loading