@mmerterden/multi-agent-pipeline 10.9.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.
Files changed (41) hide show
  1. package/CHANGELOG.md +170 -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.md +34 -0
  7. package/pipeline/commands/multi-agent/help.md +10 -0
  8. package/pipeline/commands/multi-agent/manual-test.md +9 -2
  9. package/pipeline/commands/multi-agent/refs/channels/pr.md +1 -1
  10. package/pipeline/commands/multi-agent/refs/cross-cli-contract.md +7 -6
  11. package/pipeline/commands/multi-agent/refs/generate-issue.md +267 -0
  12. package/pipeline/commands/multi-agent/refs/keychain.md +12 -0
  13. package/pipeline/commands/multi-agent/refs/phases/phase-0-init.md +31 -2
  14. package/pipeline/commands/multi-agent/refs/phases/phase-3-dev.md +2 -0
  15. package/pipeline/commands/multi-agent/refs/phases/phase-4-review.md +2 -0
  16. package/pipeline/commands/multi-agent/refs/phases/phase-5-test.md +6 -1
  17. package/pipeline/commands/multi-agent/refs/phases/phase-7-report.md +5 -1
  18. package/pipeline/commands/multi-agent/refs/progress-contract.md +1 -0
  19. package/pipeline/commands/multi-agent/refs/tracker-contract.md +56 -13
  20. package/pipeline/commands/multi-agent/resume.md +6 -2
  21. package/pipeline/commands/multi-agent/sync.md +9 -9
  22. package/pipeline/commands/multi-agent.md +2 -0
  23. package/pipeline/lib/figma-mcp-refresh.sh +79 -0
  24. package/pipeline/preferences-template.json +2 -1
  25. package/pipeline/schemas/prefs.schema.json +11 -0
  26. package/pipeline/scripts/fixtures/install-layout.tsv +6 -6
  27. package/pipeline/scripts/phase-tracker.sh +134 -22
  28. package/pipeline/scripts/smoke-channels-approval-gate.sh +60 -0
  29. package/pipeline/scripts/smoke-generate-issue.sh +119 -0
  30. package/pipeline/scripts/smoke-phase-tracker.sh +69 -0
  31. package/pipeline/scripts/smoke-progress-contract.sh +9 -0
  32. package/pipeline/scripts/smoke-tasklist-ordering.sh +1 -0
  33. package/pipeline/scripts/smoke-token-preflight.sh +82 -0
  34. package/pipeline/scripts/smoke-tracker-contract.sh +62 -0
  35. package/pipeline/skills/.skills-index.json +13 -4
  36. package/pipeline/skills/shared/core/multi-agent/SKILL.md +2 -1
  37. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +4 -2
  38. package/pipeline/skills/shared/core/multi-agent-generate/SKILL.md +51 -0
  39. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +2 -0
  40. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +5 -5
  41. package/pipeline/skills/skills-index.md +4 -3
@@ -250,6 +250,75 @@ STATE_LIVE="$HOME/.claude/logs/multi-agent/TOK-LIVE/tracker-state.json"
250
250
  TIN_LIVE=$(jq -r '.phases[0].tokens_in // 0' "$STATE_LIVE")
251
251
  [ "$TIN_LIVE" = "600" ] && pass "TRACKER_QUIET still accumulates state (500+100=600)" || fail "quiet mode broke accumulation (got $TIN_LIVE)"
252
252
 
253
+ echo ""
254
+ echo "→ 20. now action: quiet, truncating current-action line"
255
+ run_plain init NOW-1 >/dev/null
256
+ run_plain add 3 "Dev" >/dev/null
257
+ run_plain update 3 in_progress >/dev/null
258
+ NOW_OUT=$(run_plain now 3 "editing TopBarView.swift")
259
+ if [ -n "$NOW_OUT" ]; then
260
+ fail "now must not render (got: $NOW_OUT)"
261
+ else
262
+ pass "now is quiet (no stdout)"
263
+ fi
264
+ STATE_NOW="$HOME/.claude/logs/multi-agent/NOW-1/tracker-state.json"
265
+ NOW_VAL=$(jq -r '.phases[0].meta.Now' "$STATE_NOW")
266
+ [ "$NOW_VAL" = "editing TopBarView.swift" ] && pass "now stored in meta.Now" || fail "meta.Now wrong: $NOW_VAL"
267
+ run_plain now 3 "this is a deliberately very long current action description that exceeds sixty characters"
268
+ NOW_LEN=$(jq -r '.phases[0].meta.Now | length' "$STATE_NOW")
269
+ [ "$NOW_LEN" = "60" ] && pass "now truncates to 60 chars" || fail "expected 60 chars, got $NOW_LEN"
270
+ RENDER_NOW=$(run_plain render)
271
+ echo "$RENDER_NOW" | grep -q "Now:" && pass "render shows Now: line for active phase" || fail "render missing Now: line"
272
+
273
+ echo ""
274
+ echo "→ 21. add is idempotent (continuation contract)"
275
+ run_plain tokens 3 1000 200 >/dev/null
276
+ run_plain add 3 "DevRenamed" >/dev/null
277
+ CNT=$(jq '.phases | length' "$STATE_NOW")
278
+ [ "$CNT" = "1" ] && pass "duplicate add does not append" || fail "expected 1 phase, got $CNT"
279
+ NAME3=$(jq -r '.phases[0].name' "$STATE_NOW")
280
+ [ "$NAME3" = "Dev" ] && pass "duplicate add preserves original name" || fail "name overwritten: $NAME3"
281
+ TIN3=$(jq -r '.phases[0].tokens_in' "$STATE_NOW")
282
+ [ "$TIN3" = "1000" ] && pass "duplicate add preserves token history" || fail "tokens lost: $TIN3"
283
+
284
+ echo ""
285
+ echo "→ 22. cost action prices via cost-table.json"
286
+ run_plain init COST-1 >/dev/null
287
+ run_plain add 3 "Dev" >/dev/null
288
+ run_plain update 3 in_progress >/dev/null
289
+ TRACKER_QUIET=1 run_plain model 3 opus >/dev/null
290
+ TRACKER_QUIET=1 run_plain tokens 3 100000 20000 >/dev/null
291
+ # opus: 0.1*5 + 0.02*25 = 0.5 + 0.5 = 1.00
292
+ COST3=$(run_plain cost 3)
293
+ [ "$COST3" = "1" ] && pass "cost 3 = 1 (opus 100k in + 20k out)" || fail "expected 1, got $COST3"
294
+ TRACKER_QUIET=1 run_plain tokens 3 0 0 50000 >/dev/null
295
+ # + 50k cached * 0.5/M = 0.025 -> total 1.025 -> floored 1.02
296
+ COST3C=$(run_plain cost 3)
297
+ [ "$COST3C" = "1.02" ] && pass "cached tokens priced at cacheReadPerMtok (1.02)" || fail "expected 1.02, got $COST3C"
298
+ COSTTOT=$(run_plain cost total)
299
+ [ "$COSTTOT" = "1.02" ] && pass "cost total sums priceable phases" || fail "expected 1.02, got $COSTTOT"
300
+ run_plain add 4 "Review" >/dev/null
301
+ TRACKER_QUIET=1 run_plain tokens 4 5000 1000 >/dev/null
302
+ COST4=$(run_plain cost 4)
303
+ [ "$COST4" = "-" ] && pass "cost is '-' for a phase without a model" || fail "expected -, got $COST4"
304
+ COSTBAD=$(run_plain cost 9)
305
+ [ "$COSTBAD" = "-" ] && pass "cost is '-' for unknown phase id" || fail "expected -, got $COSTBAD"
306
+
307
+ echo ""
308
+ echo "→ 23. render shows per-tile USD and cached footer"
309
+ RENDER_COST=$(run_plain render)
310
+ echo "$RENDER_COST" | grep -q '~\$1.02' && pass "tile shows ~\$ estimate for priced phase" || fail "render missing tile USD"
311
+ echo "$RENDER_COST" | grep -q "cached" && pass "footer shows cached tokens" || fail "render missing cached footer"
312
+ echo "$RENDER_COST" | grep -qE "Total.*~\\\$" && pass "footer shows total USD" || fail "render missing total USD"
313
+
314
+ echo ""
315
+ echo "→ 24. render sorts phases by numeric id (continuation ordering)"
316
+ run_plain init ORDER-1 >/dev/null
317
+ for pp in "0:Init" "5:Test"; do run_plain add "${pp%%:*}" "${pp#*:}" >/dev/null; done
318
+ for pp in "4:Review" "6:Commit"; do run_plain add "${pp%%:*}" "${pp#*:}" >/dev/null; done
319
+ ORDER_OUT=$(run_plain render | grep -oE "Phase [0-9]+" | tr -d 'Phase ' | tr '\n' ',')
320
+ [ "$ORDER_OUT" = "0,4,5,6," ] && pass "phases render sorted by id (0,4,5,6)" || fail "order wrong: $ORDER_OUT"
321
+
253
322
  echo ""
254
323
  echo "══ phase-tracker smoke: $PASS passed, $FAIL failed ══"
255
324
  [ "$FAIL" -eq 0 ]
@@ -113,6 +113,15 @@ if [ "$ADOPTED" -eq 0 ]; then
113
113
  warn "no phases have adopted yet - this is expected until WS-4/5/6 land"
114
114
  fi
115
115
 
116
+ echo ""
117
+ echo "→ Live mirror cross-link (tracker coupling)"
118
+ if grep -q "Live mirror to the phase tracker" "$CONTRACT" \
119
+ && grep -q "phase-tracker.sh now" "$CONTRACT"; then
120
+ pass "contract cross-links the tracker mirror rule"
121
+ else
122
+ fail "contract missing the live-mirror cross-link to tracker-contract.md"
123
+ fi
124
+
116
125
  echo ""
117
126
  echo "══ progress-contract smoke: $PASS passed, $WARN warnings, $FAIL failed ══"
118
127
  [ "$FAIL" -eq 0 ]
@@ -57,6 +57,7 @@ MODE_ENTRY_DOCS=(
57
57
  "pipeline/commands/multi-agent/dev-autopilot.md"
58
58
  "pipeline/commands/multi-agent/dev-local.md"
59
59
  "pipeline/commands/multi-agent/dev-local-autopilot.md"
60
+ "pipeline/commands/multi-agent/finish.md"
60
61
  )
61
62
  for rel in "${MODE_ENTRY_DOCS[@]}"; do
62
63
  abs="$ROOT/$rel"
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env bash
2
+ # smoke-token-preflight.sh - contract for the Phase 0 Step 0.7 token expiry pre-flight
3
+ # and the Figma MCP token lifecycle (silent refresh + generation-script escalation).
4
+ #
5
+ # Verifies:
6
+ # 1. phase-0-init.md has Step 0.7 with the probe table and figma-mcp-critical path.
7
+ # 2. Silent renewal runs BEFORE any question; autopilot never prompts.
8
+ # 3. keychain.md documents the Figma MCP lifecycle (refresh entry, tokenScripts, init cross-ref).
9
+ # 4. lib/figma-mcp-refresh.sh exists, is executable, parses, and never prints token values.
10
+ # 5. prefs.schema.json + preferences-template.json declare global.tokenScripts.
11
+ # 6. Network failure is not treated as expiry; mid-run 401 stays as safety net.
12
+
13
+ set -euo pipefail
14
+
15
+ HERE="$(cd "$(dirname "$0")" && pwd)"
16
+ ROOT="$(cd "$HERE/../.." && pwd)"
17
+ PHASE0="$ROOT/pipeline/commands/multi-agent/refs/phases/phase-0-init.md"
18
+ KEYCHAIN="$ROOT/pipeline/commands/multi-agent/refs/keychain.md"
19
+ REFRESH="$ROOT/pipeline/lib/figma-mcp-refresh.sh"
20
+ SCHEMA="$ROOT/pipeline/schemas/prefs.schema.json"
21
+ TEMPLATE="$ROOT/pipeline/preferences-template.json"
22
+
23
+ PASS=0
24
+ FAIL=0
25
+ pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
26
+ fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
27
+
28
+ need() { command -v "$1" >/dev/null 2>&1 || { echo "error: $1 required" >&2; exit 127; }; }
29
+ need jq
30
+
31
+ for f in "$PHASE0" "$KEYCHAIN" "$REFRESH" "$SCHEMA" "$TEMPLATE"; do
32
+ [ -f "$f" ] || { echo "error: missing $f" >&2; exit 1; }
33
+ done
34
+
35
+ echo "→ 1. Step 0.7 pre-flight section"
36
+ grep -Fq "Step 0.7 - Token expiry pre-flight" "$PHASE0" && pass "Step 0.7 present" || fail "Step 0.7 missing"
37
+ for marker in "rest/api/2/myself" "mcp.figma.com/mcp" "serviceStatus" "CRITICAL"; do
38
+ grep -Fq "$marker" "$PHASE0" && pass "probe marker: $marker" || fail "probe marker missing: $marker"
39
+ done
40
+
41
+ echo ""
42
+ echo "→ 2. silent renewal first, autopilot never prompts"
43
+ grep -Fq "figma-mcp-refresh.sh" "$PHASE0" && pass "silent renewal wired" || fail "silent renewal missing"
44
+ grep -Fq "Silent renewal first" "$PHASE0" && pass "renewal precedes question" || fail "renewal-first rule missing"
45
+ grep -Fq "never prompt" "$PHASE0" && pass "autopilot no-prompt rule" || fail "autopilot no-prompt rule missing"
46
+ grep -Fq "Regenerate now (script)" "$PHASE0" && pass "script escalation option" || fail "script escalation option missing"
47
+ grep -Fq "Continue degraded" "$PHASE0" && pass "degrade option" || fail "degrade option missing"
48
+
49
+ echo ""
50
+ echo "→ 3. keychain.md lifecycle section"
51
+ grep -Fq "Figma MCP token lifecycle" "$KEYCHAIN" && pass "lifecycle section present" || fail "lifecycle section missing"
52
+ grep -Fq "_Refresh" "$KEYCHAIN" && pass "refresh Keychain entry documented" || fail "refresh entry missing"
53
+ grep -Fq "tokenScripts" "$KEYCHAIN" && pass "tokenScripts documented" || fail "tokenScripts missing"
54
+ grep -Fq "Step 0.7" "$KEYCHAIN" && pass "init cross-ref present" || fail "init cross-ref missing"
55
+ grep -Fq "never in synced command files" "$KEYCHAIN" && pass "personal-path hygiene rule" || fail "personal-path hygiene rule missing"
56
+
57
+ echo ""
58
+ echo "→ 4. figma-mcp-refresh.sh integrity"
59
+ [ -x "$REFRESH" ] && pass "executable" || fail "not executable"
60
+ bash -n "$REFRESH" && pass "parses (bash -n)" || fail "syntax error"
61
+ grep -Fq "grant_type=refresh_token" "$REFRESH" && pass "refresh grant" || fail "refresh grant missing"
62
+ if grep -E 'echo .*\$(NEW_ACCESS|NEW_REFRESH|REFRESH_TOKEN)' "$REFRESH" >/dev/null; then
63
+ fail "token value printed to stdout"
64
+ else
65
+ pass "no token values printed"
66
+ fi
67
+ grep -Fq 'security add-generic-password' "$REFRESH" && pass "saves back to Keychain" || fail "Keychain save missing"
68
+
69
+ echo ""
70
+ echo "→ 5. prefs schema + template declare tokenScripts"
71
+ TS_TYPE=$(jq -r '.properties.global.properties.tokenScripts.type // "missing"' "$SCHEMA")
72
+ [ "$TS_TYPE" = "object" ] && pass "schema tokenScripts is object" || fail "schema tokenScripts type = '$TS_TYPE'"
73
+ jq -e '.global | has("tokenScripts")' "$TEMPLATE" >/dev/null && pass "template has tokenScripts" || fail "template missing tokenScripts"
74
+
75
+ echo ""
76
+ echo "→ 6. network failure is not expiry; 401 safety net stays"
77
+ grep -Fq "NOT treated as expiry" "$PHASE0" && pass "network-failure rule" || fail "network-failure rule missing"
78
+ grep -Fq "safety net" "$PHASE0" && pass "401 safety net documented" || fail "401 safety net missing"
79
+
80
+ echo ""
81
+ echo "══ token-preflight smoke: $PASS passed, $FAIL failed ══"
82
+ [ "$FAIL" -eq 0 ]
@@ -123,6 +123,68 @@ for mode_file in "${MODE_FILES[@]}"; do
123
123
  fi
124
124
  done
125
125
 
126
+ # ──────────────────────────────────────────────────────────────────────────
127
+ echo "→ 7. Live-tracker UX contract (now/cost actions, mirror rule, continuation)"
128
+ if grep -q 'phase-tracker.sh now' "$CONTRACT_FILE" \
129
+ && grep -q 'cost <N>' "$CONTRACT_FILE"; then
130
+ pass "tracker-contract documents now + cost actions"
131
+ else
132
+ fail "tracker-contract missing now/cost action docs"
133
+ fi
134
+ if grep -q '\[cached\]' "$CONTRACT_FILE" || grep -q '\[cached_count\]' "$CONTRACT_FILE"; then
135
+ pass "tracker-contract documents the 4th cached tokens arg"
136
+ else
137
+ fail "tracker-contract missing the cached tokens arg"
138
+ fi
139
+ if grep -q 'Progress-line mirror' "$CONTRACT_FILE"; then
140
+ pass "tracker-contract declares the progress-line mirror rule"
141
+ else
142
+ fail "tracker-contract missing the progress-line mirror rule"
143
+ fi
144
+ if grep -q 'Continuation runs' "$CONTRACT_FILE" \
145
+ && grep -q 'never re-initialized' "$CONTRACT_FILE"; then
146
+ pass "tracker-contract declares the continuation-runs rule"
147
+ else
148
+ fail "tracker-contract missing the continuation-runs rule"
149
+ fi
150
+ if grep -q 'Completion tile suffix' "$CONTRACT_FILE"; then
151
+ pass "tracker-contract declares the completion tile suffix"
152
+ else
153
+ fail "tracker-contract missing the completion tile suffix"
154
+ fi
155
+
156
+ # ──────────────────────────────────────────────────────────────────────────
157
+ echo "→ 8. Continuation wiring in finish + manual-test + phase-5"
158
+ FINISH_FILE="$CMDS_DIR/finish.md"
159
+ if grep -q '\[ ! -f "\$STATE" \]' "$FINISH_FILE"; then
160
+ pass "finish.md guards init behind a state-file existence check"
161
+ else
162
+ fail "finish.md must not init the tracker unconditionally"
163
+ fi
164
+ if grep -q 'Continuing' "$FINISH_FILE" && grep -q 'cost total' "$FINISH_FILE"; then
165
+ pass "finish.md prints the inherited-history line via cost total"
166
+ else
167
+ fail "finish.md missing the continuation summary line"
168
+ fi
169
+ MANUAL_FILE="$CMDS_DIR/manual-test.md"
170
+ if grep -q 'now 5 "awaiting local test (user)"' "$MANUAL_FILE"; then
171
+ pass "manual-test.md sets the waiting state via now 5"
172
+ else
173
+ fail "manual-test.md missing the now 5 waiting state"
174
+ fi
175
+ PHASE5_FILE="$CMDS_DIR/refs/phases/phase-5-test.md"
176
+ if grep -q 'now 5 "awaiting local test (user)"' "$PHASE5_FILE"; then
177
+ pass "phase-5-test.md sets the waiting state via now 5"
178
+ else
179
+ fail "phase-5-test.md missing the now 5 waiting state"
180
+ fi
181
+ RESUME_FILE="$CMDS_DIR/resume.md"
182
+ if grep -q 'Rebuild the phase tiles' "$RESUME_FILE"; then
183
+ pass "resume.md rebuilds the phase tiles from state"
184
+ else
185
+ fail "resume.md missing the tile-rebuild step"
186
+ fi
187
+
126
188
  # ──────────────────────────────────────────────────────────────────────────
127
189
  echo ""
128
190
  echo "══ tracker-contract smoke: $PASS passed, $FAIL failed ══"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-07-02T18:42:58.207Z",
4
- "skillCount": 222,
3
+ "generatedAt": "2026-07-07T13:28:32.523Z",
4
+ "skillCount": 223,
5
5
  "entries": [
6
6
  {
7
7
  "name": "accessibility-compliance-accessibility-audit",
@@ -1031,7 +1031,7 @@
1031
1031
  },
1032
1032
  {
1033
1033
  "name": "multi-agent",
1034
- "description": "Task orchestrator: runs the full pipeline from a Jira ID or GitHub Issue URL - analysis → plan → TDD development → parallel review (Opus + Sonnet on Claude Code, GPT + Opus + Sonnet on Copilot CLI) → commit → log. Every step is written to agent-log.md.",
1034
+ "description": "Task orchestrator: runs the full pipeline from a Jira ID or GitHub Issue URL - analysis → plan → TDD development → parallel review (Fable + Sonnet on Claude Code, GPT + Opus + Sonnet on Copilot CLI) → commit → log. Every step is written to agent-log.md.",
1035
1035
  "platform": null,
1036
1036
  "group": "core",
1037
1037
  "triggerKeywords": [],
@@ -1155,6 +1155,15 @@
1155
1155
  "triggerPaths": [],
1156
1156
  "relativePath": "shared/core/multi-agent-garbage-collect/SKILL.md"
1157
1157
  },
1158
+ {
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
+ "platform": null,
1162
+ "group": "core",
1163
+ "triggerKeywords": [],
1164
+ "triggerPaths": [],
1165
+ "relativePath": "shared/core/multi-agent-generate/SKILL.md"
1166
+ },
1158
1167
  {
1159
1168
  "name": "multi-agent-help",
1160
1169
  "description": "Multi-agent pipeline usage guide - renders in EN or TR per prefs.global.outputLanguage (falls back to promptLanguage for backward compatibility).",
@@ -1274,7 +1283,7 @@
1274
1283
  },
1275
1284
  {
1276
1285
  "name": "multi-agent-review",
1277
- "description": "Run parallel review on the current branch's diff: 2 models on Claude Code (Opus + Sonnet), 3 models on Copilot CLI (GPT + Opus + Sonnet). Review-only slice of the pipeline.",
1286
+ "description": "Run parallel review on the current branch's diff: 2 models on Claude Code (Fable + Sonnet), 3 models on Copilot CLI (GPT + Opus + Sonnet). Review-only slice of the pipeline.",
1278
1287
  "platform": null,
1279
1288
  "group": "core",
1280
1289
  "triggerKeywords": [],
@@ -309,7 +309,8 @@ Every user-facing phase title - TaskCreate cards, `phase-banner.sh` headers, a
309
309
  All TaskCreate calls fire in strict phase-number order BEFORE any TaskUpdate is applied (Claude Code path; Copilot CLI does not have a TaskList widget so this rule is Claude-only). The native widget renders by creation order, not by phase-number metadata - out-of-order calls produce visually scrambled tile stacks (e.g. `1 ✓ · 2 ✓ · 4 ✓ · 0 ▶ · 3 ☐`) even when the underlying state file is correct. Pre-marking phases as completed/skipped before Phase 0 starts is FORBIDDEN: register the tile in order with default `pending` status, then flip via TaskUpdate when the phase actually short-circuits. Mode-specific phase sets:
310
310
 
311
311
  - Full pipeline (`multi-agent`, `multi-agent-autopilot`, `multi-agent-local`, `multi-agent-local-autopilot`): 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7
312
- - `--dev` modes (`multi-agent-dev`, `multi-agent-dev-autopilot`, `multi-agent-dev-local`, `multi-agent-dev-local-autopilot`): 0 → 3 → 5 → 6 → 7 (phases 1/2/4 are NOT TaskCreate'd at all)
312
+ - `multi-agent-dev`: 0 → 3 → 5 → 6 → 7 (phases 1/2/4 are NOT TaskCreate'd at all)
313
+ - `multi-agent-dev-autopilot`, `multi-agent-dev-local`, `multi-agent-dev-local-autopilot`: 0 → 3 → 6 → 7 (phases 1/2/4/5 are NOT TaskCreate'd at all - the autopilot/local variants drop the interactive Phase 5 test gate)
313
314
 
314
315
  Full contract: `refs/tracker-contract.md` section "TaskCreate ordering (strict)".
315
316
 
@@ -41,8 +41,9 @@ multi-agent-channels PROJ-12345 --dry-run # preview, no POST
41
41
  3. **Menu (multi-select)** - channel + content, previous selections pre-ticked from `prefs.global.reportChannels` + `prefs.global.reportContent`. Greyed-out rules per context availability.
42
42
  4. **Mode short-circuit** - `--channels X,Y` + `--content A,B` flags skip menu. Autopilot ALWAYS pauses at the menu (v5.7+ Phase 7 exception).
43
43
  5. **Generator** - for each selected content source, produce a section body. Humanizer pass per channel separately.
44
- 6. **Channel dispatch** - parallel adapter calls: PR description (reviewer-preserving PUT on Bitbucket), Jira comment (wiki markup), Confluence page (storage format + parent page), Wiki (component adapter - Case A scope multi-select or Case B precondition menu).
45
- 7. **Summary** - per-adapter status line, persist selections to prefs.
44
+ 6. **Body preview + approval gate** - interactive runs render every selected channel's final body and ask Approve & post / Edit (loop) / Skip channels / Cancel BEFORE any external write. Skipped only by autopilot and `--dry-run`. What is posted is byte-identical to the approved preview.
45
+ 7. **Channel dispatch** - parallel adapter calls, never before the gate resolves: PR description (reviewer-preserving PUT on Bitbucket), Jira comment (wiki markup), Confluence page (storage format + parent page), Wiki (component adapter - Case A scope multi-select or Case B precondition menu).
46
+ 8. **Summary** - per-adapter status line, persist selections to prefs.
46
47
 
47
48
  ## Multi-select menu
48
49
 
@@ -222,6 +223,7 @@ Target length: < 80 lines (fits one screen). Auto-diff capped at 5 lines per sec
222
223
  - No markers - full replace each run, no `<!-- channels:start -->` bookmarks.
223
224
  - Every body item references a file/symbol/line from diff or pipeline log. No generic sentences.
224
225
  - Adapter failures are non-blocking - one channel failing does NOT abort others.
226
+ - 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.
225
227
 
226
228
  ## Error handling
227
229
 
@@ -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,6 +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 ["desc"] [figma-url] [swagger-url] Create a Jira Task/Bug/Story matching team conventions (asks type + preview + approval)
101
102
  /multi-agent:sync Sync ecosystem (Claude + Copilot + website + remote-control)
102
103
  /multi-agent:setup Keychain tokens + Git identity + language onboarding
103
104
  /multi-agent:language [en|tr] Show or set prompt language
@@ -233,6 +234,7 @@ Utility Komutları:
233
234
  /multi-agent:purge Worktree + log'lar - tam reset (çift onay)
234
235
  /multi-agent:channels Multi-channel rapor gönder (Jira/Confluence/Wiki/PR)
235
236
  /multi-agent:review Sadece mevcut diff'i review et
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)
236
238
  /multi-agent:sync Ekosistemi senkronize et
237
239
  /multi-agent:setup Keychain token + Git kimliği + dil onboarding
238
240
  /multi-agent:language [en|tr] Prompt dilini göster veya ayarla
@@ -33,7 +33,7 @@ Run all steps automatically:
33
33
  Step 0: FIGMA_SYNC (opt-in) pipeline/scripts/sync-figma-source.sh
34
34
  -- incremental pull from upstream if figmaSource.path is set
35
35
  Step 1: DETECT Compare timestamps, find stale targets
36
- Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 35 sub-command skills)
36
+ Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 37 sub-command skills)
37
37
  Step 3: REPO Claude Code -> pipeline repo (genericized, personal data scrub)
38
38
  Step 4: WEBSITE Version + phase/model counts -> {website-host} (i18n + projects.ts)
39
39
  Step 5: REMOTE Pipeline references -> remote-control README
@@ -158,14 +158,14 @@ 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
- **35 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
161
+ **36 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
162
162
 
163
163
  ```
164
164
  analysis, analysis-resolve, autopilot, build-optimize, channels, delete, dev,
165
165
  dev-autopilot, dev-local, dev-local-autopilot, diff-explain, finish, garbage-collect,
166
- help, issue, jira, kill, language, local, local-autopilot, log, manual-test,
167
- prune-logs, purge, refactor, resume, review, scan, search, setup, stack, status,
168
- sync, test, update
166
+ generate, help, issue, jira, kill, language, local,
167
+ local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review,
168
+ scan, search, setup, stack, status, sync, test, update
169
169
  ```
170
170
 
171
171
  **NOT synced**: `refs/*` - Lazy-load references, Claude Code specific
@@ -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
- **222 skills** across 5 groups.
6
+ **223 skills** across 5 groups.
7
7
 
8
8
  | Group | Name | Platform | Description |
9
9
  |-------|------|----------|-------------|
@@ -121,7 +121,7 @@
121
121
  | external | `mapkit-location` | - | Implement, review, or improve maps and location features in iOS/macOS apps using MapKit and CoreLocation. Use when working with Map views, a |
122
122
  | external | `metrickit-diagnostics` | - | Collect and analyze on-device performance metrics and crash diagnostics using MetricKit. Use when setting up MXMetricManager, handling MXMet |
123
123
  | external | `monorepo-architect` | - | Expert in monorepo architecture, build systems, and dependency management at scale. Masters Nx, Turborepo, Bazel, and Lerna for efficient mu |
124
- | core | `multi-agent` | - | Task orchestrator: runs the full pipeline from a Jira ID or GitHub Issue URL - analysis → plan → TDD development → parallel review (Opus + |
124
+ | core | `multi-agent` | - | Task orchestrator: runs the full pipeline from a Jira ID or GitHub Issue URL - analysis → plan → TDD development → parallel review (Fable |
125
125
  | core | `multi-agent-analysis` | - | Standalone feature-spec analysis (v3 template). Platform-agnostic concept layer with repo-driven convention extraction and per-platform Pass |
126
126
  | core | `multi-agent-analysis-resolve` | - | Resolve the Section 20 Risks and Open Questions of an analysis v3 document one row at a time. Proposes up to 3 source-labeled answer candida |
127
127
  | core | `multi-agent-autopilot` | - | Launch any task in autopilot mode: skips every confirmation, runs end-to-end autonomously. |
@@ -135,6 +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` | - | Create a standards-compliant Jira issue (Task / Bug / Story): asks the type, mines project conventions, drafts from a standard template with |
138
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 |
139
140
  | core | `multi-agent-issue` | - | List unassigned GitHub issues, pick one, auto-assign, and launch the multi-agent pipeline. |
140
141
  | core | `multi-agent-jira` | - | List open Jira issues, pick one, and launch the multi-agent pipeline. |
@@ -148,7 +149,7 @@
148
149
  | core | `multi-agent-purge` | - | ⚠️ Wipes every worktree, branch, log, and state file. Irreversible; asks for double confirmation. |
149
150
  | core | `multi-agent-refactor` | - | Analyse the project, score it, draft an improvement plan, take approval, develop, then ask whether to sync. |
150
151
  | core | `multi-agent-resume` | - | Resume a stopped or failed task from the phase where it left off. |
151
- | core | `multi-agent-review` | - | Run parallel review on the current branch's diff: 2 models on Claude Code (Opus + Sonnet), 3 models on Copilot CLI (GPT + Opus + Sonnet). Re |
152
+ | core | `multi-agent-review` | - | Run parallel review on the current branch's diff: 2 models on Claude Code (Fable + Sonnet), 3 models on Copilot CLI (GPT + Opus + Sonnet). R |
152
153
  | core | `multi-agent-scan` | - | Skill security scan: walks local skill directories against a tiered pattern catalog. |
153
154
  | core | `multi-agent-search` | - | Log search across every agent-log.md with smart ranking and filters. Optional --semantic flag queries the per-repo triage corpus. |
154
155
  | core | `multi-agent-setup` | - | First-run setup wizard: keychain token discovery, Git Identity onboarding, and pipeline preparation. |