Skip to content

feat(ui): v0.3.0 Phase 2 — UX & Workflow - #58

Merged
tonythethompson merged 4 commits into
mainfrom
feat/v030-phase2-ux
Jul 31, 2026
Merged

tonythethompson merged 4 commits into
mainfrom
feat/v030-phase2-ux

Conversation

@tonythethompson

@tonythethompson tonythethompson commented Jul 31, 2026 •

Copy link
Copy Markdown
Owner

Phase 2 — UX & Workflow

Part of the v0.3.0 Roadmap mitigation plan (2 of 4 stacked PRs).

Changes

  • Batch comparison view with sortable table, delta indicators, and recharts grouped bar + radar charts
  • Report generator — Markdown export from ExecutionWorkspace (single/multi-job, with comparison stats)
  • Paginated catalog endpoint (GET /api/github/catalog) with arch/device filters
  • TanStack Query hook (useRecipeCatalog) for infinite-scroll server-side catalog
  • Lazy-load recipes catalog — dynamic import() removes 215 KB from initial bundle
  • Branch pinning — persist recipes branch to localStorage, Pin/Unpin UI in InputEnvironmentPanel
  • JobHistoryModal comparison limit raised from 3 → 6
  • Print CSS — clean @media print styles for report output
  • Tests: 7 unit (reportGenerator) + 6 component (BatchComparisonView)

Stacked PRs

# Branch Phase
1 feat/v030-phase1-perf Performance & Stability
2 feat/v030-phase2-ux (this) UX & Workflow
3 feat/v030-phase3-dist Distribution & Compliance
4 feat/v030-phase4-strategic Strategic Bets

Summary by cubic

Adds a side-by-side batch comparison with charts, a Markdown report exporter with print-ready tables, and a paginated recipe catalog to improve v0.3.0 UX while trimming ~215 KB from the initial bundle. Also raises the compare limit to 6 and adds branch pinning for reproducible recipe imports.

  • New Features

    • Batch comparison view with sortable table, delta indicators, and recharts grouped bar/radar charts; Compare button in Batch panel; supports 2–6 runs.
    • Report generator: Export Markdown via an Export Report button in Execution Workspace; print-friendly CSS for clean PDF output.
    • Paginated recipe catalog endpoint GET /api/github/catalog with arch/device filters, plus @tanstack/react-query hook (useRecipeCatalog) for infinite scroll.
    • Lazy-loaded recipes catalog via dynamic import() to remove ~215 KB from the initial bundle.
    • Branch pinning for recipe fetches with Pin/Unpin UI; pinned ref persisted to localStorage (falls back to default).
    • History compare limit raised from 3 to 6.
    • Tests: unit coverage for report generator and component tests for batch comparison view.
  • Bug Fixes

    • Printed reports render proper HTML tables in export/print views.
    • Pin/Unpin branch state is reliable; unpin resets to the default and persists correctly.

Written for commit 7715c73. Summary will update on new commits.

Review in cubic

Copilot AI review requested due to automatic review settings July 31, 2026 13:57

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Sorry @tonythethompson, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@coderabbitai

coderabbitai Bot commented Jul 31, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@tonythethompson, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 13 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 6d147854-0163-4e7c-bd19-ffd5e3d5b97a

📥 Commits

Reviewing files that changed from the base of the PR and between eeb6412 and 7715c73.

📒 Files selected for processing (15)
  • src/components/features/BatchComparisonChart.tsx
  • src/components/features/BatchComparisonView.test.tsx
  • src/components/features/BatchComparisonView.tsx
  • src/components/features/BatchProcessingPanel.tsx
  • src/components/features/ExecutionWorkspace.tsx
  • src/components/features/InputEnvironmentPanel.test.tsx
  • src/components/features/InputEnvironmentPanel.tsx
  • src/components/features/JobHistoryModal.tsx
  • src/data/recipes.ts
  • src/index.css
  • src/lib/__tests__/reportGenerator.test.ts
  • src/lib/hooks/useRecipeCatalog.ts
  • src/lib/oliveRecipeHub.ts
  • src/lib/reportGenerator.ts
  • src/server/routes/github.ts

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

@qodo-code-review

Copy link
Copy Markdown
Contributor

Qodo Fixer

No findings are available for this PR yet. Findings appear here once Qodo has reviewed the PR.

@greptile-apps

greptile-apps Bot commented Jul 31, 2026 •

Copy link
Copy Markdown
Contributor

Confidence Score: 3/5

Not ready to merge — the server-side dynamic import extension, React-invisible catalog mutation, shifting comparison baseline, and incorrect job timestamps all affect core paths introduced by this PR.

The .ts extension in the server-side dynamic import causes ERR_MODULE_NOT_FOUND in any compiled production build, making every /api/github/catalog request 500. The in-place mutation of SUGGESTED_RECIPES is invisible to React state. The delta baseline shifts on every non-duration column sort. Wall-clock timestamps on comparison records misrepresent when jobs ran. These four findings from prior review threads affect core UX paths of this PR.

Files Needing Attention: src/server/routes/github.ts (production import extension), src/data/recipes.ts (React-invisible mutation and cache poisoning), src/components/features/BatchComparisonView.tsx (baseline shifts on sort), src/components/features/BatchProcessingPanel.tsx (incorrect timestamps in comparison records)

Important Files Changed

Filename Overview
src/components/features/BatchComparisonChart.tsx New recharts bar/radar chart for multi-model comparison. Division-by-zero guarded by the , 1 sentinel in Math.max calls. No issues found.
src/components/features/BatchComparisonView.test.tsx 6 component tests covering render, delta indicators, close button, sort, and VRAM formatting. Delta test only verifies the default sort so the baseline-shift bug on non-duration sorts is not exercised.
src/components/features/BatchComparisonView.tsx New sortable comparison table. baseline = sorted[0] pins the delta reference to whichever row sorts first, scrambling delta semantics on non-duration sorts — already raised in a prior review thread.
src/components/features/BatchProcessingPanel.tsx Adds Compare button and BatchComparisonView inline panel. timestamp: new Date().toISOString() stamps all comparison records with click time rather than actual job run time — already flagged in a prior review thread.
src/components/features/ExecutionWorkspace.tsx Adds Export Report button that downloads the last 6 history records as Markdown. Silent no-op when history is empty is intentional. Clean integration with new APIs.
src/components/features/InputEnvironmentPanel.test.tsx Test mock updated to match the new oliveRecipeHub API. No issues found.
src/components/features/InputEnvironmentPanel.tsx Branch pinning UI correctly persists to localStorage via setRecipesBranch and resets to OLIVE_RECIPES_BRANCH_DEFAULT on unpin. No issues found.
src/components/features/JobHistoryModal.tsx Compare-selection limit raised from 3 to 6 consistently in toggle guard and both user-facing strings. No issues found.
src/data/recipes.ts Lazy-loads catalog for 215 KB bundle reduction. Two issues: if (_cachedCatalog) is truthy for [], permanently caching a failed import (flagged in this review); in-place mutation of SUGGESTED_RECIPES is invisible to React state (flagged in prior thread).
src/index.css Normalises colour tokens to lowercase and adds @media print styles for PDF export. No issues found.
src/lib/tests/reportGenerator.test.ts 7 unit tests covering report title, comparison section, VRAM omission, recipe JSON, and failed-status emoji. markdownToPrintHtml and printReportAsPdf are not tested.
src/lib/hooks/useRecipeCatalog.ts New TanStack Query v5 infinite-scroll hook. initialPageParam, getNextPageParam, and staleTime are all correctly configured. No issues found.
src/lib/oliveRecipeHub.ts Replaces static branch constant with getRecipesBranch()/setRecipesBranch() backed by localStorage. Default parameter correctly evaluated at call time. No issues found.
src/lib/reportGenerator.ts Markdown report generator and print-HTML converter. markdownToPrintHtml correctly splits table cells on
src/server/routes/github.ts New paginated /api/github/catalog endpoint. Pre-flagged issues: .ts extension in the dynamic import breaks compiled production builds;

Sequence Diagram

sequenceDiagram
    participant U as User
    participant EW as ExecutionWorkspace
    participant RG as reportGenerator
    participant JH as jobHistoryStore
    participant BP as BatchProcessingPanel
    participant BCV as BatchComparisonView
    participant S as Express /api/github/catalog
    participant RC as useRecipeCatalog hook
    participant DR as data/recipes.ts

    Note over DR: Module load
    DR->>DR: loadSuggestedRecipes()
    DR-->>DR: SUGGESTED_RECIPES mutated in-place

    U->>EW: Click Export Report
    EW->>JH: getJobHistory()
    JH-->>EW: last N records
    EW->>RG: downloadMarkdownReport(records)
    RG-->>U: .md file download

    U->>BP: Click Compare
    BP->>BCV: render(records mapped from jobs)
    BCV-->>U: sortable table + Delta Duration

    U->>RC: useRecipeCatalog
    RC->>S: GET /api/github/catalog
    S->>S: dynamic import catalog
    S-->>RC: items and pagination
    RC-->>U: infinite-scroll catalog pages
Loading

Reviews (4): Last reviewed commit: "fix(test): add getRecipesBranch to olive..." | Re-trigger Greptile

Comment thread src/lib/reportGenerator.ts Outdated
Comment thread src/components/features/BatchComparisonView.tsx
Comment thread src/data/recipes.ts

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Adds Phase 2 UX/workflow features for v0.3.0, centered on improved recipe browsing (paginated catalog + branch pinning), batch run comparison UI, and Markdown report export from execution history.

Changes:

  • Added server-side paginated recipe catalog endpoint and a TanStack Query infinite-query hook for client consumption.
  • Introduced batch run comparison UI (sortable table + charts) and raised comparison limits (3 → 6).
  • Added Markdown report generation/export utilities and print/PDF styling support.

Reviewed changes

Copilot reviewed 14 out of 14 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
src/server/routes/github.ts Adds /github/catalog paginated endpoint with arch/device filters.
src/lib/reportGenerator.ts Introduces Markdown report generation + download/print helpers.
src/lib/oliveRecipeHub.ts Adds localStorage-backed recipes branch pinning helpers.
src/lib/hooks/useRecipeCatalog.ts Adds infinite-query hook to fetch paginated catalog.
src/lib/tests/reportGenerator.test.ts Adds unit tests for Markdown report generator.
src/index.css Adds global print CSS rules for report/PDF output.
src/data/recipes.ts Switches catalog to dynamic import + cached loader API.
src/components/features/JobHistoryModal.tsx Increases selectable comparison runs to 6 and updates copy.
src/components/features/InputEnvironmentPanel.tsx Adds branch pin/unpin UI and uses dynamic branch resolution.
src/components/features/ExecutionWorkspace.tsx Adds “Export Report” button using job history + report generator.
src/components/features/BatchProcessingPanel.tsx Adds “Compare” toggle and wires completed jobs into comparison view.
src/components/features/BatchComparisonView.tsx New sortable comparison table with delta indicators.
src/components/features/BatchComparisonView.test.tsx Component tests for comparison table behavior.
src/components/features/BatchComparisonChart.tsx New Recharts bar/radar comparison chart component.
Suppressed comments (2)

src/components/features/BatchComparisonView.tsx:113

  • Delta column header still says "Δ Duration" even if the primary metric is actually latency (see durationMs source in BatchProcessingPanel). Update the header to match the metric label.
              <th className="px-3 py-2 text-slate-400 font-medium">Δ Duration</th>

src/components/features/BatchComparisonView.tsx:158

  • Helper text mentions "Δ Duration"; if the metric is latency, this should be updated to avoid confusing users.
      <p className="text-[10px] text-slate-500">
        Δ Duration relative to first row (baseline). Click column headers to sort.
      </p>

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/server/routes/github.ts Outdated
Comment thread src/server/routes/github.ts
Comment thread src/server/routes/github.ts Outdated
Comment thread src/data/recipes.ts
Comment thread src/lib/hooks/useRecipeCatalog.ts
Comment thread src/components/features/InputEnvironmentPanel.tsx
Comment thread src/components/features/InputEnvironmentPanel.tsx
Comment thread src/components/features/BatchComparisonView.tsx
Comment thread src/lib/reportGenerator.ts Outdated
Comment thread src/server/routes/github.ts Outdated
Comment thread src/server/routes/github.ts
@qodo-code-review

qodo-code-review Bot commented Jul 31, 2026 •

Copy link
Copy Markdown
Contributor

Code Review by Qodo


Sorry, something went wrong

We weren't able to complete the code review on our side. Please try again manually by commenting /agentic_review on this PR.

Powered by Qodo

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

tonythethompson has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

tonythethompson has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

Base automatically changed from feat/v030-phase1-perf to main July 31, 2026 18:13

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

tonythethompson has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@tonythethompson
tonythethompson merged commit b9e0258 into main Jul 31, 2026
10 checks passed
@tonythethompson
tonythethompson deleted the feat/v030-phase2-ux branch July 31, 2026 18:13
@linear-code

linear-code Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

OLI-16

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.

2 participants