@mmerterden/multi-agent-pipeline 10.12.0 → 11.0.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/CHANGELOG.md CHANGED
@@ -14,6 +14,33 @@ Internal file-layout changes that don't affect the slash-command surface are sti
14
14
 
15
15
  ---
16
16
 
17
+ ## [11.0.0] - 2026-07-07
18
+
19
+ Breaking: the two issue creators `generate-task` and `generate-bug` are merged
20
+ into a single `generate` command. The command surface shrinks from 37 to 36
21
+ commands, so this is a major bump per the versioning policy (a renamed/removed
22
+ command is a breaking surface change).
23
+
24
+ - **New `/multi-agent:generate`** asks the issue type (Task / Bug / Story) at the
25
+ start of every run, then mines the project's recent same-type issues for
26
+ conventions and drafts the issue.
27
+ - **Standard template baseline with auto-sizing.** Each type has a fixed section
28
+ skeleton (Task/Story: Detailed Description, Scope, Acceptance Criteria, Test
29
+ Scenarios; Bug: Detailed Description, Steps to Reproduce, Expected/Actual
30
+ Result, Environment). Conditional sections (Design Reference, API Contract /
31
+ Swagger, Screenshots, Notes) render only when their trigger is present - no
32
+ empty placeholder headings, nothing invented.
33
+ - **Test Scenarios pulled from Jira convention.** Detects linked Xray/Zephyr test
34
+ issues or a dominant test-scenario heading style and reuses it; falls back to an
35
+ AC-derived skeleton the user edits.
36
+ - **Swagger / API Contract section.** When a Swagger/OpenAPI URL or contract is
37
+ given, fetches only the referenced endpoints (method + path + key fields) and
38
+ links the spec. No full-spec crawl; failures degrade to link-only.
39
+ - **Removed** `generate-task` and `generate-bug` on both CLIs (Claude Code +
40
+ Copilot) and the plugin skill set. The shared `refs/generate-issue.md` flow is
41
+ now 12 steps with a dedicated type-selection step; the hard approval gate is
42
+ unchanged.
43
+
17
44
  ## [10.12.0] - 2026-07-06
18
45
 
19
46
  Two trust upgrades: every external channel post now shows a plan-mode-style
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "10.12.0",
3
+ "version": "11.0.0",
4
4
  "description": "8-phase AI development pipeline with full orchestration on Claude Code and Copilot CLI. Analysis, planning, TDD, CLI-aware parallel review with consensus surfacing + Fable triage, default-FAIL evidence gates, secret + intent guards, per-phase cost ledger, persistent learnings memory, wiki generation, commit automation. Token-preserving uninstall.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -0,0 +1,34 @@
1
+ ---
2
+ description: "Create a standards-compliant Jira issue (Task / Bug / Story): asks the type, mines project conventions, drafts from a standard template with auto-sizing sections, full preview + explicit approval before create."
3
+ argument-hint: "[\"<free-text description>\"] [figma-url] [swagger-url] - all optional, asked interactively when missing"
4
+ ---
5
+
6
+ # multi-agent generate - Standards-Compliant Jira Issue Creator
7
+
8
+ **Input**: $ARGUMENTS
9
+
10
+ Creates exactly one Jira issue, and only after explicit approval. The issue type (Task / Bug / Story) is asked at the start of every run. No branches, no commits, no worktrees, no pipeline chaining. The draft learns the target project's conventions from its recent same-type issues (summary format, labels, components, priority norms, test-scenario style) and offers active-sprint placement when a sprint is running.
11
+
12
+ > **Language**: instruction prose here is English. AskUserQuestion `question`/`description` and the issue content (summary + description) follow `prefs.global.outputLanguage` - an intentional exception to the "external payloads stay English" default, because the issue is authored for the user's team. `label`/`header` stay English.
13
+
14
+ ## Issue types
15
+
16
+ Type is chosen at step [3/11] via AskUserQuestion (never inferred silently). Each type has a standard template baseline; sections auto-size (see `refs/generate-issue.md` for the full A/C matrix and inclusion rules).
17
+
18
+ | Type | Always-present sections | Conditional sections (included only when their trigger is present) |
19
+ |---|---|---|
20
+ | `Task` | Detailed Description, Scope, Acceptance Criteria, Test Scenarios | API Contract / Swagger, Design Reference, Screenshots, Notes |
21
+ | `Bug` | Detailed Description, Steps to Reproduce, Expected Result, Actual Result, Environment | Screenshots / Logs, Regression / Test Scenario, API Contract, Design Reference, Notes |
22
+ | `Story` | User Story, Detailed Description, Scope, Acceptance Criteria, Test Scenarios | API Contract / Swagger, Design Reference, Screenshots, Dependencies / Notes |
23
+
24
+ ## Flow
25
+
26
+ Read `$HOME/.claude/commands/multi-agent/refs/generate-issue.md` and execute the 11-step shared flow. Non-negotiables restated:
27
+
28
+ - Ask the user (AskUserQuestion) for the issue type first, then about every genuinely unknown field - component, epic, priority, labels, assignee, sprint vs backlog, required custom fields.
29
+ - A conditional section renders only when its trigger is present (Figma URL, pasted screenshot/log, Swagger URL/contract, real Notes content). No empty placeholder headings; content the user did not supply and mining could not derive is never invented.
30
+ - Step [8/11] full preview + approval gate always runs. `Approve` / `Edit` (loop) / `Cancel`. No bypass exists.
31
+
32
+ ## Error paths
33
+
34
+ See `refs/generate-issue.md` Error paths. No command-specific additions.
@@ -111,8 +111,7 @@ Post-Hoc & Side-Channel:
111
111
  /multi-agent:analysis ["analysis-name"] Feature-spec analysis (Figma + Swagger + Confluence + repos) → per-platform v3 doc (23-section Full / 7-section Lite)
112
112
  /multi-agent:analysis-resolve [doc] Resolve Section 20 open questions of an analysis doc, one at a time with source-labeled candidates
113
113
  /multi-agent:build-optimize iOS-only Xcode build perf wrapper → benchmark + analyze + recommend-first .build-benchmark/optimization-plan.md
114
- /multi-agent:generate-task ["desc"] [figma-url] Create a Jira Task matching team conventions (mining + active sprint + preview & approval)
115
- /multi-agent:generate-bug ["desc"] [figma-url] Create a Jira Bug matching team conventions (mining + active sprint + preview & approval)
114
+ /multi-agent:generate ["desc"] [figma-url] [swagger-url] Create a Jira Task/Bug/Story matching team conventions (asks type + mining + active sprint + auto-sizing sections + preview & approval)
116
115
  /multi-agent:diff-explain Map a Phase 4 triage finding back to specific diff lines
117
116
  /multi-agent:search Cross-task log search with smart ranking; --semantic queries triage corpus
118
117
  /multi-agent:scan Skill security scan against tiered pattern catalog
@@ -223,8 +222,8 @@ Examples:
223
222
  /multi-agent:review
224
223
 
225
224
  # Create a Jira issue that matches team conventions (preview + approval before create)
226
- /multi-agent:generate-task "Profile screen empty state" https://figma.com/design/abc?node-id=1-2
227
- /multi-agent:generate-bug "Login crash on iOS 17, see attached log"
225
+ /multi-agent:generate "Profile screen empty state" https://figma.com/design/abc?node-id=1-2
226
+ /multi-agent:generate "Login crash on iOS 17, see attached log"
228
227
 
229
228
  ------------------------------------------------------------
230
229
 
@@ -324,8 +323,7 @@ Post-Hoc & Side-Channel:
324
323
  /multi-agent:analysis ["analysis-name"] Feature-spec analizi (Figma + Swagger + Confluence + repolar) → platform başına v3 doküman (23 bölüm Full / 7 bölüm Lite)
325
324
  /multi-agent:analysis-resolve [doc] Analiz dokümanının Bölüm 20 açık sorularını kaynak etiketli adaylarla teker teker çözer
326
325
  /multi-agent:build-optimize iOS-only Xcode build performance wrapper → benchmark + analiz + recommend-first .build-benchmark/optimization-plan.md
327
- /multi-agent:generate-task ["açıklama"] [figma-url] Takım standartlarına uygun Jira Task oluştur (convention mining + aktif sprint + önizleme & onay)
328
- /multi-agent:generate-bug ["açıklama"] [figma-url] Takım standartlarına uygun Jira Bug oluştur (convention mining + aktif sprint + önizleme & onay)
326
+ /multi-agent:generate ["açıklama"] [figma-url] [swagger-url] Takım standartlarına uygun Jira Task/Bug/Story oluştur (tip sorar + convention mining + aktif sprint + auto-sizing bölümler + önizleme & onay)
329
327
  /multi-agent:diff-explain Phase 4 triage bulgusunu diff satırlarına eşle
330
328
  /multi-agent:search Task log'larında akıllı arama; --semantic triage corpus'unu sorgular
331
329
  /multi-agent:scan Skill güvenlik taraması (tiered pattern catalog)
@@ -436,8 +434,8 @@ Quality & Telemetry (advisory, default açık - prefs.global.* ile kapatılabi
436
434
  /multi-agent:review
437
435
 
438
436
  # Takım standartlarına uygun Jira issue oluştur (oluşturmadan önce önizleme + onay)
439
- /multi-agent:generate-task "Profil ekranı empty state" https://figma.com/design/abc?node-id=1-2
440
- /multi-agent:generate-bug "iOS 17'de login crash, log ekte"
437
+ /multi-agent:generate "Profil ekranı empty state" https://figma.com/design/abc?node-id=1-2
438
+ /multi-agent:generate "iOS 17'de login crash, log ekte"
441
439
 
442
440
  ------------------------------------------------------------
443
441
 
@@ -6,12 +6,12 @@
6
6
 
7
7
  ---
8
8
 
9
- ## 1. Command Inventory (37 commands)
9
+ ## 1. Command Inventory (36 commands)
10
10
 
11
11
  ```
12
12
  analysis, analysis-resolve, autopilot, build-optimize, channels, delete, dev,
13
13
  dev-autopilot, dev-local, dev-local-autopilot, diff-explain, finish, garbage-collect,
14
- generate-bug, generate-task, help, issue, jira, kill, language, local,
14
+ generate, help, issue, jira, kill, language, local,
15
15
  local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review,
16
16
  scan, search, setup, stack, status, sync, test, update
17
17
  ```
@@ -19,7 +19,7 @@ scan, search, setup, stack, status, sync, test, update
19
19
  Categories:
20
20
 
21
21
  - **Interactive pickers** (single-purpose, not modes): `jira`, `issue`
22
- - **Issue generators** (one-shot, no worktree, hard approval gate before create): `generate-task`, `generate-bug`
22
+ - **Issue generator** (one-shot, no worktree, asks type Task/Bug/Story, hard approval gate before create): `generate`
23
23
  - **Full 8-phase modes**: `autopilot`, `local`, `local-autopilot`
24
24
  - **Fast modes** (Init -> Dev(Opus) -> Commit -> Report): `dev`, `dev-autopilot`, `dev-local`, `dev-local-autopilot`
25
25
  - **Tail modes** (run the pipeline tail over already-done local work): `finish`
@@ -30,7 +30,7 @@ Categories:
30
30
 
31
31
  ### 1.1 Figma component subphase skills
32
32
 
33
- In addition to the 37 top-level multi-agent commands, the figma-to-component pipeline ships platform-specific skills that multi-agent dispatches from Phase 3 (see `refs/component-dispatch.md`). The structure is **platform-parallel iOS + Android with a shared common pool**:
33
+ In addition to the 36 top-level multi-agent commands, the figma-to-component pipeline ships platform-specific skills that multi-agent dispatches from Phase 3 (see `refs/component-dispatch.md`). The structure is **platform-parallel iOS + Android with a shared common pool**:
34
34
 
35
35
  | Location | Skill count | Purpose |
36
36
  |---|---|---|
@@ -312,7 +312,7 @@ For clipboard ops, callers still gate with `if command -v pbpaste >/dev/null; th
312
312
 
313
313
  This contract is validated by:
314
314
 
315
- - `smoke-cross-cli-behavior.sh` - asserts all 37 commands behave identically, pulls from Section 2 (placeholder vocab), Section 5 (argument parsing), Section 6 (output formats); also regression-locks the 6-persona agent deployment
315
+ - `smoke-cross-cli-behavior.sh` - asserts all 36 commands behave identically, pulls from Section 2 (placeholder vocab), Section 5 (argument parsing), Section 6 (output formats); also regression-locks the 6-persona agent deployment
316
316
  - `smoke-commands-skills-parity.sh` (50 assertions) - enforces colon-form command ↔ dash-form skill directory parity
317
317
  - `smoke-compliance-skills.sh` (45 assertions) - enforces store-compliance skill catalog + 4 consumer wiring
318
318
  - `smoke-personal-data.sh` - extended in 0.5.5 to treat deprecated placeholders (`{github-username}`, `{your-website}`, `{website-repo}`) as leaks; adds `mmerterden` to public-handle blocklist for generic docs
@@ -1,21 +1,59 @@
1
- # Generate Issue - Shared Flow (generate-task / generate-bug)
1
+ # Generate Issue - Shared Flow (generate)
2
2
 
3
- > **TLDR** - Shared 11-step flow for `/multi-agent:generate-task` and `/multi-agent:generate-bug`. Mines the target project's existing issues to learn team conventions, detects the active sprint, drafts a standards-compliant issue, asks the user about every genuinely unknown field, renders a full preview, and creates the Jira issue only after explicit approval. Creates exactly one Jira issue per run - no branches, no commits, no worktrees.
3
+ > **TLDR** - Shared 12-step flow for `/multi-agent:generate`. Asks the issue type (Task / Bug / Story), mines the target project's existing same-type issues to learn team conventions, detects the active sprint, drafts a standards-compliant issue from a fixed standard template with auto-sizing sections, asks the user about every genuinely unknown field, renders a full preview, and creates the Jira issue only after explicit approval. Creates exactly one Jira issue per run - no branches, no commits, no worktrees.
4
4
 
5
- Consumed by `generate-task.md` and `generate-bug.md` via their profile blocks (`ISSUE_TYPE`, default description sections, JQL sample filter). This ref is never invoked directly.
5
+ Consumed by `generate.md`. This ref is never invoked directly.
6
6
 
7
7
  ## Hard rules (must not regress)
8
8
 
9
- - **Approval gate is absolute.** Step [8/11] (full preview + explicit approval) runs on every invocation. There is no autopilot variant of these commands and no preference that skips the gate. `Cancel` means nothing was created.
10
- - **Never invent content.** Anything the user did not supply and mining could not derive stays an open question (step [7/11]) or an explicitly empty section - never fabricated repro steps, environments, or acceptance criteria.
9
+ - **Approval gate is absolute.** Step [9/12] (full preview + explicit approval) runs on every invocation. There is no autopilot variant of this command and no preference that skips the gate. `Cancel` means nothing was created.
10
+ - **Never invent content.** Anything the user did not supply and mining could not derive stays an open question (step [8/12]) or is omitted entirely - never fabricated repro steps, environments, acceptance criteria, or test pass/fail results.
11
+ - **Standard template is the baseline.** The description structure comes from the type's standard template (see [7/12]), not from a mined heading set. Mining informs summary prefix, labels, components, priority norm, sprint placement, and test-scenario style - never replaces the standard section skeleton.
12
+ - **Auto-sizing.** A conditional section renders only when its trigger is present. No empty placeholder headings - if there is nothing to put in a conditional section, it does not appear.
11
13
  - **Issue content language follows `prefs.global.outputLanguage`.** Summary and description are written in the user's output language (intentional exception to the "external payloads stay English" default - the issue is authored FOR the user's team). Code identifiers, file paths, and URLs stay verbatim. AskUserQuestion `question`/`description` also follow `outputLanguage`; `label`/`header` stay English.
12
14
  - **UTF-8 verbatim POST path** (same as `refs/channels/jira.md`): description body goes to a file, `jq -n --rawfile` builds the payload, `curl --data-binary @file` ships it. Never round-trip through `unicode_escape`/`latin-1`, never hand-roll a re-encoding helper. Jira wiki markup (`h3.` headings, `[text|url]` links), real newlines, no HTML entities.
13
15
  - **Humanizer pass** on the description body after composition, before the preview render.
14
- - **Read-only until approval.** Steps 1-8 perform only GET requests. The first write of any kind is the `POST /rest/api/2/issue` in step [9/11].
16
+ - **Read-only until approval.** Steps 1-9 perform only GET requests. The first write of any kind is the `POST /rest/api/2/issue` in step [10/12].
17
+
18
+ ## Standard templates
19
+
20
+ Each type has a standard section skeleton. `A` = always present. `C` = conditional (renders only when its trigger fires).
21
+
22
+ | Type | Section | Presence | Trigger (for `C`) |
23
+ |---|---|---|---|
24
+ | **Task** | Detailed Description | A | |
25
+ | | Scope | A | |
26
+ | | Acceptance Criteria | A | |
27
+ | | Test Scenarios | A | populated from mined test-scenario style; skeleton derived from AC when the project has no prior style |
28
+ | | API Contract / Swagger | C | Swagger URL, OpenAPI/contract snippet, or explicit endpoint mention in input |
29
+ | | Design Reference | C | Figma URL given |
30
+ | | Screenshots | C | user pasted image(s) or a Figma screenshot was fetched |
31
+ | | Notes | C | real content only |
32
+ | **Bug** | Detailed Description | A | |
33
+ | | Steps to Reproduce | A | |
34
+ | | Expected Result | A | |
35
+ | | Actual Result | A | |
36
+ | | Environment | A | |
37
+ | | Screenshots / Logs | C | user pasted image(s) or log/stack-trace text |
38
+ | | Regression / Test Scenario | C | derivable from the repro; else omitted |
39
+ | | API Contract | C | API-related bug + Swagger/contract/endpoint given |
40
+ | | Design Reference | C | Figma URL given |
41
+ | | Notes | C | real content only |
42
+ | **Story** | User Story (`As a ... I want ... so that ...`) | A | |
43
+ | | Detailed Description | A | |
44
+ | | Scope | A | |
45
+ | | Acceptance Criteria | A | |
46
+ | | Test Scenarios | A | same as Task |
47
+ | | API Contract / Swagger | C | Swagger URL / contract / endpoint mention |
48
+ | | Design Reference | C | Figma URL given |
49
+ | | Screenshots | C | user pasted image(s) or Figma screenshot fetched |
50
+ | | Dependencies / Notes | C | real content only |
51
+
52
+ Section headings render in `outputLanguage` (e.g. tr: "Detaylı Açıklama", "Kapsam", "Kabul Kriterleri", "Test Senaryoları", "Adımlar", "Beklenen Sonuç", "Gerçekleşen Sonuç", "Ortam", "Ekran Görüntüleri", "API Contract", "Design Reference", "Notlar").
15
53
 
16
54
  ## Flow
17
55
 
18
- ### [1/11] Pick account (`_account-picker`)
56
+ ### [1/12] Pick account (`_account-picker`)
19
57
 
20
58
  ```bash
21
59
  ACCOUNTS=$(~/.claude/lib/account-resolver.sh --providers jira)
@@ -25,7 +63,7 @@ TOKEN=$(~/.claude/lib/credential-store.sh get "$ACCOUNT_JIRA_TOKEN_KEY")
25
63
  - Output: `ACCOUNT_JIRA_TOKEN_KEY`, `ACCOUNT_JIRA_HOST`.
26
64
  - Token missing/expired → Token Save Flow from `setup.md` inline; user skips → abort, nothing created.
27
65
 
28
- ### [2/11] Resolve project key
66
+ ### [2/12] Resolve project key
29
67
 
30
68
  Fallback chain (same as `refs/issue-jira-triad.md` Create path):
31
69
  1. `figmaConfig.jira.projectKey` (per-project config, when running inside a configured repo)
@@ -39,44 +77,55 @@ curl -s -H "Authorization: Bearer $TOKEN" \
39
77
  AskUserQuestion (single-select) → cache the choice to `prefs.global.defaultJiraKey`.
40
78
  - Output: `PROJECT_KEY`.
41
79
 
42
- ### [3/11] Parse input
80
+ ### [3/12] Pick issue type
81
+
82
+ AskUserQuestion (single-select, `question` in `outputLanguage`, e.g. tr: "Ne oluşturmak istiyorsun?"): `Task` / `Bug` / `Story`. Never inferred silently.
83
+ - Output: `ISSUE_TYPE`. Selects the standard template from the table above.
84
+ - The chosen type drives the mining JQL in [5/12], the required-field discovery in [5/12], and the section skeleton in [7/12].
85
+
86
+ ### [4/12] Parse input
43
87
 
44
88
  - Any `figma.com` URL in `$ARGUMENTS` → `FIGMA_URL`. Node-id normalization: `-` → `:`. Branch URLs use `branchKey` as effective `fileKey` (see `rules/figma-pipeline.md` URL parsing).
89
+ - Any OpenAPI/Swagger URL (path or query contains `swagger`, `openapi`, `/v2/api-docs`, `/v3/api-docs`, or a `.json`/`.yaml` spec) → `SWAGGER_URL`.
90
+ - Pasted images (chat attachments) → `USER_SCREENSHOTS[]`. Pasted log/stack-trace text → kept with `FREE_TEXT` and later mapped to the Screenshots / Logs section (Bug) or Notes.
45
91
  - Everything else → `FREE_TEXT`.
46
- - Both empty → AskUserQuestion (free-text, in `outputLanguage`): "Describe the {task|bug} you want to open."
47
- - `FIGMA_URL` is always optional. Never ask for one; only use it when given.
92
+ - All of `FREE_TEXT`/`FIGMA_URL`/`SWAGGER_URL`/`USER_SCREENSHOTS` empty → AskUserQuestion (free-text, in `outputLanguage`): "Describe the {type} you want to open."
93
+ - `FIGMA_URL`, `SWAGGER_URL`, and screenshots are always optional. Never ask for them; only use them when given.
48
94
 
49
- ### [4/11] Convention mining + field discovery + sprint detection (read-only)
95
+ ### [5/12] Convention mining + field discovery + sprint detection (read-only)
50
96
 
51
97
  Three GET groups. Run them before drafting anything.
52
98
 
53
- **4a. Sample recent same-type issues:**
99
+ **5a. Sample recent same-type issues:**
54
100
  ```bash
55
101
  JQL="project = ${PROJECT_KEY} AND issuetype = ${ISSUE_TYPE} ORDER BY created DESC"
56
102
  curl -s -H "Authorization: Bearer $TOKEN" \
57
- "https://$ACCOUNT_JIRA_HOST/rest/api/2/search?jql=$(printf '%s' "$JQL" | python3 -c 'import sys,urllib.parse; print(urllib.parse.quote(sys.stdin.read()))')&fields=summary,description,labels,components,priority,fixVersions&maxResults=30"
103
+ "https://$ACCOUNT_JIRA_HOST/rest/api/2/search?jql=$(printf '%s' "$JQL" | python3 -c 'import sys,urllib.parse; print(urllib.parse.quote(sys.stdin.read()))')&fields=summary,description,labels,components,priority,fixVersions,issuelinks&maxResults=30"
58
104
  ```
59
105
  Extract from the sample (thresholds are guidance, not hard gates):
60
- - **Summary prefix pattern**: leading `[...]` or `AREA:` token frequency. Appears in >= 40% of samples → adopt as suggested prefix; top 2-3 prefixes become AskUserQuestion options in step 7 when ambiguous.
61
- - **Description heading set**: lines matching `h[1-4]\.` or `*bold*` header style, frequency-ranked. A heading set shared by >= 50% of samples overrides the profile's default sections - the team template wins.
62
- - **Top labels / components**: top 5 each by frequencyoption lists for step 7.
63
- - **Priority norm**: modal priority for this issuetypepre-filled default, editable in preview.
64
- - **Epic usage rate**: share of sampled issues carrying an epic link decides whether step 7 asks for an epic.
65
-
66
- **4b. Field discovery (createmeta):**
106
+ - **Summary prefix pattern**: leading `[...]` or `AREA:` token frequency. Appears in >= 40% of samples → adopt as suggested prefix; top 2-3 prefixes become AskUserQuestion options in step 8 when ambiguous.
107
+ - **Top labels / components**: top 5 each by frequency option lists for step 8.
108
+ - **Priority norm**: modal priority for this issuetypepre-filled default, editable in preview. (Bug priorities often skew higher - respect the project's own norm.)
109
+ - **Epic usage rate**: share of sampled issues carrying an epic link decides whether step 8 asks for an epic.
110
+ - **Test-scenario style** (Task / Story, and Bug regression): detect how the project expresses test scenarios in the sampled descriptions and links, in priority order:
111
+ 1. Linked test issues - `issuelinks` pointing at a `Test`-family issuetype (Xray / Zephyr). If present, the standard Test Scenarios section references those linked tests rather than inlining steps.
112
+ 2. A dedicated description heading (`Test Scenarios`, `Test Cases`, `QA`, `Senaryolar`, checklist blocks). If a style is shared by >= 40% of samples, reuse that exact format (heading name + bullet/checklist/table shape).
113
+ 3. No prior style → inline a Test Scenarios skeleton derived from the Acceptance Criteria (one scenario per criterion, Given/When/Then or the project's dominant shape). Skeleton only - the user edits it in preview; pass/fail data is never fabricated.
114
+
115
+ **5b. Field discovery (createmeta):**
67
116
  ```bash
68
117
  curl -s -H "Authorization: Bearer $TOKEN" \
69
118
  "https://$ACCOUNT_JIRA_HOST/rest/api/2/issue/createmeta?projectKeys=${PROJECT_KEY}&issuetypeNames=${ISSUE_TYPE}&expand=projects.issuetypes.fields"
70
119
  ```
71
120
  - 404 or empty `projects[]` (newer Jira DC deprecates the classic form) → fall back to the paged endpoint: `GET /rest/api/2/issue/createmeta/{PROJECT_KEY}/issuetypes` then `GET /rest/api/2/issue/createmeta/{PROJECT_KEY}/issuetypes/{issuetypeId}`.
72
- - Every field with `required: true` beyond project/issuetype/summary/description/reporter → step 7 question (options from `allowedValues` when present, free-text fallback).
121
+ - Every field with `required: true` beyond project/issuetype/summary/description/reporter → step 8 question (options from `allowedValues` when present, free-text fallback).
73
122
  - Generic custom-field detection by `schema.custom` id - never assume field ids:
74
123
  - Sprint: `com.pyxis.greenhopper.jira:gh-sprint`
75
124
  - Epic Link: `com.pyxis.greenhopper.jira:gh-epic-link`
76
125
  - Team-like fields: case-insensitive name match on `Team`
77
- - 403 → warn "cannot read project field metadata", continue with profile defaults; required fields surface reactively via the 400 path in step 9.
126
+ - 403 → warn "cannot read project field metadata", continue with template defaults; required fields surface reactively via the 400 path in step 10.
78
127
 
79
- **4c. Board + active sprint (Agile REST):**
128
+ **5c. Board + active sprint (Agile REST):**
80
129
  ```bash
81
130
  curl -s -H "Authorization: Bearer $TOKEN" \
82
131
  "https://$ACCOUNT_JIRA_HOST/rest/agile/1.0/board?projectKeyOrId=${PROJECT_KEY}"
@@ -84,58 +133,72 @@ curl -s -H "Authorization: Bearer $TOKEN" \
84
133
  "https://$ACCOUNT_JIRA_HOST/rest/agile/1.0/board/${BOARD_ID}/sprint?state=active"
85
134
  ```
86
135
  - Multiple boards → AskUserQuestion (board name + type). One board → silent. Zero boards or Agile API 404 → the sprint option is silently omitted; the preview notes "backlog only (no board found)".
87
- - Active sprint found → remember `SPRINT_ID` + name for the step 7 placement choice. None → backlog only; if a `state=future` sprint exists, mention it in the preview as information.
136
+ - Active sprint found → remember `SPRINT_ID` + name for the step 8 placement choice. None → backlog only; if a `state=future` sprint exists, mention it in the preview as information.
88
137
 
89
- ### [5/11] Figma context (only when `FIGMA_URL` is set)
138
+ ### [6/12] External context (only for the sources actually provided)
90
139
 
140
+ Each source is failure-isolated and never blocks issue creation.
141
+
142
+ **6a. Figma** (only when `FIGMA_URL` is set):
91
143
  Follow the 3-tier chain from `rules/figma-pipeline.md`: Tier 1 MCP (`get_design_context` / `get_screenshot`, one re-auth retry) → Tier 2 REST (`keychainMapping.figma_pat`) → Tier 3 ask the user for a screenshot or proceed link-only.
92
144
 
93
145
  > This command is standalone (same class as `/multi-agent:analysis`), so Figma MCP use here is allowed - it is not a dev-phase violation under the "No MCP outside analysis phase" rule.
94
146
 
95
- - Output: frame name, node id, optional screenshot PNG in `/tmp/generate-issue-$$-figma.png` for the step 10 attachment opt-in.
96
- - Any tier failure degrades gracefully; Figma never blocks issue creation. Link-only is always acceptable.
147
+ - Output: frame name, node id, optional screenshot PNG in `/tmp/generate-issue-$$-figma.png` for the step 11 attachment opt-in.
148
+ - Any tier failure degrades gracefully; link-only is always acceptable.
149
+
150
+ **6b. Swagger / API contract** (only when `SWAGGER_URL` is set or a contract snippet was pasted):
151
+ - `SWAGGER_URL` set → fetch the spec, then extract **only the referenced endpoints**: if `FREE_TEXT` names specific paths / operationIds / tags, extract those; otherwise summarize the single tag or path group the user pointed at. Never crawl or dump the whole spec.
152
+ ```bash
153
+ curl -s "$SWAGGER_URL" -o /tmp/generate-issue-$$-swagger.json # add auth header only if the user supplied one
154
+ ```
155
+ Parse with `python3`/`jq` to pull, per referenced endpoint: HTTP method + path, a one-line summary, and the key request/response fields (names + types, not the full schema).
156
+ - Only a pasted contract snippet → summarize that snippet (endpoints + key fields).
157
+ - Output: an `API Contract` section body: `{METHOD} {path}` + summary + key request/response fields, plus `[Swagger|{SWAGGER_URL}]` when a URL was given.
158
+ - Fetch failure / unreachable / no matching endpoint → degrade to link-only (or omit the section if nothing usable) and note it in the preview. Never block issue creation.
159
+
160
+ **6c. Screenshots**: `USER_SCREENSHOTS[]` from step 4 are staged for the step 11 attachment opt-in; each attached image is referenced inline in the relevant section with Jira wiki `!filename|thumbnail!` markup.
97
161
 
98
- ### [6/11] Compose draft
162
+ ### [7/12] Compose draft
99
163
 
100
- Write summary + description in `outputLanguage`:
164
+ Write summary + description in `outputLanguage` from the type's **standard template** (baseline, not mined headings):
101
165
  - **Summary**: `{minedPrefix} {concise title}`, truncated to 255 chars.
102
- - **Description**: mined heading set from 4a (or the profile's default sections when mining found no dominant template), in Jira wiki markup (`h3.` headings).
103
- - Task profile fills: Goal, Scope, Acceptance Criteria, Notes from `FREE_TEXT`.
104
- - Bug profile fills: Steps to Reproduce, Expected Result, Actual Result, Environment, Notes from `FREE_TEXT`.
105
- - Missing information stays an open question for step 7 - never invented.
106
- - `FIGMA_URL` set → add `h3. Design Reference` with `[Figma|{FIGMA_URL}]` + frame name + node id.
166
+ - **Description**: render the type's standard section skeleton in Jira wiki markup (`h3.` headings), applying auto-sizing:
167
+ - **Always-present** sections are filled from `FREE_TEXT` (+ mining for Test Scenarios style). If an always-present section has no user content and cannot be derived, it stays an explicit open question for step 8 - it is not fabricated.
168
+ - **Conditional** sections render only when their trigger fired (see the Standard templates table): Design Reference when `FIGMA_URL` set (`[Figma|{FIGMA_URL}]` + frame name + node id); API Contract when 6b produced a body; Screenshots when images were staged; Notes/Dependencies only with real content. Otherwise the heading is omitted entirely.
169
+ - Bug: logs / stack traces / device+OS mentions from `FREE_TEXT` map into Environment and Screenshots / Logs; anything underivable becomes a step-8 question.
107
170
  - Run the humanizer skill on the description body.
108
171
  - Write the final body to `/tmp/generate-issue-$$.txt` (UTF-8, real newlines) for the `--rawfile` POST.
109
172
 
110
- ### [7/11] Clarifying questions (only genuinely unknown fields)
173
+ ### [8/12] Clarifying questions (only genuinely unknown fields)
111
174
 
112
175
  Batched AskUserQuestion(s), each with a "Skip / leave unset" option where Jira allows it:
113
176
  - **Component**: mined top components + "none" - only when the project uses components.
114
- - **Epic link**: only when 4a epic usage rate is high. Options from `project = {KEY} AND issuetype = Epic AND statusCategory != Done`.
177
+ - **Epic link**: only when 5a epic usage rate is high. Options from `project = {KEY} AND issuetype = Epic AND statusCategory != Done`.
115
178
  - **Priority**: only when the mined norm is ambiguous; otherwise pre-fill the norm and let the preview edit change it.
116
179
  - **Labels**: mined top labels, multiSelect.
117
180
  - **Assignee**: "me / unassigned / someone else".
118
181
  - **Sprint placement**: "Active sprint: {name}" vs "Backlog" - only when an active sprint exists.
119
- - **Required custom fields** from 4b not yet resolved (allowedValues as options).
120
- - **Bug profile**: Steps to Reproduce or Environment underivable from `FREE_TEXT` → ask here.
182
+ - **Required custom fields** from 5b not yet resolved (allowedValues as options).
183
+ - **Always-present sections still empty**: Bug Steps to Reproduce / Environment, or a Task/Story with no derivable Scope / Acceptance Criteria → ask here.
121
184
 
122
- Rule: never ask about anything already answerable from mining or the input. Regardless of how complete the draft looks, step 8 always runs.
185
+ Rule: never ask about anything already answerable from mining or the input. Regardless of how complete the draft looks, step 9 always runs.
123
186
 
124
- ### [8/11] Full preview + approval gate (never skipped)
187
+ ### [9/12] Full preview + approval gate (never skipped)
125
188
 
126
- Render the complete issue in chat: project, issuetype, summary, the full description body, priority, labels, components, epic, assignee, sprint/backlog placement, attachment plan (Figma screenshot upload - default off, opt-in).
189
+ Render the complete issue in chat: project, issuetype, summary, the full description body, priority, labels, components, epic, assignee, sprint/backlog placement, attachment plan (Figma + user screenshots upload - default off, opt-in).
127
190
 
128
191
  Then AskUserQuestion (`question` in `outputLanguage`, e.g. tr: "Bu sekilde olusturuyorum, onayliyor musun?"):
129
192
 
130
193
  | Option | Behavior |
131
194
  |---|---|
132
- | `Approve` | Proceed to step 9 |
195
+ | `Approve` | Proceed to step 10 |
133
196
  | `Edit` | Free-text "what should change?" → apply → re-render the FULL preview → re-ask. Loop, no iteration cap |
134
197
  | `Cancel` | Stop. Nothing was created; say so explicitly |
135
198
 
136
199
  This gate has no bypass. No flag, mode, or preference suppresses it.
137
200
 
138
- ### [9/11] Create
201
+ ### [10/12] Create
139
202
 
140
203
  ```bash
141
204
  jq -n --rawfile desc /tmp/generate-issue-$$.txt \
@@ -148,13 +211,13 @@ curl -sS -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application
148
211
  "https://$ACCOUNT_JIRA_HOST/rest/api/2/issue"
149
212
  ```
150
213
  - Parse `key` from the response → `NEW_KEY`.
151
- - 400 with field errors → show Jira's per-field error verbatim, return to step 7 for exactly those fields, then re-run step 8 (full preview again).
214
+ - 400 with field errors → show Jira's per-field error verbatim, return to step 8 for exactly those fields, then re-run step 9 (full preview again).
152
215
 
153
- ### [10/11] Post-create steps
216
+ ### [11/12] Post-create steps
154
217
 
155
218
  Each step is failure-isolated: on error, warn + continue - the issue already exists.
156
219
 
157
- 1. **Sprint** (when chosen in step 7/8):
220
+ 1. **Sprint** (when chosen in step 8/9):
158
221
  ```bash
159
222
  jq -n --arg key "$NEW_KEY" '{issues: [$key]}' > /tmp/generate-issue-$$-sprint.json
160
223
  curl -sS -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
@@ -168,30 +231,37 @@ curl -sS -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application
168
231
  -d '{"object":{"url":"'"$FIGMA_URL"'","title":"Figma design"}}' \
169
232
  "https://$ACCOUNT_JIRA_HOST/rest/api/2/issue/${NEW_KEY}/remotelink"
170
233
  ```
171
- 3. **Screenshot attachment** (only when opted in during preview):
234
+ 3. **Swagger remote link** (when `SWAGGER_URL` set):
235
+ ```bash
236
+ curl -sS -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
237
+ -d '{"object":{"url":"'"$SWAGGER_URL"'","title":"API contract"}}' \
238
+ "https://$ACCOUNT_JIRA_HOST/rest/api/2/issue/${NEW_KEY}/remotelink"
239
+ ```
240
+ 4. **Screenshot / image attachments** (only when opted in during preview - Figma render and/or user-pasted images):
172
241
  ```bash
173
242
  curl -sS -X POST -H "Authorization: Bearer $TOKEN" -H "X-Atlassian-Token: no-check" \
174
243
  -F "file=@/tmp/generate-issue-$$-figma.png" \
175
244
  "https://$ACCOUNT_JIRA_HOST/rest/api/2/issue/${NEW_KEY}/attachments"
176
245
  ```
177
246
 
178
- ### [11/11] Report
247
+ ### [12/12] Report
179
248
 
180
249
  ```
181
250
  Created {NEW_KEY}: https://{ACCOUNT_JIRA_HOST}/browse/{NEW_KEY}
182
251
  ```
183
- Plus one line per post-create step that ran (sprint placement, remote link, attachment) and any that were skipped with reason.
252
+ Plus one line per post-create step that ran (sprint placement, remote links, attachments) and any that were skipped with reason.
184
253
 
185
254
  ## Error paths
186
255
 
187
256
  | Condition | Behavior |
188
257
  |---|---|
189
258
  | Token missing/expired (401) | Token Save Flow from `setup.md` inline; user skips → abort with message, nothing created |
190
- | Search 403 / createmeta denied | Warn "cannot read project conventions/fields"; continue with profile-default template; required fields asked reactively on 400 |
191
- | Zero sampled issues (new project) | Skip mining, use profile defaults, note in preview "no prior issues to learn from" |
259
+ | Search 403 / createmeta denied | Warn "cannot read project conventions/fields"; continue with standard-template defaults; required fields asked reactively on 400 |
260
+ | Zero sampled issues (new project) | Skip mining, use standard template + AC-derived test-scenario skeleton, note in preview "no prior issues to learn from" |
192
261
  | Agile API 404 / no boards | Omit sprint choice, backlog implied, say so in preview |
193
262
  | No active sprint | Offer backlog only; mention the next `state=future` sprint when one exists |
194
263
  | Figma Tier 1 fails | Tier 2; Tier 2 fails → Tier 3 (ask screenshot or link-only). Never block issue creation on Figma |
195
- | Create 400 (field errors) | Show per-field errors, loop back to step 7 for those fields, re-preview |
264
+ | Swagger fetch fails / unreachable | Degrade to link-only, or omit the API Contract section if nothing usable; note in preview. Never block issue creation |
265
+ | Create 400 (field errors) | Show per-field errors, loop back to step 8 for those fields, re-preview |
196
266
  | Create 5xx / network | Show the error, offer one retry, then abort - keep `/tmp/generate-issue-$$.txt` and print its path so the draft survives |
197
267
  | Post-create step failure | Warn + continue (issue exists); print a manual-fix hint |
@@ -58,7 +58,7 @@ Run every step automatically:
58
58
  Step 0: FIGMA_SYNC SKIP (deprecated - feedback_figma_source_deprecated)
59
59
  Step 1: PLATFORM Detect macOS / Linux / Windows (Git Bash / WSL); export PLATFORM env
60
60
  Step 1.5: DETECT Compare timestamps, find stale targets
61
- Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 37 sub-command skills)
61
+ Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 36 sub-command skills)
62
62
  Step 3: REPO Claude Code -> pipeline repo (genericized, personal data scrub, bash -n on all sh)
63
63
  Step 3c: PLUGINS pipeline shared/external -> multi-agent-plugins marketplace (rebuild knowledge/,
64
64
  bump changed plugins' patch version, commit + push the plugins repo)
@@ -169,7 +169,7 @@ If nothing is stale → report "All targets up to date" and stop.
169
169
 
170
170
  ## Stack-Plugin Sync (Step 3c)
171
171
 
172
- Stack skills are distributed as versioned plugins in the `{owner}/multi-agent-plugins` marketplace. The pipeline's `pipeline/skills/shared/external/` is the **single authoring source**; the marketplace is a derived, versioned publish artifact. This step rebuilds it and publishes only when something changed.
172
+ Stack skills are distributed as versioned plugins in the `mmerterden/multi-agent-plugins` marketplace. The pipeline's `pipeline/skills/shared/external/` is the **single authoring source**; the marketplace is a derived, versioned publish artifact. This step rebuilds it and publishes only when something changed.
173
173
 
174
174
  **Source of truth:** author/vendor knowledge skills in `pipeline/skills/shared/external/` (the pipeline's own phases also consume them). The plugins' authored lifecycle skills (`index` / `reference` / `workflow` / `tools`) live in the plugins repo and are never touched by sync.
175
175
 
@@ -177,7 +177,7 @@ Stack skills are distributed as versioned plugins in the `{owner}/multi-agent-pl
177
177
 
178
178
  ```bash
179
179
  PLUGINS_REPO="$HOME/multi-agent-plugins"
180
- [ ! -d "$PLUGINS_REPO/.git" ] && gh repo clone {owner}/multi-agent-plugins "$PLUGINS_REPO"
180
+ [ ! -d "$PLUGINS_REPO/.git" ] && gh repo clone mmerterden/multi-agent-plugins "$PLUGINS_REPO"
181
181
  cd "$PLUGINS_REPO" && git pull origin main
182
182
 
183
183
  # 1. Preview what would change (routing + version bumps), no writes:
@@ -197,10 +197,10 @@ node "$HOME/multi-agent-pipeline/pipeline/scripts/build-stack-plugins.mjs"
197
197
  ```bash
198
198
  cd "$PLUGINS_REPO"
199
199
  if ! git diff --quiet; then
200
- git config user.name "$(git config user.name)"; git config user.email "$(git config user.email)"
200
+ git config user.name "Mert Erden"; git config user.email "mmerterden@gmail.com"
201
201
  git add -A
202
202
  git commit -m "chore: rebuild stack plugins from pipeline shared/external"
203
- gh auth switch --user {owner} 2>/dev/null || true
203
+ gh auth switch --user mmerterden 2>/dev/null || true
204
204
  git push origin main
205
205
  fi
206
206
  ```
@@ -277,12 +277,12 @@ This runs on the Claude <-> Copilot axis — the two CLIs the pipeline supports
277
277
  |-------------|-------------|
278
278
  | `~/.claude/commands/multi-agent/{cmd}.md` | `~/.copilot/skills/multi-agent-{cmd}/SKILL.md` |
279
279
 
280
- **37 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
280
+ **36 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
281
281
 
282
282
  ```
283
283
  analysis, analysis-resolve, autopilot, build-optimize, channels, delete, dev,
284
284
  dev-autopilot, dev-local, dev-local-autopilot, diff-explain, finish, garbage-collect,
285
- generate-bug, generate-task, help, issue, jira, kill, language, local,
285
+ generate, help, issue, jira, kill, language, local,
286
286
  local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review,
287
287
  scan, search, setup, stack, status, sync, test, update
288
288
  ```
@@ -77,8 +77,7 @@ Lib scripts (`~/.claude/lib/`):
77
77
  | `analysis ["<feature>"]` | Standalone feature-spec analizi: Figma / Swagger / Confluence / Jira / repo girdileri sabit 7-bölümlük şablona dökülür, humanizer'dan geçer, Local/Confluence/Jira hedef(ler)ine post edilir. Worktree veya commit yok. Dev'e zincirleme yok. |
78
78
  | `build-optimize` | iOS-only Xcode build performance wrapper. Vendored `xcode-build-orchestrator`'a dispatch eder; benchmark + compilation / project / SPM analyzer'lar + recommend-first plan `.build-benchmark/optimization-plan.md`. Non-iOS stack'lerde fail-fast. |
79
79
  | `channels [PR-url\|#N\|Jira-url\|Jira-id] [--channels pr,jira,confluence,wiki] [--content normal,test,auto-diff,note] [--message "..."]` | Post task report to multi-select channels (PR description, Jira comment, Confluence page, Wiki pages) with multi-select content sources. Humanizer pass per-channel. Bitbucket PR updates use reviewer-preserving PUT. Phase 7 delegates to this command; also invocable post-hoc for fixes made outside the pipeline. No worktree. |
80
- | `generate-task ["desc"] [figma-url]` | Create a standards-compliant Jira **Task**: mines the project's recent Tasks for conventions (summary format, template, labels, priority), detects the active sprint, asks about unknown fields, then full draft preview + explicit approval before create. No worktree, no commits. |
81
- | `generate-bug ["desc"] [figma-url]` | Create a standards-compliant Jira **Bug**: same convention mining + active-sprint detection; free-text logs/devices map to Steps to Reproduce / Environment; full draft preview + explicit approval before create. No worktree, no commits. |
80
+ | `generate ["desc"] [figma-url] [swagger-url]` | Create a standards-compliant Jira issue: asks the type (**Task** / **Bug** / **Story**), mines the project's recent same-type issues for conventions (summary format, labels, priority, test-scenario style), detects the active sprint, drafts from a standard template with auto-sizing sections (Design Reference / API Contract / Screenshots appear only when their source is given), asks about unknown fields, then full draft preview + explicit approval before create. No worktree, no commits. |
82
81
  | `test` or `test [args]` | UI Bug Hunter - screenshot + tap + analyze on booted simulator via MCP (read `$HOME/.claude/commands/sim-test.md`). `/multi-agent:test` also resolves here via the `commands/multi-agent/test.md` delegate. |
83
82
  | `manual-test [#id]` | Phase 5 standalone Manual Test - checks out the task branch, prints Xcode / SourceTree hints, waits for user verdict (`ok` / `fix: ...`). |
84
83
  | `stack [ios\|android\|backend\|mobile\|all]` | Swap skills for next conversation. No arg = show current stack. |
@@ -118,8 +117,7 @@ This command uses lazy loading for token efficiency. Read the relevant sub-file
118
117
  | `local-autopilot` | `$HOME/.claude/commands/multi-agent/local-autopilot.md` |
119
118
  | `dev-local` | `$HOME/.claude/commands/multi-agent/dev-local.md` |
120
119
  | `dev-local-autopilot` | `$HOME/.claude/commands/multi-agent/dev-local-autopilot.md` |
121
- | `generate-task` | `$HOME/.claude/commands/multi-agent/generate-task.md` (loads `refs/generate-issue.md`) |
122
- | `generate-bug` | `$HOME/.claude/commands/multi-agent/generate-bug.md` (loads `refs/generate-issue.md`) |
120
+ | `generate` | `$HOME/.claude/commands/multi-agent/generate.md` (loads `refs/generate-issue.md`) |
123
121
  | `stack` | `$HOME/.claude/commands/multi-agent/stack.md` |
124
122
  | `language` | Handled inline - set/show prompt language in preferences |
125
123
  | SwiftUI component task (iOS) | `$HOME/.claude/commands/multi-agent/refs/swiftui-guide.md` |
@@ -1,26 +1,24 @@
1
1
  #!/usr/bin/env bash
2
- # smoke-generate-issue.sh - contract for /multi-agent:generate-task + generate-bug.
2
+ # smoke-generate-issue.sh - contract for /multi-agent:generate.
3
3
  #
4
4
  # Verifies:
5
- # 1. All 5 files exist (2 commands, shared ref, 2 Copilot SKILL.md).
5
+ # 1. All 3 files exist (1 command, shared ref, 1 Copilot/plugin SKILL.md).
6
6
  # 2. Frontmatter keys present on both surfaces.
7
- # 3. Commands delegate to refs/generate-issue.md and declare their ISSUE_TYPE.
7
+ # 3. Command delegates to refs/generate-issue.md and asks the issue type.
8
8
  # 4. Approval gate documented and marked unskippable in the ref.
9
9
  # 5. Convention mining + createmeta + Agile sprint endpoints present.
10
10
  # 6. UTF-8 verbatim POST path (--rawfile + --data-binary) present.
11
- # 7. Profile section vocab: Task (Goal/Scope/Acceptance), Bug (Steps/Expected/Actual/Environment).
12
- # 8. Registration: dispatcher rows, inventory lists, count consistency (37).
11
+ # 7. Standard template vocab: Task/Story (Scope/Acceptance/Test Scenarios), Bug (Steps/Expected/Actual/Environment), Swagger.
12
+ # 8. Registration: dispatcher rows, inventory lists, count consistency (36).
13
13
  # 9. Forbidden strings absent (em-dash, section sign, the M-word, unicode_escape).
14
14
 
15
15
  set -euo pipefail
16
16
 
17
17
  HERE="$(cd "$(dirname "$0")" && pwd)"
18
18
  ROOT="$(cd "$HERE/../.." && pwd)"
19
- CMD_TASK="$ROOT/pipeline/commands/multi-agent/generate-task.md"
20
- CMD_BUG="$ROOT/pipeline/commands/multi-agent/generate-bug.md"
19
+ CMD="$ROOT/pipeline/commands/multi-agent/generate.md"
21
20
  REF="$ROOT/pipeline/commands/multi-agent/refs/generate-issue.md"
22
- SKILL_TASK="$ROOT/pipeline/skills/shared/core/multi-agent-generate-task/SKILL.md"
23
- SKILL_BUG="$ROOT/pipeline/skills/shared/core/multi-agent-generate-bug/SKILL.md"
21
+ SKILL="$ROOT/pipeline/skills/shared/core/multi-agent-generate/SKILL.md"
24
22
  DISPATCHER="$ROOT/pipeline/commands/multi-agent.md"
25
23
  CONTRACT="$ROOT/pipeline/commands/multi-agent/refs/cross-cli-contract.md"
26
24
  SYNC="$ROOT/pipeline/commands/multi-agent/sync.md"
@@ -32,30 +30,30 @@ pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
32
30
  fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
33
31
 
34
32
  echo "→ 1. files exist"
35
- for f in "$CMD_TASK" "$CMD_BUG" "$REF" "$SKILL_TASK" "$SKILL_BUG"; do
33
+ for f in "$CMD" "$REF" "$SKILL"; do
36
34
  if [ -f "$f" ]; then pass "exists: ${f#$ROOT/}"; else fail "missing: ${f#$ROOT/}"; fi
37
35
  done
36
+ # old split commands must be gone
37
+ for f in "$ROOT/pipeline/commands/multi-agent/generate-task.md" "$ROOT/pipeline/commands/multi-agent/generate-bug.md"; do
38
+ if [ -f "$f" ]; then fail "stale file present: ${f#$ROOT/}"; else pass "removed: ${f##*/}"; fi
39
+ done
38
40
  [ "$FAIL" -eq 0 ] || { echo "══ generate-issue smoke: $PASS passed, $FAIL failed ══"; exit 1; }
39
41
 
40
42
  echo ""
41
43
  echo "→ 2. frontmatter keys"
42
- for f in "$CMD_TASK" "$CMD_BUG"; do
43
- head -5 "$f" | grep -q '^description:' && pass "description: ${f##*/}" || fail "description missing: ${f##*/}"
44
- head -5 "$f" | grep -q '^argument-hint:' && pass "argument-hint: ${f##*/}" || fail "argument-hint missing: ${f##*/}"
45
- done
46
- for f in "$SKILL_TASK" "$SKILL_BUG"; do
47
- head -8 "$f" | grep -q '^name: multi-agent-generate-' && pass "name: ${f%/*}" || fail "name missing: $f"
48
- head -8 "$f" | grep -q '^language: en' && pass "language en" || fail "language missing: $f"
49
- head -8 "$f" | grep -q '^user-invocable: true' && pass "user-invocable" || fail "user-invocable missing: $f"
50
- done
44
+ head -5 "$CMD" | grep -q '^description:' && pass "description: ${CMD##*/}" || fail "description missing: ${CMD##*/}"
45
+ head -5 "$CMD" | grep -q '^argument-hint:' && pass "argument-hint: ${CMD##*/}" || fail "argument-hint missing: ${CMD##*/}"
46
+ head -8 "$SKILL" | grep -q '^name: multi-agent-generate$' && pass "name: multi-agent-generate" || fail "name wrong: $SKILL"
47
+ head -8 "$SKILL" | grep -q '^language: en' && pass "language en" || fail "language missing: $SKILL"
48
+ head -8 "$SKILL" | grep -q '^user-invocable: true' && pass "user-invocable" || fail "user-invocable missing: $SKILL"
51
49
 
52
50
  echo ""
53
- echo "→ 3. commands delegate to the shared ref with a profile"
54
- for f in "$CMD_TASK" "$CMD_BUG"; do
55
- grep -Fq "refs/generate-issue.md" "$f" && pass "ref link: ${f##*/}" || fail "ref link missing: ${f##*/}"
51
+ echo "→ 3. command delegates to the shared ref and asks the type"
52
+ grep -Fq "refs/generate-issue.md" "$CMD" && pass "ref link present" || fail "ref link missing"
53
+ for t in "Task" "Bug" "Story"; do
54
+ grep -Fq "$t" "$CMD" && pass "type offered: $t" || fail "type missing: $t"
56
55
  done
57
- grep -Fq '`ISSUE_TYPE` | `Task`' "$CMD_TASK" && pass "ISSUE_TYPE=Task declared" || fail "ISSUE_TYPE=Task missing"
58
- grep -Fq '`ISSUE_TYPE` | `Bug`' "$CMD_BUG" && pass "ISSUE_TYPE=Bug declared" || fail "ISSUE_TYPE=Bug missing"
56
+ grep -Fqi "Pick issue type" "$REF" && pass "type-selection step present" || fail "type-selection step missing"
59
57
 
60
58
  echo ""
61
59
  echo "→ 4. approval gate documented and unskippable"
@@ -79,31 +77,38 @@ grep -Fq -- "--data-binary" "$REF" && pass "--data-binary present" || fail "--da
79
77
  grep -Fqi "humanizer" "$REF" && pass "humanizer pass referenced" || fail "humanizer missing"
80
78
 
81
79
  echo ""
82
- echo "→ 7. profile section vocabulary"
83
- for s in "Goal" "Scope" "Acceptance Criteria"; do
84
- grep -Fq "$s" "$CMD_TASK" && pass "task section: $s" || fail "task section missing: $s"
80
+ echo "→ 7. standard template vocabulary + auto-sizing + swagger"
81
+ for s in "Scope" "Acceptance Criteria" "Test Scenarios"; do
82
+ grep -Fq "$s" "$REF" && pass "task/story section: $s" || fail "task/story section missing: $s"
85
83
  done
86
84
  for s in "Steps to Reproduce" "Expected Result" "Actual Result" "Environment"; do
87
- grep -Fq "$s" "$CMD_BUG" && pass "bug section: $s" || fail "bug section missing: $s"
85
+ grep -Fq "$s" "$REF" && pass "bug section: $s" || fail "bug section missing: $s"
88
86
  done
87
+ grep -Fqi "auto-sizing" "$REF" && pass "auto-sizing rule present" || fail "auto-sizing rule missing"
88
+ grep -Fqi "swagger" "$REF" && pass "swagger context present" || fail "swagger context missing"
89
89
 
90
90
  echo ""
91
- echo "→ 8. registration + count consistency (37)"
92
- grep -Fq '| `generate-task' "$DISPATCHER" && pass "dispatcher routing: generate-task" || fail "dispatcher routing missing: generate-task"
93
- grep -Fq '| `generate-bug' "$DISPATCHER" && pass "dispatcher routing: generate-bug" || fail "dispatcher routing missing: generate-bug"
94
- grep -Fq "generate-task.md" "$DISPATCHER" && pass "dispatcher loading row" || fail "dispatcher loading row missing"
95
- grep -Fq "## 1. Command Inventory (37 commands)" "$CONTRACT" && pass "contract count = 37" || fail "contract count wrong"
96
- grep -Eq '(^|[ ,])generate-bug, generate-task([ ,]|$)' "$CONTRACT" && pass "contract list has both" || fail "contract list missing entries"
97
- grep -Fq "**37 commands are synced**" "$SYNC" && pass "sync count = 37" || fail "sync count wrong"
91
+ echo "→ 8. registration + count consistency (36)"
92
+ grep -Fq '| `generate ' "$DISPATCHER" && pass "dispatcher routing: generate" || fail "dispatcher routing missing: generate"
93
+ grep -Fq "generate.md" "$DISPATCHER" && pass "dispatcher loading row" || fail "dispatcher loading row missing"
94
+ grep -Fq "## 1. Command Inventory (36 commands)" "$CONTRACT" && pass "contract count = 36" || fail "contract count wrong"
95
+ grep -Eq '(^|[ ,])generate, help([ ,]|$)' "$CONTRACT" && pass "contract list has generate" || fail "contract list missing generate"
96
+ grep -Fq "**36 commands are synced**" "$SYNC" && pass "sync count = 36" || fail "sync count wrong"
98
97
  SYNC_SKILL="$ROOT/pipeline/skills/shared/core/multi-agent-sync/SKILL.md"
99
- grep -Fq "**37 commands are synced**" "$SYNC_SKILL" && pass "sync SKILL count = 37" || fail "sync SKILL count wrong (Copilot parity)"
100
- grep -Fq "generate-task" "$ROOT/pipeline/skills/shared/core/multi-agent-help/SKILL.md" && pass "help SKILL lists generators" || fail "help SKILL missing generators (Copilot parity)"
101
- grep -c "generate-task" "$HELP" | awk '{exit !($1>=2)}' && pass "help.md has EN + TR entries" || fail "help.md entries incomplete"
98
+ grep -Fq "**36 commands are synced**" "$SYNC_SKILL" && pass "sync SKILL count = 36" || fail "sync SKILL count wrong (Copilot parity)"
99
+ grep -Fq "generate" "$ROOT/pipeline/skills/shared/core/multi-agent-help/SKILL.md" && pass "help SKILL lists generate" || fail "help SKILL missing generate (Copilot parity)"
100
+ grep -c "multi-agent:generate" "$HELP" | awk '{exit !($1>=2)}' && pass "help.md has EN + TR entries" || fail "help.md entries incomplete"
101
+ # no stale split-command references anywhere in the synced surfaces
102
+ if grep -rqE "generate-task|generate-bug" "$DISPATCHER" "$CONTRACT" "$SYNC" "$HELP" "$CMD" "$REF" "$SKILL"; then
103
+ fail "stale generate-task/generate-bug reference found"
104
+ else
105
+ pass "no stale split-command references"
106
+ fi
102
107
 
103
108
  echo ""
104
109
  echo "→ 9. forbidden strings absent"
105
110
  MWORD="MAN""DATORY"
106
- for f in "$CMD_TASK" "$CMD_BUG" "$REF" "$SKILL_TASK" "$SKILL_BUG"; do
111
+ for f in "$CMD" "$REF" "$SKILL"; do
107
112
  if grep -q $'—\|§\|…' "$f"; then fail "forbidden unicode punctuation in ${f##*/}"; else pass "punctuation clean: ${f##*/}"; fi
108
113
  if grep -q "$MWORD" "$f"; then fail "forbidden word in ${f##*/}"; else pass "vocabulary clean: ${f##*/}"; fi
109
114
  if grep -q "unicode_escape" "$f" && ! grep -q "Never round-trip" "$f"; then fail "unicode_escape misuse in ${f##*/}"; else pass "encoding rule clean: ${f##*/}"; fi
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-07-06T11:38:47.307Z",
4
- "skillCount": 224,
3
+ "generatedAt": "2026-07-07T13:28:32.523Z",
4
+ "skillCount": 223,
5
5
  "entries": [
6
6
  {
7
7
  "name": "accessibility-compliance-accessibility-audit",
@@ -1156,22 +1156,13 @@
1156
1156
  "relativePath": "shared/core/multi-agent-garbage-collect/SKILL.md"
1157
1157
  },
1158
1158
  {
1159
- "name": "multi-agent-generate-bug",
1160
- "description": "Create a standards-compliant Jira Bug: mines project conventions, drafts in outputLanguage, full preview + explicit approval before create.",
1159
+ "name": "multi-agent-generate",
1160
+ "description": "Create a standards-compliant Jira issue (Task / Bug / Story): asks the type, mines project conventions, drafts from a standard template with auto-sizing sections, full preview + explicit approval before create.",
1161
1161
  "platform": null,
1162
1162
  "group": "core",
1163
1163
  "triggerKeywords": [],
1164
1164
  "triggerPaths": [],
1165
- "relativePath": "shared/core/multi-agent-generate-bug/SKILL.md"
1166
- },
1167
- {
1168
- "name": "multi-agent-generate-task",
1169
- "description": "Create a standards-compliant Jira Task: mines project conventions, drafts in outputLanguage, full preview + explicit approval before create.",
1170
- "platform": null,
1171
- "group": "core",
1172
- "triggerKeywords": [],
1173
- "triggerPaths": [],
1174
- "relativePath": "shared/core/multi-agent-generate-task/SKILL.md"
1165
+ "relativePath": "shared/core/multi-agent-generate/SKILL.md"
1175
1166
  },
1176
1167
  {
1177
1168
  "name": "multi-agent-help",
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: multi-agent-generate
3
+ language: en
4
+ description: "Create a standards-compliant Jira issue (Task / Bug / Story): asks the type, mines project conventions, drafts from a standard template with auto-sizing sections, full preview + explicit approval before create."
5
+ user-invocable: true
6
+ argument-hint: "[\"<free-text description>\"] [figma-url] [swagger-url] - all optional, asked interactively when missing"
7
+ ---
8
+
9
+ # multi-agent generate - Standards-Compliant Jira Issue Creator
10
+
11
+ **Input**: $ARGUMENTS
12
+
13
+ Creates exactly one Jira issue, and only after explicit approval. The issue type (Task / Bug / Story) is asked at the start of every run. No branches, no commits, no worktrees. The description comes from the type's standard template (baseline, not a mined heading set); sections auto-size - a conditional section renders only when its trigger is present, otherwise the heading is omitted.
14
+
15
+ > **Language**: issue content (summary + description) and user-facing questions follow `prefs.global.outputLanguage` - intentional exception to the "external payloads stay English" default (the issue is authored for the user's team). Code identifiers and URLs stay verbatim.
16
+
17
+ ## Standard templates (A = always, C = conditional)
18
+
19
+ - **Task**: Detailed Description (A), Scope (A), Acceptance Criteria (A), Test Scenarios (A); API Contract/Swagger (C), Design Reference (C), Screenshots (C), Notes (C).
20
+ - **Bug**: Detailed Description (A), Steps to Reproduce (A), Expected Result (A), Actual Result (A), Environment (A); Screenshots/Logs (C), Regression/Test Scenario (C), API Contract (C), Design Reference (C), Notes (C).
21
+ - **Story**: User Story (A), Detailed Description (A), Scope (A), Acceptance Criteria (A), Test Scenarios (A); API Contract/Swagger (C), Design Reference (C), Screenshots (C), Dependencies/Notes (C).
22
+
23
+ A `C` section fires on: Design Reference → Figma URL; Screenshots → pasted image or fetched Figma render; API Contract → Swagger URL / contract / endpoint mention; Notes → real content. No empty placeholder headings; never invent content.
24
+
25
+ ## Steps
26
+
27
+ 1. **Account + token** - pick the Jira account (auto-select when single), then:
28
+ ```bash
29
+ TOKEN=$(~/.copilot/lib/credential-store.sh get "$ACCOUNT_JIRA_TOKEN_KEY")
30
+ ```
31
+ Missing/expired (401) → Token Save Flow; user skips → abort, nothing created.
32
+ 2. **Project key** - `figmaConfig.jira.projectKey` → `prefs.global.defaultJiraKey` → fetch `GET /rest/api/2/project`, ask, cache the choice.
33
+ 3. **Pick issue type** - ask (Task / Bug / Story), never inferred silently → `ISSUE_TYPE`. Drives the mining JQL, field discovery, and section skeleton.
34
+ 4. **Parse input** - `figma.com` URL → `FIGMA_URL` (node-id `-` → `:`); OpenAPI/Swagger URL (`swagger`/`openapi`/`api-docs`/`.json`/`.yaml`) → `SWAGGER_URL`; pasted images → screenshots; log/stack-trace text stays with `FREE_TEXT`; the rest is `FREE_TEXT`. All empty → ask for a description. Figma/Swagger/screenshots are always optional.
35
+ 5. **Convention mining + field discovery + sprint** (read-only GETs):
36
+ - Sample: `GET /rest/api/2/search?jql=project={KEY} AND issuetype={TYPE} ORDER BY created DESC&fields=summary,description,labels,components,priority,fixVersions,issuelinks&maxResults=30`. Extract summary prefix pattern (>= 40% threshold), top-5 labels/components, modal priority, epic usage rate, and **test-scenario style**: linked Test-family issues (Xray/Zephyr) → reference them; else a dominant test-scenario heading/checklist style (>= 40%) → reuse it; else inline a skeleton derived from Acceptance Criteria (user edits, never fabricated).
37
+ - `GET /rest/api/2/issue/createmeta?projectKeys={KEY}&issuetypeNames={TYPE}&expand=projects.issuetypes.fields` (404/empty → paged DC endpoint fallback). Required custom fields → step 7 questions with allowedValues options. Detect Sprint/Epic/Team fields generically via `schema.custom` ids.
38
+ - `GET /rest/agile/1.0/board?projectKeyOrId={KEY}` → (ask when multiple) → `GET /rest/agile/1.0/board/{id}/sprint?state=active`. No board/Agile 404 → sprint option silently omitted.
39
+ 6. **External context** (only for provided sources, each failure-isolated, never blocks create):
40
+ - **Figma** (`FIGMA_URL` set) - 3-tier chain (MCP → REST figma_pat → user screenshot); standalone command, MCP allowed here.
41
+ - **Swagger** (`SWAGGER_URL` set or contract pasted) - fetch the spec, extract ONLY the referenced endpoints (paths/operationIds/tags named in `FREE_TEXT`, else the pointed-at group): method + path + one-line summary + key request/response fields. Never crawl the whole spec. Fetch failure → link-only or omit.
42
+ - **Screenshots** - staged for the step 8 attachment opt-in, referenced inline with `!file|thumbnail!`.
43
+ 7. **Draft + clarifying questions** - compose summary (`{minedPrefix} {title}`, 255 trunc) + description from the type's **standard template** in Jira wiki markup (`h3.`), auto-sizing conditional sections, humanizer pass, in `outputLanguage`; body to a file for `jq -n --rawfile` (UTF-8 verbatim, `--data-binary @file`, no re-encode). Ask ONLY genuinely unknown fields: component, epic (when usage rate is high), priority (when norm ambiguous), labels, assignee, sprint vs backlog, required customs, and any always-present section still empty (Bug Steps/Environment, or a Task/Story with no derivable Scope/AC). Never invent content the user did not supply.
44
+ 8. **Full preview + approval gate (never skipped)** - render the complete issue (all fields + full description + attachment plan, uploads default off). Ask: `Approve` / `Edit` (apply → re-render → re-ask, loop) / `Cancel` (nothing created). No flag or mode bypasses this gate.
45
+ 9. **Create** - `POST /rest/api/2/issue` with `jq -n --rawfile` payload + `curl --data-binary @file`. 400 field errors → show verbatim, re-ask those fields, re-preview.
46
+ 10. **Post-create** (each failure-isolated: warn + continue): sprint chosen → `POST /rest/agile/1.0/sprint/{id}/issue` `{"issues":["KEY"]}`; Figma → `POST /rest/api/2/issue/{KEY}/remotelink`; Swagger → `remotelink` with title "API contract"; screenshots opt-in → `POST /rest/api/2/issue/{KEY}/attachments` with `X-Atlassian-Token: no-check`.
47
+ 11. **Report** - `Created {KEY}: https://{host}/browse/{KEY}` + which post-steps ran.
48
+
49
+ ## Error paths
50
+
51
+ 401 token → Save Flow or abort (nothing created); mining/createmeta 403 → standard-template defaults + reactive 400 handling; zero sampled issues → skip mining, AC-derived test-scenario skeleton, note in preview; no board/active sprint → backlog implied, say so; Figma/Swagger failure → degrade (link-only or omit), never block; create 5xx → one retry then abort keeping the draft file; post-create failure → warn + continue.
@@ -98,8 +98,7 @@ Utility Commands (dash form on Copilot, colon form on Claude Code):
98
98
  /multi-agent:purge Worktree + logs - full reset (double confirm)
99
99
  /multi-agent:channels Post multi-channel report (Jira/Confluence/Wiki/PR)
100
100
  /multi-agent:review Review current diff only
101
- /multi-agent:generate-task ["desc"] [figma-url] Create a Jira Task matching team conventions (preview + approval)
102
- /multi-agent:generate-bug ["desc"] [figma-url] Create a Jira Bug matching team conventions (preview + approval)
101
+ /multi-agent:generate ["desc"] [figma-url] [swagger-url] Create a Jira Task/Bug/Story matching team conventions (asks type + preview + approval)
103
102
  /multi-agent:sync Sync ecosystem (Claude + Copilot + website + remote-control)
104
103
  /multi-agent:setup Keychain tokens + Git identity + language onboarding
105
104
  /multi-agent:language [en|tr] Show or set prompt language
@@ -235,8 +234,7 @@ Utility Komutları:
235
234
  /multi-agent:purge Worktree + log'lar - tam reset (çift onay)
236
235
  /multi-agent:channels Multi-channel rapor gönder (Jira/Confluence/Wiki/PR)
237
236
  /multi-agent:review Sadece mevcut diff'i review et
238
- /multi-agent:generate-task ["açıklama"] [figma-url] Takım standartlarına uygun Jira Task oluştur (önizleme + onay)
239
- /multi-agent:generate-bug ["açıklama"] [figma-url] Takım standartlarına uygun Jira Bug oluştur (önizleme + onay)
237
+ /multi-agent:generate ["açıklama"] [figma-url] [swagger-url] Takım standartlarına uygun Jira Task/Bug/Story oluştur (tip sorar + önizleme + onay)
240
238
  /multi-agent:sync Ekosistemi senkronize et
241
239
  /multi-agent:setup Keychain token + Git kimliği + dil onboarding
242
240
  /multi-agent:language [en|tr] Prompt dilini göster veya ayarla
@@ -158,12 +158,12 @@ When invoked with the `release` argument:
158
158
  |-------------|-------------|
159
159
  | `~/.claude/commands/multi-agent/{cmd}.md` | `~/.copilot/skills/multi-agent-{cmd}/SKILL.md` |
160
160
 
161
- **37 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
161
+ **36 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
162
162
 
163
163
  ```
164
164
  analysis, analysis-resolve, autopilot, build-optimize, channels, delete, dev,
165
165
  dev-autopilot, dev-local, dev-local-autopilot, diff-explain, finish, garbage-collect,
166
- generate-bug, generate-task, help, issue, jira, kill, language, local,
166
+ generate, help, issue, jira, kill, language, local,
167
167
  local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review,
168
168
  scan, search, setup, stack, status, sync, test, update
169
169
  ```
@@ -3,7 +3,7 @@
3
3
  > Auto-generated by `pipeline/scripts/build-skills-index.mjs` - do not hand-edit.
4
4
  > Regenerate with `node pipeline/scripts/build-skills-index.mjs`.
5
5
 
6
- **224 skills** across 5 groups.
6
+ **223 skills** across 5 groups.
7
7
 
8
8
  | Group | Name | Platform | Description |
9
9
  |-------|------|----------|-------------|
@@ -135,8 +135,7 @@
135
135
  | core | `multi-agent-diff-explain` | - | Map Phase 4 triage findings to branch diff lines. Read-only post-hoc command, used after review to answer 'which finding lines up with which |
136
136
  | core | `multi-agent-finish` | - | Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenari |
137
137
  | core | `multi-agent-garbage-collect` | - | Sweep leftover /tmp scratch (picker state, review diffs, channel payloads, analysis drafts) from past runs. Dry-run first; confirms before d |
138
- | core | `multi-agent-generate-bug` | - | Create a standards-compliant Jira Bug: mines project conventions, drafts in outputLanguage, full preview + explicit approval before create. |
139
- | core | `multi-agent-generate-task` | - | Create a standards-compliant Jira Task: mines project conventions, drafts in outputLanguage, full preview + explicit approval before create. |
138
+ | core | `multi-agent-generate` | - | Create a standards-compliant Jira issue (Task / Bug / Story): asks the type, mines project conventions, drafts from a standard template with |
140
139
  | core | `multi-agent-help` | - | Multi-agent pipeline usage guide - renders in EN or TR per prefs.global.outputLanguage (falls back to promptLanguage for backward compatib |
141
140
  | core | `multi-agent-issue` | - | List unassigned GitHub issues, pick one, auto-assign, and launch the multi-agent pipeline. |
142
141
  | core | `multi-agent-jira` | - | List open Jira issues, pick one, and launch the multi-agent pipeline. |
@@ -1,33 +0,0 @@
1
- ---
2
- description: "Create a standards-compliant Jira Bug: mines project conventions, drafts in outputLanguage, full preview + explicit approval before create."
3
- argument-hint: "[\"<free-text description>\"] [figma-url] - both optional; pasted logs/screens in the text land in Steps to Reproduce / Environment"
4
- ---
5
-
6
- # multi-agent generate-bug - Standards-Compliant Jira Bug Creator
7
-
8
- **Input**: $ARGUMENTS
9
-
10
- Creates exactly one Jira **Bug**, and only after explicit approval. No branches, no commits, no worktrees, no pipeline chaining. The draft learns the target project's conventions from its recent Bugs (summary format, description template, labels, components, priority norms) and offers active-sprint placement when a sprint is running.
11
-
12
- > **Language**: instruction prose here is English. AskUserQuestion `question`/`description` and the issue content (summary + description) follow `prefs.global.outputLanguage` - an intentional exception to the "external payloads stay English" default, because the issue is authored for the user's team. `label`/`header` stay English.
13
-
14
- ## Profile
15
-
16
- | Key | Value |
17
- |---|---|
18
- | `ISSUE_TYPE` | `Bug` |
19
- | Default description sections | Steps to Reproduce, Expected Result, Actual Result, Environment, Design Reference (only when a Figma URL is given), Notes |
20
- | JQL sample filter | `issuetype = Bug` |
21
- | Priority default | mined norm from sampled Bugs (bug priorities often skew higher - respect the project's own norm) |
22
-
23
- ## Flow
24
-
25
- Read `$HOME/.claude/commands/multi-agent/refs/generate-issue.md` and execute the 11-step shared flow with the profile above. Non-negotiables restated:
26
-
27
- - Free-text parsing maps logs, stack traces, and device/OS mentions into Steps to Reproduce and Environment; anything underivable is asked in step [7/11], never invented.
28
- - Ask the user (AskUserQuestion) about every genuinely unknown field - component, epic, priority, labels, assignee, sprint vs backlog, required custom fields, missing Steps to Reproduce / Environment.
29
- - Step [8/11] full preview + approval gate always runs. `Approve` / `Edit` (loop) / `Cancel`. No bypass exists.
30
-
31
- ## Error paths
32
-
33
- See `refs/generate-issue.md` Error paths. No command-specific additions.
@@ -1,33 +0,0 @@
1
- ---
2
- description: "Create a standards-compliant Jira Task: mines project conventions, drafts in outputLanguage, full preview + explicit approval before create."
3
- argument-hint: "[\"<free-text description>\"] [figma-url] - both optional, asked interactively when missing"
4
- ---
5
-
6
- # multi-agent generate-task - Standards-Compliant Jira Task Creator
7
-
8
- **Input**: $ARGUMENTS
9
-
10
- Creates exactly one Jira **Task**, and only after explicit approval. No branches, no commits, no worktrees, no pipeline chaining. The draft learns the target project's conventions from its recent Tasks (summary format, description template, labels, components, priority norms) and offers active-sprint placement when a sprint is running.
11
-
12
- > **Language**: instruction prose here is English. AskUserQuestion `question`/`description` and the issue content (summary + description) follow `prefs.global.outputLanguage` - an intentional exception to the "external payloads stay English" default, because the issue is authored for the user's team. `label`/`header` stay English.
13
-
14
- ## Profile
15
-
16
- | Key | Value |
17
- |---|---|
18
- | `ISSUE_TYPE` | `Task` |
19
- | Default description sections | Goal, Scope, Acceptance Criteria, Design Reference (only when a Figma URL is given), Notes |
20
- | JQL sample filter | `issuetype = Task` |
21
- | Priority default | mined norm from sampled Tasks |
22
-
23
- ## Flow
24
-
25
- Read `$HOME/.claude/commands/multi-agent/refs/generate-issue.md` and execute the 11-step shared flow with the profile above. Non-negotiables restated:
26
-
27
- - Ask the user (AskUserQuestion) about every genuinely unknown field - component, epic, priority, labels, assignee, sprint vs backlog, required custom fields.
28
- - Step [8/11] full preview + approval gate always runs. `Approve` / `Edit` (loop) / `Cancel`. No bypass exists.
29
- - Never invent Goal, Scope, or Acceptance Criteria content the user did not supply.
30
-
31
- ## Error paths
32
-
33
- See `refs/generate-issue.md` Error paths. No command-specific additions.
@@ -1,39 +0,0 @@
1
- ---
2
- name: multi-agent-generate-bug
3
- language: en
4
- description: "Create a standards-compliant Jira Bug: mines project conventions, drafts in outputLanguage, full preview + explicit approval before create."
5
- user-invocable: true
6
- argument-hint: "[\"<free-text description>\"] [figma-url] - both optional; pasted logs/screens in the text land in Steps to Reproduce / Environment"
7
- ---
8
-
9
- # multi-agent generate-bug - Standards-Compliant Jira Bug Creator
10
-
11
- **Input**: $ARGUMENTS
12
-
13
- Creates exactly one Jira **Bug**, and only after explicit approval. No branches, no commits, no worktrees. Profile: `ISSUE_TYPE=Bug`; default description sections: Steps to Reproduce, Expected Result, Actual Result, Environment, Design Reference (only when a Figma URL is given), Notes.
14
-
15
- > **Language**: issue content (summary + description) and user-facing questions follow `prefs.global.outputLanguage` - intentional exception to the "external payloads stay English" default (the issue is authored for the user's team). Code identifiers and URLs stay verbatim.
16
-
17
- ## Steps
18
-
19
- 1. **Account + token** - pick the Jira account (auto-select when single), then:
20
- ```bash
21
- TOKEN=$(~/.copilot/lib/credential-store.sh get "$ACCOUNT_JIRA_TOKEN_KEY")
22
- ```
23
- Missing/expired (401) → Token Save Flow; user skips → abort, nothing created.
24
- 2. **Project key** - `figmaConfig.jira.projectKey` → `prefs.global.defaultJiraKey` → fetch `GET /rest/api/2/project`, ask, cache the choice.
25
- 3. **Parse input** - `figma.com` URL in `$ARGUMENTS` → `FIGMA_URL` (node-id `-` → `:`); the rest is `FREE_TEXT`. Logs, stack traces, and device/OS mentions map into Steps to Reproduce / Environment. Both empty → ask for a description. Figma URL is always optional.
26
- 4. **Convention mining + field discovery + sprint** (read-only GETs):
27
- - Sample: `GET /rest/api/2/search?jql=project={KEY} AND issuetype=Bug ORDER BY created DESC&fields=summary,description,labels,components,priority,fixVersions&maxResults=30`. Extract summary prefix pattern (>= 40% threshold), dominant description heading set (>= 50% overrides the profile sections), top-5 labels/components, modal priority, epic usage rate.
28
- - `GET /rest/api/2/issue/createmeta?projectKeys={KEY}&issuetypeNames=Bug&expand=projects.issuetypes.fields` (404/empty → paged DC endpoint fallback). Required custom fields → step 6 questions with allowedValues options. Detect Sprint/Epic/Team fields generically via `schema.custom` ids.
29
- - `GET /rest/agile/1.0/board?projectKeyOrId={KEY}` → (ask when multiple) → `GET /rest/agile/1.0/board/{id}/sprint?state=active`. No board/Agile 404 → sprint option silently omitted.
30
- 5. **Figma context** (only when `FIGMA_URL` set) - 3-tier chain (MCP → REST figma_pat → user screenshot); standalone command, MCP allowed here. Figma failures never block issue creation.
31
- 6. **Draft + clarifying questions** - compose summary (`{minedPrefix} {title}`, 255 trunc) + description (mined heading set or profile sections, Jira wiki markup `h3.`, humanizer pass) in `outputLanguage`; body to a file for `jq -n --rawfile` (UTF-8 verbatim, `--data-binary @file`, no re-encode). Ask ONLY genuinely unknown fields: component, epic (when usage rate is high), priority (when norm ambiguous), labels, assignee, sprint vs backlog, required customs, missing Steps to Reproduce / Environment. Never invent repro steps or environments the user did not supply.
32
- 7. **Full preview + approval gate (never skipped)** - render the complete issue (all fields + full description + attachment plan, screenshot default off). Ask: `Approve` / `Edit` (apply → re-render → re-ask, loop) / `Cancel` (nothing created). No flag or mode bypasses this gate.
33
- 8. **Create** - `POST /rest/api/2/issue` with `jq -n --rawfile` payload + `curl --data-binary @file`. 400 field errors → show verbatim, re-ask those fields, re-preview.
34
- 9. **Post-create** (each failure-isolated: warn + continue): sprint chosen → `POST /rest/agile/1.0/sprint/{id}/issue` `{"issues":["KEY"]}`; Figma → `POST /rest/api/2/issue/{KEY}/remotelink`; screenshot opt-in → `POST /rest/api/2/issue/{KEY}/attachments` with `X-Atlassian-Token: no-check`.
35
- 10. **Report** - `Created {KEY}: https://{host}/browse/{KEY}` + which post-steps ran.
36
-
37
- ## Error paths
38
-
39
- 401 token → Save Flow or abort (nothing created); mining/createmeta 403 → profile defaults + reactive 400 handling; zero sampled issues → skip mining, note in preview; no board/active sprint → backlog implied, say so; create 5xx → one retry then abort keeping the draft file; post-create failure → warn + continue.
@@ -1,39 +0,0 @@
1
- ---
2
- name: multi-agent-generate-task
3
- language: en
4
- description: "Create a standards-compliant Jira Task: mines project conventions, drafts in outputLanguage, full preview + explicit approval before create."
5
- user-invocable: true
6
- argument-hint: "[\"<free-text description>\"] [figma-url] - both optional, asked interactively when missing"
7
- ---
8
-
9
- # multi-agent generate-task - Standards-Compliant Jira Task Creator
10
-
11
- **Input**: $ARGUMENTS
12
-
13
- Creates exactly one Jira **Task**, and only after explicit approval. No branches, no commits, no worktrees. Profile: `ISSUE_TYPE=Task`; default description sections: Goal, Scope, Acceptance Criteria, Design Reference (only when a Figma URL is given), Notes.
14
-
15
- > **Language**: issue content (summary + description) and user-facing questions follow `prefs.global.outputLanguage` - intentional exception to the "external payloads stay English" default (the issue is authored for the user's team). Code identifiers and URLs stay verbatim.
16
-
17
- ## Steps
18
-
19
- 1. **Account + token** - pick the Jira account (auto-select when single), then:
20
- ```bash
21
- TOKEN=$(~/.copilot/lib/credential-store.sh get "$ACCOUNT_JIRA_TOKEN_KEY")
22
- ```
23
- Missing/expired (401) → Token Save Flow; user skips → abort, nothing created.
24
- 2. **Project key** - `figmaConfig.jira.projectKey` → `prefs.global.defaultJiraKey` → fetch `GET /rest/api/2/project`, ask, cache the choice.
25
- 3. **Parse input** - `figma.com` URL in `$ARGUMENTS` → `FIGMA_URL` (node-id `-` → `:`); the rest is `FREE_TEXT`. Both empty → ask for a description. Figma URL is always optional.
26
- 4. **Convention mining + field discovery + sprint** (read-only GETs):
27
- - Sample: `GET /rest/api/2/search?jql=project={KEY} AND issuetype=Task ORDER BY created DESC&fields=summary,description,labels,components,priority,fixVersions&maxResults=30`. Extract summary prefix pattern (>= 40% threshold), dominant description heading set (>= 50% overrides the profile sections), top-5 labels/components, modal priority, epic usage rate.
28
- - `GET /rest/api/2/issue/createmeta?projectKeys={KEY}&issuetypeNames=Task&expand=projects.issuetypes.fields` (404/empty → paged DC endpoint fallback). Required custom fields → step 6 questions with allowedValues options. Detect Sprint/Epic/Team fields generically via `schema.custom` ids.
29
- - `GET /rest/agile/1.0/board?projectKeyOrId={KEY}` → (ask when multiple) → `GET /rest/agile/1.0/board/{id}/sprint?state=active`. No board/Agile 404 → sprint option silently omitted.
30
- 5. **Figma context** (only when `FIGMA_URL` set) - 3-tier chain (MCP → REST figma_pat → user screenshot); standalone command, MCP allowed here. Figma failures never block issue creation.
31
- 6. **Draft + clarifying questions** - compose summary (`{minedPrefix} {title}`, 255 trunc) + description (mined heading set or profile sections, Jira wiki markup `h3.`, humanizer pass) in `outputLanguage`; body to a file for `jq -n --rawfile` (UTF-8 verbatim, `--data-binary @file`, no re-encode). Ask ONLY genuinely unknown fields: component, epic (when usage rate is high), priority (when norm ambiguous), labels, assignee, sprint vs backlog, required customs. Never invent content the user did not supply.
32
- 7. **Full preview + approval gate (never skipped)** - render the complete issue (all fields + full description + attachment plan, screenshot default off). Ask: `Approve` / `Edit` (apply → re-render → re-ask, loop) / `Cancel` (nothing created). No flag or mode bypasses this gate.
33
- 8. **Create** - `POST /rest/api/2/issue` with `jq -n --rawfile` payload + `curl --data-binary @file`. 400 field errors → show verbatim, re-ask those fields, re-preview.
34
- 9. **Post-create** (each failure-isolated: warn + continue): sprint chosen → `POST /rest/agile/1.0/sprint/{id}/issue` `{"issues":["KEY"]}`; Figma → `POST /rest/api/2/issue/{KEY}/remotelink`; screenshot opt-in → `POST /rest/api/2/issue/{KEY}/attachments` with `X-Atlassian-Token: no-check`.
35
- 10. **Report** - `Created {KEY}: https://{host}/browse/{KEY}` + which post-steps ran.
36
-
37
- ## Error paths
38
-
39
- 401 token → Save Flow or abort (nothing created); mining/createmeta 403 → profile defaults + reactive 400 handling; zero sampled issues → skip mining, note in preview; no board/active sprint → backlog implied, say so; create 5xx → one retry then abort keeping the draft file; post-create failure → warn + continue.