HYPERFLEET-811: add hyperfleet-bug-triage plugin and refactor jira-ticket-creator#20
HYPERFLEET-811: add hyperfleet-bug-triage plugin and refactor jira-ticket-creator#20rafabene wants to merge 1 commit intoopenshift-hyperfleet:mainfrom
Conversation
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
WalkthroughThis PR adds the hyperfleet-bugs-triage CLAUDE plugin (marketplace entry, plugin manifest, OWNERS, README, skill and reference files) providing interactive JIRA and GitHub triage workflows scoped to openshift-hyperfleet repositories. It also restructures hyerfleet-jira’s jira-ticket-creator docs into separate Markdown references (cli-examples, formatting, pitfalls) and bumps hyerfleet-jira version 0.4.0 → 0.4.1. Sequence Diagram(s)sequenceDiagram
participant User as User
participant Plugin as "hyperfleet-bugs-triage\n(skill)"
participant CLI as "jira-cli"
participant Jira as JIRA
rect rgba(200,200,255,0.5)
User->>Plugin: run /bugs-triage (jira)
Plugin->>CLI: query issues (project=HYPERFLEET, status=New)
CLI->>Jira: API: fetch issues
Jira-->>CLI: issue list
CLI-->>Plugin: issue details
Plugin->>User: present issue, suggestions (owners.csv, SLA)
User->>Plugin: choose action (move/backlog, comment, edit, close, convert, escalate)
Plugin->>CLI: execute jira issue create/edit/comment (as needed)
CLI->>Jira: API: apply changes
Jira-->>CLI: confirmation
CLI-->>Plugin: result
Plugin->>User: session metrics & summary
end
sequenceDiagram
participant User as User
participant Plugin as "hyperfleet-bugs-triage\n(skill)"
participant GH as "gh CLI"
participant GitHub as GitHub
participant CLI as "jira-cli"
rect rgba(200,255,200,0.5)
User->>Plugin: run /bugs-triage (github)
Plugin->>GH: query open issues across allowed repos
GH->>GitHub: API: fetch issues
GitHub-->>GH: issue list
GH-->>Plugin: issue details
Plugin->>User: present issue, check for linked JIRA or merged PRs
alt create JIRA ticket
User->>Plugin: accept -> create ticket
Plugin->>CLI: jira issue create (via jira-cli)
CLI->>Jira: API: create ticket
Jira-->>CLI: ticket key
CLI-->>Plugin: ticket info
Plugin->>GH: add labels/comment/link to GitHub issue
GH->>GitHub: API: update issue
GitHub-->>GH: confirmation
else reject/duplicate/request-info
User->>Plugin: choose action
Plugin->>GH: comment/label/close as chosen
GH->>GitHub: API update
GitHub-->>GH: confirmation
end
Plugin->>User: session metrics & summary
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes 🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
c23f3df to
2b5385b
Compare
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@hyperfleet-bug-triage/scripts/track-usage.sh`:
- Around line 89-96: The backgrounded GitHub dispatch in track-usage.sh (the `gh
api repos/openshift-hyperfleet/hyperfleet-claude-plugins/dispatches` call that
uses USERNAME, PLUGIN_NAME, SKILL_NAME and EVENT) still ties up the invoking
process because its stdio is inherited; detach its stdio so it truly runs
non‑blocking by redirecting stdin from /dev/null and sending stdout/stderr to
/dev/null (or using nohup) and backgrounding/disowning the process, ensuring the
command does not keep the capture pipe open and block skill loading.
In `@hyperfleet-bug-triage/skills/bug-triage/SKILL.md`:
- Around line 211-212: Update the triage rules so GitHub issues are not closed
based solely on a linked Jira ticket's status: change the rule that currently
says "If Jira ticket exists: comment on GitHub linking to it, add
`hf-triaged/accepted` label, close the issue if the Jira ticket is already
Closed/Done, skip" to instead comment and add the `hf-triaged/accepted` label
but do NOT close the issue based on Jira status; only close when there is a
linked PR that is merged or the fix is present in the repository. Similarly,
update the rule that handles "If code already fixed: comment referencing the PR,
add `hf-triaged/accepted` label, close the issue" so it only closes issues when
the referenced PR is merged (or the fix is in trunk), and otherwise leave the
issue open while tracking the PR.
- Around line 18-26: Update the consent flow in SKILL.md so an empty reply is
NOT treated as consent: require an explicit affirmative "yes" (case-insensitive)
to opt in when the dynamic context is TRACKING_CONSENT_NEEDED, and only then run
the TRACKING_RERUN command; treat any other response (including empty) as a
decline. Also correct the data description—do not call it “anonymous”;
explicitly list the fields sent (e.g., GitHub username and invocation counts as
emitted by hyperfleet-bug-triage/scripts/track-usage.sh around line 92) so the
prompt and subsequent wording accurately reflect what is collected.
- Around line 183-186: The GitHub CLI command uses a BSD-specific date
expression created:<$(date -v-42d '+%Y-%m-%d') which breaks on GNU/Linux;
replace the inline date usage in the gh api search/issues q=... string by
computing a DATE variable using a portable fallback (try GNU: date -d '42 days
ago' +%Y-%m-%d and if that fails fall back to BSD: date -v-42d +%Y-%m-%d), then
inject that DATE into the q=... created:<$DATE portion of the gh api
search/issues invocation (refer to the gh api search/issues command and the
created:<$(date ...) fragment to locate the change).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: ea82333c-9469-4689-890d-fd22aa249a43
⛔ Files ignored due to path filters (1)
hyperfleet-bug-triage/skills/bug-triage/references/owners.csvis excluded by!**/*.csv
📒 Files selected for processing (13)
.claude-plugin/marketplace.jsonCLAUDE.mdhyperfleet-bug-triage/.claude-plugin/plugin.jsonhyperfleet-bug-triage/OWNERShyperfleet-bug-triage/README.mdhyperfleet-bug-triage/scripts/track-usage.shhyperfleet-bug-triage/skills/bug-triage/SKILL.mdhyperfleet-bug-triage/skills/bug-triage/references/github-repos.mdhyperfleet-jira/.claude-plugin/plugin.jsonhyperfleet-jira/skills/jira-ticket-creator/SKILL.mdhyperfleet-jira/skills/jira-ticket-creator/references/cli-examples.mdhyperfleet-jira/skills/jira-ticket-creator/references/formatting.mdhyperfleet-jira/skills/jira-ticket-creator/references/pitfalls.md
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@hyperfleet-bugs-triage/skills/bugs-triage/SKILL.md`:
- Around line 182-187: The date command in the gh api search snippet uses
BSD-specific syntax ("date -v-42d") which breaks on GNU/Linux; edit the code
block in SKILL.md where the gh api search/issues command is defined and replace
the hardcoded BSD call with a portable fallback (e.g., try "date -d '-42 days'
'+%Y-%m-%d'" and fall back to "date -v-42d '+%Y-%m-%d'" if the first fails) or
document macOS-only requirements; update the quoted q=... expression to use that
portable substitution so the gh api search/issues command works on both Linux
and macOS.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: ed427c74-fb3f-4c4b-bf73-88416b9cf026
⛔ Files ignored due to path filters (1)
hyperfleet-bugs-triage/skills/bugs-triage/references/owners.csvis excluded by!**/*.csv
📒 Files selected for processing (13)
.claude-plugin/marketplace.jsonCLAUDE.mdhyperfleet-bugs-triage/.claude-plugin/plugin.jsonhyperfleet-bugs-triage/OWNERShyperfleet-bugs-triage/README.mdhyperfleet-bugs-triage/scripts/track-usage.shhyperfleet-bugs-triage/skills/bugs-triage/SKILL.mdhyperfleet-bugs-triage/skills/bugs-triage/references/github-repos.mdhyperfleet-jira/.claude-plugin/plugin.jsonhyperfleet-jira/skills/jira-ticket-creator/SKILL.mdhyperfleet-jira/skills/jira-ticket-creator/references/cli-examples.mdhyperfleet-jira/skills/jira-ticket-creator/references/formatting.mdhyperfleet-jira/skills/jira-ticket-creator/references/pitfalls.md
✅ Files skipped from review due to trivial changes (7)
- hyperfleet-bugs-triage/OWNERS
- hyperfleet-bugs-triage/.claude-plugin/plugin.json
- hyperfleet-bugs-triage/skills/bugs-triage/references/github-repos.md
- hyperfleet-jira/.claude-plugin/plugin.json
- CLAUDE.md
- hyperfleet-jira/skills/jira-ticket-creator/references/cli-examples.md
- hyperfleet-bugs-triage/README.md
🚧 Files skipped from review as they are similar to previous changes (1)
- .claude-plugin/marketplace.json
Plugin Output Sample —
|
| Metric | Count |
|---|---|
| Bugs triaged | 0 |
| Moved to Backlog | 0 |
| Closed (Won't Do/Rejected/Duplicate) | 0 |
| Info requested | 0 |
| Skipped | 0 |
| Bugs open > 3 sprints | 0 |
Part 2: GitHub Issues Triage
No untriaged GitHub issues found (all open issues already have triage labels).
Issues Open > 3 Sprints
| Issue | Title | Created | Labels |
|---|---|---|---|
| maestro-cli#2 | Naming convention needs to be aligned from resources creation to follow up k8s resources creation validations | 2026-01-19 | hf-triaged/accepted |
This issue is already tracked by HYPERFLEET-799 (New status). The plugin detected the duplicate HYPERFLEET-804 was already closed. The user was prompted interactively and chose to keep it as-is.
GitHub Triage Summary
| Metric | Count |
|---|---|
| Issues triaged | 0 |
| Accepted (Bug) | 0 |
| Accepted (RFE) | 0 |
| Help provided | 0 |
| Rejected | 0 |
| Duplicate | 0 |
| Info requested | 0 |
| Skipped | 0 |
| Issues open > 3 sprints | 1 |
Final Summary
| Area | Result |
|---|---|
| Jira bugs in New | 0 — nothing to triage |
| Jira bugs open > 3 sprints | 0 |
| GitHub untriaged issues | 0 — all issues already have triage labels |
| GitHub issues open > 3 sprints | 1 — maestro-cli#2 (kept as-is per user decision) |
The triage queue is clean. No action items pending.
Note: The plugin processes each bug/issue one at a time, presenting an assessment table and recommending an action (Move to Backlog, Close, Request Info, etc.). The user confirms each action interactively before it's executed.
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (1)
hyperfleet-bugs-triage/skills/bugs-triage/SKILL.md (1)
20-24:⚠️ Potential issue | 🟠 MajorRequire explicit opt-in and correct tracking-data description
Line 20 is inaccurate (“anonymous”), and Line 23 still treats empty input as consent. This is a privacy/compliance risk and should require explicit
yesonly.Proposed fix
-> "HyperFleet plugins collect anonymous usage data (GitHub username and skill invocation counts) to help the team understand adoption. Would you like to enable usage tracking? (Yes/no)" +> "HyperFleet plugins collect usage data (your GitHub username, plugin name, skill name, and invocation events) to help the team understand adoption. Would you like to enable usage tracking? (Yes/no)" -If the user agrees (or just presses enter / says "yes"): save the consent **and** run the tracking script in a **single** Bash command: `mkdir -p ~/.claude && echo "yes" > ~/.claude/.hyperfleet-tracking-consent && <TRACKING_RERUN command from dynamic context>` (replace `<TRACKING_RERUN command ...>` with the actual command shown in the `TRACKING_RERUN:` line). -- If the user declines: run `mkdir -p ~/.claude && echo "no" > ~/.claude/.hyperfleet-tracking-consent` +If the user explicitly says "yes" (case-insensitive): save the consent **and** run the tracking script in a **single** Bash command: `mkdir -p ~/.claude && echo "yes" > ~/.claude/.hyperfleet-tracking-consent && <TRACKING_RERUN command from dynamic context>` (replace `<TRACKING_RERUN command ...>` with the actual command shown in the `TRACKING_RERUN:` line). +- If the user says "no" or gives an empty/unclear response: run `mkdir -p ~/.claude && echo "no" > ~/.claude/.hyperfleet-tracking-consent`As per coding guidelines, "Focus on major issues impacting performance, readability, maintainability and security. Avoid nitpicks and avoid verbosity."
Also applies to: 26-27
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@hyperfleet-bugs-triage/skills/bugs-triage/SKILL.md` around lines 20 - 24, Update the consent prompt and handling so it requires an explicit "yes" (case-insensitive) to opt in — do not treat empty input or any other response as consent — and correct the wording to list the precise data collected ("GitHub username and skill invocation counts") instead of "anonymous"; when the user explicitly agrees run a single Bash command that creates the consent file, writes "yes", and then runs the actual TRACKING_RERUN command shown in the SKILL.md `TRACKING_RERUN:` line (replace the `<TRACKING_RERUN command ...>` placeholder with that exact command) using the form: mkdir -p ~/.claude && echo "yes" > ~/.claude/.hyperfleet-tracking-consent && <actual TRACKING_RERUN command>; when the user explicitly declines run: mkdir -p ~/.claude && echo "no" > ~/.claude/.hyperfleet-tracking-consent.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@hyperfleet-bugs-triage/skills/bugs-triage/SKILL.md`:
- Around line 142-144: The markdown tables use fenced code blocks without
language identifiers (MD040); update each triple-backtick fence that wraps the
tables (the blocks containing "| Ticket | Priority | Status | Assignee | Created
|", the metric tables, and the other table blocks around lines noted) to include
a language tag (e.g., ```markdown) so each fenced block becomes labeled (for
example change ``` to ```markdown) for all occurrences referenced (including the
blocks at ~142-144, 150-159, 259-261, 265-277).
---
Duplicate comments:
In `@hyperfleet-bugs-triage/skills/bugs-triage/SKILL.md`:
- Around line 20-24: Update the consent prompt and handling so it requires an
explicit "yes" (case-insensitive) to opt in — do not treat empty input or any
other response as consent — and correct the wording to list the precise data
collected ("GitHub username and skill invocation counts") instead of
"anonymous"; when the user explicitly agrees run a single Bash command that
creates the consent file, writes "yes", and then runs the actual TRACKING_RERUN
command shown in the SKILL.md `TRACKING_RERUN:` line (replace the
`<TRACKING_RERUN command ...>` placeholder with that exact command) using the
form: mkdir -p ~/.claude && echo "yes" > ~/.claude/.hyperfleet-tracking-consent
&& <actual TRACKING_RERUN command>; when the user explicitly declines run: mkdir
-p ~/.claude && echo "no" > ~/.claude/.hyperfleet-tracking-consent.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: b2950470-4876-4b59-a48e-e5b8a619e79c
📒 Files selected for processing (1)
hyperfleet-bugs-triage/skills/bugs-triage/SKILL.md
41d9d47 to
348c77f
Compare
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@hyperfleet-bugs-triage/README.md`:
- Around line 13-17: Add a language identifier to the fenced code block in
README.md that contains the usage examples (the block with the lines starting
"/bugs-triage", "/bugs-triage jira", "/bugs-triage github") so markdownlint
MD040 is satisfied; change the opening fence from ``` to ```bash (or another
appropriate language) to mark the snippet as bash.
In `@hyperfleet-bugs-triage/skills/bugs-triage/SKILL.md`:
- Around line 167-173: The GitHub search currently excludes only three triaged
labels and thus returns issues with other non-triage labels; update the gh api
search command's q parameter (the q="..." string in the gh api search/issues
call in SKILL.md) to explicitly require either unlabeled issues (no:label) or
issues labeled hf-needs-triage by changing the query to include (no:label OR
label:hf-needs-triage) while still excluding hf-triaged/accepted,
hf-triaged/rejected, and hf-triaged/duplicate; modify the q string accordingly
in the gh api search/issues invocation so it matches the documented intent.
In `@hyperfleet-jira/skills/jira-ticket-creator/references/formatting.md`:
- Around line 34-37: The fenced code block in formatting.md that contains the
two lines "**POST** /api/v1/clusters/:id" and "**GET** /api/v1/clusters/{id}" is
missing a language tag (triggering markdownlint MD040); update that fence to
include a language tag (e.g., text) so the opening fence becomes ```text,
leaving the block contents unchanged and preserving the bold method examples.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: f3115c95-7baa-49f5-923a-a8bf7f5c43d4
⛔ Files ignored due to path filters (1)
hyperfleet-bugs-triage/skills/bugs-triage/references/owners.csvis excluded by!**/*.csv
📒 Files selected for processing (13)
.claude-plugin/marketplace.jsonCLAUDE.mdhyperfleet-bugs-triage/.claude-plugin/plugin.jsonhyperfleet-bugs-triage/OWNERShyperfleet-bugs-triage/README.mdhyperfleet-bugs-triage/scripts/track-usage.shhyperfleet-bugs-triage/skills/bugs-triage/SKILL.mdhyperfleet-bugs-triage/skills/bugs-triage/references/github-repos.mdhyperfleet-jira/.claude-plugin/plugin.jsonhyperfleet-jira/skills/jira-ticket-creator/SKILL.mdhyperfleet-jira/skills/jira-ticket-creator/references/cli-examples.mdhyperfleet-jira/skills/jira-ticket-creator/references/formatting.mdhyperfleet-jira/skills/jira-ticket-creator/references/pitfalls.md
✅ Files skipped from review due to trivial changes (6)
- hyperfleet-bugs-triage/OWNERS
- hyperfleet-bugs-triage/.claude-plugin/plugin.json
- .claude-plugin/marketplace.json
- hyperfleet-jira/.claude-plugin/plugin.json
- hyperfleet-jira/skills/jira-ticket-creator/references/cli-examples.md
- hyperfleet-jira/skills/jira-ticket-creator/references/pitfalls.md
🚧 Files skipped from review as they are similar to previous changes (3)
- hyperfleet-bugs-triage/skills/bugs-triage/references/github-repos.md
- CLAUDE.md
- hyperfleet-bugs-triage/scripts/track-usage.sh
hyperfleet-jira/skills/jira-ticket-creator/references/formatting.md
Outdated
Show resolved
Hide resolved
348c77f to
2777f48
Compare
There was a problem hiding this comment.
♻️ Duplicate comments (1)
hyperfleet-bugs-triage/skills/bugs-triage/SKILL.md (1)
167-173:⚠️ Potential issue | 🟠 MajorAlign the GitHub search query with the documented triage scope.
Line 167 says to fetch issues that are unlabeled or
hf-needs-triage, but Line 171 currently matches any open issue not carrying three specific triaged labels. That broadens scope and can reprocess issues already in other workflow states.Suggested fix
gh api search/issues -X GET \ - -f q="is:issue is:open -label:hf-triaged/accepted -label:hf-triaged/rejected -label:hf-triaged/duplicate repo:openshift-hyperfleet/hyperfleet-api repo:openshift-hyperfleet/hyperfleet-adapter repo:openshift-hyperfleet/hyperfleet-sentinel repo:openshift-hyperfleet/hyperfleet-broker repo:openshift-hyperfleet/hyperfleet-chart repo:openshift-hyperfleet/hyperfleet-infra repo:openshift-hyperfleet/hyperfleet-credential-provider repo:openshift-hyperfleet/hyperfleet-logger repo:openshift-hyperfleet/hyperfleet-e2e repo:openshift-hyperfleet/maestro-cli repo:openshift-hyperfleet/architecture repo:openshift-hyperfleet/hyperfleet-claude-plugins" \ + -f q="is:issue is:open (no:label OR label:hf-needs-triage) -label:hf-triaged/accepted -label:hf-triaged/rejected -label:hf-triaged/duplicate repo:openshift-hyperfleet/hyperfleet-api repo:openshift-hyperfleet/hyperfleet-adapter repo:openshift-hyperfleet/hyperfleet-sentinel repo:openshift-hyperfleet/hyperfleet-broker repo:openshift-hyperfleet/hyperfleet-chart repo:openshift-hyperfleet/hyperfleet-infra repo:openshift-hyperfleet/hyperfleet-credential-provider repo:openshift-hyperfleet/hyperfleet-logger repo:openshift-hyperfleet/hyperfleet-e2e repo:openshift-hyperfleet/maestro-cli repo:openshift-hyperfleet/architecture repo:openshift-hyperfleet/hyperfleet-claude-plugins" \As per coding guidelines, "-Focus on major issues impacting performance, readability, maintainability and security. Avoid nitpicks and avoid verbosity."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@hyperfleet-bugs-triage/skills/bugs-triage/SKILL.md` around lines 167 - 173, The GitHub search query in the gh api command in SKILL.md currently selects any open issue that lacks the three triaged labels, but it should only select issues that are either unlabeled or explicitly labeled hf-needs-triage; update the -f q=... string used in the gh api search/issues command (the snippet containing "is:issue is:open -label:hf-triaged/accepted -label:hf-triaged/rejected -label:hf-triaged/duplicate") to instead use a parenthesized expression combining no:label OR label:hf-needs-triage (e.g., is:issue is:open (no:label OR label:hf-needs-triage) and still exclude the three hf-triaged/* labels) so the query matches only unlabeled or hf-needs-triage issues in the listed repos.
🧹 Nitpick comments (1)
hyperfleet-jira/skills/jira-ticket-creator/SKILL.md (1)
127-144: Remove conflicting guidance about manual steps.Line 127 says fields should be set during creation, but Line 143 still requires a “manual steps needed” list. This contradiction can drive inconsistent ticket workflows.
Suggested doc adjustment
Return to user: - Ticket key (e.g., HYPERFLEET-123) - Link: https://redhat.atlassian.net/browse/HYPERFLEET-123 - Summary of what was created -- **List of manual steps needed** +- **List of follow-up edits performed (only if anything could not be set at creation time)**As per coding guidelines, "-Focus on major issues impacting performance, readability, maintainability and security. Avoid nitpicks and avoid verbosity."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@hyperfleet-jira/skills/jira-ticket-creator/SKILL.md` around lines 127 - 144, The doc currently contradicts itself: the "All fields can be set via CLI during creation" section claims no post-creation work is needed, but "Step 7: Verify and Return Details" still asks for a **List of manual steps needed**; update SKILL.md to remove this conflicting bullet or explicitly document which specific fields or post-creation actions (if any) cannot be automated via CLI. Locate the "All fields can be set via CLI during creation" statement and the "Step 7: Verify and Return Details" block (including the "List of manual steps needed" line) and either delete that manual-steps line or replace it with a short conditional note listing exact manual tasks and why (referencing the CLI flags like -P, -l, -C and the jira issue view command for verification).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Duplicate comments:
In `@hyperfleet-bugs-triage/skills/bugs-triage/SKILL.md`:
- Around line 167-173: The GitHub search query in the gh api command in SKILL.md
currently selects any open issue that lacks the three triaged labels, but it
should only select issues that are either unlabeled or explicitly labeled
hf-needs-triage; update the -f q=... string used in the gh api search/issues
command (the snippet containing "is:issue is:open -label:hf-triaged/accepted
-label:hf-triaged/rejected -label:hf-triaged/duplicate") to instead use a
parenthesized expression combining no:label OR label:hf-needs-triage (e.g.,
is:issue is:open (no:label OR label:hf-needs-triage) and still exclude the three
hf-triaged/* labels) so the query matches only unlabeled or hf-needs-triage
issues in the listed repos.
---
Nitpick comments:
In `@hyperfleet-jira/skills/jira-ticket-creator/SKILL.md`:
- Around line 127-144: The doc currently contradicts itself: the "All fields can
be set via CLI during creation" section claims no post-creation work is needed,
but "Step 7: Verify and Return Details" still asks for a **List of manual steps
needed**; update SKILL.md to remove this conflicting bullet or explicitly
document which specific fields or post-creation actions (if any) cannot be
automated via CLI. Locate the "All fields can be set via CLI during creation"
statement and the "Step 7: Verify and Return Details" block (including the "List
of manual steps needed" line) and either delete that manual-steps line or
replace it with a short conditional note listing exact manual tasks and why
(referencing the CLI flags like -P, -l, -C and the jira issue view command for
verification).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 3a723c7a-06a8-406c-8ca4-cd5059a1a2f3
⛔ Files ignored due to path filters (1)
hyperfleet-bugs-triage/skills/bugs-triage/references/owners.csvis excluded by!**/*.csv
📒 Files selected for processing (13)
.claude-plugin/marketplace.jsonCLAUDE.mdhyperfleet-bugs-triage/.claude-plugin/plugin.jsonhyperfleet-bugs-triage/OWNERShyperfleet-bugs-triage/README.mdhyperfleet-bugs-triage/scripts/track-usage.shhyperfleet-bugs-triage/skills/bugs-triage/SKILL.mdhyperfleet-bugs-triage/skills/bugs-triage/references/github-repos.mdhyperfleet-jira/.claude-plugin/plugin.jsonhyperfleet-jira/skills/jira-ticket-creator/SKILL.mdhyperfleet-jira/skills/jira-ticket-creator/references/cli-examples.mdhyperfleet-jira/skills/jira-ticket-creator/references/formatting.mdhyperfleet-jira/skills/jira-ticket-creator/references/pitfalls.md
✅ Files skipped from review due to trivial changes (8)
- hyperfleet-jira/.claude-plugin/plugin.json
- hyperfleet-bugs-triage/OWNERS
- hyperfleet-bugs-triage/.claude-plugin/plugin.json
- CLAUDE.md
- .claude-plugin/marketplace.json
- hyperfleet-bugs-triage/skills/bugs-triage/references/github-repos.md
- hyperfleet-jira/skills/jira-ticket-creator/references/formatting.md
- hyperfleet-jira/skills/jira-ticket-creator/references/cli-examples.md
d08946f to
af3bada
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (2)
hyperfleet-jira/skills/jira-ticket-creator/SKILL.md (1)
141-144: Make manual steps conditional instead of always required.Line 143 asks for a manual-steps list unconditionally, but Line 127 says all fields can be set during creation. This can produce misleading output when no follow-up actions are needed. Make this conditional (“if any”).
Proposed edit
- Summary of what was created -- **List of manual steps needed** +- **Manual steps needed (if any)**As per coding guidelines, "Focus on major issues impacting performance, readability, maintainability and security. Avoid nitpicks and avoid verbosity."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@hyperfleet-jira/skills/jira-ticket-creator/SKILL.md` around lines 141 - 144, The "List of manual steps needed" section is currently always shown and can be misleading when there are no follow-up actions; update the SKILL.md output generation so the manual steps block (the "List of manual steps needed" / "manual-steps" section) is emitted only when there are actual manual steps to perform (e.g., render "Manual steps (if any):" or include the whole list only when the manual-steps array/field is non-empty), ensuring other fields like "Link" and "Summary of what was created" remain unchanged.hyperfleet-bugs-triage/skills/bugs-triage/SKILL.md (1)
153-159: Avoid duplicating repo scope in command strings.The workflow says to read
references/github-repos.md, but the query hardcodes all repos inline. This creates drift risk when the scope file changes.Refactor sketch
-gh api search/issues -X GET \ - -f q="is:issue is:open ... repo:openshift-hyperfleet/hyperfleet-api ... repo:openshift-hyperfleet/hyperfleet-claude-plugins" \ +REPOS="$(awk '/^- `/{gsub(/[`-]/,""); gsub(/^[[:space:]]+|[[:space:]]+$/,""); printf "repo:openshift-hyperfleet/%s ", $0}' references/github-repos.md)" +gh api search/issues -X GET \ + -f q="is:issue is:open ... ${REPOS}" \As per coding guidelines, "Focus on major issues impacting performance, readability, maintainability and security. Avoid nitpicks and avoid verbosity."
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@hyperfleet-bugs-triage/skills/bugs-triage/SKILL.md`:
- Around line 273-274: The policy line "Use `jira` CLI for Jira and `gh` CLI for
GitHub — no other tools" conflicts with the declared allowed-tools; update the
wording in SKILL.md to permit the required toolchain by replacing that line with
a statement like: "Use `jira` CLI for Jira and `gh` CLI for GitHub; do not use
other external CLIs, but allowed-tools (AskUserQuestion, Read, Skill) may be
used as declared." Ensure the change references the existing phrase "Use `jira`
CLI for Jira and `gh` CLI for GitHub" and the allowed-tools entries
(AskUserQuestion, Read, Skill) so the doc and runtime tool list are consistent.
- Line 118: The Close command line uses a pipe-delimited resolution string which
conflicts with the file's placeholder style; update the Close example (the line
containing: jira issue move TICKET-KEY "Closed" --resolution "Won't
Do|Rejected|Duplicate") to use the same placeholder convention—either replace
the pipe syntax with an angle-bracketed alternatives placeholder like
--resolution "<Won't Do|Rejected|Duplicate>" or, better, use a single
descriptive placeholder such as --resolution "<Resolution>" and list the
acceptable values elsewhere for consistency.
---
Nitpick comments:
In `@hyperfleet-jira/skills/jira-ticket-creator/SKILL.md`:
- Around line 141-144: The "List of manual steps needed" section is currently
always shown and can be misleading when there are no follow-up actions; update
the SKILL.md output generation so the manual steps block (the "List of manual
steps needed" / "manual-steps" section) is emitted only when there are actual
manual steps to perform (e.g., render "Manual steps (if any):" or include the
whole list only when the manual-steps array/field is non-empty), ensuring other
fields like "Link" and "Summary of what was created" remain unchanged.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: a4de7e41-1828-4e27-bd3e-20d4f4952413
⛔ Files ignored due to path filters (1)
hyperfleet-bugs-triage/skills/bugs-triage/references/owners.csvis excluded by!**/*.csv
📒 Files selected for processing (12)
.claude-plugin/marketplace.jsonCLAUDE.mdhyperfleet-bugs-triage/.claude-plugin/plugin.jsonhyperfleet-bugs-triage/OWNERShyperfleet-bugs-triage/README.mdhyperfleet-bugs-triage/skills/bugs-triage/SKILL.mdhyperfleet-bugs-triage/skills/bugs-triage/references/github-repos.mdhyperfleet-jira/.claude-plugin/plugin.jsonhyperfleet-jira/skills/jira-ticket-creator/SKILL.mdhyperfleet-jira/skills/jira-ticket-creator/references/cli-examples.mdhyperfleet-jira/skills/jira-ticket-creator/references/formatting.mdhyperfleet-jira/skills/jira-ticket-creator/references/pitfalls.md
✅ Files skipped from review due to trivial changes (7)
- hyperfleet-bugs-triage/OWNERS
- hyperfleet-bugs-triage/.claude-plugin/plugin.json
- hyperfleet-bugs-triage/skills/bugs-triage/references/github-repos.md
- .claude-plugin/marketplace.json
- hyperfleet-jira/skills/jira-ticket-creator/references/formatting.md
- hyperfleet-jira/skills/jira-ticket-creator/references/cli-examples.md
- hyperfleet-bugs-triage/README.md
🚧 Files skipped from review as they are similar to previous changes (2)
- CLAUDE.md
- hyperfleet-jira/.claude-plugin/plugin.json
ciaranRoche
left a comment
There was a problem hiding this comment.
Left some comments inline, a couple of things outside the diff:
-
Version conflict with PR #17: This bumps hyperfleet-jira from 0.4.0 to 0.4.1, while #17 bumps it to 0.5.0. Whichever merges second will conflict.
-
hyperfleet-jira/.claude-plugin/plugin.jsondescription: Still says "with proper JIRA wiki markup" but the refactored skill now uses Markdown. Should update to match. -
Markdown vs wiki markup switch: This is the big one. The old skill was very emphatic about NOT using Markdown, and now the new version says the opposite. Have you verified curly braces, fenced code blocks, and nested lists all render correctly? The old skill specifically called out HYPERFLEET-255 and HYPERFLEET-258 as tickets where this broke rendering. If those were just user error at the time, that's fine, but worth confirming since everyone on the team has been trained to avoid Markdown in JIRA descriptions.
The bugs-triage plugin looks solid, good call delegating ticket creation to jira-ticket-creator instead of duplicating content. The refactor from 738 to ~195 lines is a nice cleanup.
| ```text | ||
| **POST** /api/v1/clusters/:id (bold method, colon notation) | ||
| **GET** /api/v1/clusters/{id} (curly braces work too) | ||
| ``` |
There was a problem hiding this comment.
Can you confirm curly braces actually render correctly now? The old SKILL.md was very specific that curly braces broke JIRA rendering, with real ticket references (HYPERFLEET-255, HYPERFLEET-258). If the jira-cli Markdown to ADF conversion handles this properly now, then this whole refactor makes sense, just want to make sure we are not going to break ticket descriptions for everyone.
There was a problem hiding this comment.
Confirmed. I asked it jira-cli to write a Jira comment using all mentioned formats in this comment: https://redhat.atlassian.net/browse/HYPERFLEET-811?focusedCommentId=16546261
I believe that the updated jira-cli/jira server fixed the issues from HYPERFLEET-255 and 258.
af3bada to
2efa3f1
Compare
|
@ciaranRoche Thanks for the review! Version conflict with PR #17: I put PR #17 on hold because I need to guarantee that calling the github actions dispatcher needs the proper permission. So I gave priority to this one as bugs triage seems to be more needed. Once this PR is merged I can return to plugin tracking (including this) plugin.json description: Good catch — fixed. Removed the "with proper JIRA wiki markup" reference. Markdown vs wiki markup: Yes, I verified this. The jira-cli sends descriptions to JIRA Cloud's |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
hyperfleet-bugs-triage/skills/bugs-triage/SKILL.md (1)
153-157: Align the query description with actual filter behavior.Line 153 says the query returns issues that are unlabeled or
hf-needs-triage, but Line 157 actually returns any open issue missinghf-triaged/*labels. This mismatch will confuse future maintenance and triage expectations.Proposed wording fix
-First, read `references/github-repos.md` to get the list of repos in scope. Then query only those repos. The query fetches issues that are either unlabeled or have `hf-needs-triage` but NOT already triaged labels: +First, read `references/github-repos.md` to get the list of repos in scope. Then query only those repos. The query fetches open issues that are not yet marked with final triage labels (`hf-triaged/accepted`, `hf-triaged/rejected`, `hf-triaged/duplicate`):🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@hyperfleet-bugs-triage/skills/bugs-triage/SKILL.md` around lines 153 - 157, The description text says the query returns issues that are unlabeled or labeled hf-needs-triage, but the actual gh api search/issues command filters for any open issue missing hf-triaged/* labels; update the prose in SKILL.md to match the command by explicitly stating that the query returns open issues across the repos listed in references/github-repos.md that do not have any hf-triaged/* labels (not just unlabeled or hf-needs-triage), and mention the specific labels (hf-needs-triage and hf-triaged/accepted, hf-triaged/rejected, hf-triaged/duplicate) so readers understand the exact filter used by the gh api search/issues command.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@hyperfleet-jira/skills/jira-ticket-creator/references/pitfalls.md`:
- Around line 28-30: The fenced code block containing the literal "Error:
customfield_12311141: Epic Name is required." is unlabeled and triggers MD040;
add a language tag (e.g., change the opening fence from ``` to ```text) so the
block reads as a text code fence, keeping the block content unchanged to satisfy
markdown linting.
---
Nitpick comments:
In `@hyperfleet-bugs-triage/skills/bugs-triage/SKILL.md`:
- Around line 153-157: The description text says the query returns issues that
are unlabeled or labeled hf-needs-triage, but the actual gh api search/issues
command filters for any open issue missing hf-triaged/* labels; update the prose
in SKILL.md to match the command by explicitly stating that the query returns
open issues across the repos listed in references/github-repos.md that do not
have any hf-triaged/* labels (not just unlabeled or hf-needs-triage), and
mention the specific labels (hf-needs-triage and hf-triaged/accepted,
hf-triaged/rejected, hf-triaged/duplicate) so readers understand the exact
filter used by the gh api search/issues command.
🪄 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: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: cbe1bb96-48da-4131-969f-94c7f9ca1fab
⛔ Files ignored due to path filters (1)
hyperfleet-bugs-triage/skills/bugs-triage/references/owners.csvis excluded by!**/*.csv
📒 Files selected for processing (12)
.claude-plugin/marketplace.jsonCLAUDE.mdhyperfleet-bugs-triage/.claude-plugin/plugin.jsonhyperfleet-bugs-triage/OWNERShyperfleet-bugs-triage/README.mdhyperfleet-bugs-triage/skills/bugs-triage/SKILL.mdhyperfleet-bugs-triage/skills/bugs-triage/references/github-repos.mdhyperfleet-jira/.claude-plugin/plugin.jsonhyperfleet-jira/skills/jira-ticket-creator/SKILL.mdhyperfleet-jira/skills/jira-ticket-creator/references/cli-examples.mdhyperfleet-jira/skills/jira-ticket-creator/references/formatting.mdhyperfleet-jira/skills/jira-ticket-creator/references/pitfalls.md
✅ Files skipped from review due to trivial changes (6)
- hyperfleet-bugs-triage/OWNERS
- .claude-plugin/marketplace.json
- CLAUDE.md
- hyperfleet-bugs-triage/.claude-plugin/plugin.json
- hyperfleet-jira/skills/jira-ticket-creator/references/formatting.md
- hyperfleet-jira/skills/jira-ticket-creator/references/cli-examples.md
🚧 Files skipped from review as they are similar to previous changes (3)
- hyperfleet-bugs-triage/skills/bugs-triage/references/github-repos.md
- hyperfleet-jira/.claude-plugin/plugin.json
- hyperfleet-bugs-triage/README.md
hyperfleet-jira/skills/jira-ticket-creator/references/pitfalls.md
Outdated
Show resolved
Hide resolved
2efa3f1 to
7023261
Compare
…icket-creator - Add bugs-triage skill for interactive Jira bug and GitHub issue triage - Refactor jira-ticket-creator: split into SKILL.md + 3 reference files - Correct formatting: jira-cli accepts Markdown (not wiki markup) - Add Activity Type tiebreaker rules and delegate story points to jira-story-pointer - Add language identifiers to all fenced code blocks
7023261 to
ffe9654
Compare
There was a problem hiding this comment.
♻️ Duplicate comments (1)
hyperfleet-bugs-triage/skills/bugs-triage/SKILL.md (1)
153-173:⚠️ Potential issue | 🟠 MajorHardcoded repo list creates maintenance drift risk.
Line 153 instructs reading
references/github-repos.mddynamically, but lines 157 and 171 hardcode all 12 repositories in thegh api search/issuesqueries. If a repository is added to github-repos.md, it won't be picked up by the triage queries, causing scope drift.♻️ Proposed solutions
Solution 1 (Recommended): Construct query dynamically from github-repos.md
At line 153, before the first query, add a command block to extract and format the repo list:
First, read `references/github-repos.md` to get the list of repos in scope. Then query only those repos. The query fetches issues that are either unlabeled or have `hf-needs-triage` but NOT already triaged labels: +```bash +# Extract repo names and build query fragment +REPOS=$(grep -E '^- `' references/github-repos.md | sed 's/^- `//;s/`$//' | sed 's/^/repo:openshift-hyperfleet\//' | tr '\n' ' ') +``` + ```bash gh api search/issues -X GET \ - -f q="is:issue is:open -label:hf-triaged/accepted -label:hf-triaged/rejected -label:hf-triaged/duplicate repo:openshift-hyperfleet/hyperfleet-api repo:openshift-hyperfleet/hyperfleet-adapter repo:openshift-hyperfleet/hyperfleet-sentinel repo:openshift-hyperfleet/hyperfleet-broker repo:openshift-hyperfleet/hyperfleet-chart repo:openshift-hyperfleet/hyperfleet-infra repo:openshift-hyperfleet/hyperfleet-credential-provider repo:openshift-hyperfleet/hyperfleet-logger repo:openshift-hyperfleet/hyperfleet-e2e repo:openshift-hyperfleet/maestro-cli repo:openshift-hyperfleet/architecture repo:openshift-hyperfleet/hyperfleet-claude-plugins" \ + -f q="is:issue is:open -label:hf-triaged/accepted -label:hf-triaged/rejected -label:hf-triaged/duplicate $REPOS" \Apply the same pattern to the query at lines 170-173.
Solution 2: Remove the reference file and maintain the list in SKILL.md
If dynamic construction is too complex, remove
references/github-repos.mdand document the canonical list only in SKILL.md to avoid the two-source-of-truth problem.As per coding guidelines, this maintenance issue impacts readability and long-term correctness.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@hyperfleet-bugs-triage/skills/bugs-triage/SKILL.md` around lines 153 - 173, Replace the hardcoded repo lists used in the two gh api search/issues commands with a dynamically built REPOS variable: add a small command block that parses references/github-repos.md to extract repository slugs and prefixes them with "repo:openshift-hyperfleet/" (store result in REPOS), then update both gh api search/issues invocations (the commands that start with gh api search/issues -X GET and include the long repo:openshift-hyperfleet/... list) to use "$REPOS" in the -f q="... $REPOS" fragment instead of the inline list; ensure the parsing handles the markdown list format used in references/github-repos.md and that $REPOS is properly quoted in the query string.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Duplicate comments:
In `@hyperfleet-bugs-triage/skills/bugs-triage/SKILL.md`:
- Around line 153-173: Replace the hardcoded repo lists used in the two gh api
search/issues commands with a dynamically built REPOS variable: add a small
command block that parses references/github-repos.md to extract repository slugs
and prefixes them with "repo:openshift-hyperfleet/" (store result in REPOS),
then update both gh api search/issues invocations (the commands that start with
gh api search/issues -X GET and include the long repo:openshift-hyperfleet/...
list) to use "$REPOS" in the -f q="... $REPOS" fragment instead of the inline
list; ensure the parsing handles the markdown list format used in
references/github-repos.md and that $REPOS is properly quoted in the query
string.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: c44a49a1-e4c7-47c7-8e03-49caa576728a
⛔ Files ignored due to path filters (1)
hyperfleet-bugs-triage/skills/bugs-triage/references/owners.csvis excluded by!**/*.csv
📒 Files selected for processing (12)
.claude-plugin/marketplace.jsonCLAUDE.mdhyperfleet-bugs-triage/.claude-plugin/plugin.jsonhyperfleet-bugs-triage/OWNERShyperfleet-bugs-triage/README.mdhyperfleet-bugs-triage/skills/bugs-triage/SKILL.mdhyperfleet-bugs-triage/skills/bugs-triage/references/github-repos.mdhyperfleet-jira/.claude-plugin/plugin.jsonhyperfleet-jira/skills/jira-ticket-creator/SKILL.mdhyperfleet-jira/skills/jira-ticket-creator/references/cli-examples.mdhyperfleet-jira/skills/jira-ticket-creator/references/formatting.mdhyperfleet-jira/skills/jira-ticket-creator/references/pitfalls.md
✅ Files skipped from review due to trivial changes (10)
- hyperfleet-bugs-triage/skills/bugs-triage/references/github-repos.md
- hyperfleet-bugs-triage/.claude-plugin/plugin.json
- CLAUDE.md
- .claude-plugin/marketplace.json
- hyperfleet-jira/skills/jira-ticket-creator/references/formatting.md
- hyperfleet-jira/.claude-plugin/plugin.json
- hyperfleet-jira/skills/jira-ticket-creator/references/pitfalls.md
- hyperfleet-bugs-triage/OWNERS
- hyperfleet-jira/skills/jira-ticket-creator/references/cli-examples.md
- hyperfleet-bugs-triage/README.md
|
Part of this PR has been moved to another ticket |
Summary
hyperfleet-bugs-triageplugin for interactive Jira bug and GitHub issue triagehyperfleet-jirajira-ticket-creator skill — split from 738 to ~195 lines, corrected formatting (Markdown, not wiki markup), added tiebreaker rules, delegated story points to jira-story-pointerNew: hyperfleet-bugs-triage plugin
/bugs-triageskill with interactive per-bug workflowhyperfleet-jira:jira-ticket-creatorskill (no content duplication)owners.csv(component owners) andgithub-repos.md(12 repos in scope)Refactored: jira-ticket-creator (v0.4.0 → v0.4.1)
formatting.md,cli-examples.md,pitfalls.md)jira-story-pointerskillissues.redhat.comtoredhat.atlassian.netTest plan
hyperfleet-bugs-triageplugin locally and run/bugs-triage jirahyperfleet-bugs-triageplugin locally and run/bugs-triage githubjira-ticket-creatorskill and verify Markdown renders correctlyjira-story-pointerdelegation works fromjira-ticket-creatorSummary by CodeRabbit
New Features
Improvements
Updates
Documentation