Skip to content

Conversation

@rafaelvzago
Copy link

@rafaelvzago rafaelvzago commented Nov 10, 2025

Summary

This PR fixes the email functionality implementation in the security plugin and updates all generated documentation to reflect the correct command names and arguments.

What this PR does / why we need it:

Fix email make targets:

  • Corrects the Makefile target usage for email functionality
  • Documents the proper targets: make email and make email-grade
  • Fixes ModuleNotFoundError by using Makefile's dependency management

Update plugin documentation:

  • Corrects command name from /security:set-tool-path to /security:set-image-grade-tool-path
  • Adds missing argument hints [--grade <grades>] [--email] to /security:image-grades
  • Regenerates PLUGINS.md and docs/data.json

Commits

  • fix(security): correct email make targets for image-grades command
  • docs(security): update plugin documentation for security commands

Special notes for your reviewer:

The documentation changes were generated using make update which automatically scans plugin commands and regenerates the documentation files.

AI Assistance Disclosure

This PR contains substantial AI-generated content:

  • Plugin documentation and command definitions were generated by Claude
  • Code structure and implementation guidance were AI-assisted
  • Build script bug fix was human-authored

Checklist:

  • Subject and description added to both, commit and PR
  • Relevant issues have been referenced
  • This change includes docs

Summary by CodeRabbit

  • New Features

    • Added a Security plugin for CVE analysis and container image vulnerability scanning, including commands to generate image-grade reports and configure the reporting tool path; supports Kerberos auth, multi-architecture scanning, JSON output, optional grade filtering, and email delivery.
  • Documentation

    • Comprehensive user, command, and integration guides added for the Security plugin and its tooling.
  • Chores

    • Plugin entry and documentation were accidentally duplicated in the published manifests/index.

@openshift-ci openshift-ci bot requested review from bryan-cox and dgoodwin November 10, 2025 20:47
@openshift-ci
Copy link

openshift-ci bot commented Nov 10, 2025

[APPROVALNOTIFIER] This PR is NOT APPROVED

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

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

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

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 10, 2025

Note

.coderabbit.yaml has unrecognized properties

CodeRabbit is using all valid settings from your configuration. Unrecognized properties (listed below) have been ignored and may indicate typos or deprecated fields that can be removed.

⚠️ Parsing warnings (1)
Validation error: Unrecognized key(s) in object: 'tools'
⚙️ Configuration instructions
  • Please see the configuration documentation for more information.
  • You can also validate your configuration using the online YAML validator.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Walkthrough

Adds a new public "security" plugin with descriptor, README, two command docs, and a container-grade-reporter skill; updates marketplace and docs manifests (duplicate entries introduced in docs/data.json and PLUGINS.md); tweaks website build script synopsis extraction regex.

Changes

Cohort / File(s) Summary
Marketplace manifest
\.claude-plugin/marketplace.json
Added a public plugin entry for security with source: ./plugins/security and description about CVE analysis and container image vulnerability scanning.
Documentation manifest
docs/data.json
Added plugin metadata for security (version 0.1.0), two commands (image-grades, set-image-grade-tool-path), a skill (container-grade-reporter), and has_readme: true. The plugin appears twice (duplicated entry).
Plugin descriptor
plugins/security/.claude-plugin/plugin.json
New plugin descriptor: name security, description for container vulnerability grade reporting, version 0.1.0, and author metadata.
Top-level plugin index
PLUGINS.md
Inserted a Security Plugin documentation block into the index; the block appears twice in the file (duplicated).
Plugin README
plugins/security/README.md
New README covering overview, installation, configuration, usage, examples, auth notes, troubleshooting, outputs, and contributing.
Command documentation
plugins/security/commands/image-grades.md, plugins/security/commands/set-image-grade-tool-path.md
Added detailed docs for security:image-grades (validation, tool discovery, execution, parsing, optional email, examples, errors) and security:set-image-grade-tool-path (path validation, config persistence, examples, errors).
Skill integration guide
plugins/security/skills/container-grade-reporter/SKILL.md
New skill doc for integrating container-grade-reporter: prerequisites, YAML schema, workflows, JSON outputs, error handling, and testing notes.
Build script tweak
scripts/build-website.py
Updated extract_synopsis regex to accept an optional language token after triple backticks and capture the following non-empty line as the synopsis.

Sequence Diagram(s)

sequenceDiagram
    actor User
    participant CLI as /security:image-grades
    participant Config as YAML config
    participant Finder as Tool discovery
    participant Reporter as container-grade-reporter
    participant Parser as JSON parser/formatter
    participant Mailer as SMTP (optional)

    Note right of CLI `#d6eef8`: Command invoked
    User->>CLI: invoke /security:image-grades <config.yaml> [--grade] [--email]
    CLI->>Config: validate YAML
    alt invalid config
        Config-->>CLI: error -> abort
    else valid
        CLI->>Finder: locate tool (user config, PATH, repo, workspace)
        alt tool not found
            Finder-->>CLI: error -> abort
        else tool found
            CLI->>Reporter: run reporter with config
            Reporter-->>CLI: produce JSON
            alt --email used
                CLI->>Mailer: send email report
                Mailer-->>CLI: delivery status
            else
                CLI->>Parser: parse & apply --grade filter
                Parser-->>CLI: formatted report
            end
            CLI-->>User: display results / status
        end
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Attention areas:
    • docs/data.json — duplicated plugin entry needs deduplication and ordering check.
    • PLUGINS.md — duplicated Security Plugin block should be removed or consolidated.
    • Cross-file consistency — verify name, version, command names, synopses, and argument hints match across docs/data.json, plugins/security/.claude-plugin/plugin.json, and command docs.
    • plugins/security/README.md — verify prerequisites and any internal-access claims for public-facing docs.

Pre-merge checks and finishing touches

✅ Passed checks (7 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'fix(security): correct email make targets and update documentation' directly and accurately summarizes the main changes: fixing email functionality in the security plugin and updating related documentation.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
No Real People Names In Style References ✅ Passed Comprehensive search of all modified and newly added files in the security plugin PR reveals no references to real people's names in plugin commands, skill documentation, example prompts, or style references.
No Assumed Git Remote Names ✅ Passed PR does not assume hardcoded git remote names like origin or upstream in any added or modified files.
Git Push Safety Rules ✅ Passed No git push operations found in the pull request across scripts, documentation, workflows, or configuration files.
No Untrusted Mcp Servers ✅ Passed PR contains only documentation updates for security plugin and build script fix with no MCP server installations from any sources.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 4e947a1 and bd581b8.

📒 Files selected for processing (2)
  • plugins/security/README.md (1 hunks)
  • plugins/security/skills/container-grade-reporter/SKILL.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • plugins/security/README.md
  • plugins/security/skills/container-grade-reporter/SKILL.md

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

@rafaelvzago
Copy link
Author

rafaelvzago commented Nov 10, 2025

Question: Container Grade Reporter Dependency

The security plugin currently depends on the Red Hat Gitlab Instance

This requires:

  • Red Hat internal network access
  • GitLab CEE authentication
  • Manual cloning and setup by users

Question for the team: Should we consider porting this tool to the openshift-eng GitHub organization?

Pros:

  • Better accessibility for contributors
  • Consistent with other ai-helpers tooling
  • Easier CI/CD integration
  • Public visibility (if appropriate)

Cons:

  • Maintenance overhead
  • May contain Red Hat internal-specific code
  • Kerberos/Pyxis API dependencies still require RH access

Would appreciate guidance on the preferred approach. Happy to help with the port if the team decides it makes sense.

@openshift-ci openshift-ci bot added the needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. label Nov 10, 2025
@openshift-ci
Copy link

openshift-ci bot commented Nov 10, 2025

Hi @rafaelvzago. Thanks for your PR.

I'm waiting for a github.com 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.

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.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (10)
plugins/security/skills/container-grade-reporter/SKILL.md (3)

478-480: Wrap bare URLs in markdown link syntax.

Lines 478-480 contain bare URLs. Consider wrapping them in markdown link format for better rendering:

-## References
-
-- **Repository**: https://gitlab.cee.redhat.com/istio/servicemesh-qe/container-grade-reporter
-- **Pyxis API**: https://pyxis.engineering.redhat.com/v1/
-- **Red Hat Registry**: https://registry.access.redhat.com
+## References
+
+- **Repository**: [container-grade-reporter](https://gitlab.cee.redhat.com/istio/servicemesh-qe/container-grade-reporter)
+- **Pyxis API**: [https://pyxis.engineering.redhat.com/v1/](https://pyxis.engineering.redhat.com/v1/)
+- **Red Hat Registry**: [https://registry.access.redhat.com](https://registry.access.redhat.com)

58-58: Add language specifiers to code blocks.

Numerous code blocks lack language specifiers (e.g., bash`, json, ``python), which improves syntax highlighting and readability. For example, lines 58, 88, 171, etc. Use the appropriate language identifier for each block.

Also applies to: 88-88, 171-171, 309-309, 322-322, 333-333, 344-344, 354-354, 365-365


88-88: Use markdown headings instead of emphasis for section markers.

Lines like 88, 171, 309, etc. use emphasis (e.g., **Alternative: ...**) where proper markdown headings (###) would be more semantic and improve document structure.

Also applies to: 171-171, 309-309, 322-322, 333-333, 344-344, 354-354, 365-365

plugins/security/README.md (3)

94-94: Wrap bare URLs in markdown link format.

Lines 94, 468, 471 contain bare URLs. Format as markdown links for better rendering:

-1. **Container Grade Reporter Tool**
-   - Clone from: https://gitlab.cee.redhat.com/istio/servicemesh-qe/container-grade-reporter
+1. **Container Grade Reporter Tool**
+   - Clone from: [container-grade-reporter](https://gitlab.cee.redhat.com/istio/servicemesh-qe/container-grade-reporter)

Also applies to: 468-468, 471-471


25-25: Specify language for code blocks.

Multiple code blocks lack language specifiers (bash, yaml, json, python). Add appropriate identifiers for improved syntax highlighting and readability throughout the document.

Also applies to: 51-51, 72-72, 305-305, 311-311, 326-326, 337-337, 349-349, 360-360, 371-371


109-109: Use markdown headings instead of bold emphasis for subsection markers.

Lines 109-134 use bold emphasis (e.g., **Step 1: Install...**) where proper markdown heading syntax (e.g., #### Step 1: Install...) would be more semantic and improve structure.

Also applies to: 119-119, 127-127, 134-134

plugins/security/commands/set-image-grade-tool-path.md (1)

12-12: Add language specifiers to code blocks.

Code blocks at lines 12, 64, 78, 83, and 88 should include language identifiers (bash, json, etc.) for improved syntax highlighting.

Also applies to: 64-64, 78-78, 83-83, 88-88

plugins/security/commands/image-grades.md (3)

12-12: Specify language for code blocks throughout.

Many code blocks lack language identifiers (bash, yaml, json, etc.). Adding these improves syntax highlighting and readability for better documentation quality.

Also applies to: 179-179, 211-211, 227-227, 247-247, 267-267, 289-289, 294-294, 299-299, 305-305, 310-310, 315-315, 320-320, 325-325, 330-330, 390-390, 396-396, 410-410, 422-422, 436-436, 450-450, 460-460, 471-471, 482-482


171-172: Fix unordered list indentation.

Lines 171-172 have incorrect indentation for the "Only when" and "When" list items within the nested structure. Ensure consistent 0-space indentation for top-level list items or proper nesting if they're intended as sub-items.


343-343: Minor grammar refinement.

Line 343 uses "grades is a comma-separated list" which should be "grades are a comma-separated list" (plural subject-verb agreement). This is minor but improves clarity.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between cc69412 and aae0bb9.

📒 Files selected for processing (8)
  • .claude-plugin/marketplace.json (1 hunks)
  • PLUGINS.md (2 hunks)
  • docs/data.json (1 hunks)
  • plugins/security/.claude-plugin/plugin.json (1 hunks)
  • plugins/security/README.md (1 hunks)
  • plugins/security/commands/image-grades.md (1 hunks)
  • plugins/security/commands/set-image-grade-tool-path.md (1 hunks)
  • plugins/security/skills/container-grade-reporter/SKILL.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
plugins/security/commands/set-image-grade-tool-path.md

[uncategorized] ~110-~110: The preposition ‘as’ seems more likely in this position.
Context: ... - The configuration is stored per-user in ~/.config/ai-helpers/ - Paths are sto...

(AI_HYDRA_LEO_REPLACE_IN_AS)

plugins/security/README.md

[uncategorized] ~172-~172: Loose punctuation mark.
Context: ... Configuration Fields: - releases: Top-level container for release definit...

(UNLIKELY_OPENING_PUNCTUATION)


[grammar] ~377-~377: The word “fallback” is a noun. The verb is spelled with a space.
Context: ...use available Python 3.x (Makefile will fallback automatically) ## Skills Reference ##...

(NOUN_VERB_CONFUSION)

plugins/security/commands/image-grades.md

[uncategorized] ~27-~27: Possible missing comma found.
Context: ...mmand uses the container-grade-reporter tool which must be installed and configured ...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~165-~165: It seems likely that a singular genitive (’s) apostrophe is missing.
Context: ...confirmation message - Include email recipients and subject - Note that HTML report ...

(AI_HYDRA_LEO_APOSTROPHE_S_XS)


[grammar] ~343-~343: Possible agreement error. You should probably use: “are”.
Context: ...Format: --grade <grades> where grades is a comma-separated list - Valid grades...

(AGREEMENT_SENT_START)

plugins/security/skills/container-grade-reporter/SKILL.md

[uncategorized] ~149-~149: Loose punctuation mark.
Context: ... Configuration fields: - releases: Top-level container for release definit...

(UNLIKELY_OPENING_PUNCTUATION)


[typographical] ~207-~207: If specifying a range, consider using an en dash instead of a hyphen.
Context: ...yxis API for each repository. Expect: - 1-2 seconds per repository - 30-60 seconds ...

(HYPHEN_TO_EN)


[typographical] ~208-~208: If specifying a range, consider using an en dash instead of a hyphen.
Context: ... Expect: - 1-2 seconds per repository - 30-60 seconds for 20-30 repositories - Progre...

(HYPHEN_TO_EN)


[typographical] ~208-~208: If specifying a range, consider using an en dash instead of a hyphen.
Context: ...onds per repository - 30-60 seconds for 20-30 repositories - Progress is shown in rea...

(HYPHEN_TO_EN)


[grammar] ~341-~341: The word “fallback” is a noun. The verb is spelled with a space.
Context: ...efile use available Python 3.x (it will fallback automatically) - Check Python version: ...

(NOUN_VERB_CONFUSION)


[grammar] ~352-~352: The word ‘install’ is not a noun.
Context: ...nstallation: make install - Or manual install: pip install -r requirements.txt **5...

(A_INSTALL)

🪛 markdownlint-cli2 (0.18.1)
plugins/security/commands/set-image-grade-tool-path.md

12-12: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


64-64: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


78-78: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


83-83: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


88-88: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

plugins/security/README.md

25-25: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


51-51: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


72-72: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


94-94: Bare URL used

(MD034, no-bare-urls)


109-109: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


119-119: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


127-127: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


134-134: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


305-305: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


311-311: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


326-326: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


337-337: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


349-349: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


360-360: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


371-371: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


468-468: Bare URL used

(MD034, no-bare-urls)


471-471: Bare URL used

(MD034, no-bare-urls)

plugins/security/commands/image-grades.md

12-12: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


171-171: Unordered list indentation
Expected: 0; Actual: 3

(MD007, ul-indent)


172-172: Unordered list indentation
Expected: 0; Actual: 3

(MD007, ul-indent)


179-179: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


211-211: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


227-227: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


247-247: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


267-267: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


289-289: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


294-294: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


299-299: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


305-305: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


310-310: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


315-315: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


320-320: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


325-325: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


330-330: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


390-390: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


396-396: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


410-410: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


422-422: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


436-436: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


450-450: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


460-460: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


471-471: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


482-482: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

plugins/security/skills/container-grade-reporter/SKILL.md

58-58: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


88-88: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


309-309: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


311-311: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


322-322: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


324-324: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


333-333: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


335-335: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


344-344: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


346-346: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


354-354: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


356-356: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


365-365: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


367-367: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


478-478: Bare URL used

(MD034, no-bare-urls)


479-479: Bare URL used

(MD034, no-bare-urls)


480-480: Bare URL used

(MD034, no-bare-urls)

🔇 Additional comments (4)
plugins/security/.claude-plugin/plugin.json (1)

1-8: Plugin descriptor structure looks good.

The JSON structure is valid and properly formatted. The metadata aligns with marketplace registration and data files.

PLUGINS.md (1)

17-17: Plugin entry and TOC link are well-formed.

The Security Plugin section follows the established pattern for other plugin entries. The table of contents link is properly placed in alphabetical order, and the command documentation is comprehensive.

Also applies to: 167-175

.claude-plugin/marketplace.json (1)

42-46: Marketplace entry is properly formatted and positioned.

The security plugin entry is well-structured, description is appropriate for marketplace context, and the source path is correct. JSON formatting is valid.

docs/data.json (1)

286-312: Plugin data entry is well-structured and consistent.

The security plugin entry in docs/data.json has proper formatting, correct command metadata matching the command documentation files, appropriate skill references, and version consistency with other plugin manifests. Structure follows the established pattern.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (4)
plugins/security/skills/container-grade-reporter/SKILL.md (1)

57-69: Add language specification to fenced code blocks (Markdown style).

Multiple fenced code blocks throughout the file lack language identifiers. Update blocks to specify language for syntax highlighting and linting compliance.

Example fixes:

 **Repository structure:**
-```
+```

For blocks with content, specify appropriate language:

  • Use bash for shell commands
  • Use json for JSON structures
  • Use yaml for YAML content
  • Use python for Python code

This addresses markdownlint MD040 violations on lines 58, 311, 324, 335, 346, 356, 367.

plugins/security/commands/set-image-grade-tool-path.md (1)

25-25: Add language specification to fenced code blocks (Markdown style).

Three fenced code blocks lack language identifiers (lines 25, 51, 72). Apply language tags for linting compliance:

  • Line 25: bash (shell command)
  • Line 51: json (JSON structure)
  • Line 72: bash (shell command)

This addresses markdownlint MD040 violations.

Also applies to: 51-51, 72-72

plugins/security/commands/image-grades.md (2)

171-172: Fix list indentation for unordered list items.

Lines 171-172 have incorrect indentation (3 spaces instead of 0) for unordered list continuation. This causes a markdown linting error (MD007).

Apply this diff to align bullets properly:

-   **When `--email` is NOT specified:**
-   - Filter JSON data to only include entries where `grade` matches the filter
+- **When `--email` is NOT specified:**
+  - Filter JSON data to only include entries where `grade` matches the filter

12-12: Add language specification to fenced code blocks (Markdown style).

Fifteen fenced code blocks lack language identifiers, causing markdownlint MD040 violations. Apply language tags:

  • Lines with bash commands: use bash
  • Lines with JSON structures: use json
  • Lines with YAML: use yaml
  • Lines with error messages: typically leave blank or use text

Example:

-```
+```bash

This improves syntax highlighting and maintains code style consistency across the documentation suite.

Also applies to: 179-179, 211-211, 227-227, 247-247, 267-267, 390-390, 396-396, 410-410, 422-422, 436-436, 450-450, 460-460, 471-471, 482-482

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between aae0bb9 and b941d2a.

📒 Files selected for processing (4)
  • plugins/security/README.md (1 hunks)
  • plugins/security/commands/image-grades.md (1 hunks)
  • plugins/security/commands/set-image-grade-tool-path.md (1 hunks)
  • plugins/security/skills/container-grade-reporter/SKILL.md (1 hunks)
🧰 Additional context used
🪛 markdownlint-cli2 (0.18.1)
plugins/security/commands/image-grades.md

12-12: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


171-171: Unordered list indentation
Expected: 0; Actual: 3

(MD007, ul-indent)


172-172: Unordered list indentation
Expected: 0; Actual: 3

(MD007, ul-indent)


179-179: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


211-211: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


227-227: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


247-247: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


267-267: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


390-390: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


396-396: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


410-410: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


422-422: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


436-436: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


450-450: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


460-460: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


471-471: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


482-482: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

plugins/security/skills/container-grade-reporter/SKILL.md

58-58: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


311-311: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


324-324: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


335-335: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


346-346: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


356-356: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


367-367: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

plugins/security/commands/set-image-grade-tool-path.md

25-25: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


51-51: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


72-72: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🔇 Additional comments (5)
plugins/security/README.md (1)

18-87: Commands documentation is clear and well-structured.

The /security:image-grades and /security:set-image-grade-tool-path command documentation correctly represents the intended API with proper argument hints and examples. Email functionality is properly documented with references to make email and make email-grade targets (lines 65, 420).

plugins/security/skills/container-grade-reporter/SKILL.md (1)

172-202: Email Makefile targets are correctly documented.

The skill properly documents the email functionality with both make email and make email-grade GRADES=... targets, aligned with the PR's security plugin email fix. The explanation of Makefile automation (lines 193-202) is clear and accurate.

plugins/security/commands/set-image-grade-tool-path.md (1)

1-114: Command documentation is complete and accurate.

The security:set-image-grade-tool-path command documentation correctly reflects the renamed command (from /security:set-tool-path per PR objectives). Implementation steps, error handling, and examples are clear and comprehensive. Argument hints are properly formatted.

plugins/security/commands/image-grades.md (2)

1-4: Argument hints correctly include new optional flags.

The front-matter argument hint [--grade <grades>] [--email] on line 3 correctly represents the command's optional arguments, aligning with the PR's documentation update objectives.


59-121: Email Makefile targets are properly integrated into implementation.

The implementation correctly specifies:

  • Line 74: make email CONFIG=<path> for email reports
  • Line 80: make email-grade GRADES='...' CONFIG=<path> for filtered email reports

Both paths (with and without --email flag) are clearly documented, and grade filtering logic is properly explained for both scenarios. This accurately reflects the security plugin's email functionality fixes.

@rafaelvzago
Copy link
Author

@coderabbitai review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 11, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (1)
plugins/security/README.md (1)

25-25: Add language identifiers to all fenced code blocks.

Multiple code blocks lack language specifications, which triggers markdown linting errors (MD040). Specify appropriate languages for clarity and proper syntax highlighting:

  • Lines 25–27, 51–53: Use bash (command invocations)
  • Lines 72–87: Use text or output (sample report output)
  • Lines 150–168: Use yaml (YAML configuration file)
  • Lines 306–309, 313–317: Use text or output (architecture examples)
  • Lines 328–330, 340–342, 353–355, 365–367, 377–379: Use text (error messages)

Note: Line 30–39 already demonstrates the correct pattern with ```bash.

Apply this diff to add language identifiers (showing a few examples):

-```
+```bash
 /security:set-image-grade-tool-path <path>
-```
+```

---

-```
+```bash
 /security:image-grades <config.yaml>
-```
+```

---

-```
+```yaml
 releases:
   "OSSM 3.1":
     components:
-```
+```

Also applies to: 51-51, 72-72, 150-150, 306-306, 313-313, 328-328, 340-340, 353-353, 365-365, 377-377

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between e725027 and b71eb68.

📒 Files selected for processing (1)
  • plugins/security/README.md (1 hunks)
🧰 Additional context used
🪛 markdownlint-cli2 (0.18.1)
plugins/security/README.md

25-25: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


51-51: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


72-72: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


306-306: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


313-313: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


328-328: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


340-340: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


353-353: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


365-365: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


377-377: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🔇 Additional comments (1)
plugins/security/README.md (1)

1-11: Good catch on the past formatting issue—now fixed!

The extra dash on line 11 has been corrected. The bullet point now reads properly as - **Multi-architecture support** instead of the malformed - - **Multi-architecture support**.

@rafaelvzago
Copy link
Author

@coderabbitai review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 11, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 064a8b5 and d9e4dbb.

📒 Files selected for processing (1)
  • docs/data.json (1 hunks)

@rafaelvzago
Copy link
Author

@coderabbitai review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 11, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@rafaelvzago rafaelvzago force-pushed the fix/security-email-make-targets branch from 2aa9e60 to 1d9ed02 Compare November 11, 2025 18:47
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (1)
plugins/security/README.md (1)

94-95: Document the Red Hat internal access requirement more prominently.

The container-grade-reporter tool requires Red Hat internal network access and GitLab CEE authentication. While this is mentioned in the prerequisites, consider adding a prominent note at the beginning of the README (after the Overview section) to set clear expectations for external contributors.

As noted in the PR comments, this dependency may limit accessibility for non-Red Hat contributors. The team should evaluate whether porting the tool to GitHub (as suggested by the author) would better align with the open nature of the ai-helpers repository.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 2aa9e60 and 1d9ed02.

📒 Files selected for processing (9)
  • .claude-plugin/marketplace.json (1 hunks)
  • PLUGINS.md (2 hunks)
  • docs/data.json (1 hunks)
  • plugins/security/.claude-plugin/plugin.json (1 hunks)
  • plugins/security/README.md (1 hunks)
  • plugins/security/commands/image-grades.md (1 hunks)
  • plugins/security/commands/set-image-grade-tool-path.md (1 hunks)
  • plugins/security/skills/container-grade-reporter/SKILL.md (1 hunks)
  • scripts/build-website.py (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (5)
  • plugins/security/.claude-plugin/plugin.json
  • .claude-plugin/marketplace.json
  • plugins/security/commands/set-image-grade-tool-path.md
  • plugins/security/commands/image-grades.md
  • plugins/security/skills/container-grade-reporter/SKILL.md
🔇 Additional comments (3)
scripts/build-website.py (1)

28-29: LGTM! Synopsis extraction bug fixed.

The regex now correctly skips the optional language identifier after the code fence and captures the actual synopsis line. This resolves the issue where "text" placeholders appeared in docs/data.json instead of proper command synopses.

docs/data.json (1)

300-301: Verify the synopsis values were correctly regenerated.

The synopsis fields now contain proper command syntax instead of "text" placeholders, confirming the build script fix worked correctly:

  • Line 300: /security:image-grades <config.yaml> [--grade <grades>] [--email]
  • Line 306: /security:set-image-grade-tool-path <path>

Also applies to: 306-307

plugins/security/README.md (1)

413-424: <!-- [scratchpad_start]
[task: verification_of_make_targets_3/3 COMPLETE]
[observations]

  • Root Makefile contains only 32 lines
  • Only 4 phony targets: help, lint, lint-pull, update
  • NO targets found for: run-output, dry-run-email, run-grade
  • Documented targets appear only in:
    • plugins/security/README.md (under review)
    • plugins/security/commands/image-grades.md
    • plugins/security/skills/container-grade-reporter/SKILL.md
  • PR context: container-grade-reporter integration (external tool)
  • Git history shows commits for markdown/linting fixes, not Makefile changes

[analysis]

  • The documented Make targets (run-output, dry-run-email, run-grade) are NOT in the ai-helpers repository Makefile
  • They are targets from the EXTERNAL container-grade-reporter tool
  • The README.md is documenting how to use an external integrated tool, not internal Makefile targets
  • The review comment assumes these are internal targets that need verification against internal Makefile
  • This is a contextual misunderstanding in the original review

[conclusion]

  • Original review comment is based on incorrect assumption that documented targets are internal to ai-helpers
  • The documentation correctly shows external tool usage
  • No verification against internal Makefile is applicable
  • Recommend:

The documented Make targets are from the external container-grade-reporter tool, not from this repository's Makefile.

The root Makefile contains only 4 targets: help, lint, lint-pull, and update. The documented targets (run-output, dry-run-email, run-grade) do not exist in this repository and are not intended to. They are targets from the external container-grade-reporter tool being integrated and documented by the Claude plugin. The README.md snippet correctly documents external tool usage for container-grade-reporter integration, not internal build targets. No mismatch exists—the documentation is accurate for its purpose.

Likely an incorrect or invalid review comment.

Copy link
Author

@rafaelvzago rafaelvzago left a comment

Choose a reason for hiding this comment

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

Changes addressed.

@stbenjam
Copy link
Member

/ok-to-test

@openshift-ci openshift-ci bot added ok-to-test Indicates a non-member PR verified by an org member that is safe to test. and removed needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels Nov 12, 2025
Add security plugin that integrates with container-grade-reporter tool
to provide vulnerability grade assessment for Red Hat container images.

Features:
- /security:image-grades: Generate CVE vulnerability grade reports
- /security:set-image-grade-tool-path: Configure tool location
- Multi-architecture support (amd64, arm64, ppc64le, s390x)
- Grade filtering and email reporting capabilities
- Integration with Red Hat Pyxis API via Kerberos authentication

New files:
- plugins/security/commands/image-grades.md
- plugins/security/commands/set-image-grade-tool-path.md
- plugins/security/skills/container-grade-reporter/SKILL.md
- plugins/security/README.md
- plugins/security/.claude-plugin/plugin.json

Bug fixes:
- Fix synopsis extraction regex in build-website.py

Assisted-by: Claude
@rafaelvzago rafaelvzago force-pushed the fix/security-email-make-targets branch from 6ca2f99 to 4e947a1 Compare November 12, 2025 13:29
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 1d9ed02 and 4e947a1.

📒 Files selected for processing (9)
  • .claude-plugin/marketplace.json (1 hunks)
  • PLUGINS.md (2 hunks)
  • docs/data.json (1 hunks)
  • plugins/security/.claude-plugin/plugin.json (1 hunks)
  • plugins/security/README.md (1 hunks)
  • plugins/security/commands/image-grades.md (1 hunks)
  • plugins/security/commands/set-image-grade-tool-path.md (1 hunks)
  • plugins/security/skills/container-grade-reporter/SKILL.md (1 hunks)
  • scripts/build-website.py (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (7)
  • plugins/security/.claude-plugin/plugin.json
  • plugins/security/skills/container-grade-reporter/SKILL.md
  • scripts/build-website.py
  • .claude-plugin/marketplace.json
  • PLUGINS.md
  • docs/data.json
  • plugins/security/commands/image-grades.md
🔇 Additional comments (12)
plugins/security/README.md (6)

11-16: ✅ Markdown formatting is now correct.

The previous issue with the extra dash on line 11 has been properly fixed. The bullet points now display correctly as a standard list.


146-180: YAML configuration format is clear and well-documented.

The configuration section (lines 146–180) provides excellent guidance with clear field definitions, examples for OSSM releases, and tag filtering rules. The structure is logical and the examples are practical.


283-300: Grade interpretation table is helpful and actionable.

The A–F grading scale table and recommendations by grade (lines 283–300) are well-structured, use clear indicators (✅/⚠️/❌), and provide actionable guidance for different risk levels.


326-376: Troubleshooting section is thorough.

The troubleshooting section covers common error scenarios (Tool Not Found, Authentication Failure, Network Issues, Invalid YAML, Python Version) with clear solutions. Well-organized and helpful for users.


22-22: Command names are consistent across all documentation files.

The verification confirms that command references in the README match the documentation file names and internal headers with appropriate context-based formatting. No inconsistencies exist between /security:image-grades, image-grades.md, and the header security:image-grades—these are the same command in different contexts.


67-67: Review comment is incorrect.

The README documentation at line 67 and line 419 correctly documents the external container-grade-reporter tool's Makefile targets, not targets from this repository. The context shows cd ~/Code/container-grade-reporter before listing make run-output, make dry-run-email, and make run-grade. These are targets from the external tool, not the current repository's Makefile.

The root Makefile contains only: help, lint, lint-pull, and update. The targets mentioned in the review (make email and make email-grade) do not exist in this repository's Makefile and are not documented in the README. The README is accurately documenting external tool usage.

Likely an incorrect or invalid review comment.

plugins/security/commands/set-image-grade-tool-path.md (6)

1-4: ✅ Metadata format is correct.

The YAML frontmatter with description, argument-hint, and comment attribution is properly formatted and provides good context for the command.


30-60: Implementation steps are clear and actionable.

The five implementation steps (lines 30–60) are well-structured:

  1. Input validation with clear error conditions
  2. Tool verification with specific file checks
  3. Configuration directory setup with permissions
  4. Configuration persistence as JSON
  5. Success confirmation

Each step includes concrete details (file paths, error messages, expected outputs). This provides excellent guidance for implementation.


61-75: Return value and example output are clear.

The return value format (lines 61–75) clearly describes what the command outputs and provides a realistic example showing:

  • Success confirmation
  • Configured path display
  • Next steps guidance

This is user-friendly and helps users understand what to do after configuration.


77-99: Examples and arguments are well-documented.

The three examples (lines 77–92) cover practical use cases (tilde expansion, absolute paths, workspace-relative paths), and the Arguments section (lines 94–99) clearly specifies the required parameter with format guidance.


101-115: Error handling and notes are comprehensive.

The error handling section (lines 101–108) lists common errors with clear, helpful messages, and the Notes section (lines 110–115) properly documents:

  • Per-user configuration storage
  • Absolute path normalization
  • Configuration overwriting on re-run
  • Fallback behavior for missing config

20-28: No issues found—description matches README implementation.

The verification confirms that the command description (lines 20–28) and README.md both consistently reference the config file at ~/.config/ai-helpers/security-config.json. The documentation is aligned and accurate.

…cumentation

Assisted-by: Claude Code <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ok-to-test Indicates a non-member PR verified by an org member that is safe to test.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants