openshift-observability-qe-agent: host skills in release repo - #80769
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughThe PR transitions the qe-agent step from remote Changesqe-agent AGENT_SKILL Refactor
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 15✅ Passed checks (15 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 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 `@ci-operator/step-registry/openshift-observability/qe-agent/README.md`:
- Around line 126-130: The fenced code block in the README.md file that displays
the directory tree structure is missing a language identifier on the opening
fence. This triggers the MD040 markdown linting rule. Add a language label (such
as "text") to the opening triple backticks of the directory tree code block to
comply with markdown linting standards. Change the unlabeled fence to specify
the appropriate language, for example changing ``` to ```text.
In `@ci-operator/step-registry/openshift-observability/qe-agent/skills/RHOSDT.md`:
- Around line 628-666: The markdown code block examples in the Product Bug
Report template and Cluster Instability Report template use triple backticks for
the outer fence (```markdown) while containing inner triple backtick code blocks
(```text), which breaks the markdown parsing and triggers MD040 warnings.
Replace the triple backticks of the outer fences with quadruple backticks
(````markdown) for both the Product Bug Report template section and the Cluster
Instability Report template section to properly support nested code fences
without prematurely closing the outer block.
- Around line 95-105: The MCP wait-loop has two issues: first, the condition
logic is inverted with the `until` and `grep -qvE` combination, causing it to
proceed when pools are unhealthy and loop when they are healthy; fix this by
removing the -v flag from the grep to make the loop actually wait while MCPs are
not ready. Second, there is no timeout enforcement despite the comment promising
a 20-minute limit; add a timeout mechanism (such as a counter variable or
timestamp check) that tracks elapsed time and aborts after 1200 seconds (20
minutes), then captures the degraded machineconfigpool status using the same oc
get command and records it to ${ARTIFACT_DIR}/qe-agent-analysis.md before
exiting with an error code.
🪄 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: baa7154a-cec6-44e5-8219-2c628c1eca8d
📒 Files selected for processing (29)
ci-operator/config/openshift/distributed-tracing-console-plugin/openshift-distributed-tracing-console-plugin-main__upstream-amd64-aws.yamlci-operator/config/openshift/distributed-tracing-qe/openshift-distributed-tracing-qe-main__ocp-4.16-disconnected.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.12-stage.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.14-arm-stage.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.16-ibm-z-stage.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.17-fips-stage.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.17-ibm-p-stage.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.19-stage.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.20-stage.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.21-stage.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__upstream-ocp-4.12-amd64.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__upstream-ocp-4.21-amd64.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__upstream-ocp-4.22-amd64.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.12-stage.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.14-arm-stage.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.16-ibm-z-stage.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.17-fips-stage.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.17-ibm-p-stage.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.19-stage.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.20-stage.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.21-stage.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__upstream-ocp-4.12-amd64.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__upstream-ocp-4.21-amd64.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__upstream-ocp-4.22-amd64.yamlci-operator/step-registry/openshift-observability/qe-agent/README.mdci-operator/step-registry/openshift-observability/qe-agent/openshift-observability-qe-agent-commands.shci-operator/step-registry/openshift-observability/qe-agent/openshift-observability-qe-agent-ref.yamlci-operator/step-registry/openshift-observability/qe-agent/skills/OWNERSci-operator/step-registry/openshift-observability/qe-agent/skills/RHOSDT.md
b76d987 to
899e3be
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
ci-operator/step-registry/openshift-observability/qe-agent/skills/RHOSDT.md (2)
231-232: ⚡ Quick winProvide a concrete method to extract OTEL_SELECTOR from the step script.
Line 231 instructs readers to "read the fetched step script" to determine the selector, but doesn't show how. A
grepexample would make it clearer and reduce guesswork.🔧 Suggested addition after line 231
# Read the fetched step script (from Step 0) to check whether --selector is used in the chainsaw invocation. +# Example: grep -o '\-\-selector [^ ]*' /tmp/fetched-step-script.sh | awk '{print $2}' OTEL_SELECTOR="" # set to "--selector <value>" if the original script uses one, otherwise leave empty🤖 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 `@ci-operator/step-registry/openshift-observability/qe-agent/skills/RHOSDT.md` around lines 231 - 232, The documentation comment before the OTEL_SELECTOR variable assignment lacks concrete instructions on how to extract the selector value from the step script. Add a concrete example using grep after line 231 to demonstrate how to search the fetched step script for the --selector flag pattern. The example should show readers how to use grep to find and extract the selector value from the chainsaw invocation, making the process clear and reducing ambiguity about what "read the fetched step script" means.
211-213: ⚡ Quick winProvide the explicit fallback command for cluster-scoped resource cleanup.
Lines 211–213 suggest falling back to a test-name label if the test-namespace label is absent, but the exact fallback command is not shown. Add the concrete command to help users apply the fallback without guessing.
🔧 Proposed addition after line 212
-l chainsaw.kyverno.io/test-namespace=chainsaw-<test-name> \ --ignore-not-found=true # If that label is absent in the output above, fall back to the test-name label instead: +# kubectl delete clusterrole,clusterrolebinding \ +# -l app.kubernetes.io/managed-by=chainsaw \ +# -l chainsaw.kyverno.io/test-name=<test-name> \ +# --ignore-not-found=true🤖 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 `@ci-operator/step-registry/openshift-observability/qe-agent/skills/RHOSDT.md` around lines 211 - 213, The documentation in RHOSDT.md around lines 211-213 provides a comment suggesting a fallback to use the chainsaw.kyverno.io/test-name label instead of the test-namespace label for cluster-scoped resource cleanup, but only shows the partial label selector syntax. Add the explicit and complete kubectl command after line 212 that demonstrates the full fallback cleanup command using the test-name label selector, formatted consistently with the primary command shown above it, so users can directly copy and execute it without having to construct it themselves.
🤖 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 `@ci-operator/step-registry/openshift-observability/qe-agent/skills/RHOSDT.md`:
- Around line 292-293: The OTEL_SELECTOR variable is being reset to an empty
string at lines 292-293 before the flakiness confirmation loop, which overwrites
the selector value that was captured during the first rerun around line 232.
Remove the line that resets OTEL_SELECTOR to empty before the for loop (the one
iterating through i in 2 3 4), so that the selector determined in the first
rerun is preserved and reused consistently across all subsequent rerun
iterations without being overwritten.
---
Nitpick comments:
In `@ci-operator/step-registry/openshift-observability/qe-agent/skills/RHOSDT.md`:
- Around line 231-232: The documentation comment before the OTEL_SELECTOR
variable assignment lacks concrete instructions on how to extract the selector
value from the step script. Add a concrete example using grep after line 231 to
demonstrate how to search the fetched step script for the --selector flag
pattern. The example should show readers how to use grep to find and extract the
selector value from the chainsaw invocation, making the process clear and
reducing ambiguity about what "read the fetched step script" means.
- Around line 211-213: The documentation in RHOSDT.md around lines 211-213
provides a comment suggesting a fallback to use the
chainsaw.kyverno.io/test-name label instead of the test-namespace label for
cluster-scoped resource cleanup, but only shows the partial label selector
syntax. Add the explicit and complete kubectl command after line 212 that
demonstrates the full fallback cleanup command using the test-name label
selector, formatted consistently with the primary command shown above it, so
users can directly copy and execute it without having to construct it
themselves.
🪄 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: 0568696f-2e76-4e90-89e4-3d8cfa419afa
📒 Files selected for processing (29)
ci-operator/config/openshift/distributed-tracing-console-plugin/openshift-distributed-tracing-console-plugin-main__upstream-amd64-aws.yamlci-operator/config/openshift/distributed-tracing-qe/openshift-distributed-tracing-qe-main__ocp-4.16-disconnected.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.12-stage.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.14-arm-stage.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.16-ibm-z-stage.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.17-fips-stage.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.17-ibm-p-stage.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.19-stage.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.20-stage.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.21-stage.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__upstream-ocp-4.12-amd64.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__upstream-ocp-4.21-amd64.yamlci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__upstream-ocp-4.22-amd64.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.12-stage.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.14-arm-stage.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.16-ibm-z-stage.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.17-fips-stage.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.17-ibm-p-stage.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.19-stage.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.20-stage.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.21-stage.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__upstream-ocp-4.12-amd64.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__upstream-ocp-4.21-amd64.yamlci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__upstream-ocp-4.22-amd64.yamlci-operator/step-registry/openshift-observability/qe-agent/README.mdci-operator/step-registry/openshift-observability/qe-agent/openshift-observability-qe-agent-commands.shci-operator/step-registry/openshift-observability/qe-agent/openshift-observability-qe-agent-ref.yamlci-operator/step-registry/openshift-observability/qe-agent/skills/OWNERSci-operator/step-registry/openshift-observability/qe-agent/skills/RHOSDT.md
✅ Files skipped from review due to trivial changes (5)
- ci-operator/step-registry/openshift-observability/qe-agent/skills/OWNERS
- ci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__upstream-ocp-4.21-amd64.yaml
- ci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.17-fips-stage.yaml
- ci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__upstream-ocp-4.12-amd64.yaml
- ci-operator/step-registry/openshift-observability/qe-agent/README.md
🚧 Files skipped from review as they are similar to previous changes (22)
- ci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__upstream-ocp-4.22-amd64.yaml
- ci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.19-stage.yaml
- ci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.16-ibm-z-stage.yaml
- ci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.17-ibm-p-stage.yaml
- ci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__upstream-ocp-4.21-amd64.yaml
- ci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.12-stage.yaml
- ci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.17-fips-stage.yaml
- ci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.12-stage.yaml
- ci-operator/config/openshift/distributed-tracing-qe/openshift-distributed-tracing-qe-main__ocp-4.16-disconnected.yaml
- ci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__upstream-ocp-4.12-amd64.yaml
- ci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.20-stage.yaml
- ci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.16-ibm-z-stage.yaml
- ci-operator/config/openshift/distributed-tracing-console-plugin/openshift-distributed-tracing-console-plugin-main__upstream-amd64-aws.yaml
- ci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.14-arm-stage.yaml
- ci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__upstream-ocp-4.22-amd64.yaml
- ci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.14-arm-stage.yaml
- ci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.17-ibm-p-stage.yaml
- ci-operator/step-registry/openshift-observability/qe-agent/openshift-observability-qe-agent-commands.sh
- ci-operator/config/openshift/open-telemetry-opentelemetry-operator/openshift-open-telemetry-opentelemetry-operator-main__opentelemetry-product-ocp-4.21-stage.yaml
- ci-operator/step-registry/openshift-observability/qe-agent/openshift-observability-qe-agent-ref.yaml
- ci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.20-stage.yaml
- ci-operator/config/openshift/grafana-tempo-operator/openshift-grafana-tempo-operator-main__tempo-product-ocp-4.21-stage.yaml
58d70f5 to
b3f7d25
Compare
b3f7d25 to
6e27b2e
Compare
|
/pj-rehearse ack |
|
@IshwarKanse: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
|
[REHEARSALNOTIFIER]
Interacting with pj-rehearseComment: Once you are satisfied with the results of the rehearsals, comment: |
|
/pj-rehearse ack |
|
@IshwarKanse: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
|
@IshwarKanse: all tests passed! Full PR test history. Your PR dashboard. DetailsInstructions 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. |
|
lgtm |
|
/lgtm |
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: gangwgr, IshwarKanse The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
Summary
Introduces governed skill hosting and autonomous test failure triage for the OpenShift Observability QE agent step.
Scope: The step is active on 2 jobs only — Tempo Operator and OpenTelemetry Operator upstream OCP 4.22 presubmits. All other adopting jobs (stage, product, multi-arch, disconnected, older upstream versions) have the step and explicit
post:overrides removed; their workflow-defined post phase (deprovision + send-results-to-reportportal) is restored. Expansion to additional jobs is gated on Sippy cross-run pattern awareness to avoid running the agent against already-known failures.What changed
Skill hosting (
commands.sh,ref.yaml,skills/)Replaces
AGENT_SKILL_URL(free-form URL to anyopenshift/org repo) withAGENT_SKILL(a short name, e.g.RHOSDT) that resolves to a skill file in this repository underci-operator/step-registry/openshift-observability/qe-agent/skills/.openshift/org repoopenshift/release— one repo, one OWNERS gateopenshift/releasewith OWNERS reviewmain)AGENT_SKILLvalidated against^[A-Za-z0-9_-]+$; base URL is hardcodedcurl -Lfollowed redirects, bypassing the allowlist check--max-redirs 0disables redirect followingwc -c) rejects oversized payloadsWebFetchin--allowedToolsBash,Read,Write,Grep,GlobCost control and audit (
commands.sh)--max-budget-usd 5caps spend per run. Observed cost in production runs was $3.45–$4.45; the cap prevents runaway sessions from exhausting the Vertex AI cost center budget.--verboseenabled — richer tool-call traces are captured in the temp file for audit extraction, without exposing them in the CI build-log.qe-agent-usage.jsonwritten toARTIFACT_DIRafter every run: token counts (input, output, cache), USD cost, turn count, and wall-clock duration — extracted from the stream-jsonresultrecord which contains no cluster data.qe-agent-commands.logwritten toARTIFACT_DIR: every Bash command Claude executed (command strings only, no output) — extracted viajqfromtool_useevents. Enables post-run review of what Claude actually did on the cluster.CI config changes (24 configs)
AGENT_SKILL: RHOSDTand- ref: openshift-observability-qe-agentinpost::openshift-grafana-tempo-operator-main__upstream-ocp-4.22-amd64.yamlopenshift-open-telemetry-opentelemetry-operator-main__upstream-ocp-4.22-amd64.yamlAGENT_SKILL_URL/AGENT_SKILLenv var removed,- ref: openshift-observability-qe-agentremoved, and the now-redundant explicitpost:section removed (workflow-level post phase handles deprovision).RHOSDT skill (
skills/RHOSDT.md)Initial skill for the Distributed Tracing QE team covering Tempo Operator, OpenTelemetry Operator, Tracing UI (Cypress), and Disconnected test suites. Validated against 4 production CI runs ($3.45–$4.45, 57–83 turns each). Includes:
find -pathusage for nested test directoriesGOPATH/GOBIN/GOCACHE+PATHexports for Tempo stage/downstream test helpersTEST_DIRre-declared at the start of each Bash invocation (fresh shell scope)OTEL_SELECTORcaptured once and reused across all 4 flakiness-loop rerunsDocumentation (
README.md)best_effort: true), audit artifact descriptions, private Prow deck requirement.--verbosetraces and cluster data) is captured to a temp file only; only the two derived audit artifacts reachARTIFACT_DIR.Adding a new team skill
ci-operator/step-registry/openshift-observability/qe-agent/skills/<TEAM>.mdskills/OWNERSopenshift/release— step OWNERS review and approveAGENT_SKILL: <TEAM>in your CI config