Jira: Create Epics, Features, and Sprint Issues (mcp-atlassian)
This skill governs how the agent creates Jira issues. Default is self-hosted Jira Data Center via user-mcp-atlassian. Jira Cloud (Premium trial) is a second site via user-mcp-atlassian-cloud — pick the namespace from the instance the user named. DC WBS, 8-pillar components, and AC/DoR/DoD/BV custom-field IDs apply to DC only unless the user explicitly asks to enforce an equivalent contract on Cloud.
Two Jira instances — pick the right MCP
Never mix field IDs, parent-link mechanics, or governance rules across sites.
| Site | URL | MCP namespace | When to use |
|---|---|---|---|
| Jira Data Center (production LATC) | https://jira.xpaas.lenovo.com |
user-mcp-atlassian |
Real LATC work. WBS, 8-pillar components, Function area, Parent Link + GANTT, and AC/DoR/DoD/BV custom fields apply here only. |
| Jira Cloud (Premium trial / demo) | https://lenovo-latc.atlassian.net |
user-mcp-atlassian-cloud |
Trial, Timeline/roadmap demos, Align evaluation. Team-managed project SCRUM ("Lenovo AI Technology Center") as of 2026-08-24. |
Cloud-specific create rules (confirmed 2026-08-24 on SCRUM)
Use these instead of the DC field IDs and WBS/governance contract when creating issues on Cloud:
| Concern | Jira DC (LATC) |
Jira Cloud (SCRUM, team-managed) |
|---|---|---|
| MCP namespace | user-mcp-atlassian |
user-mcp-atlassian-cloud |
| Story parent | epic_link / customfield_10006 |
parent = epic key |
| Story points | customfield_10816 as a string ("3") |
customfield_10016 as a number (3) |
| Start date | Portfolio customfield_12914 |
customfield_10015 (YYYY-MM-DD) |
| Due date | duedate |
duedate |
| WBS prefixes | Mandatory | Do not apply unless the user asks |
AC/DoR/DoD/BV (11491 / 10515 / 16516 / 16544) |
Mandatory custom fields | Those IDs do not exist on Cloud — do not send them |
| Components / Function area | Mandatory 8-pillar list | Not present on team-managed SCRUM unless configured in project settings |
| Epic → Initiative | Parent Link 12913 + GANTT link |
Not present (Epic / Story / Task / Subtask only) |
| Batch create | jira_batch_create_issues |
Validate-only has worked; actual create has failed with HTTPError — use jira_create_issue per issue |
Cloud link types in use: Blocks, Relates. SCRUM transitions: To Do 11, In Progress 21, In Review 31, Blocked 41, Done 51.
Fields and screens cannot be configured via MCP
MCP can read field metadata (jira_search_fields, jira_get_create_fields, jira_get_project_fields, jira_get_field_options) and set values on issues (jira_create_issue / jira_update_issue). It cannot create custom fields, add fields to screens, edit screen schemes or field configurations, or change workflows (beyond transitioning an issue).
On team-managed Cloud, field layout is Project settings → Issue types → [type] → Fields. On company-managed Cloud or DC, screens are admin UI. If a field is missing from the issue type, configure it in Jira first, then backfill values with MCP.
Initiative → Epic/Feature → Sprint-Issue Hierarchy
This project uses a multi-level hierarchy:
- Initiative — top-level parent. Carries the WBS root number with a pillar prefix (e.g.
0.0 OPS: Operational Tasks & General Work,1.0 DCM: Knowledge Graph Platform). - Epic / Feature — children of the Initiative and peers at the same hierarchy level. They share the same
X.YWBS sequence. - Story / Task / Test / Defect — sprint-level delivery issues under an Epic or Feature. Inherit
X.Y.Z. - Sub-task — granular work items under Story/Task/Test/Defect.
Epic vs Feature decision rule
- Use Feature when the scoped deliverable should close within roughly one quarter (typically <= 2 months).
- Use Epic when work is broad, exploratory, or expected to run across multiple quarters.
- If unclear, default to Feature and note the assumption in the proposal for user confirmation.
Initiative Pillar Prefixes
Initiatives are numbered and prefixed by pillar:
| Prefix | Pillar | WBS Range | Example |
|---|---|---|---|
OPS- |
Operations (Non-Tech) | 0.x |
0.0 OPS: Operational Tasks and General Work |
DCM- |
Data, Context & Memory | 1.x |
1.0 DCM: Knowledge Graph Platform |
RO- |
Reasoning & Orchestration | 2.x |
2.0 RO: Multi-Agent Routing |
RT- |
Runtime | 3.x |
3.0 RT: On-Device Inference |
INFRA- |
Operations & Infrastructure | 24.x–29.x (live LATC); legacy 5.x / 8.x |
24.0 INFRA: [Platform Foundations] |
EVAL- |
Evaluation | 6.x |
6.0 EVAL: Model Eval Framework |
MF- |
Models | 7.x–8.x |
7.0 MF: Model Factory Platform |
HIVE- |
HiVE Platform | 9.x |
9.0 HIVE: Platform Integration |
BU- |
Cross-pillar BU delivery | 10.x+ |
10.0 BU: Qira Delivery |
Initiative Gating Rule
An Initiative requires 3+ Epics and a 3+ month timeline. Work that doesn't meet this threshold should be modelled as Epics under an existing Initiative, not as new Initiatives. Single-deliverable items (e.g. "Construct Cursor Rules", "Reaching out to stakeholder") must be demoted to Epic.
Three Orthogonal Dimensions
The core principle: pillars, teams, and products are three different things. Use three separate Jira mechanisms — never overload one to encode the others:
| Dimension | Jira mechanism | Purpose | Multi-select? |
|---|---|---|---|
| Pillar | Components (8 total) | What technical capability area does this work belong to? | Yes — cross-pillar work gets multiple components |
| Team/Product | Labels (prefixed) | Who is doing this work? For what product? | Yes — naturally multi-select |
| Program | Initiatives (gated) | What major program of work does this fall under? | No — single parent |
Components — Pillars Only (8 Total)
Components map directly to the governance model pillars. Every issue MUST have at least one component. Cross-pillar work gets multiple components.
| Component | Pillar Lead (Architect) | TPM | Scope |
|---|---|---|---|
| Data, Context & Memory | Lijun Gu | James Meng | RAG, data engineering, knowledge graphs, entity extraction, memory |
| Reasoning & Orchestration | Sathish Raju | Xin Ding | Agent orchestration, intent routing, model routing, tool use, MCP |
| Runtime | Pankaj Telang | Amit Rahalkar | Model runtime (inference), agent runtime, on-device execution |
| Operations & Infrastructure | Tom Sheffler | Mike Fink | GPU clusters, CI/CD, deployment, monitoring, Kubernetes, cloud infra |
| Evaluation | Pradyumna Singh | YanXia Chen | Model eval frameworks, benchmarking, safety testing, auto pipelines |
| Models | Suneel Marthi | Allie Manasco | Model training, fine-tuning, quantization, model factory |
| HiVE Platform | Rafael Radkowski | Amit Rahalkar | Cross-pillar platform integration, SDK, shared services |
| Operations (Non-Tech) | — | Mike Fink | Hiring, governance, tooling, compliance, process improvements |
Choosing the right component(s)
- If the work belongs to one pillar, set that single component.
- If the work is cross-pillar (e.g. a model routing epic touching Reasoning & Orchestration + Runtime), set both components.
- If the work is HiVE platform integration contributed by a specific pillar, set both the pillar component and
HiVE Platform. - If unsure, ask the user. Use
jira_get_project_componentsto verify component names.
Labels — Teams and Products
Labels encode who is doing the work and what product it serves. Every issue MUST have at least one team:* label. Product/BU labels are required for issues serving specific BU projects.
Team labels (team:*)
| Label | Team |
|---|---|
team:infra-prc |
Wang's infrastructure team (PRC) |
team:infra-row |
Thompson's ops team (ROW) |
team:ro-prc-p |
Qiu's R&O team (PRC Personal) |
team:ro-prc-e |
Cai's R&O team (PRC Enterprise) |
team:ro-intent |
Miao's intent routing team |
team:ro-tools |
Luo's tooling team |
team:eval |
Tuli's evaluation team |
team:models-prc |
Zhang/Wang's model factory team (PRC) |
team:models-na |
Marthi's models team (NA) |
team:runtime-model |
Webb's model runtime team |
team:runtime-agent |
Zhu's agent runtime team |
team:dcm |
Thompson/Li's data & context team |
team:hive-core |
HiVE platform core team |
Team inference rule notes:
- If work is for Tianxi, default to
team:ro-prc-punless the user explicitly specifies another Tianxi team. - For Reasoning & Orchestration component work, pick an
team:ro-*label (do not map to non-RO teams).
Product / BU labels (product:*, bu:*)
| Label | Product/Program |
|---|---|
product:qira |
IDG AIES - Qira |
product:tianxi |
PRC Personal AI - Tianxi |
product:hive |
HiVE Platform |
product:infrastructure |
Shared / platform infrastructure (landing zone, GPU ops, infra tooling) |
product:atp |
ATP + External Partnerships |
bu:idg-gic |
IDG GIC (CSW) |
bu:idg-cpc |
IDG CPC&SMB (Commercial) |
bu:idg-ret |
IDG RET (Consumer Retail) |
bu:idg-phone |
IDG Phone & TAB |
bu:prc-enterprise |
PRC Enterprise AI |
bu:ssg-aics |
SSG AICS |
bu:dtit |
DTIT |
bu:ssg-row |
SSG ROW |
bu:isg-row |
ISG ROW |
bu:isg-prc |
ISG PRC |
Special labels
| Label | Purpose |
|---|---|
cross-pillar |
Issue involves temporary cross-pillar support |
Cross-Pillar Work Rules
Structural long-term exceptions (Qira, Tianxi, Enterprise AI)
BU projects that span multiple pillars by design:
- Get a
BU-prefixed Initiative. - Get
product:*/bu:*labels on every issue. - Get multiple pillar components on each issue.
Temporary exceptions (time-bound cross-pillar support)
- Issues go in the lending pillar's Initiative.
- Add label
cross-pillar+ the supporting pillar's component. - Include an explicit end date in the epic description.
HiVE platform contributions (all pillars contribute)
- Component: the pillar that owns the capability +
HiVE Platform. - Label:
product:hive. - Initiative: under the pillar's Initiative (not
HIVE-9.0) unless it is HiVE core team work.
Mandatory fields (always)
Every issue created by this skill MUST include ALL of the following fields, regardless of whether Jira marks them as required. Never skip these. If the user hasn't provided content for one of them, generate sensible defaults or ask the user — do NOT create issues with blank mandatory fields.
Correction (2026-07-16/17): Business Value/AC/DoR/DoD used to be required in both the custom field and the description body for every issue type. That was wrong — for Story/Task/Test/Defect/Sub-task, these four now live only in their dedicated custom fields; do not add matching headings to the description (it's redundant duplication, not a compliance requirement). This was applied retroactively to 112 pre-existing sprint-level Infra issues on 2026-07-17.
Correction (2026-07-22): Epics/Initiatives now follow the same custom-field-only rule — do not embed
## Business Value,## Acceptance Criteria,## Definition of Ready, or## Definition of Doneheadings in Epic/Initiative descriptions either. This reverses the earlier belief that these fields were "untested/unconfirmed on the Epic screen" — all 4 custom fields (customfield_11491,customfield_10515,customfield_16516,customfield_16544) were confirmed settable viajira_update_issueacross 36 real Infra Epics/Initiatives (e.g.LATC-5803,LATC-5101), including successfully backfilling a previously-empty Business Value field on a live Epic. Description bodies for Epic/Initiative keep their narrative sections (Problem/Opportunity, Outcomes, Scope, Out of scope, Stakeholders) but never the four governance-field headings. This was applied retroactively to 36 pre-existing Infra Epics/Initiatives on 2026-07-22.Screen-availability caveat discovered during the 2026-07-17 retroactive fix (still applies): this Jira DC's screen configuration does not expose all 4 fields on every sprint-level issue type — confirmed by dozens of real rejections, not just the earlier single-Story test:
- Sub-task screen: none of the 4 fields (
customfield_10515AC,customfield_16516DoR,customfield_16544DoD,customfield_11491BV) are settable — every attempt on real Sub-tasks (e.g.LATC-2718–LATC-2725,LATC-2333,LATC-5794) was rejected withField '<id>' cannot be set. It is not on the appropriate screen, or unknown.- Task screen: AC/DoR/DoD are settable (confirmed on many real Tasks), but Business Value is not — rejected on every Task tested (
LATC-5550,LATC-5483,LATC-3555,LATC-3554,LATC-3553,LATC-3552,LATC-2926,LATC-2095), including viajira_update_issue(edit), not just create.- Story, Epic, Initiative screens: all 4 fields confirmed settable (create and/or edit).
Fallback rule when a field is genuinely unavailable on that issue type's screen: don't silently drop the content and don't force it into a field that will be rejected. Keep it in the description under its original
##heading instead (currently only needed for## Business Valueon a Task, or all of AC/DoR/DoD/BV on a Sub-task) — this is the one exception to "custom-field-only," justified by an actual platform constraint rather than a style choice. Note the limitation to the user and suggest a Jira admin add the missing field(s) to that issue type's screen scheme if this recurs often.Active enforcement scope (by explicit direction): Epic, Initiative, Story, and Task are actively enforced end-to-end. Sub-task is out of scope for now — don't flag existing Sub-tasks as compliance gaps or spend effort remediating them until told otherwise. If you're creating a new Sub-task anyway, still apply the description-heading fallback (it's free and correct), just don't treat Sub-task cleanup as required work.
For sprint-level issues (Story/Task/Test/Defect/Sub-task)
| Field | Type | Tool parameter / Custom field | Notes |
|---|---|---|---|
| Summary | string | summary (system) |
Must start with WBS number |
| Description | markdown | description (system) |
Dedicated-field-only policy, with one platform-forced exception: no ## Context / ## Goal / ## Approach — lead with a condensed 1–3 sentence summary (no heading), then keep any remaining sections with no dedicated field (## Out of scope, ## Links, ## Outcomes (value unlocked)). No ## Business Value, ## Acceptance Criteria, ## Definition of Ready, ## Definition of Done headings except on Task (Business Value has no screen field there) or Sub-task (none of the 4 fields have a screen field there) — see Screen availability. This same rule now also applies to Epic/Initiative (see below) |
| Parent (Epic/Feature) | issue key | customfield_10006 via additional_fields.epic_link |
Links sprint issue to its Epic/Feature |
| Estimate (Story Points) | number | customfield_10816 via additional_fields |
e.g. "3", "5", "8" |
| Component/s | comma-separated string | components (dedicated tool param) |
One or more from 8-pillar list |
| Labels | array | labels in additional_fields |
At least one team:* label required |
| Function area | string (pillar name) | customfield_16400 via additional_fields |
Auto-derived from Components (see Function area mapping) |
| Business Value | markdown | customfield_11491 via additional_fields on Story only |
Story: rejected at create, confirmed accepted at edit (tested 2026-07-16 on LATC-5804) — attempt at create, else jira_update_issue right after. Task/Sub-task: no field on that screen at all (confirmed on 6+ real Tasks and Sub-tasks, 2026-07-17) — keep ## Business Value in the description instead |
| Acceptance Criteria | markdown | customfield_10515 via additional_fields on Story/Task |
Confirmed accepted at create on Story/Task screens. Sub-task: no field on that screen — keep ## Acceptance Criteria in the description instead |
| Definition of Ready | markdown | customfield_16516 via additional_fields on Story/Task |
Confirmed accepted at create on Story/Task screens. Sub-task: no field on that screen — keep ## Definition of Ready in the description instead |
| Definition of Done | markdown | customfield_16544 via additional_fields on Story/Task |
Confirmed accepted at create on Story/Task screens. Sub-task: no field on that screen — keep ## Definition of Done in the description instead |
For Epics
Epics do NOT get an Epic Link field (they are the epic). Instead, Epics require:
| Field | Type | Custom field | Notes |
|---|---|---|---|
| Epic Name | string | customfield_10005 |
Required by Jira for Epics — same as summary |
| Summary | string | summary (system) |
Must start with WBS number |
| Description | markdown | description (system) |
Narrative only (Problem/Opportunity, Outcomes, Scope, Out of scope, Stakeholders) — no ## Business Value / ## Acceptance Criteria / ## Definition of Ready / ## Definition of Done headings |
| Component/s | comma-separated string | components |
One or more from 8-pillar list |
| Labels | array | labels in additional_fields |
At least one team:* label required |
| Function area | string | customfield_16400 via additional_fields |
Auto-derived from Components |
| Business Value | markdown | customfield_11491 via additional_fields, custom field only |
Confirmed settable on Epic screen (2026-07-22, 36 real Epics). Attempt at create; if rejected, immediately follow up with jira_update_issue |
| Acceptance Criteria | markdown | customfield_10515 via additional_fields, custom field only |
Confirmed settable on Epic screen (2026-07-22) |
| Definition of Ready | markdown | customfield_16516 via additional_fields, custom field only |
Confirmed settable on Epic screen (2026-07-22) |
| Definition of Done | markdown | customfield_16544 via additional_fields, custom field only |
Confirmed settable on Epic screen (2026-07-22) |
Note: Estimate is optional on Epics (story points usually live on child Stories).
For Features
Features are peers of Epics under an Initiative and follow the same approval/workflow expectations, including custom-field-only placement for the four governance fields.
| Field | Type | Custom field | Notes |
|---|---|---|---|
| Summary | string | summary (system) |
Must start with WBS number X.Y |
| Description | markdown | description (system) |
Narrative only — no governance-field headings |
| Parent Link | issue key | customfield_12913 via additional_fields |
Required to link Feature to Initiative |
| Component/s | comma-separated string | components |
One or more from 8-pillar list |
| Labels | array | labels in additional_fields |
At least one team:* label required |
| Function area | string | customfield_16400 via additional_fields |
Auto-derived from Components |
| Business Value | markdown | customfield_11491 via additional_fields, custom field only |
Attempt at create; fall back to jira_update_issue if rejected |
| Acceptance Criteria | markdown | customfield_10515 via additional_fields, custom field only |
|
| Definition of Ready | markdown | customfield_16516 via additional_fields, custom field only |
|
| Definition of Done | markdown | customfield_16544 via additional_fields, custom field only |
Field Guidelines
Summary: Every summary MUST begin with a WBS (Work Breakdown Structure) number that reflects the issue's position in the hierarchy. The WBS number is followed by a space and the title text. Stories should use the format "[WBS] [verb] [object] [context]".
Description: For Epics/Initiatives, a markdown body explaining what the issue is about, why it matters, and relevant context — sections like ## Problem / Opportunity, ## Outcomes, ## Scope, ## Out of scope, ## Stakeholders. For Story/Task/Test/Defect/Sub-task, keep it short: a condensed 1–3 sentence summary (no heading) instead of separate Context/Goal/Approach sections, plus any remaining sections that genuinely have no dedicated field (## Out of scope, ## Links, ## Outcomes (value unlocked)). Business Value/AC/DoR/DoD go in their custom fields only — never in the description — for every issue type, including Epic/Initiative (updated 2026-07-22; the sole exceptions remain Business Value on Task and all four on Sub-task, where the field has no screen slot).
Epic Link (epicKey or customfield_10006): Only on stories/tasks — set to the epic key. Not used on the epic itself.
Estimate (customfield_10816): Story points. Always pass this as a string (e.g. "0.5", "1", "3", "5", "8", "13") — this Jira DC rejects a numeric value at create/update time with Operation value must be a string. If the user doesn't provide estimates, ask or make reasonable suggestions based on apparent complexity.
Component/s: The Jira component(s) this issue belongs to — must be from the 8-pillar list. Use jira_get_project_components to verify valid component names if needed.
Labels: Must include at least one team:* label. Add product:* / bu:* labels for BU-specific work. See Labels — Teams and Products.
Function area (customfield_16400): Auto-derived from Components — see Function area mapping. Always include this field.
Business Value (customfield_11491 in additional_fields): 1–3 sentences on why this work matters — what risk it reduces, what outcome/metric it improves, or who benefits. Generate sensible, issue-specific content if the user hasn't supplied it; never leave it blank. Custom field only, for every issue type — including Epic/Initiative (confirmed settable 2026-07-22) — do not add it to the description. customfield_11491 has been confirmed rejected on the Story/Task create screen but accepted on the edit screen; on Epic/Initiative it has been observed accepted via jira_update_issue. Attempt it at create time via additional_fields, and if Jira rejects it, immediately follow up with a jira_update_issue call setting just that field rather than dropping it or writing it into the description. Exception: Task has no Business Value field on its screen at all — keep ## Business Value in the description there only. Example:
Reduces manual reconciliation effort by ~2 hours/week for the TPM team and removes a recurring source of stale dashboard data reported by stakeholders.
Acceptance Criteria (customfield_10515 in additional_fields): A bullet list of testable conditions that must be true for the issue to be considered accepted. Write these in "Given/When/Then" or simple checkbox format. Custom field only, for every issue type — including Epic/Initiative — never embed ## Acceptance Criteria in the description (exception: Sub-task, which has no field for it). Example:
- [ ] User can authenticate via OAuth2
- [ ] Existing sessions are migrated without data loss
- [ ] Error responses follow the standard API format
Definition of Ready (customfield_16516): Conditions that must be met before work can begin. Custom field only, for every issue type — including Epic/Initiative — never embed ## Definition of Ready in the description (exception: Sub-task). Generate sensible defaults if not provided:
- [ ] Requirements are clearly defined
- [ ] Acceptance criteria are documented
- [ ] Dependencies are identified
- [ ] Design/technical approach is agreed upon
Definition of Done (customfield_16544): Conditions that must be met for the work to be considered complete. Custom field only, for every issue type — including Epic/Initiative — never embed ## Definition of Done in the description (exception: Sub-task). Generate sensible defaults if not provided:
- [ ] Code is written and peer-reviewed
- [ ] Unit tests are passing
- [ ] Documentation is updated
- [ ] QA testing is complete
- [ ] Deployed to staging and verified
Screen availability — where fields are accepted by Jira
Not all mandatory fields are on all screen schemes. Based on testing:
| Field | Epic/Initiative screen | Story screen | Task screen | Sub-task screen | Fallback |
|---|---|---|---|---|---|
| Summary | ✅ | ✅ | ✅ | ✅ | — |
| Description | ✅ | ✅ | ✅ | ✅ | — |
| Estimate | ✅ | ✅ | ✅ | ✅ | — |
| Component/s | ✅ | ✅ | ✅ | ✅ | — |
| Labels | ✅ | ✅ | ✅ | ✅ | — |
| Epic Name | ✅ (Epic only) | N/A | N/A | N/A | — |
| Epic Link | N/A | ✅ | ✅ | N/A | — |
| Business Value | ✅ (confirmed via jira_update_issue on 36 real Epics/Initiatives, 2026-07-22) |
✅ (rejected at create, confirmed accepted at edit) | ❌ (rejected at create and edit — confirmed on 6+ real Tasks) | ❌ (rejected — confirmed on 6+ real Sub-tasks) | Epic/Initiative/Story: attempt at create; if rejected, set via jira_update_issue right after. Task/Sub-task: field doesn't exist on that screen — keep ## Business Value in the description instead |
| Acceptance Criteria | ✅ (confirmed 2026-07-22) | ✅ (tested) | ✅ (tested — confirmed on many real Tasks) | ❌ (rejected — confirmed on 6+ real Sub-tasks) | Epic/Initiative/Story/Task: set customfield_10515 only. Sub-task: field doesn't exist — keep ## Acceptance Criteria in the description |
| Definition of Ready | ✅ (confirmed 2026-07-22) | ✅ (tested) | ✅ (tested — confirmed on many real Tasks) | ❌ (rejected — confirmed on 6+ real Sub-tasks) | Epic/Initiative/Story/Task: set customfield_16516 only. Sub-task: field doesn't exist — keep ## Definition of Ready in the description |
| Definition of Done | ✅ (confirmed 2026-07-22) | ✅ (tested) | ✅ (tested — confirmed on many real Tasks) | ❌ (rejected — confirmed on 6+ real Sub-tasks) | Epic/Initiative/Story/Task: set customfield_16544 only. Sub-task: field doesn't exist — keep ## Definition of Done in the description |
Rule (corrected 2026-07-16/17, extended to Epic/Initiative 2026-07-22): For Epic, Initiative, and Story, all 4 fields (AC/DoR/DoD/BV) live only in their native custom fields — never embed matching ## headings in the description. For Task, AC/DoR/DoD are custom-field-only, but Business Value has no field on the Task screen at all — keep ## Business Value in the description for Tasks (the one sanctioned exception, forced by a platform limitation rather than a style choice). For Sub-task, none of the 4 fields exist on that screen — keep all of AC/DoR/DoD/BV as ## headings in the description. Flag to the user that a Jira admin could add these fields to the Task/Sub-task screen schemes if this recurs often.
Scope note (by explicit direction): Epic, Initiative, Story, and Task are the actively-enforced issue types — treat gaps on those as real compliance issues worth fixing. Sub-task is deprioritized for now: the description-heading fallback above is still correct behavior if you're touching one anyway, but don't proactively audit or remediate existing Sub-tasks until told otherwise.
How Epics link to Initiatives
Epics are linked to their parent Initiative via two mechanisms — both must be set:
- Parent Link custom field (
customfield_12913) — set on the Epic at create time so portfolio scans work. - GANTT hierarchy link — after creating the Epic, call
jira_create_issue_link:
type_name: "multi-level hierarchy [GANTT]"
inward_issue_key: "<EPIC-KEY>" # the child
outward_issue_key: "<INITIATIVE-KEY>" # the parent
This makes the Initiative "is parent task of" the Epic.
WBS numbering
Every issue carries a Work Breakdown Structure prefix at the front of both the Summary and (for Epics) the Epic Name:
| Level | Issue type | Prefix shape | Example |
|---|---|---|---|
| 1 | Initiative | X.0 |
0.0 OPS: Operational Tasks & General Work |
| 2 | Epic / Feature | X.Y |
0.4 Data and Infra Ops Tasks |
| 3 | Story / Task / Test / Defect | X.Y.Z |
0.4.7 Provision dashboard refresh job on shared VM |
| 4 | Subtask | X.Y.Z.N |
0.4.7.1 Add pre-drain health check script |
Format rules
- Single space between the WBS number and the title text.
- Zero-padding is not used (
0.10, never0.010). - Initiatives are not created by this skill; their prefix is read, not assigned. If an Initiative has no prefix, stop and ask the user to add one.
- The same WBS string goes into both
summaryand (for Epics)customfield_10005(Epic Name).
WBS Number Derivation (CRITICAL — Always Required)
NEVER invent or guess WBS numbers. Before assigning a WBS number to any new issue, you MUST:
Fetch the parent using
jira_get_issueto get its summary and extract the WBS prefix.- For an Epic under an Initiative: extract the root number (e.g.,
0from"0.0 OPS: Operational Tasks") - For a Story under an Epic: extract the Epic's full prefix (e.g.,
0.4from"0.4 Data and Infra Ops Tasks")
- For an Epic under an Initiative: extract the root number (e.g.,
Scan existing children to find all existing WBS numbers at that level:
- For Epics: run
project = <PROJ> AND "Parent Link" = <INIT> AND issuetype = Epic - For Stories/Tasks: run
project = <PROJ> AND "Epic Link" = <EPIC> AND issuetype in (Story, Task)
- For Epics: run
Parse WBS prefixes from each child's summary and collect the numbers at the relevant level.
Determine the next available number — find the highest existing number and increment by 1.
- For example, if children are
0.1,0.2,0.4, the next available is0.5 - DO NOT fill gaps (like
0.3in this example) — gaps may be intentional
- For example, if children are
For batch creates, allocate consecutive numbers starting at the next free slot:
0.5,0.6,0.7, etc.Report to the user before creating: "Initiative
<INIT>isX.0. Existing Epics:<list>. Next Epic will beX.<nextY>. Confirm?"Flag non-conforming siblings (e.g., issues without WBS prefixes) for the user to review later.
Computing the next number
Creating an Epic or Feature under Initiative <INIT>:
- Run
jira_get_issueon<INIT>and extract the leadingX.0fromsummary. Call thisX. - List children at level
X.Y(both Epics and Features):project = <PROJ> AND "Parent Link" = <INIT> AND issuetype in (Epic, Feature) - Parse the leading
X.Yprefix from each child summary. Collect theYvalues (Epic+Feature share one sequence). - Next
Y= max(Y) + 1, floor of1if set is empty. - Show the user: "Initiative
<INIT>isX.0. Existing Epics:<list>. Next Epic will beX.<nextY>. Confirm?" - Flag any siblings that don't match the
X.Ypattern (e.g.LATC-1980) for the user to decide whether to renumber later.
Creating a Story/Task under Epic <EPIC>:
- Run
jira_get_issueon<EPIC>and extract the leadingX.Yfromsummary. - List children:
project = <PROJ> AND "Epic Link" = <EPIC> AND issuetype in (Story, Task) - Parse the leading
X.Y.Zprefix from each child summary. Collect theZvalues. - Next
Z= max(Z) + 1, floor of1if set is empty. - Show the user the list and chosen number before creating.
- If the Epic has un-numbered legacy children, do not back-fill them. Start
X.Y.1for the new one and warn the user.
Batch creates:
Allocate consecutive numbers starting at the next free slot. Example: if the highest existing Epic under LATC-7 is 0.4, a batch of 3 new Epics gets 0.5, 0.6, 0.7. Show the full numbered list before creating.
Worked example: LATC-7 (0.0 Operational Tasks & General Work)
| Key | Summary | Conforms? |
|---|---|---|
LATC-8 |
0.1 TPM Tasks |
yes |
LATC-63 |
0.2 Research and Development |
yes |
LATC-1235 |
0.3 Operational Dashboards & Data Pipelines |
yes |
LATC-1304 |
0.4 Data and Infra Ops Tasks |
yes |
LATC-1980 |
Define the Settings GitLab repositories within LATC should have. |
no |
Highest conforming Y = 4. Next Epic under LATC-7 would be 0.5 <title>. Surface LATC-1980 to the user as a follow-up to renumber.
Function area mapping
customfield_16400 ("Function area") must be included in every new issue where the Jira screen supports it. Always derive it automatically from the Components field — do not ask the user.
| Pillar value | Maps from component |
|---|---|
Data, Context, & Memory |
Data, Context & Memory |
Reasoning & Orchestration |
Reasoning & Orchestration |
Runtime |
Runtime |
Infrastructure |
Operations & Infrastructure — when the work is infrastructure/platform engineering |
Operations |
Operations (Non-Tech), or Operations & Infrastructure work that is genuinely operational rather than technical |
Model Evaluation |
Evaluation |
Model Factory |
Models |
HiVE Platform |
HiVE Platform |
Infrastructure vs Operations (corrected 2026-08-07 — supersedes the 2026-07-24 "always use Operations" note, which was wrong): the Operations & Infrastructure component maps to two distinct Function area values, and you must choose based on the nature of the work rather than defaulting:
Infrastructure— the default for this component, and the dominant value in LATC (581 issues vs 309 forOperations). Use it whenever the work builds, changes, or hardens technical infrastructure: cloud accounts and landing zones, GPU clusters and compute enablement, Kubernetes, networking, IaC/Terraform, CI/CD pipelines and runners, registries, deployment and GitOps, storage/buckets, security tooling and scanning, observability plumbing.Operations— reserve for work that is legitimately operational rather than technical: process definition, governance, intake and triage, licensing/procurement and vendor administration, access-review and audit cadences, reporting/dashboard upkeep, runbook and on-call process (as opposed to the tooling that implements it), hiring, and anything on theOperations (Non-Tech)component.
If a ticket sits on the boundary, ask which side it belongs to rather than guessing — and never relabel an existing Infrastructure ticket to Operations as a normalization pass.
Resolution rules when an issue has multiple components:
- If all components point to the same pillar → use that pillar.
- If components span multiple pillars → use the pillar of the most specific / primary component and note the assumption in the draft. Ask the user if genuinely ambiguous.
- If both
Operations & InfrastructureandOperations (Non-Tech)are set → decide by the nature of the work per theInfrastructurevsOperationsrule above;Operations (Non-Tech)being present is a strong signal forOperations, but technical platform work still takesInfrastructure. - If
HiVE Platformis combined with a domain pillar → use the domain pillar's function area (the HiVE component is captured via labels and components; Function area reflects the primary domain).
Always show the resolved pillar in the pre-create draft so the user can override before confirmation.
If the field is rejected at create time ("Field 'customfield_16400' cannot be set. It is not on the appropriate screen"): omit it, note the omission in the creation report, and advise the user that a Jira admin needs to add the field to that issue type's screen.
The value is a free-text string — use the exact pillar names from the table above, including punctuation (Data, Context, & Memory).
Operating contract
- Never silently omit a mandatory field. If a value is missing, draft a placeholder from conversation context and present the full draft to the user for confirmation before calling
jira_create_issue. Mark uncertain content asTBD: <what's needed>. - Always show the proposed payload before creating. Single create AND batch create. Show every mandatory field filled, then explicitly ask "Create this now?" Wait for an affirmative reply. No exceptions.
- On DC, always inherit a WBS prefix from the parent. Every Epic and Story summary MUST start with the WBS number computed from its parent's prefix and the next free sibling slot. If the parent has no WBS prefix, stop and tell the user — do not invent one. Skip WBS on Cloud unless the user asks.
- Never assume the project key. Ask if not stated. The MCP tool's regex enforces
^[A-Z][A-Z0-9_]+$. - Never assume Epic Link. If the user says "create stories under Epic X" without a key, search first and ask which one.
- Use the matching MCP namespace, not raw REST. DC →
user-mcp-atlassian. Cloud →user-mcp-atlassian-cloud. Do not send DC custom-field IDs to Cloud or Cloud IDs to DC. - Never use components outside the 8-pillar list. Old sub-component names (e.g. "RAG", "Agentic Framework", "AI Agent Runtime") are retired. If the user uses old names, map them to the correct pillar component and confirm with the user.
- **HARD STOP (DC only) — DoR, DoD, AC, and Business Value are always required, never
…(truncated)