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
- 参考文档README.md6.6 KB
- 参考文档references/create-jira.md3.8 KB
- 参考文档references/full/authoring-rubric.md6.4 KB
- 参考文档references/full/create-jira.md4.5 KB
- 参考文档references/full/epic-breakdown.md3.4 KB
- 参考文档references/full/flow.md7.1 KB
- 参考文档references/full/template-loading.md2.7 KB
- 参考文档references/writing-guide.md6.9 KB
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)
- Short beats complete-looking. Cut any sentence that does not change what
someone builds or tests. In
--draftmode that means one screen per story and one screen per epic. - 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. - 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. - 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. - 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 teamlists only the teams in**Teams:**. - Nothing reaches JIRA without approval. Creating an issue is an external
write (
.claude/rules/autonomous-confirmation-scope.mdcase 1). - English output, whatever language the BA writes the idea in.
- 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 wroteharness-flow— build a ticket once it is clear
04 同仓库更多 Skills
escape-skill
暂无简介
zz-review-empty
暂无简介
memory
Manage SSOT, memory, and cross-tool memory search. Guardian of decisions.md and patterns.md. Use when user mentions memory, SSOT, decisions.md, patterns.md, merging, migration, SSOT promotion, sync memory, save learnings, memory search, harness-mem, past decisions, or record this. Do NOT load for: implementation work, reviews, ad-hoc notes, or in-session logging.
maintenance
File cleanup and archiving. Tidies up bloated Plans.md, session-log.md, old logs, and state files. Trigger: /maintenance, cleanup, archive, organize, split session-log. Do NOT load for: implementation, review, release, new feature development.
harness-work
HAR: Execute Plans.md tasks from single task to full parallel team run. Trigger: implement, execute, do everything, breezing, team run, parallel. Do NOT load for: planning, review, release, setup.
harness-sync
HAR: Sync Plans.md with implementation. Drift detect, marker update, retrospective. Trigger: sync-status, where am I, check progress. --snapshot for snapshots. Do NOT load for: planning, implementation, review, release.