[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-red-hat-developer-rhdh-jira":3,"mdc--gsi9l2-key":37,"related-org-red-hat-developer-rhdh-jira":3474,"related-repo-red-hat-developer-rhdh-jira":3649},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"rhdh-jira","manage RHDH Jira projects and issues","Interacts with RHDH Jira projects (RHIDP, RHDHPLAN, RHDHBUGS, RHDHSUPP) using acli, GraphQL, and REST API. Covers the full Jira lifecycle: create issues, assign, refine, plan sprints, report, track releases, and update status. Trigger on Jira keys (RHIDP-1234), \"create a feature\u002Fepic\u002Fstory\u002Ftask\u002Fbug\", \"who should take this\", \"refine this\", \"plan the sprint\", \"sprint report\", \"release status\", \"update jira\", or any sprint ceremony prep.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"red-hat-developer","Red Hat Developer","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fred-hat-developer.png","redhat-developer",[13,17,20,23],{"name":14,"slug":15,"type":16},"Jira","jira","tag",{"name":18,"slug":19,"type":16},"Sprint Planning","sprint-planning",{"name":21,"slug":22,"type":16},"Project Management","project-management",{"name":24,"slug":25,"type":16},"Agile","agile",15,"https:\u002F\u002Fgithub.com\u002Fredhat-developer\u002Frhdh-skill","2026-08-01T05:41:58.727958",null,28,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"Claude Code skill for RHDH plugin lifecycle management","https:\u002F\u002Fgithub.com\u002Fredhat-developer\u002Frhdh-skill\u002Ftree\u002FHEAD\u002Fskills\u002Frhdh-jira","---\nname: rhdh-jira\ndescription: |\n  Interacts with RHDH Jira projects (RHIDP, RHDHPLAN, RHDHBUGS, RHDHSUPP) using acli, GraphQL, and REST API. Covers the full Jira lifecycle: create issues, assign, refine, plan sprints, report, track releases, and update status. Trigger on Jira keys (RHIDP-1234), \"create a feature\u002Fepic\u002Fstory\u002Ftask\u002Fbug\", \"who should take this\", \"refine this\", \"plan the sprint\", \"sprint report\", \"release status\", \"update jira\", or any sprint ceremony prep.\ncompatibility: \"acli (Atlassian CLI) on PATH. Python 3 for scripts. Windows, macOS, Linux.\"\n---\n\n\u003Cessential_principles>\n\n# RHDH Jira\n\nFoundational skill for interacting with RHDH's Jira instance via the Atlassian CLI (`acli`). Covers all four active projects, issue types, workflows, custom fields, and JQL patterns.\n\n\u003C\u002Fessential_principles>\n\n\u003Cintake>\n\n## Commands\n\n| Command | Description | Reference |\n|---------|-------------|-----------|\n| `assign [issue key(s) or JQL]` | Recommend and assign team members using expertise, capacity, and context proximity analysis | [references\u002Fassign.md](references\u002Fassign.md) |\n| `refine [issue key(s), JQL, or 'sprint']` | Check issues against exit criteria, identify duplicates, missing fields, unaddressed comments, and readiness | [references\u002Frefine.md](references\u002Frefine.md) |\n| `plan [team]` | Sprint planning prep: carryover, velocity, capacity, ready queue, sprint fill suggestions | [references\u002Fplan.md](references\u002Fplan.md) |\n| `sprint-report [team]` | Sprint review summary: committed vs completed, per-member breakdown, demo checklist | [references\u002Fsprint-report.md](references\u002Fsprint-report.md) |\n| `release [version]` | Release readiness: feature matrix, PI funnel, dependency map, blocker bugs, risk assessment | [references\u002Frelease.md](references\u002Frelease.md) |\n| `to-feature [description]` | Create a RHDHPLAN Feature with grill, duplicate check, and optional Epic decomposition | [references\u002Fto-feature.md](references\u002Fto-feature.md) |\n| `to-epic [description]` | Create an RHIDP Epic with grill, duplicate check, and optional Story\u002FTask decomposition | [references\u002Fto-epic.md](references\u002Fto-epic.md) |\n| `to-issue [description]` | Create a Story, Task, Bug, or Spike with automatic type inference and grill | [references\u002Fto-issue.md](references\u002Fto-issue.md) |\n| `update-jira-status [key]` | Update issue with session progress, status comment, transition, and upward cascade | [references\u002Fupdate-jira-status.md](references\u002Fupdate-jira-status.md) |\n\nSingle source of truth for command descriptions: `scripts\u002Fcommand-metadata.json`\n\n**Wait for response before proceeding.**\n\n\u003C\u002Fintake>\n\n\u003Crouting>\n\n### Routing rules\n\n1. **No argument**: Show the command menu. Ask what to do.\n2. **First word matches a command**: Load its reference file and follow it.\n3. **First word doesn't match**: General Jira invocation using the full argument as context — use the reference files table below to decide what to load.\n\n\u003C\u002Frouting>\n\n## Prerequisites\n\nRun `scripts\u002Fsetup.py` to verify everything is configured:\n\n```bash\npython scripts\u002Fsetup.py\n```\n\nThe script checks:\n\n1. `acli` binary on PATH\n2. Jira API token auth configured (`~\u002F.config\u002Facli\u002Fjira_config.yaml`)\n3. `.jira-token` file next to `acli` executable (for REST API fallback)\n4. Smoke test against `redhat.atlassian.net`\n\nIf `acli` is not installed, download from [Atlassian CLI](https:\u002F\u002Fdeveloper.atlassian.com\u002Fcloud\u002Facli\u002F) and follow the [Getting Started guide](https:\u002F\u002Fdeveloper.atlassian.com\u002Fcloud\u002Facli\u002Fguides\u002Fhow-to-get-started\u002F) for installation and authentication setup. Use API token authentication, not OAuth — OAuth sessions expire and `acli auth status` gives false negatives with token auth (see Gotchas).\n\n### API preference order\n\nAll operations follow this priority: **acli → GraphQL → REST API**.\n\n- **acli** — default for simple, single-issue operations (view, edit, assign, transition).\n- **GraphQL** — for bulk reads where acli would be too slow (expertise profiles, capacity, refinement checks). Skip acli entirely for bulk.\n- **REST API** — for writes when already in an authenticated API context (avoids shelling out to acli mid-workflow), or as fallback when acli fails for custom field updates.\n\nSub-commands (`assign`, `refine`) document which API they use. When a sub-command's workflow already has `AUTH` set from GraphQL reads, prefer REST for writes.\n\n### REST\u002FGraphQL capability gate\n\nBefore attempting any REST API or GraphQL call:\n\n1. Run `python scripts\u002Fsetup.py --json` and check `token_file_found`\n2. If missing, state: \"REST API\u002FGraphQL fallback unavailable — `.jira-token` not configured. Run `setup.py` for instructions.\" Continue with acli-only workflow.\n3. If the user needs REST\u002FGraphQL, load `references\u002Fauth.md` for setup instructions\n\n## Scripts\n\n| Script | Purpose |\n|--------|---------|\n| `scripts\u002Fsetup.py` | Verify acli install + auth. Run with `--json` for structured output. |\n| `scripts\u002Fparse_issues.py` | Flatten, enrich, and filter acli JSON output. Solves the core problem: `acli search --json` can't return custom fields (team, story points, sprint). Pipe search results in, get clean data out. Use `--enrich` to fetch full fields, `-f team=\"X\"` to filter by team. |\n| `scripts\u002Fcommand-metadata.json` | Single source of truth for sub-command descriptions and argument hints. |\n| `scripts\u002Fvalidate_components.py` | Validate `references\u002Ffields.md` component catalog against live Jira projects (RHIDP + RHDHPLAN). Reports drift in both directions. Run with `--json` for structured output. |\n| `scripts\u002Fjira-wiki-to-adf.py` | Convert a filled Jira wiki markup template to Atlassian Document Format JSON for use with `acli --description-file`. Handles `hN.` headings, `* ` bullets, `# ` ordered lists, `(?)` \u002F `(\u002F)` task items, `*bold*`, `_italic_`, `{{monospace}}`, backtick code. Usage: `python scripts\u002Fjira-wiki-to-adf.py input.txt > output.adf.json` |\n\n## Projects\n\n| Key | Purpose | Issue Types |\n|-----|---------|-------------|\n| RHIDP | Engineering work | Epic, Story, Task, Sub-task, Vulnerability |\n| RHDHPLAN | Program planning | Feature, Outcome, Feature Request, Sub-task |\n| RHDHBUGS | Product defects | Bug, Sub-task |\n| RHDHSUPP | Support-engineering interactions | Bug |\n\nRHDHPAI (Plugins and AI) is **archived** — JQL queries against it will fail.\n\n### Issue type selection\n\n- **Story** — end-user facing work (API, UI changes)\n- **Task** — not end-user facing (tests, CI\u002FCD, refactoring, code organization)\n- **Epic** — collection of Stories\u002FTasks toward a deliverable\n- **Feature** — program-level planning item in RHDHPLAN\n- **Bug** — product defect (RHDHBUGS) or support case tracking (RHDHSUPP)\n- **Sub-task** — child of any issue type above\n- **Vulnerability** — CVE tracking in RHIDP (Product Security)\n\n\u003Creference_index>\n\n## Reference Files\n\nLoad only what the current task requires.\n\n| File | Load when... |\n|------|-------------|\n| `references\u002Facli-commands.md` | Running an acli command you haven't used before, or hitting unexpected flag behavior. Quick reference for syntax, flag differences, and output formats. |\n| `references\u002Ffields.md` | Need to know a field name, custom field ID, accepted values, or label conventions. Custom fields, labels, link types, components, priorities. |\n| `references\u002Fworkflows.md` | Transitioning issues, checking exit criteria, or verifying readiness for the next status. |\n| `references\u002Ftemplates.md` | Creating new issues. Also load `references\u002Fworkflows.md` for required fields at entry status. |\n| `references\u002Fsupport.md` | Handling support cases, filing bugs from customer cases, or creating feature requests from support. Full RHDHSUPP workflow, SLA, and anti-patterns. |\n| `references\u002Ffeature-exploration.md` | Feature Exploration Process checklist: component validation, labels (demo, rhdh-testday), Doc Epic automation, cross-team dependencies, rescoping. Load when creating Features, refining Features, or checking Feature readiness. |\n| `references\u002Fjql-patterns.md` | Building a JQL query, finding a board ID, or looking up sprint information. JQL cookbook with 23+ tested queries. |\n| `references\u002Fauth.md` | Setting up authentication for REST API or GraphQL calls. Token file format, path discovery, security, instance config, common auth errors. |\n| `references\u002Frest-api-fallback.md` | `acli` failed to update a custom field (Team, Size, Story Points, Release Note Type). Curl examples, response handling, OpenAPI spec discovery. |\n| `references\u002Fgraphql-queries.md` | Complex read queries needing multiple fields, relationships, or custom field data in one call. Schema introspection, JQL search via GraphQL, field type fragments. Also for bulk operations where acli would be too slow. |\n| `references\u002Fassign.md` | Recommending assignees for unassigned issues. Team roster lookup, expertise profiling, sprint capacity analysis, context proximity scoring. Also for applying assignments after user confirmation. |\n| `references\u002Frefine.md` | Checking issues against exit criteria per status, identifying duplicates, missing fields, unaddressed comments, and readiness for the next workflow status. |\n| `references\u002Fplan.md` | Sprint planning prep: carryover report, velocity trend, per-member capacity, ready-for-planning queue, sprint fill suggestions. |\n| `references\u002Fsprint-report.md` | Sprint review summary: committed vs completed, per-member breakdown, epic progress, demo checklist with naming conventions, velocity trend. |\n| `references\u002Frelease.md` | Release readiness report: feature matrix, PI funnel states, epic roll-up, cross-team dependency map, blocker bugs, RN readiness, risk assessment. |\n| `references\u002Fto-feature.md` | Create a RHDHPLAN Feature from conversation context with grill and optional Epic decomposition. |\n| `references\u002Fto-epic.md` | Create an RHIDP Epic from conversation context with grill and optional Story\u002FTask decomposition. |\n| `references\u002Fto-issue.md` | Create a Story, Task, Bug, or Spike with automatic type inference and grill. |\n| `references\u002Fupdate-jira-status.md` | Update a Jira issue with session progress, status comment, transitions, and upward cascade to parent Epic\u002FFeature. |\n| `references\u002Fduplicates.md` | Duplicate detection for pre-creation checks and refinement audits. Shared across creation commands and refine. |\n| `references\u002Fgrill.md` | Shared challenging behavior for issue creation grills: sizing, completeness, scope, risks, cross-referencing. |\n| `references\u002Fsizing.md` | T-shirt sizing guide for Features\u002FEpics and Fibonacci story points for Stories\u002FTasks. Used during grills and refinement. |\n\n\u003C\u002Freference_index>\n\n## Common Gotchas\n\n1. **`acli auth status` lies.** It checks OAuth, not API token auth. Always returns \"unauthorized\" with token auth even when Jira works fine. Use `acli jira project list --recent 1` as a smoke test instead.\n2. **`view` uses positional arg, everything else uses `--key`.** `acli jira workitem view RHIDP-123` but `acli jira workitem edit --key RHIDP-123 ...`.\n3. **`--yes` is mandatory for mutations.** All `edit`, `transition`, `assign`, and `link create` commands prompt interactively without it. Always pass `--yes`.\n4. **`--fields` is restrictive on search.** Only accepts `key`, `summary`, `status`, `assignee`, `issuetype`, `priority`, `description`, `labels`. For components, sprint, fixVersions, and all custom fields — use `--json` or `scripts\u002Fparse_issues.py --enrich`.\n5. **Team field has two JQL syntaxes.** `customfield_10001` cannot be used in JQL WHERE clauses. However, `\"Team[Team]\" = {teamId}` (using the team UUID, not display name) works. Use the UUID syntax for JQL filtering; use `customfield_10001.name` in post-processing only when you need the display name from JSON output.\n6. **ADF is required for formatted descriptions.** Reading descriptions via `--json` returns Atlassian Document Format (nested JSON). Jira Cloud's editor is ADF-native — plain text and Jira wiki markup (`h1.`, `*bold*`) both render as literal characters in the UI. For formatted descriptions, fill a wiki markup template then run `scripts\u002Fjira-wiki-to-adf.py \u003Cinput.txt> \u003Coutput.json>` to convert to ADF, then pass via `--description-file`. Both `acli create` and `acli edit` accept ADF JSON via `--description-file`. Do not use Jira wiki markup in description files expecting it to render.\n7. **Acceptance Criteria field is almost always null.** Scan the description for \"Requirements\", \"Acceptance Criteria\", or bullet-style criteria instead of checking `customfield_10718`.\n8. **`--enrich` is MANDATORY for custom fields AND labels.** Both `acli search --json` and `acli view KEY --json` (without `--fields \"*all\"`) return only basic fields (assignee, issuetype, priority, status, summary). Labels, story points, team, sprint, size, and components will all appear as empty\u002Fnull — looking like the data isn't set when it actually is. Always use `scripts\u002Fparse_issues.py --enrich` to get custom field data. Skipping `--enrich` is the #1 cause of false \"missing data\" reports.\n9. **`acli` cannot set arbitrary custom fields.** `acli jira workitem edit` does not have a `--custom` flag. Fields like Team, Size, Story Points, and Release Note Type can only be updated via the Jira REST API. Use `PUT \u002Frest\u002Fapi\u002F3\u002Fissue\u002F{key}` with the field payload (see `references\u002Frest-api-fallback.md` for curl examples and payload formats). Find the token file at `.jira-token` next to the `acli` executable (discover the path with `readlink -f \"$(which acli)\"` or `where acli`). Never read the token file into context.\n10. **`acli sprint list-workitems --json` wraps results in `{\"issues\": [...]}`.**  The output is NOT a flat array — it's an object with an `issues` key. Extract the array before piping to `parse_issues.py`. See `references\u002Facli-commands.md` for the workaround command.\n11. **GraphQL search is beta.** `issueSearchStable` requires `X-ExperimentalApi: JiraIssueSearch` header. Load `references\u002Fgraphql-queries.md` before attempting GraphQL queries.\n12. **`.jira-token` format is `email:token`, not bare token.** A file containing only the API token without the email prefix will cause 401 errors on REST\u002FGraphQL calls. The `setup.py` script validates the format.\n13. **`acli search` silently truncates results.** The default page size is 30. If your JQL matches more than 30 issues, you get the first 30 with no warning. Always pass `--limit 500` for bulk queries, or use `--count` first to check the total, then `--paginate` to fetch all pages. This is the #2 cause of incorrect reports after skipping `--enrich`.\n14. **\"Feature Exploration\" vs \"Feature Refinement.\"** The meeting\u002Fprocess is called **Feature Exploration**. The Jira workflow status is **Refinement**. These are different things. When referring to the meeting or process, always use \"Feature Exploration.\" When referring to the Jira status, use \"Refinement.\" The meeting is sometimes mislabeled as \"Feature Refinement\" in calendar invites — this is incorrect.\n15. **Don't remove `rhdh-X.Y-candidate` labels.** Candidate labels track release targeting. Removing them without PM approval can silently drop a feature from release tracking.\n16. **Feature→Epic child links use Parent Link, not issuelinks.** Cross-project parent-child relationships (RHDHPLAN Feature → RHIDP Epic) use the `Parent Link` field (`customfield_10018`), not `issuelinks`. To find child Epics of a Feature, use JQL: `project = RHIDP AND type = Epic AND \"Parent Link\" = RHDHPLAN-XXX`. Checking `issuelinks` will show zero results and produce false \"no child Epics\" reports.\n17. **REST `\u002Frest\u002Fapi\u002F3\u002Fsearch` returns 410 Gone.** This endpoint has been removed. Use POST to `\u002Frest\u002Fapi\u002F3\u002Fsearch\u002Fjql` with body `{\"jql\": \"...\", \"fields\": [...], \"maxResults\": N}` instead. This only affects direct REST calls — `acli search` still works.\n18. **`acli workitem create` does not support `--priority`, `--component`, or `--yes`.** These flags exist on `edit`, `transition`, and `assign` but not on `create` — passing them causes \"unknown flag\" errors. After creating an issue, set priority, components, size (`customfield_10795`), and parent link (`customfield_10018`) together in a single `PUT \u002Frest\u002Fapi\u002F3\u002Fissue\u002F{key}` call.\n19. **MCP `create_jira_issue` does not support ADF.** The MCP tool's `description` parameter accepts a plain string, which Jira wraps in a single paragraph node — markdown syntax (`## Heading`, `**bold**`, `- [ ] task`) renders as literal characters. For formatted descriptions (headings, lists, code, links, task items), always use `acli jira workitem create` with `--description-file` pointing to ADF JSON. Use the MCP tool only for quick unformatted issues where plain text is acceptable.\n\n## Error Handling\n\n| Error | Action |\n|-------|--------|\n| `acli` not on PATH | Run `scripts\u002Fsetup.py`. Install from Atlassian if missing. See [Getting Started](https:\u002F\u002Fdeveloper.atlassian.com\u002Fcloud\u002Facli\u002Fguides\u002Fhow-to-get-started\u002F). |\n| \"unauthorized\" from `auth status` | Ignore. Check `jira_config.yaml` exists. Run smoke test. |\n| \"required flag(s) not set\" | Command syntax wrong. Run `acli jira \u003Csubcommand> --help`. |\n| \"field X is not allowed\" | Use `--json` instead of `--fields` for that field. |\n| \"the value X does not exist for the field 'project'\" | Project key is wrong or project is archived (e.g., RHDHPAI). |\n| Rate limiting (429) | Wait 5 seconds, retry once. |\n| Interactive prompt hangs | Missing `--yes` flag on a mutating command. |\n| Custom field update fails via `acli` | Fall back to Jira REST API using `.jira-token` file. See Gotcha #9. |\n| `issueSearchStable` returns errors | Fall back to `acli` search (not REST — `\u002Frest\u002Fapi\u002F3\u002Fsearch` returns 410 Gone on this instance). Warn that the beta API failed. |\n\n## Team Conventions\n\nThese apply across all sub-commands:\n\n- **Release Pending counts as completed.** Release Pending items remain in the sprint and count toward velocity and capacity. They represent done work awaiting release.\n- **Confirmation flow.** Sub-commands that modify Jira issues use a standard prompt: `\"Apply changes? [y\u002FN\u002Fedit]\"` — **y** applies all, **N** cancels, **edit** steps through each change individually.\n- **Closure requires rationale.** When closing or descoping issues, always add a comment documenting the reason and set the resolution field (`Won't Do`, `Duplicate`, `Done`). Preserves the decision trail.\n- **Comments over description bloat.** Issue descriptions use the structured template sections. Decision trail, elaboration, abandoned approaches, and customer context go in comments. Creation commands proactively suggest comments for context that emerged during the grill.\n\n## Common Workflows\n\n> Sub-commands share data. `plan` reuses roster\u002Fcapacity\u002Fexpertise from `assign`. `sprint-report` uses the same velocity query pattern as `plan`. `release` references exit criteria from `workflows.md` and can invoke `assign` for unassigned Features.\n\n### Creating an issue\n\n1. Load `references\u002Ftemplates.md` for the body template\n2. Load `references\u002Fworkflows.md` for required fields at New status\n3. Run `acli jira workitem create` (see `references\u002Facli-commands.md` if unsure of syntax)\n\n### Searching with custom fields (team, story points, sprint)\n\n1. Build JQL using patterns from `references\u002Fjql-patterns.md`\n2. Pipe results through `scripts\u002Fparse_issues.py --enrich` for full field data\n3. Use `-f team=\"X\"` to filter by team (not possible in JQL)\n\n### Transitioning an issue\n\n1. Load `references\u002Fworkflows.md` for exit criteria at the target status\n2. Verify required fields are set before transitioning\n3. Run `acli jira workitem transition --key KEY --status \"X\" --yes`\n\n### Complex queries (many fields, relationships)\n\n1. Load `references\u002Fgraphql-queries.md`\n2. Use `issueByKey` for single issues or `issueSearchStable` (beta) for JQL search\n3. Fall back to `acli` + `parse_issues.py --enrich` if GraphQL returns errors\n\n### Recommending and assigning issues\n\n1. Load `references\u002Fassign.md`\n2. Identify unassigned issues (single key, JQL query, or passed-in list)\n3. Determine the team (from issue field, parent epic, or user input)\n4. Run deep or quick analysis per the reference\n5. Present recommendations, get user confirmation, then assign\n\n### Refining issues\n\n1. Load `references\u002Frefine.md`\n2. Identify issues to refine (specific keys, JQL, `sprint`, or `backlog`)\n3. Run all 6 checks: missing fields, duplicates, hierarchy, comments, staleness, sprint readiness\n4. Present refinement report with actionable recommendations\n5. Optionally apply auto-fixable changes and prompt for manual decisions\n\n### Sprint planning prep\n\n1. Load `references\u002Fplan.md`\n2. Resolve team, board, and sprint context\n3. Generate carryover report, velocity trend, capacity snapshot, and ready-for-planning queue\n4. Auto-generate sprint fill suggestions with expertise matching\n5. Surface critical customer bugs (exempt from capacity) and retro action items\n\n### Sprint review summary\n\n1. Load `references\u002Fsprint-report.md`\n2. Resolve sprint (active or previous)\n3. Partition completed vs carried over, compute completion rate\n4. Per-member breakdown, epic progress, demo checklist with naming conventions\n5. Optionally save as markdown file\n\n### Release readiness\n\n1. Load `references\u002Frelease.md`\n2. Fetch Features for the target version\u002Flabel\n3. Quick mode: PI funnel, feature matrix, readiness score\n4. Deep mode: adds epic roll-up, dependency map, coherence analysis, RN readiness, risk assessment\n5. Optionally remediate (assign owners, create Epics, transition statuses)\n\n### Creating Features, Epics, and Issues\n\n1. Load the appropriate creation reference (`to-feature.md`, `to-epic.md`, or `to-issue.md`)\n2. Load `references\u002Fgrill.md` for challenging behavior\n3. Load the template + example pair from `assets\u002Ftemplates\u002F` and `assets\u002Fexamples\u002F`\n4. Grill the user on scope, AC, sizing (reference `references\u002Fsizing.md`)\n5. Run duplicate check per `references\u002Fduplicates.md`\n6. Create the issue, suggest comments for decision trail\n7. Offer chained decomposition (Feature → Epics → Stories\u002FTasks)\n\n### Updating Jira from a session\n\n1. Load `references\u002Fupdate-jira-status.md`\n2. Detect related issue (conversation → git → PR → commits → keyword search)\n3. Compose status comment, propose transition\n4. Check upward cascade (sibling completion → parent transition)\n5. Suggest reaching out to Feature Owner if Feature-level work is complete\n\n### Discovering unknown fields or endpoints\n\n1. For REST: load `references\u002Frest-api-fallback.md` — use the OpenAPI spec or `\u002Frest\u002Fapi\u002F3\u002Ffield` endpoint\n2. For GraphQL: load `references\u002Fgraphql-queries.md` — use `__type` introspection queries\n3. Do not guess field IDs or types — always verify against the live schema\n\n## When NOT to Use\n\n- **Non-RHDH Jira projects** — this skill's field mappings, workflows, and JQL patterns are specific to RHIDP\u002FRHDHPLAN\u002FRHDHBUGS\u002FRHDHSUPP\n- **Jira REST API directly** — use `acli` first, then GraphQL for bulk reads. REST API is the last resort for writes when acli fails and for schema discovery via OpenAPI spec (see Gotcha #9)\n- **GraphQL for simple lookups** — use `acli` for single-issue views and simple searches. GraphQL is for bulk operations, complex queries needing relationships or many custom fields in one call, team roster lookups, and schema introspection\n",{"data":38,"body":40},{"name":4,"description":6,"compatibility":39},"acli (Atlassian CLI) on PATH. Python 3 for scripts. Windows, macOS, Linux.",{"type":41,"children":42},"root",[43,51,57,71,76,366,412,418,431,460,465,520,559,565,577,610,639,645,650,704,710,937,943,1041,1053,1059,1131,1136,1142,1147,1544,1549,1555,2436,2442,2672,2678,2683,2776,2782,2843,2849,2893,2899,2935,2941,2970,2976,3026,3032,3064,3070,3116,3122,3154,3160,3192,3198,3230,3236,3325,3331,3363,3369,3417,3423,3468],{"type":44,"tag":45,"props":46,"children":47},"element","p",{},[48],{"type":49,"value":50},"text","\u003Cessential_principles>",{"type":44,"tag":52,"props":53,"children":54},"h1",{"id":4},[55],{"type":49,"value":56},"RHDH Jira",{"type":44,"tag":45,"props":58,"children":59},{},[60,62,69],{"type":49,"value":61},"Foundational skill for interacting with RHDH's Jira instance via the Atlassian CLI (",{"type":44,"tag":63,"props":64,"children":66},"code",{"className":65},[],[67],{"type":49,"value":68},"acli",{"type":49,"value":70},"). Covers all four active projects, issue types, workflows, custom fields, and JQL patterns.",{"type":44,"tag":45,"props":72,"children":73},{},[74],{"type":49,"value":75},"\u003C\u002Fessential_principles>",{"type":44,"tag":77,"props":78,"children":79},"intake",{},[80,87,346,357],{"type":44,"tag":81,"props":82,"children":84},"h2",{"id":83},"commands",[85],{"type":49,"value":86},"Commands",{"type":44,"tag":88,"props":89,"children":90},"table",{},[91,115],{"type":44,"tag":92,"props":93,"children":94},"thead",{},[95],{"type":44,"tag":96,"props":97,"children":98},"tr",{},[99,105,110],{"type":44,"tag":100,"props":101,"children":102},"th",{},[103],{"type":49,"value":104},"Command",{"type":44,"tag":100,"props":106,"children":107},{},[108],{"type":49,"value":109},"Description",{"type":44,"tag":100,"props":111,"children":112},{},[113],{"type":49,"value":114},"Reference",{"type":44,"tag":116,"props":117,"children":118},"tbody",{},[119,146,171,196,221,246,271,296,321],{"type":44,"tag":96,"props":120,"children":121},{},[122,132,137],{"type":44,"tag":123,"props":124,"children":125},"td",{},[126],{"type":44,"tag":63,"props":127,"children":129},{"className":128},[],[130],{"type":49,"value":131},"assign [issue key(s) or JQL]",{"type":44,"tag":123,"props":133,"children":134},{},[135],{"type":49,"value":136},"Recommend and assign team members using expertise, capacity, and context proximity analysis",{"type":44,"tag":123,"props":138,"children":139},{},[140],{"type":44,"tag":141,"props":142,"children":144},"a",{"href":143},"references\u002Fassign.md",[145],{"type":49,"value":143},{"type":44,"tag":96,"props":147,"children":148},{},[149,158,163],{"type":44,"tag":123,"props":150,"children":151},{},[152],{"type":44,"tag":63,"props":153,"children":155},{"className":154},[],[156],{"type":49,"value":157},"refine [issue key(s), JQL, or 'sprint']",{"type":44,"tag":123,"props":159,"children":160},{},[161],{"type":49,"value":162},"Check issues against exit criteria, identify duplicates, missing fields, unaddressed comments, and readiness",{"type":44,"tag":123,"props":164,"children":165},{},[166],{"type":44,"tag":141,"props":167,"children":169},{"href":168},"references\u002Frefine.md",[170],{"type":49,"value":168},{"type":44,"tag":96,"props":172,"children":173},{},[174,183,188],{"type":44,"tag":123,"props":175,"children":176},{},[177],{"type":44,"tag":63,"props":178,"children":180},{"className":179},[],[181],{"type":49,"value":182},"plan [team]",{"type":44,"tag":123,"props":184,"children":185},{},[186],{"type":49,"value":187},"Sprint planning prep: carryover, velocity, capacity, ready queue, sprint fill suggestions",{"type":44,"tag":123,"props":189,"children":190},{},[191],{"type":44,"tag":141,"props":192,"children":194},{"href":193},"references\u002Fplan.md",[195],{"type":49,"value":193},{"type":44,"tag":96,"props":197,"children":198},{},[199,208,213],{"type":44,"tag":123,"props":200,"children":201},{},[202],{"type":44,"tag":63,"props":203,"children":205},{"className":204},[],[206],{"type":49,"value":207},"sprint-report [team]",{"type":44,"tag":123,"props":209,"children":210},{},[211],{"type":49,"value":212},"Sprint review summary: committed vs completed, per-member breakdown, demo checklist",{"type":44,"tag":123,"props":214,"children":215},{},[216],{"type":44,"tag":141,"props":217,"children":219},{"href":218},"references\u002Fsprint-report.md",[220],{"type":49,"value":218},{"type":44,"tag":96,"props":222,"children":223},{},[224,233,238],{"type":44,"tag":123,"props":225,"children":226},{},[227],{"type":44,"tag":63,"props":228,"children":230},{"className":229},[],[231],{"type":49,"value":232},"release [version]",{"type":44,"tag":123,"props":234,"children":235},{},[236],{"type":49,"value":237},"Release readiness: feature matrix, PI funnel, dependency map, blocker bugs, risk assessment",{"type":44,"tag":123,"props":239,"children":240},{},[241],{"type":44,"tag":141,"props":242,"children":244},{"href":243},"references\u002Frelease.md",[245],{"type":49,"value":243},{"type":44,"tag":96,"props":247,"children":248},{},[249,258,263],{"type":44,"tag":123,"props":250,"children":251},{},[252],{"type":44,"tag":63,"props":253,"children":255},{"className":254},[],[256],{"type":49,"value":257},"to-feature [description]",{"type":44,"tag":123,"props":259,"children":260},{},[261],{"type":49,"value":262},"Create a RHDHPLAN Feature with grill, duplicate check, and optional Epic decomposition",{"type":44,"tag":123,"props":264,"children":265},{},[266],{"type":44,"tag":141,"props":267,"children":269},{"href":268},"references\u002Fto-feature.md",[270],{"type":49,"value":268},{"type":44,"tag":96,"props":272,"children":273},{},[274,283,288],{"type":44,"tag":123,"props":275,"children":276},{},[277],{"type":44,"tag":63,"props":278,"children":280},{"className":279},[],[281],{"type":49,"value":282},"to-epic [description]",{"type":44,"tag":123,"props":284,"children":285},{},[286],{"type":49,"value":287},"Create an RHIDP Epic with grill, duplicate check, and optional Story\u002FTask decomposition",{"type":44,"tag":123,"props":289,"children":290},{},[291],{"type":44,"tag":141,"props":292,"children":294},{"href":293},"references\u002Fto-epic.md",[295],{"type":49,"value":293},{"type":44,"tag":96,"props":297,"children":298},{},[299,308,313],{"type":44,"tag":123,"props":300,"children":301},{},[302],{"type":44,"tag":63,"props":303,"children":305},{"className":304},[],[306],{"type":49,"value":307},"to-issue [description]",{"type":44,"tag":123,"props":309,"children":310},{},[311],{"type":49,"value":312},"Create a Story, Task, Bug, or Spike with automatic type inference and grill",{"type":44,"tag":123,"props":314,"children":315},{},[316],{"type":44,"tag":141,"props":317,"children":319},{"href":318},"references\u002Fto-issue.md",[320],{"type":49,"value":318},{"type":44,"tag":96,"props":322,"children":323},{},[324,333,338],{"type":44,"tag":123,"props":325,"children":326},{},[327],{"type":44,"tag":63,"props":328,"children":330},{"className":329},[],[331],{"type":49,"value":332},"update-jira-status [key]",{"type":44,"tag":123,"props":334,"children":335},{},[336],{"type":49,"value":337},"Update issue with session progress, status comment, transition, and upward cascade",{"type":44,"tag":123,"props":339,"children":340},{},[341],{"type":44,"tag":141,"props":342,"children":344},{"href":343},"references\u002Fupdate-jira-status.md",[345],{"type":49,"value":343},{"type":44,"tag":45,"props":347,"children":348},{},[349,351],{"type":49,"value":350},"Single source of truth for command descriptions: ",{"type":44,"tag":63,"props":352,"children":354},{"className":353},[],[355],{"type":49,"value":356},"scripts\u002Fcommand-metadata.json",{"type":44,"tag":45,"props":358,"children":359},{},[360],{"type":44,"tag":361,"props":362,"children":363},"strong",{},[364],{"type":49,"value":365},"Wait for response before proceeding.",{"type":44,"tag":367,"props":368,"children":369},"routing",{},[370,377],{"type":44,"tag":371,"props":372,"children":374},"h3",{"id":373},"routing-rules",[375],{"type":49,"value":376},"Routing rules",{"type":44,"tag":378,"props":379,"children":380},"ol",{},[381,392,402],{"type":44,"tag":382,"props":383,"children":384},"li",{},[385,390],{"type":44,"tag":361,"props":386,"children":387},{},[388],{"type":49,"value":389},"No argument",{"type":49,"value":391},": Show the command menu. Ask what to do.",{"type":44,"tag":382,"props":393,"children":394},{},[395,400],{"type":44,"tag":361,"props":396,"children":397},{},[398],{"type":49,"value":399},"First word matches a command",{"type":49,"value":401},": Load its reference file and follow it.",{"type":44,"tag":382,"props":403,"children":404},{},[405,410],{"type":44,"tag":361,"props":406,"children":407},{},[408],{"type":49,"value":409},"First word doesn't match",{"type":49,"value":411},": General Jira invocation using the full argument as context — use the reference files table below to decide what to load.",{"type":44,"tag":81,"props":413,"children":415},{"id":414},"prerequisites",[416],{"type":49,"value":417},"Prerequisites",{"type":44,"tag":45,"props":419,"children":420},{},[421,423,429],{"type":49,"value":422},"Run ",{"type":44,"tag":63,"props":424,"children":426},{"className":425},[],[427],{"type":49,"value":428},"scripts\u002Fsetup.py",{"type":49,"value":430}," to verify everything is configured:",{"type":44,"tag":432,"props":433,"children":438},"pre",{"className":434,"code":435,"language":436,"meta":437,"style":437},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","python scripts\u002Fsetup.py\n","bash","",[439],{"type":44,"tag":63,"props":440,"children":441},{"__ignoreMap":437},[442],{"type":44,"tag":443,"props":444,"children":447},"span",{"class":445,"line":446},"line",1,[448,454],{"type":44,"tag":443,"props":449,"children":451},{"style":450},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[452],{"type":49,"value":453},"python",{"type":44,"tag":443,"props":455,"children":457},{"style":456},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[458],{"type":49,"value":459}," scripts\u002Fsetup.py\n",{"type":44,"tag":45,"props":461,"children":462},{},[463],{"type":49,"value":464},"The script checks:",{"type":44,"tag":378,"props":466,"children":467},{},[468,478,491,509],{"type":44,"tag":382,"props":469,"children":470},{},[471,476],{"type":44,"tag":63,"props":472,"children":474},{"className":473},[],[475],{"type":49,"value":68},{"type":49,"value":477}," binary on PATH",{"type":44,"tag":382,"props":479,"children":480},{},[481,483,489],{"type":49,"value":482},"Jira API token auth configured (",{"type":44,"tag":63,"props":484,"children":486},{"className":485},[],[487],{"type":49,"value":488},"~\u002F.config\u002Facli\u002Fjira_config.yaml",{"type":49,"value":490},")",{"type":44,"tag":382,"props":492,"children":493},{},[494,500,502,507],{"type":44,"tag":63,"props":495,"children":497},{"className":496},[],[498],{"type":49,"value":499},".jira-token",{"type":49,"value":501}," file next to ",{"type":44,"tag":63,"props":503,"children":505},{"className":504},[],[506],{"type":49,"value":68},{"type":49,"value":508}," executable (for REST API fallback)",{"type":44,"tag":382,"props":510,"children":511},{},[512,514],{"type":49,"value":513},"Smoke test against ",{"type":44,"tag":63,"props":515,"children":517},{"className":516},[],[518],{"type":49,"value":519},"redhat.atlassian.net",{"type":44,"tag":45,"props":521,"children":522},{},[523,525,530,532,540,542,549,551,557],{"type":49,"value":524},"If ",{"type":44,"tag":63,"props":526,"children":528},{"className":527},[],[529],{"type":49,"value":68},{"type":49,"value":531}," is not installed, download from ",{"type":44,"tag":141,"props":533,"children":537},{"href":534,"rel":535},"https:\u002F\u002Fdeveloper.atlassian.com\u002Fcloud\u002Facli\u002F",[536],"nofollow",[538],{"type":49,"value":539},"Atlassian CLI",{"type":49,"value":541}," and follow the ",{"type":44,"tag":141,"props":543,"children":546},{"href":544,"rel":545},"https:\u002F\u002Fdeveloper.atlassian.com\u002Fcloud\u002Facli\u002Fguides\u002Fhow-to-get-started\u002F",[536],[547],{"type":49,"value":548},"Getting Started guide",{"type":49,"value":550}," for installation and authentication setup. Use API token authentication, not OAuth — OAuth sessions expire and ",{"type":44,"tag":63,"props":552,"children":554},{"className":553},[],[555],{"type":49,"value":556},"acli auth status",{"type":49,"value":558}," gives false negatives with token auth (see Gotchas).",{"type":44,"tag":371,"props":560,"children":562},{"id":561},"api-preference-order",[563],{"type":49,"value":564},"API preference order",{"type":44,"tag":45,"props":566,"children":567},{},[568,570,575],{"type":49,"value":569},"All operations follow this priority: ",{"type":44,"tag":361,"props":571,"children":572},{},[573],{"type":49,"value":574},"acli → GraphQL → REST API",{"type":49,"value":576},".",{"type":44,"tag":578,"props":579,"children":580},"ul",{},[581,590,600],{"type":44,"tag":382,"props":582,"children":583},{},[584,588],{"type":44,"tag":361,"props":585,"children":586},{},[587],{"type":49,"value":68},{"type":49,"value":589}," — default for simple, single-issue operations (view, edit, assign, transition).",{"type":44,"tag":382,"props":591,"children":592},{},[593,598],{"type":44,"tag":361,"props":594,"children":595},{},[596],{"type":49,"value":597},"GraphQL",{"type":49,"value":599}," — for bulk reads where acli would be too slow (expertise profiles, capacity, refinement checks). Skip acli entirely for bulk.",{"type":44,"tag":382,"props":601,"children":602},{},[603,608],{"type":44,"tag":361,"props":604,"children":605},{},[606],{"type":49,"value":607},"REST API",{"type":49,"value":609}," — for writes when already in an authenticated API context (avoids shelling out to acli mid-workflow), or as fallback when acli fails for custom field updates.",{"type":44,"tag":45,"props":611,"children":612},{},[613,615,621,623,629,631,637],{"type":49,"value":614},"Sub-commands (",{"type":44,"tag":63,"props":616,"children":618},{"className":617},[],[619],{"type":49,"value":620},"assign",{"type":49,"value":622},", ",{"type":44,"tag":63,"props":624,"children":626},{"className":625},[],[627],{"type":49,"value":628},"refine",{"type":49,"value":630},") document which API they use. When a sub-command's workflow already has ",{"type":44,"tag":63,"props":632,"children":634},{"className":633},[],[635],{"type":49,"value":636},"AUTH",{"type":49,"value":638}," set from GraphQL reads, prefer REST for writes.",{"type":44,"tag":371,"props":640,"children":642},{"id":641},"restgraphql-capability-gate",[643],{"type":49,"value":644},"REST\u002FGraphQL capability gate",{"type":44,"tag":45,"props":646,"children":647},{},[648],{"type":49,"value":649},"Before attempting any REST API or GraphQL call:",{"type":44,"tag":378,"props":651,"children":652},{},[653,671,691],{"type":44,"tag":382,"props":654,"children":655},{},[656,657,663,665],{"type":49,"value":422},{"type":44,"tag":63,"props":658,"children":660},{"className":659},[],[661],{"type":49,"value":662},"python scripts\u002Fsetup.py --json",{"type":49,"value":664}," and check ",{"type":44,"tag":63,"props":666,"children":668},{"className":667},[],[669],{"type":49,"value":670},"token_file_found",{"type":44,"tag":382,"props":672,"children":673},{},[674,676,681,683,689],{"type":49,"value":675},"If missing, state: \"REST API\u002FGraphQL fallback unavailable — ",{"type":44,"tag":63,"props":677,"children":679},{"className":678},[],[680],{"type":49,"value":499},{"type":49,"value":682}," not configured. Run ",{"type":44,"tag":63,"props":684,"children":686},{"className":685},[],[687],{"type":49,"value":688},"setup.py",{"type":49,"value":690}," for instructions.\" Continue with acli-only workflow.",{"type":44,"tag":382,"props":692,"children":693},{},[694,696,702],{"type":49,"value":695},"If the user needs REST\u002FGraphQL, load ",{"type":44,"tag":63,"props":697,"children":699},{"className":698},[],[700],{"type":49,"value":701},"references\u002Fauth.md",{"type":49,"value":703}," for setup instructions",{"type":44,"tag":81,"props":705,"children":707},{"id":706},"scripts",[708],{"type":49,"value":709},"Scripts",{"type":44,"tag":88,"props":711,"children":712},{},[713,729],{"type":44,"tag":92,"props":714,"children":715},{},[716],{"type":44,"tag":96,"props":717,"children":718},{},[719,724],{"type":44,"tag":100,"props":720,"children":721},{},[722],{"type":49,"value":723},"Script",{"type":44,"tag":100,"props":725,"children":726},{},[727],{"type":49,"value":728},"Purpose",{"type":44,"tag":116,"props":730,"children":731},{},[732,756,797,813,844],{"type":44,"tag":96,"props":733,"children":734},{},[735,743],{"type":44,"tag":123,"props":736,"children":737},{},[738],{"type":44,"tag":63,"props":739,"children":741},{"className":740},[],[742],{"type":49,"value":428},{"type":44,"tag":123,"props":744,"children":745},{},[746,748,754],{"type":49,"value":747},"Verify acli install + auth. Run with ",{"type":44,"tag":63,"props":749,"children":751},{"className":750},[],[752],{"type":49,"value":753},"--json",{"type":49,"value":755}," for structured output.",{"type":44,"tag":96,"props":757,"children":758},{},[759,768],{"type":44,"tag":123,"props":760,"children":761},{},[762],{"type":44,"tag":63,"props":763,"children":765},{"className":764},[],[766],{"type":49,"value":767},"scripts\u002Fparse_issues.py",{"type":44,"tag":123,"props":769,"children":770},{},[771,773,779,781,787,789,795],{"type":49,"value":772},"Flatten, enrich, and filter acli JSON output. Solves the core problem: ",{"type":44,"tag":63,"props":774,"children":776},{"className":775},[],[777],{"type":49,"value":778},"acli search --json",{"type":49,"value":780}," can't return custom fields (team, story points, sprint). Pipe search results in, get clean data out. Use ",{"type":44,"tag":63,"props":782,"children":784},{"className":783},[],[785],{"type":49,"value":786},"--enrich",{"type":49,"value":788}," to fetch full fields, ",{"type":44,"tag":63,"props":790,"children":792},{"className":791},[],[793],{"type":49,"value":794},"-f team=\"X\"",{"type":49,"value":796}," to filter by team.",{"type":44,"tag":96,"props":798,"children":799},{},[800,808],{"type":44,"tag":123,"props":801,"children":802},{},[803],{"type":44,"tag":63,"props":804,"children":806},{"className":805},[],[807],{"type":49,"value":356},{"type":44,"tag":123,"props":809,"children":810},{},[811],{"type":49,"value":812},"Single source of truth for sub-command descriptions and argument hints.",{"type":44,"tag":96,"props":814,"children":815},{},[816,825],{"type":44,"tag":123,"props":817,"children":818},{},[819],{"type":44,"tag":63,"props":820,"children":822},{"className":821},[],[823],{"type":49,"value":824},"scripts\u002Fvalidate_components.py",{"type":44,"tag":123,"props":826,"children":827},{},[828,830,836,838,843],{"type":49,"value":829},"Validate ",{"type":44,"tag":63,"props":831,"children":833},{"className":832},[],[834],{"type":49,"value":835},"references\u002Ffields.md",{"type":49,"value":837}," component catalog against live Jira projects (RHIDP + RHDHPLAN). Reports drift in both directions. Run with ",{"type":44,"tag":63,"props":839,"children":841},{"className":840},[],[842],{"type":49,"value":753},{"type":49,"value":755},{"type":44,"tag":96,"props":845,"children":846},{},[847,856],{"type":44,"tag":123,"props":848,"children":849},{},[850],{"type":44,"tag":63,"props":851,"children":853},{"className":852},[],[854],{"type":49,"value":855},"scripts\u002Fjira-wiki-to-adf.py",{"type":44,"tag":123,"props":857,"children":858},{},[859,861,867,869,875,877,883,885,891,893,899,901,907,909,915,916,922,923,929,931],{"type":49,"value":860},"Convert a filled Jira wiki markup template to Atlassian Document Format JSON for use with ",{"type":44,"tag":63,"props":862,"children":864},{"className":863},[],[865],{"type":49,"value":866},"acli --description-file",{"type":49,"value":868},". Handles ",{"type":44,"tag":63,"props":870,"children":872},{"className":871},[],[873],{"type":49,"value":874},"hN.",{"type":49,"value":876}," headings, ",{"type":44,"tag":63,"props":878,"children":880},{"className":879},[],[881],{"type":49,"value":882},"* ",{"type":49,"value":884}," bullets, ",{"type":44,"tag":63,"props":886,"children":888},{"className":887},[],[889],{"type":49,"value":890},"# ",{"type":49,"value":892}," ordered lists, ",{"type":44,"tag":63,"props":894,"children":896},{"className":895},[],[897],{"type":49,"value":898},"(?)",{"type":49,"value":900}," \u002F ",{"type":44,"tag":63,"props":902,"children":904},{"className":903},[],[905],{"type":49,"value":906},"(\u002F)",{"type":49,"value":908}," task items, ",{"type":44,"tag":63,"props":910,"children":912},{"className":911},[],[913],{"type":49,"value":914},"*bold*",{"type":49,"value":622},{"type":44,"tag":63,"props":917,"children":919},{"className":918},[],[920],{"type":49,"value":921},"_italic_",{"type":49,"value":622},{"type":44,"tag":63,"props":924,"children":926},{"className":925},[],[927],{"type":49,"value":928},"{{monospace}}",{"type":49,"value":930},", backtick code. Usage: ",{"type":44,"tag":63,"props":932,"children":934},{"className":933},[],[935],{"type":49,"value":936},"python scripts\u002Fjira-wiki-to-adf.py input.txt > output.adf.json",{"type":44,"tag":81,"props":938,"children":940},{"id":939},"projects",[941],{"type":49,"value":942},"Projects",{"type":44,"tag":88,"props":944,"children":945},{},[946,966],{"type":44,"tag":92,"props":947,"children":948},{},[949],{"type":44,"tag":96,"props":950,"children":951},{},[952,957,961],{"type":44,"tag":100,"props":953,"children":954},{},[955],{"type":49,"value":956},"Key",{"type":44,"tag":100,"props":958,"children":959},{},[960],{"type":49,"value":728},{"type":44,"tag":100,"props":962,"children":963},{},[964],{"type":49,"value":965},"Issue Types",{"type":44,"tag":116,"props":967,"children":968},{},[969,987,1005,1023],{"type":44,"tag":96,"props":970,"children":971},{},[972,977,982],{"type":44,"tag":123,"props":973,"children":974},{},[975],{"type":49,"value":976},"RHIDP",{"type":44,"tag":123,"props":978,"children":979},{},[980],{"type":49,"value":981},"Engineering work",{"type":44,"tag":123,"props":983,"children":984},{},[985],{"type":49,"value":986},"Epic, Story, Task, Sub-task, Vulnerability",{"type":44,"tag":96,"props":988,"children":989},{},[990,995,1000],{"type":44,"tag":123,"props":991,"children":992},{},[993],{"type":49,"value":994},"RHDHPLAN",{"type":44,"tag":123,"props":996,"children":997},{},[998],{"type":49,"value":999},"Program planning",{"type":44,"tag":123,"props":1001,"children":1002},{},[1003],{"type":49,"value":1004},"Feature, Outcome, Feature Request, Sub-task",{"type":44,"tag":96,"props":1006,"children":1007},{},[1008,1013,1018],{"type":44,"tag":123,"props":1009,"children":1010},{},[1011],{"type":49,"value":1012},"RHDHBUGS",{"type":44,"tag":123,"props":1014,"children":1015},{},[1016],{"type":49,"value":1017},"Product defects",{"type":44,"tag":123,"props":1019,"children":1020},{},[1021],{"type":49,"value":1022},"Bug, Sub-task",{"type":44,"tag":96,"props":1024,"children":1025},{},[1026,1031,1036],{"type":44,"tag":123,"props":1027,"children":1028},{},[1029],{"type":49,"value":1030},"RHDHSUPP",{"type":44,"tag":123,"props":1032,"children":1033},{},[1034],{"type":49,"value":1035},"Support-engineering interactions",{"type":44,"tag":123,"props":1037,"children":1038},{},[1039],{"type":49,"value":1040},"Bug",{"type":44,"tag":45,"props":1042,"children":1043},{},[1044,1046,1051],{"type":49,"value":1045},"RHDHPAI (Plugins and AI) is ",{"type":44,"tag":361,"props":1047,"children":1048},{},[1049],{"type":49,"value":1050},"archived",{"type":49,"value":1052}," — JQL queries against it will fail.",{"type":44,"tag":371,"props":1054,"children":1056},{"id":1055},"issue-type-selection",[1057],{"type":49,"value":1058},"Issue type selection",{"type":44,"tag":578,"props":1060,"children":1061},{},[1062,1072,1082,1092,1102,1111,1121],{"type":44,"tag":382,"props":1063,"children":1064},{},[1065,1070],{"type":44,"tag":361,"props":1066,"children":1067},{},[1068],{"type":49,"value":1069},"Story",{"type":49,"value":1071}," — end-user facing work (API, UI changes)",{"type":44,"tag":382,"props":1073,"children":1074},{},[1075,1080],{"type":44,"tag":361,"props":1076,"children":1077},{},[1078],{"type":49,"value":1079},"Task",{"type":49,"value":1081}," — not end-user facing (tests, CI\u002FCD, refactoring, code organization)",{"type":44,"tag":382,"props":1083,"children":1084},{},[1085,1090],{"type":44,"tag":361,"props":1086,"children":1087},{},[1088],{"type":49,"value":1089},"Epic",{"type":49,"value":1091}," — collection of Stories\u002FTasks toward a deliverable",{"type":44,"tag":382,"props":1093,"children":1094},{},[1095,1100],{"type":44,"tag":361,"props":1096,"children":1097},{},[1098],{"type":49,"value":1099},"Feature",{"type":49,"value":1101}," — program-level planning item in RHDHPLAN",{"type":44,"tag":382,"props":1103,"children":1104},{},[1105,1109],{"type":44,"tag":361,"props":1106,"children":1107},{},[1108],{"type":49,"value":1040},{"type":49,"value":1110}," — product defect (RHDHBUGS) or support case tracking (RHDHSUPP)",{"type":44,"tag":382,"props":1112,"children":1113},{},[1114,1119],{"type":44,"tag":361,"props":1115,"children":1116},{},[1117],{"type":49,"value":1118},"Sub-task",{"type":49,"value":1120}," — child of any issue type above",{"type":44,"tag":382,"props":1122,"children":1123},{},[1124,1129],{"type":44,"tag":361,"props":1125,"children":1126},{},[1127],{"type":49,"value":1128},"Vulnerability",{"type":49,"value":1130}," — CVE tracking in RHIDP (Product Security)",{"type":44,"tag":45,"props":1132,"children":1133},{},[1134],{"type":49,"value":1135},"\u003Creference_index>",{"type":44,"tag":81,"props":1137,"children":1139},{"id":1138},"reference-files",[1140],{"type":49,"value":1141},"Reference Files",{"type":44,"tag":45,"props":1143,"children":1144},{},[1145],{"type":49,"value":1146},"Load only what the current task requires.",{"type":44,"tag":88,"props":1148,"children":1149},{},[1150,1166],{"type":44,"tag":92,"props":1151,"children":1152},{},[1153],{"type":44,"tag":96,"props":1154,"children":1155},{},[1156,1161],{"type":44,"tag":100,"props":1157,"children":1158},{},[1159],{"type":49,"value":1160},"File",{"type":44,"tag":100,"props":1162,"children":1163},{},[1164],{"type":49,"value":1165},"Load when...",{"type":44,"tag":116,"props":1167,"children":1168},{},[1169,1186,1202,1219,1243,1260,1277,1294,1310,1332,1349,1365,1381,1397,1413,1429,1445,1461,1477,1493,1510,1527],{"type":44,"tag":96,"props":1170,"children":1171},{},[1172,1181],{"type":44,"tag":123,"props":1173,"children":1174},{},[1175],{"type":44,"tag":63,"props":1176,"children":1178},{"className":1177},[],[1179],{"type":49,"value":1180},"references\u002Facli-commands.md",{"type":44,"tag":123,"props":1182,"children":1183},{},[1184],{"type":49,"value":1185},"Running an acli command you haven't used before, or hitting unexpected flag behavior. Quick reference for syntax, flag differences, and output formats.",{"type":44,"tag":96,"props":1187,"children":1188},{},[1189,1197],{"type":44,"tag":123,"props":1190,"children":1191},{},[1192],{"type":44,"tag":63,"props":1193,"children":1195},{"className":1194},[],[1196],{"type":49,"value":835},{"type":44,"tag":123,"props":1198,"children":1199},{},[1200],{"type":49,"value":1201},"Need to know a field name, custom field ID, accepted values, or label conventions. Custom fields, labels, link types, components, priorities.",{"type":44,"tag":96,"props":1203,"children":1204},{},[1205,1214],{"type":44,"tag":123,"props":1206,"children":1207},{},[1208],{"type":44,"tag":63,"props":1209,"children":1211},{"className":1210},[],[1212],{"type":49,"value":1213},"references\u002Fworkflows.md",{"type":44,"tag":123,"props":1215,"children":1216},{},[1217],{"type":49,"value":1218},"Transitioning issues, checking exit criteria, or verifying readiness for the next status.",{"type":44,"tag":96,"props":1220,"children":1221},{},[1222,1231],{"type":44,"tag":123,"props":1223,"children":1224},{},[1225],{"type":44,"tag":63,"props":1226,"children":1228},{"className":1227},[],[1229],{"type":49,"value":1230},"references\u002Ftemplates.md",{"type":44,"tag":123,"props":1232,"children":1233},{},[1234,1236,1241],{"type":49,"value":1235},"Creating new issues. Also load ",{"type":44,"tag":63,"props":1237,"children":1239},{"className":1238},[],[1240],{"type":49,"value":1213},{"type":49,"value":1242}," for required fields at entry status.",{"type":44,"tag":96,"props":1244,"children":1245},{},[1246,1255],{"type":44,"tag":123,"props":1247,"children":1248},{},[1249],{"type":44,"tag":63,"props":1250,"children":1252},{"className":1251},[],[1253],{"type":49,"value":1254},"references\u002Fsupport.md",{"type":44,"tag":123,"props":1256,"children":1257},{},[1258],{"type":49,"value":1259},"Handling support cases, filing bugs from customer cases, or creating feature requests from support. Full RHDHSUPP workflow, SLA, and anti-patterns.",{"type":44,"tag":96,"props":1261,"children":1262},{},[1263,1272],{"type":44,"tag":123,"props":1264,"children":1265},{},[1266],{"type":44,"tag":63,"props":1267,"children":1269},{"className":1268},[],[1270],{"type":49,"value":1271},"references\u002Ffeature-exploration.md",{"type":44,"tag":123,"props":1273,"children":1274},{},[1275],{"type":49,"value":1276},"Feature Exploration Process checklist: component validation, labels (demo, rhdh-testday), Doc Epic automation, cross-team dependencies, rescoping. Load when creating Features, refining Features, or checking Feature readiness.",{"type":44,"tag":96,"props":1278,"children":1279},{},[1280,1289],{"type":44,"tag":123,"props":1281,"children":1282},{},[1283],{"type":44,"tag":63,"props":1284,"children":1286},{"className":1285},[],[1287],{"type":49,"value":1288},"references\u002Fjql-patterns.md",{"type":44,"tag":123,"props":1290,"children":1291},{},[1292],{"type":49,"value":1293},"Building a JQL query, finding a board ID, or looking up sprint information. JQL cookbook with 23+ tested queries.",{"type":44,"tag":96,"props":1295,"children":1296},{},[1297,1305],{"type":44,"tag":123,"props":1298,"children":1299},{},[1300],{"type":44,"tag":63,"props":1301,"children":1303},{"className":1302},[],[1304],{"type":49,"value":701},{"type":44,"tag":123,"props":1306,"children":1307},{},[1308],{"type":49,"value":1309},"Setting up authentication for REST API or GraphQL calls. Token file format, path discovery, security, instance config, common auth errors.",{"type":44,"tag":96,"props":1311,"children":1312},{},[1313,1322],{"type":44,"tag":123,"props":1314,"children":1315},{},[1316],{"type":44,"tag":63,"props":1317,"children":1319},{"className":1318},[],[1320],{"type":49,"value":1321},"references\u002Frest-api-fallback.md",{"type":44,"tag":123,"props":1323,"children":1324},{},[1325,1330],{"type":44,"tag":63,"props":1326,"children":1328},{"className":1327},[],[1329],{"type":49,"value":68},{"type":49,"value":1331}," failed to update a custom field (Team, Size, Story Points, Release Note Type). Curl examples, response handling, OpenAPI spec discovery.",{"type":44,"tag":96,"props":1333,"children":1334},{},[1335,1344],{"type":44,"tag":123,"props":1336,"children":1337},{},[1338],{"type":44,"tag":63,"props":1339,"children":1341},{"className":1340},[],[1342],{"type":49,"value":1343},"references\u002Fgraphql-queries.md",{"type":44,"tag":123,"props":1345,"children":1346},{},[1347],{"type":49,"value":1348},"Complex read queries needing multiple fields, relationships, or custom field data in one call. Schema introspection, JQL search via GraphQL, field type fragments. Also for bulk operations where acli would be too slow.",{"type":44,"tag":96,"props":1350,"children":1351},{},[1352,1360],{"type":44,"tag":123,"props":1353,"children":1354},{},[1355],{"type":44,"tag":63,"props":1356,"children":1358},{"className":1357},[],[1359],{"type":49,"value":143},{"type":44,"tag":123,"props":1361,"children":1362},{},[1363],{"type":49,"value":1364},"Recommending assignees for unassigned issues. Team roster lookup, expertise profiling, sprint capacity analysis, context proximity scoring. Also for applying assignments after user confirmation.",{"type":44,"tag":96,"props":1366,"children":1367},{},[1368,1376],{"type":44,"tag":123,"props":1369,"children":1370},{},[1371],{"type":44,"tag":63,"props":1372,"children":1374},{"className":1373},[],[1375],{"type":49,"value":168},{"type":44,"tag":123,"props":1377,"children":1378},{},[1379],{"type":49,"value":1380},"Checking issues against exit criteria per status, identifying duplicates, missing fields, unaddressed comments, and readiness for the next workflow status.",{"type":44,"tag":96,"props":1382,"children":1383},{},[1384,1392],{"type":44,"tag":123,"props":1385,"children":1386},{},[1387],{"type":44,"tag":63,"props":1388,"children":1390},{"className":1389},[],[1391],{"type":49,"value":193},{"type":44,"tag":123,"props":1393,"children":1394},{},[1395],{"type":49,"value":1396},"Sprint planning prep: carryover report, velocity trend, per-member capacity, ready-for-planning queue, sprint fill suggestions.",{"type":44,"tag":96,"props":1398,"children":1399},{},[1400,1408],{"type":44,"tag":123,"props":1401,"children":1402},{},[1403],{"type":44,"tag":63,"props":1404,"children":1406},{"className":1405},[],[1407],{"type":49,"value":218},{"type":44,"tag":123,"props":1409,"children":1410},{},[1411],{"type":49,"value":1412},"Sprint review summary: committed vs completed, per-member breakdown, epic progress, demo checklist with naming conventions, velocity trend.",{"type":44,"tag":96,"props":1414,"children":1415},{},[1416,1424],{"type":44,"tag":123,"props":1417,"children":1418},{},[1419],{"type":44,"tag":63,"props":1420,"children":1422},{"className":1421},[],[1423],{"type":49,"value":243},{"type":44,"tag":123,"props":1425,"children":1426},{},[1427],{"type":49,"value":1428},"Release readiness report: feature matrix, PI funnel states, epic roll-up, cross-team dependency map, blocker bugs, RN readiness, risk assessment.",{"type":44,"tag":96,"props":1430,"children":1431},{},[1432,1440],{"type":44,"tag":123,"props":1433,"children":1434},{},[1435],{"type":44,"tag":63,"props":1436,"children":1438},{"className":1437},[],[1439],{"type":49,"value":268},{"type":44,"tag":123,"props":1441,"children":1442},{},[1443],{"type":49,"value":1444},"Create a RHDHPLAN Feature from conversation context with grill and optional Epic decomposition.",{"type":44,"tag":96,"props":1446,"children":1447},{},[1448,1456],{"type":44,"tag":123,"props":1449,"children":1450},{},[1451],{"type":44,"tag":63,"props":1452,"children":1454},{"className":1453},[],[1455],{"type":49,"value":293},{"type":44,"tag":123,"props":1457,"children":1458},{},[1459],{"type":49,"value":1460},"Create an RHIDP Epic from conversation context with grill and optional Story\u002FTask decomposition.",{"type":44,"tag":96,"props":1462,"children":1463},{},[1464,1472],{"type":44,"tag":123,"props":1465,"children":1466},{},[1467],{"type":44,"tag":63,"props":1468,"children":1470},{"className":1469},[],[1471],{"type":49,"value":318},{"type":44,"tag":123,"props":1473,"children":1474},{},[1475],{"type":49,"value":1476},"Create a Story, Task, Bug, or Spike with automatic type inference and grill.",{"type":44,"tag":96,"props":1478,"children":1479},{},[1480,1488],{"type":44,"tag":123,"props":1481,"children":1482},{},[1483],{"type":44,"tag":63,"props":1484,"children":1486},{"className":1485},[],[1487],{"type":49,"value":343},{"type":44,"tag":123,"props":1489,"children":1490},{},[1491],{"type":49,"value":1492},"Update a Jira issue with session progress, status comment, transitions, and upward cascade to parent Epic\u002FFeature.",{"type":44,"tag":96,"props":1494,"children":1495},{},[1496,1505],{"type":44,"tag":123,"props":1497,"children":1498},{},[1499],{"type":44,"tag":63,"props":1500,"children":1502},{"className":1501},[],[1503],{"type":49,"value":1504},"references\u002Fduplicates.md",{"type":44,"tag":123,"props":1506,"children":1507},{},[1508],{"type":49,"value":1509},"Duplicate detection for pre-creation checks and refinement audits. Shared across creation commands and refine.",{"type":44,"tag":96,"props":1511,"children":1512},{},[1513,1522],{"type":44,"tag":123,"props":1514,"children":1515},{},[1516],{"type":44,"tag":63,"props":1517,"children":1519},{"className":1518},[],[1520],{"type":49,"value":1521},"references\u002Fgrill.md",{"type":44,"tag":123,"props":1523,"children":1524},{},[1525],{"type":49,"value":1526},"Shared challenging behavior for issue creation grills: sizing, completeness, scope, risks, cross-referencing.",{"type":44,"tag":96,"props":1528,"children":1529},{},[1530,1539],{"type":44,"tag":123,"props":1531,"children":1532},{},[1533],{"type":44,"tag":63,"props":1534,"children":1536},{"className":1535},[],[1537],{"type":49,"value":1538},"references\u002Fsizing.md",{"type":44,"tag":123,"props":1540,"children":1541},{},[1542],{"type":49,"value":1543},"T-shirt sizing guide for Features\u002FEpics and Fibonacci story points for Stories\u002FTasks. Used during grills and refinement.",{"type":44,"tag":45,"props":1545,"children":1546},{},[1547],{"type":49,"value":1548},"\u003C\u002Freference_index>",{"type":44,"tag":81,"props":1550,"children":1552},{"id":1551},"common-gotchas",[1553],{"type":49,"value":1554},"Common Gotchas",{"type":44,"tag":378,"props":1556,"children":1557},{},[1558,1581,1619,1670,1757,1790,1860,1877,1928,2002,2048,2080,2110,2156,2180,2198,2247,2288,2374],{"type":44,"tag":382,"props":1559,"children":1560},{},[1561,1571,1573,1579],{"type":44,"tag":361,"props":1562,"children":1563},{},[1564,1569],{"type":44,"tag":63,"props":1565,"children":1567},{"className":1566},[],[1568],{"type":49,"value":556},{"type":49,"value":1570}," lies.",{"type":49,"value":1572}," It checks OAuth, not API token auth. Always returns \"unauthorized\" with token auth even when Jira works fine. Use ",{"type":44,"tag":63,"props":1574,"children":1576},{"className":1575},[],[1577],{"type":49,"value":1578},"acli jira project list --recent 1",{"type":49,"value":1580}," as a smoke test instead.",{"type":44,"tag":382,"props":1582,"children":1583},{},[1584,1602,1604,1610,1612,1618],{"type":44,"tag":361,"props":1585,"children":1586},{},[1587,1593,1595,1601],{"type":44,"tag":63,"props":1588,"children":1590},{"className":1589},[],[1591],{"type":49,"value":1592},"view",{"type":49,"value":1594}," uses positional arg, everything else uses ",{"type":44,"tag":63,"props":1596,"children":1598},{"className":1597},[],[1599],{"type":49,"value":1600},"--key",{"type":49,"value":576},{"type":49,"value":1603}," ",{"type":44,"tag":63,"props":1605,"children":1607},{"className":1606},[],[1608],{"type":49,"value":1609},"acli jira workitem view RHIDP-123",{"type":49,"value":1611}," but ",{"type":44,"tag":63,"props":1613,"children":1615},{"className":1614},[],[1616],{"type":49,"value":1617},"acli jira workitem edit --key RHIDP-123 ...",{"type":49,"value":576},{"type":44,"tag":382,"props":1620,"children":1621},{},[1622,1633,1635,1641,1642,1648,1649,1654,1656,1662,1664,1669],{"type":44,"tag":361,"props":1623,"children":1624},{},[1625,1631],{"type":44,"tag":63,"props":1626,"children":1628},{"className":1627},[],[1629],{"type":49,"value":1630},"--yes",{"type":49,"value":1632}," is mandatory for mutations.",{"type":49,"value":1634}," All ",{"type":44,"tag":63,"props":1636,"children":1638},{"className":1637},[],[1639],{"type":49,"value":1640},"edit",{"type":49,"value":622},{"type":44,"tag":63,"props":1643,"children":1645},{"className":1644},[],[1646],{"type":49,"value":1647},"transition",{"type":49,"value":622},{"type":44,"tag":63,"props":1650,"children":1652},{"className":1651},[],[1653],{"type":49,"value":620},{"type":49,"value":1655},", and ",{"type":44,"tag":63,"props":1657,"children":1659},{"className":1658},[],[1660],{"type":49,"value":1661},"link create",{"type":49,"value":1663}," commands prompt interactively without it. Always pass ",{"type":44,"tag":63,"props":1665,"children":1667},{"className":1666},[],[1668],{"type":49,"value":1630},{"type":49,"value":576},{"type":44,"tag":382,"props":1671,"children":1672},{},[1673,1684,1686,1692,1693,1699,1700,1706,1707,1713,1714,1720,1721,1727,1728,1734,1735,1741,1743,1748,1750,1756],{"type":44,"tag":361,"props":1674,"children":1675},{},[1676,1682],{"type":44,"tag":63,"props":1677,"children":1679},{"className":1678},[],[1680],{"type":49,"value":1681},"--fields",{"type":49,"value":1683}," is restrictive on search.",{"type":49,"value":1685}," Only accepts ",{"type":44,"tag":63,"props":1687,"children":1689},{"className":1688},[],[1690],{"type":49,"value":1691},"key",{"type":49,"value":622},{"type":44,"tag":63,"props":1694,"children":1696},{"className":1695},[],[1697],{"type":49,"value":1698},"summary",{"type":49,"value":622},{"type":44,"tag":63,"props":1701,"children":1703},{"className":1702},[],[1704],{"type":49,"value":1705},"status",{"type":49,"value":622},{"type":44,"tag":63,"props":1708,"children":1710},{"className":1709},[],[1711],{"type":49,"value":1712},"assignee",{"type":49,"value":622},{"type":44,"tag":63,"props":1715,"children":1717},{"className":1716},[],[1718],{"type":49,"value":1719},"issuetype",{"type":49,"value":622},{"type":44,"tag":63,"props":1722,"children":1724},{"className":1723},[],[1725],{"type":49,"value":1726},"priority",{"type":49,"value":622},{"type":44,"tag":63,"props":1729,"children":1731},{"className":1730},[],[1732],{"type":49,"value":1733},"description",{"type":49,"value":622},{"type":44,"tag":63,"props":1736,"children":1738},{"className":1737},[],[1739],{"type":49,"value":1740},"labels",{"type":49,"value":1742},". For components, sprint, fixVersions, and all custom fields — use ",{"type":44,"tag":63,"props":1744,"children":1746},{"className":1745},[],[1747],{"type":49,"value":753},{"type":49,"value":1749}," or ",{"type":44,"tag":63,"props":1751,"children":1753},{"className":1752},[],[1754],{"type":49,"value":1755},"scripts\u002Fparse_issues.py --enrich",{"type":49,"value":576},{"type":44,"tag":382,"props":1758,"children":1759},{},[1760,1765,1766,1772,1774,1780,1782,1788],{"type":44,"tag":361,"props":1761,"children":1762},{},[1763],{"type":49,"value":1764},"Team field has two JQL syntaxes.",{"type":49,"value":1603},{"type":44,"tag":63,"props":1767,"children":1769},{"className":1768},[],[1770],{"type":49,"value":1771},"customfield_10001",{"type":49,"value":1773}," cannot be used in JQL WHERE clauses. However, ",{"type":44,"tag":63,"props":1775,"children":1777},{"className":1776},[],[1778],{"type":49,"value":1779},"\"Team[Team]\" = {teamId}",{"type":49,"value":1781}," (using the team UUID, not display name) works. Use the UUID syntax for JQL filtering; use ",{"type":44,"tag":63,"props":1783,"children":1785},{"className":1784},[],[1786],{"type":49,"value":1787},"customfield_10001.name",{"type":49,"value":1789}," in post-processing only when you need the display name from JSON output.",{"type":44,"tag":382,"props":1791,"children":1792},{},[1793,1798,1800,1805,1807,1813,1814,1819,1821,1827,1829,1835,1837,1843,1845,1851,1853,1858],{"type":44,"tag":361,"props":1794,"children":1795},{},[1796],{"type":49,"value":1797},"ADF is required for formatted descriptions.",{"type":49,"value":1799}," Reading descriptions via ",{"type":44,"tag":63,"props":1801,"children":1803},{"className":1802},[],[1804],{"type":49,"value":753},{"type":49,"value":1806}," returns Atlassian Document Format (nested JSON). Jira Cloud's editor is ADF-native — plain text and Jira wiki markup (",{"type":44,"tag":63,"props":1808,"children":1810},{"className":1809},[],[1811],{"type":49,"value":1812},"h1.",{"type":49,"value":622},{"type":44,"tag":63,"props":1815,"children":1817},{"className":1816},[],[1818],{"type":49,"value":914},{"type":49,"value":1820},") both render as literal characters in the UI. For formatted descriptions, fill a wiki markup template then run ",{"type":44,"tag":63,"props":1822,"children":1824},{"className":1823},[],[1825],{"type":49,"value":1826},"scripts\u002Fjira-wiki-to-adf.py \u003Cinput.txt> \u003Coutput.json>",{"type":49,"value":1828}," to convert to ADF, then pass via ",{"type":44,"tag":63,"props":1830,"children":1832},{"className":1831},[],[1833],{"type":49,"value":1834},"--description-file",{"type":49,"value":1836},". Both ",{"type":44,"tag":63,"props":1838,"children":1840},{"className":1839},[],[1841],{"type":49,"value":1842},"acli create",{"type":49,"value":1844}," and ",{"type":44,"tag":63,"props":1846,"children":1848},{"className":1847},[],[1849],{"type":49,"value":1850},"acli edit",{"type":49,"value":1852}," accept ADF JSON via ",{"type":44,"tag":63,"props":1854,"children":1856},{"className":1855},[],[1857],{"type":49,"value":1834},{"type":49,"value":1859},". Do not use Jira wiki markup in description files expecting it to render.",{"type":44,"tag":382,"props":1861,"children":1862},{},[1863,1868,1870,1876],{"type":44,"tag":361,"props":1864,"children":1865},{},[1866],{"type":49,"value":1867},"Acceptance Criteria field is almost always null.",{"type":49,"value":1869}," Scan the description for \"Requirements\", \"Acceptance Criteria\", or bullet-style criteria instead of checking ",{"type":44,"tag":63,"props":1871,"children":1873},{"className":1872},[],[1874],{"type":49,"value":1875},"customfield_10718",{"type":49,"value":576},{"type":44,"tag":382,"props":1878,"children":1879},{},[1880,1890,1892,1897,1898,1904,1906,1912,1914,1919,1921,1926],{"type":44,"tag":361,"props":1881,"children":1882},{},[1883,1888],{"type":44,"tag":63,"props":1884,"children":1886},{"className":1885},[],[1887],{"type":49,"value":786},{"type":49,"value":1889}," is MANDATORY for custom fields AND labels.",{"type":49,"value":1891}," Both ",{"type":44,"tag":63,"props":1893,"children":1895},{"className":1894},[],[1896],{"type":49,"value":778},{"type":49,"value":1844},{"type":44,"tag":63,"props":1899,"children":1901},{"className":1900},[],[1902],{"type":49,"value":1903},"acli view KEY --json",{"type":49,"value":1905}," (without ",{"type":44,"tag":63,"props":1907,"children":1909},{"className":1908},[],[1910],{"type":49,"value":1911},"--fields \"*all\"",{"type":49,"value":1913},") return only basic fields (assignee, issuetype, priority, status, summary). Labels, story points, team, sprint, size, and components will all appear as empty\u002Fnull — looking like the data isn't set when it actually is. Always use ",{"type":44,"tag":63,"props":1915,"children":1917},{"className":1916},[],[1918],{"type":49,"value":1755},{"type":49,"value":1920}," to get custom field data. Skipping ",{"type":44,"tag":63,"props":1922,"children":1924},{"className":1923},[],[1925],{"type":49,"value":786},{"type":49,"value":1927}," is the #1 cause of false \"missing data\" reports.",{"type":44,"tag":382,"props":1929,"children":1930},{},[1931,1941,1942,1948,1950,1956,1958,1964,1966,1971,1973,1978,1980,1985,1987,1993,1994,2000],{"type":44,"tag":361,"props":1932,"children":1933},{},[1934,1939],{"type":44,"tag":63,"props":1935,"children":1937},{"className":1936},[],[1938],{"type":49,"value":68},{"type":49,"value":1940}," cannot set arbitrary custom fields.",{"type":49,"value":1603},{"type":44,"tag":63,"props":1943,"children":1945},{"className":1944},[],[1946],{"type":49,"value":1947},"acli jira workitem edit",{"type":49,"value":1949}," does not have a ",{"type":44,"tag":63,"props":1951,"children":1953},{"className":1952},[],[1954],{"type":49,"value":1955},"--custom",{"type":49,"value":1957}," flag. Fields like Team, Size, Story Points, and Release Note Type can only be updated via the Jira REST API. Use ",{"type":44,"tag":63,"props":1959,"children":1961},{"className":1960},[],[1962],{"type":49,"value":1963},"PUT \u002Frest\u002Fapi\u002F3\u002Fissue\u002F{key}",{"type":49,"value":1965}," with the field payload (see ",{"type":44,"tag":63,"props":1967,"children":1969},{"className":1968},[],[1970],{"type":49,"value":1321},{"type":49,"value":1972}," for curl examples and payload formats). Find the token file at ",{"type":44,"tag":63,"props":1974,"children":1976},{"className":1975},[],[1977],{"type":49,"value":499},{"type":49,"value":1979}," next to the ",{"type":44,"tag":63,"props":1981,"children":1983},{"className":1982},[],[1984],{"type":49,"value":68},{"type":49,"value":1986}," executable (discover the path with ",{"type":44,"tag":63,"props":1988,"children":1990},{"className":1989},[],[1991],{"type":49,"value":1992},"readlink -f \"$(which acli)\"",{"type":49,"value":1749},{"type":44,"tag":63,"props":1995,"children":1997},{"className":1996},[],[1998],{"type":49,"value":1999},"where acli",{"type":49,"value":2001},"). Never read the token file into context.",{"type":44,"tag":382,"props":2003,"children":2004},{},[2005,2023,2025,2031,2033,2039,2041,2046],{"type":44,"tag":361,"props":2006,"children":2007},{},[2008,2014,2016,2022],{"type":44,"tag":63,"props":2009,"children":2011},{"className":2010},[],[2012],{"type":49,"value":2013},"acli sprint list-workitems --json",{"type":49,"value":2015}," wraps results in ",{"type":44,"tag":63,"props":2017,"children":2019},{"className":2018},[],[2020],{"type":49,"value":2021},"{\"issues\": [...]}",{"type":49,"value":576},{"type":49,"value":2024},"  The output is NOT a flat array — it's an object with an ",{"type":44,"tag":63,"props":2026,"children":2028},{"className":2027},[],[2029],{"type":49,"value":2030},"issues",{"type":49,"value":2032}," key. Extract the array before piping to ",{"type":44,"tag":63,"props":2034,"children":2036},{"className":2035},[],[2037],{"type":49,"value":2038},"parse_issues.py",{"type":49,"value":2040},". See ",{"type":44,"tag":63,"props":2042,"children":2044},{"className":2043},[],[2045],{"type":49,"value":1180},{"type":49,"value":2047}," for the workaround command.",{"type":44,"tag":382,"props":2049,"children":2050},{},[2051,2056,2057,2063,2065,2071,2073,2078],{"type":44,"tag":361,"props":2052,"children":2053},{},[2054],{"type":49,"value":2055},"GraphQL search is beta.",{"type":49,"value":1603},{"type":44,"tag":63,"props":2058,"children":2060},{"className":2059},[],[2061],{"type":49,"value":2062},"issueSearchStable",{"type":49,"value":2064}," requires ",{"type":44,"tag":63,"props":2066,"children":2068},{"className":2067},[],[2069],{"type":49,"value":2070},"X-ExperimentalApi: JiraIssueSearch",{"type":49,"value":2072}," header. Load ",{"type":44,"tag":63,"props":2074,"children":2076},{"className":2075},[],[2077],{"type":49,"value":1343},{"type":49,"value":2079}," before attempting GraphQL queries.",{"type":44,"tag":382,"props":2081,"children":2082},{},[2083,2101,2103,2108],{"type":44,"tag":361,"props":2084,"children":2085},{},[2086,2091,2093,2099],{"type":44,"tag":63,"props":2087,"children":2089},{"className":2088},[],[2090],{"type":49,"value":499},{"type":49,"value":2092}," format is ",{"type":44,"tag":63,"props":2094,"children":2096},{"className":2095},[],[2097],{"type":49,"value":2098},"email:token",{"type":49,"value":2100},", not bare token.",{"type":49,"value":2102}," A file containing only the API token without the email prefix will cause 401 errors on REST\u002FGraphQL calls. The ",{"type":44,"tag":63,"props":2104,"children":2106},{"className":2105},[],[2107],{"type":49,"value":688},{"type":49,"value":2109}," script validates the format.",{"type":44,"tag":382,"props":2111,"children":2112},{},[2113,2124,2126,2132,2134,2140,2142,2148,2150,2155],{"type":44,"tag":361,"props":2114,"children":2115},{},[2116,2122],{"type":44,"tag":63,"props":2117,"children":2119},{"className":2118},[],[2120],{"type":49,"value":2121},"acli search",{"type":49,"value":2123}," silently truncates results.",{"type":49,"value":2125}," The default page size is 30. If your JQL matches more than 30 issues, you get the first 30 with no warning. Always pass ",{"type":44,"tag":63,"props":2127,"children":2129},{"className":2128},[],[2130],{"type":49,"value":2131},"--limit 500",{"type":49,"value":2133}," for bulk queries, or use ",{"type":44,"tag":63,"props":2135,"children":2137},{"className":2136},[],[2138],{"type":49,"value":2139},"--count",{"type":49,"value":2141}," first to check the total, then ",{"type":44,"tag":63,"props":2143,"children":2145},{"className":2144},[],[2146],{"type":49,"value":2147},"--paginate",{"type":49,"value":2149}," to fetch all pages. This is the #2 cause of incorrect reports after skipping ",{"type":44,"tag":63,"props":2151,"children":2153},{"className":2152},[],[2154],{"type":49,"value":786},{"type":49,"value":576},{"type":44,"tag":382,"props":2157,"children":2158},{},[2159,2164,2166,2171,2173,2178],{"type":44,"tag":361,"props":2160,"children":2161},{},[2162],{"type":49,"value":2163},"\"Feature Exploration\" vs \"Feature Refinement.\"",{"type":49,"value":2165}," The meeting\u002Fprocess is called ",{"type":44,"tag":361,"props":2167,"children":2168},{},[2169],{"type":49,"value":2170},"Feature Exploration",{"type":49,"value":2172},". The Jira workflow status is ",{"type":44,"tag":361,"props":2174,"children":2175},{},[2176],{"type":49,"value":2177},"Refinement",{"type":49,"value":2179},". These are different things. When referring to the meeting or process, always use \"Feature Exploration.\" When referring to the Jira status, use \"Refinement.\" The meeting is sometimes mislabeled as \"Feature Refinement\" in calendar invites — this is incorrect.",{"type":44,"tag":382,"props":2181,"children":2182},{},[2183,2196],{"type":44,"tag":361,"props":2184,"children":2185},{},[2186,2188,2194],{"type":49,"value":2187},"Don't remove ",{"type":44,"tag":63,"props":2189,"children":2191},{"className":2190},[],[2192],{"type":49,"value":2193},"rhdh-X.Y-candidate",{"type":49,"value":2195}," labels.",{"type":49,"value":2197}," Candidate labels track release targeting. Removing them without PM approval can silently drop a feature from release tracking.",{"type":44,"tag":382,"props":2199,"children":2200},{},[2201,2206,2208,2214,2216,2222,2224,2230,2232,2238,2240,2245],{"type":44,"tag":361,"props":2202,"children":2203},{},[2204],{"type":49,"value":2205},"Feature→Epic child links use Parent Link, not issuelinks.",{"type":49,"value":2207}," Cross-project parent-child relationships (RHDHPLAN Feature → RHIDP Epic) use the ",{"type":44,"tag":63,"props":2209,"children":2211},{"className":2210},[],[2212],{"type":49,"value":2213},"Parent Link",{"type":49,"value":2215}," field (",{"type":44,"tag":63,"props":2217,"children":2219},{"className":2218},[],[2220],{"type":49,"value":2221},"customfield_10018",{"type":49,"value":2223},"), not ",{"type":44,"tag":63,"props":2225,"children":2227},{"className":2226},[],[2228],{"type":49,"value":2229},"issuelinks",{"type":49,"value":2231},". To find child Epics of a Feature, use JQL: ",{"type":44,"tag":63,"props":2233,"children":2235},{"className":2234},[],[2236],{"type":49,"value":2237},"project = RHIDP AND type = Epic AND \"Parent Link\" = RHDHPLAN-XXX",{"type":49,"value":2239},". Checking ",{"type":44,"tag":63,"props":2241,"children":2243},{"className":2242},[],[2244],{"type":49,"value":2229},{"type":49,"value":2246}," will show zero results and produce false \"no child Epics\" reports.",{"type":44,"tag":382,"props":2248,"children":2249},{},[2250,2263,2265,2271,2273,2279,2281,2286],{"type":44,"tag":361,"props":2251,"children":2252},{},[2253,2255,2261],{"type":49,"value":2254},"REST ",{"type":44,"tag":63,"props":2256,"children":2258},{"className":2257},[],[2259],{"type":49,"value":2260},"\u002Frest\u002Fapi\u002F3\u002Fsearch",{"type":49,"value":2262}," returns 410 Gone.",{"type":49,"value":2264}," This endpoint has been removed. Use POST to ",{"type":44,"tag":63,"props":2266,"children":2268},{"className":2267},[],[2269],{"type":49,"value":2270},"\u002Frest\u002Fapi\u002F3\u002Fsearch\u002Fjql",{"type":49,"value":2272}," with body ",{"type":44,"tag":63,"props":2274,"children":2276},{"className":2275},[],[2277],{"type":49,"value":2278},"{\"jql\": \"...\", \"fields\": [...], \"maxResults\": N}",{"type":49,"value":2280}," instead. This only affects direct REST calls — ",{"type":44,"tag":63,"props":2282,"children":2284},{"className":2283},[],[2285],{"type":49,"value":2121},{"type":49,"value":2287}," still works.",{"type":44,"tag":382,"props":2289,"children":2290},{},[2291,2323,2325,2330,2331,2336,2337,2342,2344,2350,2352,2358,2360,2365,2367,2372],{"type":44,"tag":361,"props":2292,"children":2293},{},[2294,2300,2302,2308,2309,2315,2317,2322],{"type":44,"tag":63,"props":2295,"children":2297},{"className":2296},[],[2298],{"type":49,"value":2299},"acli workitem create",{"type":49,"value":2301}," does not support ",{"type":44,"tag":63,"props":2303,"children":2305},{"className":2304},[],[2306],{"type":49,"value":2307},"--priority",{"type":49,"value":622},{"type":44,"tag":63,"props":2310,"children":2312},{"className":2311},[],[2313],{"type":49,"value":2314},"--component",{"type":49,"value":2316},", or ",{"type":44,"tag":63,"props":2318,"children":2320},{"className":2319},[],[2321],{"type":49,"value":1630},{"type":49,"value":576},{"type":49,"value":2324}," These flags exist on ",{"type":44,"tag":63,"props":2326,"children":2328},{"className":2327},[],[2329],{"type":49,"value":1640},{"type":49,"value":622},{"type":44,"tag":63,"props":2332,"children":2334},{"className":2333},[],[2335],{"type":49,"value":1647},{"type":49,"value":1655},{"type":44,"tag":63,"props":2338,"children":2340},{"className":2339},[],[2341],{"type":49,"value":620},{"type":49,"value":2343}," but not on ",{"type":44,"tag":63,"props":2345,"children":2347},{"className":2346},[],[2348],{"type":49,"value":2349},"create",{"type":49,"value":2351}," — passing them causes \"unknown flag\" errors. After creating an issue, set priority, components, size (",{"type":44,"tag":63,"props":2353,"children":2355},{"className":2354},[],[2356],{"type":49,"value":2357},"customfield_10795",{"type":49,"value":2359},"), and parent link (",{"type":44,"tag":63,"props":2361,"children":2363},{"className":2362},[],[2364],{"type":49,"value":2221},{"type":49,"value":2366},") together in a single ",{"type":44,"tag":63,"props":2368,"children":2370},{"className":2369},[],[2371],{"type":49,"value":1963},{"type":49,"value":2373}," call.",{"type":44,"tag":382,"props":2375,"children":2376},{},[2377,2390,2392,2397,2399,2405,2406,2412,2413,2419,2421,2427,2429,2434],{"type":44,"tag":361,"props":2378,"children":2379},{},[2380,2382,2388],{"type":49,"value":2381},"MCP ",{"type":44,"tag":63,"props":2383,"children":2385},{"className":2384},[],[2386],{"type":49,"value":2387},"create_jira_issue",{"type":49,"value":2389}," does not support ADF.",{"type":49,"value":2391}," The MCP tool's ",{"type":44,"tag":63,"props":2393,"children":2395},{"className":2394},[],[2396],{"type":49,"value":1733},{"type":49,"value":2398}," parameter accepts a plain string, which Jira wraps in a single paragraph node — markdown syntax (",{"type":44,"tag":63,"props":2400,"children":2402},{"className":2401},[],[2403],{"type":49,"value":2404},"## Heading",{"type":49,"value":622},{"type":44,"tag":63,"props":2407,"children":2409},{"className":2408},[],[2410],{"type":49,"value":2411},"**bold**",{"type":49,"value":622},{"type":44,"tag":63,"props":2414,"children":2416},{"className":2415},[],[2417],{"type":49,"value":2418},"- [ ] task",{"type":49,"value":2420},") renders as literal characters. For formatted descriptions (headings, lists, code, links, task items), always use ",{"type":44,"tag":63,"props":2422,"children":2424},{"className":2423},[],[2425],{"type":49,"value":2426},"acli jira workitem create",{"type":49,"value":2428}," with ",{"type":44,"tag":63,"props":2430,"children":2432},{"className":2431},[],[2433],{"type":49,"value":1834},{"type":49,"value":2435}," pointing to ADF JSON. Use the MCP tool only for quick unformatted issues where plain text is acceptable.",{"type":44,"tag":81,"props":2437,"children":2439},{"id":2438},"error-handling",[2440],{"type":49,"value":2441},"Error Handling",{"type":44,"tag":88,"props":2443,"children":2444},{},[2445,2461],{"type":44,"tag":92,"props":2446,"children":2447},{},[2448],{"type":44,"tag":96,"props":2449,"children":2450},{},[2451,2456],{"type":44,"tag":100,"props":2452,"children":2453},{},[2454],{"type":49,"value":2455},"Error",{"type":44,"tag":100,"props":2457,"children":2458},{},[2459],{"type":49,"value":2460},"Action",{"type":44,"tag":116,"props":2462,"children":2463},{},[2464,2495,2522,2542,2569,2582,2595,2615,2640],{"type":44,"tag":96,"props":2465,"children":2466},{},[2467,2477],{"type":44,"tag":123,"props":2468,"children":2469},{},[2470,2475],{"type":44,"tag":63,"props":2471,"children":2473},{"className":2472},[],[2474],{"type":49,"value":68},{"type":49,"value":2476}," not on PATH",{"type":44,"tag":123,"props":2478,"children":2479},{},[2480,2481,2486,2488,2494],{"type":49,"value":422},{"type":44,"tag":63,"props":2482,"children":2484},{"className":2483},[],[2485],{"type":49,"value":428},{"type":49,"value":2487},". Install from Atlassian if missing. See ",{"type":44,"tag":141,"props":2489,"children":2491},{"href":544,"rel":2490},[536],[2492],{"type":49,"value":2493},"Getting Started",{"type":49,"value":576},{"type":44,"tag":96,"props":2496,"children":2497},{},[2498,2509],{"type":44,"tag":123,"props":2499,"children":2500},{},[2501,2503],{"type":49,"value":2502},"\"unauthorized\" from ",{"type":44,"tag":63,"props":2504,"children":2506},{"className":2505},[],[2507],{"type":49,"value":2508},"auth status",{"type":44,"tag":123,"props":2510,"children":2511},{},[2512,2514,2520],{"type":49,"value":2513},"Ignore. Check ",{"type":44,"tag":63,"props":2515,"children":2517},{"className":2516},[],[2518],{"type":49,"value":2519},"jira_config.yaml",{"type":49,"value":2521}," exists. Run smoke test.",{"type":44,"tag":96,"props":2523,"children":2524},{},[2525,2530],{"type":44,"tag":123,"props":2526,"children":2527},{},[2528],{"type":49,"value":2529},"\"required flag(s) not set\"",{"type":44,"tag":123,"props":2531,"children":2532},{},[2533,2535,2541],{"type":49,"value":2534},"Command syntax wrong. Run ",{"type":44,"tag":63,"props":2536,"children":2538},{"className":2537},[],[2539],{"type":49,"value":2540},"acli jira \u003Csubcommand> --help",{"type":49,"value":576},{"type":44,"tag":96,"props":2543,"children":2544},{},[2545,2550],{"type":44,"tag":123,"props":2546,"children":2547},{},[2548],{"type":49,"value":2549},"\"field X is not allowed\"",{"type":44,"tag":123,"props":2551,"children":2552},{},[2553,2555,2560,2562,2567],{"type":49,"value":2554},"Use ",{"type":44,"tag":63,"props":2556,"children":2558},{"className":2557},[],[2559],{"type":49,"value":753},{"type":49,"value":2561}," instead of ",{"type":44,"tag":63,"props":2563,"children":2565},{"className":2564},[],[2566],{"type":49,"value":1681},{"type":49,"value":2568}," for that field.",{"type":44,"tag":96,"props":2570,"children":2571},{},[2572,2577],{"type":44,"tag":123,"props":2573,"children":2574},{},[2575],{"type":49,"value":2576},"\"the value X does not exist for the field 'project'\"",{"type":44,"tag":123,"props":2578,"children":2579},{},[2580],{"type":49,"value":2581},"Project key is wrong or project is archived (e.g., RHDHPAI).",{"type":44,"tag":96,"props":2583,"children":2584},{},[2585,2590],{"type":44,"tag":123,"props":2586,"children":2587},{},[2588],{"type":49,"value":2589},"Rate limiting (429)",{"type":44,"tag":123,"props":2591,"children":2592},{},[2593],{"type":49,"value":2594},"Wait 5 seconds, retry once.",{"type":44,"tag":96,"props":2596,"children":2597},{},[2598,2603],{"type":44,"tag":123,"props":2599,"children":2600},{},[2601],{"type":49,"value":2602},"Interactive prompt hangs",{"type":44,"tag":123,"props":2604,"children":2605},{},[2606,2608,2613],{"type":49,"value":2607},"Missing ",{"type":44,"tag":63,"props":2609,"children":2611},{"className":2610},[],[2612],{"type":49,"value":1630},{"type":49,"value":2614}," flag on a mutating command.",{"type":44,"tag":96,"props":2616,"children":2617},{},[2618,2628],{"type":44,"tag":123,"props":2619,"children":2620},{},[2621,2623],{"type":49,"value":2622},"Custom field update fails via ",{"type":44,"tag":63,"props":2624,"children":2626},{"className":2625},[],[2627],{"type":49,"value":68},{"type":44,"tag":123,"props":2629,"children":2630},{},[2631,2633,2638],{"type":49,"value":2632},"Fall back to Jira REST API using ",{"type":44,"tag":63,"props":2634,"children":2636},{"className":2635},[],[2637],{"type":49,"value":499},{"type":49,"value":2639}," file. See Gotcha #9.",{"type":44,"tag":96,"props":2641,"children":2642},{},[2643,2653],{"type":44,"tag":123,"props":2644,"children":2645},{},[2646,2651],{"type":44,"tag":63,"props":2647,"children":2649},{"className":2648},[],[2650],{"type":49,"value":2062},{"type":49,"value":2652}," returns errors",{"type":44,"tag":123,"props":2654,"children":2655},{},[2656,2658,2663,2665,2670],{"type":49,"value":2657},"Fall back to ",{"type":44,"tag":63,"props":2659,"children":2661},{"className":2660},[],[2662],{"type":49,"value":68},{"type":49,"value":2664}," search (not REST — ",{"type":44,"tag":63,"props":2666,"children":2668},{"className":2667},[],[2669],{"type":49,"value":2260},{"type":49,"value":2671}," returns 410 Gone on this instance). Warn that the beta API failed.",{"type":44,"tag":81,"props":2673,"children":2675},{"id":2674},"team-conventions",[2676],{"type":49,"value":2677},"Team Conventions",{"type":44,"tag":45,"props":2679,"children":2680},{},[2681],{"type":49,"value":2682},"These apply across all sub-commands:",{"type":44,"tag":578,"props":2684,"children":2685},{},[2686,2696,2734,2766],{"type":44,"tag":382,"props":2687,"children":2688},{},[2689,2694],{"type":44,"tag":361,"props":2690,"children":2691},{},[2692],{"type":49,"value":2693},"Release Pending counts as completed.",{"type":49,"value":2695}," Release Pending items remain in the sprint and count toward velocity and capacity. They represent done work awaiting release.",{"type":44,"tag":382,"props":2697,"children":2698},{},[2699,2704,2706,2712,2714,2719,2721,2726,2728,2732],{"type":44,"tag":361,"props":2700,"children":2701},{},[2702],{"type":49,"value":2703},"Confirmation flow.",{"type":49,"value":2705}," Sub-commands that modify Jira issues use a standard prompt: ",{"type":44,"tag":63,"props":2707,"children":2709},{"className":2708},[],[2710],{"type":49,"value":2711},"\"Apply changes? [y\u002FN\u002Fedit]\"",{"type":49,"value":2713}," — ",{"type":44,"tag":361,"props":2715,"children":2716},{},[2717],{"type":49,"value":2718},"y",{"type":49,"value":2720}," applies all, ",{"type":44,"tag":361,"props":2722,"children":2723},{},[2724],{"type":49,"value":2725},"N",{"type":49,"value":2727}," cancels, ",{"type":44,"tag":361,"props":2729,"children":2730},{},[2731],{"type":49,"value":1640},{"type":49,"value":2733}," steps through each change individually.",{"type":44,"tag":382,"props":2735,"children":2736},{},[2737,2742,2744,2750,2751,2757,2758,2764],{"type":44,"tag":361,"props":2738,"children":2739},{},[2740],{"type":49,"value":2741},"Closure requires rationale.",{"type":49,"value":2743}," When closing or descoping issues, always add a comment documenting the reason and set the resolution field (",{"type":44,"tag":63,"props":2745,"children":2747},{"className":2746},[],[2748],{"type":49,"value":2749},"Won't Do",{"type":49,"value":622},{"type":44,"tag":63,"props":2752,"children":2754},{"className":2753},[],[2755],{"type":49,"value":2756},"Duplicate",{"type":49,"value":622},{"type":44,"tag":63,"props":2759,"children":2761},{"className":2760},[],[2762],{"type":49,"value":2763},"Done",{"type":49,"value":2765},"). Preserves the decision trail.",{"type":44,"tag":382,"props":2767,"children":2768},{},[2769,2774],{"type":44,"tag":361,"props":2770,"children":2771},{},[2772],{"type":49,"value":2773},"Comments over description bloat.",{"type":49,"value":2775}," Issue descriptions use the structured template sections. Decision trail, elaboration, abandoned approaches, and customer context go in comments. Creation commands proactively suggest comments for context that emerged during the grill.",{"type":44,"tag":81,"props":2777,"children":2779},{"id":2778},"common-workflows",[2780],{"type":49,"value":2781},"Common Workflows",{"type":44,"tag":2783,"props":2784,"children":2785},"blockquote",{},[2786],{"type":44,"tag":45,"props":2787,"children":2788},{},[2789,2791,2797,2799,2804,2806,2812,2814,2819,2820,2826,2828,2834,2836,2841],{"type":49,"value":2790},"Sub-commands share data. ",{"type":44,"tag":63,"props":2792,"children":2794},{"className":2793},[],[2795],{"type":49,"value":2796},"plan",{"type":49,"value":2798}," reuses roster\u002Fcapacity\u002Fexpertise from ",{"type":44,"tag":63,"props":2800,"children":2802},{"className":2801},[],[2803],{"type":49,"value":620},{"type":49,"value":2805},". ",{"type":44,"tag":63,"props":2807,"children":2809},{"className":2808},[],[2810],{"type":49,"value":2811},"sprint-report",{"type":49,"value":2813}," uses the same velocity query pattern as ",{"type":44,"tag":63,"props":2815,"children":2817},{"className":2816},[],[2818],{"type":49,"value":2796},{"type":49,"value":2805},{"type":44,"tag":63,"props":2821,"children":2823},{"className":2822},[],[2824],{"type":49,"value":2825},"release",{"type":49,"value":2827}," references exit criteria from ",{"type":44,"tag":63,"props":2829,"children":2831},{"className":2830},[],[2832],{"type":49,"value":2833},"workflows.md",{"type":49,"value":2835}," and can invoke ",{"type":44,"tag":63,"props":2837,"children":2839},{"className":2838},[],[2840],{"type":49,"value":620},{"type":49,"value":2842}," for unassigned Features.",{"type":44,"tag":371,"props":2844,"children":2846},{"id":2845},"creating-an-issue",[2847],{"type":49,"value":2848},"Creating an issue",{"type":44,"tag":378,"props":2850,"children":2851},{},[2852,2864,2875],{"type":44,"tag":382,"props":2853,"children":2854},{},[2855,2857,2862],{"type":49,"value":2856},"Load ",{"type":44,"tag":63,"props":2858,"children":2860},{"className":2859},[],[2861],{"type":49,"value":1230},{"type":49,"value":2863}," for the body template",{"type":44,"tag":382,"props":2865,"children":2866},{},[2867,2868,2873],{"type":49,"value":2856},{"type":44,"tag":63,"props":2869,"children":2871},{"className":2870},[],[2872],{"type":49,"value":1213},{"type":49,"value":2874}," for required fields at New status",{"type":44,"tag":382,"props":2876,"children":2877},{},[2878,2879,2884,2886,2891],{"type":49,"value":422},{"type":44,"tag":63,"props":2880,"children":2882},{"className":2881},[],[2883],{"type":49,"value":2426},{"type":49,"value":2885}," (see ",{"type":44,"tag":63,"props":2887,"children":2889},{"className":2888},[],[2890],{"type":49,"value":1180},{"type":49,"value":2892}," if unsure of syntax)",{"type":44,"tag":371,"props":2894,"children":2896},{"id":2895},"searching-with-custom-fields-team-story-points-sprint",[2897],{"type":49,"value":2898},"Searching with custom fields (team, story points, sprint)",{"type":44,"tag":378,"props":2900,"children":2901},{},[2902,2912,2924],{"type":44,"tag":382,"props":2903,"children":2904},{},[2905,2907],{"type":49,"value":2906},"Build JQL using patterns from ",{"type":44,"tag":63,"props":2908,"children":2910},{"className":2909},[],[2911],{"type":49,"value":1288},{"type":44,"tag":382,"props":2913,"children":2914},{},[2915,2917,2922],{"type":49,"value":2916},"Pipe results through ",{"type":44,"tag":63,"props":2918,"children":2920},{"className":2919},[],[2921],{"type":49,"value":1755},{"type":49,"value":2923}," for full field data",{"type":44,"tag":382,"props":2925,"children":2926},{},[2927,2928,2933],{"type":49,"value":2554},{"type":44,"tag":63,"props":2929,"children":2931},{"className":2930},[],[2932],{"type":49,"value":794},{"type":49,"value":2934}," to filter by team (not possible in JQL)",{"type":44,"tag":371,"props":2936,"children":2938},{"id":2937},"transitioning-an-issue",[2939],{"type":49,"value":2940},"Transitioning an issue",{"type":44,"tag":378,"props":2942,"children":2943},{},[2944,2955,2960],{"type":44,"tag":382,"props":2945,"children":2946},{},[2947,2948,2953],{"type":49,"value":2856},{"type":44,"tag":63,"props":2949,"children":2951},{"className":2950},[],[2952],{"type":49,"value":1213},{"type":49,"value":2954}," for exit criteria at the target status",{"type":44,"tag":382,"props":2956,"children":2957},{},[2958],{"type":49,"value":2959},"Verify required fields are set before transitioning",{"type":44,"tag":382,"props":2961,"children":2962},{},[2963,2964],{"type":49,"value":422},{"type":44,"tag":63,"props":2965,"children":2967},{"className":2966},[],[2968],{"type":49,"value":2969},"acli jira workitem transition --key KEY --status \"X\" --yes",{"type":44,"tag":371,"props":2971,"children":2973},{"id":2972},"complex-queries-many-fields-relationships",[2974],{"type":49,"value":2975},"Complex queries (many fields, relationships)",{"type":44,"tag":378,"props":2977,"children":2978},{},[2979,2988,3007],{"type":44,"tag":382,"props":2980,"children":2981},{},[2982,2983],{"type":49,"value":2856},{"type":44,"tag":63,"props":2984,"children":2986},{"className":2985},[],[2987],{"type":49,"value":1343},{"type":44,"tag":382,"props":2989,"children":2990},{},[2991,2992,2998,3000,3005],{"type":49,"value":2554},{"type":44,"tag":63,"props":2993,"children":2995},{"className":2994},[],[2996],{"type":49,"value":2997},"issueByKey",{"type":49,"value":2999}," for single issues or ",{"type":44,"tag":63,"props":3001,"children":3003},{"className":3002},[],[3004],{"type":49,"value":2062},{"type":49,"value":3006}," (beta) for JQL search",{"type":44,"tag":382,"props":3008,"children":3009},{},[3010,3011,3016,3018,3024],{"type":49,"value":2657},{"type":44,"tag":63,"props":3012,"children":3014},{"className":3013},[],[3015],{"type":49,"value":68},{"type":49,"value":3017}," + ",{"type":44,"tag":63,"props":3019,"children":3021},{"className":3020},[],[3022],{"type":49,"value":3023},"parse_issues.py --enrich",{"type":49,"value":3025}," if GraphQL returns errors",{"type":44,"tag":371,"props":3027,"children":3029},{"id":3028},"recommending-and-assigning-issues",[3030],{"type":49,"value":3031},"Recommending and assigning issues",{"type":44,"tag":378,"props":3033,"children":3034},{},[3035,3044,3049,3054,3059],{"type":44,"tag":382,"props":3036,"children":3037},{},[3038,3039],{"type":49,"value":2856},{"type":44,"tag":63,"props":3040,"children":3042},{"className":3041},[],[3043],{"type":49,"value":143},{"type":44,"tag":382,"props":3045,"children":3046},{},[3047],{"type":49,"value":3048},"Identify unassigned issues (single key, JQL query, or passed-in list)",{"type":44,"tag":382,"props":3050,"children":3051},{},[3052],{"type":49,"value":3053},"Determine the team (from issue field, parent epic, or user input)",{"type":44,"tag":382,"props":3055,"children":3056},{},[3057],{"type":49,"value":3058},"Run deep or quick analysis per the reference",{"type":44,"tag":382,"props":3060,"children":3061},{},[3062],{"type":49,"value":3063},"Present recommendations, get user confirmation, then assign",{"type":44,"tag":371,"props":3065,"children":3067},{"id":3066},"refining-issues",[3068],{"type":49,"value":3069},"Refining issues",{"type":44,"tag":378,"props":3071,"children":3072},{},[3073,3082,3101,3106,3111],{"type":44,"tag":382,"props":3074,"children":3075},{},[3076,3077],{"type":49,"value":2856},{"type":44,"tag":63,"props":3078,"children":3080},{"className":3079},[],[3081],{"type":49,"value":168},{"type":44,"tag":382,"props":3083,"children":3084},{},[3085,3087,3093,3094,3100],{"type":49,"value":3086},"Identify issues to refine (specific keys, JQL, ",{"type":44,"tag":63,"props":3088,"children":3090},{"className":3089},[],[3091],{"type":49,"value":3092},"sprint",{"type":49,"value":2316},{"type":44,"tag":63,"props":3095,"children":3097},{"className":3096},[],[3098],{"type":49,"value":3099},"backlog",{"type":49,"value":490},{"type":44,"tag":382,"props":3102,"children":3103},{},[3104],{"type":49,"value":3105},"Run all 6 checks: missing fields, duplicates, hierarchy, comments, staleness, sprint readiness",{"type":44,"tag":382,"props":3107,"children":3108},{},[3109],{"type":49,"value":3110},"Present refinement report with actionable recommendations",{"type":44,"tag":382,"props":3112,"children":3113},{},[3114],{"type":49,"value":3115},"Optionally apply auto-fixable changes and prompt for manual decisions",{"type":44,"tag":371,"props":3117,"children":3119},{"id":3118},"sprint-planning-prep",[3120],{"type":49,"value":3121},"Sprint planning prep",{"type":44,"tag":378,"props":3123,"children":3124},{},[3125,3134,3139,3144,3149],{"type":44,"tag":382,"props":3126,"children":3127},{},[3128,3129],{"type":49,"value":2856},{"type":44,"tag":63,"props":3130,"children":3132},{"className":3131},[],[3133],{"type":49,"value":193},{"type":44,"tag":382,"props":3135,"children":3136},{},[3137],{"type":49,"value":3138},"Resolve team, board, and sprint context",{"type":44,"tag":382,"props":3140,"children":3141},{},[3142],{"type":49,"value":3143},"Generate carryover report, velocity trend, capacity snapshot, and ready-for-planning queue",{"type":44,"tag":382,"props":3145,"children":3146},{},[3147],{"type":49,"value":3148},"Auto-generate sprint fill suggestions with expertise matching",{"type":44,"tag":382,"props":3150,"children":3151},{},[3152],{"type":49,"value":3153},"Surface critical customer bugs (exempt from capacity) and retro action items",{"type":44,"tag":371,"props":3155,"children":3157},{"id":3156},"sprint-review-summary",[3158],{"type":49,"value":3159},"Sprint review summary",{"type":44,"tag":378,"props":3161,"children":3162},{},[3163,3172,3177,3182,3187],{"type":44,"tag":382,"props":3164,"children":3165},{},[3166,3167],{"type":49,"value":2856},{"type":44,"tag":63,"props":3168,"children":3170},{"className":3169},[],[3171],{"type":49,"value":218},{"type":44,"tag":382,"props":3173,"children":3174},{},[3175],{"type":49,"value":3176},"Resolve sprint (active or previous)",{"type":44,"tag":382,"props":3178,"children":3179},{},[3180],{"type":49,"value":3181},"Partition completed vs carried over, compute completion rate",{"type":44,"tag":382,"props":3183,"children":3184},{},[3185],{"type":49,"value":3186},"Per-member breakdown, epic progress, demo checklist with naming conventions",{"type":44,"tag":382,"props":3188,"children":3189},{},[3190],{"type":49,"value":3191},"Optionally save as markdown file",{"type":44,"tag":371,"props":3193,"children":3195},{"id":3194},"release-readiness",[3196],{"type":49,"value":3197},"Release readiness",{"type":44,"tag":378,"props":3199,"children":3200},{},[3201,3210,3215,3220,3225],{"type":44,"tag":382,"props":3202,"children":3203},{},[3204,3205],{"type":49,"value":2856},{"type":44,"tag":63,"props":3206,"children":3208},{"className":3207},[],[3209],{"type":49,"value":243},{"type":44,"tag":382,"props":3211,"children":3212},{},[3213],{"type":49,"value":3214},"Fetch Features for the target version\u002Flabel",{"type":44,"tag":382,"props":3216,"children":3217},{},[3218],{"type":49,"value":3219},"Quick mode: PI funnel, feature matrix, readiness score",{"type":44,"tag":382,"props":3221,"children":3222},{},[3223],{"type":49,"value":3224},"Deep mode: adds epic roll-up, dependency map, coherence analysis, RN readiness, risk assessment",{"type":44,"tag":382,"props":3226,"children":3227},{},[3228],{"type":49,"value":3229},"Optionally remediate (assign owners, create Epics, transition statuses)",{"type":44,"tag":371,"props":3231,"children":3233},{"id":3232},"creating-features-epics-and-issues",[3234],{"type":49,"value":3235},"Creating Features, Epics, and Issues",{"type":44,"tag":378,"props":3237,"children":3238},{},[3239,3265,3276,3294,3305,3315,3320],{"type":44,"tag":382,"props":3240,"children":3241},{},[3242,3244,3250,3251,3257,3258,3264],{"type":49,"value":3243},"Load the appropriate creation reference (",{"type":44,"tag":63,"props":3245,"children":3247},{"className":3246},[],[3248],{"type":49,"value":3249},"to-feature.md",{"type":49,"value":622},{"type":44,"tag":63,"props":3252,"children":3254},{"className":3253},[],[3255],{"type":49,"value":3256},"to-epic.md",{"type":49,"value":2316},{"type":44,"tag":63,"props":3259,"children":3261},{"className":3260},[],[3262],{"type":49,"value":3263},"to-issue.md",{"type":49,"value":490},{"type":44,"tag":382,"props":3266,"children":3267},{},[3268,3269,3274],{"type":49,"value":2856},{"type":44,"tag":63,"props":3270,"children":3272},{"className":3271},[],[3273],{"type":49,"value":1521},{"type":49,"value":3275}," for challenging behavior",{"type":44,"tag":382,"props":3277,"children":3278},{},[3279,3281,3287,3288],{"type":49,"value":3280},"Load the template + example pair from ",{"type":44,"tag":63,"props":3282,"children":3284},{"className":3283},[],[3285],{"type":49,"value":3286},"assets\u002Ftemplates\u002F",{"type":49,"value":1844},{"type":44,"tag":63,"props":3289,"children":3291},{"className":3290},[],[3292],{"type":49,"value":3293},"assets\u002Fexamples\u002F",{"type":44,"tag":382,"props":3295,"children":3296},{},[3297,3299,3304],{"type":49,"value":3298},"Grill the user on scope, AC, sizing (reference ",{"type":44,"tag":63,"props":3300,"children":3302},{"className":3301},[],[3303],{"type":49,"value":1538},{"type":49,"value":490},{"type":44,"tag":382,"props":3306,"children":3307},{},[3308,3310],{"type":49,"value":3309},"Run duplicate check per ",{"type":44,"tag":63,"props":3311,"children":3313},{"className":3312},[],[3314],{"type":49,"value":1504},{"type":44,"tag":382,"props":3316,"children":3317},{},[3318],{"type":49,"value":3319},"Create the issue, suggest comments for decision trail",{"type":44,"tag":382,"props":3321,"children":3322},{},[3323],{"type":49,"value":3324},"Offer chained decomposition (Feature → Epics → Stories\u002FTasks)",{"type":44,"tag":371,"props":3326,"children":3328},{"id":3327},"updating-jira-from-a-session",[3329],{"type":49,"value":3330},"Updating Jira from a session",{"type":44,"tag":378,"props":3332,"children":3333},{},[3334,3343,3348,3353,3358],{"type":44,"tag":382,"props":3335,"children":3336},{},[3337,3338],{"type":49,"value":2856},{"type":44,"tag":63,"props":3339,"children":3341},{"className":3340},[],[3342],{"type":49,"value":343},{"type":44,"tag":382,"props":3344,"children":3345},{},[3346],{"type":49,"value":3347},"Detect related issue (conversation → git → PR → commits → keyword search)",{"type":44,"tag":382,"props":3349,"children":3350},{},[3351],{"type":49,"value":3352},"Compose status comment, propose transition",{"type":44,"tag":382,"props":3354,"children":3355},{},[3356],{"type":49,"value":3357},"Check upward cascade (sibling completion → parent transition)",{"type":44,"tag":382,"props":3359,"children":3360},{},[3361],{"type":49,"value":3362},"Suggest reaching out to Feature Owner if Feature-level work is complete",{"type":44,"tag":371,"props":3364,"children":3366},{"id":3365},"discovering-unknown-fields-or-endpoints",[3367],{"type":49,"value":3368},"Discovering unknown fields or endpoints",{"type":44,"tag":378,"props":3370,"children":3371},{},[3372,3392,3412],{"type":44,"tag":382,"props":3373,"children":3374},{},[3375,3377,3382,3384,3390],{"type":49,"value":3376},"For REST: load ",{"type":44,"tag":63,"props":3378,"children":3380},{"className":3379},[],[3381],{"type":49,"value":1321},{"type":49,"value":3383}," — use the OpenAPI spec or ",{"type":44,"tag":63,"props":3385,"children":3387},{"className":3386},[],[3388],{"type":49,"value":3389},"\u002Frest\u002Fapi\u002F3\u002Ffield",{"type":49,"value":3391}," endpoint",{"type":44,"tag":382,"props":3393,"children":3394},{},[3395,3397,3402,3404,3410],{"type":49,"value":3396},"For GraphQL: load ",{"type":44,"tag":63,"props":3398,"children":3400},{"className":3399},[],[3401],{"type":49,"value":1343},{"type":49,"value":3403}," — use ",{"type":44,"tag":63,"props":3405,"children":3407},{"className":3406},[],[3408],{"type":49,"value":3409},"__type",{"type":49,"value":3411}," introspection queries",{"type":44,"tag":382,"props":3413,"children":3414},{},[3415],{"type":49,"value":3416},"Do not guess field IDs or types — always verify against the live schema",{"type":44,"tag":81,"props":3418,"children":3420},{"id":3419},"when-not-to-use",[3421],{"type":49,"value":3422},"When NOT to Use",{"type":44,"tag":578,"props":3424,"children":3425},{},[3426,3436,3452],{"type":44,"tag":382,"props":3427,"children":3428},{},[3429,3434],{"type":44,"tag":361,"props":3430,"children":3431},{},[3432],{"type":49,"value":3433},"Non-RHDH Jira projects",{"type":49,"value":3435}," — this skill's field mappings, workflows, and JQL patterns are specific to RHIDP\u002FRHDHPLAN\u002FRHDHBUGS\u002FRHDHSUPP",{"type":44,"tag":382,"props":3437,"children":3438},{},[3439,3444,3445,3450],{"type":44,"tag":361,"props":3440,"children":3441},{},[3442],{"type":49,"value":3443},"Jira REST API directly",{"type":49,"value":3403},{"type":44,"tag":63,"props":3446,"children":3448},{"className":3447},[],[3449],{"type":49,"value":68},{"type":49,"value":3451}," first, then GraphQL for bulk reads. REST API is the last resort for writes when acli fails and for schema discovery via OpenAPI spec (see Gotcha #9)",{"type":44,"tag":382,"props":3453,"children":3454},{},[3455,3460,3461,3466],{"type":44,"tag":361,"props":3456,"children":3457},{},[3458],{"type":49,"value":3459},"GraphQL for simple lookups",{"type":49,"value":3403},{"type":44,"tag":63,"props":3462,"children":3464},{"className":3463},[],[3465],{"type":49,"value":68},{"type":49,"value":3467}," for single-issue views and simple searches. GraphQL is for bulk operations, complex queries needing relationships or many custom fields in one call, team roster lookups, and schema introspection",{"type":44,"tag":3469,"props":3470,"children":3471},"style",{},[3472],{"type":49,"value":3473},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3475,"total":3648},[3476,3492,3506,3525,3541,3558,3569,3586,3598,3611,3623,3635],{"slug":3477,"name":3477,"fn":3478,"description":3479,"org":3480,"tags":3481,"stars":26,"repoUrl":27,"updatedAt":3491},"agent-ready","assess repository readiness for AI agents","Assesses a git repository's readiness for use by AI coding agents using the agentready CLI, then walks through and addresses each gap. RHDH-aware: detects RHDH repositories and uses rhdh-repos.md context to pre-fill AGENTS.md and skip inapplicable findings. Use when asked to \"assess agent readiness\", \"run agentready\", \"check how agent-ready this repo is\", \"make this repo agent-ready\", \"improve agent readiness score\", \"assess all RHDH repos\", \"batch agent readiness\", or \"onboard this repo for agents\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3482,3485,3488],{"name":3483,"slug":3484,"type":16},"Agents","agents",{"name":3486,"slug":3487,"type":16},"Code Analysis","code-analysis",{"name":3489,"slug":3490,"type":16},"Engineering","engineering","2026-07-16T06:03:24.758348",{"slug":3493,"name":3493,"fn":3494,"description":3495,"org":3496,"tags":3497,"stars":26,"repoUrl":27,"updatedAt":3505},"backstage-upgrade","upgrade Backstage dependencies","Upgrade @backstage\u002F* dependencies in a plugin or app to a target version. Use when asked to \"upgrade backstage\", \"bump backstage\", \"update @backstage\", \"align backstage deps\", \"backstage version bump\", \"upgrade dependencies\", \"backstage-cli versions:bump\", \"update to latest backstage\", \"fix version mismatch\", \"backstage version alignment\", \"upgrade before migration\", or any request to update Backstage package versions in a project.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3498,3499,3502],{"name":3489,"slug":3490,"type":16},{"name":3500,"slug":3501,"type":16},"Maintenance","maintenance",{"name":3503,"slug":3504,"type":16},"Migration","migration","2026-07-16T06:03:24.067361",{"slug":3507,"name":3507,"fn":3508,"description":3509,"org":3510,"tags":3511,"stars":26,"repoUrl":27,"updatedAt":3524},"base-images-and-rpms","update base images and lockfiles","Updates base images with updateBaseImages.sh and regenerates rpms.lock.yaml with rpm-lockfile-prototype in redhat-developer\u002Frhdh, rhdh-must-gather, and rhdh-operator. Use --analyze for read-only Containerfile\u002FDockerfile scan (current vs latest tags, UBI skew). Use for weekly upstream maintenance, UBI\u002FRHEL base image bumps, RPM lockfile refresh, base-images-and-rpms, main, release-*, or analyzing base images before updating.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3512,3515,3518,3521],{"name":3513,"slug":3514,"type":16},"Automation","automation",{"name":3516,"slug":3517,"type":16},"Configuration","configuration",{"name":3519,"slug":3520,"type":16},"Containers","containers",{"name":3522,"slug":3523,"type":16},"Deployment","deployment","2026-07-16T06:03:27.784453",{"slug":3526,"name":3526,"fn":3527,"description":3528,"org":3529,"tags":3530,"stars":26,"repoUrl":27,"updatedAt":3540},"bug-fix","diagnose and fix plugin bugs","Reproduce, diagnose, fix, and PR plugin bugs from Jira tickets or GitHub issues. Works with both rhdh-plugins and community-plugins. Supports UI bugs (Playwright e2e with before\u002Fafter recordings) and backend bugs (unit\u002Fintegration test verification). Triages issues for agent-readiness before attempting a fix. Accepts a Jira key (RHDHBUGS-1934), Jira URL (redhat.atlassian.net\u002Fbrowse\u002F...), GitHub issue URL (github.com\u002F...\u002Fissues\u002FN), or a request to \"fix this bug\", \"reproduce and fix\", \"\u002Fbug-fix\". By default, stops after the fix for user verification before PR creation. Supports --no-verify mode to skip the verification gate and auto-create the PR. Chains into raise-pr for the full PR lifecycle.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3531,3534,3537],{"name":3532,"slug":3533,"type":16},"Debugging","debugging",{"name":3535,"slug":3536,"type":16},"QA","qa",{"name":3538,"slug":3539,"type":16},"Testing","testing","2026-07-29T06:00:33.054762",{"slug":3542,"name":3542,"fn":3543,"description":3544,"org":3545,"tags":3546,"stars":26,"repoUrl":27,"updatedAt":3557},"compute-plugin-package-overlay-cve-list","generate CVE management reports","Builds an RHDH CVE Management CSV from GA plugin workspace changes in rhdh-plugin-export-overlays since a version tag (patches, source.json, plugins-list). One row per CVE × plugins-list package (multi-workspace CVEs expand). Use for \"CVE CSV\", \"workspace CVEs since tag\", \"collect overlay CVEs\", \"CVE management CSV\", orchestrator\u002Flightspeed CVE review, or plugin package overlay CVE list.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3547,3550,3551,3554],{"name":3548,"slug":3549,"type":16},"Compliance","compliance",{"name":3489,"slug":3490,"type":16},{"name":3552,"slug":3553,"type":16},"Reporting","reporting",{"name":3555,"slug":3556,"type":16},"Security","security","2026-08-01T05:41:57.852801",{"slug":3559,"name":3559,"fn":3560,"description":3561,"org":3562,"tags":3563,"stars":26,"repoUrl":27,"updatedAt":3568},"create-plugin","scaffold and package RHDH dynamic plugins","Full lifecycle for RHDH dynamic plugins — scaffold, implement, export, package, and configure. Use when asked to \"create RHDH plugin\", \"bootstrap dynamic plugin\", \"create backend plugin\", \"create frontend plugin\", \"export dynamic plugin\", \"package plugin as OCI\", \"generate frontend wiring\", \"create plugin container image\", \"configure mount points\", \"create dynamic route\", \"add entity card\", \"scaffold RHDH plugin\", \"publish plugin to registry\", \"create tgz archive\", or mentions creating, exporting, packaging, or wiring a Backstage plugin for Red Hat Developer Hub. Also use when asked to \"build a plugin from scratch\", \"dynamic plugin tutorial\", \"RHDH plugin from scratch\", or \"build Backstage plugin for RHDH\". Covers backend plugins (APIs, scaffolder actions, processors), frontend plugins (pages, cards, themes), export\u002Fpackaging (OCI, tgz, npm), and frontend wiring configuration (mount points, routes, entity tabs, themes).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3564,3565],{"name":3522,"slug":3523,"type":16},{"name":3566,"slug":3567,"type":16},"Plugin Development","plugin-development","2026-07-16T06:02:28.983498",{"slug":3570,"name":3570,"fn":3571,"description":3572,"org":3573,"tags":3574,"stars":26,"repoUrl":27,"updatedAt":3585},"cursor-mcp-auth","authenticate Atlassian MCP for Jira","Ensures Cursor Atlassian MCP (plugin-atlassian-atlassian → mcp.atlassian.com) is authenticated for redhat.atlassian.net via OAuth. Use for \"authenticate Jira\", \"Atlassian MCP\", \"jira auth failed\", \"mcp_auth Atlassian\", \"cursor MCP auth\", or when another skill needs working Jira access through Cursor MCP.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3575,3578,3579,3582],{"name":3576,"slug":3577,"type":16},"Auth","auth",{"name":14,"slug":15,"type":16},{"name":3580,"slug":3581,"type":16},"MCP","mcp",{"name":3583,"slug":3584,"type":16},"OAuth","oauth","2026-07-29T06:00:33.525179",{"slug":3587,"name":3587,"fn":3588,"description":3589,"org":3590,"tags":3591,"stars":26,"repoUrl":27,"updatedAt":3597},"konflux-release-data-rpa","update release tags in konflux-release-data","Bumps RHDH ReleasePlanAdmission tag versions in konflux-release-data for a stream release (e.g. 1.9.7), opens a GitLab merge request, and launches it in the browser. Use when updating RPA tags, konflux-release-data, ReleasePlanAdmission, rhdh-1-9-*.yaml, rhdh-plugin-catalog-1-9-*.yaml, or preparing an RHDH patch release.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3592,3593,3594],{"name":3513,"slug":3514,"type":16},{"name":3522,"slug":3523,"type":16},{"name":3595,"slug":3596,"type":16},"GitLab","gitlab","2026-07-16T06:00:19.516231",{"slug":3599,"name":3599,"fn":3600,"description":3601,"org":3602,"tags":3603,"stars":26,"repoUrl":27,"updatedAt":3610},"konflux-tekton-updates","update Konflux Tekton task digests","Bumps Konflux Tekton task digests with .tekton\u002FupdateDigests.sh --minor --no-push, applies konflux-ci\u002Fbuild-definitions MIGRATION.md pipeline fixes, and regenerates PipelineRuns. Use for rhdh-plugin-catalog, RHDH midstream (4-rhdh), Konflux task minor bumps, prefetch-dependencies-oci-ta, build-image-index, or updateDigests.sh.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3604,3605,3608,3609],{"name":3513,"slug":3514,"type":16},{"name":3606,"slug":3607,"type":16},"CI\u002FCD","ci-cd",{"name":3522,"slug":3523,"type":16},{"name":3489,"slug":3490,"type":16},"2026-07-16T06:03:28.123118",{"slug":3612,"name":3612,"fn":3613,"description":3614,"org":3615,"tags":3616,"stars":26,"repoUrl":27,"updatedAt":3622},"lifecycle","check Red Hat product lifecycle status","Check version lifecycle and support status for platforms and integrations used by RHDH. Covers OCP, AKS, EKS, GKE, RHDH releases, RHBK, Quay, PostgreSQL, and any Red Hat product via the Product Life Cycles API. Use when asking about version support, EOL dates, GA dates, support phases, or planning version upgrades. Also use for \"is X still supported\", \"what versions should we test\", or \"when does X reach EOL\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3617,3618,3619],{"name":3548,"slug":3549,"type":16},{"name":3500,"slug":3501,"type":16},{"name":3620,"slug":3621,"type":16},"Operations","operations","2026-07-16T06:03:19.344038",{"slug":3624,"name":3624,"fn":3625,"description":3626,"org":3627,"tags":3628,"stars":26,"repoUrl":27,"updatedAt":3634},"nfs-migration","migrate plugins to New Frontend System","Migrate Backstage frontend plugins from the legacy system to the New Frontend System (NFS). Use when asked to \"migrate to NFS\", \"new frontend system\", \"convert plugin to NFS\", \"createFrontendPlugin\", \"PageBlueprint\", \"ApiBlueprint\", \"SubPageBlueprint\", \"alpha to GA\", \"legacy to NFS\", \"frontend migration\", \"extension blueprints\", \"migrate frontend plugin\", \"NFS support\", \"graduate alpha\", or mentions migrating a Backstage plugin to the new frontend system for RHDH.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3629,3630,3633],{"name":3489,"slug":3490,"type":16},{"name":3631,"slug":3632,"type":16},"Frontend","frontend",{"name":3503,"slug":3504,"type":16},"2026-07-16T06:03:27.078987",{"slug":3636,"name":3636,"fn":3637,"description":3638,"org":3639,"tags":3640,"stars":26,"repoUrl":27,"updatedAt":3647},"overlay","manage RHDH plugin export overlays","Manages the rhdh-plugin-export-overlays repository — onboards plugins to the Extensions Catalog, updates plugin versions, fixes overlay build failures, triages and analyzes PRs, triggers publishes, and manages plugin workspaces. Use when working with overlays, importing plugins, debugging CI, checking PRs, bumping versions, or mentions \"Extensions Catalog\", \"overlay build failed\", \"plugin registry\", \"overlay PR\", \"overlay doctor\", \"plugin import\", \"add plugin to catalog\", \"onboard plugin\", or \"plugin workspace\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3641,3642,3645,3646],{"name":3513,"slug":3514,"type":16},{"name":3643,"slug":3644,"type":16},"Code Review","code-review",{"name":3522,"slug":3523,"type":16},{"name":3489,"slug":3490,"type":16},"2026-07-16T06:03:20.380044",24,{"items":3650,"total":3648},[3651,3657,3663,3670,3676,3683,3688],{"slug":3477,"name":3477,"fn":3478,"description":3479,"org":3652,"tags":3653,"stars":26,"repoUrl":27,"updatedAt":3491},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3654,3655,3656],{"name":3483,"slug":3484,"type":16},{"name":3486,"slug":3487,"type":16},{"name":3489,"slug":3490,"type":16},{"slug":3493,"name":3493,"fn":3494,"description":3495,"org":3658,"tags":3659,"stars":26,"repoUrl":27,"updatedAt":3505},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3660,3661,3662],{"name":3489,"slug":3490,"type":16},{"name":3500,"slug":3501,"type":16},{"name":3503,"slug":3504,"type":16},{"slug":3507,"name":3507,"fn":3508,"description":3509,"org":3664,"tags":3665,"stars":26,"repoUrl":27,"updatedAt":3524},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3666,3667,3668,3669],{"name":3513,"slug":3514,"type":16},{"name":3516,"slug":3517,"type":16},{"name":3519,"slug":3520,"type":16},{"name":3522,"slug":3523,"type":16},{"slug":3526,"name":3526,"fn":3527,"description":3528,"org":3671,"tags":3672,"stars":26,"repoUrl":27,"updatedAt":3540},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3673,3674,3675],{"name":3532,"slug":3533,"type":16},{"name":3535,"slug":3536,"type":16},{"name":3538,"slug":3539,"type":16},{"slug":3542,"name":3542,"fn":3543,"description":3544,"org":3677,"tags":3678,"stars":26,"repoUrl":27,"updatedAt":3557},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3679,3680,3681,3682],{"name":3548,"slug":3549,"type":16},{"name":3489,"slug":3490,"type":16},{"name":3552,"slug":3553,"type":16},{"name":3555,"slug":3556,"type":16},{"slug":3559,"name":3559,"fn":3560,"description":3561,"org":3684,"tags":3685,"stars":26,"repoUrl":27,"updatedAt":3568},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3686,3687],{"name":3522,"slug":3523,"type":16},{"name":3566,"slug":3567,"type":16},{"slug":3570,"name":3570,"fn":3571,"description":3572,"org":3689,"tags":3690,"stars":26,"repoUrl":27,"updatedAt":3585},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3691,3692,3693,3694],{"name":3576,"slug":3577,"type":16},{"name":14,"slug":15,"type":16},{"name":3580,"slug":3581,"type":16},{"name":3583,"slug":3584,"type":16}]