ma-agents 3.18.0-beta.3 → 3.18.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +4 -2
- package/lib/bmad-cache/cache-manifest.json +3 -0
- package/lib/bmad-extension/.claude-plugin/marketplace.json.template +1 -0
- package/lib/bmad-extension/skills/add-sprint/SKILL.md +12 -0
- package/lib/bmad-extension/skills/add-to-sprint/SKILL.md +12 -0
- package/lib/bmad-extension/skills/bmad-dev-story/workflow.md +12 -0
- package/lib/bmad-extension/skills/bmad-sprint-planning/workflow.md +12 -0
- package/lib/bmad-extension/skills/bmad-sprint-status/workflow.md +12 -0
- package/lib/bmad-extension/skills/cleanup-done/SKILL.md +12 -0
- package/lib/bmad-extension/skills/close-sprint/SKILL.md +12 -0
- package/lib/bmad-extension/skills/generate-backlog/SKILL.md +12 -0
- package/lib/bmad-extension/skills/modify-sprint/SKILL.md +12 -0
- package/lib/bmad-extension/skills/module-help.csv +1 -0
- package/lib/bmad-extension/skills/module.yaml +1 -1
- package/lib/bmad-extension/skills/my-next-issue/.gitkeep +0 -0
- package/lib/bmad-extension/skills/my-next-issue/SKILL.md +195 -0
- package/lib/bmad-extension/skills/my-next-issue/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/prioritize-backlog/SKILL.md +12 -0
- package/lib/bmad-extension/skills/remove-from-sprint/SKILL.md +12 -0
- package/lib/bmad-extension/skills/sprint-status-view/SKILL.md +12 -0
- package/lib/bmad-extension/workflows/add-sprint/workflow.md +12 -0
- package/lib/bmad-extension/workflows/add-to-sprint/workflow.md +12 -0
- package/lib/bmad-extension/workflows/modify-sprint/workflow.md +12 -0
- package/lib/bmad-extension/workflows/sprint-status-view/workflow.md +12 -0
- package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +2 -1
- package/lib/bmad-extension-plugin/skills/add-sprint/SKILL.md +12 -0
- package/lib/bmad-extension-plugin/skills/add-to-sprint/SKILL.md +12 -0
- package/lib/bmad-extension-plugin/skills/bmad-dev-story/workflow.md +12 -0
- package/lib/bmad-extension-plugin/skills/bmad-sprint-planning/workflow.md +12 -0
- package/lib/bmad-extension-plugin/skills/bmad-sprint-status/workflow.md +12 -0
- package/lib/bmad-extension-plugin/skills/cleanup-done/SKILL.md +12 -0
- package/lib/bmad-extension-plugin/skills/close-sprint/SKILL.md +12 -0
- package/lib/bmad-extension-plugin/skills/generate-backlog/SKILL.md +12 -0
- package/lib/bmad-extension-plugin/skills/modify-sprint/SKILL.md +12 -0
- package/lib/bmad-extension-plugin/skills/module-help.csv +1 -0
- package/lib/bmad-extension-plugin/skills/module.yaml +1 -1
- package/lib/bmad-extension-plugin/skills/my-next-issue/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/my-next-issue/SKILL.md +195 -0
- package/lib/bmad-extension-plugin/skills/my-next-issue/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/prioritize-backlog/SKILL.md +12 -0
- package/lib/bmad-extension-plugin/skills/remove-from-sprint/SKILL.md +12 -0
- package/lib/bmad-extension-plugin/skills/sprint-status-view/SKILL.md +12 -0
- package/lib/bmad.js +125 -6
- package/lib/knowledge-atlas/dist/atlas.cjs +14651 -14651
- package/package.json +2 -2
- package/scripts/build-bmad-cache.js +17 -0
- package/skills/add-sprint/SKILL.md +12 -0
- package/skills/add-to-sprint/SKILL.md +12 -0
- package/skills/bmad-sprint-planning/SKILL.md +12 -0
- package/skills/bmad-sprint-status/SKILL.md +12 -0
- package/skills/cleanup-done/SKILL.md +12 -0
- package/skills/close-sprint/SKILL.md +12 -0
- package/skills/generate-backlog/SKILL.md +12 -0
- package/skills/modify-sprint/SKILL.md +12 -0
- package/skills/my-next-issue/SKILL.md +184 -0
- package/skills/my-next-issue/skill.json +7 -0
- package/skills/prioritize-backlog/SKILL.md +12 -0
- package/skills/remove-from-sprint/SKILL.md +12 -0
- package/skills/sprint-status-view/SKILL.md +12 -0
- package/skills/story-status-lookup/SKILL.md +12 -0
package/bin/cli.js
CHANGED
|
@@ -159,7 +159,9 @@ ${chalk.bold('Install options:')}
|
|
|
159
159
|
${chalk.cyan('--bmad-modules [csv]')} Control BMAD module selection.
|
|
160
160
|
Bare: open a multiselect prompt (offers every
|
|
161
161
|
bundled module: bmm, tea, bmb, cis)
|
|
162
|
-
With CSV: install exactly those (e.g. tea,bmb
|
|
162
|
+
With CSV: install exactly those (e.g. "tea,bmb" —
|
|
163
|
+
quote it: PowerShell splits a bare
|
|
164
|
+
comma list into separate arguments)
|
|
163
165
|
Omitted: install bmm,tea,bmb,cis (default)
|
|
164
166
|
'bmm' is always force-included. The design-studio
|
|
165
167
|
modules gds and wds are not bundled and cannot be
|
|
@@ -193,7 +195,7 @@ ${chalk.bold('Examples:')}
|
|
|
193
195
|
npx ${NAME} install --yes
|
|
194
196
|
npx ${NAME} install --yes --agent claude-code
|
|
195
197
|
npx ${NAME} install --yes --global
|
|
196
|
-
npx ${NAME} install --yes --bmad-modules bmm,tea,bmb
|
|
198
|
+
npx ${NAME} install --yes --bmad-modules "bmm,tea,bmb" # quote the list in PowerShell
|
|
197
199
|
npx ${NAME} install --bmad-modules # prompt for modules
|
|
198
200
|
npx ${NAME} install --yes --bmad-custom-source ./org-marketplace
|
|
199
201
|
npx ${NAME} install --bmad-custom-source git@git.intra.example:team/bmad-marketplace.git
|
|
@@ -7,18 +7,21 @@
|
|
|
7
7
|
"url": "https://github.com/bmad-code-org/bmad-method-test-architecture-enterprise",
|
|
8
8
|
"branch": "main",
|
|
9
9
|
"commitSha": "8734d51f24071ddbcb3617390b5fcddb4128ef77",
|
|
10
|
+
"pinTag": "v1.19.0",
|
|
10
11
|
"clonedAt": "2026-06-13T15:11:39.614Z"
|
|
11
12
|
},
|
|
12
13
|
"bmb": {
|
|
13
14
|
"url": "https://github.com/bmad-code-org/bmad-builder",
|
|
14
15
|
"branch": "main",
|
|
15
16
|
"commitSha": "e6935f2776c34ffd9b18f4ef1e334584ef10a50f",
|
|
17
|
+
"pinTag": "v2.1.0",
|
|
16
18
|
"clonedAt": "2026-06-27T14:28:16.693Z"
|
|
17
19
|
},
|
|
18
20
|
"cis": {
|
|
19
21
|
"url": "https://github.com/bmad-code-org/bmad-module-creative-intelligence-suite",
|
|
20
22
|
"branch": "main",
|
|
21
23
|
"commitSha": "07a8dd03d196a762f21c241d985293fe5b0f90e7",
|
|
24
|
+
"pinTag": "v0.2.1",
|
|
22
25
|
"clonedAt": "2026-06-13T15:11:42.507Z"
|
|
23
26
|
}
|
|
24
27
|
}
|
|
@@ -136,6 +136,18 @@ Before executing any file-system operations, determine and route to the correct
|
|
|
136
136
|
3. If `tracking_system` is `jira`:
|
|
137
137
|
a. Perform the Jira operation: Create a new sprint in the board for project `{jira_project_key}` at `{jira_url}` using the sprint create API. Set the sprint name, goal (if provided), start date, and end date from the provided sprint data. The new sprint starts in "future/planning" state.
|
|
138
138
|
Use whatever Jira-capable tool is available in your current tool context.
|
|
139
|
+
Resolve the operating user from the Jira tool's OWN authenticated identity: in JQL,
|
|
140
|
+
`assignee = currentUser()`. Jira evaluates `currentUser()` against the credential the
|
|
141
|
+
tool already holds, so it needs no configuration and never goes stale. Do NOT derive
|
|
142
|
+
the user from the OS login name and do NOT store a Jira user id in config — a local
|
|
143
|
+
account name has no defined relation to an Atlassian accountId (it resolves to nothing
|
|
144
|
+
on Cloud, and can silently resolve to a DIFFERENT person on Server/DC where directory
|
|
145
|
+
usernames collide).
|
|
146
|
+
Whenever the request is scoped to the operator — "my issues", "assigned to me", "what
|
|
147
|
+
should I work on" — add `AND assignee = currentUser()` to the JQL.
|
|
148
|
+
If `currentUser()` resolves to no user (a shared service-account token), STOP and tell
|
|
149
|
+
the user that the Jira tool is authenticated as a shared account, so user-scoped
|
|
150
|
+
queries are unavailable. Do NOT silently widen the query back to whole-project scope.
|
|
139
151
|
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
140
152
|
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
141
153
|
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
@@ -138,6 +138,18 @@ Before executing any file-system operations, determine and route to the correct
|
|
|
138
138
|
3. If `tracking_system` is `jira`:
|
|
139
139
|
a. Perform the Jira operation: Find the Jira issue matching the item ID in project `{jira_project_key}` at `{jira_url}` (search by issue key or summary). Find the active sprint on the board for project `{jira_project_key}`. Move the issue to the active sprint using the "add issue to sprint" operation.
|
|
140
140
|
Use whatever Jira-capable tool is available in your current tool context.
|
|
141
|
+
Resolve the operating user from the Jira tool's OWN authenticated identity: in JQL,
|
|
142
|
+
`assignee = currentUser()`. Jira evaluates `currentUser()` against the credential the
|
|
143
|
+
tool already holds, so it needs no configuration and never goes stale. Do NOT derive
|
|
144
|
+
the user from the OS login name and do NOT store a Jira user id in config — a local
|
|
145
|
+
account name has no defined relation to an Atlassian accountId (it resolves to nothing
|
|
146
|
+
on Cloud, and can silently resolve to a DIFFERENT person on Server/DC where directory
|
|
147
|
+
usernames collide).
|
|
148
|
+
Whenever the request is scoped to the operator — "my issues", "assigned to me", "what
|
|
149
|
+
should I work on" — add `AND assignee = currentUser()` to the JQL.
|
|
150
|
+
If `currentUser()` resolves to no user (a shared service-account token), STOP and tell
|
|
151
|
+
the user that the Jira tool is authenticated as a shared account, so user-scoped
|
|
152
|
+
queries are unavailable. Do NOT silently widen the query back to whole-project scope.
|
|
141
153
|
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
142
154
|
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
143
155
|
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
@@ -161,6 +161,18 @@ Before executing any status-update operations, determine and route to the correc
|
|
|
161
161
|
3. If `tracking_system` is `jira`:
|
|
162
162
|
a. Perform the Jira operation: Find the Jira issue matching the item ID in project `{jira_project_key}` at `{jira_url}` (search by issue key or summary). Transition the issue to the new status using the Jira issue transition API. Map canonical status to Jira workflow status: backlog → Backlog/Open, ready-for-dev → To Do/Selected for Development, in-progress → In Progress, review → In Review/Code Review, done → Done/Resolved, on-hold → On Hold/Blocked, cancelled → Won't Do/Cancelled.
|
|
163
163
|
Use whatever Jira-capable tool is available in your current tool context.
|
|
164
|
+
Resolve the operating user from the Jira tool's OWN authenticated identity: in JQL,
|
|
165
|
+
`assignee = currentUser()`. Jira evaluates `currentUser()` against the credential the
|
|
166
|
+
tool already holds, so it needs no configuration and never goes stale. Do NOT derive
|
|
167
|
+
the user from the OS login name and do NOT store a Jira user id in config — a local
|
|
168
|
+
account name has no defined relation to an Atlassian accountId (it resolves to nothing
|
|
169
|
+
on Cloud, and can silently resolve to a DIFFERENT person on Server/DC where directory
|
|
170
|
+
usernames collide).
|
|
171
|
+
Whenever the request is scoped to the operator — "my issues", "assigned to me", "what
|
|
172
|
+
should I work on" — add `AND assignee = currentUser()` to the JQL.
|
|
173
|
+
If `currentUser()` resolves to no user (a shared service-account token), STOP and tell
|
|
174
|
+
the user that the Jira tool is authenticated as a shared account, so user-scoped
|
|
175
|
+
queries are unavailable. Do NOT silently widen the query back to whole-project scope.
|
|
164
176
|
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
165
177
|
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
166
178
|
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
@@ -218,6 +218,18 @@ Before executing any file-system operations, determine and route to the correct
|
|
|
218
218
|
|
|
219
219
|
a. Perform the Jira operation: Query all epics, backlog issues, sprint definitions, and sprint items for project `{jira_project_key}` at `{jira_url}` (multiple sequential read calls). For the write phase: create new Jira sprints for each sprint definition not already in Jira (one API call per sprint). Create or update Jira issues for each item in the plan (one API call per item). Map item fields as follows: title → issue summary, type → issue type (story → Story, bug → Bug), status → Jira workflow status (see status mapping below), priority → issue priority/rank. Map sprint fields: name → sprint name, start_date → sprint start date, end_date → sprint end date. Status mapping: backlog → Backlog/Open, ready-for-dev → To Do/Selected for Development, in-progress → In Progress, review → In Review/Code Review, done → Done/Resolved, on-hold → On Hold/Blocked, cancelled → Won't Do/Cancelled.
|
|
220
220
|
Use whatever Jira-capable tool is available in your current tool context.
|
|
221
|
+
Resolve the operating user from the Jira tool's OWN authenticated identity: in JQL,
|
|
222
|
+
`assignee = currentUser()`. Jira evaluates `currentUser()` against the credential the
|
|
223
|
+
tool already holds, so it needs no configuration and never goes stale. Do NOT derive
|
|
224
|
+
the user from the OS login name and do NOT store a Jira user id in config — a local
|
|
225
|
+
account name has no defined relation to an Atlassian accountId (it resolves to nothing
|
|
226
|
+
on Cloud, and can silently resolve to a DIFFERENT person on Server/DC where directory
|
|
227
|
+
usernames collide).
|
|
228
|
+
Whenever the request is scoped to the operator — "my issues", "assigned to me", "what
|
|
229
|
+
should I work on" — add `AND assignee = currentUser()` to the JQL.
|
|
230
|
+
If `currentUser()` resolves to no user (a shared service-account token), STOP and tell
|
|
231
|
+
the user that the Jira tool is authenticated as a shared account, so user-scoped
|
|
232
|
+
queries are unavailable. Do NOT silently widen the query back to whole-project scope.
|
|
221
233
|
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
222
234
|
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
223
235
|
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
@@ -162,6 +162,18 @@ Before executing any file-system operations, determine and route to the correct
|
|
|
162
162
|
3. If `tracking_system` is `jira`:
|
|
163
163
|
a. Perform the Jira operation: Query the active sprint for project `{jira_project_key}` at `{jira_url}` and retrieve all sprint issues with their statuses. Query backlog issue count. Query epic progress (completed stories per epic). Map Jira sprint states and issue statuses to canonical vocabulary per the status mapping below. Use this data for health analysis — no writes. Status mapping: Backlog/Open → backlog, To Do/Selected for Development → ready-for-dev, In Progress → in-progress, In Review/Code Review → review, Done/Resolved → done, On Hold/Blocked → on-hold, Won't Do/Cancelled → cancelled.
|
|
164
164
|
Use whatever Jira-capable tool is available in your current tool context.
|
|
165
|
+
Resolve the operating user from the Jira tool's OWN authenticated identity: in JQL,
|
|
166
|
+
`assignee = currentUser()`. Jira evaluates `currentUser()` against the credential the
|
|
167
|
+
tool already holds, so it needs no configuration and never goes stale. Do NOT derive
|
|
168
|
+
the user from the OS login name and do NOT store a Jira user id in config — a local
|
|
169
|
+
account name has no defined relation to an Atlassian accountId (it resolves to nothing
|
|
170
|
+
on Cloud, and can silently resolve to a DIFFERENT person on Server/DC where directory
|
|
171
|
+
usernames collide).
|
|
172
|
+
Whenever the request is scoped to the operator — "my issues", "assigned to me", "what
|
|
173
|
+
should I work on" — add `AND assignee = currentUser()` to the JQL.
|
|
174
|
+
If `currentUser()` resolves to no user (a shared service-account token), STOP and tell
|
|
175
|
+
the user that the Jira tool is authenticated as a shared account, so user-scoped
|
|
176
|
+
queries are unavailable. Do NOT silently widen the query back to whole-project scope.
|
|
165
177
|
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
166
178
|
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
167
179
|
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
@@ -145,6 +145,18 @@ Before executing any file-system operations, determine and route to the correct
|
|
|
145
145
|
3. If `tracking_system` is `jira`:
|
|
146
146
|
a. Perform the Jira operation: Query all issues in project `{jira_project_key}` at `{jira_url}` with status Done/Resolved/Closed. For each such issue that maps to a local story file at `{story_location}/{id}.md`: transition the issue to the resolved/done Jira workflow state if not already there (using the issue transition API). Then move the local story file to `{story_location}/done/{id}.md` — this local file operation always executes regardless of backend. Note: Jira issues are NOT deleted; they remain in Jira as resolved.
|
|
147
147
|
Use whatever Jira-capable tool is available in your current tool context.
|
|
148
|
+
Resolve the operating user from the Jira tool's OWN authenticated identity: in JQL,
|
|
149
|
+
`assignee = currentUser()`. Jira evaluates `currentUser()` against the credential the
|
|
150
|
+
tool already holds, so it needs no configuration and never goes stale. Do NOT derive
|
|
151
|
+
the user from the OS login name and do NOT store a Jira user id in config — a local
|
|
152
|
+
account name has no defined relation to an Atlassian accountId (it resolves to nothing
|
|
153
|
+
on Cloud, and can silently resolve to a DIFFERENT person on Server/DC where directory
|
|
154
|
+
usernames collide).
|
|
155
|
+
Whenever the request is scoped to the operator — "my issues", "assigned to me", "what
|
|
156
|
+
should I work on" — add `AND assignee = currentUser()` to the JQL.
|
|
157
|
+
If `currentUser()` resolves to no user (a shared service-account token), STOP and tell
|
|
158
|
+
the user that the Jira tool is authenticated as a shared account, so user-scoped
|
|
159
|
+
queries are unavailable. Do NOT silently widen the query back to whole-project scope.
|
|
148
160
|
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
149
161
|
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
150
162
|
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
@@ -138,6 +138,18 @@ Before executing any file-system operations, determine and route to the correct
|
|
|
138
138
|
3. If `tracking_system` is `jira`:
|
|
139
139
|
a. Perform the Jira operation: Query all issues in the active sprint for project `{jira_project_key}` at `{jira_url}`. For done/cancelled items: transition each to resolved/done Jira state using the issue transition API; then move each corresponding local story file from `{story_location}/{id}.md` to `{story_location}/done/{id}.md` (local file operation — always executes). For incomplete items (not done/cancelled): remove each issue from the sprint using the "remove issue from sprint" operation (returns them to board backlog). Then close the sprint using the sprint close API.
|
|
140
140
|
Use whatever Jira-capable tool is available in your current tool context.
|
|
141
|
+
Resolve the operating user from the Jira tool's OWN authenticated identity: in JQL,
|
|
142
|
+
`assignee = currentUser()`. Jira evaluates `currentUser()` against the credential the
|
|
143
|
+
tool already holds, so it needs no configuration and never goes stale. Do NOT derive
|
|
144
|
+
the user from the OS login name and do NOT store a Jira user id in config — a local
|
|
145
|
+
account name has no defined relation to an Atlassian accountId (it resolves to nothing
|
|
146
|
+
on Cloud, and can silently resolve to a DIFFERENT person on Server/DC where directory
|
|
147
|
+
usernames collide).
|
|
148
|
+
Whenever the request is scoped to the operator — "my issues", "assigned to me", "what
|
|
149
|
+
should I work on" — add `AND assignee = currentUser()` to the JQL.
|
|
150
|
+
If `currentUser()` resolves to no user (a shared service-account token), STOP and tell
|
|
151
|
+
the user that the Jira tool is authenticated as a shared account, so user-scoped
|
|
152
|
+
queries are unavailable. Do NOT silently widen the query back to whole-project scope.
|
|
141
153
|
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
142
154
|
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
143
155
|
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
@@ -198,6 +198,18 @@ Before executing any file-system operations, determine and route to the correct
|
|
|
198
198
|
|
|
199
199
|
a. Perform the Jira operation: Query all Jira epics (issues of type Epic) in project `{jira_project_key}` at `{jira_url}` to build the epics map. Query all backlog issues (Story and Bug type, not assigned to any active sprint) in project `{jira_project_key}`. For any backlog items not already present in Jira, create new Jira issues (one API call per item). For existing items whose fields have changed, update them. Use the Jira field mapping: item.title → issue summary, item.type → issue type (story → Story, bug → Bug), item.status → Jira workflow status (see status mapping below), item.priority → issue priority. Status mapping: backlog → Backlog/Open, ready-for-dev → To Do/Selected for Development, in-progress → In Progress, review → In Review/Code Review, done → Done/Resolved, on-hold → On Hold/Blocked, cancelled → Won't Do/Cancelled.
|
|
200
200
|
Use whatever Jira-capable tool is available in your current tool context.
|
|
201
|
+
Resolve the operating user from the Jira tool's OWN authenticated identity: in JQL,
|
|
202
|
+
`assignee = currentUser()`. Jira evaluates `currentUser()` against the credential the
|
|
203
|
+
tool already holds, so it needs no configuration and never goes stale. Do NOT derive
|
|
204
|
+
the user from the OS login name and do NOT store a Jira user id in config — a local
|
|
205
|
+
account name has no defined relation to an Atlassian accountId (it resolves to nothing
|
|
206
|
+
on Cloud, and can silently resolve to a DIFFERENT person on Server/DC where directory
|
|
207
|
+
usernames collide).
|
|
208
|
+
Whenever the request is scoped to the operator — "my issues", "assigned to me", "what
|
|
209
|
+
should I work on" — add `AND assignee = currentUser()` to the JQL.
|
|
210
|
+
If `currentUser()` resolves to no user (a shared service-account token), STOP and tell
|
|
211
|
+
the user that the Jira tool is authenticated as a shared account, so user-scoped
|
|
212
|
+
queries are unavailable. Do NOT silently widen the query back to whole-project scope.
|
|
201
213
|
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
202
214
|
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
203
215
|
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
@@ -139,6 +139,18 @@ Before executing any file-system operations, determine and route to the correct
|
|
|
139
139
|
3. If `tracking_system` is `jira`:
|
|
140
140
|
a. Perform the Jira operation: Find the sprint by name or ID in the board for project `{jira_project_key}` at `{jira_url}`. Update the sprint's name, dates, or goal using the sprint update API. If the status is being changed to `active`: start the sprint using the sprint start API (transitions the sprint from future/planning to active state — enforces the single-active-sprint constraint).
|
|
141
141
|
Use whatever Jira-capable tool is available in your current tool context.
|
|
142
|
+
Resolve the operating user from the Jira tool's OWN authenticated identity: in JQL,
|
|
143
|
+
`assignee = currentUser()`. Jira evaluates `currentUser()` against the credential the
|
|
144
|
+
tool already holds, so it needs no configuration and never goes stale. Do NOT derive
|
|
145
|
+
the user from the OS login name and do NOT store a Jira user id in config — a local
|
|
146
|
+
account name has no defined relation to an Atlassian accountId (it resolves to nothing
|
|
147
|
+
on Cloud, and can silently resolve to a DIFFERENT person on Server/DC where directory
|
|
148
|
+
usernames collide).
|
|
149
|
+
Whenever the request is scoped to the operator — "my issues", "assigned to me", "what
|
|
150
|
+
should I work on" — add `AND assignee = currentUser()` to the JQL.
|
|
151
|
+
If `currentUser()` resolves to no user (a shared service-account token), STOP and tell
|
|
152
|
+
the user that the Jira tool is authenticated as a shared account, so user-scoped
|
|
153
|
+
queries are unavailable. Do NOT silently widen the query back to whole-project scope.
|
|
142
154
|
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
143
155
|
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
144
156
|
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
@@ -46,6 +46,7 @@ ma-skills,4-implementation,Sprint Status Health,bmad-sprint-status,,skill:bmad-s
|
|
|
46
46
|
ma-skills,4-implementation,Cleanup Done,cleanup-done,,skill:cleanup-done,cleanup-done,false,bmm-sm,,"Archive done and cancelled items — remove from sprint-status.yaml and move files to done/ subfolder.",_bmad-output/implementation-artifacts,"archival",
|
|
47
47
|
ma-skills,4-implementation,Close Sprint,close-sprint,,skill:close-sprint,close-sprint,false,bmm-sm,,"Close an active sprint — archive done/cancelled items, disposition incomplete items, set sprint status to closed.",_bmad-output/implementation-artifacts,"sprint plan",
|
|
48
48
|
ma-skills,4-implementation,Prioritize Backlog,prioritize-backlog,,skill:prioritize-backlog,prioritize-backlog,false,bmm-sm,,"Reprioritize backlog items using multiple criteria -- severity, business value, dependencies, type, age.",_bmad-output/implementation-artifacts,"backlog",
|
|
49
|
+
ma-skills,4-implementation,My Next Issue,my-next-issue,,skill:my-next-issue,my-next-issue,false,bmm-sm,,"Return the highest-priority open item assigned to the operating user (Jira: assignee = currentUser()) and answer 'what should I work on next?'.",_bmad-output/implementation-artifacts,"issue selection",
|
|
49
50
|
ma-skills,4-implementation,Project Context Expansion,project-context-expansion,,skill:project-context-expansion,project-context-expansion,false,bmm-sm,,"Post-retrospective companion to update project-context.md with new rules.",_bmad-output,"project context",
|
|
50
51
|
ma-skills,4-implementation,Requirements Quality Audit,sqa-requirements-quality,,skill:sqa-requirements-quality,sqa-requirements-quality,false,bmm-qa,,"Evaluate project requirements against 14 quality criteria — produces a per-requirement audit table, missing-elements section, and overall quality score.",_bmad-output,"quality report",
|
|
51
52
|
ma-skills,anytime,Knowledge Atlas,bmad-knowledge,,skill:bmad-knowledge,bmad-knowledge,false,bmm-sm,,"Generate a self-contained Knowledge Atlas HTML site from project planning and implementation artifacts.",_bmad-output/knowledge-site,"knowledge site",
|
|
File without changes
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: my-next-issue
|
|
3
|
+
description: Return the highest-priority open item assigned to the operating user (Jira: assignee = currentUser()) and answer "what should I work on next?"
|
|
4
|
+
type: skill
|
|
5
|
+
triggers:
|
|
6
|
+
- "my next issue"
|
|
7
|
+
- "what should I work on"
|
|
8
|
+
- "most important issue assigned to me"
|
|
9
|
+
- "/my-next-issue"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# My Next Issue
|
|
13
|
+
|
|
14
|
+
Answer the question "what should **I** work on next?" — return the single
|
|
15
|
+
highest-priority open item **assigned to the operating user**, with the runners-up
|
|
16
|
+
listed for context.
|
|
17
|
+
|
|
18
|
+
This is the user-scoped counterpart to `sprint-status-view` (whole board) and
|
|
19
|
+
`prioritize-backlog` (whole backlog reordering). Neither of those filters by
|
|
20
|
+
assignee, so neither can answer this question.
|
|
21
|
+
|
|
22
|
+
> **READ-ONLY SKILL:** This skill NEVER writes to `sprint-status.yaml`, to Jira, or
|
|
23
|
+
> to any other file. It selects and reports; it does not transition, assign, or
|
|
24
|
+
> reorder anything. To start work on what it returns, hand the item to `bmad-dev-story`.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Backend Routing
|
|
29
|
+
|
|
30
|
+
Before executing any file-system operations, determine and route to the correct backend:
|
|
31
|
+
|
|
32
|
+
1. Read `_bmad-output/implementation-artifacts/sprint-status.yaml` and extract the `tracking_system` field.
|
|
33
|
+
If the field is absent or the file does not exist, read `sprint_backend` from `_bmad/bmm/config.yaml`. Use that value if present, otherwise default to `file-system`.
|
|
34
|
+
|
|
35
|
+
2. If `tracking_system` is `file-system`:
|
|
36
|
+
Proceed with the **File-System Backend** instructions below.
|
|
37
|
+
|
|
38
|
+
3. If `tracking_system` is `jira`:
|
|
39
|
+
a. Perform the Jira operation: Query the open issues assigned to the operating user in project `{jira_project_key}` at `{jira_url}` with the JQL
|
|
40
|
+
`project = {jira_project_key} AND assignee = currentUser() AND statusCategory != Done ORDER BY priority DESC, rank ASC`.
|
|
41
|
+
Prefer issues in the board's active sprint over backlog issues; within the same
|
|
42
|
+
scope, rank by the ORDER BY above. Return the top issue plus the next four as
|
|
43
|
+
runners-up.
|
|
44
|
+
Use whatever Jira-capable tool is available in your current tool context.
|
|
45
|
+
Resolve the operating user from the Jira tool's OWN authenticated identity: in JQL,
|
|
46
|
+
`assignee = currentUser()`. Jira evaluates `currentUser()` against the credential the
|
|
47
|
+
tool already holds, so it needs no configuration and never goes stale. Do NOT derive
|
|
48
|
+
the user from the OS login name and do NOT store a Jira user id in config — a local
|
|
49
|
+
account name has no defined relation to an Atlassian accountId (it resolves to nothing
|
|
50
|
+
on Cloud, and can silently resolve to a DIFFERENT person on Server/DC where directory
|
|
51
|
+
usernames collide).
|
|
52
|
+
Whenever the request is scoped to the operator — "my issues", "assigned to me", "what
|
|
53
|
+
should I work on" — add `AND assignee = currentUser()` to the JQL.
|
|
54
|
+
If `currentUser()` resolves to no user (a shared service-account token), STOP and tell
|
|
55
|
+
the user that the Jira tool is authenticated as a shared account, so user-scoped
|
|
56
|
+
queries are unavailable. Do NOT silently widen the query back to whole-project scope.
|
|
57
|
+
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
58
|
+
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
59
|
+
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
60
|
+
c. If the Jira operation FAILS for any reason:
|
|
61
|
+
- If no Jira-capable tool is available in your current context:
|
|
62
|
+
Pause and present the user with:
|
|
63
|
+
> "No Jira-capable tool is available. To use Jira tracking, configure a Jira integration
|
|
64
|
+
> in your agent (an MCP server, plugin, or native integration connected to the Jira
|
|
65
|
+
> instance at `{jira_url}`). How would you like to proceed?
|
|
66
|
+
> (a) Retry — attempt the Jira operation again once a Jira tool is configured
|
|
67
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
68
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
69
|
+
- If a Jira tool attempted the operation but returned an error:
|
|
70
|
+
Pause and present the user with:
|
|
71
|
+
> "The Jira operation failed: {actual Jira error details}. How would you like to proceed?
|
|
72
|
+
> (a) Retry — attempt the Jira operation again
|
|
73
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
74
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
75
|
+
If user chooses (b) in either case: write `tracking_system: file-system` to `sprint-status.yaml`,
|
|
76
|
+
update `sprint_backend: file-system` in `_bmad/bmm/config.yaml`,
|
|
77
|
+
then proceed with **File-System Backend** instructions below.
|
|
78
|
+
|
|
79
|
+
4. **File-System Backend** — execute the workflow steps below.
|
|
80
|
+
|
|
81
|
+
### A note on assignee under the file-system backend
|
|
82
|
+
|
|
83
|
+
`sprint-status.yaml` has no assignee field, and it does not need one: the file-system
|
|
84
|
+
backend is inherently **single-operator** — whoever owns the working tree owns the
|
|
85
|
+
file. Under this backend the assignee filter is therefore a deliberate no-op, and the
|
|
86
|
+
skill degrades to "the highest-priority item I could pick up next". Do NOT invent an
|
|
87
|
+
assignee field, do NOT read the OS login name, and do NOT ask the user who they are.
|
|
88
|
+
State the degradation once in the output so the answer is not mistaken for a
|
|
89
|
+
user-scoped result on a shared board.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
<workflow>
|
|
94
|
+
|
|
95
|
+
<step n="0" goal="Load state">
|
|
96
|
+
<action>Read `_bmad-output/implementation-artifacts/sprint-status.yaml` — the single source of truth for all sprint and backlog state.</action>
|
|
97
|
+
<check if="sprint-status.yaml does not exist">
|
|
98
|
+
<output>No sprint-status.yaml found. Run `bmad-sprint-planning` first to initialize the file.</output>
|
|
99
|
+
<action>Exit workflow — do not create any file.</action>
|
|
100
|
+
</check>
|
|
101
|
+
<action>Parse the `epics`, `backlog` and `sprints` sections. Store as {{file_data}}.</action>
|
|
102
|
+
</step>
|
|
103
|
+
|
|
104
|
+
<step n="1" goal="Build the candidate set">
|
|
105
|
+
<action>Collect candidates in this precedence order:
|
|
106
|
+
1. Items in the **active** sprint (`status: active`) whose item status is `ready-for-dev` or `in-progress`.
|
|
107
|
+
2. If no sprint is active, or the active sprint yields no candidates: items from `backlog` whose status is `ready-for-dev`.
|
|
108
|
+
</action>
|
|
109
|
+
<action>EXCLUDE any item whose status is `done`, `cancelled`, `wont-fix`, `review`, or `on-hold`. An item in `review` is finished work awaiting someone else; an `on-hold`/`blocked` item cannot be started.</action>
|
|
110
|
+
<action>EXCLUDE any item with an unsatisfied `blocked-on` dependency — that is, any item listing a blocker whose own status is not `done`. Record these separately as {{blocked_items}} so they can be reported rather than silently dropped.</action>
|
|
111
|
+
<check if="candidate set is empty">
|
|
112
|
+
<output>
|
|
113
|
+
## Nothing ready to pick up
|
|
114
|
+
|
|
115
|
+
No item is currently `ready-for-dev` or `in-progress`{{#if active_sprint}} in sprint **{{active_sprint.name}}**{{/if}}.
|
|
116
|
+
|
|
117
|
+
{{#if blocked_items.length > 0}}
|
|
118
|
+
**{{blocked_items.length}} item(s) are ready but blocked:**
|
|
119
|
+
|
|
120
|
+
| ID | Title | Blocked on | Blocker status |
|
|
121
|
+
|---|---|---|---|
|
|
122
|
+
{{#each blocked_items}}
|
|
123
|
+
| {{id}} | {{title}} | {{blocked_on}} | {{blocker_status}} |
|
|
124
|
+
{{/each}}
|
|
125
|
+
{{/if}}
|
|
126
|
+
|
|
127
|
+
**Next steps:**
|
|
128
|
+
- `/add-to-sprint` — pull `ready-for-dev` backlog items into the active sprint
|
|
129
|
+
- `/bmad-create-story` — prepare the next story if the backlog has none ready
|
|
130
|
+
- `/sprint-status-view` — see the whole board
|
|
131
|
+
</output>
|
|
132
|
+
<action>Exit workflow.</action>
|
|
133
|
+
</check>
|
|
134
|
+
</step>
|
|
135
|
+
|
|
136
|
+
<step n="2" goal="Rank the candidates">
|
|
137
|
+
<action>Score each candidate with the SAME composite criteria `prioritize-backlog` uses, so the two skills never disagree about what "most important" means:
|
|
138
|
+
- **Severity:** critical +40, high +30, medium +10, low +5, none +0
|
|
139
|
+
- **Business value:** the item's existing `priority` value (lower = more important) contributes `max(0, (N - priority + 1) * 2)` where N is the candidate count
|
|
140
|
+
- **Dependency:** +15 if this item blocks others
|
|
141
|
+
- **Type:** bug +3, story +0
|
|
142
|
+
- **Age:** lower-numbered epics get a small starvation-prevention boost
|
|
143
|
+
</action>
|
|
144
|
+
<action>Apply two selection rules that outrank the composite score:
|
|
145
|
+
1. An `in-progress` item always wins over a `ready-for-dev` item — finish what is started before starting more.
|
|
146
|
+
2. An active-sprint item always wins over a backlog item.
|
|
147
|
+
</action>
|
|
148
|
+
<action>Sort by (in-progress first, then active-sprint first, then composite score descending). Break ties by `priority` ascending, then by ID.</action>
|
|
149
|
+
<action>Store {{top}} = first item, {{runners_up}} = next four.</action>
|
|
150
|
+
</step>
|
|
151
|
+
|
|
152
|
+
<step n="3" goal="Report">
|
|
153
|
+
<output>
|
|
154
|
+
## Work on this next
|
|
155
|
+
|
|
156
|
+
**{{top.id}}** — {{top.title}}
|
|
157
|
+
|
|
158
|
+
| | |
|
|
159
|
+
|---|---|
|
|
160
|
+
| Type | {{top.type}} |
|
|
161
|
+
| Status | {{top.status}} |
|
|
162
|
+
| Epic | {{#if top.epic}}epic-{{top.epic}}{{else}}—{{/if}} |
|
|
163
|
+
| Severity | {{top.severity or "—"}} |
|
|
164
|
+
| Scope | {{#if top.in_active_sprint}}active sprint — {{active_sprint.name}}{{else}}backlog{{/if}} |
|
|
165
|
+
| Story file | {{top.story_file_path or "not yet created"}} |
|
|
166
|
+
|
|
167
|
+
**Why this one:** {{top.rationale}}
|
|
168
|
+
|
|
169
|
+
{{#if runners_up.length > 0}}
|
|
170
|
+
### Next in line
|
|
171
|
+
|
|
172
|
+
| ID | Title | Type | Status | Why lower |
|
|
173
|
+
|---|---|---|---|---|
|
|
174
|
+
{{#each runners_up}}
|
|
175
|
+
| {{id}} | {{title}} | {{type}} | {{status}} | {{reason}} |
|
|
176
|
+
{{/each}}
|
|
177
|
+
{{/if}}
|
|
178
|
+
|
|
179
|
+
{{#if blocked_items.length > 0}}
|
|
180
|
+
> **{{blocked_items.length}} item(s) excluded as blocked:** {{blocked_ids_list}}
|
|
181
|
+
{{/if}}
|
|
182
|
+
|
|
183
|
+
> **Note — file-system backend:** `sprint-status.yaml` tracks no assignee, so this is
|
|
184
|
+
> "the highest-priority item available to pick up", not "the highest-priority item
|
|
185
|
+
> assigned to you". On a Jira-backed project this same skill filters on
|
|
186
|
+
> `assignee = currentUser()`.
|
|
187
|
+
|
|
188
|
+
**Next steps:**
|
|
189
|
+
- `/bmad-dev-story {{top.id}}` — implement it
|
|
190
|
+
- `/bmad-create-story {{top.id}}` — prepare the story file first, if none exists
|
|
191
|
+
- `/prioritize-backlog` — if this ranking looks wrong
|
|
192
|
+
</output>
|
|
193
|
+
</step>
|
|
194
|
+
|
|
195
|
+
</workflow>
|
|
@@ -186,6 +186,18 @@ Before executing any file-system operations, determine and route to the correct
|
|
|
186
186
|
3. If `tracking_system` is `jira`:
|
|
187
187
|
a. Perform the Jira operation: Query all backlog issues (not assigned to any sprint) for project `{jira_project_key}` at `{jira_url}`. Apply the prioritization criteria specified by the user. Reorder the issues in the board backlog by updating the issue rank/priority order (use whatever ranking capability is available on the board — NextGen board issue ranking or classic board priority field). Map canonical priority back to Jira fields.
|
|
188
188
|
Use whatever Jira-capable tool is available in your current tool context.
|
|
189
|
+
Resolve the operating user from the Jira tool's OWN authenticated identity: in JQL,
|
|
190
|
+
`assignee = currentUser()`. Jira evaluates `currentUser()` against the credential the
|
|
191
|
+
tool already holds, so it needs no configuration and never goes stale. Do NOT derive
|
|
192
|
+
the user from the OS login name and do NOT store a Jira user id in config — a local
|
|
193
|
+
account name has no defined relation to an Atlassian accountId (it resolves to nothing
|
|
194
|
+
on Cloud, and can silently resolve to a DIFFERENT person on Server/DC where directory
|
|
195
|
+
usernames collide).
|
|
196
|
+
Whenever the request is scoped to the operator — "my issues", "assigned to me", "what
|
|
197
|
+
should I work on" — add `AND assignee = currentUser()` to the JQL.
|
|
198
|
+
If `currentUser()` resolves to no user (a shared service-account token), STOP and tell
|
|
199
|
+
the user that the Jira tool is authenticated as a shared account, so user-scoped
|
|
200
|
+
queries are unavailable. Do NOT silently widen the query back to whole-project scope.
|
|
189
201
|
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
190
202
|
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
191
203
|
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
@@ -136,6 +136,18 @@ Before executing any file-system operations, determine and route to the correct
|
|
|
136
136
|
3. If `tracking_system` is `jira`:
|
|
137
137
|
a. Perform the Jira operation: Find the Jira issue matching the item ID in project `{jira_project_key}` at `{jira_url}` (search by issue key or summary). Remove the issue from its current sprint using the "remove issue from sprint" operation, returning it to the board backlog.
|
|
138
138
|
Use whatever Jira-capable tool is available in your current tool context.
|
|
139
|
+
Resolve the operating user from the Jira tool's OWN authenticated identity: in JQL,
|
|
140
|
+
`assignee = currentUser()`. Jira evaluates `currentUser()` against the credential the
|
|
141
|
+
tool already holds, so it needs no configuration and never goes stale. Do NOT derive
|
|
142
|
+
the user from the OS login name and do NOT store a Jira user id in config — a local
|
|
143
|
+
account name has no defined relation to an Atlassian accountId (it resolves to nothing
|
|
144
|
+
on Cloud, and can silently resolve to a DIFFERENT person on Server/DC where directory
|
|
145
|
+
usernames collide).
|
|
146
|
+
Whenever the request is scoped to the operator — "my issues", "assigned to me", "what
|
|
147
|
+
should I work on" — add `AND assignee = currentUser()` to the JQL.
|
|
148
|
+
If `currentUser()` resolves to no user (a shared service-account token), STOP and tell
|
|
149
|
+
the user that the Jira tool is authenticated as a shared account, so user-scoped
|
|
150
|
+
queries are unavailable. Do NOT silently widen the query back to whole-project scope.
|
|
139
151
|
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
140
152
|
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
141
153
|
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
@@ -141,6 +141,18 @@ Before executing any file-system operations, determine and route to the correct
|
|
|
141
141
|
3. If `tracking_system` is `jira`:
|
|
142
142
|
a. Perform the Jira operation: Query all sprint data for project `{jira_project_key}` at `{jira_url}`: active sprint with all its issues and their statuses, backlog issues count and list, epic summary and progress. Map Jira sprint states to canonical vocabulary (future → planning, active → active, closed → closed). Map Jira issue statuses to canonical statuses per the status mapping below. Use this data for the display — no writes. Status mapping: Backlog/Open → backlog, To Do/Selected for Development → ready-for-dev, In Progress → in-progress, In Review/Code Review → review, Done/Resolved → done, On Hold/Blocked → on-hold, Won't Do/Cancelled → cancelled.
|
|
143
143
|
Use whatever Jira-capable tool is available in your current tool context.
|
|
144
|
+
Resolve the operating user from the Jira tool's OWN authenticated identity: in JQL,
|
|
145
|
+
`assignee = currentUser()`. Jira evaluates `currentUser()` against the credential the
|
|
146
|
+
tool already holds, so it needs no configuration and never goes stale. Do NOT derive
|
|
147
|
+
the user from the OS login name and do NOT store a Jira user id in config — a local
|
|
148
|
+
account name has no defined relation to an Atlassian accountId (it resolves to nothing
|
|
149
|
+
on Cloud, and can silently resolve to a DIFFERENT person on Server/DC where directory
|
|
150
|
+
usernames collide).
|
|
151
|
+
Whenever the request is scoped to the operator — "my issues", "assigned to me", "what
|
|
152
|
+
should I work on" — add `AND assignee = currentUser()` to the JQL.
|
|
153
|
+
If `currentUser()` resolves to no user (a shared service-account token), STOP and tell
|
|
154
|
+
the user that the Jira tool is authenticated as a shared account, so user-scoped
|
|
155
|
+
queries are unavailable. Do NOT silently widen the query back to whole-project scope.
|
|
144
156
|
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
145
157
|
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
146
158
|
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
@@ -127,6 +127,18 @@ Before executing any file-system operations, determine and route to the correct
|
|
|
127
127
|
3. If `tracking_system` is `jira`:
|
|
128
128
|
a. Perform the Jira operation: Create a new sprint in the board for project `{jira_project_key}` at `{jira_url}` using the sprint create API. Set the sprint name, goal (if provided), start date, and end date from the provided sprint data. The new sprint starts in "future/planning" state.
|
|
129
129
|
Use whatever Jira-capable tool is available in your current tool context.
|
|
130
|
+
Resolve the operating user from the Jira tool's OWN authenticated identity: in JQL,
|
|
131
|
+
`assignee = currentUser()`. Jira evaluates `currentUser()` against the credential the
|
|
132
|
+
tool already holds, so it needs no configuration and never goes stale. Do NOT derive
|
|
133
|
+
the user from the OS login name and do NOT store a Jira user id in config — a local
|
|
134
|
+
account name has no defined relation to an Atlassian accountId (it resolves to nothing
|
|
135
|
+
on Cloud, and can silently resolve to a DIFFERENT person on Server/DC where directory
|
|
136
|
+
usernames collide).
|
|
137
|
+
Whenever the request is scoped to the operator — "my issues", "assigned to me", "what
|
|
138
|
+
should I work on" — add `AND assignee = currentUser()` to the JQL.
|
|
139
|
+
If `currentUser()` resolves to no user (a shared service-account token), STOP and tell
|
|
140
|
+
the user that the Jira tool is authenticated as a shared account, so user-scoped
|
|
141
|
+
queries are unavailable. Do NOT silently widen the query back to whole-project scope.
|
|
130
142
|
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
131
143
|
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
132
144
|
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
@@ -129,6 +129,18 @@ Before executing any file-system operations, determine and route to the correct
|
|
|
129
129
|
3. If `tracking_system` is `jira`:
|
|
130
130
|
a. Perform the Jira operation: Find the Jira issue matching the item ID in project `{jira_project_key}` at `{jira_url}` (search by issue key or summary). Find the active sprint on the board for project `{jira_project_key}`. Move the issue to the active sprint using the "add issue to sprint" operation.
|
|
131
131
|
Use whatever Jira-capable tool is available in your current tool context.
|
|
132
|
+
Resolve the operating user from the Jira tool's OWN authenticated identity: in JQL,
|
|
133
|
+
`assignee = currentUser()`. Jira evaluates `currentUser()` against the credential the
|
|
134
|
+
tool already holds, so it needs no configuration and never goes stale. Do NOT derive
|
|
135
|
+
the user from the OS login name and do NOT store a Jira user id in config — a local
|
|
136
|
+
account name has no defined relation to an Atlassian accountId (it resolves to nothing
|
|
137
|
+
on Cloud, and can silently resolve to a DIFFERENT person on Server/DC where directory
|
|
138
|
+
usernames collide).
|
|
139
|
+
Whenever the request is scoped to the operator — "my issues", "assigned to me", "what
|
|
140
|
+
should I work on" — add `AND assignee = currentUser()` to the JQL.
|
|
141
|
+
If `currentUser()` resolves to no user (a shared service-account token), STOP and tell
|
|
142
|
+
the user that the Jira tool is authenticated as a shared account, so user-scoped
|
|
143
|
+
queries are unavailable. Do NOT silently widen the query back to whole-project scope.
|
|
132
144
|
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
133
145
|
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
134
146
|
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
@@ -130,6 +130,18 @@ Before executing any file-system operations, determine and route to the correct
|
|
|
130
130
|
3. If `tracking_system` is `jira`:
|
|
131
131
|
a. Perform the Jira operation: Find the sprint by name or ID in the board for project `{jira_project_key}` at `{jira_url}`. Update the sprint's name, dates, or goal using the sprint update API. If the status is being changed to `active`: start the sprint using the sprint start API (transitions the sprint from future/planning to active state — enforces the single-active-sprint constraint).
|
|
132
132
|
Use whatever Jira-capable tool is available in your current tool context.
|
|
133
|
+
Resolve the operating user from the Jira tool's OWN authenticated identity: in JQL,
|
|
134
|
+
`assignee = currentUser()`. Jira evaluates `currentUser()` against the credential the
|
|
135
|
+
tool already holds, so it needs no configuration and never goes stale. Do NOT derive
|
|
136
|
+
the user from the OS login name and do NOT store a Jira user id in config — a local
|
|
137
|
+
account name has no defined relation to an Atlassian accountId (it resolves to nothing
|
|
138
|
+
on Cloud, and can silently resolve to a DIFFERENT person on Server/DC where directory
|
|
139
|
+
usernames collide).
|
|
140
|
+
Whenever the request is scoped to the operator — "my issues", "assigned to me", "what
|
|
141
|
+
should I work on" — add `AND assignee = currentUser()` to the JQL.
|
|
142
|
+
If `currentUser()` resolves to no user (a shared service-account token), STOP and tell
|
|
143
|
+
the user that the Jira tool is authenticated as a shared account, so user-scoped
|
|
144
|
+
queries are unavailable. Do NOT silently widen the query back to whole-project scope.
|
|
133
145
|
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
134
146
|
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
135
147
|
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
@@ -131,6 +131,18 @@ Before executing any file-system operations, determine and route to the correct
|
|
|
131
131
|
3. If `tracking_system` is `jira`:
|
|
132
132
|
a. Perform the Jira operation: Query all sprint data for project `{jira_project_key}` at `{jira_url}`: active sprint with all its issues and their statuses, backlog issues count and list, epic summary and progress. Map Jira sprint states to canonical vocabulary (future → planning, active → active, closed → closed). Map Jira issue statuses to canonical statuses per the status mapping below. Use this data for the display — no writes. Status mapping: Backlog/Open → backlog, To Do/Selected for Development → ready-for-dev, In Progress → in-progress, In Review/Code Review → review, Done/Resolved → done, On Hold/Blocked → on-hold, Won't Do/Cancelled → cancelled.
|
|
133
133
|
Use whatever Jira-capable tool is available in your current tool context.
|
|
134
|
+
Resolve the operating user from the Jira tool's OWN authenticated identity: in JQL,
|
|
135
|
+
`assignee = currentUser()`. Jira evaluates `currentUser()` against the credential the
|
|
136
|
+
tool already holds, so it needs no configuration and never goes stale. Do NOT derive
|
|
137
|
+
the user from the OS login name and do NOT store a Jira user id in config — a local
|
|
138
|
+
account name has no defined relation to an Atlassian accountId (it resolves to nothing
|
|
139
|
+
on Cloud, and can silently resolve to a DIFFERENT person on Server/DC where directory
|
|
140
|
+
usernames collide).
|
|
141
|
+
Whenever the request is scoped to the operator — "my issues", "assigned to me", "what
|
|
142
|
+
should I work on" — add `AND assignee = currentUser()` to the JQL.
|
|
143
|
+
If `currentUser()` resolves to no user (a shared service-account token), STOP and tell
|
|
144
|
+
the user that the Jira tool is authenticated as a shared account, so user-scoped
|
|
145
|
+
queries are unavailable. Do NOT silently widen the query back to whole-project scope.
|
|
134
146
|
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
135
147
|
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
136
148
|
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|