@mmerterden/multi-agent-pipeline 10.9.0 → 10.12.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.
Files changed (43) hide show
  1. package/CHANGELOG.md +143 -0
  2. package/README.md +1 -1
  3. package/package.json +1 -1
  4. package/pipeline/commands/multi-agent/channels.md +42 -6
  5. package/pipeline/commands/multi-agent/finish.md +15 -6
  6. package/pipeline/commands/multi-agent/generate-bug.md +33 -0
  7. package/pipeline/commands/multi-agent/generate-task.md +33 -0
  8. package/pipeline/commands/multi-agent/help.md +12 -0
  9. package/pipeline/commands/multi-agent/manual-test.md +9 -2
  10. package/pipeline/commands/multi-agent/refs/channels/pr.md +1 -1
  11. package/pipeline/commands/multi-agent/refs/cross-cli-contract.md +7 -6
  12. package/pipeline/commands/multi-agent/refs/generate-issue.md +197 -0
  13. package/pipeline/commands/multi-agent/refs/keychain.md +12 -0
  14. package/pipeline/commands/multi-agent/refs/phases/phase-0-init.md +31 -2
  15. package/pipeline/commands/multi-agent/refs/phases/phase-3-dev.md +2 -0
  16. package/pipeline/commands/multi-agent/refs/phases/phase-4-review.md +2 -0
  17. package/pipeline/commands/multi-agent/refs/phases/phase-5-test.md +6 -1
  18. package/pipeline/commands/multi-agent/refs/phases/phase-7-report.md +5 -1
  19. package/pipeline/commands/multi-agent/refs/progress-contract.md +1 -0
  20. package/pipeline/commands/multi-agent/refs/tracker-contract.md +56 -13
  21. package/pipeline/commands/multi-agent/resume.md +6 -2
  22. package/pipeline/commands/multi-agent/sync.md +5 -5
  23. package/pipeline/commands/multi-agent.md +4 -0
  24. package/pipeline/lib/figma-mcp-refresh.sh +79 -0
  25. package/pipeline/preferences-template.json +2 -1
  26. package/pipeline/schemas/prefs.schema.json +11 -0
  27. package/pipeline/scripts/fixtures/install-layout.tsv +6 -6
  28. package/pipeline/scripts/phase-tracker.sh +134 -22
  29. package/pipeline/scripts/smoke-channels-approval-gate.sh +60 -0
  30. package/pipeline/scripts/smoke-generate-issue.sh +114 -0
  31. package/pipeline/scripts/smoke-phase-tracker.sh +69 -0
  32. package/pipeline/scripts/smoke-progress-contract.sh +9 -0
  33. package/pipeline/scripts/smoke-tasklist-ordering.sh +1 -0
  34. package/pipeline/scripts/smoke-token-preflight.sh +82 -0
  35. package/pipeline/scripts/smoke-tracker-contract.sh +62 -0
  36. package/pipeline/skills/.skills-index.json +22 -4
  37. package/pipeline/skills/shared/core/multi-agent/SKILL.md +2 -1
  38. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +4 -2
  39. package/pipeline/skills/shared/core/multi-agent-generate-bug/SKILL.md +39 -0
  40. package/pipeline/skills/shared/core/multi-agent-generate-task/SKILL.md +39 -0
  41. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +4 -0
  42. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +5 -5
  43. package/pipeline/skills/skills-index.md +5 -3
package/CHANGELOG.md CHANGED
@@ -14,6 +14,149 @@ Internal file-layout changes that don't affect the slash-command surface are sti
14
14
 
15
15
  ---
16
16
 
17
+ ## [10.12.0] - 2026-07-06
18
+
19
+ Two trust upgrades: every external channel post now shows a plan-mode-style
20
+ preview + approval gate before anything is written (autopilot posts directly),
21
+ and Phase 0 gains a proactive token expiry pre-flight with silent Figma MCP
22
+ renewal via OAuth refresh grant.
23
+
24
+ ### Added
25
+
26
+ - **Channels Step 6 body preview + approval gate** (dispatch → Step 7,
27
+ summary → Step 8) - interactive runs render
28
+ every selected channel's final body (PR description, Jira comment,
29
+ Confluence page, Wiki, Board move, GitHub issue comment) and ask
30
+ Approve & post / Edit (loop) / Skip channels / Cancel before dispatch.
31
+ Bypassed only by autopilot and `--dry-run`. What is posted is byte-identical
32
+ to the approved preview; regeneration after approval re-runs the gate.
33
+ Phase 7 Step 1.5 (issue comment + progress flags) routes through the same
34
+ gate. Contract: `smoke-channels-approval-gate.sh`.
35
+ - **Phase 0 Step 0.7 token expiry pre-flight** - probes every token the run
36
+ will need (jira/github/bitbucket/confluence/figma/figma_mcp) with one cheap
37
+ call each (cached via `serviceStatus`, TTL 300s) and resolves expiry AT INIT
38
+ instead of on the first mid-run 401. Figma MCP is the critical path: silent
39
+ renewal first, then an init-time question (Regenerate now via script / Save
40
+ Flow / Continue degraded). Autopilot never prompts - silent renewal or
41
+ logged degrade. Contract: `smoke-token-preflight.sh`.
42
+ - **`lib/figma-mcp-refresh.sh`** - silent Figma MCP (`figu_`) renewal via
43
+ OAuth refresh grant: reads `<key>_Refresh` from the Keychain + client
44
+ credentials from the `.figma-oauth.json` next to
45
+ `prefs.global.tokenScripts.figma_mcp`, saves the new access (and rotated
46
+ refresh) token back. Status lines only - token values never printed.
47
+ Live-verified end-to-end (renewed + mcp.figma.com probe 200).
48
+ - **`prefs.global.tokenScripts`** (schema + template) - maps service ids to
49
+ user-owned token generation scripts; personal paths stay in the local
50
+ preferences file, never in synced command files.
51
+ - **keychain.md Figma MCP lifecycle section** - refresh-entry convention,
52
+ silent-renewal-first rule, generation-script escalation, init cross-ref.
53
+
54
+ ### Fixed
55
+
56
+ - Copilot parity catch-ups the 10.11.0 sweep missed: `multi-agent-sync/SKILL.md`
57
+ inventory 35 -> 37 + list, `multi-agent-help/SKILL.md` generator entries
58
+ (EN + TR), `multi-agent-channels/SKILL.md` flow now includes the approval
59
+ gate (steps 6-8). `smoke-generate-issue.sh` now asserts the SKILL-side
60
+ counts too.
61
+ - `figma-mcp-refresh.sh` form fields sent via `--data-urlencode` (robust to
62
+ special characters in tokens); re-verified live.
63
+
64
+ ## [10.11.0] - 2026-07-06
65
+
66
+ Jira issue generators: `/multi-agent:generate-task` and `/multi-agent:generate-bug` create standards-compliant Jira issues by learning the target project's own conventions before drafting, with a hard preview + approval gate before anything is created.
67
+
68
+ ### Added
69
+
70
+ - **`/multi-agent:generate-task` + `/multi-agent:generate-bug`** - one-shot
71
+ Jira issue creators (no worktree, no commits, no pipeline chaining). Inputs:
72
+ optional free-text description + optional Figma URL; both asked
73
+ interactively when missing.
74
+ - **Convention mining** - samples the project's 30 most recent same-type
75
+ issues (JQL) and adopts the team's summary prefix pattern, dominant
76
+ description heading set, top labels/components, and priority norm.
77
+ createmeta discovery surfaces required custom fields (allowedValues become
78
+ picker options) and detects Sprint/Epic/Team fields generically by
79
+ `schema.custom` id.
80
+ - **Active-sprint placement** - Agile REST board + `sprint?state=active`
81
+ detection; the user chooses active sprint vs backlog. Sprint assignment
82
+ happens post-create via `POST /rest/agile/1.0/sprint/{id}/issue`
83
+ (field-id-agnostic). No board / no active sprint degrades to backlog with
84
+ an explicit note.
85
+ - **Hard approval gate** - a full draft preview (every field + complete
86
+ description) renders before create; Approve / Edit (loop) / Cancel. The
87
+ gate has no bypass: no autopilot variant exists for these commands.
88
+ Genuinely unknown fields (component, epic, priority, labels, assignee,
89
+ sprint, required customs, missing Bug repro/environment) are asked, never
90
+ invented.
91
+ - **Figma context (optional)** - the 3-tier chain (MCP -> REST PAT -> user
92
+ screenshot) resolves frame name + node id for a Design Reference section,
93
+ a remote link on the created issue, and an opt-in screenshot attachment.
94
+ Standalone command, so MCP use is allowed (analysis-class); Figma failures
95
+ never block issue creation.
96
+ - **Language rule** - issue summary + description follow
97
+ `prefs.global.outputLanguage` (intentional exception to the
98
+ external-payloads-English default; the issue is authored for the user's
99
+ team). Documented in both command files and the shared ref.
100
+ - **Shared flow ref** `refs/generate-issue.md` - single 11-step contract
101
+ consumed by both commands via profile blocks (`ISSUE_TYPE`, default
102
+ sections, JQL filter); UTF-8 verbatim POST path (`jq --rawfile` +
103
+ `--data-binary @file`) and humanizer pass reused from the Jira channel
104
+ adapter.
105
+ - **Smoke gate** `smoke-generate-issue.sh` - 66 assertions: file/frontmatter
106
+ presence, profile declarations, approval-gate markers, endpoint markers,
107
+ UTF-8 path, section vocabulary, 37-command count consistency across
108
+ dispatcher/contract/sync/help, forbidden-string scan.
109
+
110
+ ### Changed
111
+
112
+ - Command inventory 35 -> 37 across `cross-cli-contract.md`, `sync.md`,
113
+ dispatcher routing/loading tables, `help.md` (EN + TR), README.
114
+
115
+ ## [10.10.0] - 2026-07-03
116
+
117
+ Live tracker UX: per-tile cost, a real "currently doing X" line, and tracker continuity across the local-test handover. Shaped by a market sweep of 2026 agent-UX practice (transparency-first live status; per-step cost visibility).
118
+
119
+ ### Added
120
+
121
+ - **`phase-tracker.sh now <N> "<text>"`** - dedicated live current-action
122
+ line for the active phase (quiet: writes `meta.Now`, never renders, 60-char
123
+ cap). The bordered card shows it as `Now: <text>` under the active tile.
124
+ - **`phase-tracker.sh cost <N>|total`** - single pricing implementation
125
+ (cost-table.json rates, cached tokens at the discounted cacheRead rate,
126
+ floored to cents; `-` when unpriceable). The completion narration line,
127
+ the card, and finish's summary all reuse it - no more inline USD math.
128
+ - **Per-tile est. USD + cached footer on the bash card.** Tiles render
129
+ `<elapsed> · <tok> tok · ~$<usd>` when the phase has a priced model; the
130
+ footer adds total USD and cached tokens. Render survives a missing cost
131
+ table. Tiles now sort by numeric phase id so continuation sets stay ordered.
132
+ - **Progress-line mirror rule** (tracker-contract "Active phase" +
133
+ progress-contract cross-link): every normal-tier `→ verb object` line is
134
+ mirrored to the active phase - `TaskUpdate activeForm` on Claude Code,
135
+ `now` elsewhere - so the tracker always answers "what is it doing right
136
+ now". Throttled: canonical lines only, dedupe, no renders.
137
+ - **Completion tile suffix (Claude Code):** on phase completion the tile
138
+ subject gains the spend (`Phase 3: Dev · ~35k tok · ~$0.58`); subject edits
139
+ do not reorder tiles.
140
+ - **Tracker continuity across the local-test handover.** Phase 5 and
141
+ `/multi-agent:manual-test` mark the waiting state
142
+ (`now 5 "awaiting local test (user)"`); `/multi-agent:finish` now runs
143
+ load-or-continue instead of an unconditional `init` - prior phase 0-3
144
+ history (elapsed, tokens, USD) survives, Phase 5 is closed with a Result
145
+ meta, the Claude Code TaskList is rebuilt from state, and one line
146
+ summarizes the inherited history (`Continuing <id>: phases 0-3 finished
147
+ earlier (12m, 38.4k tok, ~$0.74)`). `add` is idempotent to make this safe.
148
+ - **`/multi-agent:resume` rebuilds the phase tiles** from `tracker-state.json`
149
+ (the contract documented it; the command now actually does it).
150
+ - **Phase 0 + 7 token forwarding**: the clarifier call and the Phase 7 report
151
+ compose call forward tokens to the tracker, completing all 8 tiles.
152
+
153
+ ### Fixed
154
+
155
+ - Tracker doc drift: the `tokens` action's 4th `[cached]` arg and the `model`
156
+ action are now documented in the contract and the script usage text.
157
+
158
+ ---
159
+
17
160
  ## [10.9.0] - 2026-07-03
18
161
 
19
162
  ### Added
package/README.md CHANGED
@@ -63,7 +63,7 @@ The discipline behind all of this — bounded loops, evidence gates, token-budge
63
63
  | Local | `/multi-agent:local "task"` | Full pipeline, current branch (no worktree) |
64
64
  | Finish | `/multi-agent:finish` | Run the review→test→commit→report tail over local work |
65
65
 
66
- Helpers: `setup`, `status`, `resume #N`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `jira`, `issue`, `analysis`. Full list: `/multi-agent:help`.
66
+ Helpers: `setup`, `status`, `resume #N`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `jira`, `issue`, `analysis`, `generate-task`, `generate-bug`. Full list: `/multi-agent:help`.
67
67
 
68
68
  ## Stacks
69
69
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "10.9.0",
3
+ "version": "10.12.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",
@@ -34,7 +34,7 @@ Target resolution is identical to the pre-existing enrich flow - any of the 6
34
34
 
35
35
  ## Flow
36
36
 
37
- `resolve target → fetch context → menu (or flags) → generator → humanizer → dispatch → summary`. Channels: Jira comment, Confluence page, Wiki pages, PR description, Board status (GitHub Projects v2).
37
+ `resolve target → fetch context → menu (or flags) → generator → humanizer → approval → dispatch → summary`. Channels: Jira comment, Confluence page, Wiki pages, PR description, Board status (GitHub Projects v2).
38
38
 
39
39
  ### Step 1 - Target resolution
40
40
 
@@ -49,7 +49,7 @@ Target resolution is identical to the pre-existing enrich flow - any of the 6
49
49
 
50
50
  **Multi-repo:** when `agent-state.json` `projects[].length > 1`, Step 1 builds **one target per project**. Each project's PR is resolved via `pr` field in its projects[] entry; if missing, the Jira/Issue link query returns multiple PRs (one per repo) - all are added to `targets[]`. The project at `projects[0]` (or whose name matches `state.project`) is marked `isPrimary: true`; others are `isPrimary: false`.
51
51
 
52
- For single-repo tasks, `targets` has exactly one entry. The rest of the flow is target-aware: Step 5 generates one body, Step 6 dispatches to each target, with cross-links (see below).
52
+ For single-repo tasks, `targets` has exactly one entry. The rest of the flow is target-aware: Step 5 generates one body, Step 7 dispatches to each target, with cross-links (see below).
53
53
 
54
54
  ### Step 2 - Context source detection
55
55
 
@@ -298,9 +298,44 @@ Generated by `pipeline/scripts/render-cost-summary.sh <task-id>` using prices fr
298
298
 
299
299
  **Target length rule:** full body fits one screen on a typical laptop (< 80 lines). Auto-diff summary capped at 5 lines per section. No framework-theory paragraphs, no numbered "why this approach" lists.
300
300
 
301
- ### Step 6 - Channel dispatch
301
+ ### Step 6 - Body preview + approval gate (interactive modes)
302
302
 
303
- For each selected **channel**, call the corresponding adapter. Adapters run **in parallel** - one failure does not block others.
303
+ Plan-mode-style gate: the user sees exactly what will be posted BEFORE any external write. Runs after the generator + humanizer, before Step 7 dispatch, in every interactive invocation - menu mode AND `--channels`/`--content` flag mode alike (flags pick the targets, they do not waive the content approval).
304
+
305
+ Skipped in exactly two cases:
306
+
307
+ | Case | Why |
308
+ |---|---|
309
+ | Autopilot (`state.autopilot === true` or `MULTI_AGENT_AUTOPILOT=1`) | Explicit consent for side-effect creation - posts directly with prefs/flag selections, zero interaction |
310
+ | `--dry-run` | Already prints without posting; a question would be redundant |
311
+
312
+ **Preview render** (one block per selected channel, final body after humanizer - shown in readable Markdown, channel-specific markup conversion happens after approval):
313
+
314
+ ```
315
+ ── PR description ({repoName} #{prNumber}, replace) ─────────
316
+ {body}
317
+ ── Jira comment ({jiraId}) ──────────────────────────────────
318
+ {body}
319
+ ── Confluence page ("{title}" under {parentUrl}) ────────────
320
+ {body}
321
+ ```
322
+
323
+ Secondary artifacts ride along as one-line intents at the bottom of the preview: Wiki page list, wiki → Jira triad comment (when Wiki is selected and the triad is active per `refs/issue-jira-triad.md`), Board status move (`{from} → {to}`), GitHub issue comment + Progress-flag sync (Phase 7 Step 1.5 - same gate, see `refs/phases/phase-7-report.md`).
324
+
325
+ **Then a single AskUserQuestion** (`question`/`description` in `outputLanguage`; `label`/`header` English):
326
+
327
+ | Option | Behavior |
328
+ |---|---|
329
+ | `Approve & post` | Step 7 dispatches every previewed body verbatim |
330
+ | `Edit` | Free-text "which channel, what should change" → apply → re-render the FULL preview → re-ask (loop, no cap) |
331
+ | `Skip channels` | multiSelect which channels to drop this run → re-render remaining → re-ask |
332
+ | `Cancel` | Abort dispatch entirely - nothing posted anywhere. Internal capture (agent-log, knowledge) is unaffected |
333
+
334
+ **Hard rule:** what is posted is byte-identical to the approved preview (markup conversion excepted). Any body regeneration after approval invalidates the approval and re-runs the gate. Persisting channel prefs (Step 8) still happens on `Cancel` - selection memory and content approval are independent.
335
+
336
+ ### Step 7 - Channel dispatch
337
+
338
+ For each selected **channel**, call the corresponding adapter. Adapters run **in parallel** - one failure does not block others. Dispatch NEVER starts before the Step 6 gate resolves (`Approve & post`), except in the two documented skip cases (autopilot, `--dry-run`).
304
339
 
305
340
  **Multi-repo dispatch:** When `state.projects[].length > 1`, the dispatcher delegates per-channel rendering to `~/.claude/lib/channels-multi-repo.sh`:
306
341
 
@@ -358,7 +393,7 @@ Full contract: [`refs/channels/confluence.md`](refs/channels/confluence.md) -
358
393
 
359
394
  Full contract: [`refs/channels/wiki.md`](refs/channels/wiki.md) - all four `figma-config.wiki.mode` adapters (submodule / in-repo / github-wiki / separate-repo), full Case A scope menu, screenshot quadrant gate.
360
395
 
361
- ### Step 7 - Summary
396
+ ### Step 8 - Summary
362
397
 
363
398
  After all adapters complete (or fail non-blocking):
364
399
 
@@ -397,6 +432,7 @@ Persist selections to `prefs.global.reportChannels` + `prefs.global.reportConten
397
432
  - **No markers** - channels does a full replace each run; no `<!-- channels:start -->` bookmarks.
398
433
  - **Every body item references a symbol/file/line** from diff or pipeline log. No generic "tested the feature" sentences.
399
434
  - **Adapter failures are non-blocking** - one channel failing does not abort others. Final summary shows per-adapter status.
435
+ - **Approval before post** - interactive runs never write to an external channel without the Step 6 preview + approval. Autopilot and `--dry-run` are the only bypasses.
400
436
 
401
437
  ## Error handling
402
438
 
@@ -423,7 +459,7 @@ Phase 7 invokes this command internally instead of running its own inline Jira/C
423
459
 
424
460
  Phase 7 passes a runtime state bundle: `{jiraId, prUrl, remoteType, taskType, figmaConfig, agentState, pipelineLogPath}`. `channels` reads these directly, skips target-resolution Step 1.
425
461
 
426
- **Autopilot contract:** Phase 7 ALWAYS pauses at the channels menu (breaks generic autopilot zero-interaction). 30-min timeout → session ends cleanly, task resumable via `/multi-agent:resume`. See `refs/phases/modes.md` for full contract.
462
+ **Autopilot contract:** Phase 7 ALWAYS pauses at the channels menu (breaks generic autopilot zero-interaction). 30-min timeout → session ends cleanly, task resumable via `/multi-agent:resume`. See `refs/phases/modes.md` for full contract. The Step 6 body preview + approval gate follows the same split: interactive runs approve the composed bodies before dispatch; autopilot posts directly after the menu resolves.
427
463
 
428
464
  ## Cross-CLI parity
429
465
 
@@ -65,25 +65,34 @@ Phases 1-3 (Analysis / Planning / Dev) are skipped by design - `finish` treats
65
65
 
66
66
  ## Required: Phase Tracker Contract
67
67
 
68
- **The phase tracker is mandatory.** Full spec: [`refs/tracker-contract.md`](./refs/tracker-contract.md). `finish` registers only its active phase set - `0:Init 4:Review 5:Build+Test 6:Commit 7:Report` (phases 1-3 are not part of the finish set; do not register tiles for them).
68
+ **The phase tracker is required.** Full spec: [`refs/tracker-contract.md`](./refs/tracker-contract.md). `finish` registers its active phase set - `0:Init 4:Review 5:Build+Test 6:Commit 7:Report` - but NEVER resets a tracker that an earlier run already built (load-or-continue; contract section "Continuation runs"):
69
69
 
70
70
  ```bash
71
- # Phase 0, first shell call (every CLI):
72
- bash $HOME/.claude/scripts/phase-tracker.sh init "$TASK_ID"
71
+ # Phase 0, first shell call (every CLI). init ONLY when no prior state exists -
72
+ # a task handed off from Phase 5 ("awaiting local test") keeps its full
73
+ # phase 0-3 history (elapsed, tokens, USD).
74
+ STATE="$HOME/.claude/logs/multi-agent/${TASK_ID}/tracker-state.json"
75
+ if [ ! -f "$STATE" ]; then
76
+ bash $HOME/.claude/scripts/phase-tracker.sh init "$TASK_ID"
77
+ fi
73
78
  for p in "0:Init" "4:Review" "5:Build+Test" "6:Commit" "7:Report"; do
74
- bash $HOME/.claude/scripts/phase-tracker.sh add "${p%%:*}" "${p#*:}"
79
+ bash $HOME/.claude/scripts/phase-tracker.sh add "${p%%:*}" "${p#*:}" # idempotent: existing phases keep their history
75
80
  done
76
81
  bash $HOME/.claude/scripts/phase-tracker.sh update 0 in_progress
77
82
 
78
83
  # Every phase boundary (every CLI):
79
84
  bash $HOME/.claude/scripts/phase-tracker.sh update <N> in_progress|completed|failed|skipped
80
85
  # After every LLM call (every CLI):
81
- bash $HOME/.claude/scripts/phase-tracker.sh tokens <N> <in> <out>
86
+ bash $HOME/.claude/scripts/phase-tracker.sh tokens <N> <in> <out> [cached]
82
87
  ```
83
88
 
89
+ **Continuation path (prior state existed):** (1) if Phase 5 was left `in_progress` with `Now: awaiting local test (user)`, mark it `update 5 completed` + `meta 5 Result "local test done (user)"` before finish's own work (finish re-opens it with `update 5 in_progress` when its Build+Test gate runs; elapsed keeps the original `started_at`, which is expected); (2) print ONE line in `outputLanguage` summarizing the inherited history, e.g. `Continuing PROJ-12345: phases 0-3 finished earlier (12m, 38.4k tok, ~$0.74)` (USD via `phase-tracker.sh cost total`); (3) `render`.
90
+
84
91
  ### Visual channel - Claude Code (native TaskList widget, required)
85
92
 
86
- Register one tile per phase in **strict creation order** (`0 → 4 → 5 → 6 → 7`) BEFORE any TaskUpdate, capture each `taskId`, persist via `phase-tracker.sh meta <N> tasklist_id "<taskId>"`, then flip status with `TaskUpdate` at each boundary. Out-of-order TaskCreate scrambles the tile stack. Full contract: `refs/tracker-contract.md` "TaskCreate ordering (strict)".
93
+ Fresh state: register one tile per phase in strict phase-number order (`0 → 4 → 5 → 6 → 7`) BEFORE any TaskUpdate, capture each `taskId`, persist via `phase-tracker.sh meta <N> tasklist_id "<taskId>"`, then flip status with `TaskUpdate` at each boundary. Out-of-order TaskCreate scrambles the tile stack. Full contract: `refs/tracker-contract.md` "TaskCreate ordering (strict)".
94
+
95
+ Continuation: rebuild the FULL TaskList from the state file (completed 0-3 tiles included) in phase order before any `TaskUpdate`, refreshing every `tasklist_id` meta - same as the contract's "Resume behaviour".
87
96
 
88
97
  ### Visual channel - Copilot CLI / plain shell
89
98
 
@@ -0,0 +1,33 @@
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.
@@ -0,0 +1,33 @@
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.
@@ -111,6 +111,8 @@ 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
116
  /multi-agent:diff-explain Map a Phase 4 triage finding back to specific diff lines
115
117
  /multi-agent:search Cross-task log search with smart ranking; --semantic queries triage corpus
116
118
  /multi-agent:scan Skill security scan against tiered pattern catalog
@@ -220,6 +222,10 @@ Examples:
220
222
  # Review current diff only
221
223
  /multi-agent:review
222
224
 
225
+ # 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"
228
+
223
229
  ------------------------------------------------------------
224
230
 
225
231
  Logs: $HOME/.claude/logs/multi-agent/{project}/{task-id}/
@@ -318,6 +324,8 @@ Post-Hoc & Side-Channel:
318
324
  /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)
319
325
  /multi-agent:analysis-resolve [doc] Analiz dokümanının Bölüm 20 açık sorularını kaynak etiketli adaylarla teker teker çözer
320
326
  /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)
321
329
  /multi-agent:diff-explain Phase 4 triage bulgusunu diff satırlarına eşle
322
330
  /multi-agent:search Task log'larında akıllı arama; --semantic triage corpus'unu sorgular
323
331
  /multi-agent:scan Skill güvenlik taraması (tiered pattern catalog)
@@ -427,6 +435,10 @@ Quality & Telemetry (advisory, default açık - prefs.global.* ile kapatılabi
427
435
  # Sadece mevcut diff'i review et
428
436
  /multi-agent:review
429
437
 
438
+ # 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"
441
+
430
442
  ------------------------------------------------------------
431
443
 
432
444
  Log'lar: $HOME/.claude/logs/multi-agent/{project}/{task-id}/
@@ -22,6 +22,13 @@ Lets you switch to the task branch for manual testing in Xcode before the PR is
22
22
  git checkout {branch-name}
23
23
  ```
24
24
 
25
+ Then mark the tracker as waiting (this CONTINUES the task's existing `tracker-state.json`; never `init` here - see `refs/tracker-contract.md` "Continuation runs"). On Claude Code in a fresh session, first rebuild the TaskList from state per the same contract:
26
+ ```bash
27
+ bash $HOME/.claude/scripts/phase-tracker.sh update 5 in_progress
28
+ bash $HOME/.claude/scripts/phase-tracker.sh now 5 "awaiting local test (user)"
29
+ bash $HOME/.claude/scripts/phase-tracker.sh render
30
+ ```
31
+
25
32
  4. **Tell the user how to test**:
26
33
  ```
27
34
  🧪 Switched to branch: {branch-name}
@@ -39,5 +46,5 @@ Lets you switch to the task branch for manual testing in Xcode before the PR is
39
46
  5. **Wait for the user's reply**
40
47
 
41
48
  6. **Branch on the answer**:
42
- - **OK** → recreate the worktree, continue to Phase 6
43
- - **Fix needed** → recreate the worktree, apply the fix
49
+ - **OK** → `phase-tracker.sh update 5 completed` + `phase-tracker.sh meta 5 Result "local test passed (user)"`, recreate the worktree, continue to Phase 6
50
+ - **Fix needed** → `phase-tracker.sh now 5 "applying fix: <summary>"`, recreate the worktree, apply the fix
@@ -120,7 +120,7 @@ Single-repo tasks return one entry from `channels-multi-repo.sh targets ...` wit
120
120
  The Bitbucket REST API returns `409 Conflict` if `version` is stale. Adapter behaviour:
121
121
 
122
122
  1. Refetch PR JSON, retry the PUT once with the new `version`.
123
- 2. Second mismatch → fail this adapter, log reason, return `{status: "failed", reason: "version conflict"}`. Other adapters keep running - non-blocking by Step 6 contract.
123
+ 2. Second mismatch → fail this adapter, log reason, return `{status: "failed", reason: "version conflict"}`. Other adapters keep running - non-blocking by Step 7 contract.
124
124
 
125
125
  ## Flags that affect this adapter
126
126
 
@@ -6,19 +6,20 @@
6
6
 
7
7
  ---
8
8
 
9
- ## 1. Command Inventory (35 commands)
9
+ ## 1. Command Inventory (37 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
- help, issue, jira, kill, language, local, local-autopilot, log, manual-test,
15
- prune-logs, purge, refactor, resume, review, scan, search, setup, stack, status,
16
- sync, test, update
14
+ generate-bug, generate-task, help, issue, jira, kill, language, local,
15
+ local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review,
16
+ scan, search, setup, stack, status, sync, test, update
17
17
  ```
18
18
 
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
23
  - **Full 8-phase modes**: `autopilot`, `local`, `local-autopilot`
23
24
  - **Fast modes** (Init -> Dev(Opus) -> Commit -> Report): `dev`, `dev-autopilot`, `dev-local`, `dev-local-autopilot`
24
25
  - **Tail modes** (run the pipeline tail over already-done local work): `finish`
@@ -29,7 +30,7 @@ Categories:
29
30
 
30
31
  ### 1.1 Figma component subphase skills
31
32
 
32
- In addition to the 35 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 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
34
 
34
35
  | Location | Skill count | Purpose |
35
36
  |---|---|---|
@@ -311,7 +312,7 @@ For clipboard ops, callers still gate with `if command -v pbpaste >/dev/null; th
311
312
 
312
313
  This contract is validated by:
313
314
 
314
- - `smoke-cross-cli-behavior.sh` - asserts all 35 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 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
316
  - `smoke-commands-skills-parity.sh` (50 assertions) - enforces colon-form command ↔ dash-form skill directory parity
316
317
  - `smoke-compliance-skills.sh` (45 assertions) - enforces store-compliance skill catalog + 4 consumer wiring
317
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