Skip to content

OTA-1963: skills: Add cluster-update skills (update-advisor, product-lifecycle)#6

Merged
openshift-merge-bot[bot] merged 1 commit into
openshift:mainfrom
harche:skills/cluster-update
May 11, 2026
Merged

OTA-1963: skills: Add cluster-update skills (update-advisor, product-lifecycle)#6
openshift-merge-bot[bot] merged 1 commit into
openshift:mainfrom
harche:skills/cluster-update

Conversation

@harche
Copy link
Copy Markdown
Contributor

@harche harche commented Apr 21, 2026

Summary

  • Adds cluster-update/update-advisor/ — OTA upgrade advisor skill ported from cluster-version-operator/lightspeed/skills/ota-upgrade-advisor/
  • Adds cluster-update/product-lifecycle/ — Red Hat PLCC lifecycle query skill
  • Adds cluster-update/OWNERS and cluster-update/README.md

Reviewers

These skills relate to the Cluster Version Operator / OTA domain. Tagging approvers familiar with upgrade advisor workflows.

Test plan

  • Verify update-advisor SKILL.md frontmatter is valid (name, description, allowed-tools)
  • Verify cross-references to openshift-docs, jira, product-lifecycle skill names are correct
  • Verify product-lifecycle SKILL.md PLCC API endpoint is reachable
  • Smoke-test skill loading in a Claude Code session

Note: These are initial drafts. They will evolve as we test and refine them based on real-world usage.

🤖 Generated with Claude Code

@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 Apr 21, 2026
@openshift-ci openshift-ci Bot requested review from mrunalp and wking April 21, 2026 20:29
@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Apr 21, 2026
## Endpoint

```
GET https://access.redhat.com/product-life-cycles/api/v1/products?name=<substring>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nit: there's now a v2 lifecycle API at https://access.redhat.com/product-life-cycles/api/v2/products . It has a slightly different schema, e.g.:

$ diff -u3 <(curl -s 'https://access.redhat.com/product-life-cycles/api/v1/products?name=OpenShift+Container+Platform' | jq -S .) <(curl -s 'https://access.redhat.com/product-life-cycles/api/v2/products?name=OpenShift+Container+Platform' | jq -S .) | head -n30
--- /dev/fd/63	2026-04-21 13:36:54.495565201 -0700
+++ /dev/fd/62	2026-04-21 13:36:54.495565201 -0700
@@ -61,27 +61,23 @@
       "is_retired": false,
       "link": "https://access.redhat.com/support/policy/updates/openshift/",
       "name": "Red Hat OpenShift Container Platform",
+      "opl_uuid": null,
       "package": null,
       "policies": "https://access.redhat.com/site/support/policy/updates/openshift/policies/",
       "release_cadence": "4 months ",
       "show_final_minor_release": false,
-      "show_last_minor_release": false,
       "show_openshift_compatibility": false,
       "uuid": "9bbc4758-50e0-4b73-89dc-2bae80f1d394",
       "versions": [
         {
           "additional_text": "",
           "extra_dependences": [],
-          "extra_header_value": null,
           "final_minor_release": null,
-          "last_minor_release": null,
           "name": "4.21",
           "openshift_compatibility": null,
           "phases": [
             {
               "additional_text": "",
-              "date": "2026-02-03T00:00:00.000Z",
-              "date_format": "date",
               "end_date": "2026-02-03T00:00:00.000Z",
               "end_date_format": "date",

We probably want the skill to use the v2 API, but I'm agnostic about whether we port from v1 to v2 in this pull or, after merging this as it stands, in follow-up pulls.

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.

Thanks, we will introduce v2 usage in #13

|---|---|
| `"Full Support"` | Active development, bug fixes, security patches |
| `"Maintenance Support"` | Critical/security fixes only, no new features |
| `"End of life"` | No fixes, no support — must upgrade |
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

$ curl -s https://access.redhat.com/product-life-cycles/api/v1/products | jq -r '.data[].versions[].type' | sort | uniq -c | sort -n
     12 
     39 End of Maintenance
    119 Extended Support
    156 Maintenance Support
    257 Full Support
    875 End of life

I'm not clear on what End of Maintenance means. Extended Support is similar to Maintenance Support, but might come with additional restrictions like the need to purchase add-ons. Would be nice if there were OpenAPI schemas for this endpoint, and maybe there are, and I'm just not aware of them.

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.

Good catch. I've updated the table to include all six type values the API actually returns: Full Support, Maintenance Support, End of Maintenance, Extended Support, End of life, and empty string. Verified against the live API.

Agreed on the OpenAPI schemas, I'm not aware of any either.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Resolved by 23c5759 -> 804b96b adding coverage for End of Maintenance, Extended Support, and the empty string; thanks 👍


| Field | Type | Description |
|---|---|---|
| `name` | string | Phase name (e.g., `"General availability"`, `"Full support"`, `"Maintenance support"`) |
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

$ curl -s https://access.redhat.com/product-life-cycles/api/v1/products | jq -r '.data[].versions[].phases[].name' | sort | uniq -c | sort -n
      3 Migration support
      5 Retired
     18 Extended life cycle support (ELS) Term 3 add-on
     18 Third-party certification period
     26 Maintenance support 2
     29 Extended life cycle support (ELS) Term 2 add-on
     36 Maintenance Support 1
     38 Extended life cycle support (ELS) 2
     75 Extended life cycle support (ELS) add-on
     85 Extended life cycle support (ELS) 1
    125 Extended life phase
    298 Extended update support Term 3
    331 End of Life
    453 Extended update support Term 2
    583 Extended update support
   1161 Maintenance support
   1289 Full support
   1458 General availability

Maybe the API needs a link from each phase to docs about what that phase means for that product? Because that seems like a lot of phases that aren't all that clear to me as someone not terribly familiar with a bunch of these products.

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.

agree, I will update that file. Thanks.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Resolved by 23c5759 -> 804b96b adding coverage for Extended life phase, Extended update support Term 2, Retired, End of Life, Migration support, Third-party certification period, etc.; thanks 👍

## Search Tips

1. **Be specific with `?name=`** — `"logging+for+Red+Hat+OpenShift"` is better than `"logging"`
2. **Try former names** — if `"OpenShift Logging"` returns nothing, the product may have been renamed
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

and former_names didn't get populated? Seems like this would be a server-side bug, and I dunno of we want to try and coach the clients around it.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Resolved by 23c5759 -> 804b96b moving from "Try former names" (which sounded to me like "make additional requests") to "Check former_names" (which is more clearly about how to process the results of the original request). Thanks! 👍

@wking
Copy link
Copy Markdown
Member

wking commented Apr 21, 2026

/retitle OTA-1963: WIP: skills: Add cluster-update skills (update-advisor, product-lifecycle)

@openshift-ci openshift-ci Bot changed the title [WIP] skills: Add cluster-update skills (update-advisor, product-lifecycle) OTA-1963: WIP: skills: Add cluster-update skills (update-advisor, product-lifecycle) Apr 21, 2026
@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 Apr 21, 2026
@openshift-ci-robot
Copy link
Copy Markdown

openshift-ci-robot commented Apr 21, 2026

@harche: This pull request references OTA-1963 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 story to target the "5.0.0" version, but no target version was set.

Details

In response to this:

Summary

  • Adds cluster-update/update-advisor/ — OTA upgrade advisor skill ported from cluster-version-operator/lightspeed/skills/ota-upgrade-advisor/
  • Adds cluster-update/product-lifecycle/ — Red Hat PLCC lifecycle query skill
  • Adds cluster-update/OWNERS and cluster-update/README.md

Reviewers

These skills relate to the Cluster Version Operator / OTA domain. Tagging approvers familiar with upgrade advisor workflows.

Test plan

  • Verify update-advisor SKILL.md frontmatter is valid (name, description, allowed-tools)
  • Verify cross-references to openshift-docs, jira, product-lifecycle skill names are correct
  • Verify product-lifecycle SKILL.md PLCC API endpoint is reachable
  • Smoke-test skill loading in a Claude Code session

Note: These are initial drafts. They will evolve as we test and refine them based on real-world usage.

🤖 Generated with Claude Code

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-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Apr 21, 2026
@@ -0,0 +1,222 @@
---
name: product-lifecycle
description: Query Red Hat Product Life Cycle data (PLCC) for support phases, end-of-life dates, and OpenShift version compatibility. Use when evaluating whether installed operators or layered products are supported on a given OCP version, approaching end of life, or need upgrading before a cluster upgrade. Also use when the user asks about product support status, EOL dates, or lifecycle phases for any Red Hat product.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nit, I dug around a bit, and seems like PLCC used to stand for "Product Life Cycle Checker". Not sure that acronym is all that useful for AI though. Maybe just use PLC? Or drop the acronym entirely?

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.

agree, thanks.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Resolved by 23c5759 -> 804b96b dropping "PLCC"; thanks 👍

---
name: product-lifecycle
description: Query Red Hat Product Life Cycle data (PLCC) for support phases, end-of-life dates, and OpenShift version compatibility. Use when evaluating whether installed operators or layered products are supported on a given OCP version, approaching end of life, or need upgrading before a cluster upgrade. Also use when the user asks about product support status, EOL dates, or lifecycle phases for any Red Hat product.
allowed-tools: Bash(curl:*)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Spec:

h2. allowed-tools field
The optional allowed-tools field:

  • A space-separated string of tools that are pre-approved to run
  • Experimental. Support for this field may vary between agent implementations
Example:
allowed-tools: Bash(git:*) Bash(jq:*) Read

That seems... not all that useful (e.g. what is the significance of the :*?). What does Read mean? The Experimental warning suggests they're not all that confident in being able to cover what the various implementations might choose to do with this anyway. Dropping to Claude docs:

h2. Pre-approve tools for a skill
The allowed-tools field grants permission for the listed tools while the skill is active, so Claude can use them without prompting you for approval. It does not restrict which tools are available: every tool remains callable, and your permission settings still govern tools that are not listed.
This skill lets Claude run git commands without per-use approval whenever you invoke it:

name: commit
description: Stage and commit the current changes
disable-model-invocation: true
allowed-tools: Bash(git add *) Bash(git commit *) Bash(git status *)

To block a skill from using certain tools, add deny rules in your permission settings instead.

And the over here:

The space before * matters: Bash(ls *) matches ls -la but not lsof, while Bash(ls*) matches both. The :* suffix is an equivalent way to write a trailing wildcard, so Bash(ls:*) matches the same commands as Bash(ls *).

But that might all be Claude-specific, because I don't see any mention of allowed-tools in the OpenAI skills docs? And does it matter for our planned Lightspeed integration? Who would the Lightspeed harness be asking to approve tool use?

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.

ok, I will drop allowed-tools, thanks.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Resolved by 23c5759 -> 804b96b dropping allowed-tools; thanks 👍

```bash
# Search for a product by name (substring match)
curl -s "https://access.redhat.com/product-life-cycles/api/v1/products?name=logging+for+Red+Hat+OpenShift" \
| python3 -m json.tool
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What tooling will Lightspeed's evaluation engine have available? I personally use jq instead of Python for processing responses like this, but I can easily imagine both systems with only jq, systems with only Python, systems with both, and systems with neither. Or is the AI engine smart enough to look at available tools and map from Python skill suggestions to jq if only jq is available?

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 agree, although python is heavily used by agents for code mode operations, in this case jq makes more sense, I will update those examples to use jq. Thanks.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Resolved by 23c5759 -> 804b96b moving from python3 to jq; thanks 👍 There's still some ambiguity for me (also here and here) on what kind of contract agent images are trying to meet, so we can write skills that target that environment. But we don't have to hold this GitHub thread open to sort that out.


## Response Structure

Each product in `data[]` has:
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Seems like it overlaps with api-details.md? Is the goal here just to cover some of the highlights of the response format, without swamping with context? Maybe we should suggest using a sub-agent that has read the whole api-details.md file, to try to preserve that context capacity, at the cost of restricting use to agents that can launch sub-agents? Or offload PLC queries to an MCP tool, instead of using a Skill? Or...?

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.

Thanks, you're right. There was genuine duplication here and it was already causing drift (the type field table in SKILL.md was stale). I've removed the duplicated Key fields and Phase date formats sections from SKILL.md, keeping just the JSON example and a pointer to api-details.md.

The intent is progressive disclosure. I want to give the agent just enough to work with for typical queries without loading the full schema into context. If the agent needs the full field details, type enumerations, or phase name breakdown, it can read api-details.md on demand.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Resolved by 23c5759 -> 804b96b dropping the "Key fields" and "Phase date formats" sections from SKILL.md; thanks 👍

Comment thread cluster-update/update-advisor/SKILL.md Outdated
---
name: openshift-cluster-update-advisor
description: Assess OpenShift cluster update readiness and risk. Use when evaluating whether a cluster is safe to update, when an update is available, or when the user asks about update risks, prerequisites, blockers, or best practices.
name: ota-upgrade-advisor
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nit: "ota" is part of the Red-Hat-internal team name (Over the Air Updates), but personally, I don't see anything all that over-the-air about cluster updates, and I'd suggest focusing on the subject (an OpenShift cluster), action (update), and what the skill is bringing to the that subject+action event (advice).

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.

ok, thanks. I will change it to Cluster Update Advisor

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Resolved by 23c5759 -> 804b96b moving to cluster-update-advisor; thanks 👍

Comment thread cluster-update/update-advisor/SKILL.md Outdated
name: openshift-cluster-update-advisor
description: Assess OpenShift cluster update readiness and risk. Use when evaluating whether a cluster is safe to update, when an update is available, or when the user asks about update risks, prerequisites, blockers, or best practices.
name: ota-upgrade-advisor
description: Assess OpenShift cluster upgrade readiness and risk. Use when evaluating whether a cluster is safe to upgrade, when an upgrade is available, or when the user asks about upgrade risks, prerequisites, blockers, or best practices.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nit: some projects make distinctions between "upgrade" and "update" (e.g. using one for patch fixes with another for feature bumps). OpenShift does not make that distinction. We try to consolidate on "update" (e.g. in openshift/openshift-docs#43138) with the hope that folks seeing "update" consistently used will not get distracted by wondering if there's an upgrade-vs.-update distinction. Not clear to me if that actually works out for us, or just leads to more discussions trying to herd folks towards "update" 😅 . But personally I'd stick to update as much as possible, and throw in one "upgrade" refrence early on just to help searching robots string-match regardless of which word the requestor had used.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Resolved by 23c5759 -> 804b96b moving to "cluster update (upgrade) readiness" and similar; thanks 👍

Comment thread cluster-update/update-advisor/SKILL.md Outdated
The proposal request contains:
- Current and target version metadata
- Channel and update path information
- **Cluster readiness JSON** — pre-collected by CVO with results from 9 parallel checks
Copy link
Copy Markdown
Member

@wking wking Apr 21, 2026

Choose a reason for hiding this comment

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

nit: we probably don't want to commit to a specific number of checks, since that can evolve independently in the CVO repository. And the fact that the checks are parallel is intersting for CVO latency/efficiency reasons, but not all that relevent for the consumer, and we probably don't need to cover that here. Also, the fact that it could be the CVO collecting these checks doesn't matter for the skill either, other folks besides the CVO could be mounting this skill into Lightspeed Proposal structures or using it to generate update advice? Maybe something like:

Suggested change
- **Cluster readiness JSON** — pre-collected by CVO with results from 9 parallel checks
- Cluster readiness JSON: additional cluster health checks with context that may be relevant to preparing for any update, or context that as particularly revant to a selected target version.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Resolved by 23c5759 -> 804b96b moving to "cluster health checks with context relevant to preparing for the update"; thanks 👍

Comment thread cluster-update/update-advisor/SKILL.md Outdated
"total_checks": 9,
"checks_ok": 9,
"checks_errored": 0,
"elapsed_seconds": 0.65
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nit: This metadata gives room for inconsistent statements, e.g.:

{
  "current_version": "4.21.5",
  "target_version": "4.21.8",
  "checks": {},
  "meta": {
    "total_checks": 1,
    "checks_ok": 2,
    "checks_errored": 3,
    "elapsed_seconds": 0.65
  }
}

claims more checks than exist under checks, and even more ok and errored than the total. If the client is parsing the JSON anyway, it's less parsing, and less room for inconsistency, if we just send checks and don't attempt to summarize in meta.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Resolved by 23c5759 -> 804b96b dropping meta; thanks 👍

Comment thread cluster-update/update-advisor/SKILL.md Outdated
}
```

Each check contains `_status` (`ok` or `error`), `_elapsed_seconds`, and
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nit: you don't have _elapsed_seconds in the checks[] example above. I'm not clear on what the client would do with that information anyway, maybe just report a status boolean-ish and summary string?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Resolved by 23c5759 -> 804b96b dropping _elapsed_seconds; thanks 👍

Comment thread cluster-update/update-advisor/SKILL.md Outdated
Each check contains `_status` (`ok` or `error`), `_elapsed_seconds`, and
check-specific data with a `summary` section for quick parsing.

### What the checks cover
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nit: do we need to inline these here? It gives us two places (CVO repo and here) that need bumping if the checks evolve. Ideally the checks explain themselves in the JSON, and we don't need to support that JSON with skill-side details for each of the current checks.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Resolved by 23c5759 -> 804b96b dropping this section; thanks 👍

Comment thread OWNERS Outdated
approvers:
- harche
- mrunalp
- wking
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'm not clear enough on the maintenance plan for "skills for all OCP" to feel all that optimistic at succeeding as a repo-level approver. I'm happy to give it a go, but I'm curious about how folks see this kind of maintenance working out long-term as bugs come in or component teams ask for their own subdirectories or CI/eval frameworks get developed and maintained to stay happy/useful.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Resolved by 23c5759 -> 804b96b dropping me; thanks 👍

Comment thread cluster-update/OWNERS Outdated

approvers:
- harche
- mrunalp
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Y'all don't need to sign up to maintain cluster-update skills, because you're already root-level repo approvers, and that access means you're able to approve anything here, regardless of whether you're listed explicitly in the child-dir OWNERS file.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Resolved by 23c5759 -> 804b96b dropping this change; thanks 👍

Comment thread cluster-update/README.md Outdated

This directory contains skills which are designed to help agents with ClusterVersion activities such as preparing for cluster updates.

> **Note:** The skills in this directory are initial drafts. They will evolve as we test and refine them based on real-world usage.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is true everywhere, all the time, right? I don't think we need to call out that nothing is ever perfect and everything can and will evolve. I could see us calling out specific things like "This whole repo is tech-preview and should only be referenced if you're the cluster-version operator" or whatever ground rules we want to set on consumption. Maybe in LABEL calls in the Containerfile, so it's easible visible even without having to drop into image layers? But I don't think we get a lot of value with a generic warning down inside a subdir README.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Resolved by 23c5759 -> 804b96b dropping this change; thanks 👍

Comment thread cluster-update/update-advisor/SKILL.md Outdated
specific findings:

- **`prometheus`** — if `etcd_health` shows degraded conditions, query
`etcd_disk_backend_commit_duration_seconds` for trends
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This sets up some compatibility commitments with longer reach. Do we need to encode those here? Or can the suggested-next-step information go into the CVO's rendered check output clearly enough that the consuming agent can figure out how to accomplish that step without having to be supported with additional contenxt from this skill's Markdown?

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.

ok, we can do that from CVO's output too.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Resolved by 23c5759 -> 804b96b dropping this section; thanks 👍

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@harche harche force-pushed the skills/cluster-update branch from 23c5759 to 804b96b Compare April 22, 2026 20:48
@harche harche changed the title OTA-1963: WIP: skills: Add cluster-update skills (update-advisor, product-lifecycle) OTA-1963: skills: Add cluster-update skills (update-advisor, product-lifecycle) Apr 22, 2026
Step 4: Classify and decide
Assign each finding a severity per the classification table
in section 4.2. Then determine the overall assessment:
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

With 23c5759 -> 804b96b, it's ### 3.2 Blocker Classification, no longer 4.2. Do we need to number sections? That seems brittle, as we see with this most recent reroll. How about "in the 'Blocker Classification' section"? Or, because I don't really understand the reason for this triple-backticked workflow, moving this whole thing to an enumerated list, and using a Markdown link to the section we are referencing?

## Decision policy
### Workflow
1. Parse readiness data ...
1. Verify data completeness...
1. Evaluate findings...
1. Classify and decide.  Assign each finding a severity per [the classification table](#blocker-classification).  Then determine...
### Blocker classification
...

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

#21 up to address this issue.

Copy link
Copy Markdown
Member

@wking wking left a comment

Choose a reason for hiding this comment

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

/lgtm

Still some outstanding comments, but we can address that in follow-up work without blocking on @harche capacity to discuss the remaining nits.

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label May 11, 2026
@openshift-ci
Copy link
Copy Markdown

openshift-ci Bot commented May 11, 2026

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: harche, wking

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

@wking
Copy link
Copy Markdown
Member

wking commented May 11, 2026

No consumers yet, and we'll have evals set up before we ship anything in the product.

/verified by @wking

@openshift-ci-robot openshift-ci-robot added the verified Signifies that the PR passed pre-merge verification criteria label May 11, 2026
@openshift-ci-robot
Copy link
Copy Markdown

@wking: This PR has been marked as verified by @wking.

Details

In response to this:

No consumers yet, and we'll have evals set up before we ship anything in the product.

/verified by @wking

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.

@harche
Copy link
Copy Markdown
Contributor Author

harche commented May 11, 2026

/override ci/prow/eval

@openshift-ci
Copy link
Copy Markdown

openshift-ci Bot commented May 11, 2026

@harche: Overrode contexts on behalf of harche: ci/prow/eval

Details

In response to this:

/override ci/prow/eval

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.

@openshift-ci
Copy link
Copy Markdown

openshift-ci Bot commented May 11, 2026

@harche: all tests passed!

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.

@openshift-merge-bot openshift-merge-bot Bot merged commit 4402ff0 into openshift:main May 11, 2026
3 checks passed
harche added a commit to harche/agentic-skills that referenced this pull request May 29, 2026
Replaces inline curl/python one-liners in SKILL.md with a standalone
Python CLI (plc_lookup.py) that wraps the Red Hat Product Life Cycle
API v2. This addresses review feedback from PR openshift#6:

- Migrate from v1 to v2 API (wking review comment)
- Handle all 5 support status types, not just 3 (wking review comment)
- Drop PLCC acronym in favor of "Product Life Cycle" (wking review comment)
- Add proper error handling for network/API failures
- Add pagination (--limit, --offset) for broad queries
- Add 46 tests (unit + live API integration)

CLI commands:
  products <name> [--ocp <ver>] [--limit N] [--offset N]
  olm-check --ocp <ver> --operators '<json>'

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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. lgtm Indicates that a PR is ready to be merged. verified Signifies that the PR passed pre-merge verification criteria

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants