Creating GitHub issues and Jira tickets
| This documentation was generated with the assistance of AI. Please report any inaccuracies. |
Filing a ticket before work begins introduces
iru-create-github-issue and
iru-create-jira-ticket as the two entry points that turn a rough idea
into a tracked, actionable ticket. This page goes one level deeper: exactly what information each one asks for,
how the drafted ticket is structured, and which skills actually run behind the scenes to produce it.
Both skills exist so a ticket is immediately actionable by the typical development cycle once filed — grounded in the real codebase rather than a guess, and carrying the same structured information every time regardless of who’s filing it or how much detail they thought to include.
What you provide
Neither skill asks everything up front in one long form — each question is asked only when the previous answer still leaves something unresolved, and every question beyond the task’s purpose is optional.
| Information | Required | Tracker | Notes |
|---|---|---|---|
Purpose (what problem this solves, or what capability it adds) |
Yes |
Both |
Free text. Can be given upfront as a short description argument
( |
Acceptance criteria |
No |
Both |
Folded into the purpose answer if the user already has any in mind; never invented if they don’t. |
Linked URL(s) |
No |
Both |
Design docs, discussions, prior art. Each is fetched ( |
Attached file(s)/document(s) |
No |
Both |
Local paths — screenshots, logs, specs, mockups. Read directly (including images and PDFs) and summarized. |
Related ticket(s)/issue(s) |
No |
Both |
Confirmed against the real tracker ( |
Epic |
No |
Jira only |
Confirmed by key, then explored the same way |
Organization-specific context |
No |
Jira only |
Gathered by delegating to |
Due date |
No |
Both |
Free text, normalized to an absolute date (e.g. "next Friday" → the actual date). |
Importance |
A level is always recorded |
Both |
One of trivial, minor, important, blocking, asked as a fixed choice. Defaults to minor for an ordinary task, or blocking when the purpose reads as a bug or incident actively affecting production — either way, the user confirms or overrides rather than it being assigned silently. |
Label (GitHub) / Project + issue type (Jira) |
Resolved automatically |
Both |
Classified from the stated purpose (bug vs. feature/enhancement signal words) and matched against this repository’s real label set, or this Jira instance’s real project/issue-type configuration — never an invented label or issue type. The user is only asked to pick when the match is genuinely ambiguous or can’t be listed. |
How the ticket is structured
Whatever was gathered above is drafted into a consistent shape before anything is filed — shown to the user in full for confirmation, never filed silently:
| Section | Content |
|---|---|
Title / Summary |
A concise, imperative one-liner (e.g. "Add retry support to the HTTP client"). |
Summary |
The purpose and motivation, in the user’s own terms. |
Context |
Grounded in |
Acceptance criteria |
A short bulleted list, only if the user gave any or they can be reasonably inferred — omitted entirely rather than invented. |
Task details |
Due date (if given), importance, and an estimated difficulty — the skill’s own assessment of how hard the
task is to implement, grounded in everything gathered: how much of the codebase it touches, whether it needs
new abstractions or unfamiliar dependencies, and the scope described in the purpose/context. One of very
easy, easy, medium, hard, very hard, extreme, or impossible, plus a one-line rationale
(e.g. "medium — touches two existing classes with clear precedent elsewhere in the codebase, no new
dependencies"). |
References |
Summarized URLs/file contents, confirmed related-ticket links, and — for Jira — the epic (if any) and whatever
|
Skills executed
| Diagram block | Skill(s) | What happens |
|---|---|---|
|
|
|
Ask purpose / additional context / due date / importance |
|
|
|
|
|
Resolve project + issue type (Jira) / Classify + label (GitHub) |
|
|
Draft + confirm + file |
|
Detailed, spec-style issues
iru-create-github-issue is the quick path: a handful of questions, a short structured body, filed in a
minute. When an issue needs to be written like a specification — every requirement testable, every acceptance
criterion traceable, gaps found before the issue exists — use the detailed path, which is GitHub-only (there is
no Jira counterpart) and made of three skills that also work on their own:
| Skill | What it does |
|---|---|
Interviews the user in small batches (after |
|
Reviews an existing issue ( |
|
Assesses whether an issue is too large and, after the user confirms the proposal, splits it into sub-issues under
a root issue, tracked by a milestone. Invoked as |
The two shapes
| Shape | Sections |
|---|---|
Functional |
Context, functional requirements, acceptance criteria, optional technical details (classes and lines to change, for highly technical tasks), out of scope, dependencies, and task details. |
Documentation |
Audience and the page structure to follow. Technical docs cover architecture, data model, use cases, configuration properties, metrics and algorithms; non-technical docs are a learning guide with pages or sections per concept. Every documentation issue requires bibliography or official-documentation links (the review fetches them to confirm they resolve) and Mermaid or SVG diagrams where they aid understanding, plus acceptance criteria. |
Missing, doubtful or inconsistent points are put to the user as questions, never silently guessed. The review first resolves what it can from the codebase and context, and only asks the user for the rest.
Splitting, milestones and dependencies
A split proposes the sub-issues first and creates nothing until the user confirms. Size is judged from concrete signals: more than about seven acceptance criteria or requirements, more than one independently deliverable capability, more than one module or area touched, or an estimate of hard or above. A split always creates a milestone tracking all the sub-issues. Dependencies are recorded in three redundant places:
-
GitHub sub-issues link each child to the root issue.
-
Each sub-issue body has a
Blocked by: #N, #Mline (orBlocked by: none) and aParallel group: <n>line. The same group number means independent, so those issues can proceed in parallel. -
The root issue carries an ordered table of groups (group, issues, parallelizable).
Sub-issues are created in dependency order so Blocked by can reference real issue numbers.
Quick path or detailed path?
Use iru-create-github-issue (or iru-create-jira-ticket) for a simple, well-understood task. Use
iru-draft-github-issue when the issue is a feature or documentation effort that needs full requirements and
acceptance criteria, or may be large enough to split. iru-review-github-issue can also be run on its own on an
existing issue before picking it up with /iru-issue.
Where this fits
Filing a ticket this way is entirely optional — nothing in
the typical development cycle requires going
through either skill first. /iru-issue <ticket-id> and /iru-plan <ticket-id> work exactly the same way
against a ticket filed by hand, or even against no ticket at all (a free-form description). What these two
skills add is consistency: every draft is grounded in the real codebase and asks for the same structured
information, rather than depending on whoever’s filing it to remember what a well-formed ticket needs.
See also
-
Filing a ticket before work begins — the shorter, one-diagram version of this same workflow, alongside the catalog’s other common workflows.
-
Customizing Jira ticket creation — how to extend
iru-jira-custom-contextwith organization-specific questions. -
Draft GitHub Issue, Review GitHub Issue, Split GitHub Issue — detail pages for the detailed, spec-style path.
-
Ticket Intake — the purpose group these two skills belong to.
-
Create GitHub Issue, Create Jira Ticket, Jira Custom Context, Explore — detail pages for every skill this workflow runs.