From dx-core
Research an Azure DevOps/Jira ticket and find all relevant source files and assets. Use when a developer pastes an ADO URL or Jira issue key and wants to know what files are involved.
npx claudepluginhub easingthemes/dx-aem-flow --plugin dx-coreThis skill is limited to using the following tools:
Read `shared/provider-config.md` for provider detection and tool mapping.
Fetches JIRA issue by key or search, distills title/description/acceptance criteria/comments into structured task, analyzes codebase for gaps/risks, optionally enriches JIRA.
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
Read shared/provider-config.md for provider detection and tool mapping.
Read .ai/config.yaml:
tracker.provider (or scm.provider for backward compat) — ado (default) or jiraIf provider = ado:
scm.orgscm.projectIf provider = jira:
jira.urljira.project-keyYou receive an ADO ticket URL/ID or Jira issue key, extract all relevant info, and produce a structured developer reference showing every file and asset they need.
Accept any of these formats:
https://{org}.visualstudio.com/{project}/_workitems/edit/{id}https://dev.azure.com/{org}/{project}/_workitems/edit/{id}https://{host}/browse/{KEY-123}KEY-123 (matches /^[A-Z]+-\d+$/){id}Extract:
.ai/config.yaml scm.project (ADO) or jira.project-key (Jira)If the argument is purely numeric, check tracker.provider to determine if it's an ADO ID or a Jira issue number (prepend project key).
If no argument provided, ask the user for the ADO URL, Jira URL, or ticket ID.
Use ADO MCP to get the work item:
mcp__ado__wit_get_work_item
project: <extracted project>
id: <work item ID>
expand: "relations"
mcp__atlassian__jira_get_issue
issue_key: "<issue key>"
Map Jira fields (see shared/provider-config.md Field Mapping):
fields.summaryfields.status.namefields.assignee.displayNamefields.sprint.namefields.labels[]fields.parent.key and fields.parent.fields.summarymcp__atlassian__jira_search with JQL parent = <issue_key>fields.issuelinks[] (replaces ADO relations)Extract:
[FE], [BE], [Authoring]fields.parent (Jira), fetch title onlyFrom the ticket title, description, and acceptance criteria, identify:
.ai/project/project.yaml exists)Detect market scope using 4 signals:
platforms[].resource-type-prefix from project.yaml to detect platformParse AEM paths in acceptance criteria (e.g., /content/mybrand/ca/) to detect brand and market.
Resolve detected signals against project.yaml → brands[].markets[] to get canonical market codes.
Fallback: if market cannot be determined, proceed using aem.active-markets from config.yaml and note uncertainty.
Before any MCP search, check local project docs for each component:
.ai/project/component-index.md (or .ai/component-index.md) — confirms platform, availability.ai/project/component-index-project.md — enriched catalog with FE, source links, dialog fields.ai/project/features.md (or .ai/features.md) — feature context.ai/project/architecture.md (or .ai/reference.md) — architecture patternsUse a dx-doc-searcher agent for this step (if available), otherwise search inline with Grep/Glob.
For each component identified, search the codebase for all source files:
If .ai/project/project.yaml exists, dispatch 3 agents simultaneously via parallel Agent/Task tool calls:
primary_language_only: true. Return: pages with QA author URLsIf multiple components found, spawn search agents in parallel using Explore agents.
## Ticket: #<id> — <title>
**State:** <state> | **Assigned:** <name> | **Sprint:** <iteration>
**Tags:** <tags>
**Scope:** <FE/BE tags>
**Parent:** [#<parent-id>] <parent-title>
---
### Components Found
#### <component-name>
**Source Files**
| File | Path |
|------|------|
| Template | `path/to/template` |
| Style | `path/to/style` |
| Logic | `path/to/logic` |
| Model | `path/to/model` |
| Test | `path/to/test` |
<repeat for each component>
---
### Project Context
#### Market Scope
**Platform:** <Legacy|DXN|both>
**Markets:** <market codes>
**Brand:** <brand>
#### Source Files
| File | Repo | Purpose | Link |
|------|------|---------|------|
<from aem-file-resolver — per-platform, with ADO URLs>
#### AEM Pages
| Page | Market | Author URL |
|------|--------|-----------|
<from aem-page-finder — grouped by market>
#### Knowledge Base
<component-index excerpts>
<feature context excerpts if relevant>
---
### Design Assets
- Figma: [link](url) (or "None found in ticket")
### Acceptance Criteria (from ticket)
<bullet list of AC items, converted from HTML to markdown>
---
**Files:** <N> files across <M> repos | **Pages:** <P> AEM pages found
**Save results to a file?** (suggested: `.ai/specs/<id>-<slug>/ticket-research.md`)
If no project.yaml: Omit the Project Context section entirely. Present only the basic Components Found section.
If the user says yes:
.ai/specs/<id>-<slug>/ if it doesn't exist.ai/specs/<id>-<slug>/ticket-research.mdIf the user says no, do nothing.
After saving, check if pipeline spec artifacts already exist in that directory (explain.md, research.md, etc.):
If pipeline artifacts exist:
Note: This spec dir already has pipeline artifacts.
/dx-reqwill pick up your ticket-research.md and use the discovered file paths to accelerate its search.
If no pipeline artifacts:
Tip: Run
/dx-req <id>to generate the full spec pipeline. The research skill will use your ticket-research.md to skip redundant searches.
/dx-ticket-analyze 2416553 — Fetches the ADO work item, identifies the "starterkit" component from the title, searches the component index and codebase for all source files (JS, SCSS, HBS, dialog XML), finds 8 AEM pages using the component, and presents a structured reference with clickable author URLs.
/dx-ticket-analyze https://dev.azure.com/myorg/MyProject/_workitems/edit/2416553 — Extracts the ID from the full URL, detects the project from the URL path, and runs the same analysis. Offers to save results to .ai/specs/2416553-starterkit-pods/ticket-research.md.
/dx-ticket-analyze 2435084 (with project.yaml) — Detects market scope from the iteration path ("DE Team"), resolves files across 2 repos via aem-file-resolver, finds 12 pages via aem-page-finder scoped to the German market, and includes platform-specific source links.
"Component not found in component index"
Cause: The component mentioned in the ticket is not indexed, or the ticket uses a different name than the component folder.
Fix: Try alternative names (e.g., "product listing" vs "productlisting"). Run /aem-refresh to update the component index if it's stale.
No source files found for a component Cause: The component exists only in a sibling repo (e.g., backend in a separate AEM repo, frontend in the current repo). Fix: Check the "Cross-Repo Scope" section. If project.yaml is configured with multiple repos, the skill searches across all of them.
Market scope detection is wrong
Cause: The ticket's iteration path or tags don't clearly indicate the market, or the project.yaml brand/market mapping is incomplete.
Fix: The skill falls back to aem.active-markets from config.yaml and notes the uncertainty. Verify the market manually and pass it as context to downstream skills.
.ai/config.yaml.ai/project/project.yaml exists. Without it, Steps 3-5 AEM enrichment is skipped entirely.