Skip to content

OAPE-877: Standardize AGENTS.md and agent harness docs for ESO - #171

Open
bharath-b-rh wants to merge 2 commits into
openshift:mainfrom
bharath-b-rh:oape-877
Open

OAPE-877: Standardize AGENTS.md and agent harness docs for ESO#171
bharath-b-rh wants to merge 2 commits into
openshift:mainfrom
bharath-b-rh:oape-877

Conversation

@bharath-b-rh

@bharath-b-rh bharath-b-rh commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Description

What changed?

  • Added agentic component docs (AGENTS.md, ai-docs/) for ESO architecture, domain CRs, ADRs, and development/testing workflows.
  • Added domain guidelines (docs/*-guidelines.md), CLAUDE.md, contributor/security docs, GitHub PR/issue templates, and CodeRabbit config wired to those guidelines.
  • Reworked README.md to point at the new docs layout.

Why?

Standardize ESO agent/harness documentation so AI-assisted and human contributors share one entry point (AGENTS.md) with clear split between enforceable guidelines (docs/) and deeper component docs (ai-docs/), aligned with OpenShift agentic-docs conventions.

How?

  • Generated lean component docs via agentic-docs /component-docs as the spine.
  • Merged selected agent-readiness outputs (guidelines, CLAUDE.md, README/CONTRIBUTING/SECURITY, CodeRabbit, GitHub templates) without duplicating architecture into a second system.
  • AGENTS.md indexes both docs/ and ai-docs/; API/design changes in CONTRIBUTING.md point at openshift/enhancements/.../external-secrets-operator.

Type of Change

  • Bug fix
  • New feature
  • CRD / API change
  • Refactoring (no functional change)
  • Documentation
  • CI / build

Checklist

  • make verify passes (generated files up to date, deps consistent, no lint errors)
  • make test passes (unit + API integration tests)
  • make lint passes
  • New/changed CRD fields have CEL validation rules and .testsuite.yaml test cases
  • New managed resources added to controllerManagedResources and HasObjectChanged
  • No hand-edits to generated files (bindata.go, zz_generated.deepcopy.go, CRD YAML, fakes)
  • Error paths use the correct error type (IrrecoverableError / RetryRequiredError / UserConfigurationError)

Testing

Docs-only change. No runtime/code behavior changes. Spot-checked links and doc structure; make verify / make test / make lint N/A or unchanged for functional code.

Additional Context

Summary by CodeRabbit

  • Documentation
    • Expanded architecture, development, testing, API, integration, performance, security, configuration, and operations guidance.
    • Added architecture decision records, ecosystem references, and operational documentation.
  • Contributor Experience
    • Added issue and pull request templates, contribution standards, and development checklists.
  • Security
    • Added vulnerability reporting guidance and security best practices.
  • Chores
    • Added automated Markdown linting to verification workflows.

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Pipeline controller notification
This repo is configured to use the pipeline controller. Second-stage tests will be triggered either automatically or after lgtm label is added, depending on the repository configuration. The pipeline controller will automatically detect which contexts are required and will utilize /test Prow commands to trigger the second stage.

For optional jobs, comment /test ? to see a list of all defined jobs. To trigger manually all jobs from second stage use /pipeline required command.

This repository is configured in: LGTM mode

@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Aug 3, 2026
@openshift-ci-robot

openshift-ci-robot commented Aug 3, 2026

Copy link
Copy Markdown

@bharath-b-rh: This pull request references OAPE-877 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the task to target the "5.0.0" version, but no target version was set.

Details

In response to this:

Description

What changed?

  • Added agentic component docs (AGENTS.md, ai-docs/) for ESO architecture, domain CRs, ADRs, and development/testing workflows.
  • Added domain guidelines (docs/*-guidelines.md), CLAUDE.md, contributor/security docs, GitHub PR/issue templates, and CodeRabbit config wired to those guidelines.
  • Reworked README.md to point at the new docs layout.

Why?

Standardize ESO agent/harness documentation so AI-assisted and human contributors share one entry point (AGENTS.md) with clear split between enforceable guidelines (docs/) and deeper component docs (ai-docs/), aligned with OpenShift agentic-docs conventions.

How?

  • Generated lean component docs via agentic-docs /component-docs as the spine.
  • Merged selected agent-readiness outputs (guidelines, CLAUDE.md, README/CONTRIBUTING/SECURITY, CodeRabbit, GitHub templates) without duplicating architecture into a second system.
  • AGENTS.md indexes both docs/ and ai-docs/; API/design changes in CONTRIBUTING.md point at openshift/enhancements/.../external-secrets-operator.

Type of Change

  • Bug fix
  • New feature
  • CRD / API change
  • Refactoring (no functional change)
  • Documentation
  • CI / build

Checklist

  • make verify passes (generated files up to date, deps consistent, no lint errors)
  • make test passes (unit + API integration tests)
  • make lint passes
  • New/changed CRD fields have CEL validation rules and .testsuite.yaml test cases
  • New managed resources added to controllerManagedResources and HasObjectChanged
  • No hand-edits to generated files (bindata.go, zz_generated.deepcopy.go, CRD YAML, fakes)
  • Error paths use the correct error type (IrrecoverableError / RetryRequiredError / UserConfigurationError)

Testing

Docs-only change. No runtime/code behavior changes. Spot-checked links and doc structure; make verify / make test / make lint N/A or unchanged for functional code.

Additional Context

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 openshift-eng/jira-lifecycle-plugin repository.

@openshift-ci
openshift-ci Bot requested review from TrilokGeer and mytreya-rh August 3, 2026 05:53
@openshift-ci

openshift-ci Bot commented Aug 3, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: bharath-b-rh

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

The pull request process is described here

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

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

@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Aug 3, 2026
@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

This PR adds repository configuration, contributor templates, project guidance, architecture and domain documentation, testing and operational guidelines, security policy, decision records, and Markdown linting support for the External Secrets Operator.

Changes

Repository governance and contributor entry points

Layer / File(s) Summary
Governance and contributor entry points
.coderabbit.yaml, .github/*, AGENTS.md, CLAUDE.md, CONTRIBUTING.md, README.md, SECURITY.md
Adds review configuration, issue and pull request templates, contributor instructions, agent guidance, repository orientation, and vulnerability reporting procedures.

Development, testing, and domain documentation

Layer / File(s) Summary
Development and testing workflows
ai-docs/ESO_DEVELOPMENT.md, ai-docs/ESO_TESTING.md, docs/testing-guidelines.md, ai-docs/exec-plans/README.md
Documents build, verification, generation, API validation, unit testing, integration testing, E2E testing, CI behavior, and execution-plan workflows.
Architecture, API, and operational rules
ai-docs/architecture/*, ai-docs/domain/*, docs/*-guidelines.md
Documents controller architecture, custom resources, API contracts, error handling, integrations, performance rules, security controls, resource updates, caching, and reconciliation behavior.
Decision records and references
ai-docs/decisions/*, ai-docs/references/*
Adds ADRs for bindata manifests, update strategies, and network-policy naming, plus an ADR template and ecosystem and enhancement references.
Cache anti-pattern documentation
docs/anti-patterns/*
Updates unified-cache documentation, diagrams, examples, migration notes, and Markdown spacing.

Markdown linting workflow

Layer / File(s) Summary
Containerized Markdown linting
.markdownlint*, Makefile, hack/*markdownlint*, test/e2e/README.md
Adds Markdown lint configuration, containerized linting scripts, Makefile targets, verification integration, and syntax annotations for text code fences.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Suggested reviewers: trilokgeer, mytreya-rh

🚥 Pre-merge checks | ✅ 14 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (14 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately identifies the PR's primary documentation changes for AGENTS.md and agent harness guidance.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names ✅ Passed The PR changes no Go or Ginkgo test source; its only test-tree change is text fence formatting in test/e2e/README.md, so it adds no unstable test title.
Test Structure And Quality ✅ Passed The PR changes only documentation and Markdown linting; the sole test-related change is code-fence formatting in test/e2e/README.md, with no Ginkgo test code changed.
Microshift Test Compatibility ✅ Passed The aggregate diff adds no Ginkgo tests or Go test files; the only test-path change is syntax highlighting in test/e2e/README.md, so MicroShift compatibility checks do not apply.
Single Node Openshift (Sno) Test Compatibility ✅ Passed The PR adds no Ginkgo e2e tests or test code; it only changes test/e2e/README.md formatting, so no SNO compatibility assumption applies.
Topology-Aware Scheduling Compatibility ✅ Passed The PR changes only documentation, configuration, Makefile, and markdownlint tooling; no deployment manifests, operator/controllers, or scheduling fields were modified.
Ote Binary Stdout Contract ✅ Passed This PR modifies only documentation, configuration, and build tooling files. It does not change any Go test code, main binary code, or test suite setup that could write to stdout and violate the OT...
Ipv6 And Disconnected Network Test Compatibility ✅ Passed No new Ginkgo e2e tests were added; the only test-path change is Markdown fence formatting in test/e2e/README.md, so the compatibility check is not applicable.
No-Weak-Crypto ✅ Passed The PR adds only documentation and lint tooling; added-line scans found no MD5, SHA1, DES, RC4, 3DES, Blowfish, ECB, custom crypto, or secret comparisons.
Container-Privileges ✅ Passed Full PR diff has no privileged:true, hostPID/hostNetwork/hostIPC, SYS_ADMIN, or allowPrivilegeEscalation:true; the image uses USER 1000, and --user 0 has an explicit bind-mount justification.
No-Sensitive-Data-In-Logs ✅ Passed The PR adds no Go code or logging calls and no concrete secret values; its bug template explicitly requires redaction before posting resources or logs.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 11

Note

Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
ai-docs/exec-plans/README.md (1)

3-20: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Complete the execution-plan guide before exposing this index.

The document lists required topics, but it has no sections for them and ## Usage is empty. Contributors cannot learn when to create a plan, how to use it, or how to complete it. Add the missing guidance and a template link, or remove the placeholder entries until the guide exists.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ai-docs/exec-plans/README.md` around lines 3 - 20, Complete the
execution-plan guide in README by adding sections covering what exec-plans are,
when to create them, how to use them, the completion workflow, and a link to the
template; populate the existing Usage section rather than leaving it empty.
Ensure every topic listed in the document index has corresponding contributor
guidance before retaining the index.
🟡 Minor comments (18)
ai-docs/ESO_TESTING.md-18-24 (1)

18-24: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Describe make test correctly.

The Makefile target runs manifests, generate, fmt, vet, test-apis, and test-unit. It runs all non-E2E checks, not unit tests only.

Change the comment or direct unit-test users to make test-unit.

Proposed correction
-make test                    # All unit tests
+make test                    # All non-e2e tests
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ai-docs/ESO_TESTING.md` around lines 18 - 24, Update the `make test` entry in
the testing command list to describe that it runs all non-E2E checks, including
manifests, generate, fmt, vet, test-apis, and test-unit; reserve the “unit tests
only” description for `make test-unit`.
docs/testing-guidelines.md-5-10 (1)

5-10: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Match the table with executable commands.

The Makefile runs E2E tests from the test module with go test -C .../test, but the table shows go test -tags e2e ./e2e, which fails when copied from the repository root. The unit-test entry also shows escaped pipes (\|) instead of the Makefile regex separators.

Use copyable commands or describe the exclusions in words.

Proposed table corrections
-| `make test-unit` | `go test` excluding `test/(e2e\|apis\|utils)` | Standard Go tests |
+| `make test-unit` | Go tests excluding E2E, API, and utility packages | Standard Go tests |
-| `make test-e2e` | `go test -tags e2e ./e2e` | Requires live cluster |
+| `make test-e2e` | `go test -C test -tags e2e ./e2e` | Requires live cluster |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/testing-guidelines.md` around lines 5 - 10, Update the testing command
table so each command matches the Makefile and can be copied from the repository
root: correct the make test-e2e invocation to use the test module’s working
directory via go test -C, and replace the escaped pipe characters in the make
test-unit exclusion pattern with the actual Makefile syntax or describe those
exclusions in words.
ai-docs/domain/external-secrets-config.md-64-67 (1)

64-67: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

State the enabled condition for Bitwarden TLS validation.

The document defines certManager.mode as Enabled or Disabled, but says only that cert-manager is “configured.” A certProvider object with mode: Disabled must not satisfy the Bitwarden requirement. State the rule as secretRef or certManager.mode == Enabled.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ai-docs/domain/external-secrets-config.md` around lines 64 - 67, Update the
CEL Validation statement for Bitwarden TLS to explicitly require either
secretRef or certManager.mode == Enabled, rather than treating any configured
cert-manager object as sufficient.
ai-docs/decisions/adr-template.md-20-35 (1)

20-35: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add blank lines after subsection headings.

markdownlint-cli2 reports MD022 for Positive, Negative, Neutral, and Alternative 1. Insert one blank line after each heading.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ai-docs/decisions/adr-template.md` around lines 20 - 35, Insert one blank
line after each subsection heading in the ADR template: “Positive,” “Negative,”
“Neutral,” and “Alternative 1,” before their associated content.

Source: Linters/SAST tools

docs/api-contracts-guidelines.md-20-28 (1)

20-28: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use one error-matching contract for API tests.

Line 28 requires the exact error message, while line 177 requires an exact error substring. Choose one rule for all tests. Prefer stable substrings unless tests intentionally pin full API-server wording.

Also applies to: 175-177

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/api-contracts-guidelines.md` around lines 20 - 28, Unify the API test
error-matching guidance in the Field Immutability section and the corresponding
onUpdate guidance around one contract: prefer asserting a stable error
substring, reserving exact full-message matching for tests intentionally pinning
API-server wording. Update the requirement for the exact error message and the
guidance near onUpdate tests so they use the same rule.
ai-docs/architecture/components.md-56-60 (1)

56-60: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Show deletion as a terminal branch.

The sequence places Add finalizer after Handle deletion, which suggests that a deleted resource receives a finalizer and continues normal reconciliation. Show deletion as cleanup → remove finalizer → return; show the add-finalizer path only for non-deleted resources.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ai-docs/architecture/components.md` around lines 56 - 60, Update the
“Reconciliation Flow” diagram to make deletion a terminal branch: show deleted
resources proceeding through cleanup and finalizer removal, then returning; show
“Add finalizer → Fetch ESM → processReconcileRequest” only on the non-deleted
path.
ai-docs/domain/external-secrets-manager.md-44-45 (1)

44-45: 🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

Document RBAC ownership and the user-managed binding.

The operator reconciles external-secrets-controller and its ClusterRoleBinding for the external-secrets ServiceAccount in the external-secrets namespace. That managed role does not grant write access to generic targets. State that users must create a separate Role or ClusterRole and bind it to this ServiceAccount. Warn users not to edit the managed role because reconciliation restores its rules.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ai-docs/domain/external-secrets-manager.md` around lines 44 - 45, Update the
UnsafeAllowGenericTargets documentation to explain that the operator manages the
external-secrets-controller and its ClusterRoleBinding for the external-secrets
ServiceAccount in the external-secrets namespace, but the managed role does not
grant generic-target write access. Instruct users to create a separate Role or
ClusterRole and bind it to that ServiceAccount, and warn them not to edit the
managed role because reconciliation restores its rules.
ai-docs/decisions/adr-0002-update-with-retry-over-ssa.md-24-24 (1)

24-24: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add blank lines after ADR subsection headings.

Add one blank line after ### Positive, ### Negative, ### Neutral, and ### Server-Side Apply. markdownlint reports MD022.

As per coding guidelines, **/* requires make verify before submission, and the gate checks formatting.

Also applies to: 29-29, 33-33, 38-38

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ai-docs/decisions/adr-0002-update-with-retry-over-ssa.md` at line 24, Add one
blank line immediately after each ADR subsection heading: “Positive,”
“Negative,” “Neutral,” and “Server-Side Apply,” ensuring the following content
starts on the next separated paragraph to satisfy markdownlint MD022.

Sources: Coding guidelines, Linters/SAST tools

docs/security-guidelines.md-47-54 (1)

47-54: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix blank lines around the security-context code fence.

Add a blank line before Line 47 and after Line 54. markdownlint reports MD031.

As per coding guidelines, **/* requires make verify before submission, and the gate checks formatting.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/security-guidelines.md` around lines 47 - 54, Add blank lines
immediately before and after the security-context Go code fence in the
documentation section, preserving the fenced content unchanged so markdownlint
MD031 passes.

Sources: Coding guidelines, Linters/SAST tools

ai-docs/decisions/adr-0001-bindata-over-helm.md-25-25 (1)

25-25: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add blank lines after ADR subsection headings.

Add one blank line after ### Positive, ### Negative, ### Neutral, ### Direct Helm Library Usage, and ### Kustomize Overlays. markdownlint reports MD022.

As per coding guidelines, **/* requires make verify before submission, and the gate checks formatting.

Also applies to: 30-30, 34-34, 39-39, 43-43

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ai-docs/decisions/adr-0001-bindata-over-helm.md` at line 25, Add one blank
line immediately after each ADR subsection heading: Positive, Negative, Neutral,
Direct Helm Library Usage, and Kustomize Overlays, so the document satisfies
markdownlint MD022 and the formatting verification gate.

Sources: Coding guidelines, Linters/SAST tools

docs/error-handling-guidelines.md-7-7 (1)

7-7: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix the reported Markdown spacing violations.

Add blank lines after the headings at Lines 7, 21, 28, 86, 89, 92, and 106. Add a blank line before the code fence at Line 116. markdownlint reports MD022 and MD031.

As per coding guidelines, **/* requires make verify before submission, and the gate checks formatting.

Also applies to: 21-21, 28-28, 86-86, 89-89, 92-92, 106-106, 116-116

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/error-handling-guidelines.md` at line 7, Fix the Markdown spacing
violations in docs/error-handling-guidelines.md by adding blank lines after the
headings at the referenced locations and before the code fence at line 116,
satisfying markdownlint rules MD022 and MD031. Run make verify to confirm
formatting passes.

Sources: Coding guidelines, Linters/SAST tools

ai-docs/decisions/adr-0003-network-policy-naming-scheme.md-28-28 (1)

28-28: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add blank lines after ADR subsection headings.

Add one blank line after ### Positive, ### Negative, and ### Neutral. markdownlint reports MD022.

As per coding guidelines, **/* requires make verify before submission, and the gate checks formatting.

Also applies to: 33-33, 37-37

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ai-docs/decisions/adr-0003-network-policy-naming-scheme.md` at line 28, Add a
blank line immediately after the ADR subsection headings “Positive,” “Negative,”
and “Neutral” so each heading is separated from its following content and
satisfies markdownlint MD022.

Sources: Coding guidelines, Linters/SAST tools

docs/integration-guidelines.md-57-61 (1)

57-61: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Specify a language for the manifest tree fence.

Use text after the fence at Line 57. markdownlint reports MD040.

As per coding guidelines, **/* requires make verify before submission, and the gate checks formatting.

Suggested fix
-```
+```text
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/integration-guidelines.md` around lines 57 - 61, Specify the text
language on the manifest tree code fence in the documentation by changing the
opening fence to use the text tag, while preserving the existing tree content
and formatting.

Sources: Coding guidelines, Linters/SAST tools

ai-docs/decisions/adr-0003-network-policy-naming-scheme.md-38-38 (1)

38-38: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Correct the maximum user-policy name length.

eso-user- has 9 characters. With Kubernetes' 253-character name limit, the base name can be 244 characters, not 243. If 243 reserves another suffix, state that suffix.

Suggested fix
-- User policy names are limited to 243 characters to accommodate the `eso-user-` prefix within Kubernetes' 253-character name limit
+- User policy names are limited to 244 characters to accommodate the `eso-user-` prefix within Kubernetes' 253-character name limit
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ai-docs/decisions/adr-0003-network-policy-naming-scheme.md` at line 38,
Update the maximum user policy name length in the naming scheme documentation
from 243 to 244 characters to account for the 9-character eso-user- prefix
within Kubernetes’ 253-character limit; only retain 243 if the documentation
explicitly identifies an additional reserved suffix.
docs/error-handling-guidelines.md-5-5 (1)

5-5: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Wrap CRD annotator failures with ReconcileError before aggregation. processReconcileRequest returns bare errors through oErr, and its status-update path aggregates errors without adding a category. utilerrors.NewAggregate supports errors.As, but it cannot classify bare errors. Use FromClientError or NewRetryRequiredError, or document the CRD annotator exception. Extend the test to assert the error category, not only err.Error().

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/error-handling-guidelines.md` at line 5, Update processReconcileRequest
so CRD annotator failures assigned to oErr are wrapped with an appropriate
ReconcileError category, using FromClientError or NewRetryRequiredError, before
status-update aggregation via utilerrors.NewAggregate. Preserve the existing
aggregation behavior and extend the related test to assert the resulting error
category through errors.As rather than checking only err.Error().
.github/PULL_REQUEST_TEMPLATE.md-23-25 (1)

23-25: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Align all make verify documentation with the Makefile contract.

The supplied Makefile does not run lint as part of verify, and its git-diff check is not limited to generated files.

  • .github/PULL_REQUEST_TEMPLATE.md#L23-L25: Remove no lint errors from the make verify item; keep make lint as the separate check.
  • CONTRIBUTING.md#L89-L89: Tell contributors to inspect the verify diff because it can include uncommitted or untracked changes, then regenerate only when generated outputs changed.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/PULL_REQUEST_TEMPLATE.md around lines 23 - 25, Update
.github/PULL_REQUEST_TEMPLATE.md lines 23-25 by removing “no lint errors” from
the make verify checklist while keeping make lint as a separate check. Update
CONTRIBUTING.md line 89 to instruct contributors to inspect the verify diff,
including uncommitted or untracked changes, and regenerate outputs only when
generated files changed.
CONTRIBUTING.md-61-63 (1)

61-63: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use an imperative no-ticket commit example.

updates owners list is not imperative. Replace it with update owners list.

As per coding guidelines, use a descriptive imperative summary when no Jira ticket exists.

Proposed wording
-The Jira project can be any valid project (ESO, OAPE, etc.). For changes without a Jira ticket, use a descriptive imperative summary (e.g., `fix make verify`, `updates owners list`).
+The Jira project can be any valid project (ESO, OAPE, etc.). For changes without a Jira ticket, use a descriptive imperative summary (e.g., `fix make verify`, `update owners list`).
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CONTRIBUTING.md` around lines 61 - 63, Update the no-ticket commit example in
the contributing guidance from “updates owners list” to the imperative “update
owners list,” while preserving the surrounding examples and wording.

Source: Coding guidelines

README.md-68-70 (1)

68-70: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Separate Podman and Docker prerequisites.

CONTAINER_TOOL defaults to Podman, but the repository defines no Podman minimum. Docker 17.03 cannot build the multi-stage Dockerfile; basic builds require Docker 17.05+, and docker-buildx requires Docker 19.03+. List separate, build-script-supported requirements.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@README.md` around lines 68 - 70, Update the prerequisites section in
README.md to separate Podman and Docker requirements, documenting the
repository’s supported Podman baseline and Docker minimums for basic multi-stage
builds and docker-buildx. Keep the existing Go and kubectl/oc prerequisites
unchanged, and align Docker versions with the build scripts’ actual
requirements.
🧹 Nitpick comments (7)
ai-docs/ESO_TESTING.md (1)

42-47: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Use unique names for repeated headings.

### Running appears twice. markdownlint-cli2 reports MD024. Rename the headings to ### Running API Tests and ### Running E2E Tests.

Also applies to: 66-76

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ai-docs/ESO_TESTING.md` around lines 42 - 47, Rename the duplicate “###
Running” headings in ai-docs/ESO_TESTING.md to unique headings: use “### Running
API Tests” for the API test section and “### Running E2E Tests” for the
end-to-end test section, preserving their existing content.

Source: Linters/SAST tools

ai-docs/ESO_DEVELOPMENT.md (1)

50-61: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Avoid a hard-coded “current” version.

The currently v2.5.0 text can drift from EXTERNAL_SECRETS_VERSION in Makefile. Remove the parenthetical or add an automated documentation check.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ai-docs/ESO_DEVELOPMENT.md` around lines 50 - 61, Remove the hard-coded
“currently v2.5.0” parenthetical from the version-update step in the ESO
development instructions, leaving the Makefile variable as the sole source of
truth.
docs/testing-guidelines.md (2)

16-20: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Fix the Markdown lint violations.

Add blank lines before and after the fenced block at lines 17-19. Specify bash as the fence language. Add blank lines around ### Do Test and ### Do Not Test.

markdownlint-cli2 reports MD031, MD040, and MD022 for these ranges.

Also applies to: 108-119

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/testing-guidelines.md` around lines 16 - 20, Update the Markdown
structure around the testing guidelines and the corresponding section near “Do
Test”/“Do Not Test”: add blank lines before and after every fenced code block,
declare the fence language as bash, and add blank lines before and after each
affected level-three heading to satisfy MD031, MD040, and MD022.

Source: Linters/SAST tools


84-87: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Use //go:embed testdata/* in ai-docs/ESO_TESTING.md. The declaration in test/e2e/e2e_test.go uses this pattern, so both testing guides must match.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/testing-guidelines.md` around lines 84 - 87, Update the Embedded
Testdata guidance in the testing documentation to specify //go:embed testdata/*
for ai-docs/ESO_TESTING.md, matching the declaration used by e2e_test.go while
preserving the existing testassets.ReadFile and ReplacePatternInAsset guidance.
ai-docs/references/ecosystem.md (1)

40-40: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

Add the enforcement reference and scope.

Reference cmd/external-secrets-operator/main.go:135-156. State that HTTP/2 is disabled by default for the metrics and webhook servers and enabled when --enable-http2 is set.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ai-docs/references/ecosystem.md` at line 40, Update the HTTP/2 entry in
ecosystem.md to reference the enforcement in the operator’s main server
configuration and specify that HTTP/2 is disabled by default for both metrics
and webhook servers, becoming enabled when --enable-http2 is set.
ai-docs/domain/external-secrets-manager.md (1)

61-65: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Document recovery after runtime ESM deletion.

CreateDefaultESMResource runs only during operator startup. Runtime deletion removes the finalizer but does not recreate ExternalSecretsManager. Document that administrators must restart the operator, for example with oc rollout restart deployment/external-secrets-operator-controller-manager -n external-secrets-operator, to trigger recreation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ai-docs/domain/external-secrets-manager.md` around lines 61 - 65, Update the
Lifecycle documentation for ExternalSecretsManager deletion to state that
runtime deletion is not automatically recovered because CreateDefaultESMResource
runs only at operator startup; instruct administrators to restart the operator,
including the provided oc rollout restart command, to trigger recreation.
docs/integration-guidelines.md (1)

9-13: 🩺 Stability & Availability | 🔵 Trivial

Document recovery after late cert-manager installation.

If cert-manager is installed after the operator starts, the cached discovery result remains negative and the documented IrrecoverableError path does not self-recover. State that operators must restart the operator, or change the detection and retry behavior. Verify that restart is the supported recovery path.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/integration-guidelines.md` around lines 9 - 13, Update the cert-manager
recovery guidance near isCRDInstalled, optionalResourcesList, and
NewIrrecoverableError to state that operators must restart the operator after
installing cert-manager late, since detection is cached for the process
lifetime. Preserve the existing startup-only detection behavior and document
restart as the supported recovery path rather than implying automatic recovery.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/ISSUE_TEMPLATE/bug_report.md:
- Around line 32-46: Update the bug report template before the “Relevant
Resources” and “Operator Logs” sections to add a prominent warning instructing
users to redact secret values, credentials, tokens, private keys, and personal
data from all diagnostics before posting publicly.

In @.github/PULL_REQUEST_TEMPLATE.md:
- Around line 26-29: Update the checklist entries in the pull request template
to match the contributor workflow: qualify CEL validation rules and tests as
required only for applicable fields or new rules, and expand the
managed-resource checklist to include registration in
controllerManagedResources, HasObjectChanged, buildCacheObjectList(), and the
required ordered install sequence. Preserve the existing generated-file and
error-type checklist items.

In `@ai-docs/architecture/components.md`:
- Around line 120-129: Update the “Update Strategy: NOT Server-Side Apply”
section to scope the UpdateWithRetry statement specifically to full-resource
updates, while explicitly distinguishing metadata-only updates via
patchResourceMetadata and annotation updates via MergePatch. Keep the existing
references and strategy table consistent with this distinction.
- Around line 93-102: Update the “Two Clients” invariant near the
controllerManagedResources guidance to explicitly allow r.UncachedClient only as
a fallback when a controller-managed object is absent from the cache, while
requiring r.CtrlClient for normal access to cached controller-managed resources.
Ensure the cached and uncached client rules are consistent and no longer
contradictory.

In `@ai-docs/decisions/adr-0003-network-policy-naming-scheme.md`:
- Around line 33-35: Update the network-policy naming scheme ADR to document the
supported process for revoking obsolete permissions when entries cannot be
removed and missing eso-user-* policies are recreated, and state that any change
to permit removal requires an enhancement proposal before modifying the CEL
immutability rule.

In `@ai-docs/domain/external-secrets-config.md`:
- Around line 90-94: Update the Lifecycle deletion item near the “Deletion”
entry to document cleanup of both namespace-scoped and cluster-scoped
operator-managed resources, including cluster-scoped RBAC, validating webhooks,
and tracked CRD annotations. Explicitly describe any resources or conditions
that are exceptions to cleanup, while preserving the existing
finalizer-protected behavior.

In `@ai-docs/ESO_DEVELOPMENT.md`:
- Around line 71-81: Update the managed-resource workflow in “Add a New Managed
Resource Type” to run make update-bindata immediately after adding YAML under
bindata/external-secrets/resources/, then run make verify to confirm generated
assets are current. Preserve the existing steps and also note that CRD or other
generated-input changes require make manifests generate update-bindata.
- Around line 149-151: Update the FIPS section of ESO_DEVELOPMENT.md to
distinguish the hack/go-fips.sh path used by make build-operator from the
image-build and docker-buildx targets using Dockerfile with CGO_ENABLED=0 and no
FIPS flags. State that CGO_ENABLED=0 applies to non-FIPS image builds, without
implying those targets produce FIPS-compliant images.

In `@docs/api-contracts-guidelines.md`:
- Around line 153-159: The Test Patterns example uses inconsistent CRD
identifiers: align the test directory path and the YAML crdName with the same
actual CRD name, updating the singular/plural example as needed while preserving
the surrounding test layout guidance.

In `@docs/performance-guidelines.md`:
- Line 63: Update the `FromClientError` classification statement in the
performance guidelines to explicitly exclude user-configuration `NotFound`
errors from the “everything else” `RetryRequiredError` rule, documenting that
they become `UserConfigurationError` with the status and requeue behavior
defined in the error-handling guidelines.
- Around line 9-18: Update the first cache rule in the performance guidelines to
explicitly exclude ConfigMaps from the label-filtered cache requirement. State
that operand types in controllerManagedResources use the app=external-secrets
selector except ConfigMaps, which use namespace scoping via
OperandDefaultNamespace and must not receive a label selector; keep the existing
own-CR and unbounded-resource guidance unchanged.

---

Outside diff comments:
In `@ai-docs/exec-plans/README.md`:
- Around line 3-20: Complete the execution-plan guide in README by adding
sections covering what exec-plans are, when to create them, how to use them, the
completion workflow, and a link to the template; populate the existing Usage
section rather than leaving it empty. Ensure every topic listed in the document
index has corresponding contributor guidance before retaining the index.

---

Minor comments:
In @.github/PULL_REQUEST_TEMPLATE.md:
- Around line 23-25: Update .github/PULL_REQUEST_TEMPLATE.md lines 23-25 by
removing “no lint errors” from the make verify checklist while keeping make lint
as a separate check. Update CONTRIBUTING.md line 89 to instruct contributors to
inspect the verify diff, including uncommitted or untracked changes, and
regenerate outputs only when generated files changed.

In `@ai-docs/architecture/components.md`:
- Around line 56-60: Update the “Reconciliation Flow” diagram to make deletion a
terminal branch: show deleted resources proceeding through cleanup and finalizer
removal, then returning; show “Add finalizer → Fetch ESM →
processReconcileRequest” only on the non-deleted path.

In `@ai-docs/decisions/adr-0001-bindata-over-helm.md`:
- Line 25: Add one blank line immediately after each ADR subsection heading:
Positive, Negative, Neutral, Direct Helm Library Usage, and Kustomize Overlays,
so the document satisfies markdownlint MD022 and the formatting verification
gate.

In `@ai-docs/decisions/adr-0002-update-with-retry-over-ssa.md`:
- Line 24: Add one blank line immediately after each ADR subsection heading:
“Positive,” “Negative,” “Neutral,” and “Server-Side Apply,” ensuring the
following content starts on the next separated paragraph to satisfy markdownlint
MD022.

In `@ai-docs/decisions/adr-0003-network-policy-naming-scheme.md`:
- Line 28: Add a blank line immediately after the ADR subsection headings
“Positive,” “Negative,” and “Neutral” so each heading is separated from its
following content and satisfies markdownlint MD022.
- Line 38: Update the maximum user policy name length in the naming scheme
documentation from 243 to 244 characters to account for the 9-character
eso-user- prefix within Kubernetes’ 253-character limit; only retain 243 if the
documentation explicitly identifies an additional reserved suffix.

In `@ai-docs/decisions/adr-template.md`:
- Around line 20-35: Insert one blank line after each subsection heading in the
ADR template: “Positive,” “Negative,” “Neutral,” and “Alternative 1,” before
their associated content.

In `@ai-docs/domain/external-secrets-config.md`:
- Around line 64-67: Update the CEL Validation statement for Bitwarden TLS to
explicitly require either secretRef or certManager.mode == Enabled, rather than
treating any configured cert-manager object as sufficient.

In `@ai-docs/domain/external-secrets-manager.md`:
- Around line 44-45: Update the UnsafeAllowGenericTargets documentation to
explain that the operator manages the external-secrets-controller and its
ClusterRoleBinding for the external-secrets ServiceAccount in the
external-secrets namespace, but the managed role does not grant generic-target
write access. Instruct users to create a separate Role or ClusterRole and bind
it to that ServiceAccount, and warn them not to edit the managed role because
reconciliation restores its rules.

In `@ai-docs/ESO_TESTING.md`:
- Around line 18-24: Update the `make test` entry in the testing command list to
describe that it runs all non-E2E checks, including manifests, generate, fmt,
vet, test-apis, and test-unit; reserve the “unit tests only” description for
`make test-unit`.

In `@CONTRIBUTING.md`:
- Around line 61-63: Update the no-ticket commit example in the contributing
guidance from “updates owners list” to the imperative “update owners list,”
while preserving the surrounding examples and wording.

In `@docs/api-contracts-guidelines.md`:
- Around line 20-28: Unify the API test error-matching guidance in the Field
Immutability section and the corresponding onUpdate guidance around one
contract: prefer asserting a stable error substring, reserving exact
full-message matching for tests intentionally pinning API-server wording. Update
the requirement for the exact error message and the guidance near onUpdate tests
so they use the same rule.

In `@docs/error-handling-guidelines.md`:
- Line 7: Fix the Markdown spacing violations in
docs/error-handling-guidelines.md by adding blank lines after the headings at
the referenced locations and before the code fence at line 116, satisfying
markdownlint rules MD022 and MD031. Run make verify to confirm formatting
passes.
- Line 5: Update processReconcileRequest so CRD annotator failures assigned to
oErr are wrapped with an appropriate ReconcileError category, using
FromClientError or NewRetryRequiredError, before status-update aggregation via
utilerrors.NewAggregate. Preserve the existing aggregation behavior and extend
the related test to assert the resulting error category through errors.As rather
than checking only err.Error().

In `@docs/integration-guidelines.md`:
- Around line 57-61: Specify the text language on the manifest tree code fence
in the documentation by changing the opening fence to use the text tag, while
preserving the existing tree content and formatting.

In `@docs/security-guidelines.md`:
- Around line 47-54: Add blank lines immediately before and after the
security-context Go code fence in the documentation section, preserving the
fenced content unchanged so markdownlint MD031 passes.

In `@docs/testing-guidelines.md`:
- Around line 5-10: Update the testing command table so each command matches the
Makefile and can be copied from the repository root: correct the make test-e2e
invocation to use the test module’s working directory via go test -C, and
replace the escaped pipe characters in the make test-unit exclusion pattern with
the actual Makefile syntax or describe those exclusions in words.

In `@README.md`:
- Around line 68-70: Update the prerequisites section in README.md to separate
Podman and Docker requirements, documenting the repository’s supported Podman
baseline and Docker minimums for basic multi-stage builds and docker-buildx.
Keep the existing Go and kubectl/oc prerequisites unchanged, and align Docker
versions with the build scripts’ actual requirements.

---

Nitpick comments:
In `@ai-docs/domain/external-secrets-manager.md`:
- Around line 61-65: Update the Lifecycle documentation for
ExternalSecretsManager deletion to state that runtime deletion is not
automatically recovered because CreateDefaultESMResource runs only at operator
startup; instruct administrators to restart the operator, including the provided
oc rollout restart command, to trigger recreation.

In `@ai-docs/ESO_DEVELOPMENT.md`:
- Around line 50-61: Remove the hard-coded “currently v2.5.0” parenthetical from
the version-update step in the ESO development instructions, leaving the
Makefile variable as the sole source of truth.

In `@ai-docs/ESO_TESTING.md`:
- Around line 42-47: Rename the duplicate “### Running” headings in
ai-docs/ESO_TESTING.md to unique headings: use “### Running API Tests” for the
API test section and “### Running E2E Tests” for the end-to-end test section,
preserving their existing content.

In `@ai-docs/references/ecosystem.md`:
- Line 40: Update the HTTP/2 entry in ecosystem.md to reference the enforcement
in the operator’s main server configuration and specify that HTTP/2 is disabled
by default for both metrics and webhook servers, becoming enabled when
--enable-http2 is set.

In `@docs/integration-guidelines.md`:
- Around line 9-13: Update the cert-manager recovery guidance near
isCRDInstalled, optionalResourcesList, and NewIrrecoverableError to state that
operators must restart the operator after installing cert-manager late, since
detection is cached for the process lifetime. Preserve the existing startup-only
detection behavior and document restart as the supported recovery path rather
than implying automatic recovery.

In `@docs/testing-guidelines.md`:
- Around line 16-20: Update the Markdown structure around the testing guidelines
and the corresponding section near “Do Test”/“Do Not Test”: add blank lines
before and after every fenced code block, declare the fence language as bash,
and add blank lines before and after each affected level-three heading to
satisfy MD031, MD040, and MD022.
- Around line 84-87: Update the Embedded Testdata guidance in the testing
documentation to specify //go:embed testdata/* for ai-docs/ESO_TESTING.md,
matching the declaration used by e2e_test.go while preserving the existing
testassets.ReadFile and ReplacePatternInAsset guidance.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 6528e29c-5b6a-4fec-8df9-80c195ac9b98

📥 Commits

Reviewing files that changed from the base of the PR and between 65f39bd and 856ea5a.

📒 Files selected for processing (27)
  • .coderabbit.yaml
  • .github/ISSUE_TEMPLATE/bug_report.md
  • .github/ISSUE_TEMPLATE/feature_request.md
  • .github/PULL_REQUEST_TEMPLATE.md
  • AGENTS.md
  • CLAUDE.md
  • CONTRIBUTING.md
  • README.md
  • SECURITY.md
  • ai-docs/ESO_DEVELOPMENT.md
  • ai-docs/ESO_TESTING.md
  • ai-docs/architecture/components.md
  • ai-docs/decisions/adr-0001-bindata-over-helm.md
  • ai-docs/decisions/adr-0002-update-with-retry-over-ssa.md
  • ai-docs/decisions/adr-0003-network-policy-naming-scheme.md
  • ai-docs/decisions/adr-template.md
  • ai-docs/domain/external-secrets-config.md
  • ai-docs/domain/external-secrets-manager.md
  • ai-docs/exec-plans/README.md
  • ai-docs/references/ecosystem.md
  • ai-docs/references/enhancements.md
  • docs/api-contracts-guidelines.md
  • docs/error-handling-guidelines.md
  • docs/integration-guidelines.md
  • docs/performance-guidelines.md
  • docs/security-guidelines.md
  • docs/testing-guidelines.md

Comment thread .github/ISSUE_TEMPLATE/bug_report.md
Comment thread .github/PULL_REQUEST_TEMPLATE.md Outdated
Comment thread ai-docs/architecture/components.md Outdated
Comment thread harness-evals/harness-docs/architecture/components.md
Comment thread ai-docs/decisions/adr-0003-network-policy-naming-scheme.md Outdated
Comment thread ai-docs/ESO_DEVELOPMENT.md Outdated
Comment thread ai-docs/ESO_DEVELOPMENT.md Outdated
Comment thread harness-evals/harness-docs/api-contracts-guidelines.md
Comment thread docs/performance-guidelines.md Outdated
Comment thread docs/performance-guidelines.md Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🧹 Nitpick comments (1)
ai-docs/exec-plans/README.md (1)

22-22: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Define the archive location.

The documented layout contains only exec-plans/active/, but this line also tells contributors to archive completed plans. Add and document an archive directory, or instruct contributors to delete completed plans.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ai-docs/exec-plans/README.md` at line 22, Update the plan-completion guidance
in the README to resolve the inconsistency between the documented exec-plans
layout and the instruction to archive completed plans. Either document a
dedicated archive directory alongside exec-plans/active/ and direct contributors
to use it, or change the guidance to require deleting completed plans.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/anti-patterns/DUAL_CACHE_FIX.md`:
- Around line 136-141: Replace the fixed cache savings claims in the “Reduces
Resource Usage” section with workload-dependent language or measured
before-and-after results. Remove the unsupported 2N-to-N watch-connection and
cached-object calculations and the approximate 50% savings claims, while
accurately distinguishing informer watch connections from cached object counts.

In `@hack/Dockerfile.markdownlint`:
- Around line 7-8: Update the MARKDOWNLINT_BASE_IMAGE declaration in the
Dockerfile to use an approved immutable digest reference. If retaining the
build-argument override, ensure the build flow passes it explicitly and rejects
any tag-only or otherwise unpinned value.
- Line 18: Add USER 1000 to hack/Dockerfile.markdownlint and update both
Markdownlint container commands to pass --user "$$(id -u):$$(id -g)", ensuring
linting runs as a non-root user and --fix can write to bind-mounted files.
- Around line 12-18: Refactor the markdownlint Dockerfile into builder and final
stages: install markdownlint-cli2 only in the builder, then copy the Node
runtime and required package files into the final image while excluding npm,
caches, and installation artifacts. Pin the non-Red Hat base image by digest,
configure a non-root USER, and add the required HEALTHCHECK; preserve the
markdownlint entrypoint behavior.

In `@Makefile`:
- Around line 245-250: Define the MARKDOWNLINT_BASE_IMAGE Make variable and
update the markdownlint-image target’s CONTAINER_TOOL build invocation to pass
it via --build-arg MARKDOWNLINT_BASE_IMAGE=$(MARKDOWNLINT_BASE_IMAGE).
- Around line 252-255: Update the lint-markdown target to mount $(PROJECT_ROOT)
read-only, add the container --read-only option, and provide a writable /tmp
tmpfs; leave lint-markdown-fix writable because it runs markdownlint with --fix.

---

Nitpick comments:
In `@ai-docs/exec-plans/README.md`:
- Line 22: Update the plan-completion guidance in the README to resolve the
inconsistency between the documented exec-plans layout and the instruction to
archive completed plans. Either document a dedicated archive directory alongside
exec-plans/active/ and direct contributors to use it, or change the guidance to
require deleting completed plans.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 7cebfab0-6309-443a-ae4c-b01943b6a1f3

📥 Commits

Reviewing files that changed from the base of the PR and between 856ea5a and 4f620af.

📒 Files selected for processing (32)
  • .github/ISSUE_TEMPLATE/bug_report.md
  • .github/PULL_REQUEST_TEMPLATE.md
  • .markdownlint-cli2.yaml
  • .markdownlint.yaml
  • AGENTS.md
  • CLAUDE.md
  • CONTRIBUTING.md
  • Makefile
  • README.md
  • ai-docs/ESO_DEVELOPMENT.md
  • ai-docs/ESO_TESTING.md
  • ai-docs/architecture/components.md
  • ai-docs/decisions/adr-0001-bindata-over-helm.md
  • ai-docs/decisions/adr-0002-update-with-retry-over-ssa.md
  • ai-docs/decisions/adr-0003-network-policy-naming-scheme.md
  • ai-docs/decisions/adr-template.md
  • ai-docs/domain/external-secrets-config.md
  • ai-docs/domain/external-secrets-manager.md
  • ai-docs/exec-plans/README.md
  • docs/anti-patterns/DUAL_CACHE_FIX.md
  • docs/anti-patterns/DUAL_CACHE_FIX_SUMMARY.md
  • docs/anti-patterns/README.md
  • docs/api-contracts-guidelines.md
  • docs/error-handling-guidelines.md
  • docs/integration-guidelines.md
  • docs/performance-guidelines.md
  • docs/security-guidelines.md
  • docs/testing-guidelines.md
  • hack/Dockerfile.markdownlint
  • hack/install-markdownlint.sh
  • hack/markdownlint.sh
  • test/e2e/README.md
💤 Files with no reviewable changes (1)
  • .markdownlint.yaml
🚧 Files skipped from review as they are similar to previous changes (17)
  • AGENTS.md
  • CONTRIBUTING.md
  • ai-docs/domain/external-secrets-manager.md
  • ai-docs/architecture/components.md
  • ai-docs/decisions/adr-template.md
  • ai-docs/ESO_TESTING.md
  • CLAUDE.md
  • ai-docs/decisions/adr-0001-bindata-over-helm.md
  • ai-docs/domain/external-secrets-config.md
  • docs/error-handling-guidelines.md
  • ai-docs/decisions/adr-0003-network-policy-naming-scheme.md
  • docs/testing-guidelines.md
  • docs/performance-guidelines.md
  • docs/integration-guidelines.md
  • README.md
  • docs/security-guidelines.md
  • ai-docs/decisions/adr-0002-update-with-retry-over-ssa.md

Comment thread docs/anti-patterns/DUAL_CACHE_FIX.md
Comment thread hack/Dockerfile.markdownlint Outdated
Comment thread hack/Dockerfile.markdownlint
Comment thread hack/Dockerfile.markdownlint
Comment thread Makefile Outdated
Comment thread Makefile Outdated
@bharath-b-rh

Copy link
Copy Markdown
Contributor Author

/test verify

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@Makefile`:
- Around line 287-297: The unconditional exit 1 statement after the retry build
command causes the target to fail even when the retry succeeds. Replace the
unconditional exit 1 with exit $? to propagate the retry command's status, so
successful recoveries result in success and only actual failures trigger the
exit code 1.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 4fe5e53e-2d7f-4546-ab23-d4eafea432a8

📥 Commits

Reviewing files that changed from the base of the PR and between f6305b6 and 8ca85d8.

📒 Files selected for processing (32)
  • .github/ISSUE_TEMPLATE/bug_report.md
  • .github/PULL_REQUEST_TEMPLATE.md
  • .markdownlint-cli2.yaml
  • .markdownlint.yaml
  • AGENTS.md
  • CLAUDE.md
  • CONTRIBUTING.md
  • Makefile
  • README.md
  • ai-docs/ESO_DEVELOPMENT.md
  • ai-docs/ESO_TESTING.md
  • ai-docs/architecture/components.md
  • ai-docs/decisions/adr-0001-bindata-over-helm.md
  • ai-docs/decisions/adr-0002-update-with-retry-over-ssa.md
  • ai-docs/decisions/adr-0003-network-policy-naming-scheme.md
  • ai-docs/decisions/adr-template.md
  • ai-docs/domain/external-secrets-config.md
  • ai-docs/domain/external-secrets-manager.md
  • ai-docs/exec-plans/README.md
  • docs/anti-patterns/DUAL_CACHE_FIX.md
  • docs/anti-patterns/DUAL_CACHE_FIX_SUMMARY.md
  • docs/anti-patterns/README.md
  • docs/api-contracts-guidelines.md
  • docs/error-handling-guidelines.md
  • docs/integration-guidelines.md
  • docs/performance-guidelines.md
  • docs/security-guidelines.md
  • docs/testing-guidelines.md
  • hack/Dockerfile.markdownlint
  • hack/install-markdownlint.sh
  • hack/markdownlint.sh
  • test/e2e/README.md
💤 Files with no reviewable changes (1)
  • .markdownlint.yaml
🚧 Files skipped from review as they are similar to previous changes (29)
  • ai-docs/decisions/adr-0003-network-policy-naming-scheme.md
  • docs/error-handling-guidelines.md
  • .markdownlint-cli2.yaml
  • .github/PULL_REQUEST_TEMPLATE.md
  • CONTRIBUTING.md
  • hack/install-markdownlint.sh
  • docs/security-guidelines.md
  • ai-docs/decisions/adr-template.md
  • ai-docs/domain/external-secrets-config.md
  • ai-docs/decisions/adr-0001-bindata-over-helm.md
  • CLAUDE.md
  • ai-docs/decisions/adr-0002-update-with-retry-over-ssa.md
  • hack/markdownlint.sh
  • ai-docs/architecture/components.md
  • ai-docs/domain/external-secrets-manager.md
  • .github/ISSUE_TEMPLATE/bug_report.md
  • ai-docs/exec-plans/README.md
  • ai-docs/ESO_TESTING.md
  • ai-docs/ESO_DEVELOPMENT.md
  • docs/performance-guidelines.md
  • test/e2e/README.md
  • docs/integration-guidelines.md
  • docs/anti-patterns/DUAL_CACHE_FIX.md
  • hack/Dockerfile.markdownlint
  • README.md
  • docs/api-contracts-guidelines.md
  • docs/testing-guidelines.md
  • AGENTS.md
  • docs/anti-patterns/DUAL_CACHE_FIX_SUMMARY.md

Comment thread Makefile Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
hack/Dockerfile.markdownlint (1)

1-36: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Missing HEALTHCHECK instruction.

The digest pin, multi-stage build, and non-root USER 1000:1000 from the prior review are now in place. One path-instruction item remains unaddressed: the Dockerfile has no HEALTHCHECK instruction. This image runs as a one-shot CLI wrapper invoked by make lint-markdown, so the practical benefit is limited, but add a HEALTHCHECK (for example, checking markdownlint-cli2 --version succeeds) to satisfy the container security checklist, or document why it is intentionally omitted for a non-service CLI image.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@hack/Dockerfile.markdownlint` around lines 1 - 36, Add a Dockerfile
HEALTHCHECK after the markdownlint CLI setup that verifies markdownlint-cli2 is
available by successfully running its version command; keep it compatible with
the non-root runtime user and one-shot ENTRYPOINT.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@hack/Dockerfile.markdownlint`:
- Around line 1-36: Add a Dockerfile HEALTHCHECK after the markdownlint CLI
setup that verifies markdownlint-cli2 is available by successfully running its
version command; keep it compatible with the non-root runtime user and one-shot
ENTRYPOINT.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: dd258c49-8723-43a9-b0bf-707f44a25e5b

📥 Commits

Reviewing files that changed from the base of the PR and between 8ca85d8 and 6411a55.

📒 Files selected for processing (32)
  • .github/ISSUE_TEMPLATE/bug_report.md
  • .github/PULL_REQUEST_TEMPLATE.md
  • .markdownlint-cli2.yaml
  • .markdownlint.yaml
  • AGENTS.md
  • CLAUDE.md
  • CONTRIBUTING.md
  • Makefile
  • README.md
  • ai-docs/ESO_DEVELOPMENT.md
  • ai-docs/ESO_TESTING.md
  • ai-docs/architecture/components.md
  • ai-docs/decisions/adr-0001-bindata-over-helm.md
  • ai-docs/decisions/adr-0002-update-with-retry-over-ssa.md
  • ai-docs/decisions/adr-0003-network-policy-naming-scheme.md
  • ai-docs/decisions/adr-template.md
  • ai-docs/domain/external-secrets-config.md
  • ai-docs/domain/external-secrets-manager.md
  • ai-docs/exec-plans/README.md
  • docs/anti-patterns/DUAL_CACHE_FIX.md
  • docs/anti-patterns/DUAL_CACHE_FIX_SUMMARY.md
  • docs/anti-patterns/README.md
  • docs/api-contracts-guidelines.md
  • docs/error-handling-guidelines.md
  • docs/integration-guidelines.md
  • docs/performance-guidelines.md
  • docs/security-guidelines.md
  • docs/testing-guidelines.md
  • hack/Dockerfile.markdownlint
  • hack/install-markdownlint.sh
  • hack/markdownlint.sh
  • test/e2e/README.md
💤 Files with no reviewable changes (1)
  • .markdownlint.yaml
🚧 Files skipped from review as they are similar to previous changes (27)
  • test/e2e/README.md
  • docs/error-handling-guidelines.md
  • ai-docs/exec-plans/README.md
  • ai-docs/decisions/adr-template.md
  • docs/performance-guidelines.md
  • docs/security-guidelines.md
  • .markdownlint-cli2.yaml
  • ai-docs/domain/external-secrets-config.md
  • README.md
  • CLAUDE.md
  • ai-docs/decisions/adr-0003-network-policy-naming-scheme.md
  • docs/api-contracts-guidelines.md
  • .github/ISSUE_TEMPLATE/bug_report.md
  • docs/anti-patterns/DUAL_CACHE_FIX.md
  • ai-docs/domain/external-secrets-manager.md
  • .github/PULL_REQUEST_TEMPLATE.md
  • ai-docs/architecture/components.md
  • ai-docs/decisions/adr-0001-bindata-over-helm.md
  • docs/anti-patterns/DUAL_CACHE_FIX_SUMMARY.md
  • AGENTS.md
  • ai-docs/decisions/adr-0002-update-with-retry-over-ssa.md
  • ai-docs/ESO_TESTING.md
  • ai-docs/ESO_DEVELOPMENT.md
  • CONTRIBUTING.md
  • docs/integration-guidelines.md
  • docs/testing-guidelines.md
  • hack/markdownlint.sh

@bharath-b-rh
bharath-b-rh force-pushed the oape-877 branch 4 times, most recently from c92cf2b to 509eb65 Compare August 5, 2026 12:29
@bharath-b-rh

Copy link
Copy Markdown
Contributor Author

/testwith openshift/external-secrets-operator/main/verify openshift/release#82965

Signed-off-by: Bharath B <bhb@redhat.com>
Signed-off-by: Bharath B <bhb@redhat.com>
@openshift-ci

openshift-ci Bot commented Aug 7, 2026

Copy link
Copy Markdown

@bharath-b-rh: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/verify e4a78f6 link true /test verify

Full PR test history. Your PR dashboard.

Details

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

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

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants