ma-agents 3.18.0 → 3.18.1-beta.1

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.
Files changed (61) hide show
  1. package/bin/cli.js +4 -2
  2. package/lib/bmad-cache/cache-manifest.json +3 -0
  3. package/lib/bmad-extension/.claude-plugin/marketplace.json.template +1 -0
  4. package/lib/bmad-extension/skills/add-sprint/SKILL.md +12 -0
  5. package/lib/bmad-extension/skills/add-to-sprint/SKILL.md +12 -0
  6. package/lib/bmad-extension/skills/bmad-dev-story/workflow.md +12 -0
  7. package/lib/bmad-extension/skills/bmad-sprint-planning/workflow.md +12 -0
  8. package/lib/bmad-extension/skills/bmad-sprint-status/workflow.md +12 -0
  9. package/lib/bmad-extension/skills/cleanup-done/SKILL.md +12 -0
  10. package/lib/bmad-extension/skills/close-sprint/SKILL.md +12 -0
  11. package/lib/bmad-extension/skills/generate-backlog/SKILL.md +12 -0
  12. package/lib/bmad-extension/skills/modify-sprint/SKILL.md +12 -0
  13. package/lib/bmad-extension/skills/module-help.csv +1 -0
  14. package/lib/bmad-extension/skills/module.yaml +1 -1
  15. package/lib/bmad-extension/skills/my-next-issue/.gitkeep +0 -0
  16. package/lib/bmad-extension/skills/my-next-issue/SKILL.md +195 -0
  17. package/lib/bmad-extension/skills/my-next-issue/bmad-skill-manifest.yaml +3 -0
  18. package/lib/bmad-extension/skills/prioritize-backlog/SKILL.md +12 -0
  19. package/lib/bmad-extension/skills/remove-from-sprint/SKILL.md +12 -0
  20. package/lib/bmad-extension/skills/sprint-status-view/SKILL.md +12 -0
  21. package/lib/bmad-extension/workflows/add-sprint/workflow.md +12 -0
  22. package/lib/bmad-extension/workflows/add-to-sprint/workflow.md +12 -0
  23. package/lib/bmad-extension/workflows/modify-sprint/workflow.md +12 -0
  24. package/lib/bmad-extension/workflows/sprint-status-view/workflow.md +12 -0
  25. package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +2 -1
  26. package/lib/bmad-extension-plugin/skills/add-sprint/SKILL.md +12 -0
  27. package/lib/bmad-extension-plugin/skills/add-to-sprint/SKILL.md +12 -0
  28. package/lib/bmad-extension-plugin/skills/bmad-dev-story/workflow.md +12 -0
  29. package/lib/bmad-extension-plugin/skills/bmad-sprint-planning/workflow.md +12 -0
  30. package/lib/bmad-extension-plugin/skills/bmad-sprint-status/workflow.md +12 -0
  31. package/lib/bmad-extension-plugin/skills/cleanup-done/SKILL.md +12 -0
  32. package/lib/bmad-extension-plugin/skills/close-sprint/SKILL.md +12 -0
  33. package/lib/bmad-extension-plugin/skills/generate-backlog/SKILL.md +12 -0
  34. package/lib/bmad-extension-plugin/skills/modify-sprint/SKILL.md +12 -0
  35. package/lib/bmad-extension-plugin/skills/module-help.csv +1 -0
  36. package/lib/bmad-extension-plugin/skills/module.yaml +1 -1
  37. package/lib/bmad-extension-plugin/skills/my-next-issue/.gitkeep +0 -0
  38. package/lib/bmad-extension-plugin/skills/my-next-issue/SKILL.md +195 -0
  39. package/lib/bmad-extension-plugin/skills/my-next-issue/bmad-skill-manifest.yaml +3 -0
  40. package/lib/bmad-extension-plugin/skills/prioritize-backlog/SKILL.md +12 -0
  41. package/lib/bmad-extension-plugin/skills/remove-from-sprint/SKILL.md +12 -0
  42. package/lib/bmad-extension-plugin/skills/sprint-status-view/SKILL.md +12 -0
  43. package/lib/bmad.js +148 -9
  44. package/lib/fs-retry-preload.js +70 -0
  45. package/lib/knowledge-atlas/dist/atlas.cjs +14651 -14651
  46. package/package.json +2 -2
  47. package/scripts/build-bmad-cache.js +17 -0
  48. package/skills/add-sprint/SKILL.md +12 -0
  49. package/skills/add-to-sprint/SKILL.md +12 -0
  50. package/skills/bmad-sprint-planning/SKILL.md +12 -0
  51. package/skills/bmad-sprint-status/SKILL.md +12 -0
  52. package/skills/cleanup-done/SKILL.md +12 -0
  53. package/skills/close-sprint/SKILL.md +12 -0
  54. package/skills/generate-backlog/SKILL.md +12 -0
  55. package/skills/modify-sprint/SKILL.md +12 -0
  56. package/skills/my-next-issue/SKILL.md +184 -0
  57. package/skills/my-next-issue/skill.json +7 -0
  58. package/skills/prioritize-backlog/SKILL.md +12 -0
  59. package/skills/remove-from-sprint/SKILL.md +12 -0
  60. package/skills/sprint-status-view/SKILL.md +12 -0
  61. 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
  }
@@ -95,6 +95,7 @@
95
95
  "./skills/create-bug-story",
96
96
  "./skills/generate-backlog",
97
97
  "./skills/modify-sprint",
98
+ "./skills/my-next-issue",
98
99
  "./skills/prioritize-backlog",
99
100
  "./skills/project-context-expansion",
100
101
  "./skills/remove-from-sprint",
@@ -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",
@@ -15,6 +15,6 @@
15
15
  code: ma-skills
16
16
  name: "MA-Agents Skills & Agents"
17
17
  description: "Enterprise methodology enforcement, specialized agents, and operational workflows"
18
- module_version: "3.7.0"
18
+ module_version: "3.8.0"
19
19
  extends-module: bmm
20
20
  default_selected: false
@@ -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>
@@ -0,0 +1,3 @@
1
+ type: skill
2
+ name: my-next-issue
3
+ module: ma-skills
@@ -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.