Skip to content

feat(jira-issue-creator): replace agent with Python-validated skill#50

Open
charlesmulder wants to merge 5 commits into
RedHatInsights:masterfrom
charlesmulder:jira-issue-creator-skill
Open

feat(jira-issue-creator): replace agent with Python-validated skill#50
charlesmulder wants to merge 5 commits into
RedHatInsights:masterfrom
charlesmulder:jira-issue-creator-skill

Conversation

@charlesmulder
Copy link
Copy Markdown
Contributor

@charlesmulder charlesmulder commented May 13, 2026

Description

Replace hcc-frontend-jira-issue-creator agent with Python-validated skill using interactive dropdowns.

What:

  • Delete plugins/management/agents/hcc-frontend-jira-issue-creator.md
  • Add plugins/management/skills/jira-issue-creator/ with Python validation (35 tests)
  • Interactive workflow: user confirms team/activity/type/prefix via AskUserQuestion
  • Description enriched after creation, updated separately
  • Bump management-plugin: 1.0.0 → 1.1.0

Why:

  • Agent showed incorrect fields (labels on unassigned tickets)
  • Python validation eliminates Claude interpretation errors

Blast radius

Internal developers using hcc-frontend-ai-toolkit plugin. Use /jira-issue-creator skill instead of deprecated agent.


Rollback plan

git revert sufficient. Plugin updates don't affect production.


Checklist

  • Tested locally (35 tests passing)
  • No breaking changes to other plugin features
  • No hardcoded secrets
  • N/A - plugin only

AI disclosure

Assisted by: Claude Code

@charlesmulder charlesmulder marked this pull request as draft May 13, 2026 10:12
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 13, 2026

Warning

Rate limit exceeded

@charlesmulder has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 2 minutes and 1 second before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Enterprise

Run ID: f59b3c57-1206-4eba-86fe-ffa8633426b2

📥 Commits

Reviewing files that changed from the base of the PR and between cee8e38 and cae6627.

📒 Files selected for processing (3)
  • plugins/management/skills/jira-issue-creator/SKILL.md
  • plugins/management/skills/jira-issue-creator/jira_fields.py
  • plugins/management/skills/jira-issue-creator/tests/test_jira_fields.py

Walkthrough

Adds a Python CLI validator and tests for a jira-issue-creator skill, SKILL/README docs and usage notes, bumps plugin/package versions and marketplace metadata, and updates root and skill .gitignore entries.

Changes

Jira Issue Creator — combined changes

Layer / File(s) Summary
Manifests & project config
.claude-plugin/marketplace.json, plugins/management/.claude-plugin/plugin.json, plugins/management/package.json, plugins/management/project.json
Bump plugins/management version to 1.1.0, reformat keywords arrays, and update the Nx test target to run the skill's Python pytest suite.
Agent note & ignore updates
.gitignore, plugins/management/agents/hcc-frontend-jira-issue-creator.md, plugins/management/skills/jira-issue-creator/.gitignore
Root .gitignore adds /tmp; agent doc adds an “Alternative” referencing the /jira-issue-creator skill; skill .gitignore adds Python dev ignores (.venv/, __pycache__/, .pytest_cache/, *.pyc).
Skill definition and docs
plugins/management/skills/jira-issue-creator/SKILL.md, plugins/management/skills/jira-issue-creator/README.md
Adds full SKILL.md workflow (assignee resolution, 3 AskUserQuestion steps, dropdowns, CLI validation call, create + enrich/update flow) and README Quick Start, invocation contract, validation rules, and testing guidance.
Validation contract and CLI
plugins/management/skills/jira-issue-creator/jira_fields.py
New Python CLI: loads/caches allowed repo:* labels, validates summary/team, enforces bot-label repo allowlist, detects activity type/security, optional prefixing, and emits JSON payloads or errors with exit codes.
Validation tests & deps
plugins/management/skills/jira-issue-creator/tests/test_jira_fields.py, plugins/management/skills/jira-issue-creator/requirements.txt
Adds pytest dependency and a comprehensive pytest module covering activity detection, security-level logic, label validation rules, prefix behavior, team suggestions/errors, and end-to-end payload assertions.

Sequence Diagram

sequenceDiagram
  participant User as User/Claude
  participant Skill as jira-issue-creator Skill
  participant CLI as jira_fields.py
  participant Cache as Disk Cache
  participant GitHub as project-repos.json
  participant Jira as Jira MCP

  User->>Skill: Create issue request (summary, optional description)
  Skill->>User: AskUserQuestion (team, activity type, issue type, prefix)
  User->>Skill: Provide selections
  Skill->>Skill: Resolve assignee intent (bot | user | unassigned)
  Skill->>CLI: validate_and_build(fields, labels, flags)
  CLI->>Cache: Check repo-labels cache
  alt cache miss or --refresh-cache
    CLI->>GitHub: Fetch project-repos.json
    GitHub-->>CLI: Return repo data
    CLI->>Cache: Write labels to disk
  end
  CLI->>CLI: Detect activity type, determine security, validate labels, build payload
  CLI-->>Skill: Return JSON (errors or validated payload)
  alt validation fails
    Skill->>User: Show errors/suggestions
  else validation succeeds
    Skill->>Jira: create_issue(validated payload)
    Jira-->>Skill: Return issue key and URL
    Skill->>User: Show created issue and request description enrichment
    User->>Skill: Provide enriched description
    Skill->>Jira: update_issue with enriched description (after approval)
    Jira-->>Skill: Confirm update
    Skill->>User: Display final issue info
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 38.10% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: replacing an agent with a Python-validated skill for Jira issue creation, which is the primary objective of the PR.
Description check ✅ Passed The PR description comprehensively covers required template sections: describes what changed and why, identifies blast radius (internal developers), explains rollback (git revert), includes a completed checklist, and discloses AI assistance.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@charlesmulder charlesmulder force-pushed the jira-issue-creator-skill branch from 51be2d7 to e266093 Compare May 13, 2026 10:21
@charlesmulder charlesmulder marked this pull request as ready for review May 13, 2026 10:21
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🧹 Nitpick comments (7)
plugins/management/skills/jira-issue-creator/SKILL.md (2)

126-132: 💤 Low value

Add language specifier to fenced code block.

For consistency, add a language specifier (e.g., text or markdown) to the fenced code block.

✨ Proposed fix
-```
+```text
 Proposed description for RHCLOUD-XXXX:
 ---
 [enriched description]
 ---
 Approve? (yes/no)
 ```
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/management/skills/jira-issue-creator/SKILL.md` around lines 126 -
132, The fenced code block in SKILL.md (the example starting with "Proposed
description for RHCLOUD-XXXX:") lacks a language specifier; update that fenced
block to include a language label like "text" or "markdown" (replace the opening
``` with ```text) so the block becomes ```text ... ``` to maintain consistency
and correct syntax highlighting.

111-114: 💤 Low value

Add language specifier to fenced code block.

For consistency and better rendering, add a language specifier (e.g., text or plaintext) to the fenced code block.

✨ Proposed fix
-```
+```text
 Created RHCLOUD-XXXX
 View: https://redhat.atlassian.net/browse/RHCLOUD-XXXX
 ```
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/management/skills/jira-issue-creator/SKILL.md` around lines 111 -
114, In SKILL.md update the fenced code block that contains "Created
RHCLOUD-XXXX" and "View: https://redhat.atlassian.net/browse/RHCLOUD-XXXX" to
include a language specifier (e.g., ```text) after the opening backticks so the
block reads as a plaintext/text code fence; this ensures consistent rendering
across markdown renderers.
plugins/management/skills/jira-issue-creator/tests/test_jira_fields.py (1)

9-10: ⚖️ Poor tradeoff

Consider package structure to avoid sys.path manipulation.

The sys.path.insert workaround is functional but not ideal. Consider structuring the code as a proper package or using relative imports if the skill grows more complex. For the current plugin scope, this is acceptable.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/management/skills/jira-issue-creator/tests/test_jira_fields.py`
around lines 9 - 10, The test file is mutating sys.path via sys.path.insert(0,
str(Path(__file__).parent.parent)), which is a fragile workaround; instead, make
the module importable by converting the plugin into a proper package (add
__init__.py files) and use package-relative imports in tests (or change the test
to a package-style import such as from
plugins.management.skills.jira_issue_creator import <module>), or run tests with
PYTHONPATH/test runner configured so sys.path manipulation is unnecessary;
update the test to remove the sys.path.insert call and reference modules using
their package-qualified names (or use relative imports) to eliminate the hack.
plugins/management/skills/jira-issue-creator/README.md (3)

113-116: 💤 Low value

Add language specifier to fenced code block.

For better syntax highlighting, add a language specifier (e.g., bash or text) to the fenced code block.

✨ Proposed fix
-```
+```bash
 /plugin uninstall hcc-frontend-ai-toolkit
 /plugin install hcc-frontend-toolkit
 ```
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/management/skills/jira-issue-creator/README.md` around lines 113 -
116, Update the fenced code block containing the plugin commands (the lines
starting with "/plugin uninstall hcc-frontend-ai-toolkit" and "/plugin install
hcc-frontend-toolkit") to include a language specifier (e.g., "bash" or "text")
after the opening triple backticks so the block becomes ```bash (or ```text) to
enable proper syntax highlighting.

191-200: 💤 Low value

Add language specifier to fenced code block.

For better syntax highlighting, add a language specifier (e.g., text or yaml) to the fenced code block.

✨ Proposed fix
-```
+```text
 Created RHCLOUD-XXXX
 - Type: Story
 - Summary: [scalprum] Refactor CI workflow
 - Team: Console - Framework
 - Assignee: chmulder@redhat.com
 - Activity Type: Quality / Stability / Reliability
 - Description: Updated with enriched context
 - View: https://redhat.atlassian.net/browse/RHCLOUD-XXXX
 ```
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/management/skills/jira-issue-creator/README.md` around lines 191 -
200, The fenced code block containing "Created RHCLOUD-XXXX" in README.md lacks
a language specifier; update the opening fence from ``` to ```text (or ```yaml)
so the block that starts with "Created RHCLOUD-XXXX" is rendered with proper
syntax highlighting.

203-206: 💤 Low value

Add language specifier to fenced code block.

For consistency, add a language specifier (e.g., text) to the fenced code block.

✨ Proposed fix
-```
+```text
 Created RHCLOUD-XXXX (updated with enriched description)
 View: https://redhat.atlassian.net/browse/RHCLOUD-XXXX
 ```
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/management/skills/jira-issue-creator/README.md` around lines 203 -
206, Update the fenced code block that contains "Created RHCLOUD-XXXX (updated
with enriched description) / View:
https://redhat.atlassian.net/browse/RHCLOUD-XXXX" in README.md to include a
language specifier by changing the opening fence from ``` to ```text so the
snippet is rendered consistently; ensure only the opening fence is updated and
the closing fence remains ``` to preserve the block content.
plugins/management/skills/jira-issue-creator/jira_fields.py (1)

64-65: 💤 Low value

Consider logging cache read failures.

The silent pass on cache read exceptions makes debugging harder. Consider logging the error for troubleshooting.

📝 Suggested improvement
     try:
         cached = json.loads(CACHE_FILE.read_text())
         return set(cached)
     except Exception:
-        pass  # Cache invalid, fetch fresh
+        print("Cache invalid, fetching fresh repo labels", file=sys.stderr)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/management/skills/jira-issue-creator/jira_fields.py` around lines 64
- 65, The cache-read exception handler in jira_fields.py currently swallows
errors ("except Exception: pass  # Cache invalid, fetch fresh"); change it to
capture the exception (except Exception as e) and log the error (e.g.,
logger.exception or logger.error with the exception/traceback) before continuing
so you still fall back to a fresh fetch; if a module logger does not exist,
create one with logging.getLogger(__name__) and use that to record contextual
details about the cache failure.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@plugins/management/skills/jira-issue-creator/jira_fields.py`:
- Line 187: The variable labels_valid returned from validate_labels(...) is
never used; replace it with an underscore to mark it intentionally ignored by
changing the unpacking from "labels_valid, label_errors =
validate_labels(labels, assignee_type, allowed_repos)" to "_, label_errors =
validate_labels(labels, assignee_type, allowed_repos)". This keeps the call to
validate_labels intact while signaling the unused value, and update any
surrounding code/comments if they reference labels_valid.
- Line 215: The list comprehension that extends final_labels uses an ambiguous
single-letter variable name `l`; update the comprehension in the code that
constructs final_labels (the expression using labels and .startswith("repo:"))
to use a descriptive name like `label` (e.g., replace `l` with `label`) so the
intent is clear and avoids confusion with similar-looking characters.
- Line 309: Replace the ambiguous single-letter loop variable in the list
comprehension that builds labels (currently using "l") with a descriptive name
like "label" to improve readability; update the expression that references
args.labels (the list comprehension assigning to labels) to use the new variable
name consistently (e.g., label.strip() for label in args.labels.split(",") if
label.strip()).
- Around line 78-80: The current except block swallows GitHub fetch errors and
returns an empty set (print in except for REPOS_URL), which makes downstream
validation report misleading "Unknown repo label" errors; change this to surface
the root cause by either (a) retrying the fetch a few times before failing, or
(b) raising a descriptive exception (e.g., RuntimeError or a custom FetchError)
that includes REPOS_URL and the original exception message instead of returning
set(), and update any caller of this function to handle the raised exception (or
a None/sentinel if you choose that approach) so the caller can show a clear
"failed to fetch repo list" error rather than treating it as an empty repo set;
locate the change in the except handling around REPOS_URL in the function that
performs the GitHub repo fetch.

In `@plugins/management/skills/jira-issue-creator/requirements.txt`:
- Line 2: Update the pytest requirement in requirements.txt to a secure minimum
version by changing the dependency spec from "pytest>=9.0.0" to "pytest>=9.0.3";
ensure the requirements.txt entry in the jira-issue-creator plugin reflects this
new minimum so package installers will pick pytest 9.0.3 or later.

---

Nitpick comments:
In `@plugins/management/skills/jira-issue-creator/jira_fields.py`:
- Around line 64-65: The cache-read exception handler in jira_fields.py
currently swallows errors ("except Exception: pass  # Cache invalid, fetch
fresh"); change it to capture the exception (except Exception as e) and log the
error (e.g., logger.exception or logger.error with the exception/traceback)
before continuing so you still fall back to a fresh fetch; if a module logger
does not exist, create one with logging.getLogger(__name__) and use that to
record contextual details about the cache failure.

In `@plugins/management/skills/jira-issue-creator/README.md`:
- Around line 113-116: Update the fenced code block containing the plugin
commands (the lines starting with "/plugin uninstall hcc-frontend-ai-toolkit"
and "/plugin install hcc-frontend-toolkit") to include a language specifier
(e.g., "bash" or "text") after the opening triple backticks so the block becomes
```bash (or ```text) to enable proper syntax highlighting.
- Around line 191-200: The fenced code block containing "Created RHCLOUD-XXXX"
in README.md lacks a language specifier; update the opening fence from ``` to
```text (or ```yaml) so the block that starts with "Created RHCLOUD-XXXX" is
rendered with proper syntax highlighting.
- Around line 203-206: Update the fenced code block that contains "Created
RHCLOUD-XXXX (updated with enriched description) / View:
https://redhat.atlassian.net/browse/RHCLOUD-XXXX" in README.md to include a
language specifier by changing the opening fence from ``` to ```text so the
snippet is rendered consistently; ensure only the opening fence is updated and
the closing fence remains ``` to preserve the block content.

In `@plugins/management/skills/jira-issue-creator/SKILL.md`:
- Around line 126-132: The fenced code block in SKILL.md (the example starting
with "Proposed description for RHCLOUD-XXXX:") lacks a language specifier;
update that fenced block to include a language label like "text" or "markdown"
(replace the opening ``` with ```text) so the block becomes ```text ... ``` to
maintain consistency and correct syntax highlighting.
- Around line 111-114: In SKILL.md update the fenced code block that contains
"Created RHCLOUD-XXXX" and "View:
https://redhat.atlassian.net/browse/RHCLOUD-XXXX" to include a language
specifier (e.g., ```text) after the opening backticks so the block reads as a
plaintext/text code fence; this ensures consistent rendering across markdown
renderers.

In `@plugins/management/skills/jira-issue-creator/tests/test_jira_fields.py`:
- Around line 9-10: The test file is mutating sys.path via sys.path.insert(0,
str(Path(__file__).parent.parent)), which is a fragile workaround; instead, make
the module importable by converting the plugin into a proper package (add
__init__.py files) and use package-relative imports in tests (or change the test
to a package-style import such as from
plugins.management.skills.jira_issue_creator import <module>), or run tests with
PYTHONPATH/test runner configured so sys.path manipulation is unnecessary;
update the test to remove the sys.path.insert call and reference modules using
their package-qualified names (or use relative imports) to eliminate the hack.
🪄 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: Enterprise

Run ID: b6305529-9ae1-4a29-a72b-dfc0d7dd7be4

📥 Commits

Reviewing files that changed from the base of the PR and between 1405083 and e266093.

📒 Files selected for processing (10)
  • .gitignore
  • plugins/infrastructure/skills/db-upgrader/SKILL.md
  • plugins/management/agents/hcc-frontend-jira-issue-creator.md
  • plugins/management/skills/jira-issue-creator/.gitignore
  • plugins/management/skills/jira-issue-creator/README.md
  • plugins/management/skills/jira-issue-creator/SKILL.md
  • plugins/management/skills/jira-issue-creator/jira_fields.py
  • plugins/management/skills/jira-issue-creator/requirements.txt
  • plugins/management/skills/jira-issue-creator/tests/test_jira_fields.py
  • tests/agents/hcc-frontend-jira-issue-creator.test.md
💤 Files with no reviewable changes (2)
  • tests/agents/hcc-frontend-jira-issue-creator.test.md
  • plugins/management/agents/hcc-frontend-jira-issue-creator.md

Comment thread plugins/management/skills/jira-issue-creator/jira_fields.py Outdated
Comment thread plugins/management/skills/jira-issue-creator/jira_fields.py Outdated
Comment thread plugins/management/skills/jira-issue-creator/jira_fields.py Outdated
Comment thread plugins/management/skills/jira-issue-creator/jira_fields.py Outdated
Comment thread plugins/management/skills/jira-issue-creator/requirements.txt Outdated
@charlesmulder charlesmulder force-pushed the jira-issue-creator-skill branch 2 times, most recently from fbc18f5 to 7d66967 Compare May 13, 2026 11:15
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

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 `@plugins/management/skills/jira-issue-creator/jira_fields.py`:
- Around line 277-279: The --issue-type CLI argument in parser.add_argument
currently accepts arbitrary strings (parser.add_argument("--issue-type",
default="Story", ...)), but downstream logic expects only Story/Bug/Epic; update
the argument definition to constrain allowed values (e.g., use the argparse
choices parameter or add explicit validation after parsing) so only "Story",
"Bug", or "Epic" are accepted, keep the default as "Story", and return/raise a
clear error message if an unsupported value is provided.
- Around line 316-317: Move the unconditional call to load_repo_labels() so it
only runs for bot-created tickets: check the flag/condition that identifies bot
tickets (e.g., args.is_bot or the function that determines bot authorship) and
call load_repo_labels() inside that branch before using allowed_repos; leave the
existing labels parsing (labels = [label.strip() for label in
args.labels.split(",") if label.strip()]) unchanged and ensure non-bot paths do
not call load_repo_labels() so failures in GitHub/cache do not affect
user/non-bot ticket creation.

In `@plugins/management/skills/jira-issue-creator/SKILL.md`:
- Around line 88-89: The shell example in SKILL.md uses a line with --labels
"repo:scalprum" \ followed by an inline comment which breaks the shell
continuation; edit the example so comments are not placed after a trailing
backslash—either move the comment "# Only if bot ticket" to its own line above
or below the continued line, or remove the comment entirely, and ensure the
continuation for the --labels and --assignee-type lines (references: --labels
"repo:scalprum", --assignee-type "<bot|unassigned>") uses a trailing backslash
only with no inline comment.
🪄 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: Enterprise

Run ID: 7cc5fcac-1bf5-4c1a-9775-5253504d83f4

📥 Commits

Reviewing files that changed from the base of the PR and between e266093 and 6abf258.

📒 Files selected for processing (13)
  • .claude-plugin/marketplace.json
  • .gitignore
  • plugins/infrastructure/skills/db-upgrader/SKILL.md
  • plugins/management/.claude-plugin/plugin.json
  • plugins/management/agents/hcc-frontend-jira-issue-creator.md
  • plugins/management/package.json
  • plugins/management/skills/jira-issue-creator/.gitignore
  • plugins/management/skills/jira-issue-creator/README.md
  • plugins/management/skills/jira-issue-creator/SKILL.md
  • plugins/management/skills/jira-issue-creator/jira_fields.py
  • plugins/management/skills/jira-issue-creator/requirements.txt
  • plugins/management/skills/jira-issue-creator/tests/test_jira_fields.py
  • tests/agents/hcc-frontend-jira-issue-creator.test.md
💤 Files with no reviewable changes (2)
  • plugins/management/agents/hcc-frontend-jira-issue-creator.md
  • tests/agents/hcc-frontend-jira-issue-creator.test.md
✅ Files skipped from review due to trivial changes (5)
  • .gitignore
  • plugins/management/package.json
  • plugins/management/skills/jira-issue-creator/.gitignore
  • plugins/management/.claude-plugin/plugin.json
  • plugins/management/skills/jira-issue-creator/README.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • plugins/management/skills/jira-issue-creator/tests/test_jira_fields.py

Comment thread plugins/management/skills/jira-issue-creator/jira_fields.py
Comment thread plugins/management/skills/jira-issue-creator/jira_fields.py Outdated
Comment thread plugins/management/skills/jira-issue-creator/SKILL.md Outdated
@charlesmulder charlesmulder force-pushed the jira-issue-creator-skill branch from 40950bc to e5d3cf1 Compare May 15, 2026 11:27
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

♻️ Duplicate comments (1)
plugins/management/skills/jira-issue-creator/tests/test_jira_fields.py (1)

156-177: ⚠️ Potential issue | 🔴 Critical

Critical: Missing required parameter and undefined field reference.

Same issues as test_valid_unassigned_ticket: missing assignee parameter (lines 157-168) and assertion on non-existent fetch_bot_email field (line 176).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/management/skills/jira-issue-creator/tests/test_jira_fields.py`
around lines 156 - 177, The test test_valid_bot_ticket calls validate_and_build
without the required assignee parameter and asserts a non-existent key
fetch_bot_email; add assignee=None (or the same assignee value used in
test_valid_unassigned_ticket) to the validate_and_build(...) call in
test_valid_bot_ticket, and remove or replace the final assertion on
result["fetch_bot_email"] with the correct existing field assertion used by the
other tests (mirror the assertion pattern from test_valid_unassigned_ticket) so
the test references only defined keys.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@plugins/management/skills/jira-issue-creator/SKILL.md`:
- Around line 244-245: Update the Key Rules summary that currently states
"AskUserQuestion calls: Two calls" to accurately reflect three AskUserQuestion
calls (Step 3 for assignee, Step 5 for team/activity/type/prefix, and Step 9 for
approval loop), and adjust any related phrasing in SKILL.md so the count and the
described steps (including the approval loop in Step 9) match the workflow and
do not imply the description is part of the create payload.
- Around line 147-157: The example invocation in jira_fields.py docs shows
--labels and --assignee unconditionally which contradicts the note that they are
conditional; update the documentation/example to only include --labels when
assignee-type=bot and only include --assignee when an assignee value is provided
(omit those flags otherwise) — edit the example block in SKILL.md for
jira_fields.py to show either separate example lines for bot vs
non-bot/unassigned flows or a single example with a clear conditional note and
omitted flags when not applicable.

---

Duplicate comments:
In `@plugins/management/skills/jira-issue-creator/tests/test_jira_fields.py`:
- Around line 156-177: The test test_valid_bot_ticket calls validate_and_build
without the required assignee parameter and asserts a non-existent key
fetch_bot_email; add assignee=None (or the same assignee value used in
test_valid_unassigned_ticket) to the validate_and_build(...) call in
test_valid_bot_ticket, and remove or replace the final assertion on
result["fetch_bot_email"] with the correct existing field assertion used by the
other tests (mirror the assertion pattern from test_valid_unassigned_ticket) so
the test references only defined keys.
🪄 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: Enterprise

Run ID: 42c4f3ba-4637-49a7-87b2-04eb0e271482

📥 Commits

Reviewing files that changed from the base of the PR and between 6abf258 and e5d3cf1.

📒 Files selected for processing (13)
  • .claude-plugin/marketplace.json
  • .gitignore
  • plugins/infrastructure/skills/db-upgrader/SKILL.md
  • plugins/management/.claude-plugin/plugin.json
  • plugins/management/agents/hcc-frontend-jira-issue-creator.md
  • plugins/management/package.json
  • plugins/management/skills/jira-issue-creator/.gitignore
  • plugins/management/skills/jira-issue-creator/README.md
  • plugins/management/skills/jira-issue-creator/SKILL.md
  • plugins/management/skills/jira-issue-creator/jira_fields.py
  • plugins/management/skills/jira-issue-creator/requirements.txt
  • plugins/management/skills/jira-issue-creator/tests/test_jira_fields.py
  • tests/agents/hcc-frontend-jira-issue-creator.test.md
💤 Files with no reviewable changes (2)
  • plugins/management/agents/hcc-frontend-jira-issue-creator.md
  • tests/agents/hcc-frontend-jira-issue-creator.test.md
✅ Files skipped from review due to trivial changes (6)
  • plugins/management/package.json
  • plugins/management/skills/jira-issue-creator/requirements.txt
  • plugins/management/.claude-plugin/plugin.json
  • .gitignore
  • .claude-plugin/marketplace.json
  • plugins/management/skills/jira-issue-creator/README.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • plugins/management/skills/jira-issue-creator/.gitignore

Comment thread plugins/management/skills/jira-issue-creator/SKILL.md Outdated
Comment thread plugins/management/skills/jira-issue-creator/SKILL.md Outdated
@charlesmulder charlesmulder force-pushed the jira-issue-creator-skill branch from 1c214e5 to c892a82 Compare May 15, 2026 11:37
@florkbr
Copy link
Copy Markdown
Contributor

florkbr commented May 15, 2026

@charlesmulder awesome work! I do like that the skill removes some of the ambiguity - though FWIW whenever I find ambiguity like that with claude I usually try to have it store a memory and ensure I clarify in my prompting.

Either way, skill is cool. What are your thoughts on leaving the agent in place so we can try both for awhile and see which is more used or liked by the team better? Or do they conflict? We should be able to tell claude to use either one right?

To clarify, I'm suggesting keeping the agent temporarily (with a deprecation notice) so the team can validate the skill works and likes it before removing the fallback

@charlesmulder
Copy link
Copy Markdown
Contributor Author

charlesmulder commented May 18, 2026

@florkbr Thanks for the review. Good call. Agent restored with skill mention.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@plugins/management/skills/jira-issue-creator/jira_fields.py`:
- Around line 190-203: The function validate_and_build currently can return
valid:true for contradictory assignee states; after calling validate_labels and
other validators (e.g., where labels handled), add explicit invariant checks in
validate_and_build: if assignee_type == "bot" or assignee_type == "user" and
assignee is missing/empty, append an error (and a suggestion to set an assignee
or change assignee_type) and set valid false; if assignee_type == "unassigned"
but assignee is non-empty, clear or reject the assignee (append an error
suggesting to unset assignee or change assignee_type) and set valid false; apply
the same invariant enforcement in the other similar block referenced (lines
245–251) so the create payload never carries contradictory
assignee_type/assignee combinations.

In `@plugins/management/skills/jira-issue-creator/SKILL.md`:
- Around line 121-127: Update the Step 5 "Question 2: Activity Type" options in
SKILL.md to match the Python validator contract by adding the missing "Incidents
& Support" and "Associate Wellness & Development" entries where the dropdown
options are defined (the block titled "Question 2: Activity Type" and the
duplicate block around lines 267-269). Ensure the exact option strings match the
validator's expected values so the prompt flow and validation stay in sync.
🪄 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: Enterprise

Run ID: 6afde217-8a53-4665-8ba7-fa7633a2cb9e

📥 Commits

Reviewing files that changed from the base of the PR and between e5d3cf1 and cee8e38.

📒 Files selected for processing (14)
  • .claude-plugin/marketplace.json
  • .gitignore
  • plugins/infrastructure/skills/db-upgrader/SKILL.md
  • plugins/management/.claude-plugin/plugin.json
  • plugins/management/agents/hcc-frontend-jira-issue-creator.md
  • plugins/management/package.json
  • plugins/management/project.json
  • plugins/management/skills/jira-issue-creator/.gitignore
  • plugins/management/skills/jira-issue-creator/README.md
  • plugins/management/skills/jira-issue-creator/SKILL.md
  • plugins/management/skills/jira-issue-creator/jira_fields.py
  • plugins/management/skills/jira-issue-creator/requirements.txt
  • plugins/management/skills/jira-issue-creator/tests/test_jira_fields.py
  • tests/agents/hcc-frontend-jira-issue-creator.test.md
💤 Files with no reviewable changes (1)
  • tests/agents/hcc-frontend-jira-issue-creator.test.md
✅ Files skipped from review due to trivial changes (7)
  • .gitignore
  • plugins/management/skills/jira-issue-creator/requirements.txt
  • plugins/management/.claude-plugin/plugin.json
  • plugins/management/package.json
  • plugins/management/skills/jira-issue-creator/.gitignore
  • .claude-plugin/marketplace.json
  • plugins/management/skills/jira-issue-creator/README.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • plugins/management/skills/jira-issue-creator/tests/test_jira_fields.py

Comment thread plugins/management/skills/jira-issue-creator/jira_fields.py
Comment thread plugins/management/skills/jira-issue-creator/SKILL.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants