AGENT SKILL

ba-ticket

Write a JIRA story or Epic in the BA's voice that FE, BE, Data, AI and QA can build from without a meeting. Default mode fills the long template and scores it against the same 13 gates ba-story-verify uses, with a resumable draft record; --draft mode fills a one-screen template titled [Area] [Team] ... (Why / Scope / Acceptance criteria / Fields with required-optional rules / Edge cases / Notes per team / Open questions). Either way it asks the BA only what is missing, proposes an Epic's stories, and creates the issues in JIRA only after the operator approves. Given an existing issue key it rewrites that ticket into the one-screen draft format and updates it in place on approval. Trigger: write a ticket, author a ticket, rewrite this ticket, shorten this ticket, BA ticket, write a story, draft a story, write a user story, write an epic, create an epic, gen a ticket, break this into stories, draft ticket, full ticket, ticket for FE/BE/QA, /ba-ticket. Do NOT load for: verifying an existing ticket (use ba-story-verify / ba-epic-verify), implementing a ticket (use harness-flow), or bug triage (use harness-bugfix).

License 许可
MIT
所属仓库
foden303/harness
最近更新
2026-11-06
Stars
★ 0
Forks
0

01 前言 Front Matter

kind
workflow
name
ba-ticket
pair
ba-story-verify
role
orchestrator
owner
harness-core
shape
delegate
since
2026-09-24
effort
medium
purpose
Rough idea -> BA-voice story/epic (13-gate by default, or --draft one-screen) -> ask only the gaps -> (epic) propose stories -> operator approves -> createJiraIssue
trigger
write a ticket, author a ticket, BA ticket, write a story, write an epic, create an epic, draft ticket, full ticket
description
Write a JIRA story or Epic in the BA's voice that FE, BE, Data, AI and QA can build from without a meeting. Default mode fills the long template and scores it against the same 13 gates ba-story-verify uses, with a resumable draft record; --draft mode fills a one-screen template titled [Area] [Team] ... (Why / Scope / Acceptance criteria / Fields with required-optional rules / Edge cases / Notes per team / Open questions). Either way it asks the BA only what is missing, proposes an Epic's stories, and creates the issues in JIRA only after the operator approves. Given an existing issue key it rewrites that ticket into the one-screen draft format and updates it in place on approval. Trigger: write a ticket, author a ticket, rewrite this ticket, shorten this ticket, BA ticket, write a story, draft a story, write a user story, write an epic, create an epic, gen a ticket, break this into stories, draft ticket, full ticket, ticket for FE/BE/QA, /ba-ticket. Do NOT load for: verifying an existing ticket (use ba-story-verify / ba-epic-verify), implementing a ticket (use harness-flow), or bug triage (use harness-bugfix).
allowed-tools
[ "Read", "Write", "Edit", "Bash", "Grep", "Glob", "Task", "AskUserQuestion", "mcp__claude_ai_Atlassian_Rovo__*" ]
argument-hint
[<idea text>|<brief-file>|<ISSUE-KEY or URL>] [--epic|--story] [--project KEY] [--epic-key KEY] [--draft] [--template <path>|--template-confluence <url>] [--draft-only] [--dry-run]
user-invocable
true

02 资源文件 8

03 SKILL.md 正文

ba-ticket

Rough idea → ticket in the BA's voice (13-gate template by default, one screen with --draft) → ask only what is missing → operator approves → created in JIRA.

The ticket is written for the people who build it. A developer or tester should read it in two minutes and know: why it matters, what is in and out, how to tell it is done, and what their own team has to know. Nothing more.

Rules (read first)

  1. Short beats complete-looking. Cut any sentence that does not change what someone builds or tests. In --draft mode that means one screen per story and one screen per epic.
  2. BA voice, no code. Write what the user needs and the business rules in plain words. Code (API / function names, endpoints, table or column names, audit keys, enum numbers, file paths, call-site counts) appears only in the BE / FE lines of Notes per team, never in the title, Why, Scope, AC, Fields, Edge cases or Open questions, and never anywhere in an epic. Example values a user would type or see (LAUNCH25, $399.00) are fine.
  3. Ask, never invent. A missing acceptance criterion, limit, or rule is a question to the BA, not a guess. No TBD, ???, etc. in the output.
  4. Title is [Area] [Team] ... for a one-team story. When several build teams deliver one feature that only works once all parts are done, keep one story titled [Area] ... and list the teams; split per team only when each part ships on its own. Epics carry [Area] only.
  5. Every field is spelled out. Each input or returned value gets a row in ## Fields: required or optional (or when), rules, default. "Create an account" is not done until the reader knows which fields it takes. Notes per team lists only the teams in **Teams:**.
  6. Nothing reaches JIRA without approval. Creating an issue is an external write (.claude/rules/autonomous-confirmation-scope.md case 1).
  7. English output, whatever language the BA writes the idea in.
  8. A story is at most 5 points. Sizes are 1 / 2 / 3 / 5. Anything bigger is split before it is proposed; the draft record refuses a larger number.

Modes

Mode When Flow
full (default) The 13-gate rubric, detailed contract tables, story points, or a Confluence template full/flow.md — load it and follow it instead of the flow below
--draft A one-screen ticket every team can read in two minutes The flow below

Pick the mode from the flag only; never switch to --draft on your own. The Rules above apply to both modes. An existing issue key always takes the draft flow (the full flow does not rewrite), so --draft is implied there. --draft picks the format; --draft-only stops before JIRA. They combine. --full (the v1.1.0 flag) is still accepted as a no-op alias for the default.

Quick Reference

Input Behavior
/ba-ticket "let users export the txn list to CSV" One story, long template + 13-gate rubric, resumable draft record, create on approval
/ba-ticket brief.md --epic --project DPD Full Epic with child stories and story points, create on approval
/ba-ticket "..." --epic-key DPD-832 Story created under an existing epic
/ba-ticket "..." --template-confluence https://<site>/wiki/.../id Use a Confluence page as the template
/ba-ticket "..." --dry-run Walk the full flow, write no state, never call JIRA
/ba-ticket "..." --draft One-screen story, ask the gaps, create on approval
/ba-ticket brief.md --draft --epic --project DPD One-screen epic + proposed stories, create on approval
/ba-ticket DPD-1573 Rewrite an existing ticket into the one-screen format, update it on approval
/ba-ticket "..." --draft-only Write the markdown only, never call JIRA (either mode)
/ba-ticket "..." --template ./our-story.md Use the team's own template (either mode)

References

Topic File
--draft: style, sections, ready check, asking, epic breakdown writing-guide.md
--draft: saving, approval, creating or updating in JIRA create-jira.md
Filled --draft example README.md
Default (full): flow, state machine, stop conditions full/flow.md
Default (full): template loading / rubric / epic breakdown / create full/

Flow (--draft mode)

[1] Read the idea
    Idea text, brief file, or an existing issue key/URL (rewrite mode: read it
    with getJiraIssue; its description, parent and links are the idea). Story vs epic: flag, else infer ("epic", "several stories",
    many deliverables -> epic) and say which in one line.
    Template: --template, else <plugin root>/templates/ba-ticket/{story,epic}.md
    (plugin root = $CLAUDE_PLUGIN_ROOT, else ${CLAUDE_SKILL_DIR}/../..).
    Project: --project, else a key in the idea, else ask.

[2] Draft                                   -> references/writing-guide.md
    Fill every slot the idea answers. Mark the rest as gaps, including any field
    whose required/optional status or rules the idea does not state.

[3] Ask the gaps                            -> references/writing-guide.md (Asking)
    AskUserQuestion, up to 4 questions per round, each with ready-made options.
    Fold answers in, re-check. Stop when the "Ready check" passes or the operator
    says "leave the rest" -> remaining gaps go to ## Open questions with an owner.

[4] (Epic) Propose stories                  -> references/writing-guide.md (Epic)
    Stories table, then draft each story with the story template.
    Operator keeps / edits / drops rows.

[5] Show + approve + create                 -> references/create-jira.md
    Save the markdown to .claude/state/ba-ticket/<slug>/.
    --draft-only stops here. Otherwise show the final text and ask once:
    create all / pick stories / edit / cancel. Create only on approval.
    Rewrite mode: back up the old description, then ask update / edit / cancel;
    editJiraIssue (summary + description) only on approval.

Stop conditions

Condition Response
Atlassian MCP tools missing or failing at step 5 Keep the saved markdown, say where it is, stop
Project unknown Ask for it (offer getVisibleJiraProjects results); never guess
A create fails mid-batch Stop; list created keys and the ones still missing
Rewrite mode: ticket changed in JIRA since it was read Re-read and re-draft before updating; never overwrite unseen edits
Draft already has created keys (re-run) Never re-create those; create only the missing ones

Report

Say: which template was used, the questions asked and the answers folded in, the final ticket(s), and the created keys + URLs. Do not narrate slot-by-slot filling. End with: "Created, not transitioned — move it when it is ready."

Related skills

  • ba-story-verify / ba-epic-verify — check a ticket someone already wrote
  • harness-flow — build a ticket once it is clear

04 同仓库更多 Skills