feat(jira-issue-creator): replace agent with Python-validated skill#50
feat(jira-issue-creator): replace agent with Python-validated skill#50charlesmulder wants to merge 5 commits into
Conversation
|
Warning Rate limit exceeded
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 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 configurationConfiguration used: Organization UI Review profile: CHILL Plan: Enterprise Run ID: 📒 Files selected for processing (3)
WalkthroughAdds 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. ChangesJira Issue Creator — combined changes
Sequence DiagramsequenceDiagram
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
Estimated code review effort🎯 4 (Complex) | ⏱️ ~50 minutes 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
51be2d7 to
e266093
Compare
There was a problem hiding this comment.
Actionable comments posted: 5
🧹 Nitpick comments (7)
plugins/management/skills/jira-issue-creator/SKILL.md (2)
126-132: 💤 Low valueAdd language specifier to fenced code block.
For consistency, add a language specifier (e.g.,
textormarkdown) 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 valueAdd language specifier to fenced code block.
For consistency and better rendering, add a language specifier (e.g.,
textorplaintext) 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 tradeoffConsider package structure to avoid sys.path manipulation.
The
sys.path.insertworkaround 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 valueAdd language specifier to fenced code block.
For better syntax highlighting, add a language specifier (e.g.,
bashortext) 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 valueAdd language specifier to fenced code block.
For better syntax highlighting, add a language specifier (e.g.,
textoryaml) 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 valueAdd 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 valueConsider logging cache read failures.
The silent
passon 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
📒 Files selected for processing (10)
.gitignoreplugins/infrastructure/skills/db-upgrader/SKILL.mdplugins/management/agents/hcc-frontend-jira-issue-creator.mdplugins/management/skills/jira-issue-creator/.gitignoreplugins/management/skills/jira-issue-creator/README.mdplugins/management/skills/jira-issue-creator/SKILL.mdplugins/management/skills/jira-issue-creator/jira_fields.pyplugins/management/skills/jira-issue-creator/requirements.txtplugins/management/skills/jira-issue-creator/tests/test_jira_fields.pytests/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
fbc18f5 to
7d66967
Compare
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 `@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
📒 Files selected for processing (13)
.claude-plugin/marketplace.json.gitignoreplugins/infrastructure/skills/db-upgrader/SKILL.mdplugins/management/.claude-plugin/plugin.jsonplugins/management/agents/hcc-frontend-jira-issue-creator.mdplugins/management/package.jsonplugins/management/skills/jira-issue-creator/.gitignoreplugins/management/skills/jira-issue-creator/README.mdplugins/management/skills/jira-issue-creator/SKILL.mdplugins/management/skills/jira-issue-creator/jira_fields.pyplugins/management/skills/jira-issue-creator/requirements.txtplugins/management/skills/jira-issue-creator/tests/test_jira_fields.pytests/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
40950bc to
e5d3cf1
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
♻️ Duplicate comments (1)
plugins/management/skills/jira-issue-creator/tests/test_jira_fields.py (1)
156-177:⚠️ Potential issue | 🔴 CriticalCritical: Missing required parameter and undefined field reference.
Same issues as test_valid_unassigned_ticket: missing
assigneeparameter (lines 157-168) and assertion on non-existentfetch_bot_emailfield (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
📒 Files selected for processing (13)
.claude-plugin/marketplace.json.gitignoreplugins/infrastructure/skills/db-upgrader/SKILL.mdplugins/management/.claude-plugin/plugin.jsonplugins/management/agents/hcc-frontend-jira-issue-creator.mdplugins/management/package.jsonplugins/management/skills/jira-issue-creator/.gitignoreplugins/management/skills/jira-issue-creator/README.mdplugins/management/skills/jira-issue-creator/SKILL.mdplugins/management/skills/jira-issue-creator/jira_fields.pyplugins/management/skills/jira-issue-creator/requirements.txtplugins/management/skills/jira-issue-creator/tests/test_jira_fields.pytests/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
1c214e5 to
c892a82
Compare
|
@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 |
|
@florkbr Thanks for the review. Good call. Agent restored with skill mention. |
There was a problem hiding this comment.
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
📒 Files selected for processing (14)
.claude-plugin/marketplace.json.gitignoreplugins/infrastructure/skills/db-upgrader/SKILL.mdplugins/management/.claude-plugin/plugin.jsonplugins/management/agents/hcc-frontend-jira-issue-creator.mdplugins/management/package.jsonplugins/management/project.jsonplugins/management/skills/jira-issue-creator/.gitignoreplugins/management/skills/jira-issue-creator/README.mdplugins/management/skills/jira-issue-creator/SKILL.mdplugins/management/skills/jira-issue-creator/jira_fields.pyplugins/management/skills/jira-issue-creator/requirements.txtplugins/management/skills/jira-issue-creator/tests/test_jira_fields.pytests/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
Description
Replace
hcc-frontend-jira-issue-creatoragent with Python-validated skill using interactive dropdowns.What:
plugins/management/agents/hcc-frontend-jira-issue-creator.mdplugins/management/skills/jira-issue-creator/with Python validation (35 tests)Why:
Blast radius
Internal developers using
hcc-frontend-ai-toolkitplugin. Use/jira-issue-creatorskill instead of deprecated agent.Rollback plan
git revertsufficient. Plugin updates don't affect production.Checklist
AI disclosure
Assisted by: Claude Code