Skip to content

feat(frontend): Evaluation runs list in /m behind the developer view switch - #8040

Merged
mmabrouk merged 4 commits into
release/v0.128.5from
feat/m-view-evaluations
Nov 4, 2026
Merged

mmabrouk merged 4 commits into
release/v0.128.5from
feat/m-view-evaluations

Conversation

@mmabrouk

@mmabrouk mmabrouk commented Nov 3, 2026 •

Copy link
Copy Markdown
Member

Do not merge into v0.128.4. This goes into the next release.

Context

The /m app has no page for evaluation runs, so users still go to the old /w table for them. This PR adds the evaluation runs list to /m. It is the first part of the evaluations work. The new evaluation wizard is stacked on this branch, and the run details page is #8042.

It ships hidden

Nothing here is reachable until the evaluations developer view is enabled. The view adds an "Evaluations" link under Developer in the navigation and the route /evaluations. While the view is hidden, the route shows "page not found". The PR adds no dependency, no antd, and nothing in _app, AppProviders, GlobalDrawers or the app shell. The only change outside features/evaluations/ is that useConfirmModal now accepts rich content as the message, which the delete confirm uses.

What the list does

  • Header "Evaluations" with an app filter. Picking an app writes ?app=<id> to the URL. In app scope the "Live Evals" tab is hidden.
  • Kind tabs "All Evals", "Auto Evals", "Human Evals", "Live Evals" and "SDK Evals", kept in ?kind=.
  • Search (kept in ?q=) and a status filter (kept in ?status=). Both are sent to the API.
  • Rows in pages of 30 with a "Load more" button. Wide screens show status, name, kind, application, test set, created on and created by. Phones show status, name with the kind and date under it, and the row menu.
  • The list refreshes every 5 seconds while an auto or SDK run is in progress, and not in a background tab.
  • Row menu: "Open details", "Copy run ID", "Stop evaluation" or "Resume evaluation" for live runs, "View variant" (opens the shared revision drawer), "View test set" (only while the testsets view is on), and "Delete" with a confirm.
  • Empty states per tab with the /w text, without the videos. A no-match state, an error state with retry, and a skeleton while loading.

Readers without edit_evaluation_runs see no delete, no stop or resume, and no create button. The page has no create button yet. The wizard PR adds it.

Left out on purpose: metric columns, CSV export, column visibility, bulk delete, the evaluator, test set, variant, query and date filters, and "Edit evaluation".

/w bugs fixed in /m

  • Search only filtered the rows already loaded. /m sends the search to the API.
  • A kind tab could look empty while runs of that kind existed. /m sends the kind to the API, and the package fills the page.
  • A queued run never started the 5 second refresh. /m refreshes for every run in progress.
  • The delete guard compared upper-case statuses to a lower-case set, so it never blocked anything. /m allows delete at any status, which is what /w does in practice.
  • A failed load showed the onboarding empty state. /m shows "Could not load evaluations" with a retry.
  • A search or status filter with no match showed the onboarding empty state. /m shows "No evaluations match your filters" with "Clear filters".
  • Delete, stop, resume and create showed to readers without edit rights, and the API refused with a generic message. /m hides them.
  • Live runs read "Online" in the kind column and "Live" everywhere else. /m says "Live" everywhere.

Each fix has a test.

Package changes

None.

New user-facing text

Strings not copied from /w:

  • "No evaluations match your filters", "Try a shorter search or fewer statuses.", "Clear filters".
  • "No matching evaluations in the newest runs", "Load more to look through older runs." (a filtered page that is empty while older runs remain).
  • "Could not load evaluations", "Couldn't load more evaluations", "Couldn't copy the run ID".
  • "New evaluation" on every tab (/w says "New Evaluation" on one of them).
  • The auto evaluation description says "test sets" in two words, as the Test sets list does.

Checks

  • Types: @agenta/mobile passes. No package changed, so /w types were not run.

  • Lint passes.

  • Full mobile tests: 1050 run, 2 failed. The two failures are agentPermissions.render.test.tsx and membersTabRoleChange.render.test.tsx. Both also fail on the release branch. The last full run was before the last two commits (the empty filtered page fix and a shorter status filter on phones). After those commits the screen test file (22 tests) and the /m types were run again and pass.

  • The row action tests use the real delete, stop and start functions from the package and mock only HTTP. They assert the method, the path and the body.

  • Storybook screenshots were taken for 11 states at 1440 and 390 px, light and dark (44 images). The capture reported no render errors and no horizontal overflow.

  • Not run: the list against a live API.

  • After the rebase onto release/v0.128.4 (at d5bc67afec, with feat(frontend): evaluators and archived evaluators in /m behind the developer view switch #8007 and fix(frontend): pass the leave question to the shared unsaved guard in the test set editor #8031):

    • Types: @agenta/mobile passes. This PR does not change web/packages.
    • The test files this PR adds or changes: 53 passed.

Review results

Two rounds with the slop, simplify and Codex correctness lenses. Round 1 rated slop Medium, simplify Low and correctness Medium. The round 1 fix is the "Load more to look through older runs" state. Round 2 on the final head (b0f987ec21) rated all three Low.

One round 1 finding was rejected. "Open details" goes to /evaluations/results/{id}, which the run details PR #8042 adds under the same gate.

Open problems

  • The run details PR feat(frontend): Evaluation run page and Overview tab in /m behind the developer view switch #8042 adds its own evaluations entry to developerViews.ts. Whichever PR merges second must merge the two entries into one, with both routes and the nav link.
  • "Open details" and a row click open the run details page, which comes with feat(frontend): Evaluation run page and Overview tab in /m behind the developer view switch #8042. If someone forces the view on before that PR lands, the click shows "page not found".
  • "View test set" opens /testsets/{id}. The test set detail route arrives with the Test set detail PRs.
  • Stop and Resume treat a live run as active when flags.is_active is true and flags.is_closed is not. is_live is left out because every live run has it. Please confirm this rule.
  • The full screen has no Storybook story because its shell needs the router. The stories cover the table, the toolbar and the menus.
  • When the view goes to on, the /w per-app path needs a mobileRouteFor entry that maps to /evaluations?app=<id>.

How to QA once enabled

Enable the view with AGENTA_DEVELOPER_VIEWS=evaluations. Then:

  • Open Developer > Evaluations in a project with auto and human runs. The rows show status, name, kind, application, test set and created on and by.
  • Search for part of a run name that is not on the first page. The run appears.
  • Pick a status filter that matches nothing. You see "No evaluations match your filters", and "Clear filters" brings the rows back.
  • Pick an app in the app filter. The URL gets ?app=, the "Live Evals" tab goes away, and only that app's runs show.
  • Start an auto run from /w and open the list. Its status updates without a reload.
  • Delete a run. The confirm names the run, and the row goes away after "Deleted successfully".
  • Open the page as a viewer. There is no Delete, no Stop or Resume, and no create button.
  • Regression: with the view off, /evaluations shows "page not found" and the navigation has no Evaluations link.

@coderabbitai

coderabbitai Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Important

Review skipped

Review was skipped as selected files did not have any reviewable changes.

Run configuration
Commits

Reviewing files that changed from the base of the PR and between 417f855 and 417f855.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Trigger review
Summary

Summary by CodeRabbit

  • New Features
    • Added an Evaluations view with a searchable, filterable list of evaluation runs, including app-level views and pagination.
    • Added controls to create evaluations and manage runs, including opening details, copying IDs, navigating to related items, and stopping, resuming, or deleting eligible runs.
    • Added responsive layouts, status indicators, and helpful empty states for evaluations.
  • Tests
    • Added coverage for evaluation lists, filters, run actions, permissions, and the evaluations page.

The change adds a developer-only evaluations page. It loads evaluation runs with URL-backed filters and pagination, displays responsive run tables and empty states, and provides creation and row-action controls.

Changes: Evaluation runs

Layer / File(s) Summary
Filters and paginated run loading
web/mobile/src/features/evaluations/list/useEvaluationRunsFilters.ts, web/mobile/src/features/evaluations/list/useEvaluationRunsList.ts, web/mobile/tests/unit/evaluationRunsFixtures.ts, web/mobile/tests/unit/evaluationRunsList.test.tsx
URL parameters control kind, app, search, and status filters. The list query fetches pages of 30 runs, seeds the run cache, and polls every five seconds while loaded runs are in progress. Tests cover filter parsing, pagination, cache seeding, and polling.
Run references and actions
web/mobile/src/features/evaluations/list/runReferences.ts, web/mobile/src/features/evaluations/list/useRunRowActions.tsx, web/mobile/src/features/evaluations/list/RunRowMenu.tsx, web/mobile/src/features/settings/useConfirmModal.tsx, web/mobile/tests/unit/evaluationRunRowActions.render.test.tsx
Run references support navigation to application revisions and test sets. Row actions copy IDs, stop or resume live runs, and delete runs after confirmation. The menu reflects permissions, capabilities, and run state.
List screen and responsive presentation
web/mobile/src/features/evaluations/list/*, web/mobile/tests/unit/evaluationsScreen.render.test.tsx, web/storybook/stories/developer-views/EvaluationRunsTable.stories.tsx
The screen combines kind tabs, search and status controls, creation options, a responsive table, and filter-aware empty states. Tests and stories cover loading, app scope, permissions, rows, empty states, and pagination.
Developer view and page route
web/mobile/src/features/developer/developerViews.ts, web/mobile/src/pages/w/[workspace_id]/p/[project_id]/evaluations/index.tsx, web/mobile/tests/unit/evaluationsRoute.render.test.tsx
The developer navigation registers the hidden Evaluations view. The route renders the screen inside the developer-view gate when both workspace and project IDs are available.

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

Sequence Diagram(s)

sequenceDiagram
  actor User
  participant EvaluationKindTabs
  participant EvaluationsScreen
  participant useEvaluationRunsFilters
  participant useEvaluationRunsList
  participant EvaluationRunsTable
  User->>EvaluationKindTabs: Select a kind
  EvaluationKindTabs->>EvaluationsScreen: Call onChange with the selected kind
  EvaluationsScreen->>useEvaluationRunsFilters: Set the URL-backed kind
  useEvaluationRunsFilters-->>EvaluationsScreen: Return filter state
  EvaluationsScreen->>useEvaluationRunsList: Load runs with current filters
  useEvaluationRunsList-->>EvaluationsScreen: Return runs and pagination state
  EvaluationsScreen->>EvaluationRunsTable: Render runs
Loading
Merge Risk: Low · up to 417f8

A failed deletion closes its confirmation dialog, so retrying requires reopening it. This is a bounded issue to fix or accept before merging.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 60.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentat… Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Title check Passed The title clearly identifies the main change: adding the evaluation runs list in /m behind the developer view switch.
Description check Passed The description is directly related to the changeset and explains the route, filters, row actions, permissions, testing, and known integration items.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 60.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 1 functions across 23 files.

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

Finishing Touches
Generate docstrings
  • Commit to this branch
  • Create a new PR
Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

CodeRabbit Verify

  • Run CodeRabbit Verify to test the changes in this pull request.
Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 2e122c0 and 417f855.

Files selected for processing: 23
  • web/mobile/src/features/developer/developerViews.ts
  • web/mobile/src/features/evaluations/list/CreateEvaluationMenu.tsx
  • web/mobile/src/features/evaluations/list/EvaluationKindTabs.tsx
  • web/mobile/src/features/evaluations/list/EvaluationRunsTable.tsx
  • web/mobile/src/features/evaluations/list/EvaluationsScreen.tsx
  • web/mobile/src/features/evaluations/list/RunRowCells.tsx
  • web/mobile/src/features/evaluations/list/RunRowMenu.tsx
  • web/mobile/src/features/evaluations/list/RunStatusFilter.tsx
  • web/mobile/src/features/evaluations/list/runReferences.ts
  • web/mobile/src/features/evaluations/list/states/EvaluationsEmpty.tsx
  • web/mobile/src/features/evaluations/list/states/EvaluationsKeepLooking.tsx
  • web/mobile/src/features/evaluations/list/states/EvaluationsNoMatch.tsx
  • web/mobile/src/features/evaluations/list/useEvaluationRunsFilters.ts
  • web/mobile/src/features/evaluations/list/useEvaluationRunsList.ts
  • web/mobile/src/features/evaluations/list/useRunRowActions.tsx
  • web/mobile/src/features/settings/useConfirmModal.tsx
  • web/mobile/src/pages/w/[workspace_id]/p/[project_id]/evaluations/index.tsx
  • web/mobile/tests/unit/evaluationRunRowActions.render.test.tsx
  • web/mobile/tests/unit/evaluationRunsFixtures.ts
  • web/mobile/tests/unit/evaluationRunsList.test.tsx
  • web/mobile/tests/unit/evaluationsRoute.render.test.tsx
  • web/mobile/tests/unit/evaluationsScreen.render.test.tsx
  • web/storybook/stories/developer-views/EvaluationRunsTable.stories.tsx

Included review availability: This review used your included allowance. Your plan provides up to 8 included reviews per hour; 3 remain after this review.

@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Railway Preview Environment

Item Value
Status stopped
Commit 417f8551b79e9a7bc6c8544a767ba7db55c2c362
Manual expiry (UTC) Not granted
CI deadline (UTC) Not granted
Workflow https://github.com/Agenta-AI/agenta/actions/runs/41684798856

Preview use finished or expired. Environment absence verified; retained storage requires separate provider accounting.

Post /preview as a new comment to request a one-hour preview. Repeating it while active does not extend the hour.
Preview data is disposable. Expiry is enforced by the next successful cleanup sweep, not an exact timer.
Environment deletion stops its compute. Provider-retained storage and permanent services may still be billed.

@mmabrouk
mmabrouk force-pushed the feat/m-view-evaluations branch from e902f37 to 417f855 Compare November 3, 2026 17:29

@coderabbitai coderabbitai 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.

Follow-up Comments

Nitpick Shorten the multi-line JSDoc to one line.

17-21: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Shorten the multi-line JSDoc to one line.

The web frontend guidelines set a hard limit of one short line per comment. This block narrates behavior in four lines. Similar multi-line blocks appear in useRunRowActions.tsx, RunRowMenu.tsx, RunRowCells.tsx, EvaluationsScreen.tsx, EvaluationsEmpty.tsx, EvaluationsKeepLooking.tsx and CreateEvaluationMenu.tsx. Cut each to one line. Keep a longer comment only where it documents a surprising constraint.

♻️ Example
-/**
- * The runs list, 30 at a time. Search, status, kind and app go to the server (the package fills
- * a page that the kind or app filter would leave short). The list refreshes every five seconds
- * while a run is in progress.
- */
+/** The runs list, 30 per page. Filters go to the server. Polls while a run is in progress. */

As per coding guidelines: "Keep in-code comments terse ... At most ONE short line per comment."

Source: Coding guidelines

Open the source location

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

Labels

lgtm This PR has been approved by a maintainer

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant