Skip to content

feat(scorecard): Add New Frontend System (NFS) support#2477

Closed
rohitratannagar wants to merge 11 commits intoredhat-developer:mainfrom
rohitratannagar:feat/scorecard-nfs
Closed

feat(scorecard): Add New Frontend System (NFS) support#2477
rohitratannagar wants to merge 11 commits intoredhat-developer:mainfrom
rohitratannagar:feat/scorecard-nfs

Conversation

@rohitratannagar
Copy link
Contributor

@rohitratannagar rohitratannagar commented Mar 6, 2026

Hey, I just made a Pull Request!

scorecard entity tab -- when options are passed

Screen.Recording.2026-03-06.at.3.34.08.PM.mov

scorecard entity tab -- when options are not passed (Scorecard is shown for each kind of entity)

Screen.Recording.2026-03-06.at.3.38.40.PM.mov

Legacy App after changes

Screen.Recording.2026-03-06.at.4.00.03.PM.mov

✔️ Checklist

  • A changeset describing the change and affected packages. (more info)
  • Added or Updated documentation
  • Tests for new functionality and regression tests for bug fixes
  • Screenshots attached (for UI changes)

Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
@rhdh-gh-app
Copy link

rhdh-gh-app bot commented Mar 6, 2026

Changed Packages

Package Name Package Path Changeset Bump Current Version
app-next workspaces/scorecard/packages/app-next none v0.0.0
@red-hat-developer-hub/backstage-plugin-scorecard workspaces/scorecard/plugins/scorecard patch v2.4.0

@rhdh-qodo-merge
Copy link

Review Summary by Qodo

Add New Frontend System (NFS) support to scorecard plugin

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Add New Frontend System (NFS) support to scorecard plugin
• Create new app-next package with NFS-compatible Backstage app
• Implement alpha exports for NFS plugin architecture
• Add configurable entity kind filtering for scorecard tab visibility
Diagram
flowchart LR
  A["Scorecard Plugin"] -->|"alpha exports"| B["NFS Architecture"]
  B -->|"uses"| C["app-next Package"]
  C -->|"configures"| D["Entity Kind Filter"]
  D -->|"controls"| E["Scorecard Tab Visibility"]
Loading

Grey Divider

File Changes

1. workspaces/scorecard/packages/app-next/package.json ⚙️ Configuration changes +36/-0

New NFS app package configuration

workspaces/scorecard/packages/app-next/package.json


2. workspaces/scorecard/packages/app-next/src/App.tsx ✨ Enhancement +97/-0

NFS app with scorecard integration

workspaces/scorecard/packages/app-next/src/App.tsx


3. workspaces/scorecard/packages/app-next/src/index.tsx ✨ Enhancement +5/-1

NFS app entry point and rendering

workspaces/scorecard/packages/app-next/src/index.tsx


View more (6)
4. workspaces/scorecard/packages/app-next/public/index.html ⚙️ Configuration changes +60/-0

HTML template for NFS app

workspaces/scorecard/packages/app-next/public/index.html


5. workspaces/scorecard/packages/app-next/.eslintrc.js ⚙️ Configuration changes +1/-0

ESLint configuration for app-next

workspaces/scorecard/packages/app-next/.eslintrc.js


6. workspaces/scorecard/plugins/scorecard/src/alpha.tsx ✨ Enhancement +120/-0

NFS plugin exports and catalog module

workspaces/scorecard/plugins/scorecard/src/alpha.tsx


7. workspaces/scorecard/plugins/scorecard/package.json Dependencies +5/-2

Add NFS dependencies and alpha export

workspaces/scorecard/plugins/scorecard/package.json


8. workspaces/scorecard/package.json ⚙️ Configuration changes +1/-0

Add start:next script for NFS app

workspaces/scorecard/package.json


9. workspaces/scorecard/.changeset/puny-eggs-burn.md 📝 Documentation +5/-0

Changelog entry for NFS support

workspaces/scorecard/.changeset/puny-eggs-burn.md


Grey Divider

Qodo Logo

@rhdh-qodo-merge
Copy link

rhdh-qodo-merge bot commented Mar 6, 2026

Code Review by Qodo

🐞 Bugs (3) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider


Action required

1. Alpha API report stale🐞 Bug ⛯ Reliability
Description
The scorecard plugin alpha entrypoint now exports new NFS APIs, but the existing API Extractor
report (report-alpha.api.md) still documents only translations, which is likely to fail API report
validation/lint in CI.
Code

workspaces/scorecard/plugins/scorecard/src/alpha.tsx[R71-118]

+export function createScorecardEntityContent(
+  options?: ScorecardEntityContentOptions,
+): ExtensionDefinition {
+  const filter =
+    options?.entityKinds?.length &&
+    `kind:${options.entityKinds.map(k => k.toLowerCase()).join(',')}`;
+  return EntityContentBlueprint.make({
+    name: 'scorecard',
+    params: {
+      ...defaultScorecardEntityContentParams,
+      ...(filter && { filter }),
+    },
+  });
+}
+
+/** Scorecard translation resources */
+const scorecardTranslation = TranslationBlueprint.make({
+  params: {
+    resource: scorecardTranslations,
+  },
+});
+
+/** Main Scorecard frontend plugin */
+export default createFrontendPlugin({
+  pluginId: 'scorecard',
+  extensions: [scorecardApi],
+  routes: { root: rootRouteRef },
+});
+
+/**
+ * Creates a module that registers the Scorecard entity tab with the given options.
+ * Pass entity kinds from the app (e.g. in app-next App.tsx) to control which entities show the tab.
+ * @public
+ */
+export function createScorecardCatalogModule(
+  options?: ScorecardEntityContentOptions,
+) {
+  return createFrontendModule({
+    pluginId: 'catalog',
+    extensions: [createScorecardEntityContent(options)],
+  });
+}
+
+/** Module registering Scorecard translations in app */
+export const scorecardTranslationsModule = createFrontendModule({
+  pluginId: 'app',
+  extensions: [scorecardTranslation],
+});
Evidence
The new alpha entrypoint exports additional public APIs
(createScorecardEntityContent/createScorecardCatalogModule/scorecardTranslationsModule and a new
default export), but the checked-in report-alpha.api.md does not include them. The scorecard
workspace includes a build step that validates API reports, making this a likely CI blocker.

workspaces/scorecard/plugins/scorecard/src/alpha.tsx[45-120]
workspaces/scorecard/plugins/scorecard/report-alpha.api.md[1-50]
workspaces/scorecard/package.json[10-18]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`plugins/scorecard/src/alpha.tsx` now exports additional public alpha APIs, but `plugins/scorecard/report-alpha.api.md` still reflects the old surface area (translations-only). This commonly breaks API report validation in CI.
### Issue Context
The scorecard workspace runs an API report validation step (`backstage-repo-tools api-reports ... --validate-release-tags`).
### Fix
- Regenerate API reports for the scorecard workspace/package (using the repo’s standard command).
- Example: run the scorecard workspace’s API report command (e.g. `yarn workspace @internal/scorecard build:api-reports:only`) and commit the updated `report-alpha.api.md` output.
- Ensure the regenerated report includes the new exports from `src/alpha.tsx` (e.g., `createScorecardCatalogModule`, `createScorecardEntityContent`, `scorecardTranslationsModule`, and the default export).
### Fix Focus Areas
- workspaces/scorecard/plugins/scorecard/src/alpha.tsx[71-120]
- workspaces/scorecard/plugins/scorecard/report-alpha.api.md[1-60]
- workspaces/scorecard/package.json[16-17]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Missing bundled flag 🐞 Bug ⛯ Reliability
Description
The new app-next frontend package is missing the "bundled": true flag that all other frontend app
packages in this repo use, which may cause Backstage repo tooling to treat it differently during
build/packaging.
Code

workspaces/scorecard/packages/app-next/package.json[R1-7]

+{
+  "name": "app-next",
+  "version": "0.0.0",
+  "private": true,
+  "backstage": {
+    "role": "frontend"
+  },
Evidence
Within this repository, frontend app packages consistently set "bundled": true. app-next is a
frontend package but omits the flag, making it an outlier and a potential packaging/tooling footgun.

workspaces/scorecard/packages/app-next/package.json[1-7]
workspaces/scorecard/packages/app/package.json[1-13]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`packages/app-next` is a frontend app package but does not include the `&amp;quot;bundled&amp;quot;: true` flag, unlike other frontend app packages in this repo.
### Issue Context
In this repository, other `backstage.role=frontend` app packages set `&amp;quot;bundled&amp;quot;: true`.
### Fix
- Add `&amp;quot;bundled&amp;quot;: true` near the top-level fields in `workspaces/scorecard/packages/app-next/package.json` (mirroring other `packages/app` packages).
### Fix Focus Areas
- workspaces/scorecard/packages/app-next/package.json[1-12]
- workspaces/scorecard/packages/app/package.json[1-13]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Missing public assets 🐞 Bug ✓ Correctness
Description
app-next/public/index.html references manifest.json and multiple favicon/icon assets, but
app-next/public currently only contains index.html, causing 404s and missing icons/manifest at
runtime.
Code

workspaces/scorecard/packages/app-next/public/index.html[R15-43]

+    <link
+      rel="manifest"
+      href="<%= publicPath %>/manifest.json"
+      crossorigin="use-credentials"
+    />
+    <link rel="icon" href="<%= publicPath %>/favicon.ico" />
+    <link rel="shortcut icon" href="<%= publicPath %>/favicon.ico" />
+    <link
+      rel="apple-touch-icon"
+      sizes="180x180"
+      href="<%= publicPath %>/apple-touch-icon.png"
+    />
+    <link
+      rel="icon"
+      type="image/png"
+      sizes="32x32"
+      href="<%= publicPath %>/favicon-32x32.png"
+    />
+    <link
+      rel="icon"
+      type="image/png"
+      sizes="16x16"
+      href="<%= publicPath %>/favicon-16x16.png"
+    />
+    <link
+      rel="mask-icon"
+      href="<%= publicPath %>/safari-pinned-tab.svg"
+      color="#5bbad5"
+    />
Evidence
The HTML template explicitly links to manifest and icon files under the public path, but the
app-next/public folder contains only index.html, so those requests will fail. The legacy app
includes these referenced files, indicating they were likely expected to be copied over.

workspaces/scorecard/packages/app-next/public/index.html[15-43]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`packages/app-next/public/index.html` references `manifest.json` and multiple icon files, but those files are not present under `packages/app-next/public`, leading to missing icons/manifest and 404s.
### Issue Context
The legacy app (`packages/app/public`) includes these files and uses the same template references, suggesting app-next should include them too.
### Fix
Choose one:
1) Copy/generate the referenced assets into `packages/app-next/public/`:
 - manifest.json
 - favicon.ico
 - apple-touch-icon.png
 - favicon-32x32.png
 - favicon-16x16.png
 - safari-pinned-tab.svg
 (Optionally also include robots.txt / other assets used elsewhere)
2) Or, update `packages/app-next/public/index.html` to only reference assets that exist (or remove the manifest/icons if not desired).
### Fix Focus Areas
- workspaces/scorecard/packages/app-next/public/index.html[15-43]
- workspaces/scorecard/packages/app-next/public[1-1]
- workspaces/scorecard/packages/app/public[1-1]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
Comment on lines +71 to +118
export function createScorecardEntityContent(
options?: ScorecardEntityContentOptions,
): ExtensionDefinition {
const filter =
options?.entityKinds?.length &&
`kind:${options.entityKinds.map(k => k.toLowerCase()).join(',')}`;
return EntityContentBlueprint.make({
name: 'scorecard',
params: {
...defaultScorecardEntityContentParams,
...(filter && { filter }),
},
});
}

/** Scorecard translation resources */
const scorecardTranslation = TranslationBlueprint.make({
params: {
resource: scorecardTranslations,
},
});

/** Main Scorecard frontend plugin */
export default createFrontendPlugin({
pluginId: 'scorecard',
extensions: [scorecardApi],
routes: { root: rootRouteRef },
});

/**
* Creates a module that registers the Scorecard entity tab with the given options.
* Pass entity kinds from the app (e.g. in app-next App.tsx) to control which entities show the tab.
* @public
*/
export function createScorecardCatalogModule(
options?: ScorecardEntityContentOptions,
) {
return createFrontendModule({
pluginId: 'catalog',
extensions: [createScorecardEntityContent(options)],
});
}

/** Module registering Scorecard translations in app */
export const scorecardTranslationsModule = createFrontendModule({
pluginId: 'app',
extensions: [scorecardTranslation],
});

This comment was marked as resolved.

Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
@rhdh-qodo-merge
Copy link

Review Summary by Qodo

Add New Frontend System (NFS) support to scorecard plugin

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Add New Frontend System (NFS) support with alpha exports
• Create app-next package for NFS-based Backstage application
• Add TypeScript type annotations to API and translation references
• Fix TypeScript compilation errors and type safety issues
• Add translation type casting for i18n function calls
Diagram
flowchart LR
  A["Scorecard Plugin"] -->|"NFS Alpha Exports"| B["Frontend Plugin API"]
  A -->|"Entity Content"| C["Catalog Integration"]
  A -->|"Translations"| D["Translation Module"]
  E["app-next Package"] -->|"Uses"| A
  E -->|"NFS Features"| B
  F["Type Annotations"] -->|"Improves"| G["Type Safety"]
Loading

Grey Divider

File Changes

1. workspaces/scorecard/plugins/scorecard/src/api/index.ts ✨ Enhancement +6/-3

Add explicit type annotation to API reference

workspaces/scorecard/plugins/scorecard/src/api/index.ts


2. workspaces/scorecard/plugins/scorecard/src/translations/index.ts ✨ Enhancement +15/-11

Add type annotations to translation resource

workspaces/scorecard/plugins/scorecard/src/translations/index.ts


3. workspaces/scorecard/plugins/scorecard/src/translations/ref.ts ✨ Enhancement +8/-2

Add type annotations to translation reference

workspaces/scorecard/plugins/scorecard/src/translations/ref.ts


View more (22)
4. workspaces/scorecard/plugins/scorecard/src/translations/de.ts 🐞 Bug fix +1/-1

Add type casting for translation messages

workspaces/scorecard/plugins/scorecard/src/translations/de.ts


5. workspaces/scorecard/plugins/scorecard/src/translations/es.ts 🐞 Bug fix +1/-1

Add type casting for translation messages

workspaces/scorecard/plugins/scorecard/src/translations/es.ts


6. workspaces/scorecard/plugins/scorecard/src/translations/fr.ts 🐞 Bug fix +1/-1

Add type casting for translation messages

workspaces/scorecard/plugins/scorecard/src/translations/fr.ts


7. workspaces/scorecard/plugins/scorecard/src/translations/it.ts 🐞 Bug fix +1/-1

Add type casting for translation messages

workspaces/scorecard/plugins/scorecard/src/translations/it.ts


8. workspaces/scorecard/plugins/scorecard/src/translations/ja.ts 🐞 Bug fix +1/-1

Add type casting for translation messages

workspaces/scorecard/plugins/scorecard/src/translations/ja.ts


9. workspaces/scorecard/plugins/scorecard/src/alpha.tsx ✨ Enhancement +120/-0

Create NFS alpha exports and plugin definitions

workspaces/scorecard/plugins/scorecard/src/alpha.tsx


10. workspaces/scorecard/plugins/scorecard/src/components/Common/PermissionRequiredState.tsx 🐞 Bug fix +2/-2

Fix TypeScript type casting in translation call

workspaces/scorecard/plugins/scorecard/src/components/Common/PermissionRequiredState.tsx


11. workspaces/scorecard/plugins/scorecard/src/components/ScorecardHomepageSection/CustomTooltip.tsx 🐞 Bug fix +4/-1

Add type casting for translation parameters

workspaces/scorecard/plugins/scorecard/src/components/ScorecardHomepageSection/CustomTooltip.tsx


12. workspaces/scorecard/plugins/scorecard/src/components/ScorecardHomepageSection/EmptyStatePanel.tsx 🐞 Bug fix +4/-1

Add type casting for translation parameters

workspaces/scorecard/plugins/scorecard/src/components/ScorecardHomepageSection/EmptyStatePanel.tsx


13. workspaces/scorecard/plugins/scorecard/src/components/ScorecardHomepageSection/ScorecardHomepageCardComponent.tsx 🐞 Bug fix +3/-1

Add type casting for translation parameters

workspaces/scorecard/plugins/scorecard/src/components/ScorecardHomepageSection/ScorecardHomepageCardComponent.tsx


14. workspaces/scorecard/plugins/scorecard/src/hooks/useAggregatedScorecard.tsx 🐞 Bug fix +2/-2

Fix TypeScript type casting in translation call

workspaces/scorecard/plugins/scorecard/src/hooks/useAggregatedScorecard.tsx


15. workspaces/scorecard/plugins/scorecard/src/hooks/useScorecards.tsx 🐞 Bug fix +2/-2

Fix TypeScript type casting in translation call

workspaces/scorecard/plugins/scorecard/src/hooks/useScorecards.tsx


16. workspaces/scorecard/plugins/scorecard/package.json ⚙️ Configuration changes +5/-2

Update alpha export path and dependencies

workspaces/scorecard/plugins/scorecard/package.json


17. workspaces/scorecard/plugins/scorecard/report-alpha.api.md 📝 Documentation +58/-34

Update API report with NFS exports

workspaces/scorecard/plugins/scorecard/report-alpha.api.md


18. workspaces/scorecard/packages/app-next/package.json ✨ Enhancement +36/-0

Create NFS app package configuration

workspaces/scorecard/packages/app-next/package.json


19. workspaces/scorecard/packages/app-next/src/App.tsx ✨ Enhancement +97/-0

Create NFS app with scorecard integration

workspaces/scorecard/packages/app-next/src/App.tsx


20. workspaces/scorecard/packages/app-next/src/index.tsx ✨ Enhancement +5/-1

Create NFS app entry point

workspaces/scorecard/packages/app-next/src/index.tsx


21. workspaces/scorecard/packages/app-next/public/index.html ✨ Enhancement +60/-0

Create NFS app HTML template

workspaces/scorecard/packages/app-next/public/index.html


22. workspaces/scorecard/packages/app-next/.eslintrc.js ⚙️ Configuration changes +1/-0

Create ESLint configuration for app-next

workspaces/scorecard/packages/app-next/.eslintrc.js


23. workspaces/scorecard/package.json ⚙️ Configuration changes +2/-1

Add start:next script and build dependencies

workspaces/scorecard/package.json


24. workspaces/scorecard/tsconfig.json ⚙️ Configuration changes +1/-0

Add skipLibCheck compiler option

workspaces/scorecard/tsconfig.json


25. workspaces/scorecard/.changeset/puny-eggs-burn.md 📝 Documentation +5/-0

Document NFS support addition

workspaces/scorecard/.changeset/puny-eggs-burn.md


Grey Divider

Qodo Logo

@rhdh-qodo-merge
Copy link

rhdh-qodo-merge bot commented Mar 8, 2026

Code Review by Qodo

🐞 Bugs (4) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider


Action required

1. Alpha API report stale🐞 Bug ⛯ Reliability
Description
The scorecard plugin alpha entrypoint now exports new NFS APIs, but the existing API Extractor
report (report-alpha.api.md) still documents only translations, which is likely to fail API report
validation/lint in CI.
Code

workspaces/scorecard/plugins/scorecard/src/alpha.tsx[R71-118]

+export function createScorecardEntityContent(
+  options?: ScorecardEntityContentOptions,
+): ExtensionDefinition {
+  const filter =
+    options?.entityKinds?.length &&
+    `kind:${options.entityKinds.map(k => k.toLowerCase()).join(',')}`;
+  return EntityContentBlueprint.make({
+    name: 'scorecard',
+    params: {
+      ...defaultScorecardEntityContentParams,
+      ...(filter && { filter }),
+    },
+  });
+}
+
+/** Scorecard translation resources */
+const scorecardTranslation = TranslationBlueprint.make({
+  params: {
+    resource: scorecardTranslations,
+  },
+});
+
+/** Main Scorecard frontend plugin */
+export default createFrontendPlugin({
+  pluginId: 'scorecard',
+  extensions: [scorecardApi],
+  routes: { root: rootRouteRef },
+});
+
+/**
+ * Creates a module that registers the Scorecard entity tab with the given options.
+ * Pass entity kinds from the app (e.g. in app-next App.tsx) to control which entities show the tab.
+ * @public
+ */
+export function createScorecardCatalogModule(
+  options?: ScorecardEntityContentOptions,
+) {
+  return createFrontendModule({
+    pluginId: 'catalog',
+    extensions: [createScorecardEntityContent(options)],
+  });
+}
+
+/** Module registering Scorecard translations in app */
+export const scorecardTranslationsModule = createFrontendModule({
+  pluginId: 'app',
+  extensions: [scorecardTranslation],
+});
Evidence
The new alpha entrypoint exports additional public APIs
(createScorecardEntityContent/createScorecardCatalogModule/scorecardTranslationsModule and a new
default export), but the checked-in report-alpha.api.md does not include them. The scorecard
workspace includes a build step that validates API reports, making this a likely CI blocker.

workspaces/scorecard/plugins/scorecard/src/alpha.tsx[45-120]
workspaces/scorecard/plugins/scorecard/report-alpha.api.md[1-50]
workspaces/scorecard/package.json[10-18]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`plugins/scorecard/src/alpha.tsx` now exports additional public alpha APIs, but `plugins/scorecard/report-alpha.api.md` still reflects the old surface area (translations-only). This commonly breaks API report validation in CI.
### Issue Context
The scorecard workspace runs an API report validation step (`backstage-repo-tools api-reports ... --validate-release-tags`).
### Fix
- Regenerate API reports for the scorecard workspace/package (using the repo’s standard command).
- Example: run the scorecard workspace’s API report command (e.g. `yarn workspace @internal/scorecard build:api-reports:only`) and commit the updated `report-alpha.api.md` output.
- Ensure the regenerated report includes the new exports from `src/alpha.tsx` (e.g., `createScorecardCatalogModule`, `createScorecardEntityContent`, `scorecardTranslationsModule`, and the default export).
### Fix Focus Areas
- workspaces/scorecard/plugins/scorecard/src/alpha.tsx[71-120]
- workspaces/scorecard/plugins/scorecard/report-alpha.api.md[1-60]
- workspaces/scorecard/package.json[16-17]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. skipLibCheck masks type errors 🐞 Bug ⛯ Reliability ⭐ New
Description
The scorecard workspace now enables skipLibCheck, which can hide real dependency type
incompatibilities and reduce CI/type-check signal for this workspace compared to others. Since
build:api-reports:only now runs yarn tsc, this change effectively weakens the typecheck step
that gates API report generation.
Code

workspaces/scorecard/tsconfig.json[R11-17]

  "compilerOptions": {
    "outDir": "dist-types",
    "rootDir": ".",
+    "skipLibCheck": true,
    "lib": ["DOM", "DOM.Iterable", "ScriptHost", "ES2022"],
    "target": "ES2022",
    "useUnknownInCatchVariables": false,
Evidence
skipLibCheck is explicitly enabled in the scorecard workspace tsconfig, while a comparable
workspace (adoption-insights) does not enable it. Also, the scorecard workspace now runs yarn tsc
as part of build:api-reports:only, so this relaxed typechecking is exercised in the API report
workflow.

workspaces/scorecard/tsconfig.json[11-19]
workspaces/scorecard/package.json[8-18]
workspaces/adoption-insights/tsconfig.json[11-18]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The scorecard workspace enables `skipLibCheck`, which suppresses type-checking of declaration files and can hide dependency type incompatibilities. This reduces the effectiveness of `yarn tsc` (now run as part of `build:api-reports:only`) as a gate before API report generation.

### Issue Context
This appears to be introduced to make the new API-report flow pass reliably, but it impacts all TS workflows in the workspace (IDE diagnostics, CI checks, local type checks).

### Fix Focus Areas
- workspaces/scorecard/tsconfig.json[11-19]
- workspaces/scorecard/package.json[8-18]

### Suggested changes
1. Remove `skipLibCheck: true` from `workspaces/scorecard/tsconfig.json`.
2. If API report generation needs it, scope it to the script instead, e.g.:
  - Change `build:api-reports:only` to `yarn tsc --skipLibCheck true &amp;&amp; backstage-repo-tools api-reports ...`, **or**
  - Change `build:api-reports:only` to `yarn tsc:full &amp;&amp; backstage-repo-tools api-reports ...` (since `tsc:full` already passes `--skipLibCheck true`).
3. (Optional) Add a short comment in the script explaining why `skipLibCheck` is needed there, if it is intended to be temporary.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Missing bundled flag 🐞 Bug ⛯ Reliability
Description
The new app-next frontend package is missing the "bundled": true flag that all other frontend app
packages in this repo use, which may cause Backstage repo tooling to treat it differently during
build/packaging.
Code

workspaces/scorecard/packages/app-next/package.json[R1-7]

+{
+  "name": "app-next",
+  "version": "0.0.0",
+  "private": true,
+  "backstage": {
+    "role": "frontend"
+  },
Evidence
Within this repository, frontend app packages consistently set "bundled": true. app-next is a
frontend package but omits the flag, making it an outlier and a potential packaging/tooling footgun.

workspaces/scorecard/packages/app-next/package.json[1-7]
workspaces/scorecard/packages/app/package.json[1-13]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`packages/app-next` is a frontend app package but does not include the `&amp;amp;quot;bundled&amp;amp;quot;: true` flag, unlike other frontend app packages in this repo.
### Issue Context
In this repository, other `backstage.role=frontend` app packages set `&amp;amp;quot;bundled&amp;amp;quot;: true`.
### Fix
- Add `&amp;amp;quot;bundled&amp;amp;quot;: true` near the top-level fields in `workspaces/scorecard/packages/app-next/package.json` (mirroring other `packages/app` packages).
### Fix Focus Areas
- workspaces/scorecard/packages/app-next/package.json[1-12]
- workspaces/scorecard/packages/app/package.json[1-13]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


4. Missing public assets 🐞 Bug ✓ Correctness
Description
app-next/public/index.html references manifest.json and multiple favicon/icon assets, but
app-next/public currently only contains index.html, causing 404s and missing icons/manifest at
runtime.
Code

workspaces/scorecard/packages/app-next/public/index.html[R15-43]

+    <link
+      rel="manifest"
+      href="<%= publicPath %>/manifest.json"
+      crossorigin="use-credentials"
+    />
+    <link rel="icon" href="<%= publicPath %>/favicon.ico" />
+    <link rel="shortcut icon" href="<%= publicPath %>/favicon.ico" />
+    <link
+      rel="apple-touch-icon"
+      sizes="180x180"
+      href="<%= publicPath %>/apple-touch-icon.png"
+    />
+    <link
+      rel="icon"
+      type="image/png"
+      sizes="32x32"
+      href="<%= publicPath %>/favicon-32x32.png"
+    />
+    <link
+      rel="icon"
+      type="image/png"
+      sizes="16x16"
+      href="<%= publicPath %>/favicon-16x16.png"
+    />
+    <link
+      rel="mask-icon"
+      href="<%= publicPath %>/safari-pinned-tab.svg"
+      color="#5bbad5"
+    />
Evidence
The HTML template explicitly links to manifest and icon files under the public path, but the
app-next/public folder contains only index.html, so those requests will fail. The legacy app
includes these referenced files, indicating they were likely expected to be copied over.

workspaces/scorecard/packages/app-next/public/index.html[15-43]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`packages/app-next/public/index.html` references `manifest.json` and multiple icon files, but those files are not present under `packages/app-next/public`, leading to missing icons/manifest and 404s.
### Issue Context
The legacy app (`packages/app/public`) includes these files and uses the same template references, suggesting app-next should include them too.
### Fix
Choose one:
1) Copy/generate the referenced assets into `packages/app-next/public/`:
- manifest.json
- favicon.ico
- apple-touch-icon.png
- favicon-32x32.png
- favicon-16x16.png
- safari-pinned-tab.svg
(Optionally also include robots.txt / other assets used elsewhere)
2) Or, update `packages/app-next/public/index.html` to only reference assets that exist (or remove the manifest/icons if not desired).
### Fix Focus Areas
- workspaces/scorecard/packages/app-next/public/index.html[15-43]
- workspaces/scorecard/packages/app-next/public[1-1]
- workspaces/scorecard/packages/app/public[1-1]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

@rhdh-qodo-merge
Copy link

Review Summary by Qodo

Add New Frontend System (NFS) support to scorecard plugin

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Add New Frontend System (NFS) support with alpha exports
• Create new app-next package for NFS-based Backstage app
• Add TypeScript type annotations for API and translation refs
• Fix TypeScript compilation errors and type safety issues
Diagram
flowchart LR
  A["Scorecard Plugin"] -->|"NFS Alpha Exports"| B["Frontend Plugin API"]
  A -->|"Entity Content Extension"| C["Catalog Integration"]
  A -->|"Translation Module"| D["App Translations"]
  E["app-next Package"] -->|"Uses NFS"| B
  E -->|"Scorecard Module"| C
  E -->|"Legacy Compat"| F["Core Components"]
Loading

Grey Divider

File Changes

1. workspaces/scorecard/plugins/scorecard/src/api/index.ts ✨ Enhancement +6/-3

Add explicit type annotation to API reference

workspaces/scorecard/plugins/scorecard/src/api/index.ts


2. workspaces/scorecard/plugins/scorecard/src/alpha.tsx ✨ Enhancement +120/-0

Create NFS plugin with entity content and modules

workspaces/scorecard/plugins/scorecard/src/alpha.tsx


3. workspaces/scorecard/plugins/scorecard/src/translations/index.ts ✨ Enhancement +15/-11

Add type annotations to translation resource

workspaces/scorecard/plugins/scorecard/src/translations/index.ts


View more (22)
4. workspaces/scorecard/plugins/scorecard/src/translations/ref.ts ✨ Enhancement +8/-2

Add type annotations to translation reference

workspaces/scorecard/plugins/scorecard/src/translations/ref.ts


5. workspaces/scorecard/plugins/scorecard/src/translations/de.ts 🐞 Bug fix +1/-1

Add type cast for German translation messages

workspaces/scorecard/plugins/scorecard/src/translations/de.ts


6. workspaces/scorecard/plugins/scorecard/src/translations/es.ts 🐞 Bug fix +1/-1

Add type cast for Spanish translation messages

workspaces/scorecard/plugins/scorecard/src/translations/es.ts


7. workspaces/scorecard/plugins/scorecard/src/translations/fr.ts 🐞 Bug fix +1/-1

Add type cast for French translation messages

workspaces/scorecard/plugins/scorecard/src/translations/fr.ts


8. workspaces/scorecard/plugins/scorecard/src/translations/it.ts 🐞 Bug fix +1/-1

Add type cast for Italian translation messages

workspaces/scorecard/plugins/scorecard/src/translations/it.ts


9. workspaces/scorecard/plugins/scorecard/src/translations/ja.ts 🐞 Bug fix +1/-1

Add type cast for Japanese translation messages

workspaces/scorecard/plugins/scorecard/src/translations/ja.ts


10. workspaces/scorecard/plugins/scorecard/src/components/Common/PermissionRequiredState.tsx 🐞 Bug fix +2/-2

Fix TypeScript type safety in translation calls

workspaces/scorecard/plugins/scorecard/src/components/Common/PermissionRequiredState.tsx


11. workspaces/scorecard/plugins/scorecard/src/components/ScorecardHomepageSection/CustomTooltip.tsx 🐞 Bug fix +4/-1

Add type cast for translation parameters

workspaces/scorecard/plugins/scorecard/src/components/ScorecardHomepageSection/CustomTooltip.tsx


12. workspaces/scorecard/plugins/scorecard/src/components/ScorecardHomepageSection/EmptyStatePanel.tsx 🐞 Bug fix +4/-1

Add type cast for translation parameters

workspaces/scorecard/plugins/scorecard/src/components/ScorecardHomepageSection/EmptyStatePanel.tsx


13. workspaces/scorecard/plugins/scorecard/src/components/ScorecardHomepageSection/ScorecardHomepageCardComponent.tsx 🐞 Bug fix +3/-1

Add type cast for translation parameters

workspaces/scorecard/plugins/scorecard/src/components/ScorecardHomepageSection/ScorecardHomepageCardComponent.tsx


14. workspaces/scorecard/plugins/scorecard/src/hooks/useAggregatedScorecard.tsx 🐞 Bug fix +2/-2

Fix TypeScript type safety in error handling

workspaces/scorecard/plugins/scorecard/src/hooks/useAggregatedScorecard.tsx


15. workspaces/scorecard/plugins/scorecard/src/hooks/useScorecards.tsx 🐞 Bug fix +2/-2

Fix TypeScript type safety in error handling

workspaces/scorecard/plugins/scorecard/src/hooks/useScorecards.tsx


16. workspaces/scorecard/plugins/scorecard/package.json Dependencies +5/-2

Add NFS dependencies and update export paths

workspaces/scorecard/plugins/scorecard/package.json


17. workspaces/scorecard/plugins/scorecard/report-alpha.api.md 📝 Documentation +58/-34

Update API report with NFS plugin exports

workspaces/scorecard/plugins/scorecard/report-alpha.api.md


18. workspaces/scorecard/packages/app-next/package.json ⚙️ Configuration changes +36/-0

Create new NFS app package configuration

workspaces/scorecard/packages/app-next/package.json


19. workspaces/scorecard/packages/app-next/src/App.tsx ✨ Enhancement +97/-0

Create NFS app with scorecard integration

workspaces/scorecard/packages/app-next/src/App.tsx


20. workspaces/scorecard/packages/app-next/src/index.tsx ✨ Enhancement +5/-1

Initialize NFS app with React DOM rendering

workspaces/scorecard/packages/app-next/src/index.tsx


21. workspaces/scorecard/packages/app-next/public/index.html ⚙️ Configuration changes +60/-0

Add HTML template for NFS app

workspaces/scorecard/packages/app-next/public/index.html


22. workspaces/scorecard/packages/app-next/.eslintrc.js ⚙️ Configuration changes +1/-0

Add ESLint configuration for app-next

workspaces/scorecard/packages/app-next/.eslintrc.js


23. workspaces/scorecard/package.json ⚙️ Configuration changes +2/-1

Add start:next script and TypeScript compilation

workspaces/scorecard/package.json


24. workspaces/scorecard/tsconfig.json ⚙️ Configuration changes +1/-0

Add skipLibCheck flag for TypeScript compilation

workspaces/scorecard/tsconfig.json


25. workspaces/scorecard/.changeset/puny-eggs-burn.md 📝 Documentation +5/-0

Document NFS support addition in changelog

workspaces/scorecard/.changeset/puny-eggs-burn.md


Grey Divider

Qodo Logo

@rhdh-qodo-merge
Copy link

rhdh-qodo-merge bot commented Mar 8, 2026

Code Review by Qodo

🐞 Bugs (4) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider


Action required

1. Missing react-router-dom dep 🐞 Bug ⛯ Reliability ⭐ New
Description
app-next depends on @backstage/frontend-defaults, which declares react-router-dom as a peer
dependency, but app-next does not declare it. This makes app-next fragile when built/used in
isolation (e.g., focused installs) and can result in runtime/module resolution errors or peer
dependency failures.
Code

workspaces/scorecard/packages/app-next/package.json[R18-32]

+  "dependencies": {
+    "@backstage/cli": "^0.34.5",
+    "@backstage/core-compat-api": "^0.5.5",
+    "@backstage/core-components": "^0.18.3",
+    "@backstage/core-plugin-api": "^1.12.0",
+    "@backstage/frontend-defaults": "^0.4.0",
+    "@backstage/plugin-catalog": "^1.32.0",
+    "@backstage/plugin-scaffolder": "^1.34.3",
+    "@backstage/plugin-user-settings": "^0.8.29",
+    "@backstage/ui": "^0.9.1",
+    "@red-hat-developer-hub/backstage-plugin-scorecard": "workspace:^",
+    "@red-hat-developer-hub/backstage-plugin-theme": "^0.12.0",
+    "react": "^18.0.2",
+    "react-dom": "^18.0.2"
+  },
Evidence
app-next includes @backstage/frontend-defaults but does not list react-router-dom. The
workspace lockfile shows @backstage/frontend-defaults@0.4.0 requires react-router-dom via
peerDependencies, meaning the consuming app should declare it explicitly.

workspaces/scorecard/packages/app-next/package.json[18-32]
workspaces/scorecard/yarn.lock[2714-2733]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`workspaces/scorecard/packages/app-next` depends on `@backstage/frontend-defaults`, which has a `react-router-dom` peer dependency, but `app-next` does not declare `react-router-dom`.

## Issue Context
This can break `app-next` builds/starts when installed or built independently (e.g., focused installs, extracting app-next into its own repo, stricter peer-dep enforcement).

## Fix Focus Areas
- workspaces/scorecard/packages/app-next/package.json[18-35]
- workspaces/scorecard/yarn.lock[2714-2733]

## Proposed change
Add `react-router-dom` to `dependencies` for app-next (use a version range compatible with the Backstage packages in this workspace, e.g. `^6.30.2`).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Alpha API report stale🐞 Bug ⛯ Reliability
Description
The scorecard plugin alpha entrypoint now exports new NFS APIs, but the existing API Extractor
report (report-alpha.api.md) still documents only translations, which is likely to fail API report
validation/lint in CI.
Code

workspaces/scorecard/plugins/scorecard/src/alpha.tsx[R71-118]

+export function createScorecardEntityContent(
+  options?: ScorecardEntityContentOptions,
+): ExtensionDefinition {
+  const filter =
+    options?.entityKinds?.length &&
+    `kind:${options.entityKinds.map(k => k.toLowerCase()).join(',')}`;
+  return EntityContentBlueprint.make({
+    name: 'scorecard',
+    params: {
+      ...defaultScorecardEntityContentParams,
+      ...(filter && { filter }),
+    },
+  });
+}
+
+/** Scorecard translation resources */
+const scorecardTranslation = TranslationBlueprint.make({
+  params: {
+    resource: scorecardTranslations,
+  },
+});
+
+/** Main Scorecard frontend plugin */
+export default createFrontendPlugin({
+  pluginId: 'scorecard',
+  extensions: [scorecardApi],
+  routes: { root: rootRouteRef },
+});
+
+/**
+ * Creates a module that registers the Scorecard entity tab with the given options.
+ * Pass entity kinds from the app (e.g. in app-next App.tsx) to control which entities show the tab.
+ * @public
+ */
+export function createScorecardCatalogModule(
+  options?: ScorecardEntityContentOptions,
+) {
+  return createFrontendModule({
+    pluginId: 'catalog',
+    extensions: [createScorecardEntityContent(options)],
+  });
+}
+
+/** Module registering Scorecard translations in app */
+export const scorecardTranslationsModule = createFrontendModule({
+  pluginId: 'app',
+  extensions: [scorecardTranslation],
+});
Evidence
The new alpha entrypoint exports additional public APIs
(createScorecardEntityContent/createScorecardCatalogModule/scorecardTranslationsModule and a new
default export), but the checked-in report-alpha.api.md does not include them. The scorecard
workspace includes a build step that validates API reports, making this a likely CI blocker.

workspaces/scorecard/plugins/scorecard/src/alpha.tsx[45-120]
workspaces/scorecard/plugins/scorecard/report-alpha.api.md[1-50]
workspaces/scorecard/package.json[10-18]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`plugins/scorecard/src/alpha.tsx` now exports additional public alpha APIs, but `plugins/scorecard/report-alpha.api.md` still reflects the old surface area (translations-only). This commonly breaks API report validation in CI.
### Issue Context
The scorecard workspace runs an API report validation step (`backstage-repo-tools api-reports ... --validate-release-tags`).
### Fix
- Regenerate API reports for the scorecard workspace/package (using the repo’s standard command).
- Example: run the scorecard workspace’s API report command (e.g. `yarn workspace @internal/scorecard build:api-reports:only`) and commit the updated `report-alpha.api.md` output.
- Ensure the regenerated report includes the new exports from `src/alpha.tsx` (e.g., `createScorecardCatalogModule`, `createScorecardEntityContent`, `scorecardTranslationsModule`, and the default export).
### Fix Focus Areas
- workspaces/scorecard/plugins/scorecard/src/alpha.tsx[71-120]
- workspaces/scorecard/plugins/scorecard/report-alpha.api.md[1-60]
- workspaces/scorecard/package.json[16-17]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

3. Missing bundled flag 🐞 Bug ⛯ Reliability
Description
The new app-next frontend package is missing the "bundled": true flag that all other frontend app
packages in this repo use, which may cause Backstage repo tooling to treat it differently during
build/packaging.
Code

workspaces/scorecard/packages/app-next/package.json[R1-7]

+{
+  "name": "app-next",
+  "version": "0.0.0",
+  "private": true,
+  "backstage": {
+    "role": "frontend"
+  },
Evidence
Within this repository, frontend app packages consistently set "bundled": true. app-next is a
frontend package but omits the flag, making it an outlier and a potential packaging/tooling footgun.

workspaces/scorecard/packages/app-next/package.json[1-7]
workspaces/scorecard/packages/app/package.json[1-13]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`packages/app-next` is a frontend app package but does not include the `&amp;amp;quot;bundled&amp;amp;quot;: true` flag, unlike other frontend app packages in this repo.
### Issue Context
In this repository, other `backstage.role=frontend` app packages set `&amp;amp;quot;bundled&amp;amp;quot;: true`.
### Fix
- Add `&amp;amp;quot;bundled&amp;amp;quot;: true` near the top-level fields in `workspaces/scorecard/packages/app-next/package.json` (mirroring other `packages/app` packages).
### Fix Focus Areas
- workspaces/scorecard/packages/app-next/package.json[1-12]
- workspaces/scorecard/packages/app/package.json[1-13]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


4. Missing public assets 🐞 Bug ✓ Correctness
Description
app-next/public/index.html references manifest.json and multiple favicon/icon assets, but
app-next/public currently only contains index.html, causing 404s and missing icons/manifest at
runtime.
Code

workspaces/scorecard/packages/app-next/public/index.html[R15-43]

+    <link
+      rel="manifest"
+      href="<%= publicPath %>/manifest.json"
+      crossorigin="use-credentials"
+    />
+    <link rel="icon" href="<%= publicPath %>/favicon.ico" />
+    <link rel="shortcut icon" href="<%= publicPath %>/favicon.ico" />
+    <link
+      rel="apple-touch-icon"
+      sizes="180x180"
+      href="<%= publicPath %>/apple-touch-icon.png"
+    />
+    <link
+      rel="icon"
+      type="image/png"
+      sizes="32x32"
+      href="<%= publicPath %>/favicon-32x32.png"
+    />
+    <link
+      rel="icon"
+      type="image/png"
+      sizes="16x16"
+      href="<%= publicPath %>/favicon-16x16.png"
+    />
+    <link
+      rel="mask-icon"
+      href="<%= publicPath %>/safari-pinned-tab.svg"
+      color="#5bbad5"
+    />
Evidence
The HTML template explicitly links to manifest and icon files under the public path, but the
app-next/public folder contains only index.html, so those requests will fail. The legacy app
includes these referenced files, indicating they were likely expected to be copied over.

workspaces/scorecard/packages/app-next/public/index.html[15-43]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`packages/app-next/public/index.html` references `manifest.json` and multiple icon files, but those files are not present under `packages/app-next/public`, leading to missing icons/manifest and 404s.
### Issue Context
The legacy app (`packages/app/public`) includes these files and uses the same template references, suggesting app-next should include them too.
### Fix
Choose one:
1) Copy/generate the referenced assets into `packages/app-next/public/`:
- manifest.json
- favicon.ico
- apple-touch-icon.png
- favicon-32x32.png
- favicon-16x16.png
- safari-pinned-tab.svg
(Optionally also include robots.txt / other assets used elsewhere)
2) Or, update `packages/app-next/public/index.html` to only reference assets that exist (or remove the manifest/icons if not desired).
### Fix Focus Areas
- workspaces/scorecard/packages/app-next/public/index.html[15-43]
- workspaces/scorecard/packages/app-next/public[1-1]
- workspaces/scorecard/packages/app/public[1-1]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

@rohitratannagar
Copy link
Contributor Author

closing this pr due to mess --
new pr -> 2487

@sonarqubecloud
Copy link

sonarqubecloud bot commented Mar 8, 2026

Comment on lines +18 to +32
"dependencies": {
"@backstage/cli": "^0.34.5",
"@backstage/core-compat-api": "^0.5.5",
"@backstage/core-components": "^0.18.3",
"@backstage/core-plugin-api": "^1.12.0",
"@backstage/frontend-defaults": "^0.4.0",
"@backstage/plugin-catalog": "^1.32.0",
"@backstage/plugin-scaffolder": "^1.34.3",
"@backstage/plugin-user-settings": "^0.8.29",
"@backstage/ui": "^0.9.1",
"@red-hat-developer-hub/backstage-plugin-scorecard": "workspace:^",
"@red-hat-developer-hub/backstage-plugin-theme": "^0.12.0",
"react": "^18.0.2",
"react-dom": "^18.0.2"
},

Choose a reason for hiding this comment

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

Action required

1. Missing react-router-dom dep 🐞 Bug ⛯ Reliability

app-next depends on @backstage/frontend-defaults, which declares react-router-dom as a peer
dependency, but app-next does not declare it. This makes app-next fragile when built/used in
isolation (e.g., focused installs) and can result in runtime/module resolution errors or peer
dependency failures.
Agent Prompt
## Issue description
`workspaces/scorecard/packages/app-next` depends on `@backstage/frontend-defaults`, which has a `react-router-dom` peer dependency, but `app-next` does not declare `react-router-dom`.

## Issue Context
This can break `app-next` builds/starts when installed or built independently (e.g., focused installs, extracting app-next into its own repo, stricter peer-dep enforcement).

## Fix Focus Areas
- workspaces/scorecard/packages/app-next/package.json[18-35]
- workspaces/scorecard/yarn.lock[2714-2733]

## Proposed change
Add `react-router-dom` to `dependencies` for app-next (use a version range compatible with the Backstage packages in this workspace, e.g. `^6.30.2`).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant