Toolkit for writing, refining, and prioritizing tickets on issue-tracking systems (Jira and equivalents). Covers three concerns: writing clear acceptance criteria for user stories; applying MoSCoW prioritization to requirements and backlogs; and readying sparse backlog tickets for refinement by gathering incident context, applying a YAML template, and generating a validated structured document.
93
93%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Passed
No known issues
Turn a sparse Jira backlog ticket into a fully-structured "ready for refinement" document by gathering incident context, applying the standard template, and validating the output.
Use jira-ticket-readyup when:
Do NOT use for:
A ticket is "ready for refinement" when it has all four sections:
| Section | Purpose |
|---|---|
| Context | Background on the service, current behaviour, and why it matters |
| Conditions of Satisfaction | MUST / SHOULD / COULD requirements |
| Acceptance Criteria | Specific, testable conditions that define "done" |
| Supporting Information | Links to repos, files, and related tickets |
The reference example ticket should be supplied by the user when invoking this skill (a ticket already in "Ready for Refinement" status in their Jira project).
MANDATORY before generating any output:
# Always read this first — it defines the required fields and comments
skills/project-mgmt/issue-tracker-toolkit/jira-ticket-readyup/assets/templates/ready-for-refinement.yamlDo NOT generate a ticket data file without loading this template.
For each ticket to ready up:
Fetch the ticket itself:
jira_get_issue(issue_key="PROJ-NNN", fields="summary,description,status,issuetype,issuelinks")Fetch every linked incident (look for issuelinks with type "Follow-up"):
jira_get_issue(issue_key="INC-NNN", fields="summary,description,comment")Comments on the incident ticket contain the investigation findings — read them all.
Extract from the incident:
Create a data file at the output path using the template. The output path convention is:
<journal-dir>/YYYY/MM/YYYY-MM-DD-PROJ-NNN-ready-for-refinement.yamlUse your judgment to synthesise context from all available sources — the ticket description, linked incident comments, and any other information gathered in Step 2. The goal is a coherent narrative that lets a developer pick up the ticket cold and understand what needs to be done and why.
Key constraints:
""conditions_of_satisfaction.must must have at least one itemacceptance_criteria must have at least two specific, testable itemsbun run skills/project-mgmt/issue-tracker-toolkit/jira-ticket-readyup/scripts/validate-ticket.ts \
<path-to-ticket-data.yaml>Fix any reported errors before proceeding to markdown generation.
Prerequisite: bun must be available (which bun).
Create the markdown file at:
<journal-dir>/YYYY/MM/YYYY-MM-DD-PROJ-NNN-ready-for-refinement.mdUse this structure exactly:
# <Summary> — <Ticket Key>
**Type:** <Bug|Feature|Maintenance|Investigation>
**Linked Incident:** [<INC-NNN>](<jira-url>) *(omit if none)*
## Context
<background paragraph>
<current behaviour paragraph>
**Key implications:**
- <implication 1>
- <implication 2>
## Conditions of Satisfaction
- [ ] **MUST** <requirement>
- [ ] **MUST** <requirement>
- [ ] **SHOULD** <requirement>
- [ ] **COULD** <requirement>
## Acceptance Criteria
- <criterion 1>
- <criterion 2>
## Supporting Information
- [<Repo name>](<url>)
- [<File path>](<url>) — <description>
- [<INC-NNN>](<url>) — <incident summary>bun run skills/project-mgmt/issue-tracker-toolkit/jira-ticket-readyup/scripts/validate-ticket.ts \
<path-to-ticket-data.yaml> \
--markdown <path-to-ticket-output.md>When complete, report:
Store outputs in the journal directory:
<journal-dir>/YYYY/MM/
YYYY-MM-DD-PROJ-NNN-ready-for-refinement.yaml ← data file (validated source)
YYYY-MM-DD-PROJ-NNN-ready-for-refinement.md ← markdown outputUse today's date for YYYY-MM-DD. The journal-dir is the current project root.
The canonical template is at:
skills/project-mgmt/issue-tracker-toolkit/jira-ticket-readyup/assets/templates/ready-for-refinement.yamlThe JSON schema is at:
skills/project-mgmt/issue-tracker-toolkit/jira-ticket-readyup/assets/schemas/ready-for-refinement.schema.jsonWHY: The template defines required fields and their expected format. Skipping it produces output that fails schema validation or omits required sections. ❌ BAD: Writing context.background directly without consulting the template structure. ✅ GOOD: Run Step 1 (read template) every time, even for the second ticket in a session.
WHY: The root cause, evidence, and proposed fix almost always appear in comments, not in the incident description. Skipping comments produces shallow context and vague acceptance criteria.
❌ BAD: Fetching only INC-NNN description, ignoring comments.
✅ GOOD: Fetch all comments via jira_get_issue(fields="comment") and read every one.
WHY: A broken YAML file silently propagates errors into the markdown and downstream tooling. The validate-ticket.ts script exists precisely to catch these before they spread. ❌ BAD: Continuing to generate markdown after a schema validation error, assuming it "looks fine". ✅ GOOD: Fix every validation error reported by validate-ticket.ts before calling Step 5.
WHY: "Improve reliability" is untestable. Refinement sessions get blocked when teams cannot determine whether a requirement is met.
❌ BAD: MUST make the service more robust.
✅ GOOD: MUST return HTTP 400 with error code INVALID_POSTAL_CODE when input fails the expected validation pattern.
| Topic | Reference | When to Use |
|---|---|---|
| YAML field guide | references/yaml-field-guide.md | When unsure what a template field expects |
| YAML template | assets/templates/ready-for-refinement.yaml | Step 1 of every workflow run |
| JSON schema | assets/schemas/ready-for-refinement.schema.json | Understand validation rules |
| Validation script | scripts/validate-ticket.ts | Steps 4 and 6 of the workflow |