Skip to content

TEST: PatternFly 6.5 prereleases preview - #7062

Closed
evwilkin wants to merge 6 commits into
opendatahub-io:mainfrom
evwilkin:chore/pf-3890-prereleases
Closed

evwilkin wants to merge 6 commits into
opendatahub-io:mainfrom
evwilkin:chore/pf-3890-prereleases

Conversation

@evwilkin

@evwilkin evwilkin commented Apr 3, 2026

Copy link
Copy Markdown

Description

This is a TEST PR to demonstrate PatternFly 6.5 prerelease versions for design review of glass & high contrast themes, among other updates. This included:

  • Bumping PatternFly versions through overrides to the latest prerelease versions
  • Updating use of the createIcon function which now expects icon details passed as an object
  • Adding the unstable_mask: undefined property in 2 test files as now required by react-router Location
  • Bumping monaco-editor dependency from ^0.50.0 to ^0.54.0
  • Set concatenateModules: false in frontend/config/webpack.prod.js to verify build due to external shared singletons (see PF-TESTING.md for full details)
  • Added temporary theme switcher to enable/disable all new themes to simplify review of new features

How Has This Been Tested?

No testing complete yet

Test Impact

No testing updates addressed in this draft PR

Request review criteria:

DO NOT MERGE

Self checklist (all need to be checked):

  • The developer has manually tested the changes and verified that the changes work
  • Testing instructions have been added in the PR body (for PRs involving changes that are not immediately obvious).
  • The developer has added tests or explained why testing cannot be added (unit or cypress tests for related changes)
  • The code follows our Best Practices (React coding standards, PatternFly usage, performance considerations)

If you have UI changes:

  • Included any necessary screenshots or gifs if it was a UI change.
  • Included tags to the UX team if it was a UI/UX change.

After the PR is posted & before it merges:

  • The developer has tested their solution on a cluster by using the image produced by the PR to main
Screenshot 2026-04-02 at 3 47 40 PM Screenshot 2026-04-03 at 10 47 41 AM

Summary by CodeRabbit

  • New Features

    • Added a theme selector widget to customize color mode (Light/Dark/System), contrast (Default/High/Glass), and theme variant, with preferences persisted across sessions.
  • Bug Fixes

    • Resolved production build failures caused by module concatenation/optimization by adjusting build optimization behavior.
  • Chores

    • Updated PatternFly-related packages and Monaco Editor; added query/serialization libraries for improved URL/query state handling.

@openshift-ci openshift-ci Bot added the do-not-merge/work-in-progress This PR is in WIP state label Apr 3, 2026
@coderabbitai

coderabbitai Bot commented Apr 3, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 290f0cff-cfa5-4c30-883e-f4acd70e4e65

📥 Commits

Reviewing files that changed from the base of the PR and between 5ce7f7e and 6bfc204.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json, !package-lock.json
📒 Files selected for processing (1)
  • packages/observability/package.json
✅ Files skipped from review due to trivial changes (1)
  • packages/observability/package.json

📝 Walkthrough

Walkthrough

This pull request adds a PatternFly Theme Testing Widget (React component, SCSS, App wiring) that persists theme/contrast choices in localStorage, updates webpack production config to set optimization.concatenateModules: false, updates many PatternFly and monaco-editor dependency versions and overrides, refactors 50+ icon files to nest SVG config under an icon object (renaming svgPathsvgPathData), adjusts several test mocks to include unstable_mask: undefined, and adds a few package dependency changes in observability.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Security & Logic Issues

  1. ThemeSelectorWidget — Unsafe DOM class toggling (CWE-79: Improper Neutralization of Input During Web Page Generation). The code applies classes to document.documentElement based on persisted or selected values (e.g., pf-v6-theme-high-contrast, pf-v6-theme-glass, pf-v6-theme-redhat). Enforce a strict whitelist of allowed class keys and reject or ignore any unknown/malformed values before calling classList.add/remove. Action: validate against enum before DOM mutation.

  2. ThemeSelectorWidget — Unchecked external string used in setAllThemes (CWE-20: Improper Input Validation). Calls like setAllThemes('dark'|'light') derive from user/localStorage values. Constrain accepted values to exact literals and ignore/repair invalid stored values. Action: map persisted strings via switch or lookup table; fall back to safe default.

  3. ThemeSelectorWidget — localStorage operations not resilient to quota/availability (CWE-346: Origin Validation Error / runtime failure). Writes can throw (private mode, quota). Wrap storage reads/writes in try/catch and degrade gracefully (in-memory fallback) and avoid relying on storage for critical UI flow. Action: add try/catch and telemetry/logging on failure.

  4. Webpack prod config — Broadly disabling module concatenation may weaken bundle-level optimization and hinder integrity assumptions (supply-chain impact). While not a direct code injection issue, it increases bundle size and may expose more surface during runtime analysis. Action: scope disable to federation-related builds or add a narrowly targeted fallback and document trade-offs.

  5. ThemeSelectorWidget.scss — Extremely high z-index (9999) creates overlay layering that can enable UI redress clickjacking-like issues if interactive elements can be placed above expected content (CWE-1021: UI Redressing). Action: reduce z-index, prefer containment/isolation or render in controlled portal within app shell and ensure focus/keyboard handling and accessible dismiss behavior.

  6. Dependency upgrades — Upgrading to prerelease PatternFly packages without pinning exact prerelease versions can introduce unexpectedly changed APIs that affect security behavior (CWE-1106: Use of Revealing Sensitive Information to an Unauthorized Actor is possible via semantic changes). Action: pin exact prerelease versions in lockfile/overrides and run dependency vulnerability scan; include CHANGELOG verification for breaking changes.

  7. Mass manual icon refactor — Large repetitive manual changes risk introducing inconsistent shapes or accidental exports/typos across many files (CWE-494: Download of Code Without Integrity Check). Action: run automated linters/compile checks and add a small regression test that imports a representative set of icons; prefer automated codemod for consistency.

  8. Test mocks adding unstable_mask — Adding unstable_mask hints at underlying react-router API/type drift. If production code assumes a Location shape that now includes new fields, runtime behavior may diverge. Action: validate production usages of Location properties, update typings, and avoid using unstable/experimental fields in production logic.

  9. Missing type-check responses — The PR notes TypeScript type-check errors left unimplemented. Unresolved type mismatches can allow incorrect runtime assumptions (CWE-704: Incorrect Type Conversion or Cast). Action: fix TS errors or add explicit type guards where mismatches occur and re-run full type-check.

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main objective: a test PR previewing PatternFly 6.5 prerelease versions.
Description check ✅ Passed The description covers the core changes, acknowledges it is a test PR marked DO NOT MERGE, includes screenshots, and documents that testing has not been completed. However, several self-checklist items remain unchecked per the author's intent.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


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

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

@openshift-ci

openshift-ci Bot commented Apr 3, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign manaswinidas for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci Bot added needs-rebase PR needs to be rebased area/components area/eval-hub area/feature-store needs-ok-to-test The openshift bot needs to label PRs from non members to avoid strain on the CI area/frontend labels Apr 3, 2026
@openshift-ci

openshift-ci Bot commented Apr 3, 2026

Copy link
Copy Markdown
Contributor

Hi @evwilkin. Thanks for your PR.

I'm waiting for a opendatahub-io member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work.

Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@evwilkin
evwilkin force-pushed the chore/pf-3890-prereleases branch from 46d2ace to 5406ead Compare April 3, 2026 18:18
@openshift-ci openshift-ci Bot removed the needs-rebase PR needs to be rebased label Apr 3, 2026
@evwilkin
evwilkin force-pushed the chore/pf-3890-prereleases branch from 5406ead to 5ce7f7e Compare April 6, 2026 15:13
@evwilkin
evwilkin marked this pull request as ready for review April 6, 2026 18:16
@openshift-ci openshift-ci Bot removed the do-not-merge/work-in-progress This PR is in WIP state label Apr 6, 2026

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

🧹 Nitpick comments (5)
packages/feature-store/src/apiHooks/__tests__/useFeatureStoreObject.spec.tsx (1)

44-44: Extract a shared mock-location builder for repeated Location literals.

Line 44, Line 60, Line 76, Line 90, and Line 106 duplicate the same location shape and repeated lint suppression. Centralize this in one helper to reduce drift and maintenance noise.

Proposed refactor
+const createMockLocation = (pathname: string, key = 'test') => ({
+  pathname,
+  search: '',
+  hash: '',
+  state: null,
+  key,
+  unstable_mask: undefined, // eslint-disable-line camelcase
+});
+
   it('should return entities when location pathname contains entities', () => {
-    useLocationMock.mockReturnValue({
-      pathname: '/develop-train/feature-store/entities/project1',
-      search: '',
-      hash: '',
-      state: null,
-      key: 'test',
-      unstable_mask: undefined, // eslint-disable-line camelcase
-    });
+    useLocationMock.mockReturnValue(
+      createMockLocation('/develop-train/feature-store/entities/project1'),
+    );

Also applies to: 60-60, 76-76, 90-90, 106-106

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/feature-store/src/apiHooks/__tests__/useFeatureStoreObject.spec.tsx`
at line 44, Extract the repeated Location literal into a single helper (e.g.,
makeMockLocation or mockLocation) inside the test file and return the object
including unstable_mask: undefined (preserving the eslint-disable-line camelcase
semantics inside the helper), then replace all duplicate inline Location objects
used in useFeatureStoreObject.spec.tsx with calls to that helper (or a shallow
clone of it when mutating in individual tests) so the same shape is centralized
and the eslint suppression is no longer duplicated.
frontend/src/app/ThemeSelectorWidget.scss (1)

1-6: z-index: 9999 may conflict with PatternFly modal/dropdown layers.

PatternFly modals and popovers typically use z-index values in the 2000-9999 range. This widget could appear above or interact unexpectedly with those components. Given this is a temporary preview widget per PR description, acceptable for now but ensure removal before merge.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@frontend/src/app/ThemeSelectorWidget.scss` around lines 1 - 6, The
.odh-theme-selector-widget currently sets z-index: 9999 which may overlap
PatternFly modals/popovers; change the z-index in ThemeSelectorWidget.scss for
the .odh-theme-selector-widget selector to a value below PatternFly
modal/popover layers (e.g., ~1999) or use a PatternFly z-index CSS variable if
available (instead of 9999), and add a short comment noting this is a temporary
preview widget to be removed before merge.
PF-TESTING.md (2)

35-38: Verify localStorage keys match implementation.

The documented keys should match those in ThemeSelectorWidget.tsx. Cross-reference:

  • odh.dashboard.ui.contrast
  • odh.dashboard.ui.pftheme
  • odh.dashboard.ui.systemTheme

The existing odh.dashboard.ui.theme key (managed by ThemeContext.tsx) is not listed here but persists the light/dark selection. Consider adding it for completeness.

📝 Suggested addition
 Users can also clear the localStorage keys if desired:
 - `odh.dashboard.ui.contrast`
 - `odh.dashboard.ui.pftheme`
 - `odh.dashboard.ui.systemTheme`
+- `odh.dashboard.ui.theme` (existing key for light/dark mode)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@PF-TESTING.md` around lines 35 - 38, The PF-TESTING.md localStorage keys list
is missing the `odh.dashboard.ui.theme` key used by ThemeContext.tsx to persist
light/dark selection; update the list to include `odh.dashboard.ui.theme` so it
matches the implementation in ThemeSelectorWidget.tsx and ThemeContext.tsx and
ensure the README explicitly lists all four keys (`odh.dashboard.ui.contrast`,
`odh.dashboard.ui.pftheme`, `odh.dashboard.ui.systemTheme`,
`odh.dashboard.ui.theme`).

46-48: Add language specification to fenced code block.

The error message block at line 46 should specify a language (e.g., text or plaintext) for consistency with markdown linting rules.

📝 Suggested fix
-```
+```text
 Target module of reexport from '...' is not part of the concatenation
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @PF-TESTING.md around lines 46 - 48, The fenced code block containing the
error message "Target module of reexport from '...' is not part of the
concatenation" lacks a language specifier; update that triple-backtick block
(...) to include a language identifier such as "text" or "plaintext"
(e.g., ```text) so the markdown linter recognizes it correctly and preserves the
message formatting.


</details>

</blockquote></details>
<details>
<summary>frontend/src/app/ThemeSelectorWidget.tsx (1)</summary><blockquote>

`77-98`: **Wrap `handleSelect` in `useCallback` — it's passed as a prop to `Select`.**

Per coding guidelines: "Only use useCallback when the function is passed as a prop." `handleSelect` is passed to `<Select onSelect={handleSelect}>`, so it should be memoized to prevent unnecessary re-renders of the Select component.



<details>
<summary>♻️ Proposed fix</summary>

```diff
-  const handleSelect = (_e: React.MouseEvent | undefined, itemId: string | number | undefined) => {
+  const handleSelect = React.useCallback((_e: React.MouseEvent | undefined, itemId: string | number | undefined) => {
     const id = String(itemId);
     if (id === 'color-light') {
       setUseSystemTheme(false);
       setAllThemes('light');
     } else if (id === 'color-dark') {
       setUseSystemTheme(false);
       setAllThemes('dark');
     } else if (id === 'color-system') {
       setUseSystemTheme(true);
     } else if (id.startsWith('contrast-')) {
       const mode = id.replace('contrast-', '');
       if (isContrastMode(mode)) {
         setContrast(mode);
       }
     } else if (id.startsWith('theme-')) {
       const variant = id.replace('theme-', '');
       if (isPfThemeVariant(variant)) {
         setPfTheme(variant);
       }
     }
-  };
+  }, [setUseSystemTheme, setAllThemes, setContrast, setPfTheme]);
```
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
Verify each finding against the current code and only fix it if needed.

In `@frontend/src/app/ThemeSelectorWidget.tsx` around lines 77 - 98, handleSelect
is passed as a prop to Select and should be memoized with useCallback to avoid
unnecessary re-renders; wrap the existing handleSelect implementation in
React.useCallback and return the same logic, and include all referenced
values/functions in its dependency array (setUseSystemTheme, setAllThemes,
setContrast, setPfTheme, isContrastMode, isPfThemeVariant) so the callback
updates when those change. Ensure the variable name remains handleSelect and
that the Select uses onSelect={handleSelect}.
```

</details>

</blockquote></details>

</blockquote></details>

<details>
<summary>🤖 Prompt for all review comments with AI agents</summary>

Verify each finding against the current code and only fix it if needed.

Inline comments:
In @frontend/config/webpack.prod.js:

  • Around line 42-46: The optimization setting concatenateModules: false in the
    webpack production config causes dev/prod parity issues and larger bundles;
    update this by adding the same concatenateModules: false into the optimization
    block of webpack.dev.js so dev and prod match, add an inline comment in both
    webpack.prod.js and webpack.dev.js explaining this is a temporary workaround
    referencing the PatternFly prerelease issue/version (e.g., PatternFly 6.5
    prerelease) and why scope hoisting is disabled, create a tech-debt ticket in
    your tracker with a target fix date tied to the PatternFly 6.5 stable release,
    and run/attach results from webpack-bundle-analyzer to the PR to show bundle
    size impact before merging (also leave a TODO in the configs to remove the
    workaround once the PatternFly issue is resolved).

In @frontend/package.json:

  • Around line 245-247: The package.json contains duplicate overrides for
    @patternfly/react-topology causing the latter ("^6.5.0-prerelease.4") to
    overwrite the earlier object that pins react to "^18.2.0"; locate the
    @patternfly/react-topology override and merge the constraints so a single
    override includes both the package version and the react singleton entry (e.g.,
    combine the version string with a nested "react": "^18.2.0" override) or, if
    your npm version doesn't support that syntax, remove the duplicate override and
    keep only the single override that enforces the React singleton while depending
    on the direct dependency for the package version.

In @frontend/src/images/icons/EnabledApplicationsIcon.ts:

  • Around line 3-13: The createIcon call for EnabledApplicationsIcon uses a
    nested icon object and svgPathData, but the createIcon API expects properties at
    the top level and the path key named svgPath; update the EnabledApplicationsIcon
    initialization to remove the icon wrapper and move width, height, xOffset,
    yOffset and the path string into the top-level object and rename svgPathData to
    svgPath when calling createIcon.

In @frontend/src/images/icons/ServingRuntimeIcon.ts:

  • Around line 3-13: The project uses a new icon API shape (an icon object with
    svgPathData, width, height, xOffset, yOffset) as shown by
    ServingRuntimeIcon; migrate AutoragIcon and AutomlIcon to that shape by
    replacing their top-level properties (svgPath, width, height, xOffset,
    yOffset) with a single icon object containing svgPathData (move the value
    from svgPath), width, height, xOffset, and yOffset, keeping the same
    call to createIcon and the same exported constant names (AutoragIcon,
    AutomlIcon) so the API and usage remain unchanged.

In @package.json:

  • Around line 109-122: The package.json contains duplicate keys for
    "@patternfly/react-topology" (one as an object overriding the peer "react" and
    one as a version string), so merge the intent into a single entry: either remove
    the first peer override if you only intend to pin the package version, or
    combine the intents by keeping one "@patternfly/react-topology" key and
    consolidating both the version pin and the peer override (i.e., make a single
    overrides entry that preserves the react peer override or the version pin as
    required). Update the "@patternfly/react-topology" entry accordingly and delete
    the other duplicate key.

In @packages/eval-hub/frontend/src/app/icons/SupportIcon.ts:

  • Line 9: Prettier is failing because the long SVG path string inside the
    SupportIcon component (the string starting "M11.6668 22.3691H10.1113...") is
    mis-indented on that line; fix by reformatting that line to match the file's
    indentation (or run Prettier on the file) so the path string aligns with the
    surrounding JSX/TS code and trailing comma/quotes remain unchanged, targeting
    the SupportIcon component's SVG path literal.

In @packages/eval-hub/frontend/src/odh/ModArchNavIcon.ts:

  • Around line 8-9: The svgPathData value in ModArchNavIcon.ts has its
    continuation line mis-indented; adjust the string line for the svgPathData
    property so it has two leading spaces to match the surrounding indentation
    (i.e., align the line that begins with 'M2,2h10v10H2V2ZM4,4v6h6V4H4...') so the
    linter no longer flags the missing indentation.

Nitpick comments:
In @frontend/src/app/ThemeSelectorWidget.scss:

  • Around line 1-6: The .odh-theme-selector-widget currently sets z-index: 9999
    which may overlap PatternFly modals/popovers; change the z-index in
    ThemeSelectorWidget.scss for the .odh-theme-selector-widget selector to a value
    below PatternFly modal/popover layers (e.g., ~1999) or use a PatternFly z-index
    CSS variable if available (instead of 9999), and add a short comment noting this
    is a temporary preview widget to be removed before merge.

In @frontend/src/app/ThemeSelectorWidget.tsx:

  • Around line 77-98: handleSelect is passed as a prop to Select and should be
    memoized with useCallback to avoid unnecessary re-renders; wrap the existing
    handleSelect implementation in React.useCallback and return the same logic, and
    include all referenced values/functions in its dependency array
    (setUseSystemTheme, setAllThemes, setContrast, setPfTheme, isContrastMode,
    isPfThemeVariant) so the callback updates when those change. Ensure the variable
    name remains handleSelect and that the Select uses onSelect={handleSelect}.

In
@packages/feature-store/src/apiHooks/__tests__/useFeatureStoreObject.spec.tsx:

  • Line 44: Extract the repeated Location literal into a single helper (e.g.,
    makeMockLocation or mockLocation) inside the test file and return the object
    including unstable_mask: undefined (preserving the eslint-disable-line camelcase
    semantics inside the helper), then replace all duplicate inline Location objects
    used in useFeatureStoreObject.spec.tsx with calls to that helper (or a shallow
    clone of it when mutating in individual tests) so the same shape is centralized
    and the eslint suppression is no longer duplicated.

In @PF-TESTING.md:

  • Around line 35-38: The PF-TESTING.md localStorage keys list is missing the
    odh.dashboard.ui.theme key used by ThemeContext.tsx to persist light/dark
    selection; update the list to include odh.dashboard.ui.theme so it matches the
    implementation in ThemeSelectorWidget.tsx and ThemeContext.tsx and ensure the
    README explicitly lists all four keys (odh.dashboard.ui.contrast,
    odh.dashboard.ui.pftheme, odh.dashboard.ui.systemTheme,
    odh.dashboard.ui.theme).
  • Around line 46-48: The fenced code block containing the error message "Target
    module of reexport from '...' is not part of the concatenation" lacks a language
    specifier; update that triple-backtick block (...) to include a language
    identifier such as "text" or "plaintext" (e.g., ```text) so the markdown linter
    recognizes it correctly and preserves the message formatting.

</details>

<details>
<summary>🪄 Autofix (Beta)</summary>

Fix all unresolved CodeRabbit comments on this PR:

- [ ] <!-- {"checkboxId": "4b0d0e0a-96d7-4f10-b296-3a18ea78f0b9"} --> Push a commit to this branch (recommended)
- [ ] <!-- {"checkboxId": "ff5b1114-7d8c-49e6-8ac1-43f82af23a33"} --> Create a new PR with the fixes

</details>

---

<details>
<summary>ℹ️ Review info</summary>

<details>
<summary>⚙️ Run configuration</summary>

**Configuration used**: Repository YAML (base), Central YAML (inherited), Organization UI (inherited)

**Review profile**: CHILL

**Plan**: Pro

**Run ID**: `81cdecd2-f5a1-4c55-9284-245f33d35439`

</details>

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 406d9caf5796bb5ce56cb7ddd8877f3c0e66fba1 and 5ce7f7ef95a099a5a8c5d6f86ee92d01dbc498d1.

</details>

<details>
<summary>⛔ Files ignored due to path filters (1)</summary>

* `package-lock.json` is excluded by `!**/package-lock.json`, `!package-lock.json`

</details>

<details>
<summary>📒 Files selected for processing (80)</summary>

* `PF-TESTING.md`
* `frontend/config/webpack.prod.js`
* `frontend/package.json`
* `frontend/src/app/App.tsx`
* `frontend/src/app/ThemeSelectorWidget.scss`
* `frontend/src/app/ThemeSelectorWidget.tsx`
* `frontend/src/components/__tests__/NavigationBlockerModal.spec.tsx`
* `frontend/src/images/icons/AiExperienceIcon.ts`
* `frontend/src/images/icons/AiHubNavIcon.ts`
* `frontend/src/images/icons/ApplicationsNavIcon.ts`
* `frontend/src/images/icons/ArtifactIcon.ts`
* `frontend/src/images/icons/BuildIcon.ts`
* `frontend/src/images/icons/CheckmarkIcon.ts`
* `frontend/src/images/icons/ClusterSettingsIcon.ts`
* `frontend/src/images/icons/ConfigurationIcon.ts`
* `frontend/src/images/icons/CreateAndTrainIcon.ts`
* `frontend/src/images/icons/DataConnectionIcon.ts`
* `frontend/src/images/icons/DeployedModelIcon.ts`
* `frontend/src/images/icons/DevelopAndTrainNavIcon.ts`
* `frontend/src/images/icons/DistributedWorkloadIcon.ts`
* `frontend/src/images/icons/EnabledApplicationsIcon.ts`
* `frontend/src/images/icons/ExperimentIcon.ts`
* `frontend/src/images/icons/ExploreApplicationsIcon.ts`
* `frontend/src/images/icons/GlobalIcon.ts`
* `frontend/src/images/icons/GroupIcon.ts`
* `frontend/src/images/icons/HardwareProfileIcon.ts`
* `frontend/src/images/icons/HomeNavIcon.ts`
* `frontend/src/images/icons/LabTuningIcon.ts`
* `frontend/src/images/icons/LearningResourcesNavIcon.ts`
* `frontend/src/images/icons/ModelCatalogIcon.ts`
* `frontend/src/images/icons/ModelConnectionRocketIcon.ts`
* `frontend/src/images/icons/ModelEvaluationIcon.ts`
* `frontend/src/images/icons/ModelIcon.ts`
* `frontend/src/images/icons/ModelRegistryIcon.ts`
* `frontend/src/images/icons/ModelRegistrySelectIcon.ts`
* `frontend/src/images/icons/ModelServerIcon.ts`
* `frontend/src/images/icons/MultiModelIcon.ts`
* `frontend/src/images/icons/NotebookIcon.ts`
* `frontend/src/images/icons/NotebookImageIcon.ts`
* `frontend/src/images/icons/ObserveAndMonitorNavIcon.ts`
* `frontend/src/images/icons/PermissionsIcon.ts`
* `frontend/src/images/icons/PipelineIcon.ts`
* `frontend/src/images/icons/PipelineRunIcon.ts`
* `frontend/src/images/icons/ProjectIcon.ts`
* `frontend/src/images/icons/ProjectsNavIcon.ts`
* `frontend/src/images/icons/PromptManagementIcon.ts`
* `frontend/src/images/icons/RegisteredModelIcon.ts`
* `frontend/src/images/icons/ResourcesIcon.ts`
* `frontend/src/images/icons/RhUiControlsIcon.ts`
* `frontend/src/images/icons/RhUiTagIcon.ts`
* `frontend/src/images/icons/ScrewWrenchIcon.ts`
* `frontend/src/images/icons/ServingRuntimeIcon.ts`
* `frontend/src/images/icons/SettingsNavIcon.ts`
* `frontend/src/images/icons/SingleModelIcon.ts`
* `frontend/src/images/icons/StorageClassIcon.ts`
* `frontend/src/images/icons/StorageIcon.ts`
* `frontend/src/images/icons/UserIcon.ts`
* `frontend/src/utilities/__tests__/v2Redirect.spec.tsx`
* `package.json`
* `packages/eval-hub/frontend/src/app/icons/SupportIcon.ts`
* `packages/eval-hub/frontend/src/odh/ModArchNavIcon.ts`
* `packages/feature-store/src/apiHooks/__tests__/useFeatureStoreObject.spec.tsx`
* `packages/feature-store/src/icons/header-icons/DataSetIcon.ts`
* `packages/feature-store/src/icons/header-icons/DataSourceIcon.ts`
* `packages/feature-store/src/icons/header-icons/EntityIcon.ts`
* `packages/feature-store/src/icons/header-icons/FeatureIcon.ts`
* `packages/feature-store/src/icons/header-icons/FeatureServiceIcon.ts`
* `packages/feature-store/src/icons/header-icons/FeatureStoreIcon.ts`
* `packages/feature-store/src/icons/header-icons/FeatureViewIcon.ts`
* `packages/feature-store/src/icons/header-icons/SupportIcon.ts`
* `packages/feature-store/src/icons/lineage-icons/DataSourceIcon.ts`
* `packages/feature-store/src/icons/lineage-icons/EntityIcon.ts`
* `packages/feature-store/src/icons/lineage-icons/FeatureServiceIcon.ts`
* `packages/feature-store/src/icons/lineage-icons/FeatureStoreIcon.ts`
* `packages/feature-store/src/icons/lineage-icons/FeatureViewIcon.ts`
* `packages/gen-ai/frontend/src/app/images/icons/AiAssetEndpointsIcon.ts`
* `packages/gen-ai/frontend/src/app/images/icons/PlaygroundIcon.ts`
* `packages/gen-ai/frontend/src/odh/GenAiStudioNavIcon.ts`
* `packages/maas/frontend/src/odh/odhExtensions/GenAiStudioNavIcon.ts`
* `packages/mlflow/frontend/src/odh/MlflowNavIcon.ts`

</details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->

Comment on lines 42 to 46
optimization: {
minimize: true,
minimizer: [new TerserJSPlugin(), new CssMinimizerPlugin()],
concatenateModules: false,
},

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.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if dev webpack config has concatenateModules setting
rg -n "concatenateModules" frontend/config/

Repository: opendatahub-io/odh-dashboard

Length of output: 139


🏁 Script executed:

cd frontend/config && ls -la webpack.*

Repository: opendatahub-io/odh-dashboard

Length of output: 270


🏁 Script executed:

cat -n frontend/config/webpack.dev.js | head -80

Repository: opendatahub-io/odh-dashboard

Length of output: 3414


🏁 Script executed:

if [ -f frontend/config/webpack.common.js ]; then cat -n frontend/config/webpack.common.js | head -100; else echo "webpack.common.js not found"; fi

Repository: opendatahub-io/odh-dashboard

Length of output: 4535


🏁 Script executed:

grep -n "optimization" frontend/config/webpack.common.js

Repository: opendatahub-io/odh-dashboard

Length of output: 93


🏁 Script executed:

cat -n frontend/config/webpack.prod.js

Repository: opendatahub-io/odh-dashboard

Length of output: 2557


🏁 Script executed:

sed -n '226,250p' frontend/config/webpack.common.js

Repository: opendatahub-io/odh-dashboard

Length of output: 836


Disabling concatenateModules creates dev/prod parity violation and increases production bundle size.

Scope hoisting optimization is disabled only in production (line 45), not in development. This masks potential module concatenation issues during development that would manifest in production, violating the dev/prod parity guideline. Additionally, disabling scope hoisting increases bundle size and load times in production.

This is a workaround for the Module Federation + PatternFly prerelease issue. Require:

  1. Document why this override is necessary (reference PatternFly issue/version)
  2. Track as tech debt with target fix date (when PatternFly 6.5 stable releases)
  3. Add the same concatenateModules: false to webpack.dev.js to maintain parity until the underlying issue is resolved
  4. Measure bundle size impact with webpack-bundle-analyzer before merge
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@frontend/config/webpack.prod.js` around lines 42 - 46, The optimization
setting concatenateModules: false in the webpack production config causes
dev/prod parity issues and larger bundles; update this by adding the same
concatenateModules: false into the optimization block of webpack.dev.js so dev
and prod match, add an inline comment in both webpack.prod.js and webpack.dev.js
explaining this is a temporary workaround referencing the PatternFly prerelease
issue/version (e.g., PatternFly 6.5 prerelease) and why scope hoisting is
disabled, create a tech-debt ticket in your tracker with a target fix date tied
to the PatternFly 6.5 stable release, and run/attach results from
webpack-bundle-analyzer to the PR to show bundle size impact before merging
(also leave a TODO in the configs to remove the workaround once the PatternFly
issue is resolved).

Comment thread frontend/package.json
Comment on lines 245 to 247
"@patternfly/react-topology": {
"react": "^18.2.0"
},

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.

⚠️ Potential issue | 🟠 Major

Duplicate @patternfly/react-topology override key — second entry overwrites first.

Lines 245-247 define an override for @patternfly/react-topology to pin react: "^18.2.0". Line 258 redefines the same key with just the version string "^6.5.0-prerelease.4". The second definition silently overwrites the first, losing the React singleton override.

This can cause Module Federation shared singleton conflicts if react-topology resolves a different React version.

🔧 Proposed fix: merge both constraints
     "@patternfly/react-topology": {
-      "react": "^18.2.0"
+      "react": "^18.2.0",
+      ".": "^6.5.0-prerelease.4"
     },
     "@patternfly/patternfly": "^6.5.0-prerelease.64",
...
-    "@patternfly/react-topology": "^6.5.0-prerelease.4",

Alternatively, if npm overrides don't support the . self-reference syntax in your npm version, remove the duplicate and rely on the direct dependency declaration at line 85 for the version, keeping only the React override:

     "@patternfly/react-topology": {
       "react": "^18.2.0"
     },
...
-    "@patternfly/react-topology": "^6.5.0-prerelease.4",

Also applies to: 258-258

🧰 Tools
🪛 Biome (2.4.10)

[error] 245-245: The key @patternfly/react-topology was already declared.

(lint/suspicious/noDuplicateObjectKeys)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@frontend/package.json` around lines 245 - 247, The package.json contains
duplicate overrides for `@patternfly/react-topology` causing the latter
("^6.5.0-prerelease.4") to overwrite the earlier object that pins react to
"^18.2.0"; locate the `@patternfly/react-topology` override and merge the
constraints so a single override includes both the package version and the react
singleton entry (e.g., combine the version string with a nested "react":
"^18.2.0" override) or, if your npm version doesn't support that syntax, remove
the duplicate override and keep only the single override that enforces the React
singleton while depending on the direct dependency for the package version.

Comment on lines 3 to 13
const EnabledApplicationsIcon = createIcon({
name: 'EnabledApplicationsIcon',
width: 36,
height: 36,
svgPath:
'm 14.558,23.442 a 0.625,0.625 0 0 0 0.884,0 l 10.5,-10.5 A 0.62508239,0.62508239 0 0 0 25.058,12.058 L 15,22.116 11.442,18.558 a 0.62508239,0.62508239 0 0 0 -0.884,0.884 z M 31,4.375 H 5 A 0.625,0.625 0 0 0 4.375,5 V 31 A 0.625,0.625 0 0 0 5,31.625 H 31 A 0.625,0.625 0 0 0 31.625,31 V 5 A 0.625,0.625 0 0 0 31,4.375 Z m -0.625,26 H 5.625 V 5.625 h 24.75 z',
xOffset: 0,
yOffset: 0,
icon: {
width: 36,
height: 36,
svgPathData:
'm 14.558,23.442 a 0.625,0.625 0 0 0 0.884,0 l 10.5,-10.5 A 0.62508239,0.62508239 0 0 0 25.058,12.058 L 15,22.116 11.442,18.558 a 0.62508239,0.62508239 0 0 0 -0.884,0.884 z M 31,4.375 H 5 A 0.625,0.625 0 0 0 4.375,5 V 31 A 0.625,0.625 0 0 0 5,31.625 H 31 A 0.625,0.625 0 0 0 31.625,31 V 5 A 0.625,0.625 0 0 0 31,4.375 Z m -0.625,26 H 5.625 V 5.625 h 24.75 z',
xOffset: 0,
yOffset: 0,
},
});

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.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🌐 Web query:

What is the createIcon function signature in @patternfly/react-icons version 6.5?

💡 Result:

I couldn’t find a published stable @patternfly/react-icons 6.5.x release to verify against (Snyk lists latest stable as 6.4.0, and references 6.5.0-prerelease builds). [2]

In the latest 6.x createIcon.d.ts I could retrieve (from @patternfly/react-icons@6.1.0), the function signature is: [1]

export declare function createIcon(
  { name, xOffset, yOffset, width, height, svgPath }: IconDefinition
): React.ComponentClass<SVGIconProps>;

Fix createIcon API usage: structure does not match documented signature.

The code nests properties under an icon object and uses svgPathData, but the createIcon function expects these properties at the top level with the property named svgPath:

Corrected structure
const EnabledApplicationsIcon = createIcon({
  name: 'EnabledApplicationsIcon',
  width: 36,
  height: 36,
  svgPath: 'm 14.558,23.442 a 0.625,0.625 0 0 0 0.884,0 l 10.5,-10.5 A 0.62508239,0.62508239 0 0 0 25.058,12.058 L 15,22.116 11.442,18.558 a 0.62508239,0.62508239 0 0 0 -0.884,0.884 z M 31,4.375 H 5 A 0.625,0.625 0 0 0 4.375,5 V 31 A 0.625,0.625 0 0 0 5,31.625 H 31 A 0.625,0.625 0 0 0 31.625,31 V 5 A 0.625,0.625 0 0 0 31,4.375 Z m -0.625,26 H 5.625 V 5.625 h 24.75 z',
  xOffset: 0,
  yOffset: 0,
});
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@frontend/src/images/icons/EnabledApplicationsIcon.ts` around lines 3 - 13,
The createIcon call for EnabledApplicationsIcon uses a nested icon object and
svgPathData, but the createIcon API expects properties at the top level and the
path key named svgPath; update the EnabledApplicationsIcon initialization to
remove the icon wrapper and move width, height, xOffset, yOffset and the path
string into the top-level object and rename svgPathData to svgPath when calling
createIcon.

Comment on lines 3 to 13
const ServingRuntimeIcon = createIcon({
name: 'ServingRuntimeIcon',
width: 36,
height: 36,
svgPath:
'm 24,10.38 h -7.46 a 2.62,2.62 0 1 0 0,1.24 h 2.84 V 13 a 0.62,0.62 0 1 0 1.24,0 v -1.38 h 0.76 V 13 a 0.62,0.62 0 1 0 1.24,0 v -1.38 h 0.76 V 12 a 0.62,0.62 0 1 0 1.24,0 V 11 A 0.61,0.61 0 0 0 24,10.38 Z m -10,2 A 1.38,1.38 0 1 1 15.38,11 1.38,1.38 0 0 1 14,12.38 Z M 9,23.62 h 6 a 0.62,0.62 0 0 0 0,-1.24 H 9 a 0.62,0.62 0 0 0 0,1.24 z M 31,17.38 H 5 A 0.61,0.61 0 0 0 4.38,18 V 28 A 0.61,0.61 0 0 0 5,28.62 H 31 A 0.61,0.61 0 0 0 31.62,28 V 18 A 0.61,0.61 0 0 0 31,17.38 Z m -0.62,10 H 5.62 V 18.62 H 30.38 Z M 27.62,22.99 A 0.62,0.62 0 0 1 27,23.61 0.62,0.62 0 0 1 26.38,22.99 0.62,0.62 0 0 1 27,22.37 a 0.62,0.62 0 0 1 0.62,0.62 z',
xOffset: 0,
yOffset: 0,
icon: {
width: 36,
height: 36,
svgPathData:
'm 24,10.38 h -7.46 a 2.62,2.62 0 1 0 0,1.24 h 2.84 V 13 a 0.62,0.62 0 1 0 1.24,0 v -1.38 h 0.76 V 13 a 0.62,0.62 0 1 0 1.24,0 v -1.38 h 0.76 V 12 a 0.62,0.62 0 1 0 1.24,0 V 11 A 0.61,0.61 0 0 0 24,10.38 Z m -10,2 A 1.38,1.38 0 1 1 15.38,11 1.38,1.38 0 0 1 14,12.38 Z M 9,23.62 h 6 a 0.62,0.62 0 0 0 0,-1.24 H 9 a 0.62,0.62 0 0 0 0,1.24 z M 31,17.38 H 5 A 0.61,0.61 0 0 0 4.38,18 V 28 A 0.61,0.61 0 0 0 5,28.62 H 31 A 0.61,0.61 0 0 0 31.62,28 V 18 A 0.61,0.61 0 0 0 31,17.38 Z m -0.62,10 H 5.62 V 18.62 H 30.38 Z M 27.62,22.99 A 0.62,0.62 0 0 1 27,23.61 0.62,0.62 0 0 1 26.38,22.99 0.62,0.62 0 0 1 27,22.37 a 0.62,0.62 0 0 1 0.62,0.62 z',
xOffset: 0,
yOffset: 0,
},
});

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.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Find icon files still using the old flat createIcon API pattern (svgPath at top level)
rg -l 'svgPath:' --type ts --glob '**/icons/**' | head -20

Repository: opendatahub-io/odh-dashboard

Length of output: 193


🏁 Script executed:

#!/bin/bash
# Examine the AutoragIcon.ts file structure
echo "=== AutoragIcon.ts ==="
cat -n "packages/autorag/frontend/src/app/images/icons/AutoragIcon.ts"

echo ""
echo "=== AutomlIcon.ts ==="
cat -n "packages/automl/frontend/src/app/images/icons/AutomlIcon.ts"

echo ""
echo "=== ServingRuntimeIcon.ts (file under review) ==="
cat -n "frontend/src/images/icons/ServingRuntimeIcon.ts"

Repository: opendatahub-io/odh-dashboard

Length of output: 7336


Migrate AutoragIcon.ts and AutomlIcon.ts to the nested icon object structure.

Files packages/autorag/frontend/src/app/images/icons/AutoragIcon.ts and packages/automl/frontend/src/app/images/icons/AutomlIcon.ts still use the old flat API with top-level svgPath, width, height, xOffset, yOffset. ServingRuntimeIcon.ts demonstrates the new nested structure with an icon object and svgPathData property. Migrate all icon files to the new pattern to maintain consistency and avoid build failures when the API is finalized.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@frontend/src/images/icons/ServingRuntimeIcon.ts` around lines 3 - 13, The
project uses a new icon API shape (an `icon` object with `svgPathData`, `width`,
`height`, `xOffset`, `yOffset`) as shown by ServingRuntimeIcon; migrate
AutoragIcon and AutomlIcon to that shape by replacing their top-level properties
(`svgPath`, `width`, `height`, `xOffset`, `yOffset`) with a single `icon` object
containing `svgPathData` (move the value from `svgPath`), `width`, `height`,
`xOffset`, and `yOffset`, keeping the same call to createIcon and the same
exported constant names (AutoragIcon, AutomlIcon) so the API and usage remain
unchanged.

Comment thread package.json
Comment on lines 109 to +122
"@patternfly/react-topology": {
"react": "^18.2.0"
},
"@patternfly/patternfly": "^6.5.0-prerelease.64",
"@patternfly/react-core": "^6.5.0-prerelease.48",
"@patternfly/react-icons": "^6.5.0-prerelease.19",
"@patternfly/react-styles": "^6.5.0-prerelease.15",
"@patternfly/react-table": "^6.5.0-prerelease.49",
"@patternfly/react-tokens": "^6.5.0-prerelease.14",
"@patternfly/react-code-editor": "^6.5.0-prerelease.51",
"@patternfly/react-charts": "^8.5.0-prerelease.18",
"@patternfly/react-drag-drop": "^6.5.0-prerelease.49",
"@patternfly/react-templates": "^6.5.0-prerelease.48",
"@patternfly/react-topology": "^6.5.0-prerelease.4",

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.

⚠️ Potential issue | 🟠 Major

Duplicate override key @patternfly/react-topology causes first entry to be silently discarded.

Lines 109-111 set "@patternfly/react-topology": { "react": "^18.2.0" } while line 122 sets "@patternfly/react-topology": "^6.5.0-prerelease.4". JSON object keys must be unique—the second wins, losing the react peer dependency override.

Merge both intents into a single entry:

Proposed fix
-    "@patternfly/react-topology": {
-      "react": "^18.2.0"
-    },
     "@patternfly/patternfly": "^6.5.0-prerelease.64",
     ...
-    "@patternfly/react-topology": "^6.5.0-prerelease.4",
+    "@patternfly/react-topology": {
+      ".": "^6.5.0-prerelease.4",
+      "react": "^18.2.0"
+    },

Alternatively, if the version override alone is intended and react override is no longer needed, remove the first block entirely.

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

Suggested change
"@patternfly/react-topology": {
"react": "^18.2.0"
},
"@patternfly/patternfly": "^6.5.0-prerelease.64",
"@patternfly/react-core": "^6.5.0-prerelease.48",
"@patternfly/react-icons": "^6.5.0-prerelease.19",
"@patternfly/react-styles": "^6.5.0-prerelease.15",
"@patternfly/react-table": "^6.5.0-prerelease.49",
"@patternfly/react-tokens": "^6.5.0-prerelease.14",
"@patternfly/react-code-editor": "^6.5.0-prerelease.51",
"@patternfly/react-charts": "^8.5.0-prerelease.18",
"@patternfly/react-drag-drop": "^6.5.0-prerelease.49",
"@patternfly/react-templates": "^6.5.0-prerelease.48",
"@patternfly/react-topology": "^6.5.0-prerelease.4",
"@patternfly/patternfly": "^6.5.0-prerelease.64",
"@patternfly/react-core": "^6.5.0-prerelease.48",
"@patternfly/react-icons": "^6.5.0-prerelease.19",
"@patternfly/react-styles": "^6.5.0-prerelease.15",
"@patternfly/react-table": "^6.5.0-prerelease.49",
"@patternfly/react-tokens": "^6.5.0-prerelease.14",
"@patternfly/react-code-editor": "^6.5.0-prerelease.51",
"@patternfly/react-charts": "^8.5.0-prerelease.18",
"@patternfly/react-drag-drop": "^6.5.0-prerelease.49",
"@patternfly/react-templates": "^6.5.0-prerelease.48",
"@patternfly/react-topology": {
".": "^6.5.0-prerelease.4",
"react": "^18.2.0"
},
🧰 Tools
🪛 Biome (2.4.10)

[error] 109-109: The key @patternfly/react-topology was already declared.

(lint/suspicious/noDuplicateObjectKeys)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@package.json` around lines 109 - 122, The package.json contains duplicate
keys for "@patternfly/react-topology" (one as an object overriding the peer
"react" and one as a version string), so merge the intent into a single entry:
either remove the first peer override if you only intend to pin the package
version, or combine the intents by keeping one "@patternfly/react-topology" key
and consolidating both the version pin and the peer override (i.e., make a
single overrides entry that preserves the react peer override or the version pin
as required). Update the "@patternfly/react-topology" entry accordingly and
delete the other duplicate key.

width: 56,
height: 56,
svgPathData:
'M11.6668 22.3691H10.1113C9.23663 22.3691 8.39783 22.7166 7.77937 23.335C7.16092 23.9535 6.81348 24.7923 6.81348 25.6669V33.4447C6.81348 34.3193 7.16092 35.1581 7.77937 35.7766C8.39783 36.395 9.23663 36.7425 10.1113 36.7425H11.6668C12.5414 36.7425 13.3802 36.395 13.9987 35.7766C14.6171 35.1581 14.9646 34.3193 14.9646 33.4447V25.6669C14.9646 24.7923 14.6171 23.9535 13.9987 23.335C13.3802 22.7166 12.5414 22.3691 11.6668 22.3691ZM13.0357 33.4447C13.0317 33.8065 12.8861 34.1523 12.6303 34.4082C12.3744 34.664 12.0286 34.8095 11.6668 34.8136H10.1113C9.74946 34.8095 9.40362 34.664 9.14777 34.4082C8.89193 34.1523 8.74641 33.8065 8.74237 33.4447V25.6669C8.74641 25.3051 8.89193 24.9593 9.14777 24.7034C9.40362 24.4476 9.74946 24.3021 10.1113 24.298H11.6668C12.0286 24.3021 12.3744 24.4476 12.6303 24.7034C12.8861 24.9593 13.0317 25.3051 13.0357 25.6669V33.4447Z M45.8891 22.3691H44.3336C43.459 22.3691 42.6202 22.7166 42.0017 23.335C41.3833 23.9535 41.0358 24.7923 41.0358 25.6669V33.4447C41.0347 34.2863 41.3569 35.0963 41.9359 35.7071C42.5149 36.318 43.3064 36.683 44.1469 36.7269V40.4447C44.1428 41.4253 43.7515 42.3646 43.058 43.058C42.3646 43.7515 41.4253 44.1428 40.4447 44.1469H31.9514C31.7155 43.1784 31.1328 42.33 30.3137 41.762C29.4945 41.1941 28.4956 40.9461 27.5059 41.0648C26.5162 41.1836 25.6043 41.661 24.9428 42.4067C24.2813 43.1523 23.916 44.1146 23.916 45.1114C23.916 46.1082 24.2813 47.0704 24.9428 47.8161C25.6043 48.5617 26.5162 49.0391 27.5059 49.1579C28.4956 49.2767 29.4945 49.0286 30.3137 48.4607C31.1328 47.8928 31.7155 47.0443 31.9514 46.0758H40.4447C41.9382 46.0758 43.3705 45.4825 44.4265 44.4265C45.4825 43.3705 46.0758 41.9382 46.0758 40.4447V36.7269C46.9163 36.683 47.7078 36.318 48.2868 35.7071C48.8658 35.0963 49.1881 34.2863 49.1869 33.4447V25.6669C49.1869 25.2338 49.1016 24.805 48.9359 24.4049C48.7702 24.0048 48.5273 23.6413 48.221 23.335C47.9148 23.0288 47.5513 22.7859 47.1511 22.6202C46.751 22.4544 46.3222 22.3691 45.8891 22.3691ZM28.0003 47.258C27.4645 47.2123 26.9654 46.9672 26.6017 46.5711C26.238 46.175 26.0362 45.6569 26.0362 45.1191C26.0362 44.5814 26.238 44.0633 26.6017 43.6672C26.9654 43.2711 27.4645 43.026 28.0003 42.9803C28.536 43.026 29.0351 43.2711 29.3988 43.6672C29.7625 44.0633 29.9644 44.5814 29.9644 45.1191C29.9644 45.6569 29.7625 46.175 29.3988 46.5711C29.0351 46.9672 28.536 47.2123 28.0003 47.258ZM47.258 33.4447C47.254 33.8065 47.1085 34.1523 46.8526 34.4082C46.5968 34.664 46.2509 34.8095 45.8891 34.8136H44.3336C43.9718 34.8095 43.626 34.664 43.3701 34.4082C43.1143 34.1523 42.9687 33.8065 42.9647 33.4447V25.6669C42.9687 25.3051 43.1143 24.9593 43.3701 24.7034C43.626 24.4476 43.9718 24.3021 44.3336 24.298H45.8891C46.2509 24.3021 46.5968 24.4476 46.8526 24.7034C47.1085 24.9593 47.254 25.3051 47.258 25.6669V33.4447Z M43.5555 20.4871C43.6392 20.7205 43.8083 20.9135 44.0287 21.0271C44.2491 21.1408 44.5043 21.1667 44.743 21.0996C44.9817 21.0325 45.1861 20.8775 45.315 20.6657C45.444 20.4539 45.4878 20.2011 45.4377 19.9582C40.2888 2.52046 15.7111 2.53602 10.5933 19.9582C10.5729 20.1853 10.6323 20.4124 10.7613 20.6004C10.8904 20.7884 11.0809 20.9255 11.3001 20.9882C11.5194 21.0508 11.7536 21.035 11.9624 20.9436C12.1713 20.8521 12.3417 20.6907 12.4444 20.4871C13.38 17.0792 15.4089 14.0727 18.2192 11.9299C21.0296 9.78714 24.4659 8.62655 27.9999 8.62655C31.534 8.62655 34.9703 9.78714 37.7807 11.9299C40.591 14.0727 42.6199 17.0792 43.5555 20.4871Z',

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.

⚠️ Potential issue | 🟡 Minor

Fix CI-blocking Prettier indentation on Line 9.

Line 9 is under-indented and currently fails prettier/prettier in CI. Reformat this line (or run Prettier on the file) to unblock the pipeline.

Suggested minimal fix
-    'M11.6668 22.3691H10.1113C9.23663 ...
+      'M11.6668 22.3691H10.1113C9.23663 ...
📝 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.

Suggested change
'M11.6668 22.3691H10.1113C9.23663 22.3691 8.39783 22.7166 7.77937 23.335C7.16092 23.9535 6.81348 24.7923 6.81348 25.6669V33.4447C6.81348 34.3193 7.16092 35.1581 7.77937 35.7766C8.39783 36.395 9.23663 36.7425 10.1113 36.7425H11.6668C12.5414 36.7425 13.3802 36.395 13.9987 35.7766C14.6171 35.1581 14.9646 34.3193 14.9646 33.4447V25.6669C14.9646 24.7923 14.6171 23.9535 13.9987 23.335C13.3802 22.7166 12.5414 22.3691 11.6668 22.3691ZM13.0357 33.4447C13.0317 33.8065 12.8861 34.1523 12.6303 34.4082C12.3744 34.664 12.0286 34.8095 11.6668 34.8136H10.1113C9.74946 34.8095 9.40362 34.664 9.14777 34.4082C8.89193 34.1523 8.74641 33.8065 8.74237 33.4447V25.6669C8.74641 25.3051 8.89193 24.9593 9.14777 24.7034C9.40362 24.4476 9.74946 24.3021 10.1113 24.298H11.6668C12.0286 24.3021 12.3744 24.4476 12.6303 24.7034C12.8861 24.9593 13.0317 25.3051 13.0357 25.6669V33.4447Z M45.8891 22.3691H44.3336C43.459 22.3691 42.6202 22.7166 42.0017 23.335C41.3833 23.9535 41.0358 24.7923 41.0358 25.6669V33.4447C41.0347 34.2863 41.3569 35.0963 41.9359 35.7071C42.5149 36.318 43.3064 36.683 44.1469 36.7269V40.4447C44.1428 41.4253 43.7515 42.3646 43.058 43.058C42.3646 43.7515 41.4253 44.1428 40.4447 44.1469H31.9514C31.7155 43.1784 31.1328 42.33 30.3137 41.762C29.4945 41.1941 28.4956 40.9461 27.5059 41.0648C26.5162 41.1836 25.6043 41.661 24.9428 42.4067C24.2813 43.1523 23.916 44.1146 23.916 45.1114C23.916 46.1082 24.2813 47.0704 24.9428 47.8161C25.6043 48.5617 26.5162 49.0391 27.5059 49.1579C28.4956 49.2767 29.4945 49.0286 30.3137 48.4607C31.1328 47.8928 31.7155 47.0443 31.9514 46.0758H40.4447C41.9382 46.0758 43.3705 45.4825 44.4265 44.4265C45.4825 43.3705 46.0758 41.9382 46.0758 40.4447V36.7269C46.9163 36.683 47.7078 36.318 48.2868 35.7071C48.8658 35.0963 49.1881 34.2863 49.1869 33.4447V25.6669C49.1869 25.2338 49.1016 24.805 48.9359 24.4049C48.7702 24.0048 48.5273 23.6413 48.221 23.335C47.9148 23.0288 47.5513 22.7859 47.1511 22.6202C46.751 22.4544 46.3222 22.3691 45.8891 22.3691ZM28.0003 47.258C27.4645 47.2123 26.9654 46.9672 26.6017 46.5711C26.238 46.175 26.0362 45.6569 26.0362 45.1191C26.0362 44.5814 26.238 44.0633 26.6017 43.6672C26.9654 43.2711 27.4645 43.026 28.0003 42.9803C28.536 43.026 29.0351 43.2711 29.3988 43.6672C29.7625 44.0633 29.9644 44.5814 29.9644 45.1191C29.9644 45.6569 29.7625 46.175 29.3988 46.5711C29.0351 46.9672 28.536 47.2123 28.0003 47.258ZM47.258 33.4447C47.254 33.8065 47.1085 34.1523 46.8526 34.4082C46.5968 34.664 46.2509 34.8095 45.8891 34.8136H44.3336C43.9718 34.8095 43.626 34.664 43.3701 34.4082C43.1143 34.1523 42.9687 33.8065 42.9647 33.4447V25.6669C42.9687 25.3051 43.1143 24.9593 43.3701 24.7034C43.626 24.4476 43.9718 24.3021 44.3336 24.298H45.8891C46.2509 24.3021 46.5968 24.4476 46.8526 24.7034C47.1085 24.9593 47.254 25.3051 47.258 25.6669V33.4447Z M43.5555 20.4871C43.6392 20.7205 43.8083 20.9135 44.0287 21.0271C44.2491 21.1408 44.5043 21.1667 44.743 21.0996C44.9817 21.0325 45.1861 20.8775 45.315 20.6657C45.444 20.4539 45.4878 20.2011 45.4377 19.9582C40.2888 2.52046 15.7111 2.53602 10.5933 19.9582C10.5729 20.1853 10.6323 20.4124 10.7613 20.6004C10.8904 20.7884 11.0809 20.9255 11.3001 20.9882C11.5194 21.0508 11.7536 21.035 11.9624 20.9436C12.1713 20.8521 12.3417 20.6907 12.4444 20.4871C13.38 17.0792 15.4089 14.0727 18.2192 11.9299C21.0296 9.78714 24.4659 8.62655 27.9999 8.62655C31.534 8.62655 34.9703 9.78714 37.7807 11.9299C40.591 14.0727 42.6199 17.0792 43.5555 20.4871Z',
'M11.6668 22.3691H10.1113C9.23663 22.7166 8.39783 22.3691 7.77937 23.335C7.16092 23.9535 6.81348 24.7923 6.81348 25.6669V33.4447C6.81348 34.3193 7.16092 35.1581 7.77937 35.7766C8.39783 36.395 9.23663 36.7425 10.1113 36.7425H11.6668C12.5414 36.7425 13.3802 36.395 13.9987 35.7766C14.6171 35.1581 14.9646 34.3193 14.9646 33.4447V25.6669C14.9646 24.7923 14.6171 23.9535 13.9987 23.335C13.3802 22.7166 12.5414 22.3691 11.6668 22.3691ZM13.0357 33.4447C13.0317 33.8065 12.8861 34.1523 12.6303 34.4082C12.3744 34.664 12.0286 34.8095 11.6668 34.8136H10.1113C9.74946 34.8095 9.40362 34.664 9.14777 34.4082C8.89193 34.1523 8.74641 33.8065 8.74237 33.4447V25.6669C8.74641 25.3051 8.89193 24.9593 9.14777 24.7034C9.40362 24.4476 9.74946 24.3021 10.1113 24.298H11.6668C12.0286 24.3021 12.3744 24.4476 12.6303 24.7034C12.8861 24.9593 13.0317 25.3051 13.0357 25.6669V33.4447Z M45.8891 22.3691H44.3336C43.459 22.3691 42.6202 22.7166 42.0017 23.335C41.3833 23.9535 41.0358 24.7923 41.0358 25.6669V33.4447C41.0347 34.2863 41.3569 35.0963 41.9359 35.7071C42.5149 36.318 43.3064 36.683 44.1469 36.7269V40.4447C44.1428 41.4253 43.7515 42.3646 43.058 43.058C42.3646 43.7515 41.4253 44.1428 40.4447 44.1469H31.9514C31.7155 43.1784 31.1328 42.33 30.3137 41.762C29.4945 41.1941 28.4956 40.9461 27.5059 41.0648C26.5162 41.1836 25.6043 41.661 24.9428 42.4067C24.2813 43.1523 23.916 44.1146 23.916 45.1114C23.916 46.1082 24.2813 47.0704 24.9428 47.8161C25.6043 48.5617 26.5162 49.0391 27.5059 49.1579C28.4956 49.2767 29.4945 49.0286 30.3137 48.4607C31.1328 47.8928 31.7155 47.0443 31.9514 46.0758H40.4447C41.9382 46.0758 43.3705 45.4825 44.4265 44.4265C45.4825 43.3705 46.0758 41.9382 46.0758 40.4447V36.7269C46.9163 36.683 47.7078 36.318 48.2868 35.7071C48.8658 35.0963 49.1881 34.2863 49.1869 33.4447V25.6669C49.1869 25.2338 49.1016 24.805 48.9359 24.4049C48.7702 24.0048 48.5273 23.6413 48.221 23.335C47.9148 23.0288 47.5513 22.7859 47.1511 22.6202C46.751 22.4544 46.3222 22.3691 45.8891 22.3691ZM28.0003 47.258C27.4645 47.2123 26.9654 46.9672 26.6017 46.5711C26.238 46.175 26.0362 45.6569 26.0362 45.1191C26.0362 44.5814 26.238 44.0633 26.6017 43.6672C26.9654 43.2711 27.4645 43.026 28.0003 42.9803C28.536 43.026 29.0351 43.2711 29.3988 43.6672C29.7625 44.0633 29.9644 44.5814 29.9644 45.1191C29.9644 45.6569 29.7625 46.175 29.3988 46.5711C29.0351 46.9672 28.536 47.2123 28.0003 47.258ZM47.258 33.4447C47.254 33.8065 47.1085 34.1523 46.8526 34.4082C46.5968 34.664 46.2509 34.8095 45.8891 34.8136H44.3336C43.9718 34.8095 43.626 34.664 43.3701 34.4082C43.1143 34.1523 42.9687 33.8065 42.9647 33.4447V25.6669C42.9687 25.3051 43.1143 24.9593 43.3701 24.7034C43.626 24.4476 43.9718 24.3021 44.3336 24.298H45.8891C46.2509 24.3021 46.5968 24.4476 46.8526 24.7034C47.1085 24.9593 47.254 25.3051 47.258 25.6669V33.4447Z M43.5555 20.4871C43.6392 20.7205 43.8083 20.9135 44.0287 21.0271C44.2491 21.1408 44.5043 21.1667 44.743 21.0996C44.9817 21.0325 45.1861 20.8775 45.315 20.6657C45.444 20.4539 45.4878 20.2011 45.4377 19.9582C40.2888 2.52046 15.7111 2.53602 10.5933 19.9582C10.5729 20.1853 10.6323 20.4124 10.7613 20.6004C10.8904 20.7884 11.0809 20.9255 11.3001 20.9882C11.5194 21.0508 11.7536 21.035 11.9624 20.9436C12.1713 20.8521 12.3417 20.6907 12.4444 20.4871C13.38 17.0792 15.4089 14.0727 18.2192 11.9299C21.0296 9.78714 24.4659 8.62655 27.9999 8.62655C31.534 8.62655 34.9703 9.78714 37.7807 11.9299C40.591 14.0727 42.6199 17.0792 43.5555 20.4871Z',
🧰 Tools
🪛 GitHub Actions: Test / EvalHub Frontend Tests

[error] 9-9: ESLint/Prettier failed with rule "prettier/prettier": Prettier formatting error at 9:5. Insert "··".

🪛 GitHub Check: test

[failure] 9-9:
Insert ··

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/eval-hub/frontend/src/app/icons/SupportIcon.ts` at line 9, Prettier
is failing because the long SVG path string inside the SupportIcon component
(the string starting "M11.6668 22.3691H10.1113...") is mis-indented on that
line; fix by reformatting that line to match the file's indentation (or run
Prettier on the file) so the path string aligns with the surrounding JSX/TS code
and trailing comma/quotes remain unchanged, targeting the SupportIcon
component's SVG path literal.

Comment on lines +8 to 9
svgPathData:
'M2,2h10v10H2V2ZM4,4v6h6V4H4ZM20,2h10v10H20V2ZM22,4v6h6V4h-6ZM2,20h10v10H2V20ZM4,22v6h6v-6H4ZM20,20h10v10H20V20ZM22,22v6h6v-6h-6ZM12,6h8v2h-8V6ZM12,24h8v2h-8v-2ZM6,12h2v8H6v-8ZM24,12h2v8h-2v-8ZM14,14h4v4h-4v-4Z',

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.

⚠️ Potential issue | 🟡 Minor

Fix lint indentation in svgPathData continuation.

Line 9 is missing two leading spaces and is currently failing static analysis.

Patch
   icon: {
     width: 32,
     height: 32,
     svgPathData:
-    'M2,2h10v10H2V2ZM4,4v6h6V4H4ZM20,2h10v10H20V2ZM22,4v6h6V4h-6ZM2,20h10v10H2V20ZM4,22v6h6v-6H4ZM20,20h10v10H20V20ZM22,22v6h6v-6h-6ZM12,6h8v2h-8V6ZM12,24h8v2h-8v-2ZM6,12h2v8H6v-8ZM24,12h2v8h-2v-8ZM14,14h4v4h-4v-4Z',
+      'M2,2h10v10H2V2ZM4,4v6h6V4H4ZM20,2h10v10H20V2ZM22,4v6h6V4h-6ZM2,20h10v10H2V20ZM4,22v6h6v-6H4ZM20,20h10v10H20V20ZM22,22v6h6v-6h-6ZM12,6h8v2h-8V6ZM12,24h8v2h-8v-2ZM6,12h2v8H6v-8ZM24,12h2v8h-2v-8ZM14,14h4v4h-4v-4Z',
     xOffset: 0,
     yOffset: 0,
   },
📝 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.

Suggested change
svgPathData:
'M2,2h10v10H2V2ZM4,4v6h6V4H4ZM20,2h10v10H20V2ZM22,4v6h6V4h-6ZM2,20h10v10H2V20ZM4,22v6h6v-6H4ZM20,20h10v10H20V20ZM22,22v6h6v-6h-6ZM12,6h8v2h-8V6ZM12,24h8v2h-8v-2ZM6,12h2v8H6v-8ZM24,12h2v8h-2v-8ZM14,14h4v4h-4v-4Z',
svgPathData:
'M2,2h10v10H2V2ZM4,4v6h6V4H4ZM20,2h10v10H20V2ZM22,4v6h6V4h-6ZM2,20h10v10H2V20ZM4,22v6h6v-6H4ZM20,20h10v10H20V20ZM22,22v6h6v-6h-6ZM12,6h8v2h-8V6ZM12,24h8v2h-8v-2ZM6,12h2v8H6v-8ZM24,12h2v8h-2v-8ZM14,14h4v4h-4v-4Z',
🧰 Tools
🪛 GitHub Check: test

[failure] 9-9:
Insert ··

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/eval-hub/frontend/src/odh/ModArchNavIcon.ts` around lines 8 - 9, The
svgPathData value in ModArchNavIcon.ts has its continuation line mis-indented;
adjust the string line for the svgPathData property so it has two leading spaces
to match the surrounding indentation (i.e., align the line that begins with
'M2,2h10v10H2V2ZM4,4v6h6V4H4...') so the linter no longer flags the missing
indentation.

@Griffin-Sullivan

Copy link
Copy Markdown
Contributor

/ok-to-test

@openshift-ci openshift-ci Bot added ok-to-test The openshift bot needs `ok-to-test` to allow non member PRs to run the tests. and removed needs-ok-to-test The openshift bot needs to label PRs from non members to avoid strain on the CI labels Apr 6, 2026
evwilkin and others added 2 commits April 6, 2026 22:19
The PF prerelease overrides changed npm hoisting, causing webpack to
fail resolving transitive dependencies in the Docker build. Explicitly
add @tanstack/query-core, reselect, and serialize-query-params.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@manaswinidas

Copy link
Copy Markdown
Member

/ok-to-test

@openshift-ci

openshift-ci Bot commented Apr 15, 2026

Copy link
Copy Markdown
Contributor

PR needs rebase.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@openshift-ci openshift-ci Bot added the needs-rebase PR needs to be rebased label Apr 15, 2026
@evwilkin
evwilkin marked this pull request as draft April 15, 2026 15:28
@openshift-ci openshift-ci Bot added the do-not-merge/work-in-progress This PR is in WIP state label Apr 15, 2026
@github-actions

github-actions Bot commented May 7, 2026

Copy link
Copy Markdown
Contributor

This PR is stale because it has been open 21 days with no activity. Remove stale label or comment or this will be closed in 7 days.

@github-actions github-actions Bot added the Stale Issue was created a long time ago and nothing has happened label May 7, 2026
@evwilkin evwilkin closed this May 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/components area/eval-hub area/feature-store area/frontend area/gen-ai area/maas do-not-merge/work-in-progress This PR is in WIP state needs-rebase PR needs to be rebased ok-to-test The openshift bot needs `ok-to-test` to allow non member PRs to run the tests. Stale Issue was created a long time ago and nothing has happened

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants