Skip to content

feat(jobs): add Source sorting and surface all sources in Jobs filter - #720

Merged
marcusds merged 1 commit into
mainfrom
astd-45-add-source-sorting-to-jobs-filters/mschwab
Jul 16, 2026
Merged

feat(jobs): add Source sorting and surface all sources in Jobs filter#720
marcusds merged 1 commit into
mainfrom
astd-45-add-source-sorting-to-jobs-filters/mschwab

Conversation

@marcusds

@marcusds marcusds commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Summary

Implements ASTD-45 — add Source as a sort option in the Studio Jobs view, and fix the Source filter so it shows every source that actually appears (previously a hardcoded list that omitted plugin sources like nemo-agents-plugin).

Changes

Sorting

  • Add source / -source to PlatformJobSortField so the jobs API accepts sorting by source. list_jobs already sorts generically (getattr(job, field) + store-side sort), so no dispatcher logic change was required.
  • Regenerate the OpenAPI spec with the new enum values.
  • Enable sorting on the Studio Jobs Source column (clickable header).

Filtering

  • The Source filter dropdown was a hardcoded set of 4 sources. Job source is an open-ended string derived from the creating plugin's module name (or explicit service_name), so plugin sources (nemo-agents-plugin, insights, rl, …) never appeared.
  • Now accumulate source values seen in returned job data into the filter options, merged with the static labeled set. Unknown sources show their raw value.

Tests

  • Backend: test_list_jobs_sort_by_source (asc + desc) in the jobs dispatcher suite.
  • Studio: dynamic-source-appears-in-filter test + sort-by-source header-click test. Full JobsDataView suite passes (13/13).

Notes / follow-ups

  • Source sorts by raw string, not friendly display label — alphabetical order won't match the labels shown. Label-order sorting would need extra mapping.
  • The filter-population is client-side accumulation (grows as you page). A backend distinct-sources endpoint would be the authoritative fix, but requires either a full scan in the jobs service or a new distinct/facet primitive in the shared entities service. Deferred.
  • Python SDK (Stainless) not regenerated here; the OpenAPI enum change would flow via make update-sdk.

Summary by CodeRabbit

  • New Features

    • Added sorting for jobs by source in ascending or descending order.
    • Added dynamic source values to the Jobs view’s Source filter.
    • Enabled sorting directly from the Jobs view’s Source column.
  • Documentation

    • Updated the Jobs API specification to document the new source sorting options.

@marcusds
marcusds requested review from a team as code owners July 15, 2026 22:35
@github-actions github-actions Bot added the feat label Jul 15, 2026
@coderabbitai

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Changes

Job source sorting and filtering

Layer / File(s) Summary
Source sorting contracts and API wiring
openapi/..., packages/nemo_platform_plugin/..., services/core/jobs/src/...
Adds PlatformJobListSortField with ascending and descending source values, and propagates it through the jobs API and dispatcher.
Dispatcher source sorting validation
services/core/jobs/tests/test_dispatcher.py
Updates list-job sort usage and verifies ascending and descending ordering by source.
Studio source filtering and sorting
web/packages/studio/src/components/dataViews/JobsDataView/...
Adds dynamic source filter options, enables source-column sorting, and verifies filtering and sort=source requests.

Sequence Diagram(s)

sequenceDiagram
  participant JobsDataView
  participant JobsAPI
  participant JobDispatcher
  JobsDataView->>JobsAPI: Request jobs with sort=source
  JobsAPI->>JobDispatcher: Pass PlatformJobListSortField
  JobDispatcher-->>JobsAPI: Return jobs ordered by source
  JobsAPI-->>JobsDataView: Return sorted job list
Loading

Suggested reviewers: matthewgrossman, steramae-nvidia

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 57.14% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main changes: Source sorting and expanded Jobs filter sources.
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.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch astd-45-add-source-sorting-to-jobs-filters/mschwab

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

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
web/packages/studio/src/components/dataViews/JobsDataView/index.tsx (1)

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

Use a type-only import for ComponentProps.

Split the React imports so ComponentProps is imported with import type. As per coding guidelines, TypeScript type-only imports must use import type.

Proposed fix
-import { ComponentProps, type ReactNode, useRef } from 'react';
+import { useRef } from 'react';
+import type { ComponentProps, ReactNode } from 'react';
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/packages/studio/src/components/dataViews/JobsDataView/index.tsx` at line
35, Update the React imports in JobsDataView so ComponentProps is imported via a
type-only import, while ReactNode and useRef remain in the runtime import.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@web/packages/studio/src/components/dataViews/JobsDataView/index.tsx`:
- Around line 116-129: Reset the source accumulator when the workspace changes
so JobsDataView does not retain sources from the previous workspace. Update the
logic around seenSourcesRef to use a workspace-keyed effect or memoized
collection, and add a test covering workspace switching to ensure dynamic source
options are isolated per workspace.

