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 with 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 for the Security plugin and the container-grade-reporter tool.
  • Chores

    • Duplicate plugin documentation entries were introduced in published indexes and should be cleaned up.

@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

Walkthrough

Adds a new public "security" plugin (descriptor, README, two command docs, and a container-grade-reporter skill), registers it in marketplace and docs manifests (duplicate entries introduced in docs/data.json and PLUGINS.md), and relaxes the website build script's synopsis extraction to accept an optional language tag.

Changes

Cohort / File(s) Summary
Marketplace manifest
\.claude-plugin/marketplace.json
Inserted a security plugin entry (source: ./plugins/security, description for CVE analysis and container image vulnerability scanning) before the existing sosreport entry.
Documentation manifest
docs/data.json
Added a security plugin object (version 0.1.0, two commands image-grades and set-image-grade-tool-path, a container-grade-reporter skill, has_readme: true); the plugin object appears twice (duplicate entries).
Top-level plugin index
PLUGINS.md
Added a Security Plugin documentation block (description, commands, link to plugins/security/README.md) — the block was inserted in two places, creating a duplicate section.
Plugin descriptor
plugins/security/.claude-plugin/plugin.json
New Claude plugin descriptor: name security, description for container vulnerability grade reporting, version 0.1.0, author metadata.
Plugin README
plugins/security/README.md
New README documenting purpose, capabilities, installation, configuration, usage, examples, auth, troubleshooting, outputs, contributing, and licensing.
Command docs
plugins/security/commands/image-grades.md, plugins/security/commands/set-image-grade-tool-path.md
Added detailed command documentation for security:image-grades (config, execution modes, outputs, examples, errors) and security:set-image-grade-tool-path (validation, config persistence, examples, errors).
Skill guide
plugins/security/skills/container-grade-reporter/SKILL.md
New integration guide for the container-grade-reporter skill: prerequisites, YAML schema, workflows, JSON output, error handling, testing, and advanced usage.
Build script tweak
scripts/build-website.py
Updated extract_synopsis to accept an optional language tag immediately after triple backticks and to capture the next non-empty line as the synopsis; behavior otherwise unchanged.

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 Result Parser
    participant Mailer as SMTP (optional)

    Note right of CLI `#f0f7ff`: Invoke image-grades
    User->>CLI: /security:image-grades <config.yaml> [--grade] [--email]
    CLI->>Config: validate and parse YAML
    alt invalid config
        Config-->>CLI: validation error
        CLI-->>User: error
    else valid
        CLI->>Finder: locate container-grade-reporter (user config / PATH / workspace)
        alt not found
            Finder-->>CLI: tool not found
            CLI-->>User: error
        else found
            CLI->>Reporter: run with config
            Reporter-->>CLI: JSON results
            alt --email used
                CLI->>Mailer: send formatted report
                Mailer-->>CLI: delivery status
                CLI-->>User: email result
            else
                CLI->>Parser: filter/apply --grade and format
                Parser-->>CLI: report output
                CLI-->>User: display report
            end
        end
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Attention areas:
    • docs/data.json — remove duplicate plugin object and verify ordering/consistency.
    • PLUGINS.md — consolidate duplicate Security Plugin blocks.
    • Cross-file consistency — confirm name, version, command names/synopses/argument hints match across docs/data.json, plugins/security/.claude-plugin/plugin.json, and the command docs.
    • scripts/build-website.py — validate the updated regex handles cases with and without language tags and that synopsis extraction remains correct for existing 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 summarizes the main changes: fixing email make targets in the security plugin and updating generated 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 PR files found no references to real people names in plugin commands, skills documentation, examples, or style references.
No Assumed Git Remote Names ✅ Passed Comprehensive search of all PR files found no hardcoded git remote names like 'origin' or 'upstream' in any documentation, configuration, or code files.
Git Push Safety Rules ✅ Passed Pull request contains only documentation and configuration updates with no git push commands or autonomous push workflows.
No Untrusted Mcp Servers ✅ Passed The PR adds security plugin documentation and configuration without introducing any MCP server installations or untrusted package dependencies.
✨ 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 76ecb2e and 3d30499.

📒 Files selected for processing (1)
  • docs/data.json (1 hunks)
🔇 Additional comments (3)
docs/data.json (3)

308-320: Security plugin commands look well-defined.

The image-grades and set-image-grade-tool-path commands have clear synopses, argument hints, and descriptions aligned with the PR objectives (corrected command names and updated arguments).


322-328: Container-grade-reporter skill documentation is appropriate.

The skill provides clear integration guidance for the container-grade-reporter tool referenced by the image-grades command.


304-331: No issues found: the original review comment flags a problem that doesn't exist.

The verification confirms there are no duplicate security plugin entries in docs/data.json. The security plugin appears exactly once in the plugins array, and the JSON structure is valid. The original review comment is incorrect and can be safely disregarded.

Likely an incorrect or invalid review comment.


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.

@rafaelvzago
Copy link
Author

@stbenjam please let me know if there is anything that I can do to get it approved.

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