Conversation
|
🤖 Finished Review · ✅ Success · Started 12:01 PM UTC · Completed 12:21 PM UTC Commit: Runtime: claude · Model: sonnet → claude-sonnet-4-6 · Effort: high · Cost: $4.71 |
|
Risk Assessment: moderate (2/5) DetailsTier 1 signals are identical to the prior assessment — same 29 files, large blast radius, low test ratio (0.07), one dependency file changed, no protected paths, no security-sensitive files, no CI changes, established contributor — and Tier 2 signals are mild, confirming the prior score of 2 (moderate). Previous runRisk Assessment: moderate (2/5) DetailsScore of 2 (moderate): large blast radius and low test ratio from 29 new scaffolding files, with one dependency file changed, but no protected paths, security-sensitive files, or CI changes from an established contributor; prior score confirmed. Previous run (2)Risk Assessment: moderate (2/5) DetailsScore of 2 (moderate): substantial new scaffolding with large blast radius and low test ratio, but no protected paths, security-sensitive files, dependency, or CI changes from an established contributor. Previous run (3)Risk Assessment: moderate (2/5) DetailsA substantial new-feature PR (27 files, 589 additions) scaffolding a plugin-new command with templates; risk is kept moderate by zero security/protected-path exposure, no dependency changes, low churn on existing modified files, and a known non-first-time author — partially offset by a low test-file ratio (0.07) relative to total files changed. |
ReviewFindingsLow
Next steps:
Previous runReviewFindingsLow
Next steps:
Previous run (2)ReviewThree items need to be addressed before this PR is ready to merge. FindingsMedium
Low
Next steps:
Previous run (3)ReviewSeveral issues should be addressed before this PR merges, including a validation gap that allows malformed plugin names, a data-contract change on an exported constant (the compatibility matrix correction), missing flag documentation, an absent changelog entry, and a cluster of low-severity correctness and style issues. FindingsMedium
Low
Next steps:
|
|
🤖 Finished Review · ✅ Success · Started 12:27 PM UTC · Completed 12:42 PM UTC Commit: Runtime: claude · Model: sonnet → claude-sonnet-4-6 · Effort: high · Cost: $4.37 |
Assisted-By: openai/gpt-5.6-terra Signed-off-by: Stan Lewis <gashcrumb@gmail.com> rh-pre-commit.version: 2.4.0 rh-pre-commit.check-secrets: ENABLED
Assisted-By: openai/gpt-5.6-terra Signed-off-by: Stan Lewis <gashcrumb@gmail.com> rh-pre-commit.version: 2.4.0 rh-pre-commit.check-secrets: ENABLED
Assisted-By: openai/gpt-5.6-terra rh-pre-commit.version: 2.4.0 rh-pre-commit.check-secrets: ENABLED
22d55c2 to
a204e70
Compare
|
🤖 Finished Review · ✅ Success · Started 12:24 PM UTC · Completed 12:42 PM UTC Commit: Runtime: claude · Model: sonnet → claude-sonnet-4-6 · Effort: high · Cost: $5.55 |
Assisted-By: openai/gpt-5.6-terra rh-pre-commit.version: 2.4.0 rh-pre-commit.check-secrets: ENABLED
|
|
🤖 Finished Review · ✅ Success · Started 1:14 PM UTC · Completed 1:31 PM UTC Commit: Runtime: claude · Model: sonnet → claude-sonnet-4-6 · Effort: high · Cost: $4.47 |
| } | ||
| } | ||
|
|
||
| export async function completeInteractiveOptions( |
There was a problem hiding this comment.
[low] documentation-comment-format
The exported function completeInteractiveOptions has no JSDoc comment. Both sibling command.ts files (check-versions and upgrade) place a JSDoc block above every exported function without exception. createPluginProject (line 104) and command (line 171) in this same file follow that pattern, but completeInteractiveOptions does not.
Suggested fix: Add a JSDoc comment above completeInteractiveOptions describing its purpose, e.g.: /** Fills in missing name and type by calling the provided prompt function interactively. */
PatAKnight
left a comment
There was a problem hiding this comment.
Left a few in-lines.
Also, the generated files do not seem to contain a .gitignore. It would be beneficial to include one.
| resolveRhdhVersion: jest.fn(), | ||
| })); | ||
|
|
||
| describe('createPluginProject', () => { |
There was a problem hiding this comment.
I think it would be beneficial to include some snapshot tests of the generated files here to hopefully catch any template drift that might happen.
|
|
||
| const plugin = createBackendPlugin({ | ||
| pluginId: '{{pluginId}}', | ||
| register() {}, |
There was a problem hiding this comment.
Let's scaffold the backend plugin a bit more: registerInit with coreServices.httpRouter and coreServices.logger (for example a simple /health route). That shows developers how to wire a couple of core services instead of an empty register().
| rhdh-cli plugin new my-plugin --type frontend --rhdh-version 2.1.0 | ||
| ``` | ||
|
|
||
| Supported types are `frontend` (a New Frontend System, or NFS, page), `backend` (a minimal new-backend-system plugin), and `backend-module` (a catalog processor module). Use `--name <plugin-name>` as an alternative to the positional name, and `--output <directory>` to select a destination. The generated project uses the target RHDH release's Backstage manifest for every `@backstage/*` dependency. For air-gapped environments, provide `--manifest-file` and set `RHDH_OFFLINE=true`. Export and package generated plugins with `npx @red-hat-developer-hub/cli`, or through RHDH Dynamic Plugin Factory, rather than adding the CLI as a project dependency. |
There was a problem hiding this comment.
I see that we mention "backend-module (a catalog processor module)". Do we want to keep it catalog-only for now, or is the longer-term plan to support other targets (scaffolder/search/techdocs) or a generic “which plugin to extend” prompt?



Summary
rhdh-cli plugin newfor standalone frontend, backend, and catalog backend-module projects.npx @red-hat-developer-hub/cliand RHDH Dynamic Plugin Factory as the export/package routes.mainafter feat: add plugin upgrade command for dynamic plugin dependency management #177 and added the2.0.7package/changelog release entry.Jira
Test Plan
yarn prettier:checkyarn tscyarn lint:checkyarn testyarn build