Files
2026-06-24 19:27:14 +02:00

7.9 KiB
Raw Permalink Blame History

name, description
name description
jira-lifecycle Full Jira ticket lifecycle management for ESIDEPAISY.

Skill: jira-lifecycle

Full Jira ticket lifecycle management for ESIDEPAISY.

Invoked by

🎫 JiraOps mode

Required Inputs

Input Source Example
TICKET_KEY Jira issue key ESIDEPAISY-12081

Overview

This skill manages a Jira ticket through its full lifecycle, from initial setup through to final acceptance. It handles field validation, Smart Checklist management, status transitions, attachments, and structured comments.

Steps

1. Validate mandatory fields

ticket = retrieve_ticket_details(TICKET_KEY)

Check and fix:

Field ID Required How to resolve
Feature Link customfield_10001 Mandatory Look up parent Epic via JQL: project = ESIDEPAISY AND issuetype = Epic AND summary ~ "<module>"
Sprint customfield_10000 Mandatory Derive from active sprint: get_agile_boards("ESIDEPAISY")get_sprints_from_board(board_id, states="active")
Assignee assignee Recommended ticket_assignment(TICKET_KEY, assignee="currentUser()")

If Feature Link is missing:

# Find the parent Epic
epics = list_tickets(jql_search='project = ESIDEPAISY AND issuetype = Epic AND summary ~ "<module keyword>"')
# Update the ticket
update_ticket_fields(TICKET_KEY, fields={"customfield_10001": epics[0]["key"]})

2. Create Smart Checklist

Set up the standard PAISY pipeline checklist:

update_checklist(TICKET_KEY, items=[
    {"name": "## Analyse"},
    {"name": "Assessment erstellt", "status": "-"},
    {"name": "Plan erstellt", "status": "-"},
    {"name": "Testplan erstellt", "status": "-"},
    {"name": "GO erhalten", "status": "-!"},  # mandatory
    {"name": "---"},
    {"name": "## Implementierung"},
    {"name": "Code-Änderungen", "status": "-"},
    {"name": "Tests implementiert", "status": "-"},
    {"name": "Build grün", "status": "-!"},  # mandatory
    {"name": "---"},
    {"name": "## Review & Docs"},
    {"name": "Code Review", "status": "-"},
    {"name": "Lösungsdokumentation", "status": "-"},
    {"name": "PDF generiert", "status": "-"},
    {"name": "PR erstellt", "status": "-"},
    {"name": "Jira aktualisiert", "status": "-"},  # marked done only after PR merge
])

3. Status transitions

Manage the ticket through the ESIDEPAISY workflow:

Phase Status When
Start In Progress After worktree creation, before implementation
Review In Review After implementation + tests, before code review
PR created Blocked After PR creation — pipeline STOPS here
Post-merge Accepted After PR is merged (manual trigger only)
update_status(TICKET_KEY, status="In Progress")

Important: The automated pipeline ends at Blocked. The transition to Accepted happens only after a human merges the PR and manually triggers the post-merge phase.

4. Update checklist as work progresses

Update individual items as phases complete:

# After assessment is done
update_checklist(TICKET_KEY, items=[
    {"name": "## Analyse"},
    {"name": "Assessment erstellt", "checked": True},
    {"name": "Plan erstellt", "status": "~"},  # in progress
    # ... rest unchanged
])

Important: update_checklist replaces ALL items. Always send the full checklist with updated statuses.

5. Add structured comments at phase boundaries

At each major phase transition, add a German comment:

# After planning phase
add_comment_to_ticket(TICKET_KEY, comment="""
*Phase 1 abgeschlossen: Analyse & Planung*

Assessment, Plan und Testplan erstellt:
- Assessment: [TICKET_KEY-assessment.md]
- Plan: [TICKET_KEY-plan.md]
- Testplan: [TICKET_KEY-testplan.md] ({N} Testfälle)

GO erhalten am {date}.
""")

# After implementation
add_comment_to_ticket(TICKET_KEY, comment="""
*Phase 3-5 abgeschlossen: Implementierung & Tests*

Branch: current/{type}/{module}/{TICKET_KEY}-{desc}
Änderungen: {N} Dateien geändert, {M} neu
Tests: {T} Tests, alle bestanden
""")

# After documentation + PR creation (pipeline end)
add_comment_to_ticket(TICKET_KEY, comment="""
*Pipeline abgeschlossen — Warten auf PR-Merge*

Lösungsdokumentation als PDF angehängt.
PR erstellt: [PR #{pr_id}|{pr_url}]

Ticket wird auf *Blocked* gesetzt bis PR gemerged ist.
Nach Merge: Status → Accepted, Checklist-Punkt "Jira aktualisiert" abhaken.
""")

6. Upload attachments

# Upload solution PDF
add_attachment_to_ticket(TICKET_KEY, file_path="/absolute/path/to/<TICKET_KEY>-solution.pdf")

7. Pre-merge checklist update

Mark all items done EXCEPT "Jira aktualisiert" (reserved for post-merge):

update_checklist(TICKET_KEY, items=[
    {"name": "## Analyse"},
    {"name": "Assessment erstellt", "checked": True},
    {"name": "Plan erstellt", "checked": True},
    {"name": "Testplan erstellt", "checked": True},
    {"name": "GO erhalten", "status": "+!"},
    {"name": "---"},
    {"name": "## Implementierung"},
    {"name": "Code-Änderungen", "checked": True},
    {"name": "Tests implementiert", "checked": True},
    {"name": "Build grün", "status": "+!"},
    {"name": "---"},
    {"name": "## Review & Docs"},
    {"name": "Code Review", "checked": True},
    {"name": "Lösungsdokumentation", "checked": True},
    {"name": "PDF generiert", "checked": True},
    {"name": "PR erstellt", "checked": True},
    {"name": "Jira aktualisiert", "status": "-"},  # ← left open until post-merge
])

8. Set status to Blocked (pipeline stops here)

update_status(TICKET_KEY, status="Blocked")
add_comment_to_ticket(TICKET_KEY, comment="""
*Status: Blocked — Warten auf PR-Merge*

Alle automatisierten Schritte abgeschlossen.
PR muss reviewed und gemerged werden, bevor das Ticket auf Accepted gesetzt wird.
""")

PIPELINE STOPS HERE. Do not proceed to Accepted automatically.

9. Post-merge finalization (manual trigger only)

This step runs only when explicitly triggered by the user after the PR has been merged.

# Final checklist — mark "Jira aktualisiert" as done
update_checklist(TICKET_KEY, items=[
    # ... all items from step 7 with "checked": True ...
    {"name": "Jira aktualisiert", "checked": True},
])

update_status(TICKET_KEY, status="Accepted")
add_comment_to_ticket(TICKET_KEY, comment="""
*PR gemerged — Ticket abgeschlossen*

Alle Checklist-Punkte erledigt. Status → Accepted.
""")

Language

  • All Jira content (summary, description, comments, checklist items): German
  • Technical terms (branch names, file paths, tool names): English as-is

Conventions

  • Feature Link (customfield_10001): always look up dynamically, never hardcode Epic keys
  • Sprint: always derive from active sprint, never hardcode sprint IDs
  • Comments: use Jira wiki markup (*bold*, {code}, etc.)
  • Attachments: use absolute file paths
  • Checklist: always send the FULL list (Railsware replaces all items on update)

Partial Lifecycle

Not every ticket needs the full lifecycle. For quick fixes:

Scenario Skip
Trivial bugfix (< 1 hour) Skip assessment, testplan, review. Keep checklist minimal.
Documentation-only change Skip implementation, tests, review phases.
Hotfix Skip planning loop. Minimal checklist: Code → Test → Deploy.

Adjust the checklist template accordingly when creating it.

Human gate rule applies to ALL variants: After PR creation, status → Blocked. Never auto-transition to Accepted.

Pipeline Boundary

The automated pipeline covers steps 18. Step 9 (post-merge → Accepted) is a separate manual action.

Boundary Trigger Action
Pipeline end PR created Status → Blocked, comment with PR link
Post-merge User says "PR merged" or "finalize TICKET_KEY" Status → Accepted, final checklist update