@mmerterden/multi-agent-pipeline 14.2.2 → 15.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 (122) hide show
  1. package/CHANGELOG.md +76 -6
  2. package/README.md +15 -8
  3. package/README.tr.md +15 -8
  4. package/docs/FIGMA_PIPELINE.md +3 -3
  5. package/docs/adr/0006-skills-core-external-split.md +1 -1
  6. package/docs/adr/0009-claude-stack-skills-plugin-only.md +31 -0
  7. package/docs/adr/README.md +1 -0
  8. package/docs/architecture.md +7 -7
  9. package/docs/ecosystem.md +28 -28
  10. package/docs/features.md +5 -5
  11. package/index.js +2 -0
  12. package/install/_codex-agents.mjs +11 -2
  13. package/install/_common.mjs +65 -1
  14. package/install/_dev-only-files.mjs +0 -1
  15. package/install/_platform-filter.mjs +73 -7
  16. package/install/_plugin-skills.mjs +19 -8
  17. package/install/claude.mjs +144 -59
  18. package/install/codex.mjs +28 -3
  19. package/install/copilot.mjs +36 -11
  20. package/install/index.mjs +6 -2
  21. package/install/templates/codex-instructions.md +1 -1
  22. package/install/templates/copilot-instructions.md +3 -3
  23. package/package.json +1 -2
  24. package/pipeline/commands/multi-agent/SKILL.md +2 -0
  25. package/pipeline/commands/multi-agent/analysis/SKILL.md +3 -3
  26. package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +2 -2
  27. package/pipeline/commands/multi-agent/build-optimize/SKILL.md +9 -9
  28. package/pipeline/commands/multi-agent/channels/SKILL.md +1 -1
  29. package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +186 -0
  30. package/pipeline/commands/multi-agent/dev/SKILL.md +1 -1
  31. package/pipeline/commands/multi-agent/dev-autopilot/SKILL.md +1 -1
  32. package/pipeline/commands/multi-agent/dev-local/SKILL.md +1 -1
  33. package/pipeline/commands/multi-agent/dev-local-autopilot/SKILL.md +1 -1
  34. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -1
  35. package/pipeline/commands/multi-agent/help/SKILL.md +19 -4
  36. package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +2 -2
  37. package/pipeline/commands/multi-agent/jira/SKILL.md +1 -1
  38. package/pipeline/commands/multi-agent/prune-prompts/SKILL.md +81 -0
  39. package/pipeline/commands/multi-agent/resume/SKILL.md +1 -1
  40. package/pipeline/commands/multi-agent/{ship → resume-local}/SKILL.md +8 -8
  41. package/pipeline/commands/multi-agent/setup/SKILL.md +5 -5
  42. package/pipeline/commands/multi-agent/stack/SKILL.md +55 -43
  43. package/pipeline/commands/multi-agent/store-ready/SKILL.md +3 -3
  44. package/pipeline/commands/multi-agent/sync/SKILL.md +18 -11
  45. package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +1 -1
  46. package/pipeline/commands/multi-agent/uninstall/SKILL.md +2 -0
  47. package/pipeline/commands/multi-agent/update/SKILL.md +1 -1
  48. package/pipeline/lib/issue-fetcher.sh +1 -1
  49. package/pipeline/lib/parse-complaints.sh +306 -0
  50. package/pipeline/multi-agent-refs/channels/wiki.md +3 -3
  51. package/pipeline/multi-agent-refs/complaint-analysis-template.md +99 -0
  52. package/pipeline/multi-agent-refs/component-dispatch.md +6 -6
  53. package/pipeline/multi-agent-refs/cross-cli-contract.md +16 -16
  54. package/pipeline/multi-agent-refs/features/external-context-injection.md +1 -1
  55. package/pipeline/multi-agent-refs/features/stack-skill-routing.md +5 -5
  56. package/pipeline/multi-agent-refs/generate-issue.md +1 -1
  57. package/pipeline/multi-agent-refs/phases/modes.md +1 -1
  58. package/pipeline/multi-agent-refs/phases/phase-0-init.md +1 -1
  59. package/pipeline/multi-agent-refs/phases/phase-1-analysis.md +7 -7
  60. package/pipeline/multi-agent-refs/phases/phase-2-planning.md +5 -5
  61. package/pipeline/multi-agent-refs/phases/phase-3-dev.md +3 -3
  62. package/pipeline/multi-agent-refs/phases/phase-4-review.md +12 -12
  63. package/pipeline/multi-agent-refs/phases/phase-5-test.md +1 -1
  64. package/pipeline/multi-agent-refs/tracker-contract.md +1 -1
  65. package/pipeline/multi-agent-refs/wiki-capture.md +2 -2
  66. package/pipeline/preferences-template.json +13 -5
  67. package/pipeline/rules/figma-pipeline.md +2 -2
  68. package/pipeline/schemas/agent-state.schema.json +1 -1
  69. package/pipeline/schemas/complaint-analysis-spec.schema.json +216 -0
  70. package/pipeline/schemas/migrations/prefs-2.5.0-to-2.6.0.mjs +46 -0
  71. package/pipeline/schemas/prefs.schema.json +276 -66
  72. package/pipeline/schemas/token-budget.json +2 -2
  73. package/pipeline/scripts/_stack-routing.mjs +79 -0
  74. package/pipeline/scripts/audit-log-rotate.sh +4 -1
  75. package/pipeline/scripts/build-skills-index.mjs +11 -0
  76. package/pipeline/scripts/build-stack-plugins.mjs +28 -60
  77. package/pipeline/scripts/check-derived-drift.mjs +52 -28
  78. package/pipeline/scripts/gc-worktrees.sh +4 -1
  79. package/pipeline/scripts/gen-skills-index.mjs +1 -1
  80. package/pipeline/scripts/match-skills.mjs +8 -2
  81. package/pipeline/scripts/migrate-prefs.mjs +28 -20
  82. package/pipeline/scripts/phase-tracker.sh +13 -5
  83. package/pipeline/scripts/phase0-exit-gate.mjs +3 -2
  84. package/pipeline/scripts/run-aggregator.mjs +7 -2
  85. package/pipeline/scripts/scan-agent-config.sh +1 -1
  86. package/pipeline/scripts/skill-conformance.mjs +165 -30
  87. package/pipeline/scripts/smoke-cross-cli-behavior.sh +1 -1
  88. package/pipeline/scripts/test-gap-rules/android.json +25 -0
  89. package/pipeline/scripts/test-gap-rules/ios.json +34 -0
  90. package/pipeline/scripts/test-gap-rules/node.json +29 -0
  91. package/pipeline/scripts/test-gap-rules/python.json +25 -0
  92. package/pipeline/scripts/uninstall.mjs +158 -11
  93. package/pipeline/scripts/validate-complaint-doc.mjs +229 -0
  94. package/pipeline/scripts/validate-reviewer.mjs +9 -3
  95. package/pipeline/skills/.skill-manifest.json +156 -108
  96. package/pipeline/skills/.skills-index.json +449 -12
  97. package/pipeline/skills/shared/README.md +14 -10
  98. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +1 -1
  99. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
  100. package/pipeline/skills/shared/core/multi-agent-complaint-analysis/SKILL.md +49 -0
  101. package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +1 -1
  102. package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +1 -1
  103. package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +1 -1
  104. package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +1 -1
  105. package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +2 -2
  106. package/pipeline/skills/shared/core/multi-agent-prune-prompts/SKILL.md +83 -0
  107. package/pipeline/skills/shared/core/{multi-agent-ship → multi-agent-resume-local}/SKILL.md +6 -6
  108. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +79 -22
  109. package/pipeline/skills/shared/core/multi-agent-store-ready/SKILL.md +1 -1
  110. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +8 -8
  111. package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +1 -1
  112. package/pipeline/skills/shared/external/ios-coding-standard/modules/_TEMPLATE.yml +2 -2
  113. package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +368 -33
  114. package/pipeline/skills/shared/external/ios-coding-standard/references/swiftlint.draft.yml +1 -2
  115. package/pipeline/skills/shared/external/ios-coding-standard/scripts/check_structure.py +765 -0
  116. package/pipeline/skills/shared/external/ios-module-structure/SKILL.md +75 -0
  117. package/pipeline/skills/shared/external/ios-module-structure/modules/_TEMPLATE.yml +131 -0
  118. package/pipeline/skills/shared/external/ios-module-structure/references/rules.yml +559 -0
  119. package/pipeline/skills/shared/external/ios-module-structure/scripts/check_structure.py +765 -0
  120. package/pipeline/skills/shared/external/localization-reuse-map/example-mapping.json +53 -10
  121. package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +4 -3
  122. package/pipeline/skills/skills-index.md +7 -4
