Add standalone errata-workflow agent with MCP tools#594
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces a standalone Errata Workflow Agent using the BeeAI framework to manage the lifecycle of errata, along with several new MCP tools for interacting with the Errata Tool and Jira. The review feedback identifies several critical runtime issues and robustness improvements. These include a potential TypeError in _get_rel_prep_lookup from accessing list data incorrectly, potential IndexErrors when handling empty API responses or HTML tables, and a logical flaw in the agent where failed JIRA fetches could bypass ownership verification. Additionally, improvements are suggested for BeautifulSoup class extraction and Jira Cloud/Server compatibility when resolving user identifiers.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
Convert the supervisor's ErratumHandler into a standalone BeeAI workflow agent that communicates exclusively through MCP tools. This includes: - Errata models in ymir/common/models.py (ErratumBuild, TransitionRuleSet, RHELVersion, ErratumPushDetails, etc.) - 9 new errata MCP tools in ymir/tools/privileged/errata.py (transition rules, build maps, stage push, state changes, ownership, comments) - CreateJiraIssueTool in ymir/tools/privileged/jira.py - All tools registered in gateway.py - errata_workflow_agent.py with full workflow: fetch erratum, check attention flags, verify ownership, route by status, advance through states, and verify product listings - compose.yaml service and Makefile target for standalone execution - SKILL.md documenting the complete workflow Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
for more information, see https://pre-commit.ci
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
for more information, see https://pre-commit.ci
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Mirrors the JIRA_ALLOW_STATUS_CHANGES pattern from issue verification agent. Erratum state changes are skipped unless the env var is explicitly set to true, preventing accidental state transitions in production. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The errata.py updates left old code alongside new robustness improvements, causing ruff and Python syntax failures. Also fix line-too-long and unused variable in errata_workflow_agent.py. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
for more information, see https://pre-commit.ci
Replace _get_user_account_id with _get_user_identifier that returns a (field_key, value) tuple to properly support both Jira Server and Cloud. Remove leftover duplicate assignee block. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
beautifulsoup4, lxml, and requests-gssapi are imported by errata.py but were only listed in the root requirements.txt, not in the ymir-tools sub-package requirements used by CI. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
SearchJiraIssuesTool returns JSONToolOutput(result=list), so
output.result is already the issues list — no .get("issues") needed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove ownership check step (agent should not change erratum ownership) - Clarify product listing verification purpose in SKILL.md - Remove module docstring (not used elsewhere in the project) - Rename JOTNAR constants to YMIR - Revert accidental SearchJiraIssuesTool return value change Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add name field and remove unsupported arguments from SKILL.md frontmatter - Add beautifulsoup4 and lxml to test container dependencies Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
underscore is not allowed in skill names
Convert the supervisor's ErratumHandler into a standalone BeeAI workflow agent that communicates exclusively through MCP tools. This includes:
TODO:
packit/packit.dev.Fixes
Related to
Merge before/after
RELEASE NOTES BEGIN
Packit now supports automatic ordering of ☕ after all checks pass.
RELEASE NOTES END