Skip to content

Dashboard: 5-per-page pagination for Runner health + Recent pipelines; frontend-only CI - #34

Merged
BotCoder254 merged 1 commit into
mainfrom
feat/log-chunk-sections
Jul 16, 2026
Merged

Dashboard: 5-per-page pagination for Runner health + Recent pipelines; frontend-only CI#34
BotCoder254 merged 1 commit into
mainfrom
feat/log-chunk-sections

Conversation

@BotCoder254

@BotCoder254 BotCoder254 commented Jul 16, 2026

Copy link
Copy Markdown
Owner

Dashboard pagination

Both dashboard panels now page their rows five at a time with a compact Prev/Next pager (new PagerControls component — same secondary-button and steel-caption language as the rest of the shell), replacing unbounded growth:

  • Runner health: slices the roster client-side; the pager shows 1–5 of N and hides entirely when the fleet fits on one page.
  • Recent pipelines: pages over the flattened keyset list, fetching the next keyset page on demand when the reader steps past what's already loaded (the pager's Next button shows the loading state during the fetch). The infinite-scroll sentinel is gone from the dashboard — the ledger page keeps its own scroll behavior.
  • Page indexes clamp automatically when live updates shrink the lists (runner revocation, stream patches).

CI: frontend-only

.github/workflows/ci.yml drops the rust matrix job and the GHCR runner-image publish job — the workflow is now just the frontend gate (typecheck · test · build). Rust remains verified locally (cargo check / clippy -D warnings / cargo test per crate), and the runner image is published manually per docs/fix-empty-workspace-stale-runner.md.

Verification

  • npx tsc --noEmit — clean
  • npm run build — compiles successfully

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added previous and next pagination controls to the dashboard.
    • Runner health lists now display results across pages with visible range indicators.
    • Recent pipelines now use page navigation instead of infinite scrolling.
    • Additional pipeline results load automatically when moving beyond currently available entries.
  • Chores

    • Simplified continuous integration to focus on the frontend pipeline.

…me; frontend-only CI

Both dashboard panels now step through their rows with a compact
Prev/Next pager (new PagerControls, same secondary-button + steel-caption
language) instead of growing unboundedly: Runner health slices the
roster client-side, Recent pipelines pages over the flattened keyset
list and fetches the next keyset page on demand when the reader steps
past what's loaded. Page indexes clamp when live updates shrink the
lists.

ci.yml drops the rust matrix and the GHCR runner-image job - CI is now
the frontend gate only; Rust stays verified locally (cargo check /
clippy -D warnings / test per crate) and the runner image is published
manually per the existing runbook.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@netlify

netlify Bot commented Jul 16, 2026

Copy link
Copy Markdown

Deploy Preview for overup-app ready!

Name Link
🔨 Latest commit 2d7d941
🔍 Latest deploy log https://app.netlify.com/projects/overup-app/deploys/6a590483bad2120008c01413
😎 Deploy Preview https://deploy-preview-34--overup-app.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@vercel

vercel Bot commented Jul 16, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
overup Ready Ready Preview, Comment Jul 16, 2026 4:19pm

@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Free

Run ID: 6e4b6e2a-026e-4bf9-81de-bb6758f023e2

📥 Commits

Reviewing files that changed from the base of the PR and between 1bd9e51 and 2d7d941.

📒 Files selected for processing (4)
  • .github/workflows/ci.yml
  • src/features/dashboard/components/PagerControls.tsx
  • src/features/dashboard/components/RunnerHealthPanel.tsx
  • src/features/dashboard/pages/DashboardPage.tsx

📝 Walkthrough

Walkthrough

Dashboard runner and pipeline lists now use explicit pagination controls. The CI workflow is reduced to the frontend pipeline, removes Rust and runner-image jobs, and no longer overrides the frontend build’s CI environment value.

Changes

Dashboard pagination

Layer / File(s) Summary
Pagination controls and runner roster
src/features/dashboard/components/PagerControls.tsx, src/features/dashboard/components/RunnerHealthPanel.tsx
Adds reusable previous/next controls and applies fixed-size pagination to the runner roster.
Recent pipeline pagination
src/features/dashboard/pages/DashboardPage.tsx
Replaces infinite scrolling with paged pipeline rendering, fetching additional data when needed, and navigation controls.

CI workflow scope

Layer / File(s) Summary
Frontend-only CI workflow
.github/workflows/ci.yml
Removes Rust and runner-image jobs, updates CI scope comments, and removes the frontend build’s CI: false override.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant PagerControls
  participant DashboardPage
  participant PipelineQuery
  participant PipelinesTable
  User->>PagerControls: Select Next
  PagerControls->>DashboardPage: Call onNext
  DashboardPage->>PipelineQuery: Fetch more when needed
  PipelineQuery-->>DashboardPage: Return loaded pipelines
  DashboardPage->>PipelinesTable: Render visible page
Loading

Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.

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

@BotCoder254
BotCoder254 merged commit 00a8c53 into main Jul 16, 2026
6 of 8 checks passed

@amazon-q-developer amazon-q-developer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Summary

This PR successfully implements 5-per-page pagination for dashboard panels and simplifies the CI workflow to frontend-only checks. The implementation is mostly solid, but there's one critical logic error that must be fixed before merge.

Critical Issues (1)

  • Stale closure in nextPipelinePage: The pipelineStart variable captured in the async callback can become outdated, causing incorrect page advancement logic

Overall Assessment

Once the closure bug is fixed, this change improves UX by replacing infinite scroll with predictable pagination and reduces CI complexity by removing unused Rust jobs. The pagination clamping logic correctly handles edge cases like list shrinkage during live updates.


You can now have the agent implement changes and create commits directly on your pull request's source branch. Simply comment with /q followed by your request in natural language to ask the agent to make changes.

Comment on lines +81 to 88
void fetchNextPipelines().then((result) => {
const loaded = (result.data?.pages ?? []).reduce(
(count, page) => count + page.pipelines.length,
0,
);
if (pipelineStart + PIPELINES_PAGE_SIZE < loaded) {
setPipelinePage((current) => current + 1);
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 Logic Error: pipelineStart is captured in the closure but may be stale when the promise resolves. If the user changes pages during the fetch, the comparison uses an outdated value, potentially advancing to the wrong page.

Suggested change
void fetchNextPipelines().then((result) => {
const loaded = (result.data?.pages ?? []).reduce(
(count, page) => count + page.pipelines.length,
0,
);
if (pipelineStart + PIPELINES_PAGE_SIZE < loaded) {
setPipelinePage((current) => current + 1);
}
void fetchNextPipelines().then((result) => {
const loaded = (result.data?.pages ?? []).reduce(
(count, page) => count + page.pipelines.length,
0,
);
const currentStart = pipelinePage * PIPELINES_PAGE_SIZE;
if (currentStart + PIPELINES_PAGE_SIZE < loaded) {
setPipelinePage((current) => current + 1);
}
});

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant