Skip to content

OCPEDGE-2727: Add agent-eval-harness integration config for cluster-diagnostic skill#178

Open
dhensel-rh wants to merge 7 commits into
openshift-eng:mainfrom
dhensel-rh:OCPEDGE-2727
Open

OCPEDGE-2727: Add agent-eval-harness integration config for cluster-diagnostic skill#178
dhensel-rh wants to merge 7 commits into
openshift-eng:mainfrom
dhensel-rh:OCPEDGE-2727

Conversation

@dhensel-rh

@dhensel-rh dhensel-rh commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Integrate the agent-eval-harness with the cluster-diagnostic skill to enable automated quality
    testing via /test eval-cluster-diagnostic in CI
  • Five test cases exercise both validate mode (severity classification of dangerous procedures)
    and recovery-guide mode (correct shutdown/recovery procedures)
  • Four deterministic judges check severity accuracy, procedure completeness, forbidden
    recommendations, and cost budget; one LLM judge evaluates knowledge base accuracy
  • Companion CI job defined in openshift/release#80177

Summary by CodeRabbit

Release Notes

  • Documentation

    • Added guidance for running automated evals locally and from CI, including available evaluation configurations and how to add new cases.
  • Tests

    • Expanded the two-node evaluation suite with a new cluster-diagnostic configuration covering validation, recovery-guide, and game-mode scenarios.
    • Added a threat-model evaluation configuration with multiple annotated security assessment cases and judge checks to validate report structure and quality.

@openshift-ci

openshift-ci Bot commented Jun 6, 2026

Copy link
Copy Markdown

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@openshift-ci openshift-ci Bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jun 6, 2026
@coderabbitai

coderabbitai Bot commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: f3c1bb90-1463-4132-b30f-b59f11ccf822

📥 Commits

Reviewing files that changed from the base of the PR and between d7c1857 and 39a8caa.

📒 Files selected for processing (4)
  • plugins/two-node/evals/README.md
  • plugins/two-node/evals/cluster-diagnostic.md
  • plugins/two-node/evals/cluster-diagnostic.yaml
  • plugins/two-node/evals/threat-model-tnf.md
✅ Files skipped from review due to trivial changes (3)
  • plugins/two-node/evals/cluster-diagnostic.md
  • plugins/two-node/evals/README.md
  • plugins/two-node/evals/threat-model-tnf.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • plugins/two-node/evals/cluster-diagnostic.yaml

Walkthrough

Adds a complete automated eval framework under plugins/two-node/evals/ covering a harness README, skill-analysis markdown documents, two evaluation YAML configs (cluster-diagnostic and threat-model-tnf) with LLM judge suites and pass-rate thresholds, and eleven annotated test case fixtures split across both skills.

Changes

Two-node eval framework

Layer / File(s) Summary
Eval harness overview and directory structure
plugins/two-node/evals/README.md
Documents the eval harness purpose, lists available eval configs, explains how to run locally and via CI PR comments, defines the directory layout, and provides a step-by-step guide for adding new evals.
cluster-diagnostic skill analysis and scope
plugins/two-node/evals/cluster-diagnostic.md
Auto-generated skill analysis documents the cluster-diagnostic skill's capabilities (validate/recovery-guide/game modes), suggested judges (budget, severity, procedure, forbidden recommendations, knowledge-base accuracy), input/output schema, pipeline flow, and deterministic/LLM-judged quality criteria.
cluster-diagnostic eval configuration with judges
plugins/two-node/evals/cluster-diagnostic.yaml
Defines eval YAML setup including Claude Code runner, case-mode wiring, dataset schema, output structure, and judge suite covering cost budgeting, validate-mode severity classification, recovery-guide procedure completeness, forbidden-recommendation detection, game-mode scoring, and knowledge-base accuracy, with per-judge thresholds.
cluster-diagnostic test cases
plugins/two-node/evals/cluster-diagnostic/cases/case-{001...006}/*
Adds six cases covering validate mode (sequential shutdown, safe Redfish, pcs standby), recovery-guide mode (full-shutdown, standby), and game mode (TNF knowledge quiz). Each case provides input.yaml and annotations.yaml; the game case adds answers.yaml with quiz configuration.
threat-model-tnf skill analysis and scope
plugins/two-node/evals/threat-model-tnf.md
Auto-generated skill analysis for threat-model-tnf covering ShellCheck scanning, DFD/STRIDE/MITRE threat modeling pipeline, input PR formats, output report/ticket structure, cumulative findings tracker, and quality criteria including DFD mapping, STRIDE completeness, severity accuracy, and MITRE technique correctness.
threat-model-tnf eval configuration with judges
plugins/two-node/evals/threat-model-tnf.yaml
Defines eval YAML setup including Claude Code runner, case-mode execution, dataset schema (pr_input, repo, org, annotations), output structure, and judge suite covering report existence, required sections, DFD/STRIDE/MITRE validation, LLM threat-analysis quality (1–5 rubric), and findings-tracker update detection, with per-judge thresholds.
threat-model-tnf test cases
plugins/two-node/evals/threat-model-tnf/cases/case-{001...005}/*
Adds five cases covering shell-script K8s API access, credential-rotation script, MAC fencing lookup, trivial indentation fix (negative), and TNF pipeline retry bugfix. Each case provides input.yaml and annotations.yaml with expected severities, DFD elements, and MITRE technique mappings.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • openshift-eng/edge-tooling#6: Introduces the threat-model-tnf Claude skill, which is a direct dependency for the threat-model-tnf eval configuration and test cases in this PR.
  • openshift-eng/edge-tooling#168: Establishes the two-node:cluster-diagnostic skill interface (modes, inputs, outputs), which this PR's eval configuration and test cases directly validate.
🚥 Pre-merge checks | ✅ 10 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Ai-Attribution ⚠️ Warning Files marked "Auto-generated by /eval-analyze" indicate AI/automated tool generation, but commit lacks required Red Hat attribution trailers (Assisted-by/Generated-by). Add Assisted-by or Generated-by trailer to commit message with Red Hat email attribution if AI tools were used to generate the auto-marked files.
✅ Passed checks (10 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title directly and accurately summarizes the main change: adding agent-eval-harness integration configuration for the cluster-diagnostic skill, which is the core purpose of this PR.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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.
No-Weak-Crypto ✅ Passed PR contains only YAML configuration (25 files) and Markdown documentation (3 files) for eval harness. No code files or cryptographic implementations present. No weak crypto algorithms (MD5, SHA1, D...
Container-Privileges ✅ Passed PR contains only evaluation configs and test case YAML files + documentation, no Kubernetes manifests or container security configurations. No privilege-related keywords found.
No-Sensitive-Data-In-Logs ✅ Passed No sensitive data (passwords, tokens, API keys, PII, session IDs, internal hostnames, customer data) found in logging configurations, test cases, or judge prompts.
No-Hardcoded-Secrets ✅ Passed No hardcoded secrets found. PR contains only evaluation configs, documentation, and test cases with public PR references and parameter templates—no API keys, tokens, passwords, private keys, creden...
No-Injection-Vectors ✅ Passed PR adds only YAML configuration and Markdown documentation files (28 total, 0 Python files). No SQL concatenation, shell=True, eval/exec, pickle.loads, unsafe yaml.load, os.system, or dangerouslySe...

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 markdownlint-cli2 (0.22.1)
plugins/two-node/evals/cluster-diagnostic.md

markdownlint-cli2 v0.22.1 (markdownlint v0.40.0)
Finding: plugins/two-node/evals/cluster-diagnostic.md !node_modules/** !two-node-toolbox/**
Linting: 1 file(s)
Summary: 0 error(s)
AggregateError: Unable to import module 'markdownlint-cli2-formatter-pretty'.
at importModule (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:90:11)
at async Promise.all (index 0)
at async outputResults (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:838:9)
at async main (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:1029:5)
at async file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2-bin.mjs:14:22 {
[errors]: [
Error: Cannot find module 'markdownlint-cli2-formatter-pretty'
Require stack:
- /usr/local/lib/node_modules/markdownlint-cli2/node_modules/markdownlint/lib/resolve-module.cjs
at Module._resolveFilename (node:internal/modules/cjs/loader:1476:15)
at wr

... [truncated 1092 characters] ...

node:internal/modules/esm/resolve:271:11)
at moduleResolve (node:internal/modules/esm/resolve:861:10)
at defaultResolve (node:internal/modules/esm/resolve:988:11)
at #cachedDefaultResolve (node:internal/modules/esm/loader:697:20)
at #resolveAndMaybeBlockOnLoaderThread (node:internal/modules/esm/loader:714:38)
at ModuleLoader.resolveSync (node:internal/modules/esm/loader:746:52)
at #resolve (node:internal/modules/esm/loader:679:17)
at ModuleLoader.getOrCreateModuleJob (node:internal/modules/esm/loader:599:35)
at node:internal/modules/esm/loader:628:32
at TracingChannel.tracePromise (node:diagnostics_channel:362:14) {
code: 'ERR_MODULE_NOT_FOUND',
url: 'file:///markdownlint-cli2-formatter-pretty'
}
]
}

plugins/two-node/evals/README.md

markdownlint-cli2 v0.22.1 (markdownlint v0.40.0)
Finding: plugins/two-node/evals/README.md !node_modules/** !two-node-toolbox/**
Linting: 1 file(s)
Summary: 0 error(s)
AggregateError: Unable to import module 'markdownlint-cli2-formatter-pretty'.
at importModule (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:90:11)
at async Promise.all (index 0)
at async outputResults (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:838:9)
at async main (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:1029:5)
at async file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2-bin.mjs:14:22 {
[errors]: [
Error: Cannot find module 'markdownlint-cli2-formatter-pretty'
Require stack:
- /usr/local/lib/node_modules/markdownlint-cli2/node_modules/markdownlint/lib/resolve-module.cjs
at Module._resolveFilename (node:internal/modules/cjs/loader:1476:15)
at wrapResolveFil

... [truncated 1080 characters] ...

node:internal/modules/esm/resolve:271:11)
at moduleResolve (node:internal/modules/esm/resolve:861:10)
at defaultResolve (node:internal/modules/esm/resolve:988:11)
at #cachedDefaultResolve (node:internal/modules/esm/loader:697:20)
at #resolveAndMaybeBlockOnLoaderThread (node:internal/modules/esm/loader:714:38)
at ModuleLoader.resolveSync (node:internal/modules/esm/loader:746:52)
at #resolve (node:internal/modules/esm/loader:679:17)
at ModuleLoader.getOrCreateModuleJob (node:internal/modules/esm/loader:599:35)
at node:internal/modules/esm/loader:628:32
at TracingChannel.tracePromise (node:diagnostics_channel:362:14) {
code: 'ERR_MODULE_NOT_FOUND',
url: 'file:///markdownlint-cli2-formatter-pretty'
}
]
}

plugins/two-node/evals/threat-model-tnf.md

markdownlint-cli2 v0.22.1 (markdownlint v0.40.0)
Finding: plugins/two-node/evals/threat-model-tnf.md !node_modules/** !two-node-toolbox/**
Linting: 1 file(s)
Summary: 0 error(s)
AggregateError: Unable to import module 'markdownlint-cli2-formatter-pretty'.
at importModule (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:90:11)
at async Promise.all (index 0)
at async outputResults (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:838:9)
at async main (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:1029:5)
at async file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2-bin.mjs:14:22 {
[errors]: [
Error: Cannot find module 'markdownlint-cli2-formatter-pretty'
Require stack:
- /usr/local/lib/node_modules/markdownlint-cli2/node_modules/markdownlint/lib/resolve-module.cjs
at Module._resolveFilename (node:internal/modules/cjs/loader:1476:15)
at wrap

... [truncated 1090 characters] ...

node:internal/modules/esm/resolve:271:11)
at moduleResolve (node:internal/modules/esm/resolve:861:10)
at defaultResolve (node:internal/modules/esm/resolve:988:11)
at #cachedDefaultResolve (node:internal/modules/esm/loader:697:20)
at #resolveAndMaybeBlockOnLoaderThread (node:internal/modules/esm/loader:714:38)
at ModuleLoader.resolveSync (node:internal/modules/esm/loader:746:52)
at #resolve (node:internal/modules/esm/loader:679:17)
at ModuleLoader.getOrCreateModuleJob (node:internal/modules/esm/loader:599:35)
at node:internal/modules/esm/loader:628:32
at TracingChannel.tracePromise (node:diagnostics_channel:362:14) {
code: 'ERR_MODULE_NOT_FOUND',
url: 'file:///markdownlint-cli2-formatter-pretty'
}
]
}


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

@openshift-ci

openshift-ci Bot commented Jun 6, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: dhensel-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 Jun 6, 2026

inputs:
tools:
- match: Questions asked to the user via AskUserQuestion (game mode)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The inputs.tools section defines AskUserQuestion interception for game mode, but the analysis doc explicitly says game mode is excluded from eval scope. None of the 5 cases test game mode.
This is unused config that could confuse future contributors.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

case-006-game-quiz exercises game mode — the inputs.tools AskUserQuestion hook is used there to auto-answer the quiz

models:
skill: claude-opus-4-6
judge: claude-opus-4-6
hook: claude-sonnet-4-6

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

can we drop both skill and hook here ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

skill can be used here or on the command line

/eval-run --model claude-opus-4-6 --config evals/cluster-diagnostic.yaml

The hook is useful if I chose to exercise the game mode.

What is the motivation to drop ?

hook: claude-sonnet-4-6

permissions:
allow: []

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Do we want to list any speific tools or allow all ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I do not believe so. Do you have a suggestion ?


if expected_blockers and not found_blockers:
return (False, f"Expected blockers {expected_blockers} not found in output")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Warnings are never validated. The expected_warnings field is
collected but never used by any judge — either add a check or remove the field from annotations to avoid false confidence.

@dhensel-rh dhensel-rh Jun 16, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

warning_classification judge was added. (lines 118–140) — it validates expected_warnings from annotations against the conversation output.

sec_lower = section.lower()
if "pcs node standby" in sec_lower and "never" not in sec_lower and "do not" not in sec_lower:
forbidden.append("pcs node standby recommended")
if "shutdown -h 1" in sec_lower and "never" not in sec_lower and "do not" not in sec_lower:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The judge checks for "shutdown -h 1" (with the 1), but case-001's expected blocker is shutdown -h (without 1). If the skill outputs "shutdown -h" without the trailing argument, the
forbidden check wouldn't catch it. Should be "shutdown -h" in the judge.


Return a JSON object: {"score": <1-5>, "rationale": "<explanation>"}

thresholds:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

How are these defined ? they are from the eval-analyze command ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yes, the eval-analyze generated this.

A threshold sets the bar for a judge across all cases in a run.

  - 1.0 = all 5 must pass (5/5)
  - 0.8 = at least 4 must pass (4/5)
  - 0.6 = at least 3 must pass (3/5)

cluster issues across 4 modes: diagnose (live SSH), validate (check proposed
procedures), recovery-guide (return correct procedures), and game (interactive
training). The skill encodes 7 validated bare metal test scenarios (HPE ProLiant
e920t, OCP 4.22.0-rc.3) into a knowledge base.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

should we mention the baremetal system and ocp details ? this should work against any baremetal and ocp versions right ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This file (cluster-diagnostic.md) is generated from /eval-analyze. The cluster-diagnostic tool should work with any OCP version, baremetal, or VM. The reference ./cluster-knowledge-base.md skill would need updating, not this markdown file. This can probably be addressed for accuracy, but does not necessarily affect the test output.

@dhensel-rh

Copy link
Copy Markdown
Contributor Author

Superseded by #187 (skill plugin), #188 (REPORT_DIR override), and #189 (eval configs).

dhensel-rh and others added 6 commits June 16, 2026 09:03
…eat-model skills

Add evaluation configs, test cases, and README for two skills:
- cluster-diagnostic: 5 cases covering validate and recovery-guide modes
- threat-model-tnf: 5 cases covering PR security analysis

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The eval harness resolves dataset.path from the repo root, not relative
to the config file. Both configs were using short relative paths that
broke when running from different working directories.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add case-006-game-quiz with quiz mode test case and answers
- Add warning_classification judge for expected WARNING findings
- Add game_mode_scoring judge for rating/score validation
- Fix forbidden_recommendations to check 'shutdown -h' (not 'shutdown -h 1')
- Update severity_classification description for clarity
- Drop models.skill default (let CLI --model flag control it)
- Simplify schema note to only exclude diagnose mode

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Evals score skill quality on a spectrum (1-5), not pass/fail. Update
terminology to reflect this: testing→scoring, test cases→scenarios,
test input→scenario input. Add game mode to cluster-diagnostic case count.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Raise cluster-diagnostic budget to $8 to cover full 6-scenario run
cost. Relax threat-model report filename match from "THREAT-MODEL" to
"THREAT" to handle naming variants (THREAT-REPORT, THREAT-ANALYSIS).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

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 `@plugins/two-node/evals/cluster-diagnostic.md`:
- Line 83: The phrase on line 83 contains an unhyphenated compound adjective
that should be hyphenated per standard English grammar rules. Change "bare metal
test results" to "bare-metal test results" since "bare-metal" is a compound
adjective modifying the noun "test results" and must be hyphenated when
appearing before the noun it modifies.
🪄 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 YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: f9d67794-7dfe-4cf3-a2c4-aea6a827f0f8

📥 Commits

Reviewing files that changed from the base of the PR and between ae84e9f and d7c1857.

📒 Files selected for processing (28)
  • plugins/two-node/evals/README.md
  • plugins/two-node/evals/cluster-diagnostic.md
  • plugins/two-node/evals/cluster-diagnostic.yaml
  • plugins/two-node/evals/cluster-diagnostic/cases/case-001-validate-sequential-shutdown/annotations.yaml
  • plugins/two-node/evals/cluster-diagnostic/cases/case-001-validate-sequential-shutdown/input.yaml
  • plugins/two-node/evals/cluster-diagnostic/cases/case-002-validate-safe-redfish/annotations.yaml
  • plugins/two-node/evals/cluster-diagnostic/cases/case-002-validate-safe-redfish/input.yaml
  • plugins/two-node/evals/cluster-diagnostic/cases/case-003-recovery-full-shutdown/annotations.yaml
  • plugins/two-node/evals/cluster-diagnostic/cases/case-003-recovery-full-shutdown/input.yaml
  • plugins/two-node/evals/cluster-diagnostic/cases/case-004-recovery-standby/annotations.yaml
  • plugins/two-node/evals/cluster-diagnostic/cases/case-004-recovery-standby/input.yaml
  • plugins/two-node/evals/cluster-diagnostic/cases/case-005-validate-pcs-standby/annotations.yaml
  • plugins/two-node/evals/cluster-diagnostic/cases/case-005-validate-pcs-standby/input.yaml
  • plugins/two-node/evals/cluster-diagnostic/cases/case-006-game-quiz/annotations.yaml
  • plugins/two-node/evals/cluster-diagnostic/cases/case-006-game-quiz/answers.yaml
  • plugins/two-node/evals/cluster-diagnostic/cases/case-006-game-quiz/input.yaml
  • plugins/two-node/evals/threat-model-tnf.md
  • plugins/two-node/evals/threat-model-tnf.yaml
  • plugins/two-node/evals/threat-model-tnf/cases/case-001-shell-script-k8s-api/annotations.yaml
  • plugins/two-node/evals/threat-model-tnf/cases/case-001-shell-script-k8s-api/input.yaml
  • plugins/two-node/evals/threat-model-tnf/cases/case-002-credential-rotation-script/annotations.yaml
  • plugins/two-node/evals/threat-model-tnf/cases/case-002-credential-rotation-script/input.yaml
  • plugins/two-node/evals/threat-model-tnf/cases/case-003-mac-fencing-lookup/annotations.yaml
  • plugins/two-node/evals/threat-model-tnf/cases/case-003-mac-fencing-lookup/input.yaml
  • plugins/two-node/evals/threat-model-tnf/cases/case-004-trivial-indentation-fix/annotations.yaml
  • plugins/two-node/evals/threat-model-tnf/cases/case-004-trivial-indentation-fix/input.yaml
  • plugins/two-node/evals/threat-model-tnf/cases/case-005-tnf-retry-bugfix/annotations.yaml
  • plugins/two-node/evals/threat-model-tnf/cases/case-005-tnf-retry-bugfix/input.yaml

Comment thread plugins/two-node/evals/cluster-diagnostic.md
@openshift-ci openshift-ci Bot added the ready-for-human-review Indicates a PR has been reviewed by automated tools and is ready for human review label Jun 16, 2026
@dhensel-rh dhensel-rh marked this pull request as ready for review June 16, 2026 18:34
@openshift-ci openshift-ci Bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jun 16, 2026
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. ready-for-human-review Indicates a PR has been reviewed by automated tools and is ready for human review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants