changes
major changes:
- add a compact Commits link to the repository file browser header
- add a dedicated commits history page for each repository ref
- group commits by date and show author avatars, messages, short SHAs, and relative times
- load older commits incrementally with infinite scrolling and a load-more fallback.
- add cached, paginated GitHub commit history fetching
minor tweak:
- make command palette items extend flush to the dialog edges
- allow searching for any existing repository in the command palette
testing
pnpm --filter dashboard check-types ✅pnpm exec biome check --write ... ✅
Screenshots
Summary by CodeRabbit
-
New Features
- Added a protected commits page with grouped commits, infinite pagination, prefetching, and a dedicated route; file views and latest-commit bar now link to commits history (path-scoped, customizable label).
- Command palette now returns repository results for quick repo navigation.
-
Style
- Improved command palette spacing and updated commits-tab active styling and icon.
-
Chores
- Increased dev server Node memory for local dashboard runs.
Activity
18Actionable comments posted: 4
🧹 Nitpick comments (1)
apps/dashboard/src/lib/github.functions.ts (1)
9591-9591: Use the list cache tier for paginated commits.Line 9591 uses
githubCachePolicy.detail.staleTimeMs; this endpoint is a time-sensitive list and should likely usegithubCachePolicy.list.staleTimeMsfor fresher history updates.♻️ Suggested change
- freshForMs: githubCachePolicy.detail.staleTimeMs, + freshForMs: githubCachePolicy.list.staleTimeMs,🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/dashboard/src/lib/github.functions.ts` at line 9591, Replace the detail cache tier with the list cache tier for this paginated commits response: change the freshForMs assignment from githubCachePolicy.detail.staleTimeMs to githubCachePolicy.list.staleTimeMs so the commits list uses the shorter/fresher list stale time; update the object that sets freshForMs (the one referencing githubCachePolicy.detail.staleTimeMs) to reference githubCachePolicy.list.staleTimeMs instead.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@apps/dashboard/package.json`:
- Line 10: The dev and build npm scripts in package.json use POSIX-only env
assignment (NODE_OPTIONS='...') which breaks on Windows; install cross-env as a
dev dependency and update the "dev" and "build" script values to prefix
NODE_OPTIONS with cross-env (i.e., use cross-env NODE_OPTIONS=... before vite
build/dev commands) so the environment variable is set in a cross-platform way;
modify the "dev" and "build" script entries in package.json accordingly and add
cross-env to devDependencies.
In `@apps/dashboard/src/components/repo/repo-commits-list.tsx`:
- Around line 129-135: The repo header backlink drops ref context; update the
Link in RepoCommitsList to include the currentRef so users stay on the same
branch/tag. Change the Link target and params to pass currentRef (e.g. include a
ref param or use the route segment that represents ref) by updating the Link's
to and params to something like params={{ owner, repo, ref: currentRef }} (or
the route's ref segment name) and ensure you reference the currentRef variable
used in this component so the backlink preserves the ref context.
- Around line 121-122: Don't unconditionally throw commitsQuery.error in the
RepoCommitsList component; that replaces existing pages on a transient "load
more" failure. Change the error handling so you still throw overviewQuery.error,
but only throw commitsQuery.error when it's a non-pagination failure (e.g.,
commitsQuery.isError && !commitsQuery.isFetchNextPageError). Remove the
unconditional throw of commitsQuery.error and instead surface
commitsQuery.isFetchNextPageError in the load-more UI (near the load-more
controls) with a retry affordance that calls commitsQuery.fetchNextPage so users
can retry without losing already-loaded commit pages.
In `@apps/dashboard/src/lib/github.functions.ts`:
- Around line 9575-9624: The handler for getRepoCommits currently swallows all
errors by appending .catch(() => ({ commits: [], nextPage: null })) to the
getCachedGitHubRequest call; instead remove that blanket catch and only handle
expected "no data" cases (e.g., 404/not-found) explicitly — let other errors
(rate limit, auth, network) propagate so they surface to the caller. Concretely:
in getRepoCommits, eliminate the final .catch(...) on the getCachedGitHubRequest
invocation and, if you must special-case a GitHub 404, catch and return an empty
commits page only when the error status/code indicates not found; otherwise
rethrow the error so callers and monitoring can detect failures. Ensure changes
reference getRepoCommits, getCachedGitHubRequest, and the mapData path for
locating the code to update.
---
Nitpick comments:
In `@apps/dashboard/src/lib/github.functions.ts`:
- Line 9591: Replace the detail cache tier with the list cache tier for this
paginated commits response: change the freshForMs assignment from
githubCachePolicy.detail.staleTimeMs to githubCachePolicy.list.staleTimeMs so
the commits list uses the shorter/fresher list stale time; update the object
that sets freshForMs (the one referencing githubCachePolicy.detail.staleTimeMs)
to reference githubCachePolicy.list.staleTimeMs instead.🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 5b2d2656-14ec-41fe-a397-f3e53451a39a
📥 Commits
Reviewing files that changed from the base of the PR and between ab164025aff95b9e81cf9e986363c11d444784f4 and dec8b7af4ef7a1f8d8c7fe11ddd3ddf141119fd1.
📒 Files selected for processing (14)
apps/dashboard/package.jsonapps/dashboard/src/components/layouts/dashboard-tabs.tsxapps/dashboard/src/components/navigation/command-palette.tsxapps/dashboard/src/components/repo/code-explorer-toolbar.tsxapps/dashboard/src/components/repo/latest-commit-bar.tsxapps/dashboard/src/components/repo/repo-commits-list.tsxapps/dashboard/src/lib/github-revalidation.tsapps/dashboard/src/lib/github.functions.tsapps/dashboard/src/lib/github.query.tsapps/dashboard/src/lib/github.types.tsapps/dashboard/src/lib/query-client.tsxapps/dashboard/src/lib/tab-store.tsapps/dashboard/src/routeTree.gen.tsapps/dashboard/src/routes/_protected/$owner/$repo/commits.$.tsx
🧹 Nitpick comments (1)
apps/dashboard/src/components/repo/code-file-view.tsx (1)
540-548: Consider centralizing commits-link construction.This URL-param composition now exists in multiple components; extracting a small shared helper/component would reduce future drift (labeling,
_splatshape, aria text).🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/dashboard/src/components/repo/code-file-view.tsx` around lines 540 - 548, The commits link construction is duplicated; extract it into a small shared helper or component (e.g., a buildCommitsLink(owner, repo, currentRef, path) utility or a CommitsLink React component) and replace the inline Link usage in code-file-view (the Link with params={{ owner, repo, _splat: `${currentRef}/${path}` }}, aria-label="View commits", and visible label "History"). The shared helper/component should return the same route shape (to="/$owner/$repo/commits/$" and _splat `${currentRef}/${path}`) and preserve aria-label and styling props so all callers (current and other components) use the single source to avoid drift.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@apps/dashboard/src/components/repo/code-file-view.tsx`:
- Around line 540-548: The commits link construction is duplicated; extract it
into a small shared helper or component (e.g., a buildCommitsLink(owner, repo,
currentRef, path) utility or a CommitsLink React component) and replace the
inline Link usage in code-file-view (the Link with params={{ owner, repo,
_splat: `${currentRef}/${path}` }}, aria-label="View commits", and visible label
"History"). The shared helper/component should return the same route shape
(to="/$owner/$repo/commits/$" and _splat `${currentRef}/${path}`) and preserve
aria-label and styling props so all callers (current and other components) use
the single source to avoid drift.ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 6b02b90f-e4a9-4e74-9f11-baaf774e0580
📥 Commits
Reviewing files that changed from the base of the PR and between f76217ae2d27416643f094a43f47fbb6dd5429ff and 8dee5a6dfd4d3c93359afc3ee658342260122dc1.
📒 Files selected for processing (5)
apps/dashboard/src/components/layouts/dashboard-tabs.tsxapps/dashboard/src/components/repo/code-file-view.tsxapps/dashboard/src/components/repo/folder-view.tsxapps/dashboard/src/components/repo/latest-commit-bar.tsxapps/dashboard/src/components/repo/repo-commits-list.tsx
🚧 Files skipped from review as they are similar to previous changes (3)
- apps/dashboard/src/components/repo/folder-view.tsx
- apps/dashboard/src/components/repo/repo-commits-list.tsx
- apps/dashboard/src/components/layouts/dashboard-tabs.tsx
♻️ Duplicate comments (1)
apps/dashboard/src/lib/github.functions.ts (1)
9672-9698: ⚠️ Potential issue | 🟠 MajorUse
clampPage/clampPerPagehere.The current math still lets
NaN,Infinity, and fractional values through, sopage/perPagecan become invalid in both the cache params and thelistCommitscall.🛠️ Proposed fix
- const perPage = Math.min(Math.max(data.perPage ?? 15, 1), 30); - const page = Math.max(data.page ?? 1, 1); + const perPage = Math.min(clampPerPage(data.perPage, 15), 30); + const page = clampPage(data.page);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/dashboard/src/lib/github.functions.ts` around lines 9672 - 9698, Replace the ad-hoc Math.min/Math.max sanitization for perPage and page with the existing clampPerPage and clampPage helpers so NaN, Infinity and fractional values are normalized; call clampPerPage(data.perPage) to produce perPage and clampPage(data.page) to produce page and use those sanitized values in the params passed to getCachedGitHubRequest and in the context.octokit.rest.repos.listCommits call (keeping the same namespace/signal keys like githubRevalidationSignalKeys.repoCode(data) and freshForMs = githubCachePolicy.detail.staleTimeMs).
🧹 Nitpick comments (3)
apps/dashboard/src/components/repo/repo-commits-list.tsx (1)
303-305: Use a more descriptive avatar alt label.Line 304 can be slightly clearer for assistive tech by labeling this as an avatar.
🪄 Small accessibility tweak
- alt={commit.author.login} + alt={`${commit.author.login} avatar`}🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/dashboard/src/components/repo/repo-commits-list.tsx` around lines 303 - 305, The avatar image's alt text (in repo-commits-list.tsx where src={commit.author.avatarUrl}) is currently just the username; update the alt prop to a more descriptive label for assistive tech such as "Avatar of {commit.author.login}" or "{commit.author.login} avatar" so screen readers clearly announce that this is an avatar image.apps/dashboard/src/lib/command-palette/use-command-items.ts (1)
208-225: Extract repository item construction into a shared helper.Line 208 duplicates the same repo-to-
CommandItemmapping used in Line 95, which increases drift risk when metadata/keywords change.♻️ Proposed refactor
+function buildRepoCommandItem(repo: UserRepoSummary): CommandItem { + return { + id: `repo:${repo.id}`, + label: repo.fullName, + group: "Repositories", + icon: CodeIcon, + keywords: [repo.name, repo.owner, repo.language ?? ""].filter(Boolean), + action: { + type: "navigate", + to: `/${repo.owner}/${repo.name}`, + }, + meta: { + language: repo.language, + stars: repo.stars, + updatedAt: repo.updatedAt ?? undefined, + }, + }; +} ... if (repos) { for (const repo of repos) { - dynamicItems.push({ - id: `repo:${repo.id}`, - label: repo.fullName, - group: "Repositories", - icon: CodeIcon, - keywords: [repo.name, repo.owner, repo.language ?? ""].filter(Boolean), - action: { - type: "navigate", - to: `/${repo.owner}/${repo.name}`, - }, - meta: { - language: repo.language, - stars: repo.stars, - updatedAt: repo.updatedAt ?? undefined, - }, - }); + dynamicItems.push(buildRepoCommandItem(repo)); } } ... for (const repo of result.repos) { - items.push({ - id: `repo:${repo.id}`, - label: repo.fullName, - group: "Repositories", - icon: CodeIcon, - keywords: [repo.name, repo.owner, repo.language ?? ""].filter(Boolean), - action: { - type: "navigate", - to: `/${repo.owner}/${repo.name}`, - }, - meta: { - language: repo.language, - stars: repo.stars, - updatedAt: repo.updatedAt ?? undefined, - }, - }); + items.push(buildRepoCommandItem(repo)); }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/dashboard/src/lib/command-palette/use-command-items.ts` around lines 208 - 225, Extract the duplicated repo-to-CommandItem mapping into a single helper (e.g., createRepoCommandItem or buildRepoCommandItem) and use it wherever repos are mapped to command items (the places that currently do items.push({...}) for result.repos). The helper should accept the repo object and return an object with id: `repo:${repo.id}`, label: repo.fullName, group: "Repositories", icon: CodeIcon, keywords: [repo.name, repo.owner, repo.language ?? ""].filter(Boolean), action: { type: "navigate", to: `/${repo.owner}/${repo.name}` }, and meta: { language: repo.language, stars: repo.stars, updatedAt: repo.updatedAt ?? undefined }; replace both in-file mappings with calls to this helper to avoid duplication and keep metadata/keywords consistent.apps/dashboard/src/lib/github.functions.ts (1)
444-469: Extract the shared repo-to-summary projection.
mapGithubSearchRepoToUserRepoSummarynow duplicates almost all ofmapGithubRestRepoToUserRepoSummary. Any future field tweak here is easy to miss in one path and not the other.♻️ Suggested shape
+function mapRepoToUserRepoSummary(repo: { + id?: number; + name?: string | null; + full_name?: string | null; + description?: string | null; + stargazers_count?: number | null; + forks_count?: number | null; + language?: string | null; + updated_at?: string | null; + created_at?: string | null; + private?: boolean | null; + visibility?: string | null; + html_url?: string | null; + owner?: { login?: string | null } | null; +}): UserRepoSummary { + const visibility: UserRepoSummary["visibility"] = + repo.visibility === "internal" + ? "internal" + : repo.visibility === "private" || repo.private + ? "private" + : "public"; + + return { + id: repo.id ?? 0, + name: repo.name ?? "", + fullName: repo.full_name ?? "", + description: repo.description ?? null, + stars: repo.stargazers_count ?? 0, + forks: repo.forks_count ?? 0, + language: repo.language ?? null, + updatedAt: repo.updated_at ?? null, + createdAt: repo.created_at ?? null, + isPrivate: Boolean(repo.private), + visibility, + url: repo.html_url ?? "", + owner: repo.owner?.login ?? "", + }; +} + function mapGithubRestRepoToUserRepoSummary( repo: AuthenticatedUserRepo | ListForUserRepo | GetRepoItem, ): UserRepoSummary { - ... + return mapRepoToUserRepoSummary(repo); } function mapGithubSearchRepoToUserRepoSummary( repo: SearchRepoItem, ): UserRepoSummary { - ... + return mapRepoToUserRepoSummary(repo); }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/dashboard/src/lib/github.functions.ts` around lines 444 - 469, Duplicate repo-to-summary logic exists between mapGithubSearchRepoToUserRepoSummary and mapGithubRestRepoToUserRepoSummary; extract the shared projection into a single helper used by both. Create a helper (e.g., buildUserRepoSummaryBase or projectRepoToSummaryBase) that accepts a repo-like object and returns the common fields (id, name, fullName, description, stars, forks, language, updatedAt, createdAt, isPrivate, url, owner and visibility resolution logic if it is identical); then replace the body of mapGithubSearchRepoToUserRepoSummary and mapGithubRestRepoToUserRepoSummary to call that helper and apply any mapper-specific overrides. Ensure you reference and use the existing symbols mapGithubSearchRepoToUserRepoSummary and mapGithubRestRepoToUserRepoSummary so callers are unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Duplicate comments:
In `@apps/dashboard/src/lib/github.functions.ts`:
- Around line 9672-9698: Replace the ad-hoc Math.min/Math.max sanitization for
perPage and page with the existing clampPerPage and clampPage helpers so NaN,
Infinity and fractional values are normalized; call clampPerPage(data.perPage)
to produce perPage and clampPage(data.page) to produce page and use those
sanitized values in the params passed to getCachedGitHubRequest and in the
context.octokit.rest.repos.listCommits call (keeping the same namespace/signal
keys like githubRevalidationSignalKeys.repoCode(data) and freshForMs =
githubCachePolicy.detail.staleTimeMs).
---
Nitpick comments:
In `@apps/dashboard/src/components/repo/repo-commits-list.tsx`:
- Around line 303-305: The avatar image's alt text (in repo-commits-list.tsx
where src={commit.author.avatarUrl}) is currently just the username; update the
alt prop to a more descriptive label for assistive tech such as "Avatar of
{commit.author.login}" or "{commit.author.login} avatar" so screen readers
clearly announce that this is an avatar image.
In `@apps/dashboard/src/lib/command-palette/use-command-items.ts`:
- Around line 208-225: Extract the duplicated repo-to-CommandItem mapping into a
single helper (e.g., createRepoCommandItem or buildRepoCommandItem) and use it
wherever repos are mapped to command items (the places that currently do
items.push({...}) for result.repos). The helper should accept the repo object
and return an object with id: `repo:${repo.id}`, label: repo.fullName, group:
"Repositories", icon: CodeIcon, keywords: [repo.name, repo.owner, repo.language
?? ""].filter(Boolean), action: { type: "navigate", to:
`/${repo.owner}/${repo.name}` }, and meta: { language: repo.language, stars:
repo.stars, updatedAt: repo.updatedAt ?? undefined }; replace both in-file
mappings with calls to this helper to avoid duplication and keep
metadata/keywords consistent.
In `@apps/dashboard/src/lib/github.functions.ts`:
- Around line 444-469: Duplicate repo-to-summary logic exists between
mapGithubSearchRepoToUserRepoSummary and mapGithubRestRepoToUserRepoSummary;
extract the shared projection into a single helper used by both. Create a helper
(e.g., buildUserRepoSummaryBase or projectRepoToSummaryBase) that accepts a
repo-like object and returns the common fields (id, name, fullName, description,
stars, forks, language, updatedAt, createdAt, isPrivate, url, owner and
visibility resolution logic if it is identical); then replace the body of
mapGithubSearchRepoToUserRepoSummary and mapGithubRestRepoToUserRepoSummary to
call that helper and apply any mapper-specific overrides. Ensure you reference
and use the existing symbols mapGithubSearchRepoToUserRepoSummary and
mapGithubRestRepoToUserRepoSummary so callers are unchanged.ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 8c59c7a1-1093-410b-9b90-66c1d8bac972
📥 Commits
Reviewing files that changed from the base of the PR and between 8dee5a6dfd4d3c93359afc3ee658342260122dc1 and 73a2d9aa939b5ce41f182187466492ab54fee95c.
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (5)
apps/dashboard/package.jsonapps/dashboard/src/components/repo/repo-commits-list.tsxapps/dashboard/src/lib/command-palette/use-command-items.tsapps/dashboard/src/lib/github.functions.tsapps/dashboard/src/lib/github.types.ts
🚧 Files skipped from review as they are similar to previous changes (2)
- apps/dashboard/package.json
- apps/dashboard/src/lib/github.types.ts
@claude review
@claude review
whys this stuck
this looks nice, can we size down avatar?
also remove skeleton as load more state, just add spinner in bottom side.
Actionable comments posted: 4
🧹 Nitpick comments (1)
apps/dashboard/src/lib/github.functions.ts (1)
418-469: Extract a shared repo-summary mapper.These two functions now duplicate nearly the entire
UserRepoSummarymapping. A small shared helper would keep the REST and search shapes from drifting the next time this model changes.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/dashboard/src/lib/github.functions.ts` around lines 418 - 469, Both mapGithubRestRepoToUserRepoSummary and mapGithubSearchRepoToUserRepoSummary duplicate the same mapping logic; extract a shared helper (e.g., buildUserRepoSummaryFromRaw) that takes a minimal common input (an object with id, name, full_name, description, stargazers_count, forks_count, language, updated_at, created_at, private, visibility, html_url and owner?.login) and returns a UserRepoSummary using the existing visibility logic and field fallbacks; then have mapGithubRestRepoToUserRepoSummary (for AuthenticatedUserRepo | ListForUserRepo | GetRepoItem) and mapGithubSearchRepoToUserRepoSummary (for SearchRepoItem) normalize their shapes into that helper (taking care that owner may be optional in SearchRepoItem and repo.private may be absent) and delegate the final mapping to it.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@apps/dashboard/src/components/repo/repo-commits-list.tsx`:
- Around line 69-71: The current useMemo flattens pages directly
(commitsQuery.data?.pages.flatMap(...)) which can produce duplicate commit SHAs
when page boundaries shift; change the useMemo that defines commits to merge
pages while de-duplicating by commit.sha (e.g., iterate pages in order and add
commits to a Map or Set keyed by sha, keeping the first occurrence to preserve
order) so the resulting commits array contains unique SHAs and avoids duplicate
React keys.
- Around line 141-143: The current unconditional throw of overviewQuery.error
causes an unnecessary error boundary when cached data exists; change the logic
around overviewQuery to only throw overviewQuery.error if overviewQuery.data is
null/undefined (i.e., no cached overview). Specifically update the check using
overviewQuery, overviewQuery.error and overviewQuery.data so that you only
rethrow the error when there is no overviewQuery.data, while keeping the
existing commitsQuery.isError handling as-is.
In `@apps/dashboard/src/lib/github.functions.ts`:
- Around line 9672-9673: Replace the manual Math.min/Math.max clamping with the
project's clamp helpers to correctly handle NaN, Infinity and float truncation:
use clampPerPage(data.perPage) for perPage and clampPage(data.page) for page
instead of Math.min/Math.max, since identityValidator does no runtime checks and
malformed query params can leak into Octokit and cache keys; update the
assignment sites where perPage and page are set (currently using data.perPage
and data.page) to call clampPerPage and clampPage respectively.
- Around line 9721-9724: The catch block handling commit listing currently only
checks for RequestError with status === 404; expand this to also treat status
=== 409 (Conflict) as a non-error case so empty repositories return { commits:
[], nextPage: null }. Update the catch logic that references RequestError and
error.status to test for (error.status === 404 || error.status === 409) and
return the empty result for both statuses, leaving other errors to rethrow or
propagate unchanged.
---
Nitpick comments:
In `@apps/dashboard/src/lib/github.functions.ts`:
- Around line 418-469: Both mapGithubRestRepoToUserRepoSummary and
mapGithubSearchRepoToUserRepoSummary duplicate the same mapping logic; extract a
shared helper (e.g., buildUserRepoSummaryFromRaw) that takes a minimal common
input (an object with id, name, full_name, description, stargazers_count,
forks_count, language, updated_at, created_at, private, visibility, html_url and
owner?.login) and returns a UserRepoSummary using the existing visibility logic
and field fallbacks; then have mapGithubRestRepoToUserRepoSummary (for
AuthenticatedUserRepo | ListForUserRepo | GetRepoItem) and
mapGithubSearchRepoToUserRepoSummary (for SearchRepoItem) normalize their shapes
into that helper (taking care that owner may be optional in SearchRepoItem and
repo.private may be absent) and delegate the final mapping to it.🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 02ed296e-f4d1-4124-bfec-a6a102eb394d
📥 Commits
Reviewing files that changed from the base of the PR and between 73a2d9aa939b5ce41f182187466492ab54fee95c and 032fceb0b4cf22c90b8555b12ff1420529c41998.
📒 Files selected for processing (7)
apps/dashboard/src/components/pulls/detail/pull-detail-header.tsxapps/dashboard/src/components/repo/code-file-view.tsxapps/dashboard/src/components/repo/commits-link.tsxapps/dashboard/src/components/repo/latest-commit-bar.tsxapps/dashboard/src/components/repo/repo-commits-list.tsxapps/dashboard/src/lib/github.functions.tsapps/dashboard/src/lib/protected-auth-cache.ts
✅ Files skipped from review due to trivial changes (2)
- apps/dashboard/src/components/pulls/detail/pull-detail-header.tsx
- apps/dashboard/src/lib/protected-auth-cache.ts
📝 Walkthrough
Walkthrough
Adds a protected "commits" splat route and UI with an infinite, paginated commits list, server fetcher and query keys/options, types and tab-store updates for "commits"; integrates path-scoped commit history into file/folder views and latest-commit bar; several UI, export, and package script tweaks.
Changes
apps/dashboard/src/routes/_protected/$owner/$repo/commits.$.tsx,apps/dashboard/src/routeTree.gen.ts_splattoref/path, prefetches commits, and wire generated route typings.apps/dashboard/src/components/repo/repo-commits-list.tsx,apps/dashboard/src/components/repo/commits-link.tsx,apps/dashboard/src/components/repo/latest-commit-bar.tsxRepoCommitsPage,CommitsLink, and extendLatestCommitBarto accept optionalpathandhistoryLabel; add UI for paginated commits, grouping, skeletons, sentinel load-more.apps/dashboard/src/components/repo/code-file-view.tsx,apps/dashboard/src/components/repo/folder-view.tsxcurrentRef/pathto file commit bar;FolderViewsuppliespathandhistoryLabel="History".apps/dashboard/src/lib/github.functions.ts,apps/dashboard/src/lib/github.query.ts,apps/dashboard/src/lib/github.types.tsgetRepoCommits(paginated, caches, maps authors); addgithubQueryKeys.repo.commitsandgithubRepoCommitsQueryOptions; introduceRepoCommitSummaryandRepoCommitsPagetypes; extend command-palette search to include repos.apps/dashboard/src/lib/tab-store.ts,apps/dashboard/src/lib/query-client.tsx,apps/dashboard/src/lib/github-revalidation.ts"commits"TabType; makematchesTabQueryrecognize commits-related repo keys; treatcommitslikerepofor revalidation signal keys.apps/dashboard/src/lib/command-palette/use-command-items.ts,apps/dashboard/src/components/navigation/command-palette.tsxapps/dashboard/src/components/layouts/dashboard-tabs.tsx,apps/dashboard/src/components/repo/code-explorer-toolbar.tsxtab.type === "commits"to commit icon; switch active detection todata-active; exportBranchSelector.apps/dashboard/package.json,apps/dashboard/src/lib/protected-auth-cache.tscross-envto set NODE_OPTIONS in scripts and add devDependency; add trailing newline in protected-auth-cache.apps/dashboard/src/components/pulls/detail/pull-detail-header.tsxStatePillimport (no behavioral change).Sequence Diagram(s)
Estimated code review effort
🎯 4 (Complex) | ⏱️ ~45 minutes
Possibly related PRs
query-client.tsxmatching tab/query logic for commit-related queries.Suggested reviewers
🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings.
✨ Finishing Touches
🧪 Generate unit tests (beta)
Comment
@coderabbitai helpto get the list of available commands and usage tips.