---

Nitpick comments:
In `@web/packages/studio/src/components/dataViews/JobsDataView/index.tsx`:
- Line 35: Update the React imports in JobsDataView so ComponentProps is
imported via a type-only import, while ReactNode and useRef remain in the
runtime import.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 71e135e9-ce6d-4bc0-8ef8-a8cbaed82aa4

📥 Commits

Reviewing files that changed from the base of the PR and between ed1bb43 and 0682586.

📒 Files selected for processing (7)
  • openapi/ga/individual/platform.openapi.yaml
  • openapi/ga/openapi.yaml
  • openapi/openapi.yaml
  • packages/nemo_platform_plugin/src/nemo_platform_plugin/jobs/types.py
  • services/core/jobs/tests/test_dispatcher.py
  • web/packages/studio/src/components/dataViews/JobsDataView/index.test.tsx
  • web/packages/studio/src/components/dataViews/JobsDataView/index.tsx

Comment thread web/packages/studio/src/components/dataViews/JobsDataView/index.tsx Outdated
@github-actions

github-actions Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor
Suite Lines Covered Line Rate Branch Rate
Unit Tests 25533/32734 78.0% 62.7%
Integration Tests 14732/31383 46.9% 19.3%

@marcusds
marcusds force-pushed the astd-45-add-source-sorting-to-jobs-filters/mschwab branch from 0682586 to 3fe6f59 Compare July 15, 2026 22:59

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@openapi/ga/openapi.yaml`:
- Around line 15232-15242: Update the PlatformJobSourcesResponse schema to
declare sources as required by adding a required list containing sources
alongside its properties, while preserving the existing array definition and
descriptions.

In `@web/packages/studio/src/components/dataViews/JobsDataView/index.tsx`:
- Line 34: Update the React import in the JobsDataView module to make
ComponentProps and ReactNode type-only imports, preserving their existing usage
and avoiding a runtime React import.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 0f9a2d13-0f04-4a7f-896a-5247a24a0333

📥 Commits

Reviewing files that changed from the base of the PR and between 3fe6f59 and 4717244.

📒 Files selected for processing (13)
  • openapi/ga/individual/platform.openapi.yaml
  • openapi/ga/openapi.yaml
  • openapi/openapi.yaml
  • packages/nemo_platform_plugin/src/nemo_platform_plugin/jobs/types.py
  • services/core/jobs/src/nmp/core/jobs/api/v2/jobs/endpoints.py
  • services/core/jobs/src/nmp/core/jobs/api/v2/jobs/schemas.py
  • services/core/jobs/src/nmp/core/jobs/app/dispatcher.py
  • services/core/jobs/tests/conftest.py
  • services/core/jobs/tests/test_dispatcher.py
  • services/core/jobs/tests/test_jobs_api.py
  • web/packages/studio/src/components/dataViews/JobsDataView/constants.ts
  • web/packages/studio/src/components/dataViews/JobsDataView/index.test.tsx
  • web/packages/studio/src/components/dataViews/JobsDataView/index.tsx
💤 Files with no reviewable changes (1)
  • web/packages/studio/src/components/dataViews/JobsDataView/constants.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • web/packages/studio/src/components/dataViews/JobsDataView/index.test.tsx

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

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@openapi/ga/openapi.yaml`:
- Around line 15232-15242: Update the PlatformJobSourcesResponse schema to
declare sources as required by adding a required list containing sources
alongside its properties, while preserving the existing array definition and
descriptions.

In `@web/packages/studio/src/components/dataViews/JobsDataView/index.tsx`:
- Line 34: Update the React import in the JobsDataView module to make
ComponentProps and ReactNode type-only imports, preserving their existing usage
and avoiding a runtime React import.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 0f9a2d13-0f04-4a7f-896a-5247a24a0333

📥 Commits

Reviewing files that changed from the base of the PR and between 3fe6f59 and 4717244.

📒 Files selected for processing (13)
  • openapi/ga/individual/platform.openapi.yaml
  • openapi/ga/openapi.yaml
  • openapi/openapi.yaml
  • packages/nemo_platform_plugin/src/nemo_platform_plugin/jobs/types.py
  • services/core/jobs/src/nmp/core/jobs/api/v2/jobs/endpoints.py
  • services/core/jobs/src/nmp/core/jobs/api/v2/jobs/schemas.py
  • services/core/jobs/src/nmp/core/jobs/app/dispatcher.py
  • services/core/jobs/tests/conftest.py
  • services/core/jobs/tests/test_dispatcher.py
  • services/core/jobs/tests/test_jobs_api.py
  • web/packages/studio/src/components/dataViews/JobsDataView/constants.ts
  • web/packages/studio/src/components/dataViews/JobsDataView/index.test.tsx
  • web/packages/studio/src/components/dataViews/JobsDataView/index.tsx
💤 Files with no reviewable changes (1)
  • web/packages/studio/src/components/dataViews/JobsDataView/constants.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • web/packages/studio/src/components/dataViews/JobsDataView/index.test.tsx
🛑 Comments failed to post (2)
openapi/ga/openapi.yaml (1)

15232-15242: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Mark sources as required.

At Line 15234, sources is declared only under properties, so OpenAPI treats it as optional. The handler always returns PlatformJobSourcesResponse(sources=sources); add required: [sources] to keep generated clients and validators aligned with the endpoint contract.

Proposed fix
     PlatformJobSourcesResponse:
       properties:
         sources:
           items:
             type: string
           type: array
           title: Sources
           description: Distinct job source values, sorted ascending.
+      required:
+      - sources
       type: object
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

    PlatformJobSourcesResponse:
      properties:
        sources:
          items:
            type: string
          type: array
          title: Sources
          description: Distinct job source values, sorted ascending.
      required:
      - sources
      type: object
      title: PlatformJobSourcesResponse
      description: Distinct ``source`` values present across a workspace's jobs.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@openapi/ga/openapi.yaml` around lines 15232 - 15242, Update the
PlatformJobSourcesResponse schema to declare sources as required by adding a
required list containing sources alongside its properties, while preserving the
existing array definition and descriptions.
web/packages/studio/src/components/dataViews/JobsDataView/index.tsx (1)

34-34: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

sed -n '1,220p' web/packages/studio/src/components/dataViews/JobsDataView/index.tsx

Repository: NVIDIA-NeMo/nemo-platform

Length of output: 7850


🏁 Script executed:

rg -n "ComponentProps|ReactNode" web/packages/studio/src/components/dataViews/JobsDataView/index.tsx

Repository: NVIDIA-NeMo/nemo-platform

Length of output: 406


Use a type-only React import.

ComponentProps and ReactNode are type-only here, so switch to:

Proposed fix
-import { ComponentProps, type ReactNode } from 'react';
+import type { ComponentProps, ReactNode } from 'react';
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

import type { ComponentProps, ReactNode } from 'react';
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/packages/studio/src/components/dataViews/JobsDataView/index.tsx` at line
34, Update the React import in the JobsDataView module to make ComponentProps
and ReactNode type-only imports, preserving their existing usage and avoiding a
runtime React import.

Source: Coding guidelines

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

🧹 Nitpick comments (1)
packages/nemo_platform_plugin/src/nemo_platform_plugin/jobs/types.py (1)

90-108: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicate mixin logic across two sort-field enums.

get_field_name/get_sort_direction are copy-pasted verbatim from PlatformJobSortField. Extract a shared mixin/base class to avoid drift between the two enums.

♻️ Suggested mixin
class _SortFieldMixin:
    def get_field_name(self) -> str:
        return self.value.lstrip("-")

    def get_sort_direction(self) -> str:
        return "desc" if self.value.startswith("-") else "asc"


class PlatformJobSortField(_SortFieldMixin, str, Enum):
    ...


class PlatformJobListSortField(_SortFieldMixin, str, Enum):
    ...
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/nemo_platform_plugin/src/nemo_platform_plugin/jobs/types.py` around
lines 90 - 108, Extract the shared get_field_name and get_sort_direction
implementations into a private _SortFieldMixin, then make both
PlatformJobSortField and PlatformJobListSortField inherit from it alongside str
and Enum. Remove the duplicated methods from each enum while preserving their
existing sort values and behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@packages/nemo_platform_plugin/src/nemo_platform_plugin/jobs/types.py`:
- Around line 90-108: Extract the shared get_field_name and get_sort_direction
implementations into a private _SortFieldMixin, then make both
PlatformJobSortField and PlatformJobListSortField inherit from it alongside str
and Enum. Remove the duplicated methods from each enum while preserving their
existing sort values and behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 60f77bad-17ca-4126-8122-ce49ef07d587

📥 Commits

Reviewing files that changed from the base of the PR and between 4717244 and ef72fcb.

📒 Files selected for processing (12)
  • openapi/ga/individual/platform.openapi.yaml
  • openapi/ga/openapi.yaml
  • openapi/openapi.yaml
  • packages/nemo_platform_plugin/src/nemo_platform_plugin/jobs/client.py
  • packages/nemo_platform_plugin/src/nemo_platform_plugin/jobs/endpoints.py
  • packages/nemo_platform_plugin/src/nemo_platform_plugin/jobs/types.py
  • services/core/auth/src/nmp/core/auth/assets/static-authz.yaml
  • services/core/jobs/src/nmp/core/jobs/api/v2/jobs/endpoints.py
  • services/core/jobs/src/nmp/core/jobs/api/v2/jobs/schemas.py
  • services/core/jobs/src/nmp/core/jobs/app/dispatcher.py
  • services/core/jobs/tests/test_dispatcher.py
  • web/packages/studio/src/components/dataViews/JobsDataView/index.tsx
🚧 Files skipped from review as they are similar to previous changes (4)
  • services/core/jobs/src/nmp/core/jobs/api/v2/jobs/schemas.py
  • services/core/jobs/src/nmp/core/jobs/app/dispatcher.py
  • services/core/jobs/src/nmp/core/jobs/api/v2/jobs/endpoints.py
  • web/packages/studio/src/components/dataViews/JobsDataView/index.tsx

@marcusds
marcusds force-pushed the astd-45-add-source-sorting-to-jobs-filters/mschwab branch from ef72fcb to 1646be8 Compare July 16, 2026 17:45

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

🧹 Nitpick comments (1)
web/packages/studio/src/components/dataViews/JobsDataView/index.tsx (1)

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

Mark ComponentProps as a type-only import.

ComponentProps is used only as a type. As per coding guidelines, TypeScript type-only imports must be explicit.

Proposed fix
-import { ComponentProps, type ReactNode, useRef } from 'react';
+import { type ComponentProps, type ReactNode, useRef } from 'react';
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/packages/studio/src/components/dataViews/JobsDataView/index.tsx` at line
35, Update the import in JobsDataView to mark ComponentProps as a type-only
import, while leaving ReactNode and useRef as value imports.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@web/packages/studio/src/components/dataViews/JobsDataView/index.tsx`:
- Line 35: Update the import in JobsDataView to mark ComponentProps as a
type-only import, while leaving ReactNode and useRef as value imports.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 94208b2c-8886-4774-b2e0-9e5644ca981e

📥 Commits

Reviewing files that changed from the base of the PR and between ef72fcb and 1646be8.

📒 Files selected for processing (10)
  • openapi/ga/individual/platform.openapi.yaml
  • openapi/ga/openapi.yaml
  • openapi/openapi.yaml
  • packages/nemo_platform_plugin/src/nemo_platform_plugin/jobs/types.py
  • services/core/jobs/src/nmp/core/jobs/api/v2/jobs/endpoints.py
  • services/core/jobs/src/nmp/core/jobs/api/v2/jobs/schemas.py
  • services/core/jobs/src/nmp/core/jobs/app/dispatcher.py
  • services/core/jobs/tests/test_dispatcher.py
  • web/packages/studio/src/components/dataViews/JobsDataView/index.test.tsx
  • web/packages/studio/src/components/dataViews/JobsDataView/index.tsx

Sorting:
- Add source/-source to PlatformJobSortField so the jobs API accepts
  sorting by source. list_jobs already sorts generically, so no
  dispatcher logic change is required.
- Regenerate the OpenAPI spec with the new enum values.
- Enable sorting on the Studio Jobs 'Source' column.

Filtering:
- Accumulate source values seen in returned job data into the Source
  filter options so plugin-supplied sources (e.g. nemo-agents-plugin)
  appear alongside the static set instead of a hardcoded list.

Add dispatcher and Studio tests covering both.

Signed-off-by: mschwab <mschwab@nvidia.com>
@marcusds
marcusds force-pushed the astd-45-add-source-sorting-to-jobs-filters/mschwab branch from 1646be8 to 8903c30 Compare July 16, 2026 18:27
@github-actions

Copy link
Copy Markdown
Contributor

@marcusds
marcusds added this pull request to the merge queue Jul 16, 2026
Merged via the queue into main with commit 81be2f7 Jul 16, 2026
57 checks passed
@marcusds
marcusds deleted the astd-45-add-source-sorting-to-jobs-filters/mschwab branch July 16, 2026 18:58
soluwalana pushed a commit that referenced this pull request Jul 17, 2026
…#720)

Sorting:
- Add source/-source to PlatformJobSortField so the jobs API accepts
  sorting by source. list_jobs already sorts generically, so no
  dispatcher logic change is required.
- Regenerate the OpenAPI spec with the new enum values.
- Enable sorting on the Studio Jobs 'Source' column.

Filtering:
- Accumulate source values seen in returned job data into the Source
  filter options so plugin-supplied sources (e.g. nemo-agents-plugin)
  appear alongside the static set instead of a hardcoded list.

Add dispatcher and Studio tests covering both.

Signed-off-by: mschwab <mschwab@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants