Largest PR Test - #25
Conversation
Allows APPROVE / REQUEST_CHANGES on demo PRs without self-review, so list badges can show Approved and Changes requested states.
Include a live PR list capture showing tree indents, review badges, and branch chips so the product overview is easier to understand at a glance.
Keep only the screenshot under the overview section.
Translate product overview, features, install, PAT notes, and development docs while keeping logo and demo screenshot placement.
Align manifest, package, and README badge for the latest store package.
Document data handling, optional PAT storage, host/storage justifications, and link the policy from the README for store submission.
Commit the logo and demo screenshot under .jpeg extensions so GitHub renders the README images correctly.
Open a centered React modal from the PR list without full navigation, expand to near-fullscreen Diff with file tree and virtualized rows, support Ctrl/Cmd+F across off-screen content, and wire conversation, reviews, checks, and line comments through the background API bridge.
Query refinements that keep hitIndex at 0 still scroll to the new match via resolveQuerySearchState; next/prev wraps a single hit the same way. Host reuses the React root on prop updates so layout, scroll, and search state survive detail refresh, and the modal bundle maps createRoot correctly for production IIFE builds.
Rebuild the modal with shadcn-style components and GitHub color-mode theming, conversation overview with sanitized markdown, nested file tree, syntax-highlighted virtualized diffs, default-collapsed large/generated files via gitattributes signals, and inline review comments with next/prev navigation helpers.
Treat linguist-generated=true as enabled, load collapse helper in the service worker, and re-annotate files in the modal so fetched attributes override weak SW defaults. Cover non-hardcoded *.pb.go paths in pure and fetchPrDetail tests.
…uting Ship a production-ready PR modal overhaul on the existing virtualized diff foundation: - Refactor modal into TypeScript modules (views, common components, zustand store, pure libs) with esbuild IIFE bundle and real typecheck. - Markdown Write/Preview composers (no B/I toolbar), paste/drop attachments via Contents API, hljs snippets, anchored searchable selects, header subscribe, conditional checks, merge-box check detail, icon edit/delete, thread collapse, and optimistic reply merge that survives host rehydrate. - Deep-link URI (pr+page / pr+number / pr+position) with history.replaceState; restore order sessionStorage then URI; clear residual pr+ and spaced keys on close; reset comment focus per PR open. - Host/content restore path, upload bridge, and expanded unit/fixture tests including URI, attach merge, and memo render counts.
Add an icon control in the PR detail header to switch between the centered modal shell and a right-docked side sheet. Preference is stored in localStorage (prp:shell) and reapplied on the next open; conversation, diff, and other features stay the same under both shells.
Rename Close PR to Close, remove the Commands button (palette remains available via keyboard), and replace coarse loading blocks with finer conversation/diff/header skeletons so stats and action chrome no longer shift layout while loading.
Replace the Refreshing… status strip with a 2px accent progress overlay on the modal top edge so soft revalidation no longer shifts layout.
Reset font-family on inline thread and comment rows so review text uses the same proportional UI font as conversation view, not the mono code font inherited from the virtualized diff list. File paths stay monospace.
Allow collapsing the Diff file tree to a thin expand rail and dragging a vertical handle to resize navigator width (clamped). Persist collapsed state and width in localStorage (prp:file-nav) for subsequent opens.
When the shell preference is side sheet, conversation stays a right-docked panel but Diff expands to full viewport like the modal Diff layout so the file tree and virtualized list have full width.
Remove dim/blur overlay when shell is side sheet so the underlying GitHub list stays fully visible; only the sheet panel remains opaque.
Keep overlay hosts transparent for both shells, drop blur that washed to white, and use a light dark-alpha dim only in modal shell so the page stays visible. Side sheet backdrop remains fully transparent.
Set conversation side-sheet min width to at least 800px (viewport-capped on smaller windows) and max to 1200px via clamp, so the panel stays usable.
Match modal dimming (light alpha veil, no blur) for side-sheet mode so the underlying page is slightly darkened under the transparent overlay.
Increase conversation side-sheet minimum from 800px by ~150px for more usable conversation/aside layout.
Play sheet slide-out or modal scale-out before unmount, and fade the dim backdrop, so closing matches open transitions for both shells.
…fsets Measure the virtual list pane with ResizeObserver instead of a fixed 520px height, use prefix offsets for comment-heavy variable rows, and raise comment row estimates so the scroll spacer no longer clips bottom content.
Render real profile photos via github.com/{login}.png (and API avatar_url
when present) with initials fallback on error, across conversation threads,
diff review threads, and people meta lists.
Move overflow scrolling to an outer wrapper so the vertical rail spans the full commit list height, and add per-item segments so 4+ commits stay linked.
Render GitHub profile images in Add reviewer/assignee options and color swatches in Add label options, using option meta from builders.
Show mergeability, draft, mergeable_state, and checks as prominent badges in the merge box, with stronger box styling for ok/warn/muted states.
Add Diff commit/range filtering via GitHub compare, link git refs and SHAs, replace window.prompt with inline editors/pickers, and fix MV3 message-channel closes with Promise-based handlers, keep-alive, and retries. Ignore packaged .crx artifacts.
| } catch { | ||
| /* ignore */ | ||
| } | ||
| void refreshPrefs(); |
There was a problem hiding this comment.
[perf-probe] line/side L10
| } catch { | ||
| /* ignore */ | ||
| } | ||
| void refreshPrefs(); |
There was a problem hiding this comment.
[perf-probe] position 10
| .catch((err) => { | ||
| creditAllThreadStages(); | ||
| try { | ||
| for (const id of [HOST_ID, embedHostId()]) { |
| : []), | ||
| ], | ||
| }; | ||
| const cleanedCacheRc = filterFn |
| code?: string; | ||
| pullNumber?: number; | ||
| graphqlErrors?: any; | ||
| } |
| width: var(--prp-shell-w, 92vw); | ||
| height: var(--prp-shell-h, 90vh); | ||
| max-width: 100vw; | ||
| max-height: 100vh; |
| @@ -1,30 +1,81 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="ko"> | |||
| <html lang="en"> | |||
| <head> | |||
| <meta charset="utf-8" /> | |||
| <title>pr+</title> | |||
enif-lee
left a comment
There was a problem hiding this comment.
Perf fixture batch t20 (20 comments). Prefix [perf-fixture].
| // steal ⌥I into Diff/Conversation composers. | ||
| const finishReviewOpen = Boolean( | ||
| typeof document !== 'undefined' && | ||
| document.querySelector('[data-prp-finish-review="1"]') |
There was a problem hiding this comment.
[perf-fixture 3/100] Question: still correct after host-data-first?
src/modal/hooks/usePrModalHotkeys.ts:607
| ? liveDiffThreadFocused | ||
| : liveConvAnchor.startsWith('review-comment:'); | ||
| // Code-body selection only — thread/file carets must not force file fold | ||
| // (otherwise ← / ⌥F close the file while a thread is focused via ↑↓). |
There was a problem hiding this comment.
[perf-fixture 4/100] Perf-load thread.
- file:
src/modal/hooks/usePrModalHotkeys.ts - line: 1213
| const mentionCandidates = b.mentionCandidates; | ||
| const milestoneAddRef = b.milestoneAddRef; | ||
| const modalSize = b.modalSize; | ||
| const mut = b.mut; |
There was a problem hiding this comment.
[perf-fixture 5/100] Virtualization note.
src/modal/hooks/usePrModalSessionRoute.ts:574
| /** | ||
| * Keep re-requesting conversation nav until focused. | ||
| * Virtual list may miss the first paint when the row is off-window / not | ||
| * yet in the progressive feed — also kick timeline/thread pagination. |
There was a problem hiding this comment.
[perf-fixture 6/100] Slightly longer body so threads are not all one-liners. Used to exercise Diff inline-thread rendering under load.
| creditRefreshThreadLadder(); | ||
| } | ||
| return r; | ||
| }); |
There was a problem hiding this comment.
[perf-fixture 7/100] Scatter comment on src/host/modules/props-build.ts:505.
| const runDiffContextThreadAction = b.runDiffContextThreadAction; | ||
| const runPaletteCommand = b.runPaletteCommand; | ||
| const sampleDiffNav = b.sampleDiffNav; | ||
| const scheduleDiffReviewFilter = b.scheduleDiffReviewFilter; |
There was a problem hiding this comment.
[perf-fixture 18/100] Slightly longer body so threads are not all one-liners. Used to exercise Diff inline-thread rendering under load.
| } | ||
| to { | ||
| opacity: 0.92; | ||
| transform: translateX(32px); |
There was a problem hiding this comment.
[perf-fixture 19/100] Scatter comment on src/modal/views/chrome/ShellLayout.css:350.
| 0 0 0 1.5px var(--prp-bg), | ||
| 0 0 0 2.5px var(--prp-danger); | ||
| } | ||
| .prp-header__meta-stack__item--check-success { |
There was a problem hiding this comment.
[perf-fixture 20/100] Nit: second look at src/modal/views/chrome/ShellLayout.css L699.
| if (hostHasPending) { | ||
| for (const c of nextRc) { | ||
| if (c?.pending && c.id != null) deletedReviewIds.delete(String(c.id)); | ||
| } |
There was a problem hiding this comment.
[perf-fixture 21/100] Question: still correct after host-data-first?
src/modal/lib/composer-attach.ts:338
| ? next.reviewThreads | ||
| : Array.isArray(prev.reviewThreads) | ||
| ? prev.reviewThreads | ||
| : next.reviewThreads; |
There was a problem hiding this comment.
[perf-fixture 22/100] Perf-load thread.
- file:
src/modal/lib/composer-attach.ts - line: 675
enif-lee
left a comment
There was a problem hiding this comment.
Perf fixture batch r1-20 (20 comments). Prefix [perf-fixture].
| isContextThreadReplyFocused, | ||
| isContextThreadCommentActive, | ||
| PRP_CONTEXT_THREAD_TAB_LEAVE, | ||
| scrollChildToMaximizeInScroller, |
There was a problem hiding this comment.
[perf-fixture 23/100] Virtualization note.
src/modal/hooks/useContextThreadActions.ts:333
| const scrollDiffCaretIntoView = b.scrollDiffCaretIntoView; | ||
| const scrollDiffPage = b.scrollDiffPage; | ||
| const scrollDiffThreadUnitIntoView = b.scrollDiffThreadUnitIntoView; | ||
| const scrollFileNavRowIntoView = b.scrollFileNavRowIntoView; |
There was a problem hiding this comment.
[perf-fixture 24/100] Slightly longer body so threads are not all one-liners. Used to exercise Diff inline-thread rendering under load.
| Comment | ||
| </button> | ||
| ) : null} | ||
| </div> |
There was a problem hiding this comment.
[perf-fixture 25/100] Scatter comment on src/modal/views/diff/VirtualDiffRows.tsx:328.
| const qForRow = isSearchMatch ? searchQuery : ''; | ||
|
|
||
| // Leaf store subscription: only this row re-renders when its key changes. | ||
| // Middles stay "middle" under multi extend → no re-render. Override for tests. |
There was a problem hiding this comment.
[perf-fixture 26/100] Nit: second look at src/modal/views/diff/VirtualDiffRows.tsx L655.
| // Yield between chunks (skip after last) | ||
| if (end < n) { | ||
| await yieldToMain(); | ||
| } |
There was a problem hiding this comment.
[perf-fixture 27/100] Question: still correct after host-data-first?
src/modal/lib/search-index.ts:323
| conversationCommentFocused: opts.conversationCommentFocused, | ||
| focusedReviewThread: opts.focusedReviewThread, | ||
| diffThreadFocused, | ||
| hasLineSelection, |
There was a problem hiding this comment.
[perf-fixture 38/100] Nit: second look at src/modal/lib/shortcut-policy-actions.ts L501.
| : pathTarget.page || null; | ||
| const position = | ||
| r.position != null && String(r.position).trim() | ||
| ? String(r.position).trim() |
There was a problem hiding this comment.
[perf-fixture 39/100] Question: still correct after host-data-first?
src/host/modules/host-core-timeline-a.ts:201
| tag === 'SCRIPT' || | ||
| tag === 'STYLE' || | ||
| tag === 'LINK' || | ||
| tag === 'TEMPLATE' || |
There was a problem hiding this comment.
[perf-fixture 40/100] Perf-load thread.
- file:
src/host/modules/host-core-timeline-a.ts - line: 401
| // Real click opens SelectMenu + focuses the control. | ||
| return clickControl(hit.el); | ||
| } | ||
|
|
There was a problem hiding this comment.
[perf-fixture 41/100] Virtualization note.
src/host/modules/list-row-lifecycle.ts:187
| try { | ||
| const d = document.getElementById('command-palette-pjax-container'); | ||
| return Boolean(d?.open); | ||
| } catch { |
There was a problem hiding this comment.
[perf-fixture 42/100] Slightly longer body so threads are not all one-liners. Used to exercise Diff inline-thread rendering under load.
enif-lee
left a comment
There was a problem hiding this comment.
Perf fixture batch r21-40 (20 comments). Prefix [perf-fixture].
| } else { | ||
| return Math.max(ROW_HEIGHT, Math.ceil(m)); | ||
| } | ||
| } |
There was a problem hiding this comment.
[perf-fixture 43/100] Scatter comment on src/modal/components/common/utils.tsx:173.
| */ | ||
| export function highlightCode( | ||
| code: unknown, | ||
| filePath?: unknown, |
There was a problem hiding this comment.
[perf-fixture 44/100] Nit: second look at src/modal/components/common/utils.tsx L345.
|
|
||
| export const useModalStore = create<ModalUiState>((set, get) => ({ | ||
| layoutMode: LAYOUT_CENTERED as LayoutMode, | ||
| diffMode: 'unified', |
There was a problem hiding this comment.
[perf-fixture 45/100] Question: still correct after host-data-first?
src/modal/store/modal-store.ts:139
| ); | ||
| } | ||
| } | ||
| } catch { |
There was a problem hiding this comment.
[perf-fixture 46/100] Perf-load thread.
- file:
src/modal/store/modal-store.ts - line: 277
| | 'checks' | ||
| | 'development'; | ||
|
|
||
| export interface HostLoadStage { |
There was a problem hiding this comment.
[perf-fixture 47/100] Virtualization note.
src/host/host-context.d.ts:20
| let linkedIssues = []; | ||
| const developmentIssues: any[] = []; | ||
| const projects: any[] = []; | ||
| try { |
There was a problem hiding this comment.
[perf-fixture 58/100] Perf-load thread.
- file:
src/fetch/pr-detail.ts - line: 507
| try { | ||
| const j = await res.json(); | ||
| if (j?.message) detail = j.message; | ||
| // Surface field-level validation (common on 422 replies / review comments) |
There was a problem hiding this comment.
[perf-fixture 59/100] Virtualization note.
src/fetch/http.ts:244
| (typeof performance !== 'undefined' && performance.now | ||
| ? performance.now() | ||
| : Date.now()) - t0; | ||
| recordGraphqlCostEntry({ |
There was a problem hiding this comment.
[perf-fixture 60/100] Slightly longer body so threads are not all one-liners. Used to exercise Diff inline-thread rendering under load.
| token, | ||
| { method: 'PATCH', body: { body: nextBody } } | ||
| ); | ||
| } catch (err: any) { |
There was a problem hiding this comment.
[perf-fixture 61/100] Scatter comment on src/fetch/mutations-meta.ts:242.
| token, | ||
| { method: 'POST', body } | ||
| ); | ||
| return { |
There was a problem hiding this comment.
[perf-fixture 62/100] Nit: second look at src/fetch/mutations-meta.ts L483.
enif-lee
left a comment
There was a problem hiding this comment.
Perf fixture batch r41-50 (10 comments). Prefix [perf-fixture].
| } | ||
| } | ||
| } | ||
| }`; |
There was a problem hiding this comment.
[perf-fixture 63/100] Question: still correct after host-data-first?
src/fetch/timeline-items.ts:220
| value: { | ||
| ...base, | ||
| event: 'merged', | ||
| commitId: node.commit?.oid || null, |
There was a problem hiding this comment.
[perf-fixture 64/100] Perf-load thread.
- file:
src/fetch/timeline-items.ts - line: 439
| body.appendChild( | ||
| el( | ||
| 'p', | ||
| 'prp-onboarding__hint prp-onboarding__hint--pulse', |
There was a problem hiding this comment.
[perf-fixture 65/100] Virtualization note.
src/onboarding-ui.ts:803
| inset: 0; | ||
| /* Soft dim — match modal shell (no heavy wash / blur that reads as opaque) */ | ||
| background: rgba(1, 4, 9, 0.28); | ||
| -webkit-backdrop-filter: none; |
There was a problem hiding this comment.
[perf-fixture 66/100] Slightly longer body so threads are not all one-liners. Used to exercise Diff inline-thread rendering under load.
| const name = document.createElement('span'); | ||
| name.className = 'host-name'; | ||
| name.textContent = row.host; | ||
| name.title = row.host; |
There was a problem hiding this comment.
[perf-fixture 67/100] Scatter comment on src/popup.ts:500.
| ...patchObj, | ||
| }); | ||
| // Pin uiLanguage if the patch set it (guards against any normalize slip) | ||
| if (Object.prototype.hasOwnProperty.call(patchObj, 'uiLanguage')) { |
There was a problem hiding this comment.
[perf-fixture 68/100] Nit: second look at src/storage.ts L421.
| async fetchPrTimelineItemsPage(owner: any, repo: any, number: any, opts: any = {}) { | ||
| // Prefer TIMELINE_EVENTS + graphql mode (long-stable SW route). Also try | ||
| // dedicated TIMELINE_ITEMS type. Never treat REST {events} as a GraphQL page. | ||
| const payload = { |
There was a problem hiding this comment.
[perf-fixture 70/100] Perf-load thread.
- file:
src/content-bridge/bridge-fetch-part-b.ts - line: 351
| /** | ||
| * Normalize key for Option/Shift combos (macOS remaps key → glyphs). | ||
| * Prefer KeyboardEvent.code for physical J/K/digits when alt or shift held. | ||
| */ |
There was a problem hiding this comment.
[perf-fixture 71/100] Virtualization note.
src/pulls-palette-actions.ts:349
| err.status = res?.status; | ||
| throw err; | ||
| } | ||
| return res.result; |
There was a problem hiding this comment.
[perf-fixture 72/100] Slightly longer body so threads are not all one-liners. Used to exercise Diff inline-thread rendering under load.
enif-lee
left a comment
There was a problem hiding this comment.
Perf fixture batch r51-60 (10 comments). Prefix [perf-fixture].
| id: 'peer-rd', | ||
| filterId: 'rd', | ||
| action: 'applyFilter', | ||
| title: 'Ready (non-draft)', |
There was a problem hiding this comment.
[perf-fixture 73/100] Scatter comment on src/pulls-palette-core.ts:334.
| } | ||
| const page = await PRTreeFetch.fetchReviewThreadsPage( | ||
| message.owner, | ||
| message.repo, |
There was a problem hiding this comment.
[perf-fixture 74/100] Nit: second look at src/background/sw-handle-a.ts L332.
| return name ? { name, color: 'ededed', description: '' } : null; | ||
| } | ||
| const name = String(raw.name || raw.label || '').trim(); | ||
| if (!name) return null; |
There was a problem hiding this comment.
[perf-fixture 75/100] Question: still correct after host-data-first?
src/dom.ts:621
| font-size: 11px; | ||
| } | ||
| .host-list button { | ||
| flex-shrink: 0; |
There was a problem hiding this comment.
[perf-fixture 76/100] Perf-load thread.
- file:
src/popup.html - line: 369
| } catch { | ||
| /* ignore */ | ||
| } | ||
| return false; |
There was a problem hiding this comment.
[perf-fixture 77/100] Virtualization note.
src/pr-list-focus.ts:320
| else void enableFeatures(); | ||
| return false; | ||
| } | ||
| if (message?.type === 'PR_TREE_RATE_LIMIT_CHANGED') { |
There was a problem hiding this comment.
[perf-fixture 78/100] Slightly longer body so threads are not all one-liners. Used to exercise Diff inline-thread rendering under load.
| if (area?.get && area?.set) { | ||
| const prevRaw = await new Promise((resolve) => { | ||
| area.get(['extensionPrefs'], (result: any) => { | ||
| resolve(result?.extensionPrefs); |
There was a problem hiding this comment.
[perf-fixture 79/100] Scatter comment on src/content-bridge/bridge-prefs.ts:243.
| */ | ||
| function stripTrailingSlashes(url: any) { | ||
| return String(url || '').trim().replace(/\/+$/, ''); | ||
| } |
There was a problem hiding this comment.
[perf-fixture 80/100] Nit: second look at src/github-endpoints.ts L228.
| await ensureRateLimitMem(); | ||
| } catch { | ||
| /* proceed if storage cold */ | ||
| } |
There was a problem hiding this comment.
[perf-fixture 81/100] Question: still correct after host-data-first?
src/background/sw-rate-limit.ts:207
| toggleButton.setMode(enabled ? 'tree' : 'original'); | ||
| } catch { | ||
| /* ignore */ | ||
| } |
There was a problem hiding this comment.
[perf-fixture 82/100] Perf-load thread.
- file:
src/content-bootstrap.ts - line: 255
enif-lee
left a comment
There was a problem hiding this comment.
Perf fixture batch r61-70 (10 comments). Prefix [perf-fixture].
| keys.push(s[0]); | ||
| s = s.slice(1); | ||
| } | ||
| if (s) { |
There was a problem hiding this comment.
[perf-fixture 83/100] Virtualization note.
src/onboarding-diff-demo.ts:145
| 'a[href*="/pull/"], a[id^="issue_"], .js-issue-row, [data-hovercard-type="pull_request"]' | ||
| ); | ||
| // Unique-ish: count rows preferred | ||
| const rows = doc.querySelectorAll( |
There was a problem hiding this comment.
[perf-fixture 84/100] Slightly longer body so threads are not all one-liners. Used to exercise Diff inline-thread rendering under load.
| }); | ||
| } | ||
| } catch { | ||
| /* not registered yet — fine */ |
There was a problem hiding this comment.
[perf-fixture 85/100] Scatter comment on src/background/sw-enterprise.ts:105.
| const want = String(slot || '').toLowerCase(); | ||
| if (!want) return false; | ||
| const code = String(opts.code || ''); | ||
| if (/^[1-9]$/.test(want)) { |
There was a problem hiding this comment.
[perf-fixture 86/100] Nit: second look at src/onboarding-hotkeys.ts L91.
| EDIT_ISSUE_COMMENT: 'PR_TREE_EDIT_ISSUE_COMMENT', | ||
| EDIT_REVIEW_COMMENT: 'PR_TREE_EDIT_REVIEW_COMMENT', | ||
| REQUEST_REVIEWERS: 'PR_TREE_REQUEST_REVIEWERS', | ||
| REMOVE_REVIEWERS: 'PR_TREE_REMOVE_REVIEWERS', |
There was a problem hiding this comment.
[perf-fixture 87/100] Question: still correct after host-data-first?
src/sw-messages.ts:57
| @@ -62,9 +62,9 @@ function buildPrTree(prs) { | |||
| childrenByParentHead.get(parent.headRef).push(pr); | |||
| } | |||
|
|
|||
| function buildNode(pr) { | |||
| function buildNode(pr: any) { | |||
| const childPrs = childrenByParentHead.get(pr.headRef) || []; | |||
There was a problem hiding this comment.
[perf-fixture 88/100] Perf-load thread.
- file:
src/tree.ts - line: 66
| 'src/modal/pure/detail-cache.js', | ||
| 'src/modal/pure/detail-merge.js', | ||
| 'src/modal/pure/detail-store.js', | ||
| 'src/modal/pure/load-progress.js', |
There was a problem hiding this comment.
[perf-fixture 89/100] Virtualization note.
src/content-scripts-list.ts:22
| PRTree?: any; | ||
| PRTreeDOM?: any; | ||
| PRTreeFetch?: any; | ||
| PRTreeStorage?: any; |
There was a problem hiding this comment.
[perf-fixture 90/100] Slightly longer body so threads are not all one-liners. Used to exercise Diff inline-thread rendering under load.
| @@ -0,0 +1,5 @@ | |||
|
|
|||
| declare var PRTreeFetch: any; | |||
| declare var PRGithubEndpoints: any; | |||
There was a problem hiding this comment.
[perf-fixture 91/100] Scatter comment on src/background-shims.d.ts:3.
| @@ -0,0 +1,5 @@ | |||
| /** Barrel onboarding */ | |||
| export * from './onboarding-hotkeys'; | |||
| export * from './onboarding-diff-demo'; | |||
There was a problem hiding this comment.
[perf-fixture 92/100] Nit: second look at src/onboarding.ts L3.
enif-lee
left a comment
There was a problem hiding this comment.
Perf fixture batch r71-78 (8 comments). Prefix [perf-fixture].
| @@ -0,0 +1,4 @@ | |||
| declare var module: any; | |||
| declare var globalThis: any; | |||
| declare var chrome: any; | |||
There was a problem hiding this comment.
[perf-fixture 93/100] Question: still correct after host-data-first?
src/entries-shim.d.ts:3
| @@ -0,0 +1,3 @@ | |||
| /** Barrel */ | |||
| export * from './pulls-palette-core'; | |||
There was a problem hiding this comment.
[perf-fixture 94/100] Perf-load thread.
- file:
src/pulls-palette.ts - line: 2
| const merge = | ||
| host.querySelector('[data-search-anchor="merge"]') || | ||
| host.querySelector('.prp-merge-box-focus-host'); | ||
| const comment = |
There was a problem hiding this comment.
[perf-fixture 95/100] Virtualization note.
tests/e2e/lib/harness.mjs:910
| for (const it of items) { | ||
| const t = ( | ||
| it.querySelector('.prp-sselect-item__label')?.textContent || | ||
| it.textContent || |
There was a problem hiding this comment.
[perf-fixture 96/100] Slightly longer body so threads are not all one-liners. Used to exercise Diff inline-thread rendering under load.
| `file header selection missing: ${JSON.stringify({ sel, hdr })}` | ||
| ); | ||
| // Leave hover so dock is not hover-revealed without Opt | ||
| evalInPage(` |
There was a problem hiding this comment.
[perf-fixture 97/100] Scatter comment on tests/e2e/features/selection.mjs:697.
| ); | ||
| expect(cleaned.map((c: any) => Number(c.id))).toEqual([42]); | ||
| expect(cleaned.some((c: any) => c.pending)).toBe(false); | ||
| expect(detailHasViewerPending(network)).toBe(false); |
There was a problem hiding this comment.
[perf-fixture 98/100] Nit: second look at tests/stale-local-review-drop.rstest.ts L401.
| ).toBe(true); | ||
| }); | ||
|
|
||
| test('existing PENDING + asPending never POSTs REST /comments (even if create races 422)', async () => { |
There was a problem hiding this comment.
[perf-fixture 99/100] Question: still correct after host-data-first?
tests/pending-add-comment-422.rstest.ts:353
| expect(shellN).toBeGreaterThan(100); | ||
| expect(cvN).toBeGreaterThan(100); | ||
| }); | ||
|
|
There was a problem hiding this comment.
[perf-fixture 100/100] Perf-load thread.
- file:
tests/architecture-gates.rstest.ts - line: 288
Why this PR exists
Largest-PR fixture for pr+ load testing: Conversation first paint, Diff virtualization, and ~100 inline review threads scattered across the tree.
Open from the pulls list (
?prp_page=conversation&prp_number=25) or the native Files tab. Safe to leave open — not intended to merge.Shape
Base is
demo/d← headrefactor/phase-9-large-sot-split(82f1cda). Threads are tagged[perf-fixture]so they can be grepped or removed later.Suggested exercises
j/k, open several[perf-fixture]threads, expand a resolved/unresolved mix./pullstwice — title/body should still first-paint from cache.Checklist
[perf-fixture])Sample snippet (ignore — fixture only)