Skip to content

ci:payload-analysis: surface RHCOS RPM changes - #566

Merged
openshift-merge-bot[bot] merged 1 commit into
openshift-eng:mainfrom
petr-muller:trt-2612-rhcos-changes-in-snapshot
Jun 24, 2026
Merged

openshift-merge-bot[bot] merged 1 commit into
openshift-eng:mainfrom
petr-muller:trt-2612-rhcos-changes-in-snapshot

Conversation

@petr-muller

@petr-muller petr-muller commented Jun 23, 2026

Copy link
Copy Markdown
Member

The release controller API returns nodeImageStreams in changelog responses with RPM diffs showing which packages changed in RHCOS images between payloads. This data was already preserved in changelog.json but invisible to the analysis pipeline — summary.json didn't extract it, the payload-analysis skill didn't consider it, and reports didn't surface it.

RHCOS RPM changes (systemd, kernel, glibc, SELinux, etc.) can cause failures, especially on variant-isolated jobs (rhcos10-only or rhcos9-only). When no PR candidate explains a failure, RHCOS changes are a likely culprit. Unlike PRs, they can't be reverted through the normal mechanism, so they're surfaced as informational suspects rather than revert candidates.

Changes:

  • payload_snapshot.py: extract nodeImageStreams RPM diffs into summary.json per-payload rhcos_changes[] entries
  • payload-analysis/SKILL.md: pass RHCOS RPM changes to subagents as failure context, add RHCOS RPM correlation step (6.1b), add RHCOS changes section to HTML report (7.3b), extend completeness review
  • payload-results-yaml/SKILL.md: add optional rhcos_suspects[] array separate from PR candidates[]
  • payload-autodl-json/SKILL.md: add rhcos_change_suspected and rhcos_suspect_packages fields

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Added extraction of per-payload RHCOS RPM diffs and enhanced failure analysis to correlate those changes with failing jobs
    • Extended CI payload artifacts to record RHCOS correlation status and suspected RHCOS RPM packages (YAML/JSON outputs)
    • Added an “RHCOS Changes” section to HTML reports for suspected RHCOS RPM updates
  • Documentation
    • Updated skill and snapshot documentation for rhcos_changes[] and new RHCOS suspect fields/sections
  • Tests
    • Added fixtures and validation coverage for rhcos_suspects, including missing-field failure cases
  • Chores
    • Bumped the CI plugin version to 0.0.53

@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 23, 2026
@openshift-ci

openshift-ci Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

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 needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. approved Indicates a PR has been approved by an approver from all required OWNERS files. labels Jun 23, 2026
@coderabbitai

coderabbitai Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Walkthrough

The PR adds end-to-end RHCOS RPM change correlation to the CI plugin. payload_snapshot.py gains _extract_rhcos_changes() to populate rhcos_changes[] per payload entry from changelog nodeImageStreams. payload-analysis/SKILL.md is extended with new steps for subagent correlation, suspect promotion, YAML output, HTML reporting, and completeness checks. The payload-results-yaml validator and payload-autodl-json schema gain new RHCOS suspect fields with tests. The plugin is bumped to version 0.0.53.

Changes

RHCOS RPM Suspect Correlation Feature

Layer / File(s) Summary
RHCOS data extraction from payload snapshot
plugins/ci/skills/payload-snapshot/SKILL.md, plugins/ci/skills/payload-snapshot/scripts/payload_snapshot.py
Payload snapshot now extracts per-RHCOS-variant RPM diff data from release-controller changelog nodeImageStreams and attaches rhcos_changes[] to each payload entry via new _extract_rhcos_changes() helper; updates generated AGENTS.md and SKILL.md schema docs.
Payload analysis workflow for RHCOS correlation
plugins/ci/skills/payload-analysis/SKILL.md
Adds Step 3.7 (extract rhcos_changes[] from summary), Step 4 subagent prompt extensions with rhcos_rpm_correlation/rhcos_rpm_suspect_packages output fields, Step 6.1b (promote RHCOS suspects as non-revert candidates), Step 6.5 (include rhcos_suspects[] in YAML), Step 7.3b (render suspect table and collapsible RPM diffs in HTML), and Step 9 completeness checks.
Payload-results YAML schema for RHCOS suspects
plugins/ci/skills/payload-results-yaml/SKILL.md
Adds optional top-level rhcos_suspects[] section to schema and example YAML, documenting per-suspect fields (rhcos_tag, package, versions, failing_jobs, rationale) and when the section is populated by payload-analysis.
RHCOS suspect validation and testing infrastructure
plugins/ci/skills/payload-results-yaml/scripts/validate.py, plugins/ci/skills/payload-results-yaml/scripts/test_validate.py, plugins/ci/skills/payload-results-yaml/scripts/testdata/*
Extends validator with REQUIRED_RHCOS_SUSPECT_FIELDS constant, per-entry field validation logic, and suspect count reporting in success output. Adds two new test validation cases and valid/invalid YAML fixtures for RHCOS suspects.
RHCOS suspect fields in autodl JSON schema
plugins/ci/skills/payload-autodl-json/SKILL.md
Extends generated autodl JSON schema with rhcos_change_suspected and rhcos_suspect_packages fields immediately after revert_pr_status, populates example rows, and adds documentation section describing field types and expected values.
Plugin version bump to 0.0.53
plugins/ci/.claude-plugin/plugin.json, .claude-plugin/marketplace.json, docs/index.html
Bumps the ci plugin version from 0.0.52 to 0.0.53 across all three version-tracking files.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • openshift-eng/ai-helpers#519: Adds rhcos_version to payload_snapshot.py output, which is the same file this PR extends with rhcos_changes[] extraction from nodeImageStreams.
  • openshift-eng/ai-helpers#360: Both PRs modify plugins/ci/skills/payload-analysis/SKILL.md workflow and structured output—this PR adds RHCOS RPM correlation fields while the other adds retry-attempt URL propagation—so they are related at the skill-definition level.

Suggested labels

lgtm

Suggested reviewers

  • LuboTerifaj
  • bryan-cox

Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 error)

Check name Status Explanation Resolution
No Assumed Git Remote Names ❌ Error New code in payload_snapshot.py uses hardcoded 'origin' remote in git fetch command (line 631) without discovering it first via git remote discovery. Replace hardcoded 'origin' with discovered remote name. Use git remote -v or similar to discover remote names before using them in git commands.
✅ Passed checks (9 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 objective of the PR: making RHCOS RPM changes visible in the payload analysis pipeline, which aligns with all the file changes across payload snapshot, payload analysis, results YAML, and autodl-json skills.
Docstring Coverage ✅ Passed Docstring coverage is 83.33% which is sufficient. The required threshold is 80.00%.
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 Real People Names In Style References ✅ Passed No real people names found used as style references or examples in plugin commands, skill documentation, or example prompts. Only references to "Claude" are technical (filename CLAUDE.md and tool a...
Git Push Safety Rules ✅ Passed No git push commands, force push operations, or pushes to main/master found. All git subprocess calls are read-only operations (clone, fetch, merge-base, diff). PR only modifies skill documentation...
No Untrusted Mcp Servers ✅ Passed This PR does not introduce any MCP server installations from untrusted or any sources. Changes are limited to documentation, Python scripts for RHCOS RPM analysis, and test fixtures. No new .mcp.js...
Ai-Helpers Overlap Detection ✅ Passed PR #566 modifies only the payload analysis pipeline skills (payload-snapshot, payload-analysis, payload-autodl-json, payload-results-yaml). No open PRs modify these files; other open PRs target dif...
✨ 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/ci/skills/payload-analysis/SKILL.md

markdownlint-cli2 v0.22.1 (markdownlint v0.40.0)
Error: Unable to use configuration file '/coderabbit-0.markdownlint-cli2.jsonc'; ENOENT: no such file or directory, open '/coderabbit-0.markdownlint-cli2.jsonc'
at throwForConfigurationFile (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:48:9)
at readOptionsOrConfig (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:169:5)
at async main (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:927:21)
at async file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2-bin.mjs:14:22 {
[cause]: Error: ENOENT: no such file or directory, open '/coderabbit-0.markdownlint-cli2.jsonc'
at async open (node:internal/fs/promises:640:25)
at async Object.readFile (node:internal/fs/promises:1287:14)
at async readOptionsOrConfig (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:141:17)
at async main (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:927:21)
at async file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2-bin.mjs:14:22 {
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: '/coderabbit-0.markdownlint-cli2.jsonc'
}
}

plugins/ci/skills/payload-snapshot/SKILL.md

markdownlint-cli2 v0.22.1 (markdownlint v0.40.0)
Error: Unable to use configuration file '/coderabbit-3.markdownlint-cli2.jsonc'; ENOENT: no such file or directory, open '/coderabbit-3.markdownlint-cli2.jsonc'
at throwForConfigurationFile (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:48:9)
at readOptionsOrConfig (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:169:5)
at async main (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:927:21)
at async file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2-bin.mjs:14:22 {
[cause]: Error: ENOENT: no such file or directory, open '/coderabbit-3.markdownlint-cli2.jsonc'
at async open (node:internal/fs/promises:640:25)
at async Object.readFile (node:internal/fs/promises:1287:14)
at async readOptionsOrConfig (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:141:17)
at async main (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:927:21)
at async file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2-bin.mjs:14:22 {
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: '/coderabbit-3.markdownlint-cli2.jsonc'
}
}

plugins/ci/skills/payload-autodl-json/SKILL.md

markdownlint-cli2 v0.22.1 (markdownlint v0.40.0)
Error: Unable to use configuration file '/coderabbit-1.markdownlint-cli2.jsonc'; ENOENT: no such file or directory, open '/coderabbit-1.markdownlint-cli2.jsonc'
at throwForConfigurationFile (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:48:9)
at readOptionsOrConfig (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:169:5)
at async main (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:927:21)
at async file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2-bin.mjs:14:22 {
[cause]: Error: ENOENT: no such file or directory, open '/coderabbit-1.markdownlint-cli2.jsonc'
at async open (node:internal/fs/promises:640:25)
at async Object.readFile (node:internal/fs/promises:1287:14)
at async readOptionsOrConfig (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:141:17)
at async main (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:927:21)
at async file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2-bin.mjs:14:22 {
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: '/coderabbit-1.markdownlint-cli2.jsonc'
}
}

  • 1 others

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

@petr-muller
petr-muller force-pushed the trt-2612-rhcos-changes-in-snapshot branch from e5b1a2a to 801b3e5 Compare June 23, 2026 13:35
@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jun 23, 2026
@petr-muller
petr-muller force-pushed the trt-2612-rhcos-changes-in-snapshot branch 2 times, most recently from fe98540 to 3a428b9 Compare June 23, 2026 13:40

@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: 2

Caution

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

⚠️ Outside diff range comments (1)
plugins/ci/skills/payload-analysis/SKILL.md (1)

203-224: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Use tag when looking up payload entries.

summary.json.payloads[] entries are written with a tag field, not payload_tag, so this lookup will never match and the new RHCOS RPM correlation path will be skipped.

Suggested fix
-> Read `<summary_json_path>` and find the entry in `payloads[]` whose `payload_tag` equals `<originating_payload_tag>`.
+> Read `<summary_json_path>` and find the entry in `payloads[]` whose `tag` equals `<originating_payload_tag>`.
🤖 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 `@plugins/ci/skills/payload-analysis/SKILL.md` around lines 203 - 224, In the
RHCOS RPM changes section, the instruction references a non-existent field
`payload_tag` when describing how to look up entries in the `payloads[]` array.
Replace the phrase "whose `payload_tag` equals" with "whose `tag` equals" to
correctly reference the actual JSON field name used in summary.json, ensuring
the lookup logic will correctly match payload entries against the
originating_payload value.
🤖 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/ci/skills/payload-results-yaml/scripts/validate.py`:
- Around line 64-78: The validation code for rhcos_suspects uses
data.get("rhcos_suspects") which cannot distinguish between a missing key and an
explicitly null value in YAML, allowing malformed null entries to pass
validation. Replace the data.get() call with a check using the in operator to
explicitly verify key presence, and add validation to reject cases where the key
exists but its value is None (from null in YAML). Ensure that if rhcos_suspects
is present, it must be a non-null list, treating explicit null values as an
error rather than treating them as an absent field.

In `@plugins/ci/skills/payload-snapshot/scripts/payload_snapshot.py`:
- Around line 1866-1880: The _extract_rhcos_changes() function is not tolerant
of None or empty changelogs since it calls changelog.get() without first
checking if changelog is None, and it also appends entries to results even when
the changed, added, and removed dictionaries are all empty. Add a guard clause
at the start of _extract_rhcos_changes() to return an empty list if changelog is
None or falsy, and add an additional condition before appending to results that
verifies at least one of the changed, added, or removed dictionaries contains
data to avoid creating empty/bogus entries.

---

Outside diff comments:
In `@plugins/ci/skills/payload-analysis/SKILL.md`:
- Around line 203-224: In the RHCOS RPM changes section, the instruction
references a non-existent field `payload_tag` when describing how to look up
entries in the `payloads[]` array. Replace the phrase "whose `payload_tag`
equals" with "whose `tag` equals" to correctly reference the actual JSON field
name used in summary.json, ensuring the lookup logic will correctly match
payload entries against the originating_payload value.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 771adddb-e790-4eee-a859-c8343081bdb4

📥 Commits

Reviewing files that changed from the base of the PR and between 50e6ba4 and 3a428b9.

📒 Files selected for processing (12)
  • .claude-plugin/marketplace.json
  • docs/index.html
  • plugins/ci/.claude-plugin/plugin.json
  • plugins/ci/skills/payload-analysis/SKILL.md
  • plugins/ci/skills/payload-autodl-json/SKILL.md
  • plugins/ci/skills/payload-results-yaml/SKILL.md
  • plugins/ci/skills/payload-results-yaml/scripts/test_validate.py
  • plugins/ci/skills/payload-results-yaml/scripts/testdata/invalid_rhcos_suspects.yaml
  • plugins/ci/skills/payload-results-yaml/scripts/testdata/valid_with_rhcos_suspects.yaml
  • plugins/ci/skills/payload-results-yaml/scripts/validate.py
  • plugins/ci/skills/payload-snapshot/SKILL.md
  • plugins/ci/skills/payload-snapshot/scripts/payload_snapshot.py

Comment thread plugins/ci/skills/payload-results-yaml/scripts/validate.py
Comment thread plugins/ci/skills/payload-snapshot/scripts/payload_snapshot.py
@petr-muller
petr-muller force-pushed the trt-2612-rhcos-changes-in-snapshot branch from 3a428b9 to 47d663a Compare June 23, 2026 14:48
@petr-muller petr-muller changed the title ci: surface RHCOS RPM changes in payload analysis ci:payload-analysis: surface RHCOS RPM changes in payload analysis Jun 23, 2026
@petr-muller petr-muller changed the title ci:payload-analysis: surface RHCOS RPM changes in payload analysis ci:payload-analysis: surface RHCOS RPM changes Jun 23, 2026
@petr-muller
petr-muller marked this pull request as ready for review June 23, 2026 14:48
@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 23, 2026
@openshift-ci
openshift-ci Bot requested review from Prashanth684 and rvanderp3 June 23, 2026 14:48

@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: 2

Caution

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

⚠️ Outside diff range comments (1)
plugins/ci/skills/payload-analysis/SKILL.md (1)

203-225: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Align the subagent prompt with the new OS-level correlation scope.

The verbatim Step 4 prompt omits MCO and Ignition, but Step 6.1b now treats both as OS-level correlation signals. That gap can make subagents miss the new RHCOS suspect path for those failures.

Suggested prompt fix
-> **RHCOS RPM changes**: Read `<summary_json_path>` and find the entry in `payloads[]` whose `tag` equals `<originating_payload_tag>`. If that entry has an `rhcos_changes[]` array, look up the RHCOS variant matching this job's `rhcos_version` using the tag mapping: `rhel-coreos` → `rhcos9`/`rhcos9-default`, `rhel-coreos-10` → `rhcos10`/`rhcos10-default`, both apply to `rhcos9_10`. Check whether any changed, added, or removed RPM packages overlap with the failure's root cause. If the failure involves OS-level components (kernel, bootloader, systemd, SELinux, rpm-ostree, cri-o, crun, runc, networking) and matching packages changed, note the potential correlation in your ANALYSIS_RESULT.
+> **RHCOS RPM changes**: Read `<summary_json_path>` and find the entry in `payloads[]` whose `tag` equals `<originating_payload_tag>`. If that entry has an `rhcos_changes[]` array, look up the RHCOS variant matching this job's `rhcos_version` using the tag mapping: `rhel-coreos` → `rhcos9`/`rhcos9-default`, `rhel-coreos-10` → `rhcos10`/`rhcos10-default`, both apply to `rhcos9_10`. Check whether any changed, added, or removed RPM packages overlap with the failure's root cause. If the failure involves OS-level components (kernel, bootloader, systemd, SELinux, rpm-ostree, cri-o, crun, runc, networking, MCO, Ignition) and matching packages changed, note the potential correlation in your ANALYSIS_RESULT.
🤖 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 `@plugins/ci/skills/payload-analysis/SKILL.md` around lines 203 - 225, The
RHCOS RPM changes section lists OS-level components to check for correlation
(kernel, bootloader, systemd, SELinux, rpm-ostree, cri-o, crun, runc,
networking), but the RHCOS 10 context section later mentions MCO and Ignition as
additional OS-level components to consider. Update the component list in the
RHCOS RPM changes section to include MCO and Ignition so that subagents check
these components when analyzing failures, ensuring consistency across all
sections of the skill documentation.
🤖 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/ci/skills/payload-analysis/SKILL.md`:
- Around line 451-491: The RHCOS Changes section 7.3b currently states to
include RPM diffs from "any payload in the chain" but Step 3.7 only extracts
rhcos_changes[] from the failed job's originating payload. Update the
description in section 7.3b to clarify that both the suspected RHCOS RPM changes
and the full RPM diffs should be scoped only to the originating payload that
caused the failure, and update the variable placeholder from generic
originating_payload_tag to more specifically indicate this is the failed job's
originating payload, ensuring the documentation correctly reflects that
unrelated payload changes in the chain will not be surfaced in this report.
- Around line 616-617: The completeness checklist item for RHCOS RPM correlation
(currently listed as item 5 "Missing RHCOS RPM correlation") only covers the
variant-isolation and OS-level component overlap checks, but does not account
for the fallback PR-confidence case described in Step 6.1b. Add an explicit
checklist item or expand the existing item to include checking whether RHCOS
changes should be treated as the most plausible explanation when no PR candidate
scores reach the 50% confidence threshold. This ensures the reviewer evaluates
the fallback logic path that treats RHCOS changes as suspects when other
PR-based explanations fall below the confidence threshold.

---

Outside diff comments:
In `@plugins/ci/skills/payload-analysis/SKILL.md`:
- Around line 203-225: The RHCOS RPM changes section lists OS-level components
to check for correlation (kernel, bootloader, systemd, SELinux, rpm-ostree,
cri-o, crun, runc, networking), but the RHCOS 10 context section later mentions
MCO and Ignition as additional OS-level components to consider. Update the
component list in the RHCOS RPM changes section to include MCO and Ignition so
that subagents check these components when analyzing failures, ensuring
consistency across all sections of the skill documentation.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 1d0505c3-ac31-43a2-b354-5154cb20f43b

📥 Commits

Reviewing files that changed from the base of the PR and between 3a428b9 and 47d663a.

📒 Files selected for processing (12)
  • .claude-plugin/marketplace.json
  • docs/index.html
  • plugins/ci/.claude-plugin/plugin.json
  • plugins/ci/skills/payload-analysis/SKILL.md
  • plugins/ci/skills/payload-autodl-json/SKILL.md
  • plugins/ci/skills/payload-results-yaml/SKILL.md
  • plugins/ci/skills/payload-results-yaml/scripts/test_validate.py
  • plugins/ci/skills/payload-results-yaml/scripts/testdata/invalid_rhcos_suspects.yaml
  • plugins/ci/skills/payload-results-yaml/scripts/testdata/valid_with_rhcos_suspects.yaml
  • plugins/ci/skills/payload-results-yaml/scripts/validate.py
  • plugins/ci/skills/payload-snapshot/SKILL.md
  • plugins/ci/skills/payload-snapshot/scripts/payload_snapshot.py
✅ Files skipped from review due to trivial changes (5)
  • plugins/ci/.claude-plugin/plugin.json
  • .claude-plugin/marketplace.json
  • docs/index.html
  • plugins/ci/skills/payload-results-yaml/scripts/testdata/invalid_rhcos_suspects.yaml
  • plugins/ci/skills/payload-snapshot/SKILL.md
🚧 Files skipped from review as they are similar to previous changes (6)
  • plugins/ci/skills/payload-results-yaml/scripts/test_validate.py
  • plugins/ci/skills/payload-results-yaml/scripts/testdata/valid_with_rhcos_suspects.yaml
  • plugins/ci/skills/payload-autodl-json/SKILL.md
  • plugins/ci/skills/payload-results-yaml/scripts/validate.py
  • plugins/ci/skills/payload-snapshot/scripts/payload_snapshot.py
  • plugins/ci/skills/payload-results-yaml/SKILL.md

Comment thread plugins/ci/skills/payload-analysis/SKILL.md
Comment thread plugins/ci/skills/payload-analysis/SKILL.md
The release controller API returns nodeImageStreams in changelog
responses with RPM diffs showing which packages changed in RHCOS
images between payloads. This data was already preserved in
changelog.json but invisible to the analysis pipeline.

Extract RHCOS RPM diffs into summary.json, pass them to subagents
as failure investigation context, and surface correlated packages
as "RHCOS RPM suspects" in reports. Unlike PR candidates, RHCOS
changes cannot be reverted — they are informational for manual
investigation by the RHCOS or platform team.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@petr-muller
petr-muller force-pushed the trt-2612-rhcos-changes-in-snapshot branch from 47d663a to d8446f2 Compare June 23, 2026 15:13

@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.

♻️ Duplicate comments (2)
plugins/ci/skills/payload-analysis/SKILL.md (2)

616-617: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Add the fallback PR-confidence case to the completeness checklist.

Step 6.1b (line 323) documents a fourth condition for RHCOS RPM correlation: when no PR candidate scores reach 50%, RHCOS changes become the most plausible explanation. The completeness checklist at lines 616–617 currently covers only variant-isolation and OS-level overlap, missing this fallback path.

Suggested fix
- 5. **Missing RHCOS RPM correlation**: If RHCOS RPM changes exist in the originating payload and failures are variant-isolated or involve OS-level components, was the correlation checked? Were relevant packages surfaced as suspects?
+ 5. **Missing RHCOS RPM correlation**: If RHCOS RPM changes exist in the originating payload and failures are variant-isolated, involve OS-level components, or have no high-confidence PR candidates, was the correlation checked? Were relevant packages surfaced as suspects?
🤖 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 `@plugins/ci/skills/payload-analysis/SKILL.md` around lines 616 - 617, The
completeness checklist for Missing RHCOS RPM correlation (at lines 616-617) is
incomplete and missing a documented condition. Add a fourth bullet point or
condition to the checklist that covers the fallback case where no PR candidate
scores reach 50%, making RHCOS changes the most plausible explanation. Reference
the condition documented in step 6.1b (line 323) and ensure the checklist now
covers all three conditions: variant-isolation, OS-level overlap, and this
PR-confidence fallback scenario where low PR scores shift focus to RHCOS
changes.

451-491: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Scope the RHCOS diff report to the originating payload that caused the failure.

Line 453 states "Include this section after the failed job details when any payload in the chain has RHCOS RPM changes." However, Step 3.7 (line 172–186) only extracts rhcos_changes[] from the failed job's originating payload, and the HTML template at line 476 specifically references {originating_payload_tag}. This inconsistency can blur which payload actually introduced the suspect change.

Update the description to clarify that RHCOS diffs are scoped to the originating payload only.

Suggested fix
- Include this section after the failed job details when any payload in the chain has RHCOS RPM changes. If RHCOS RPM suspects were identified (Step 6.1b), show them prominently first, then include the full RPM diff in a collapsible section.
+ Include this section after the failed job details when the failed job's originating payload has RHCOS RPM changes. If RHCOS RPM suspects were identified (Step 6.1b), show them prominently first, then include the full RPM diff in a collapsible section.

Also update line 474 for clarity:

- Always include full RPM diffs when RHCOS changes exist in any originating payload
+ Always include full RPM diffs when RHCOS changes exist for the originating payload
🤖 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 `@plugins/ci/skills/payload-analysis/SKILL.md` around lines 451 - 491, The
description in section 7.3b (line 453) states that RHCOS RPM diffs are included
when "any payload in the chain" has changes, which contradicts the actual
implementation that only extracts rhcos_changes from the failed job's
originating payload (Step 3.7) and references {originating_payload_tag} in the
template. Update the description at line 453 to clarify that RHCOS RPM diffs are
scoped specifically to the originating payload of the failed job, not all
payloads in the chain. Also update line 474 for consistency to make the scope
explicit and match the actual data extraction behavior.
🤖 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.

Duplicate comments:
In `@plugins/ci/skills/payload-analysis/SKILL.md`:
- Around line 616-617: The completeness checklist for Missing RHCOS RPM
correlation (at lines 616-617) is incomplete and missing a documented condition.
Add a fourth bullet point or condition to the checklist that covers the fallback
case where no PR candidate scores reach 50%, making RHCOS changes the most
plausible explanation. Reference the condition documented in step 6.1b (line
323) and ensure the checklist now covers all three conditions:
variant-isolation, OS-level overlap, and this PR-confidence fallback scenario
where low PR scores shift focus to RHCOS changes.
- Around line 451-491: The description in section 7.3b (line 453) states that
RHCOS RPM diffs are included when "any payload in the chain" has changes, which
contradicts the actual implementation that only extracts rhcos_changes from the
failed job's originating payload (Step 3.7) and references
{originating_payload_tag} in the template. Update the description at line 453 to
clarify that RHCOS RPM diffs are scoped specifically to the originating payload
of the failed job, not all payloads in the chain. Also update line 474 for
consistency to make the scope explicit and match the actual data extraction
behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 099c8dd7-99b9-4e02-8c8e-344f8d13cacb

📥 Commits

Reviewing files that changed from the base of the PR and between 47d663a and d8446f2.

📒 Files selected for processing (12)
  • .claude-plugin/marketplace.json
  • docs/index.html
  • plugins/ci/.claude-plugin/plugin.json
  • plugins/ci/skills/payload-analysis/SKILL.md
  • plugins/ci/skills/payload-autodl-json/SKILL.md
  • plugins/ci/skills/payload-results-yaml/SKILL.md
  • plugins/ci/skills/payload-results-yaml/scripts/test_validate.py
  • plugins/ci/skills/payload-results-yaml/scripts/testdata/invalid_rhcos_suspects.yaml
  • plugins/ci/skills/payload-results-yaml/scripts/testdata/valid_with_rhcos_suspects.yaml
  • plugins/ci/skills/payload-results-yaml/scripts/validate.py
  • plugins/ci/skills/payload-snapshot/SKILL.md
  • plugins/ci/skills/payload-snapshot/scripts/payload_snapshot.py
✅ Files skipped from review due to trivial changes (7)
  • plugins/ci/.claude-plugin/plugin.json
  • plugins/ci/skills/payload-results-yaml/scripts/testdata/valid_with_rhcos_suspects.yaml
  • .claude-plugin/marketplace.json
  • plugins/ci/skills/payload-results-yaml/scripts/test_validate.py
  • plugins/ci/skills/payload-snapshot/SKILL.md
  • docs/index.html
  • plugins/ci/skills/payload-results-yaml/scripts/testdata/invalid_rhcos_suspects.yaml
🚧 Files skipped from review as they are similar to previous changes (4)
  • plugins/ci/skills/payload-snapshot/scripts/payload_snapshot.py
  • plugins/ci/skills/payload-autodl-json/SKILL.md
  • plugins/ci/skills/payload-results-yaml/SKILL.md
  • plugins/ci/skills/payload-results-yaml/scripts/validate.py

@petr-muller

Copy link
Copy Markdown
Member Author

/test ?

@petr-muller

Copy link
Copy Markdown
Member Author

/test eval-payload-analysis-minimal

@petr-muller

Copy link
Copy Markdown
Member Author

/test eval-payload-analysis

@petr-muller

petr-muller commented Jun 24, 2026

Copy link
Copy Markdown
Member Author

There does not seem to be any good eval candidate available at the moment. I was looking into using TRT-2723 but it is hard to reconstruct what exactly happened there and when, because affected problematic payloads are now GC'd and the snapshots we have do not correspond with what is described in the card:

5.0.0-0.ci-2026-06-17-115849 bumped cri-o from 1.35.4 to 1.36.1

But that was a green payload and therefore we do not have its snapshot.

Our first alert about TRT-2723 seems to be 5.0.0-0.ci-2026-06-18-115849 and we do have its snapshot but it strangely shows cri-o as downgraded:

{
      "name": "Red Hat Enterprise Linux CoreOS 10.2",
      "tag": "rhel-coreos-10",
      "rpmDiff": {
        "changed": {
          ...
          "cri-o": {
            "old": "1.36.1-2.rhaos5.0.git5d8e346.el10",
            "new": "1.35.2-5.rhaos4.22.git35f6dd7.el10"
          },

This makes it somewhat hard to reconstruct what actually happened and how exactly was cri-o part of the issue, I think we need to wait for something clearer.

The evals show mistakes in cases 006 and 007, but they do not seem to be caused by the changes in this PR, the same flaws are present in the latest run from #556 as well.

/cc @smg247 @stbenjam

@openshift-ci
openshift-ci Bot requested review from smg247 and stbenjam June 24, 2026 16:06
@stbenjam

Copy link
Copy Markdown
Member

It is unfortunate evals are so expensive, I am concerned by the reduction in accuracy but the only way to prove it, is to spend a ridiculous amount of money - or just wait to watch the agent's performance over time.

What are the chances the payload snapshot might be able to get the RPM changelog from the payload under test? I guess it won't work in Prow without nested podman, unless we can somehow extract the rpmdb and use rpm in the container itself

podman run --entrypoint /bin/rpm `oc adm release info 4.21.10 --image-for rhel-coreos` -q --changelog vim-minimal | head -n 20
* Thu Mar 19 2026 Bryan Mason <bmason@redhat.com> - 2:8.2.2637-22.2
- CVE-2026-25749 vim: Heap Overflow in Vim
- CVE-2026-28417 vim: Vim: Arbitrary code execution via OS command injection in the netrw plugin
- CVE-2026-28421 vim: Vim: Denial of service and information disclosure via crafted swap file
- CVE-2026-33412 vim: Vim: Arbitrary code execution via command injection in glob() function

@stbenjam

Copy link
Copy Markdown
Member

/lgtm

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Jun 24, 2026
@openshift-ci

openshift-ci Bot commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: petr-muller, stbenjam

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-merge-bot
openshift-merge-bot Bot merged commit 0ddec63 into openshift-eng:main Jun 24, 2026
7 checks passed
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. lgtm Indicates that a PR is ready to be merged.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants