84 lines
4.8 KiB
TOML
84 lines
4.8 KiB
TOML
# Store starter: Jira Cloud. `scripts/read_store.py` reads this file as the base layer; the project's
|
|
# _bmad/custom/ticketing-store-config.toml names the store, fills the empty fields below, and replaces
|
|
# any other key here, key by key.
|
|
# It updates with the skill and holds only what is specific to this store: the rules every store shares
|
|
# are in references/board.md. Comments and `description` are never loaded; `description` is for choosing a store.
|
|
#
|
|
# One tool: acli, Atlassian's official CLI (`acli jira workitem ...`): create with --parent, transition,
|
|
# links, comments, assign, JQL. The Atlassian Rovo MCP server (https://mcp.atlassian.com/v1/mcp/authv2)
|
|
# is the alternative for an org that prefers MCP; it has no link-creation tool.
|
|
|
|
description = "Jira Cloud through acli: work types, transitions, links, JQL. For teams already on Jira, usually with an admin who can adjust the project workflow."
|
|
|
|
[tickets]
|
|
store = "jira"
|
|
key = "" # the default Jira project key, e.g. "SHOP"; Jira assigns the number. A container's own `key` overrides it for everything under it
|
|
site = "" # https://yourorg.atlassian.net
|
|
access = """
|
|
Use acli against `site`. Custom fields go through `--from-json`; check a subcommand's spelling
|
|
with `acli jira workitem --help` before first use.
|
|
"""
|
|
|
|
fields = """
|
|
severity is Jira's priority: P0 = Highest, P1 = High, P2 = Medium, P3 = Low; set it at create
|
|
(--priority, or --from-json when the flag is absent) and change it the same way. risk is a label
|
|
risk-low, risk-medium, or risk-high. estimate is the Story Points field on a story and a label est:<value> on an epic, through --from-json. Empty field: default priority, no label.
|
|
"""
|
|
|
|
reference = """
|
|
acli creates no web links; the description line is the reference.
|
|
"""
|
|
|
|
[verbs]
|
|
setup = """
|
|
Connect, unless acli is already installed and signed in to `site`: install acli (on macOS,
|
|
`brew tap atlassian/homebrew-acli && brew install acli`; elsewhere, per Atlassian's acli install
|
|
guide), then `acli jira auth login --web --site <site>`.
|
|
acli cannot create work types or statuses; those live in the project's settings. At first publish,
|
|
read an existing work item (`acli jira workitem view <key> --json --fields issuetype,status`) and
|
|
the project's work types, compare with [tickets.types] and [tickets.status], and tell the user
|
|
exactly what to add in Jira or which map entry to set in the project's store config. Jira's defaults (To Do, In
|
|
Progress, Done; resolution Won't Do) need no setup; [tickets.status] also expects an In Review status.
|
|
Do not ask for a level above Epic: by default the initiative stays local and everything below it
|
|
publishes. A team-managed project's admin adds a status as a board column under
|
|
Project settings, Board; a company-managed project needs a Jira admin to add it to the workflow.
|
|
"""
|
|
|
|
write = """
|
|
The project is the ticket's own `key`, else that of the nearest container above it, else `key` here.
|
|
tracker_id is the work item's key and remote its url.
|
|
Create:
|
|
`acli jira workitem create --project <key> --type <per [tickets.types]> --summary <t>
|
|
--description-file <b> --parent <key> --label <type>[,hitl,risk-<risk>]`, priority per `fields` on
|
|
a bug. Changes: `edit` (body, labels), `assign`, `transition --status <[tickets.status].<state>>` —
|
|
status never moves by edit — `link create --out <blocker> --in <blocked> --type "Blocks"`,
|
|
`comment create`. No parent: omit --parent — the item sits loose in the project. Custom fields go through --from-json; when dropped shares a status with done,
|
|
set the resolution the same way so the two stay distinct.
|
|
Epics sit loose in the project while [tickets.types].initiative is empty. Set that type only when the
|
|
project has a level above Epic; then epics take it as --parent.
|
|
"""
|
|
|
|
query = """
|
|
One work item: `acli jira workitem view <key> --json --fields
|
|
key,issuetype,summary,status,assignee,parent,labels,issuelinks,resolution,description`. after is the
|
|
"is blocked by" links; Done with resolution Won't Do is dropped; the description's covers holds the source requirement ids. Children:
|
|
`search --jql "parent = <key>"`. Words: `search --jql 'project = <key> AND text ~ "<words>"'`,
|
|
narrowed by issuetype or status per the maps.
|
|
"""
|
|
|
|
# BMad type -> this store's type.
|
|
[tickets.types]
|
|
initiative = "" # empty: the initiative stays local. Jira's default hierarchy is Epic > Story > Subtask; a level above Epic needs Plans (Premium or Enterprise). Set to "Initiative" only when the project has that level.
|
|
epic = "Epic"
|
|
story = "Story"
|
|
spike = "Task" # plus label spike
|
|
bug = "Bug"
|
|
|
|
# BMad state -> this store's status.
|
|
[tickets.status]
|
|
backlog = "To Do"
|
|
in-progress = "In Progress"
|
|
review = "In Review" # not a default Jira status; `setup` asks for it. With no review status, set it to the in-progress one
|
|
done = "Done"
|
|
dropped = "Done" # Jira default has no separate status; resolution Won't Do distinguishes it
|