@@ -24,11 +24,18 @@ import {
24
24
  wipeDir,
25
25
  writeFile,
26
26
  } from "./_common.mjs";
27
- import { copyExternalSkillsFiltered } from "./_platform-filter.mjs";
27
+ import {
28
+ partitionExternalSkillsByPlugins,
29
+ writeExternalSkillsManifest,
30
+ } from "./_platform-filter.mjs";
28
31
  import { DEV_ONLY_SCRIPTS, countDevOnlyFiles } from "./_dev-only-files.mjs";
29
32
  import { generateCopilotInstructions } from "./_copilot-instructions.mjs";
30
33
  import { legacyTrailingContent, mergeManagedBlock } from "./_managed-block.mjs";
31
- import { installAuthoredPluginSkills, pipelineOwnedSkillNames } from "./_plugin-skills.mjs";
34
+ import {
35
+ installAuthoredPluginSkills,
36
+ pipelineOwnedSkillNames,
37
+ pluginsToDeliver,
38
+ } from "./_plugin-skills.mjs";
32
39
  import { registerMcpServer } from "./_mcp-register.mjs";
33
40
 
34
41
  /**
@@ -357,16 +364,34 @@ function installSkills(opts) {
357
364
  }
358
365
 
359
366
  if (existsSync(sharedExternalSrc)) {
360
- const { copied, skipped } = copyExternalSkillsFiltered(sharedExternalSrc, dest, {
361
- platformFlag,
362
- useSymlinks,
363
- });
364
- copilotSkillCount += copied;
365
- if (skipped > 0) {
366
- console.log(
367
- ` -> --platform=${platformFlag} filter skipped ${skipped} external skill dir(s)`,
368
- );
367
+ // Active-stack filter: Copilot has no plugin loader, so its local copy is the
368
+ // only stack-skill source it has - but it should still carry the SAME stack
369
+ // set the enabled plugins serve on Claude Code, not the whole catalog. The
370
+ // enabled set comes from ~/.claude/settings.json (pluginsToDeliver); the
371
+ // --platform flag stays as the fallback for machines without one.
372
+ const { names: enabled, source: selectionSource } = pluginsToDeliver(home, platformFlag);
373
+ const { keep, skipped } = partitionExternalSkillsByPlugins(sharedExternalSrc, enabled);
374
+ ensureDir(dest);
375
+ for (const name of keep) {
376
+ const src = join(sharedExternalSrc, name);
377
+ const dst = join(dest, name);
378
+ if (!useSymlinks) wipeDir(dst);
379
+ copyDir(src, dst, { useSymlinks });
380
+ copilotSkillCount += countFiles(src);
381
+ }
382
+ // Stale prune: a skill delivered by a previous, wider stack selection must
383
+ // leave when the selection narrows, or the old stack lingers forever.
384
+ for (const name of skipped) {
385
+ const stale = join(dest, name);
386
+ if (!existsSync(stale) || isDryRun()) continue;
387
+ try {
388
+ rmSync(stale, { recursive: true, force: true });
389
+ } catch {
390
+ /* non-fatal */
391
+ }
369
392
  }
393
+ writeExternalSkillsManifest(dest, keep);
394
+ console.log(` -> stack filter (${selectionSource}): ${keep.length} kept, ${skipped.length} skipped`);
370
395
  }
371
396
 
372
397
  // The pre-migration figma-* skill copies are gone; the plugin owns component work
package/install/index.mjs CHANGED
@@ -187,7 +187,9 @@ function printSummary(opts) {
187
187
  // hand-registered entry became the only reason it worked on any given machine.
188
188
  console.log(" For UI testing, the dev-toolkit MCP server is registered automatically:");
189
189
  if (forClaude) {
190
- console.log(" Claude Code: claude mcp add --scope user dev-toolkit (user scope, all projects)");
190
+ console.log(
191
+ " Claude Code: claude mcp add --scope user dev-toolkit (user scope, all projects)",
192
+ );
191
193
  }
192
194
  if (forCopilot) {
193
195
  console.log(" Copilot CLI: copilot mcp add dev-toolkit");
@@ -195,7 +197,9 @@ function printSummary(opts) {
195
197
  if (forCodex) {
196
198
  console.log(" Codex CLI: codex mcp add dev-toolkit");
197
199
  }
198
- console.log(" Skipped only when the host CLI is not on PATH - the command to run is printed above.");
200
+ console.log(
201
+ " Skipped only when the host CLI is not on PATH - the command to run is printed above.",
202
+ );
199
203
  console.log("");
200
204
  console.log(" Uninstall everything: npx @mmerterden/multi-agent-pipeline uninstall");
201
205
  console.log(" (Personal access tokens in keychain are preserved.)");
@@ -62,7 +62,7 @@ failure this layout exists to prevent.
62
62
 
63
63
  Codex assembles every discovered skill's name + description into one prompt block
64
64
  and **silently drops entries when that block overflows**. The pipeline therefore
65
- contributes exactly **one** skill (`multi-agent`) and keeps its 42 sub-command
65
+ contributes exactly **one** skill (`multi-agent`) and keeps every sub-command
66
66
  specs as reference files that cost nothing until read. Do not convert those specs
67
67
  into peer skills: doing so evicts other skills, including ones from installed
68
68
  plugins, with no error surfaced.
@@ -245,7 +245,7 @@ Cost block reads `phase-tracker.sh tokens` accumulators × `cost-table.json` pri
245
245
 
246
246
  ## Stack Selection
247
247
 
248
- Stack skill sets ship as versioned plugins in the `multi-agent-plugins` marketplace. Selecting a stack enables the matching plugin(s) in the target repo's `.claude/settings.json` `enabledPlugins`; the `ai-common-engineering-toolkit` is always enabled alongside. There is no session-start auto-swap script. Select or change the stack with:
248
+ Stack skill sets ship as versioned plugins in the `multi-agent-plugins` marketplace. Selecting a stack enables the matching plugin(s) in the target repo's `.claude/settings.json` `enabledPlugins`; the `ai-common-toolkit` is always enabled alongside. There is no session-start auto-swap script. Select or change the stack with:
249
249
 
250
250
  ```bash
251
251
  multi-agent-stack [ios|android|mobile|backend|frontend|fullstack|all]
@@ -302,8 +302,8 @@ if [ "$(jq '.projects | length' "$STATE_FILE")" -ge 2 ]; then
302
302
  fi
303
303
  ```
304
304
 
305
- Full contract: `~/.copilot/skills/multi-agent/refs/multi-repo-integration-build.md`
306
- (or on GitHub: https://github.com/mmerterden/multi-agent-pipeline/blob/main/pipeline/multi-agent-refs/multi-repo-integration-build.md)
305
+ Full contract: https://github.com/mmerterden/multi-agent-pipeline/blob/main/pipeline/multi-agent-refs/multi-repo-integration-build.md
306
+ (the Copilot install ships no local refs tree, so the contract lives on GitHub only)
307
307
 
308
308
  ## Permissions Expectation
309
309
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "14.2.2",
3
+ "version": "15.0.0",
4
4
  "description": "8-phase AI development pipeline with full orchestration on Claude Code, Copilot CLI and Codex 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",
@@ -89,7 +89,6 @@
89
89
  "!pipeline/scripts/sync-parity-check.sh",
90
90
  "!pipeline/scripts/benchmark-phase-0.sh",
91
91
  "!pipeline/scripts/fixtures/**",
92
- "!pipeline/scripts/test-gap-rules/**",
93
92
  "!pipeline/eval/**",
94
93
  "pipeline/scripts/smoke-schema-validation.sh",
95
94
  "pipeline/scripts/smoke-cross-cli-behavior.sh"
@@ -78,6 +78,7 @@ Lib scripts (`~/.claude/lib/`):
78
78
  | `review-jira [KEY\|url]` | Grade a Jira issue's readiness for the pipeline (scope / AC / repro / design / API / stack), then post the gaps as a Jira comment. Read-only on code. |
79
79
  | `review-issue [#N\|repo#N\|url]` | Grade a GitHub issue's readiness for the pipeline, then post the gaps as an issue comment. Read-only on code. |
80
80
  | `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. |
81
+ | `complaint-analysis ["<run-name>"] [--file <path>] [<jira-id\|confluence-url> ...]` | Müşteri şikayeti triyajı: şikayetler (serbest metin / csv-xlsx-txt-json dosya / Jira issue / Confluence URL) redakte edilerek alınır, trxId/conversationId ile Graylog kanıtı çekilir, seçili client + BFF repolarında salt-okunur eşleştirme yapılır; verdict: client/bff (kök neden + citation + mevcut mimariyi referans alan fix planı + hazır dev prompt'u) veya core (core ekibine yönlendirme önerisi) veya insufficient-evidence. Rapor + Stop; worktree, commit, dev zinciri yok. |
81
82
  | `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. |
82
83
  | `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. |
83
84
  | `create-jira ["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. |
@@ -120,6 +121,7 @@ This command uses lazy loading for token efficiency. Read the relevant sub-file
120
121
  | `review-jira` | `$HOME/.claude/commands/multi-agent/review-jira/SKILL.md` (loads `$HOME/.claude/multi-agent-refs/readiness-review.md`) |
121
122
  | `review-issue` | `$HOME/.claude/commands/multi-agent/review-issue/SKILL.md` (loads `$HOME/.claude/multi-agent-refs/readiness-review.md`) |
122
123
  | `analysis` | `$HOME/.claude/commands/multi-agent/analysis/SKILL.md` |
124
+ | `complaint-analysis` | `$HOME/.claude/commands/multi-agent/complaint-analysis/SKILL.md` |
123
125
  | `build-optimize` | `$HOME/.claude/commands/multi-agent/build-optimize/SKILL.md` |
124
126
  | `local` | `$HOME/.claude/commands/multi-agent/local/SKILL.md` |
125
127
  | `local-autopilot` | `$HOME/.claude/commands/multi-agent/local-autopilot/SKILL.md` |
@@ -505,9 +505,9 @@ For each `platform` in `state.analysisSpec.platforms[]`:
505
505
 
506
506
  2. **Per-platform markdown render**: for each platform in `state.analysisSpec.platforms[]`, concatenate the per-platform spec into one markdown file. Tables in pipe-syntax. Numbering uses plain `## 1.`, `## 2.`, ... - omitted sections do **not** create gaps. Visible numbering is sequential 1..N over the rendered set.
507
507
 
508
- 3. **Humanizer pass (MANDATORY: actually invoke the `humanizer` skill on the rendered markdown - the punctuation grep alone does NOT satisfy this step)** (`technical-explanatory` tone for the scratch buffer; per-channel re-humanize happens in Phase 4 when actually emitting):
508
+ 3. **Humanizer pass (MANDATORY: actually invoke the `ai-common-toolkit:humanizer` skill on the rendered markdown - the punctuation grep alone does NOT satisfy this step)** (`technical-explanatory` tone for the scratch buffer; per-channel re-humanize happens in Phase 4 when actually emitting):
509
509
  ```
510
- humanizer skill input:
510
+ ai-common-toolkit:humanizer skill input:
511
511
  language: <tr|en>
512
512
  tone: technical-explanatory
513
513
  stripFancyPunctuation: true
@@ -662,7 +662,7 @@ When `phase == "cancelled_at_pass_b_preview"`:
662
662
  | `~/.claude/lib/extract-conventions.sh` | Phase 1c convention extractor (7 pattern groups, JSON output, confidence levels) |
663
663
  | `~/.claude/lib/figma-screenshot.sh` | Phase 2b Tier 2 Figma image downloader (REST API, section drill, 2x scale PNG, manifest.json) |
664
664
  | `~/.claude/lib/md2confluence-v3.py` | Phase 4 Confluence dispatch (multipart attachments, `<ac:image>` injection, mermaid macro + fallback, tooltip footnote macro, punctuation gate) |
665
- | `$HOME/.claude/skills/humanizer/SKILL.md` | Phase 3 tone pass |
665
+ | `ai-common-toolkit:humanizer` | Phase 3 tone pass |
666
666
  | 8-locale set (ar, de, en, es, fr, it, ru, tr) + localization-key naming (inline) | Section 10 localization generation |
667
667
  | `$HOME/.claude/multi-agent-refs/channels/confluence.md` | Phase 4 Confluence dispatch |
668
668
  | `$HOME/.claude/multi-agent-refs/channels/jira.md` | Phase 4 Jira dispatch |
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: "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 candidates per row (from evidence / from repo / AI reasoned), merges the chosen answer into the target body section, and updates the doc in place with a Section 23 changelog bump. Companion to /multi-agent:analysis - same Locked decisions apply (citation discipline, humanizer punctuation, no MCP, no auto-commit). Optional sibling propagation for per-platform file sets. Use when an analysis document's open questions and risks need answering row by row before development starts."
2
+ description: "Resolve the Section 20 Risks and Open Questions of an analysis v3 document one row at a time: up to 3 source-labeled answer candidates per row (evidence / repo / AI reasoned), chosen answer merged into the target section, doc updated in place with a changelog bump. Same locked decisions as /multi-agent:analysis. Use when an analysis document's open questions need answering before development starts."
3
3
  description-tr: "Analiz v3 dokümanının Bölüm 20 Riskler ve Açık Sorular satırlarını tek tek çözer. Satır başına en fazla 3 kaynak-etiketli cevap adayı önerir (kanıttan / repodan / AI çıkarımı), seçilen cevabı ilgili gövde bölümüne işler ve dokümanı Bölüm 23 changelog artışıyla yerinde günceller. /multi-agent:analysis'in eşlikçisi - aynı Kilitli kararlar geçerli (alıntı disiplini, humanizer noktalama, MCP yok, otomatik commit yok). Platform bazlı dosya setleri için isteğe bağlı kardeş yayılımı."
4
4
  argument-hint: "[path/to/analysis/<feature>-<platform>.md] [--autonomous]"
5
5
  ---
@@ -121,7 +121,7 @@ For each open row in source order:
121
121
  | `$HOME/.claude/multi-agent-refs/analysis-template.md` | Section 20 / Section 23 table contracts, front-matter shape, omission re-flow |
122
122
  | `$HOME/.claude/multi-agent-refs/conventions-defaults.md` | `convention-fallback` default values per platform |
123
123
  | `~/.claude/lib/extract-conventions.sh` | fresh single-field extraction for convention-fallback candidates |
124
- | `$HOME/.claude/skills/humanizer/SKILL.md` | tone reference for longer merged fragments (short fragments only need the punctuation gate) |
124
+ | `ai-common-toolkit:humanizer` | tone reference for longer merged fragments (short fragments only need the punctuation gate) |
125
125
 
126
126
  ## Notes
127
127
 
@@ -40,7 +40,7 @@ Before dispatch, fail fast on non-iOS repos. Detect iOS context via the standard
40
40
 
41
41
  3. **Dispatch** to `xcode-build-orchestrator` via the Skill tool:
42
42
  ```
43
- Skill(skill="xcode-build-orchestrator", args="")
43
+ Skill(skill="ai-ios-toolkit:xcode-build-orchestrator", args="")
44
44
  ```
45
45
  The orchestrator's Phase 1 (Analyze) runs `xcode-build-benchmark`, the three specialist analyzers, and writes `.build-benchmark/optimization-plan.md`. No project files are modified during Phase 1.
46
46
 
@@ -48,7 +48,7 @@ Before dispatch, fail fast on non-iOS repos. Detect iOS context via the standard
48
48
 
49
49
  5. **Phase 2 (apply + verify)** is initiated by the user. The wrapper does not auto-execute Phase 2 because the upstream contract requires explicit approval via the checkboxes in the plan file. When the user signals "implement the approved items", the wrapper dispatches to `xcode-build-fixer`:
50
50
  ```
51
- Skill(skill="xcode-build-fixer", args="")
51
+ Skill(skill="ai-ios-toolkit:xcode-build-fixer", args="")
52
52
  ```
53
53
  The fixer applies only the approved changes and re-benchmarks for wall-clock delta verification.
54
54
 
@@ -62,13 +62,13 @@ Before dispatch, fail fast on non-iOS repos. Detect iOS context via the standard
62
62
 
63
63
  | Path | Reason |
64
64
  |------|--------|
65
- | `$HOME/.claude/skills/xcode-build-orchestrator/SKILL.md` | The orchestrator this wrapper dispatches to |
66
- | `$HOME/.claude/skills/xcode-build-benchmark/SKILL.md` | Baseline timing |
67
- | `$HOME/.claude/skills/xcode-compilation-analyzer/SKILL.md` | Swift compile hotspots |
68
- | `$HOME/.claude/skills/xcode-project-analyzer/SKILL.md` | Build settings / script phases / parallelism |
69
- | `$HOME/.claude/skills/spm-build-analysis/SKILL.md` | SPM graph + plugins |
70
- | `$HOME/.claude/skills/xcode-build-fixer/SKILL.md` | Apply approved fixes + re-benchmark |
71
- | `$HOME/.claude/skills/NOTICE-xcode-build-skills.md` | MIT attribution + upstream pin |
65
+ | `ai-ios-toolkit:xcode-build-orchestrator` | The orchestrator this wrapper dispatches to |
66
+ | `ai-ios-toolkit:xcode-build-benchmark` | Baseline timing |
67
+ | `ai-ios-toolkit:xcode-compilation-analyzer` | Swift compile hotspots |
68
+ | `ai-ios-toolkit:xcode-project-analyzer` | Build settings / script phases / parallelism |
69
+ | `ai-ios-toolkit:spm-build-analysis` | SPM graph + plugins |
70
+ | `ai-ios-toolkit:xcode-build-fixer` | Apply approved fixes + re-benchmark |
71
+ | ai-ios-toolkit plugin NOTICE (xcode build skills) | MIT attribution + upstream pin |
72
72
 
73
73
  ## Notes
74
74
 
@@ -401,7 +401,7 @@ Full contract: [`$HOME/.claude/multi-agent-refs/channels/confluence.md`]($HOME/.
401
401
 
402
402
  **Wiki → Jira comment auto-link** (triad contract, preserved from v5.6): when the Wiki adapter writes pages AND `state.jiraId` is set AND `prefs.global.wikiToJiraComment === true`, also post a humanizer-passed summary of the wiki pages (component name + variant count + wiki URL) as an additional Jira comment on the same issue. Independent of the main Jira channel's comment - both can coexist. Full contract in `$HOME/.claude/multi-agent-refs/issue-jira-triad.md`.
403
403
 
404
- **If preconditions met (Case A):** scope multi-select prompt (Main page / iOS sub-page / Screenshots / Index updates / Other); adapter dispatched to the plugin skill `ai-ios-engineering-toolkit:figma-component-wiki` (or `ai-android-engineering-toolkit:figma-component-wiki`).
404
+ **If preconditions met (Case A):** scope multi-select prompt (Main page / iOS sub-page / Screenshots / Index updates / Other); adapter dispatched to the plugin skill `ai-ios-toolkit:figma-component-wiki` (or `ai-android-toolkit:figma-component-wiki`).
405
405
 
406
406
  Full contract: [`$HOME/.claude/multi-agent-refs/channels/wiki.md`]($HOME/.claude/multi-agent-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.
407
407
 
@@ -0,0 +1,186 @@
1
+ ---
2
+ description: "Customer-complaint triage. Ingests complaints (paste, csv/xlsx/txt/json file, Jira issue, Confluence URL), fetches Graylog evidence per trx/conversation id, correlates read-only against the selected client + BFF repos; per complaint: client/bff root cause + fix plan + dev prompt, or core routing recommendation, or insufficient-evidence. Report only, no dev chaining. Use when customer-reported errors need layer triage."
3
+ description-tr: "Müşteri şikayeti / müşteri kaynaklı hata triyajı. Şikayetleri alır (serbest metin, csv/xlsx/txt/json dosya, Jira issue, Confluence URL), trxId/conversationId ile Graylog kanıtı çeker, seçilen client + BFF repolarıyla salt-okunur eşleştirir ve her şikayeti sınıflandırır: client / bff (bizim sorumluluğumuz, kök neden analizi) veya core (core ekibine yönlendirme önerisi) veya insufficient-evidence. Rapor üretip durur - branch, worktree, commit, PR veya dev zinciri yok."
4
+ argument-hint: "[\"<run-name>\"] [--file <path>] [<jira-id | jira-url | confluence-url> ...]"
5
+ ---
6
+
7
+ # multi-agent complaint-analysis - Customer Complaint Triage
8
+
9
+ **Input**: $ARGUMENTS (optional run name, optional `--file <path>`, optional Jira ids / Jira URLs / Confluence URLs; remaining free text is treated as pasted complaints)
10
+
11
+ Triage of customer-reported errors across the layers the team owns (client apps + BFFs). Per complaint: Graylog log evidence by trx/conversation id, read-only repo correlation, and a verdict. **Core failures get a routing recommendation, never a fix analysis.**
12
+
13
+ **Side-effect contract**: may write a local markdown report, post a Confluence page, or add a Jira comment/description - but **never** creates branches, worktrees, commits, or PRs. Stops at the report.
14
+
15
+ > **Language**: Per `$HOME/.claude/multi-agent-refs/rules.md` Language Application matrix - instruction prose stays English. `AskUserQuestion.label` and `header` stay English. `question` and `description` follow `outputLanguage`. The report body follows `outputLanguage`; Graylog excerpts, verdict tokens, and external payload metadata stay English.
16
+
17
+ ## Locked decisions (do not re-ask)
18
+
19
+ 1. **Graylog is primary evidence (deliberate departure).** `features/external-context-injection.md` declares Graylog advisory-only for the dev pipeline; in THIS command Graylog IS the evidence backbone. A per-complaint fetch failure still never halts the run, but that complaint's verdict is capped at `insufficient-evidence` - never fabricated.
20
+ 2. **Ids are never guessed.** A complaint with no trxId and no convId enters the Phase 0 Step 5 confirmation loop: the user supplies the id(s) or explicitly marks the complaint `skip-graylog`. Empty submit is not consent (`feedback_no-inferred-defaults-from-empty-answer`); re-ask.
21
+ 3. **Read-only ops command.** No worktree, branch, commit, PR, or dev chaining. Report + Stop.
22
+ 4. **Redaction before any output.** Complaint text is redacted at intake (`parse-complaints.sh`, default on). Jira / Confluence-sourced complaint text passes through the same redaction (`--stdin` mode) after fetch. Raw PII never enters state, drafts, or any dispatch target.
23
+ 5. **Core is a residual classification, not a repo.** Verdict `core` produces a routing recommendation only - no fix analysis, no core-repo grepping, no core code speculation.
24
+ 6. **Layer mapping is user-confirmed.** Name-based layer inference (Step 3b) is a proposal; the confirmation table must be approved before Phase 1.
25
+ 7. **Output default = Local file.** The Phase 4.5 picker keeps `Local file` pre-selected; Confluence and Jira are never default-selected.
26
+ 8. **Humanizer punctuation policy is non-negotiable.** No em-dash, en-dash, ellipsis, curly quotes, or section sign in any emitted text. Turkish diacritics are preserved verbatim - never ASCII-fold the prose.
27
+ 9. **Language split.** Report body follows `outputLanguage`; verdict tokens (`client:ios`, `bff:mobile-bff`, `core`, `insufficient-evidence`), Graylog evidence excerpts, and Confluence/Jira payload metadata stay English.
28
+ 10. **Verdict citation discipline.** Every `client`/`bff` verdict cites at least one Graylog message (timestamp + source) AND one repo evidence row (`file:line`). Anything less is `insufficient-evidence`. Every `core` verdict cites the Graylog message that names the upstream service.
29
+ 11. **One complaint batch per run.** Mixed batches spanning unrelated products are user error: surface it and ask to split.
30
+ 12. **No auto-commit.** The local report is written to the working tree; the user commits it themselves if they want.
31
+ 13. **Client/bff verdicts carry a development handoff.** Every `client`/`bff` verdict renders a fix plan grounded in the EXISTING architecture (the `repoEvidence[]` files are the reference: name the concrete files/components to touch, reuse-first, no invented structures) plus a ready-to-run dev prompt (English, one fenced block, `/multi-agent:dev`-compatible). The handoff is part of the report - this command still never runs dev itself (Locked 3). Core and insufficient-evidence verdicts never get a fix plan (Locked 5).
32
+
33
+ ## Steps
34
+
35
+ ### Phase 0 - Intake
36
+
37
+ Sequential `AskUserQuestion` chain, answers land under `state.complaintSpec.*` (schema: `$HOME/.claude/schemas/complaint-analysis-spec.schema.json`). Step narration per `$HOME/.claude/multi-agent-refs/picker-contract.md`: print `<localized: "Step <i>/<n>: <what this step decides>">` before each picker; auto-resolved steps still print their breadcrumb.
38
+
39
+ #### Step 0 - Language resolution (BLOCKING)
40
+
41
+ Read `prefs.global.outputLanguage` (`tr` or `en`, default `tr`) before the first picker. Every `<localized: "...">` marker in this file is rendered in that language, never emitted literally.
42
+
43
+ #### Step 1 - Run name
44
+
45
+ From `$ARGUMENTS` quoted string if present, else default `complaints-<YYYYMMDD>` (announce, do not ask). Result: `state.complaintSpec.runName`.
46
+
47
+ #### Step 2 - Account picker
48
+
49
+ Reuse `$HOME/.claude/multi-agent-refs/_account-picker.md`. Needed for Graylog-adjacent Jira/Confluence fetches and dispatch; skipped only when the run is fully local (no Jira/Confluence input, local output only) - then `account: null`.
50
+
51
+ #### Step 3 - Repo multi-select
52
+
53
+ Reuse `$HOME/.claude/multi-agent-refs/_repo-picker.md` (multi-select via `~/.claude/lib/repo-cache.sh`). Guidance line in the question: <localized: "Select the client and BFF repos your team owns (e.g. ios / android / web / mobile-bff / web-bff). Core services are NOT selected - core is a triage outcome, not a repo.">
54
+
55
+ #### Step 3b - Layer tagging (single confirmation table)
56
+
57
+ Infer a layer per selected repo from its name (`ios|iphone` -> ios, `android` -> android, `web(?!.*bff)` -> web, `mobile.?bff|bff.?mobile` -> mobile-bff, `web.?bff|bff.?web` -> web-bff, else other). Present ONE AskUserQuestion with the full `repo -> layer` table in the question body: options `Approve mapping` / `Override rows`. On override, one follow-up per rejected row with the 6 layer options. Result: `state.complaintSpec.repos[] = {name, layer, localPath?, provider?}` (Locked 6).
58
+
59
+ #### Step 4 - Complaint input (multi-source)
60
+
61
+ Classify every `$ARGUMENTS` remainder and any pasted input via `~/.claude/lib/context-link-extractor.sh`, then collect per source type. If nothing was supplied, ask: <localized: "Paste the complaints, or give a file path (csv / xlsx / txt / json), a Jira issue, or a Confluence URL. Mixed input is fine.">
62
+
63
+ | Source | Ingestion |
64
+ |---|---|
65
+ | File path (`--file` or detected) | `~/.claude/lib/parse-complaints.sh --file <path>` (format auto-detected; exit 5 = xlsx degrade -> surface `degradeReason`, ask for a CSV export path, re-run) |
66
+ | Pasted free text | `parse-complaints.sh --stdin` (splits blocks, pre-fills ids via the shared label set) |
67
+ | Jira id / URL | Fetch issue summary + description + comments via Jira REST (account token); concatenate as text blocks, pipe through `parse-complaints.sh --stdin` (Locked 4) |
68
+ | Confluence URL | `~/.claude/lib/fetch-confluence.sh <url>`; page body paragraphs/table rows become text blocks, piped through `parse-complaints.sh --stdin` |
69
+
70
+ Merge all outputs into one list, re-numbering ids `C-01..C-NN`. Result: `state.complaintSpec.input` + `state.complaintSpec.complaints[]`.
71
+
72
+ #### Step 5 - Id confirmation loop (Locked 2)
73
+
74
+ Render the parsed table (id, redacted excerpt <= 80 chars, trxId, convId, platformHint) to the user. For every complaint missing BOTH ids, one AskUserQuestion: <localized: "Complaint <id> has no trx/conversation id. Supply one, or skip Graylog for it?"> with options `Skip Graylog for this complaint` (-> `skipGraylog: true`) and Other for the id (`trx:<value>` / `conv:<value>`). Empty submit re-asks. Set `phase: "fetching_graylog"`.
75
+
76
+ ### Phase 1 - Graylog evidence fan-out
77
+
78
+ For each complaint with at least one id and `skipGraylog: false`:
79
+
80
+ ```bash
81
+ ~/.claude/lib/fetch-graylog.sh --trx <trxId> --conv <convId> # pass whichever exist
82
+ ```
83
+
84
+ Record per complaint: `graylog: {status: ok|degraded|skipped, totalResults, degradeReason}` plus the top messages (timestamp, source, level, message excerpt) kept in working context for Phase 2/3. Failure handling:
85
+
86
+ - Exit 0 with `degraded: true` -> `status: degraded`, keep the reason, continue.
87
+ - Exit 2 / 3 / 6 (credential / auth / host) -> per `$HOME/.claude/multi-agent-refs/keychain.md` non-critical rule: warn ONCE (`WARN: Graylog unavailable (<reason>); remaining complaints proceed without log evidence.`), mark this and all remaining fetches `status: degraded`, continue. Never halt (Locked 1).
88
+ - `skipGraylog: true` -> `status: skipped`.
89
+
90
+ Set `phase: "correlating_repos"`.
91
+
92
+ ### Phase 2 - Repo evidence correlation (read-only)
93
+
94
+ From each complaint's Graylog messages extract candidate signals: endpoint paths, error codes, exception class names, distinctive message templates, and the `source` service name. Then grep the selected repos (skip dirs: `.build`, `DerivedData`, `Pods`, `node_modules`, `.next`, `build/`, `.gradle`, `vendor/`):
95
+
96
+ ```bash
97
+ grep -rn --include='*.swift' --include='*.kt' --include='*.ts' --include='*.tsx' --include='*.js' --include='*.java' -E "<signal>" "$REPO_PATH"
98
+ ```
99
+
100
+ Bucket hits per complaint as `repoEvidence[] = {repo, layer, file, line, signal, matchKind: direct|partial}` (`direct` = exact endpoint/error-code/template match; `partial` = fuzzy/name-only). Grep only - no convention extraction, no Figma, no Swagger. Complaints with `status: degraded|skipped` still get a text-similarity pass (grep the complaint's distinctive nouns/error phrases), tagged `partial`. Set `phase: "triaging"`.
101
+
102
+ ### Phase 3 - Triage classification
103
+
104
+ Per complaint, in order:
105
+
106
+ | Condition | Verdict |
107
+ |---|---|
108
+ | Graylog error originates in an owned layer: signal matched `direct` in a selected repo, OR the failing `source` maps to an owned BFF | `client:<ios|android|web>` or `bff:<mobile-bff|web-bff>` + root-cause rationale + citations (Locked 10) |
109
+ | Graylog shows the failure downstream of owned layers: `source` is an unowned core service, 5xx from an upstream nobody selected owns, no repo match | `core` + routing recommendation (below) |
110
+ | No/degraded Graylog AND no direct repo signal | `insufficient-evidence` + open question row |
111
+
112
+ **Routing recommendation** (core only, Locked 5): `{suspectedService: <Graylog source>, endpoint, errorCode, evidenceExcerpt (EN, redacted), suggestedQueue: prefs.projects[<project>].routing.coreTeamLabel ?? null, confidence}`.
113
+
114
+ Verdict shape: `verdict: {category, layer, confidence: high|medium|low, rationale}`. Ambiguous client-vs-bff attribution lowers `confidence`, never invents evidence.
115
+
116
+ **Development handoff (client/bff only, Locked 13)**: for each `client`/`bff` verdict, derive from the `repoEvidence[]` rows:
117
+
118
+ - **Fix plan**: 2-5 numbered steps referencing the existing architecture by `file:line` - which service/view/handler to change, what to reuse (reuse-first: prefer extending the cited components over adding new ones), which tests to add. No speculative rewrites.
119
+ - **Dev prompt**: one fenced English block the user can paste into `/multi-agent:dev` (or a Jira description): complaint summary, root cause, the cited files, the fix plan steps, and the acceptance check. Include the complaint id (`[C-NN]`) for traceability.
120
+
121
+ Set `phase: "drafting"`.
122
+
123
+ ### Phase 4 - Draft, humanize, buffer
124
+
125
+ 1. Render the report per `$HOME/.claude/multi-agent-refs/complaint-analysis-template.md` (8 fixed sections; single-language body in `outputLanguage`; verdict tokens English per Locked 9) to `/tmp/complaint-analysis-<run-slug>-<UTC-iso8601>/report.md`. Store `outputs.draftDir`.
126
+ 2. **Humanizer pass (MANDATORY: actually invoke the `ai-common-toolkit:humanizer` skill; the punctuation grep alone does NOT satisfy this)** with `language: <tr|en>`, `tone: technical-explanatory`, `stripFancyPunctuation: true`. Diacritics preserved (Locked 8).
127
+ 3. Punctuation gate: `grep -P '[\x{2013}\x{2014}\x{2026}\x{201C}\x{201D}\x{2018}\x{2019}\x{00A7}]'` over the draft returns zero matches.
128
+ 4. Show the draft path + size to the user. Set `phase: "awaiting_output_decision"`.
129
+
130
+ ### Phase 4.5 - Output destination picker
131
+
132
+ AskUserQuestion (multiSelect=true), `Local file` pre-selected (Locked 7):
133
+
134
+ ```
135
+ header: "Output"
136
+ question: <localized: "Where should the triage report be written?">
137
+ options:
138
+ - label: "Local file" (description: complaints/<run-name>.md in the primary repo's working tree)
139
+ - label: "Confluence page"
140
+ - label: "Jira"
141
+ ```
142
+
143
+ Follow-ups: Confluence -> ask parent page (Other, LRU recents from `prefs.projects[<project>].confluenceUrls`); Jira -> pick from Step 4 Jira ids if any, else ask via Other. Result: `outputs.destinations[]`. Set `phase: "dispatching"`.
144
+
145
+ ### Phase 5 - Validate, dispatch, report. Stop.
146
+
147
+ **Pre-dispatch gate (BLOCKING)**: `node $HOME/.claude/scripts/validate-complaint-doc.mjs <draft>` - front-matter, required sections, verdict tokens per triage row, routing entry per core verdict, punctuation, redaction-leak scan. Any ERROR blocks dispatch: fix the draft, re-validate.
148
+
149
+ | Target | Action |
150
+ |---|---|
151
+ | Local | `cp` the draft to `complaints/<run-name>.md` in the primary repo's working tree. **No commit** (Locked 12). |
152
+ | Confluence | Re-humanize with `formal-stakeholder` tone; post one page under the chosen parent via `$HOME/.claude/multi-agent-refs/channels/confluence.md` + `~/.claude/lib/md2confluence-v3.py`. |
153
+ | Jira | Re-humanize with `informal-technical` tone; markdown -> wiki markup per `$HOME/.claude/multi-agent-refs/channels/jira.md`; post as a comment on the chosen issue (never close/transition the issue). |
154
+
155
+ Then print the summary in `outputLanguage`: complaint count, verdict counts (`X client / Y bff / Z core / W insufficient-evidence`), degraded services, output paths/URLs. When any `core` verdict exists, add: <localized: "N complaint(s) route to the core team - see the routing section before forwarding.">
156
+
157
+ **Stop. Do not chain into `/multi-agent:dev`. Do not open a worktree. Do not create a branch.** Set `phase: "done"`.
158
+
159
+ ### Resume contract
160
+
161
+ `state.complaintSpec.phase`: `intake | fetching_graylog | correlating_repos | triaging | drafting | awaiting_output_decision | dispatching | reporting | done`.
162
+
163
+ `/multi-agent:resume` at `awaiting_output_decision`: if `outputs.draftDir` still holds `report.md`, jump to Phase 4.5; if gone, re-render Phase 4 from state (evidence is retained). Earlier phases resume at their own boundary; Graylog results already in state are never re-fetched.
164
+
165
+ ## Reusable refs
166
+
167
+ | Path | Reason |
168
+ |---|---|
169
+ | `~/.claude/lib/parse-complaints.sh` | Phase 0 Step 4 normalization + redaction (all formats + stdin) |
170
+ | `~/.claude/lib/context-link-extractor.sh` | Phase 0 Step 4 input classifier (jira / confluence / graylog id labels) |
171
+ | `~/.claude/lib/fetch-graylog.sh` | Phase 1 log evidence (`--trx` / `--conv`) |
172
+ | `~/.claude/lib/fetch-confluence.sh` | Phase 0 Step 4 Confluence-sourced complaints |
173
+ | `$HOME/.claude/multi-agent-refs/_account-picker.md`, `_repo-picker.md`, `picker-contract.md` | Phase 0 pickers |
174
+ | `$HOME/.claude/multi-agent-refs/keychain.md` | Phase 1 non-critical credential handling |
175
+ | `$HOME/.claude/multi-agent-refs/complaint-analysis-template.md` | Phase 4 report template (8 sections) |
176
+ | `ai-common-toolkit:humanizer` | Phase 4 tone pass |
177
+ | `$HOME/.claude/scripts/validate-complaint-doc.mjs` | Phase 5 pre-dispatch gate |
178
+ | `$HOME/.claude/multi-agent-refs/channels/confluence.md`, `channels/jira.md`, `~/.claude/lib/md2confluence-v3.py` | Phase 5 dispatch |
179
+ | `$HOME/.claude/schemas/complaint-analysis-spec.schema.json` | State contract |
180
+
181
+ ## Notes
182
+
183
+ - Fully generic: hosts come from `prefs.global.hosts.*`, tokens from `prefs.global.keychainMapping.*`; no company name, host, or real repo name in this file.
184
+ - `prefs.projects[<project>].routing.coreTeamLabel` is optional; when unset, `suggestedQueue` renders as `-` and the routing entry still stands.
185
+ - If Confluence / Jira dispatch returns 401 / 403, surface the error and offer the Local fallback (the draft stays on disk).
186
+ - The `complaints/` directory is not gitignored; the user commits manually if desired.
@@ -217,7 +217,7 @@ That is the whole list. Phase 0 (Init full picker), Phase 4 (Review), Phase 5 (U
217
217
  | Duration | ~10-15 min | ~7-10 min |
218
218
  ## Intake warnings (`--dev` family)
219
219
 
220
- Two checks belong at the top of every `--dev` run and are specified once in `$HOME/.claude/multi-agent-refs/phases/modes.md` "Intake warnings shared by the whole `--dev` family": an analysis document supplied to a mode that skips Analysis and Planning, and a branch that already carries the work (which wants `/multi-agent:ship`, not a second Dev pass). Read that section rather than reasoning about it from scratch.
220
+ Two checks belong at the top of every `--dev` run and are specified once in `$HOME/.claude/multi-agent-refs/phases/modes.md` "Intake warnings shared by the whole `--dev` family": an analysis document supplied to a mode that skips Analysis and Planning, and a branch that already carries the work (which wants `/multi-agent:resume-local`, not a second Dev pass). Read that section rather than reasoning about it from scratch.
221
221
 
222
222
  ## Required: outward-facing payload contracts
223
223
 
@@ -61,7 +61,7 @@ Phase 7: Report → short terminal summary
61
61
  | Estimated duration | ~12 min | ~7 min | ~10 min | **~5 min** |
62
62
  ## Intake warnings (`--dev` family)
63
63
 
64
- Two checks belong at the top of every `--dev` run and are specified once in `$HOME/.claude/multi-agent-refs/phases/modes.md` "Intake warnings shared by the whole `--dev` family": an analysis document supplied to a mode that skips Analysis and Planning, and a branch that already carries the work (which wants `/multi-agent:ship`, not a second Dev pass). Read that section rather than reasoning about it from scratch.
64
+ Two checks belong at the top of every `--dev` run and are specified once in `$HOME/.claude/multi-agent-refs/phases/modes.md` "Intake warnings shared by the whole `--dev` family": an analysis document supplied to a mode that skips Analysis and Planning, and a branch that already carries the work (which wants `/multi-agent:resume-local`, not a second Dev pass). Read that section rather than reasoning about it from scratch.
65
65
 
66
66
  ## Required: outward-facing payload contracts
67
67
 
@@ -106,7 +106,7 @@ Routes to the orchestrator with `--dev --local` flags. Apply the `$HOME/.claude/
106
106
 
107
107
  ## Intake warnings (`--dev` family)
108
108
 
109
- Two checks belong at the top of every `--dev` run and are specified once in `$HOME/.claude/multi-agent-refs/phases/modes.md` "Intake warnings shared by the whole `--dev` family": an analysis document supplied to a mode that skips Analysis and Planning, and a branch that already carries the work (which wants `/multi-agent:ship`, not a second Dev pass). Read that section rather than reasoning about it from scratch.
109
+ Two checks belong at the top of every `--dev` run and are specified once in `$HOME/.claude/multi-agent-refs/phases/modes.md` "Intake warnings shared by the whole `--dev` family": an analysis document supplied to a mode that skips Analysis and Planning, and a branch that already carries the work (which wants `/multi-agent:resume-local`, not a second Dev pass). Read that section rather than reasoning about it from scratch.
110
110
 
111
111
  ## Required: outward-facing payload contracts
112
112
 
@@ -47,7 +47,7 @@ Routes to the orchestrator with `--dev --local autopilot` flags. The pipeline co
47
47
  ```
48
48
  ## Intake warnings (`--dev` family)
49
49
 
50
- Two checks belong at the top of every `--dev` run and are specified once in `$HOME/.claude/multi-agent-refs/phases/modes.md` "Intake warnings shared by the whole `--dev` family": an analysis document supplied to a mode that skips Analysis and Planning, and a branch that already carries the work (which wants `/multi-agent:ship`, not a second Dev pass). Read that section rather than reasoning about it from scratch.
50
+ Two checks belong at the top of every `--dev` run and are specified once in `$HOME/.claude/multi-agent-refs/phases/modes.md` "Intake warnings shared by the whole `--dev` family": an analysis document supplied to a mode that skips Analysis and Planning, and a branch that already carries the work (which wants `/multi-agent:resume-local`, not a second Dev pass). Read that section rather than reasoning about it from scratch.
51
51
 
52
52
  ## Required: outward-facing payload contracts
53
53
 
@@ -62,7 +62,7 @@ deletes nothing until you confirm.
62
62
  residue in the index (`.worktrees/{id}` recorded as a "Subproject commit"
63
63
  entry by a pre-guard `git add -A`), and a missing `.worktrees/` line in
64
64
  `.git/info/exclude`. Registered, healthy worktrees are NEVER touched -
65
- those belong to `/multi-agent:ship` / `/multi-agent:kill`.
65
+ those belong to `/multi-agent:resume-local` / `/multi-agent:kill`.
66
66
 
67
67
  - Output says `nothing to do` -> skip silently, no question.
68
68
  - Otherwise surface a second `AskUserQuestion` (in `outputLanguage`):
@@ -91,7 +91,7 @@ Dedicated commands (same as flags above):
91
91
  /multi-agent:local-autopilot "task" = multi-agent "task" --local autopilot
92
92
  /multi-agent:dev-local "task" = multi-agent "task" --dev --local
93
93
  /multi-agent:dev-local-autopilot "task" = multi-agent "task" --dev --local autopilot
94
- /multi-agent:ship [jira-id] [autopilot] Continue already-done LOCAL work: Review → Build+Test → PR → Jira analysis + test scenarios (no dev)
94
+ /multi-agent:resume-local [jira-id] [autopilot] Continue already-done LOCAL work: Review → Build+Test → PR → Jira analysis + test scenarios (no dev)
95
95
 
96
96
  ------------------------------------------------------------
97
97
 
@@ -102,6 +102,7 @@ Status & Resume:
102
102
  /multi-agent:resume [#id] Resume a paused or failed task from where it stopped
103
103
  /multi-agent:kill [#id] Stop task + delete worktree (logs preserved)
104
104
  /multi-agent:prune-logs Delete per-task project logs (audit + metrics kept; age/project/task filters, dry-run first)
105
+ /multi-agent:prune-prompts Zero-base prompt review: measure always-on instruction footprint, propose keep/trial/delete per rule (report first, apply on approval)
105
106
  /multi-agent:garbage-collect Sweep leftover /tmp scratch from past runs (dry-run first)
106
107
  /multi-agent:purge Worktree + logs - full reset (double confirm)
107
108
 
@@ -113,6 +114,7 @@ Post-Hoc & Side-Channel:
113
114
  /multi-agent:review-issue Grade a GitHub issue's pipeline-readiness -> comment the gaps on it
114
115
  /multi-agent:analysis ["analysis-name"] Feature-spec analysis (Figma + Swagger + Confluence + repos) → per-platform v3 doc (23-section Full / 7-section Lite)
115
116
  /multi-agent:analysis-resolve [doc] Resolve Section 20 open questions of an analysis doc, one at a time with source-labeled candidates
117
+ /multi-agent:complaint-analysis ["run-name"] [--file path] Customer-complaint triage: Graylog evidence per trx/conv id + read-only repo correlation → client/bff root cause + fix plan + dev prompt, or core routing recommendation
116
118
  /multi-agent:build-optimize iOS-only Xcode build perf wrapper → benchmark + analyze + recommend-first .build-benchmark/optimization-plan.md
117
119
  /multi-agent:create-jira ["desc"] [figma-url] [swagger-url] Create a Jira Task/Bug/Story matching team conventions (asks type + mining + active sprint + auto-sizing sections + preview & approval)
118
120
  /multi-agent:diff-explain Map a Phase 4 triage finding back to specific diff lines
@@ -132,13 +134,18 @@ Setup & Maintenance:
132
134
 
133
135
  /multi-agent:setup First-run wizard - Keychain tokens + Git identity + language
134
136
  /multi-agent:language [en|tr] Show or set outputLanguage (promptLanguage stays English)
135
- /multi-agent:stack <id> Select stack by enabling the matching marketplace plugin(s) (ios / android / mobile / backend / frontend / fullstack / all)
137
+ /multi-agent:stack [ids...] Enable stack plugin(s); multi-select: ids together (ios backend) or no arg -> native picker (common always on)
136
138
  /multi-agent:sync Sync ecosystem (Claude Code + Copilot CLI + pipeline + website + dev-toolkit MCP)
137
139
  /multi-agent:update Pull latest pipeline + reinstall + run migrations
138
140
  /multi-agent:uninstall Uninstall pipeline from every CLI (--all-data also clears settings + logs; Keychain tokens always intact, double confirm)
139
141
 
140
142
  ------------------------------------------------------------
141
143
 
144
+ Stack plugin skills: call directly as ai-<stack>-toolkit:<skill>. Catalog:
145
+ ai-<stack>-toolkit:help. Active plugins per repo: /multi-agent:stack.
146
+
147
+ ------------------------------------------------------------
148
+
142
149
  Routines (your own reusable jobs):
143
150
 
144
151
  /multi-agent:save [name] Save a recurring job as a reusable /multi-agent:<name> command
@@ -353,7 +360,7 @@ Dedicated komutlar (yukarıdaki flag'lerin eşdeğeri):
353
360
  /multi-agent:local-autopilot "task" = multi-agent "task" --local autopilot
354
361
  /multi-agent:dev-local "task" = multi-agent "task" --dev --local
355
362
  /multi-agent:dev-local-autopilot "task" = multi-agent "task" --dev --local autopilot
356
- /multi-agent:ship [jira-id] [autopilot] Lokalde biten işi sürdür: Review → Build+Test → PR → Jira teknik analiz + test senaryoları (dev yok)
363
+ /multi-agent:resume-local [jira-id] [autopilot] Lokalde biten işi sürdür: Review → Build+Test → PR → Jira teknik analiz + test senaryoları (dev yok)
357
364
 
358
365
  ------------------------------------------------------------
359
366
 
@@ -364,6 +371,7 @@ Status & Resume:
364
371
  /multi-agent:resume [#id] Duraklamış / hata almış task'ı kaldığı yerden devam ettir
365
372
  /multi-agent:kill [#id] Task'ı durdur + worktree'yi sil (log'lar korunur)
366
373
  /multi-agent:prune-logs Task bazlı proje log'larını sil (audit + metrics korunur; yaş/proje/task filtresi, önce dry-run)
374
+ /multi-agent:prune-prompts Sıfır-tabanlı prompt incelemesi: sürekli yüklü talimat yükünü ölç, kural başına tut/dene/sil öner (önce rapor, onayla uygula)
367
375
  /multi-agent:garbage-collect Geçmiş koşumların /tmp artıklarını süpür (önce dry-run)
368
376
  /multi-agent:purge Worktree + log'lar - tam reset (çift onay)
369
377
 
@@ -375,6 +383,7 @@ Post-Hoc & Side-Channel:
375
383
  /multi-agent:review-issue GitHub issue'nun pipeline'a hazırlığını değerlendir -> eksikleri yorum olarak ekle
376
384
  /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)
377
385
  /multi-agent:analysis-resolve [doc] Analiz dokümanının Bölüm 20 açık sorularını kaynak etiketli adaylarla teker teker çözer
386
+ /multi-agent:complaint-analysis ["run-adı"] [--file yol] Müşteri şikayeti triyajı: trx/conv id ile Graylog kanıtı + salt-okunur repo eşleştirme → client/bff kök neden + fix planı + dev prompt'u, veya core'a yönlendirme önerisi
378
387
  /multi-agent:build-optimize iOS-only Xcode build performance wrapper → benchmark + analiz + recommend-first .build-benchmark/optimization-plan.md
379
388
  /multi-agent:create-jira ["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)
380
389
  /multi-agent:diff-explain Phase 4 triage bulgusunu diff satırlarına eşle
@@ -394,13 +403,19 @@ Setup & Maintenance:
394
403
 
395
404
  /multi-agent:setup İlk kurulum sihirbazı - Keychain token + Git kimliği + dil
396
405
  /multi-agent:language [en|tr] outputLanguage'ı göster veya ayarla (promptLanguage İngilizce kalır)
397
- /multi-agent:stack <id> Stack'i eşleşen marketplace plugin'i etkinleştirerek seç (ios / android / mobile / backend / frontend / fullstack / all)
406
+ /multi-agent:stack [ids...] Stack plugin'lerini etkinleştir; çoklu seçim: id'ler yan yana (ios backend) ya da argümansız -> native picker (common hep açık)
398
407
  /multi-agent:sync Ekosistemi senkronize et (Claude Code + Copilot CLI + pipeline + website + dev-toolkit MCP)
399
408
  /multi-agent:update En son pipeline'ı çek + reinstall + migration çalıştır
400
409
  /multi-agent:uninstall Pipeline'ı tüm CLI'lerden kaldır (--all-data ayar + logları da siler; Keychain token her zaman dokunulmaz, çift onay)
401
410
 
402
411
  ------------------------------------------------------------
403
412
 
413
+ Stack plugin skill'leri: doğrudan ai-<stack>-toolkit:<skill> olarak çağrılır
414
+ (örn. ai-ios-toolkit:create-component). Lokal kopya ve sarmalayıcı yok. Katalog:
415
+ ai-<stack>-toolkit:help. Aktif plugin'ler repo bazında: /multi-agent:stack.
416
+
417
+ ------------------------------------------------------------
418
+
404
419
  Rutinler (kendi tekrar eden işlerin):
405
420
 
406
421
  /multi-agent:save [ad] Sık yaptığın bir işi yeniden kullanılabilir /multi-agent:<ad> komutu olarak kaydet
@@ -9,9 +9,9 @@ allowed-tools: Skill, Bash, Read, Edit, Write, AskUserQuestion
9
9
 
10
10
  **Input**: $ARGUMENTS - optionally a module name or path. When absent, Phase 1 discovers and asks.
11
11
 
12
- This routine is the **procedure**. The rules live in the `ios-coding-standard` skill, whose registry is
12
+ This routine is the **procedure**. The rules live in the `ai-ios-toolkit:ios-coding-standard` skill, whose registry is
13
13
  `references/rules.yml` and whose teaching doc is `references/STANDARD.md`. Load that
14
- skill first; it is installed on every host and carried by the iOS stack plugin, so
14
+ skill first; Claude Code loads it from the iOS stack plugin, Copilot/Codex from their local copy, so
15
15
  there is one registry rather than a copy per CLI. Never restate a rule here - cite its ID. A rule that is not in the
16
16
  registry is not a rule; if the audit needs one, propose it as `status: proposed` and say so.
17
17