AGENT SKILL

jira-ticket

Use when creating a Jira ticket — the user types /jira-ticket, asks to "open a ticket", "file a bug", "create an issue", or asks you to record work in Jira. The Jira project comes from `--project` / `$AIPLAYBOOK_JIRA_PROJECT`. Builds the ticket from the canonical template, fills what it can infer from the session, and refuses to emit one that misses a required section. Pairs with the jira-ticket-standard rule, which blocks the raw MCP call.

License 许可
MIT
最近更新
2026-11-09
Stars
★ 6
Forks
1

01 前言 Front Matter

name
jira-ticket
license
MIT
metadata
{ "author": "ai-playbook", "version": "1.0" }
description
Use when creating a Jira ticket — the user types /jira-ticket, asks to "open a ticket", "file a bug", "create an issue", or asks you to record work in Jira. The Jira project comes from `--project` / `$AIPLAYBOOK_JIRA_PROJECT`. Builds the ticket from the canonical template, fills what it can infer from the session, and refuses to emit one that misses a required section. Pairs with the jira-ticket-standard rule, which blocks the raw MCP call.

03 SKILL.md 正文

jira-ticket — author a ticket that survives contact with the backlog

You are filling in a form whose contract is machine-checked. The contract is specs/jira-ticket-standard.yaml; the human face of it is templates/jira-ticket.md.tmpl; the canonical worked example is tests/fixtures/jira_ticket_example.md.

Draft first, then submit. The PreToolUse hook will reject a non-conformant createJiraIssue call, and a rejected call costs a round trip. Assemble the whole description, check it against the checklist below, and only then call the MCP tool.

Your job is to fill it in, not to hand over a blank form

A skill that only refuses is a linter, and if using it is slower than calling the MCP tool directly, nobody uses it. So do the work:

  • Infer Contexto / Problema from the session. You almost always know why this ticket exists — you just hit the bug, or read the code, or measured the thing. Cite the evidence you already have: file.py:line, a measurement, a failing test, the commit that introduced it.
  • Infer Alcance / Entregables from what was actually discussed. Name real paths.
  • Propose the metric and its type, then say which you chose and why in one line. Users correct a proposal far more readily than they fill a blank.
  • Only leave <<...>> where you genuinely cannot know — and then ask, in one question, for exactly those. Never submit with a sentinel still in place; the validator rejects it, by design.

The required shape

Read templates/jira-ticket.md.tmpl for the skeletons. In short:

Issue type Sections
Feature / Big Improvement · Small Improvement Contexto / Problema · Alcance / Entregables · Plan de prueba (A/B/C) · Métricas
Bug Contexto / Problema · Repro · Esperado vs Actual · Test de regresión · Métricas
Subtask · Epic Contexto / Problema · Alcance / Entregables

Headings are Spanish, matched case- and accent-insensitively, tolerant of a 2. prefix and a trailing (parenthetical).

The five metric types, and nothing else:

  • cobertura / compliance — what fraction of X satisfies Y
  • calidad / exactitud — how often the thing is RIGHT; false positives, accuracy
  • tendencia / burn-down — a count moving over time, in the direction you claimed
  • rendimiento / eficiencia — time, throughput, resource use
  • coste — money, tokens, CI minutes

Each metric line reads - <what you measure> → <type>.

Your failure mode is plausibility

The validator checks shape. You are the only thing checking substance, and the characteristic way this goes wrong is that every section is present, well written, and says nothing. Four specific traps, each observed:

  1. A metric with no measurement behind it. "Mejora de la calidad del código → calidad / exactitud" names a type and measures nothing. Ask: who runs what command, and what number comes out? If there is no answer, the honest move is N/A — <por qué> for that section, which is allowed and counted.

  2. A B that is not a negative control. "Comprobar que falla" is a wish. B must name the exact assertion you invert and the error you expect — "quito la sección ## Métricas del payload y el hook devuelve deny con missing-section". A test plan whose A passes proves only that you did not test; B is the half that proves the gate bites. Boilerplate phrasings are rejected by name in the contract, so writing one costs you a round trip.

  3. A C that names nothing. "No romper nada" is not a regression test. Name a path or an id — tests/test_jira_ticket_standard.py — or write ninguno aún — <por qué> and mean it.

  4. Header stuffing. Every heading present, every body "TBD"/"pendiente". This is the failure the whole standard exists to catch. If you find yourself writing filler to satisfy a section, that is the signal to use the escape hatch honestly instead.

The escape hatch

N/A — <razón> is valid per section, never for a whole ticket. Its usage rate is reported by check. A high rate is information about the template, not an infraction — but a reason that says "no aplica" is not a reason.

Before you call the MCP tool

  • Every required section present, with real content.
  • No <<...>> left anywhere.
  • Every metric line parses as - <métrica> → <tipo>, type from the five.
  • B names the assertion that flips. C names a test or admits none, with a reason.
  • Epic parent set (parent) and labels chosen.

Then call createJiraIssue. If the hook blocks you, it returns every problem at once — fix them all in one pass rather than resubmitting per finding.

Checking existing tickets

python .ai-playbook/scripts/rules/jira-ticket-standard.rule.py explain <KEY>
python .ai-playbook/scripts/rules/jira-ticket-standard.rule.py check --since 2026-08-02

explain shows the match section by section — use it when a rejection surprises you, because the answer is usually a heading the resolver did not recognise rather than a section you forgot.

When NOT to fire

  • Tracker stubs from issue_sync. Those carry ai-playbook-managed and are exempt: their content of record is the OpenSpec proposal, and duplicating an A/B/C into the stub creates a second copy that drifts from the first.
  • Editing a ticket's fields other than the description — nothing to validate.
  • Other Jira projects. The contract applies only to the Jira project set by --project / $AIPLAYBOOK_JIRA_PROJECT.

See also

  • specs/jira-ticket-standard.yaml — the contract, including the closed list.
  • docs/rules/jira-ticket-standard.rule.md — the binding rule and the enforcement topology, including what it deliberately cannot cover.
  • templates/jira-ticket.md.tmpl — the skeletons.

04 同仓库更多 Skills

Wizarck
Wizarck/ai-playbook

sweep

Use when the user wants to find code that has quietly stopped being used — types /sweep, asks for a "dead code sweep", "repo entropy", "what can we delete", "orphan files", "unused code", or asks to review a sweep ledger. Adjudicates candidates a deterministic scanner already produced; it never deletes anything and never re-derives findings from raw source. Pairs with ponytail, which gates what gets written rather than what rots.

★ 6
Wizarck
Wizarck/ai-playbook

ponytail

Use when the user wants the laziest solution that actually works — types /ponytail, says "be lazy", "lazy mode", "simplest solution", "minimal solution", "yagni", "do less", or "shortest path", or complains about over-engineering, bloat, boilerplate, or unnecessary dependencies. Supports intensity levels lite, full, ultra (default). Pairs with caveman, which compresses prose, not code.

★ 6
Wizarck
Wizarck/ai-playbook

ponytail-review

Use when the user wants a code review focused exclusively on over-engineering — says "review for over-engineering", "what can we delete", "is this over-engineered", "simplify review", or invokes /ponytail-review. Complements correctness/security review; this one only hunts complexity in the current diff. Gated by the ponytail review_ponytail component.

代码审查
★ 6
Wizarck
Wizarck/ai-playbook

ponytail-debt

Use when the user wants to harvest every `ponytail:` comment in the codebase into a tracked debt ledger — says "ponytail debt", "/ponytail-debt", "what did ponytail defer", "list the shortcuts", "ponytail ledger", or "what did we mark to do later". One-shot report, changes nothing. Gated by the ponytail debt_ponytail component.

★ 6
Wizarck
Wizarck/ai-playbook

ponytail-audit

Use when the user wants a whole-repo audit for over-engineering — says "audit this codebase", "audit for over-engineering", "what can I delete from this repo", "find bloat", or invokes /ponytail-audit. Like ponytail-review but scans the entire tree, not a diff. One-shot report, applies no fixes. Gated by the ponytail audit_ponytail component.

★ 6
Wizarck
Wizarck/ai-playbook

openspec-propose

Propose a new change with all artifacts generated in one step. Use when the user wants to quickly describe what they want to build and get a complete proposal with design, specs, and tasks ready for implementation.

★ 6