@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 +27 -0
- package/package.json +1 -1
- package/pipeline/commands/multi-agent/generate.md +34 -0
- package/pipeline/commands/multi-agent/help.md +6 -8
- package/pipeline/commands/multi-agent/refs/cross-cli-contract.md +5 -5
- package/pipeline/commands/multi-agent/refs/generate-issue.md +123 -53
- package/pipeline/commands/multi-agent/sync.md +7 -7
- package/pipeline/commands/multi-agent.md +2 -4
- package/pipeline/scripts/smoke-generate-issue.sh +44 -39
- package/pipeline/skills/.skills-index.json +5 -14
- package/pipeline/skills/shared/core/multi-agent-generate/SKILL.md +51 -0
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +2 -4
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +2 -2
- package/pipeline/skills/skills-index.md +2 -3
- package/pipeline/commands/multi-agent/generate-bug.md +0 -33
- package/pipeline/commands/multi-agent/generate-task.md +0 -33
- package/pipeline/skills/shared/core/multi-agent-generate-bug/SKILL.md +0 -39
- package/pipeline/skills/shared/core/multi-agent-generate-task/SKILL.md +0 -39
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": "
|
|
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
|
|
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
|
|
227
|
-
/multi-agent:generate
|
|
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
|
|
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
|
|
440
|
-
/multi-agent:generate
|
|
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 (
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1
|
+
# Generate Issue - Shared Flow (generate)
|
|
2
2
|
|
|
3
|
-
> **TLDR** - Shared
|
|
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
|
|
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 [
|
|
10
|
-
- **Never invent content.** Anything the user did not supply and mining could not derive stays an open question (step [
|
|
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-
|
|
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/
|
|
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/
|
|
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/
|
|
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
|
-
-
|
|
47
|
-
- `FIGMA_URL`
|
|
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
|
-
### [
|
|
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
|
-
**
|
|
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
|
|
61
|
-
- **
|
|
62
|
-
- **
|
|
63
|
-
- **
|
|
64
|
-
- **
|
|
65
|
-
|
|
66
|
-
|
|
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 issuetype → pre-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
|
|
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
|
|
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
|
-
**
|
|
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
|
|
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
|
-
### [
|
|
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
|
|
96
|
-
- Any tier failure degrades gracefully;
|
|
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
|
-
### [
|
|
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**:
|
|
103
|
-
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
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
|
-
### [
|
|
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
|
|
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
|
|
120
|
-
- **
|
|
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
|
|
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
|
-
### [
|
|
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
|
|
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
|
|
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
|
-
### [
|
|
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
|
|
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
|
-
### [
|
|
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
|
|
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. **
|
|
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
|
-
### [
|
|
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
|
|
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
|
|
191
|
-
| Zero sampled issues (new project) | Skip mining, use
|
|
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
|
-
|
|
|
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 +
|
|
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 `
|
|
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
|
|
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 "
|
|
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
|
|
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
|
-
**
|
|
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
|
|
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
|
|
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
|
|
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
|
|
2
|
+
# smoke-generate-issue.sh - contract for /multi-agent:generate.
|
|
3
3
|
#
|
|
4
4
|
# Verifies:
|
|
5
|
-
# 1. All
|
|
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.
|
|
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.
|
|
12
|
-
# 8. Registration: dispatcher rows, inventory lists, count consistency (
|
|
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
|
-
|
|
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
|
-
|
|
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 "$
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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.
|
|
54
|
-
|
|
55
|
-
|
|
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 -
|
|
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.
|
|
83
|
-
for s in "
|
|
84
|
-
grep -Fq "$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" "$
|
|
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 (
|
|
92
|
-
grep -Fq '| `generate
|
|
93
|
-
grep -Fq
|
|
94
|
-
grep -Fq "
|
|
95
|
-
grep -
|
|
96
|
-
grep -
|
|
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 "**
|
|
100
|
-
grep -Fq "generate
|
|
101
|
-
grep -c "generate
|
|
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 "$
|
|
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-
|
|
4
|
-
"skillCount":
|
|
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
|
|
1160
|
-
"description": "Create a standards-compliant Jira Bug: mines project conventions, drafts
|
|
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
|
|
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
|
|
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
|
|
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
|
-
**
|
|
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
|
|
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
|
-
**
|
|
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
|
|
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.
|