@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.
- package/CHANGELOG.md +76 -6
- package/README.md +15 -8
- package/README.tr.md +15 -8
- package/docs/FIGMA_PIPELINE.md +3 -3
- package/docs/adr/0006-skills-core-external-split.md +1 -1
- package/docs/adr/0009-claude-stack-skills-plugin-only.md +31 -0
- package/docs/adr/README.md +1 -0
- package/docs/architecture.md +7 -7
- package/docs/ecosystem.md +28 -28
- package/docs/features.md +5 -5
- package/index.js +2 -0
- package/install/_codex-agents.mjs +11 -2
- package/install/_common.mjs +65 -1
- package/install/_dev-only-files.mjs +0 -1
- package/install/_platform-filter.mjs +73 -7
- package/install/_plugin-skills.mjs +19 -8
- package/install/claude.mjs +144 -59
- package/install/codex.mjs +28 -3
- package/install/copilot.mjs +36 -11
- package/install/index.mjs +6 -2
- package/install/templates/codex-instructions.md +1 -1
- package/install/templates/copilot-instructions.md +3 -3
- package/package.json +1 -2
- package/pipeline/commands/multi-agent/SKILL.md +2 -0
- package/pipeline/commands/multi-agent/analysis/SKILL.md +3 -3
- package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/build-optimize/SKILL.md +9 -9
- package/pipeline/commands/multi-agent/channels/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +186 -0
- package/pipeline/commands/multi-agent/dev/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/dev-autopilot/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/dev-local/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/dev-local-autopilot/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/help/SKILL.md +19 -4
- package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/jira/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/prune-prompts/SKILL.md +81 -0
- package/pipeline/commands/multi-agent/resume/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/{ship → resume-local}/SKILL.md +8 -8
- package/pipeline/commands/multi-agent/setup/SKILL.md +5 -5
- package/pipeline/commands/multi-agent/stack/SKILL.md +55 -43
- package/pipeline/commands/multi-agent/store-ready/SKILL.md +3 -3
- package/pipeline/commands/multi-agent/sync/SKILL.md +18 -11
- package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/uninstall/SKILL.md +2 -0
- package/pipeline/commands/multi-agent/update/SKILL.md +1 -1
- package/pipeline/lib/issue-fetcher.sh +1 -1
- package/pipeline/lib/parse-complaints.sh +306 -0
- package/pipeline/multi-agent-refs/channels/wiki.md +3 -3
- package/pipeline/multi-agent-refs/complaint-analysis-template.md +99 -0
- package/pipeline/multi-agent-refs/component-dispatch.md +6 -6
- package/pipeline/multi-agent-refs/cross-cli-contract.md +16 -16
- package/pipeline/multi-agent-refs/features/external-context-injection.md +1 -1
- package/pipeline/multi-agent-refs/features/stack-skill-routing.md +5 -5
- package/pipeline/multi-agent-refs/generate-issue.md +1 -1
- package/pipeline/multi-agent-refs/phases/modes.md +1 -1
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +1 -1
- package/pipeline/multi-agent-refs/phases/phase-1-analysis.md +7 -7
- package/pipeline/multi-agent-refs/phases/phase-2-planning.md +5 -5
- package/pipeline/multi-agent-refs/phases/phase-3-dev.md +3 -3
- package/pipeline/multi-agent-refs/phases/phase-4-review.md +12 -12
- package/pipeline/multi-agent-refs/phases/phase-5-test.md +1 -1
- package/pipeline/multi-agent-refs/tracker-contract.md +1 -1
- package/pipeline/multi-agent-refs/wiki-capture.md +2 -2
- package/pipeline/preferences-template.json +13 -5
- package/pipeline/rules/figma-pipeline.md +2 -2
- package/pipeline/schemas/agent-state.schema.json +1 -1
- package/pipeline/schemas/complaint-analysis-spec.schema.json +216 -0
- package/pipeline/schemas/migrations/prefs-2.5.0-to-2.6.0.mjs +46 -0
- package/pipeline/schemas/prefs.schema.json +276 -66
- package/pipeline/schemas/token-budget.json +2 -2
- package/pipeline/scripts/_stack-routing.mjs +79 -0
- package/pipeline/scripts/audit-log-rotate.sh +4 -1
- package/pipeline/scripts/build-skills-index.mjs +11 -0
- package/pipeline/scripts/build-stack-plugins.mjs +28 -60
- package/pipeline/scripts/check-derived-drift.mjs +52 -28
- package/pipeline/scripts/gc-worktrees.sh +4 -1
- package/pipeline/scripts/gen-skills-index.mjs +1 -1
- package/pipeline/scripts/match-skills.mjs +8 -2
- package/pipeline/scripts/migrate-prefs.mjs +28 -20
- package/pipeline/scripts/phase-tracker.sh +13 -5
- package/pipeline/scripts/phase0-exit-gate.mjs +3 -2
- package/pipeline/scripts/run-aggregator.mjs +7 -2
- package/pipeline/scripts/scan-agent-config.sh +1 -1
- package/pipeline/scripts/skill-conformance.mjs +165 -30
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +1 -1
- package/pipeline/scripts/test-gap-rules/android.json +25 -0
- package/pipeline/scripts/test-gap-rules/ios.json +34 -0
- package/pipeline/scripts/test-gap-rules/node.json +29 -0
- package/pipeline/scripts/test-gap-rules/python.json +25 -0
- package/pipeline/scripts/uninstall.mjs +158 -11
- package/pipeline/scripts/validate-complaint-doc.mjs +229 -0
- package/pipeline/scripts/validate-reviewer.mjs +9 -3
- package/pipeline/skills/.skill-manifest.json +156 -108
- package/pipeline/skills/.skills-index.json +449 -12
- package/pipeline/skills/shared/README.md +14 -10
- package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-complaint-analysis/SKILL.md +49 -0
- package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-prune-prompts/SKILL.md +83 -0
- package/pipeline/skills/shared/core/{multi-agent-ship → multi-agent-resume-local}/SKILL.md +6 -6
- package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +79 -22
- package/pipeline/skills/shared/core/multi-agent-store-ready/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +8 -8
- package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +1 -1
- package/pipeline/skills/shared/external/ios-coding-standard/modules/_TEMPLATE.yml +2 -2
- package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +368 -33
- package/pipeline/skills/shared/external/ios-coding-standard/references/swiftlint.draft.yml +1 -2
- package/pipeline/skills/shared/external/ios-coding-standard/scripts/check_structure.py +765 -0
- package/pipeline/skills/shared/external/ios-module-structure/SKILL.md +75 -0
- package/pipeline/skills/shared/external/ios-module-structure/modules/_TEMPLATE.yml +131 -0
- package/pipeline/skills/shared/external/ios-module-structure/references/rules.yml +559 -0
- package/pipeline/skills/shared/external/ios-module-structure/scripts/check_structure.py +765 -0
- package/pipeline/skills/shared/external/localization-reuse-map/example-mapping.json +53 -10
- package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +4 -3
- package/pipeline/skills/skills-index.md +7 -4
package/install/copilot.mjs
CHANGED
|
@@ -24,11 +24,18 @@ import {
|
|
|
24
24
|
wipeDir,
|
|
25
25
|
writeFile,
|
|
26
26
|
} from "./_common.mjs";
|
|
27
|
-
import {
|
|
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 {
|
|
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
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
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(
|
|
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(
|
|
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
|
|
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-
|
|
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:
|
|
306
|
-
(
|
|
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": "
|
|
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
|
-
|
|
|
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
|
|
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
|
-
|
|
|
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
|
-
|
|
|
66
|
-
|
|
|
67
|
-
|
|
|
68
|
-
|
|
|
69
|
-
|
|
|
70
|
-
|
|
|
71
|
-
|
|
|
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-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
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;
|
|
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
|
|