Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
"owner": {
"name": "openshift-eng"
},
"allowCrossMarketplaceDependenciesOn": ["claude-plugins-official"],
"allowCrossMarketplaceDependenciesOn": [
"claude-plugins-official"
],
"plugins": [
{
"name": "git",
Expand All @@ -27,7 +29,7 @@
"name": "ci",
"source": "./plugins/ci",
"description": "A plugin to work with OpenShift CI and analyze Prow job results",
"version": "0.0.39"
"version": "0.0.40"
},
{
"name": "teams",
Expand Down
2 changes: 1 addition & 1 deletion docs/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -607,7 +607,7 @@
"name": "Trigger Payload Job"
}
],
"version": "0.0.39"
"version": "0.0.40"
},
{
"commands": [
Expand Down
2 changes: 1 addition & 1 deletion plugins/ci/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "ci",
"description": "Tools for working with OpenShift CI and analyzing Prow job results",
"version": "0.0.39",
"version": "0.0.40",
"author": {
"name": "openshift"
}
Comment on lines 5 to 7

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.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Set author to the required canonical value.

The current author object does not match the required plugin manifest contract. It should be a string value: "github.com/openshift-eng".

🔧 Proposed fix
 {
   "name": "ci",
   "description": "Tools for working with OpenShift CI and analyzing Prow job results",
   "version": "0.0.40",
-  "author": {
-    "name": "openshift"
-  }
+  "author": "github.com/openshift-eng"
 }

As per coding guidelines, "Set author field to "github.com/openshift-eng" in plugin.json".

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"author": {
"name": "openshift"
}
{
"name": "ci",
"description": "Tools for working with OpenShift CI and analyzing Prow job results",
"version": "0.0.40",
"author": "github.com/openshift-eng"
}
🤖 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/.claude-plugin/plugin.json` around lines 5 - 7, The plugin
manifest's author field is using an object instead of the required canonical
string; update the "author" entry in plugins/ci/.claude-plugin/plugin.json to be
the string "github.com/openshift-eng" (replace the existing object with that
exact string value) so the plugin manifest matches the contract.

Expand Down
12 changes: 11 additions & 1 deletion plugins/ci/skills/analyze-payload/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,13 @@ Wait for all subagents to complete and collect their analysis results. For each

For each failed job, cross-reference the failure analysis from the subagent with the candidate PRs from the originating payload. Additionally, if a subagent traced the root cause to a PR outside the payload (e.g., an `openshift/release` PR that modified a CI step registry script), include that PR as a candidate — it is a regression like any other and should be scored and treated the same way as payload PRs.

**Infrastructure and platform-specific failure triage**: Before scoring candidate PRs, check whether the failure is caused by cloud provider infrastructure rather than code changes. Key indicators:
- **Cloud provider API errors**: Azure Graph API auth failures, AWS STS failures, GCP quota exhaustion — these are provider-side issues that resolve without code changes
- **Single-platform failures**: If a failure occurs on only one cloud platform (e.g., only AKS) and the candidate PR doesn't directly modify platform-specific code, the causal chain requires stronger evidence
- **Transient resolution**: If the same test passed on the same platform in a very recent payload with no relevant PR changes between the pass and failure

Apply a negative adjustment: **Platform-specific failure without mechanism**: -20 (failure occurs only on one cloud platform and the causal chain from PR to platform-specific behavior requires multiple speculative steps)

Score each (failed job, candidate PR) pair using the following weighted rubric:

| Signal | Weight | Criteria |
Expand All @@ -209,8 +216,11 @@ Score each (failed job, candidate PR) pair using the following weighted rubric:
| Multi-job correlation | +10 | The same PR is a candidate for failures in multiple independent jobs — the more jobs that point to the same PR, the stronger the signal |
| Presubmit coverage gap | +10 | The failing job tests a scenario (upgrade, FIPS, SNO, techpreview, etc.) that wasn't covered by the PR's presubmit tests |
| Single candidate | +10 | Only one PR landed in the originating payload that touches the affected component |
| Test-introduction match | +40 | The candidate PR introduced a new test (visible in its diff) and that specific test is now failing. A PR that both creates a feature and its test, where the test immediately fails, is near-certain evidence of causation. |

The maximum possible score is 170, but scores above 100 should be capped at 100. Record the numeric score for each (job, candidate PR) pair alongside the qualitative rationale.

The maximum possible score is 130, but scores above 100 should be capped at 100. Record the numeric score for each (job, candidate PR) pair alongside the qualitative rationale.
**Sub-component resolution**: For repos with 3+ PRs in the originating payload, examine each PR's changed file paths to identify sub-components. Score component exclusivity based on sub-component overlap rather than repo-level overlap. For example, in the `hypershift` repo, PRs modifying `control-plane-operator/` vs `hypershift-operator/` vs `test/` are distinct sub-components.

#### 6.2: Propose Revert Candidates

Expand Down