Card Skill: use Jira heading format for description sections
Require Background, Scope of change, and Questions as ADF level-1 headings instead of plain text labels when creating cards via MCP. Co-authored-by: ScottGits <ScottGits@users.noreply.github.com>
This commit is contained in:
parent
4d03b507f3
commit
4818abc8ab
1 changed files with 46 additions and 16 deletions
|
|
@ -103,23 +103,47 @@ Draft a clear, professional Jira summary from the user's purpose.
|
||||||
|
|
||||||
## Description Format
|
## Description Format
|
||||||
|
|
||||||
**CRITICAL:** Description uses exactly these two labeled sections with trailing colons:
|
**CRITICAL:** Section labels MUST be Jira **heading** elements (not plain text). Use ADF `heading` nodes at level 1 when creating or editing via MCP.
|
||||||
|
|
||||||
|
**Required sections:**
|
||||||
|
- `Background:` — heading
|
||||||
|
- `Scope of change:` — heading (lowercase "change")
|
||||||
|
|
||||||
|
**Optional section** (include when user requests open questions or outstanding items):
|
||||||
|
- `Questions:` — heading at the bottom of the description
|
||||||
|
|
||||||
|
**ADF pattern for each section header:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "heading",
|
||||||
|
"attrs": { "level": 1 },
|
||||||
|
"content": [{ "type": "text", "text": "Background:" }]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Markdown fallback** (if ADF is not used): prefix with `#` so Jira renders a header:
|
||||||
```markdown
|
```markdown
|
||||||
Background:
|
# Background:
|
||||||
|
|
||||||
[Content from the user's purpose — context and why this work exists]
|
[Content from the user's purpose — context and why this work exists]
|
||||||
|
|
||||||
Scope of change:
|
# Scope of change:
|
||||||
|
|
||||||
[Content from the user's purpose — what will change or be delivered]
|
[Content from the user's purpose — what will change or be delivered]
|
||||||
|
|
||||||
|
# Questions:
|
||||||
|
|
||||||
|
[Outstanding questions, when applicable]
|
||||||
```
|
```
|
||||||
|
|
||||||
**Rules:**
|
**Rules:**
|
||||||
- Use `Background:` and `Scope of change:` (lowercase "change")
|
- NEVER use plain-text labels like `Background:` on their own line without heading formatting
|
||||||
- Each label on its own line; content on following line(s)
|
- Put section content in paragraphs and bullet lists immediately after each heading
|
||||||
- Blank line between sections
|
- Blank line between sections when using markdown fallback
|
||||||
- Do NOT use `Description:` in Card Skill cards
|
- Do NOT use `Description:` in Card Skill cards
|
||||||
- Do NOT put acceptance criteria in the description — use the AC field (below)
|
- Do NOT put acceptance criteria in the description — use the AC field (below)
|
||||||
- Use the user's purpose to populate both sections: expand into Background (context/why) and Scope of change (deliverables/what changes). If the purpose is a single short sentence, place it under Scope of change and write a brief Background derived from it
|
- Use the user's purpose to populate both sections: expand into Background (context/why) and Scope of change (deliverables/what changes). If the purpose is a single short sentence, place it under Scope of change and write a brief Background derived from it
|
||||||
|
- When calling `createJiraIssue` or `editJiraIssue`, pass `contentFormat: "adf"` for the description field to preserve headings
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -140,6 +164,7 @@ AC3: [Testable outcome]
|
||||||
- Generate 2–5 ACs from the purpose when the user does not provide them
|
- Generate 2–5 ACs from the purpose when the user does not provide them
|
||||||
- If the user provides explicit ACs, use their wording with AC1/AC2 labels
|
- If the user provides explicit ACs, use their wording with AC1/AC2 labels
|
||||||
- One AC per line; blank line between ACs is optional
|
- One AC per line; blank line between ACs is optional
|
||||||
|
- Pass `customfield_10025` as ADF (one paragraph per AC) via `editJiraIssue` with `contentFormat: "adf"` if plain text is rejected
|
||||||
|
|
||||||
**Example:**
|
**Example:**
|
||||||
```text
|
```text
|
||||||
|
|
@ -172,17 +197,19 @@ createJiraIssue(
|
||||||
projectKey="CASH",
|
projectKey="CASH",
|
||||||
issueTypeName="Story",
|
issueTypeName="Story",
|
||||||
summary="[drafted summary]",
|
summary="[drafted summary]",
|
||||||
description="Background:\n[background]\n\nScope of change:\n[scope]",
|
description={ ADF doc with heading nodes for Background: and Scope of change: },
|
||||||
|
contentFormat="adf",
|
||||||
parent="CASH-1559",
|
parent="CASH-1559",
|
||||||
additional_fields={
|
additional_fields={
|
||||||
"customfield_10008": "CASH-1559",
|
"customfield_10008": "CASH-1559",
|
||||||
"customfield_14823": { "accountId": "557058:6c212fb7-af94-48db-91a9-99ba87ceb3c5" },
|
"customfield_14823": { "accountId": "557058:6c212fb7-af94-48db-91a9-99ba87ceb3c5" },
|
||||||
"customfield_13100": { "accountId": "712020:1bf3c7f2-bc3b-4bab-bc48-d01e99358978" },
|
"customfield_13100": { "accountId": "712020:1bf3c7f2-bc3b-4bab-bc48-d01e99358978" }
|
||||||
"customfield_10025": "AC1: ...\n\nAC2: ..."
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Then set acceptance criteria via `editJiraIssue` with ADF paragraphs for AC1, AC2, …
|
||||||
|
|
||||||
### CONT example
|
### CONT example
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
@ -191,13 +218,13 @@ createJiraIssue(
|
||||||
projectKey="CONT",
|
projectKey="CONT",
|
||||||
issueTypeName="Story",
|
issueTypeName="Story",
|
||||||
summary="[drafted summary]",
|
summary="[drafted summary]",
|
||||||
description="Background:\n[background]\n\nScope of change:\n[scope]",
|
description={ ADF doc with heading nodes for Background: and Scope of change: },
|
||||||
|
contentFormat="adf",
|
||||||
parent="CONT-905",
|
parent="CONT-905",
|
||||||
additional_fields={
|
additional_fields={
|
||||||
"customfield_10008": "CONT-905",
|
"customfield_10008": "CONT-905",
|
||||||
"customfield_14823": { "accountId": "557058:6c212fb7-af94-48db-91a9-99ba87ceb3c5" },
|
"customfield_14823": { "accountId": "557058:6c212fb7-af94-48db-91a9-99ba87ceb3c5" },
|
||||||
"customfield_13100": { "accountId": "712020:4c9751b9-2abd-4280-b1e0-983334853223" },
|
"customfield_13100": { "accountId": "712020:4c9751b9-2abd-4280-b1e0-983334853223" }
|
||||||
"customfield_10025": "AC1: ...\n\nAC2: ..."
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
@ -220,13 +247,16 @@ Here's the Card Skill card I'll create:
|
||||||
**System Analyst:** Scott Phillips
|
**System Analyst:** Scott Phillips
|
||||||
**UAT Tester:** Tim Gosnik
|
**UAT Tester:** Tim Gosnik
|
||||||
|
|
||||||
**Description:**
|
**Description:** (section labels shown as headings)
|
||||||
Background:
|
# Background:
|
||||||
[background]
|
[background]
|
||||||
|
|
||||||
Scope of change:
|
# Scope of change:
|
||||||
[scope]
|
[scope]
|
||||||
|
|
||||||
|
# Questions: (if applicable)
|
||||||
|
[questions]
|
||||||
|
|
||||||
**Acceptance Criteria:**
|
**Acceptance Criteria:**
|
||||||
AC1: ...
|
AC1: ...
|
||||||
AC2: ...
|
AC2: ...
|
||||||
|
|
@ -261,7 +291,7 @@ When the user asks to **update Card Skill** (change defaults, add fields, change
|
||||||
|------|-------|
|
|------|-------|
|
||||||
| Invoke | `/card-skill` or "create using Card Skill" |
|
| Invoke | `/card-skill` or "create using Card Skill" |
|
||||||
| Boards | CASH, CONT |
|
| Boards | CASH, CONT |
|
||||||
| Description | `Background:` + `Scope of change:` |
|
| Description | Heading format: `# Background:`, `# Scope of change:`, optional `# Questions:` (use ADF headings via MCP) |
|
||||||
| Acceptance Criteria | `customfield_10025` as AC1:, AC2:, … |
|
| Acceptance Criteria | `customfield_10025` as AC1:, AC2:, … |
|
||||||
| System Analyst | Scott Phillips (both boards) |
|
| System Analyst | Scott Phillips (both boards) |
|
||||||
| UAT (CASH) | Tim Gosnik |
|
| UAT (CASH) | Tim Gosnik |
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue