@mmerterden/multi-agent-pipeline 16.6.0 → 16.7.1

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 CHANGED
@@ -26,6 +26,27 @@ Internal file-layout changes that don't affect the slash-command surface are sti
26
26
 
27
27
  - **`smoke-website-deploy-identity.sh` (20 assertions).** It runs the script against throwaway repos with real remotes rather than grepping the doc: the happy path lands and pushes, an exported `GIT_AUTHOR_EMAIL` halts with the commit still local, an unchanged tree makes no empty commit, a matching config is preserved while a wrong name is corrected, and missing or non-repository arguments exit 2. Wiring is asserted separately, since a correct script nothing calls is its own failure mode.
28
28
 
29
+ ## [16.7.1] - 2026-08-25
30
+
31
+ ### Fixed
32
+
33
+ - **The two commands 16.7.0 added were not listed anywhere a user looks.** `/multi-agent:review-analysis` and `/multi-agent:feedback` shipped without an entry in `/multi-agent:help` (either language), in either README, or in the Copilot and Codex help variant - so the release published two commands nobody could discover. Every gate was green through seven rounds and none of them caught it, because no gate asks whether a new command was documented; a command a user cannot find is close to a command that does not exist.
34
+ - Making room for those entries took `help/SKILL.md` past its grandfathered token ceiling (8586 against 8500). The ceiling is governed by a list that only ratchets down, so raising it was not available - and should not have been. The new lines were cut first, and the rest came from the `store-ready` entry, which spent four lines per language on detail that belongs in its own command doc. A help listing is one line per command. Space for the new commands was taken back from an entry that had more than its share rather than borrowed from the budget.
35
+
36
+ ## [16.7.0] - 2026-08-25
37
+
38
+ Two commands: one that reviews the document instead of the diff, one that lets a user say something went wrong.
39
+
40
+ ### Added
41
+
42
+ - **`/multi-agent:review-analysis`** reviews a written analysis the way `/multi-agent:review` reviews a diff. It resolves the document from a local path, a Confluence page or a Jira issue, runs the deterministic gates FIRST and reports their output verbatim (`validate-analysis-doc.mjs`, and `build-references.mjs --check` when a state JSON is available), then runs the parallel model review and triage. Findings cite `Locked <n>` where a rule applies, because "I would have written this differently" gives an author nothing to act on while "Locked 34: this Confluence page is in the evidence record but not in Section 21" gives them a fix and a reason; anything with no rule behind it is marked as judgement rather than dressed up as a violation. The verdict states what was NOT checked - without a state file the references coverage claim is exactly the one nobody can verify from the document alone. It never edits the reviewed document: that belongs to its author, and a reviewer who rewrites it has removed the choice to disagree. `/multi-agent:analysis-resolve` remains the command that folds answers back in.
43
+ - **`/multi-agent:feedback "<message>"`** sends one message to the maintainer. **Only the text the user types is sent** - plus the pipeline version, the host CLI and a timestamp, which a report is useless without. No logs, no repo names, no branch names, no file paths, no diffs. That limit is deliberate: this package installs from a public registry, so an automatic log attachment would take a corporate user's internal identifiers off their machine and into someone else's database. A person can paste the one line that matters; a script cannot know which line that is. The exact payload is printed before anything is sent and nothing leaves the machine without a confirmation, autopilot included - a message to a person is never fired unattended. Auth reuses the usage ingest token, so nothing new is onboarded; `usageLog.optOut` does not silence it, because telemetry is passive collection while this is a deliberate act, and silently dropping something somebody chose to send is worse than not offering the command. A send failure is reported rather than swallowed: the person is waiting to hear whether their message went.
44
+
45
+ ### Changed
46
+
47
+ - **The analysis context-budget gate measures the refs the command declares, not a directory glob.** `multi-agent-refs/analysis/` also holds sibling-command refs - `resolve.md` belongs to `:analysis-resolve`, `review.md` to `:review-analysis` - and an analysis run loads neither, so the glob billed every run for files it never reads. The ceiling goes back to 145000 (from the 155000 v16.6.0 set): with the measurement corrected the real per-run cost is 139672, and that raise had been compensating for the glob rather than for anything the tree costs. A ceiling raised to fit a wrong number stops being a budget. Adding a ref to the analysis command now counts automatically; adding one for a sibling command does not.
48
+ - The command surface is 53. Both new commands carry their `shared/core` counterpart for Copilot and Codex, and the canonical inventory in `cross-cli-contract.md` and both sync skills lists them - `smoke-command-inventory.sh` fails on any of those going stale, and did, which is how the gap was found rather than shipped.
49
+
29
50
  ## [16.6.0] - 2026-08-25
30
51
 
31
52
  Two analysis standards, one evidence record, and a references section that is built rather than remembered.
package/README.md CHANGED
@@ -77,7 +77,7 @@ The discipline behind all of this - bounded loops, evidence gates, token-budgete
77
77
  | Audit | `/multi-agent:design-check` | Mock-mode vs Figma conformance, local-only |
78
78
  | Audit | `/multi-agent:testflight-validation` | Pre-submission gates for a TestFlight build: static archive audit → Apple's `altool --validate-app` → Review-Guidelines check. Validates only, never uploads |
79
79
 
80
- Helpers: `setup`, `status`, `resume #N`, `kill #N`, `garbage-collect`, `prune-logs`, `purge`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `create-jira`, `save`, `routines`, `forget`. 51 commands in all - full list: `/multi-agent:help`.
80
+ Helpers: `setup`, `status`, `resume #N`, `kill #N`, `garbage-collect`, `prune-logs`, `purge`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `review-analysis`, `feedback`, `create-jira`, `save`, `routines`, `forget`. 53 commands in all - full list: `/multi-agent:help`.
81
81
 
82
82
  ## Stacks
83
83
 
@@ -91,13 +91,13 @@ This enables the matching plugin (+ the shared `ai-common` plugin) in the repo's
91
91
 
92
92
  ## Tool support
93
93
 
94
- The pipeline runs natively on **Claude Code**, **Copilot CLI** and **Codex CLI** - all three install from the same `pipeline/` source and get the same 51 commands.
94
+ The pipeline runs natively on **Claude Code**, **Copilot CLI** and **Codex CLI** - all three install from the same `pipeline/` source and get the same 53 commands.
95
95
 
96
96
  | Tool | Flag | What it installs |
97
97
  |---|---|---|
98
98
  | Claude Code | `--claude` (default) | slash commands + skills + agents + `PreToolUse` secret-scan hook |
99
- | Copilot CLI | `--copilot` | instructions + 51 sub-command skills + scripts |
100
- | Codex CLI | `--codex` | one router skill + 51 specs as refs + 8 agent TOML + `AGENTS.md` block + `codex mcp add` |
99
+ | Copilot CLI | `--copilot` | instructions + 53 sub-command skills + scripts |
100
+ | Codex CLI | `--codex` | one router skill + 53 specs as refs + 8 agent TOML + `AGENTS.md` block + `codex mcp add` |
101
101
 
102
102
  Filter skills by stack with `--platform=ios\|android\|all`.
103
103
 
package/README.tr.md CHANGED
@@ -76,7 +76,7 @@ Bunun arkasındaki disiplin - sınırlı loop'lar, kanıt kapıları, token-büt
76
76
  | Audit | `/multi-agent:design-check` | Mock-mode vs Figma uygunluğu, yalnızca lokal |
77
77
  | Audit | `/multi-agent:testflight-validation` | TestFlight build için pre-submission kapıları: statik archive denetimi → Apple'ın `altool --validate-app`'i → Review-Guidelines kontrolü. Yalnızca doğrular, asla yüklemez |
78
78
 
79
- Yardımcılar: `setup`, `status`, `resume #N`, `kill #N`, `garbage-collect`, `prune-logs`, `purge`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `create-jira`, `save`, `routines`, `forget`. Toplam 51 komut - tam liste: `/multi-agent:help`.
79
+ Yardımcılar: `setup`, `status`, `resume #N`, `kill #N`, `garbage-collect`, `prune-logs`, `purge`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `review-analysis`, `feedback`, `create-jira`, `save`, `routines`, `forget`. Toplam 53 komut - tam liste: `/multi-agent:help`.
80
80
 
81
81
  ## Stack'ler
82
82
 
@@ -90,13 +90,13 @@ Bu, ilgili plugin'i (+ ortak `ai-common` plugin'ini) repo'nun `.claude/settings.
90
90
 
91
91
  ## Araç desteği
92
92
 
93
- Pipeline **Claude Code**, **Copilot CLI** ve **Codex CLI** üzerinde native çalışır - üçü de aynı `pipeline/` kaynağından kurulur ve aynı 51 komutu alır.
93
+ Pipeline **Claude Code**, **Copilot CLI** ve **Codex CLI** üzerinde native çalışır - üçü de aynı `pipeline/` kaynağından kurulur ve aynı 53 komutu alır.
94
94
 
95
95
  | Araç | Bayrak | Ne kurar |
96
96
  |---|---|---|
97
97
  | Claude Code | `--claude` (varsayılan) | slash komutları + skill'ler + agent'lar + `PreToolUse` secret-scan hook'u |
98
- | Copilot CLI | `--copilot` | talimatlar + 51 alt-komut skill'i + script'ler |
99
- | Codex CLI | `--codex` | bir router skill + ref olarak 51 spec + 8 agent TOML + `AGENTS.md` bloğu + `codex mcp add` |
98
+ | Copilot CLI | `--copilot` | talimatlar + 53 alt-komut skill'i + script'ler |
99
+ | Codex CLI | `--codex` | bir router skill + ref olarak 53 spec + 8 agent TOML + `AGENTS.md` bloğu + `codex mcp add` |
100
100
 
101
101
  Skill'leri stack'e göre filtrele: `--platform=ios\|android\|all`.
102
102
 
@@ -117,7 +117,7 @@ graph TB
117
117
  end
118
118
 
119
119
  subgraph "Pipeline Specs"
120
- CMD[commands/<br/>51 command files]
120
+ CMD[commands/<br/>53 command files]
121
121
  AGT[agents/<br/>8 agent personas]
122
122
  RUL[rules/<br/>12 domain rules]
123
123
  PHS[multi-agent-refs/phases/<br/>phase specs + contracts]
@@ -170,7 +170,7 @@ revisions of this diagram - Codex CLI and the two independently-shipped repos
170
170
  graph TD
171
171
  CC["Claude Code<br/>(source of truth)"]
172
172
  COP["Copilot CLI<br/>(instructions + 51 skills)"]
173
- COD["Codex CLI<br/>(1 router skill + 51 refs)"]
173
+ COD["Codex CLI<br/>(1 router skill + 53 refs)"]
174
174
  REPO["Pipeline Repo<br/>(npm package)"]
175
175
  WEB["Website"]
176
176
  PLUGREPO["multi-agent-plugins<br/>(5 stack plugins, own repo)"]
package/docs/ecosystem.md CHANGED
@@ -5,7 +5,7 @@ separately, wired together at install time and at run time:
5
5
 
6
6
  | Repo | What it owns | Ships as |
7
7
  |---|---|---|
8
- | **`multi-agent-pipeline`** (this repo) | Orchestration: the 8-phase flow, the 51 slash commands, quality gates, review/triage, cross-CLI parity | npm package (`@mmerterden/multi-agent-pipeline`), installs itself onto Claude Code / Copilot CLI / Codex CLI |
8
+ | **`multi-agent-pipeline`** (this repo) | Orchestration: the 8-phase flow, the 53 slash commands, quality gates, review/triage, cross-CLI parity | npm package (`@mmerterden/multi-agent-pipeline`), installs itself onto Claude Code / Copilot CLI / Codex CLI |
9
9
  | **`multi-agent-plugins`** | Stack knowledge: per-platform component/lifecycle skills (iOS, Android, Frontend, Backend) + shared knowledge | Claude Code marketplace, 5 independently-versioned plugins |
10
10
  | **`multi-agent-toolkit-mcp`** | The pipeline's hands on devices and browsers: 80 MCP tools across 6 categories (simulator/emulator control, accessibility audit, store compliance, web automation, Figma-vs-mock design audit, an agent-DSL batch runner) | npm package, registered as a standard stdio MCP server on every host |
11
11
 
@@ -18,7 +18,7 @@ Either can be swapped or removed without touching the other two's source.
18
18
  graph LR
19
19
  subgraph PIPE ["multi-agent-pipeline (orchestrator)"]
20
20
  direction TB
21
- PHASES["8 phases · 51 commands"]
21
+ PHASES["8 phases · 53 commands"]
22
22
  GATES["deterministic gates + review triage"]
23
23
  end
24
24
 
@@ -64,8 +64,8 @@ only those:
64
64
  graph TD
65
65
  CC["Claude Code<br/>~/.claude/commands/multi-agent/<br/>(source of truth)"]
66
66
 
67
- CC -->|"Step 2: copy + reformat<br/>51 sub-command skills"| COP["Copilot CLI<br/>~/.copilot/skills/"]
68
- CC -->|"Step 2b: transform<br/>(install.js --codex)"| COD["Codex CLI<br/>1 router skill + 51 refs<br/>+ 8 agent TOML"]
67
+ CC -->|"Step 2: copy + reformat<br/>53 sub-command skills"| COP["Copilot CLI<br/>~/.copilot/skills/"]
68
+ CC -->|"Step 2b: transform<br/>(install.js --codex)"| COD["Codex CLI<br/>1 router skill + 53 refs<br/>+ 8 agent TOML"]
69
69
  CC -->|"Step 3: genericize<br/>(strip personal data)"| REPO["multi-agent-pipeline repo<br/>pipeline/"]
70
70
  CC -->|"Step 4: version + feature sync"| WEB["Website<br/>projects.ts / i18n.tsx"]
71
71
 
@@ -153,7 +153,7 @@ measurements behind this table):
153
153
 
154
154
  | | Claude Code | Copilot CLI | Codex CLI |
155
155
  |---|---|---|---|
156
- | **Pipeline commands** | 51 slash-command skills, native | 51 skills, `multi-agent-{cmd}` naming, copied in | 1 router skill (`multi-agent`) + 51 command specs as reference files - Codex silently truncates its skills block past a few dozen entries, so sub-commands are not peer skills here |
156
+ | **Pipeline commands** | 53 slash-command skills, native | 53 skills, `multi-agent-{cmd}` naming, copied in | 1 router skill (`multi-agent`) + 53 command specs as reference files - Codex silently truncates its skills block past a few dozen entries, so sub-commands are not peer skills here |
157
157
  | **Stack plugins** | Marketplace plugin, loaded natively, resolved by `.claude/settings.json` enabled-list | Enabled plugin's authored skills copied flat into `~/.copilot/skills/`; `knowledge/` **not** re-copied (already delivered via `shared/external`) | Copied as reference files under `~/.codex/multi-agent-refs/skills/`, plugin-prefixed on name clash (e.g. `architecture` → `ai-ios-toolkit-architecture`) |
158
158
  | **Component dispatch (Phase 3)** | Marketplace plugin's `create-component`/`create-screen` skill via the Skill tool | No plugin loader - the enabled stack plugin's authored skills (incl. `create-component`) are copied flat into `~/.copilot/skills/` at install time (the old frozen `figma-*` copies are pruned, they were never a fallback) | Not part of the enforced parity axis; classification + state-shape must match, skill *inventory* does not |
159
159
  | **multi-agent-toolkit-mcp** | `claude mcp add multi-agent-toolkit -- npx -y @mmerterden/multi-agent-toolkit-mcp` | `copilot mcp add multi-agent-toolkit -- npx -y @mmerterden/multi-agent-toolkit-mcp` | `codex mcp add multi-agent-toolkit -- npx -y @mmerterden/multi-agent-toolkit-mcp` (skipped with a warning if `codex` isn't on `PATH`) |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "16.6.0",
3
+ "version": "16.7.1",
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",
@@ -0,0 +1,51 @@
1
+ ---
2
+ description: "Send one message to the maintainer: a bug, an idea or a question. Only the text you type is sent - no logs, no repo names, no paths. Shows the payload and asks before sending."
3
+ description-tr: "Bakımcıya tek mesaj gönderir: hata, fikir ya da soru. Yalnızca yazdığın metin gider - log yok, repo adı yok, yol yok. Göndermeden önce içeriği gösterip onay ister."
4
+ argument-hint: "\"<message>\" [bug | idea | question] - with no argument, you are asked for the text"
5
+ ---
6
+
7
+ # multi-agent feedback - tell the maintainer
8
+
9
+ **Input**: $ARGUMENTS
10
+
11
+ One message, sent to the maintainer's admin panel. This exists because the alternative is a problem nobody hears about: a run goes wrong, the person shrugs and works around it, and the same defect is still there a month later.
12
+
13
+ ## What is sent
14
+
15
+ **Only the text you type**, plus three fields the report is useless without:
16
+
17
+ | Field | Why |
18
+ |---|---|
19
+ | `text` | What you wrote. Verbatim, up to 4000 characters. |
20
+ | `kind` | `bug`, `idea` or `question`. |
21
+ | `v` | The installed pipeline version - a report against 16.4 and one against 16.6 are different reports. |
22
+ | `host` | Claude Code, Copilot CLI or Codex CLI - a bug that only reproduces on one host is a different bug. |
23
+ | `at` | When you sent it. |
24
+
25
+ **No logs are attached, ever.** Not the agent log, not the diff, not the repo name, not the branch, not a file path. That is a deliberate limit rather than an oversight: this package installs from a public registry, so an automatic log attachment would take a corporate user's internal identifiers off their machine and into someone else's database. You can paste the one line you think matters - a script cannot know which line that is, so it does not guess.
26
+
27
+ ## Flow
28
+
29
+ 1. Take the message from `$ARGUMENTS`. With no argument, ask for it (free text) and then ask the kind.
30
+ 2. **Print the exact payload that will be sent**, as JSON, using the script's own dry run so what is shown is what goes:
31
+
32
+ ```bash
33
+ node "$HOME/.claude/scripts/feedback-send.mjs" --text "<message>" --kind <kind> --dry-run
34
+ ```
35
+
36
+ 3. **Ask for confirmation.** Nothing leaves the machine before a yes. This is an outward-facing action and the pipeline confirms those; showing the payload first is what makes the yes meaningful. Autopilot does not exempt this - a message to a person is never something to fire unattended.
37
+ 4. Send:
38
+
39
+ ```bash
40
+ node "$HOME/.claude/scripts/feedback-send.mjs" --text "<message>" --kind <kind>
41
+ ```
42
+
43
+ 5. Report the result plainly. A failure is surfaced, not swallowed: the person is waiting to hear whether their message went, and silence would leave them believing they had been heard.
44
+
45
+ ## Auth and reachability
46
+
47
+ Reuses the usage ingest token (`prefs.global.keychainMapping.usage_ingest`), so nothing extra has to be onboarded - `/multi-agent:update` registers one on first run. With no token, the command says so and names the command that fixes it rather than failing quietly.
48
+
49
+ `usageLog.optOut` does **not** silence this. Telemetry is passive collection and opting out of it is a real choice; feedback is a deliberate act by the person typing the command, and dropping a message somebody chose to send would be worse than not offering the command at all.
50
+
51
+ The endpoint must be TLS. The token rides in a header, so plain http would put it on the wire in cleartext; only loopback is exempt, for local development.
@@ -116,11 +116,13 @@ Status & Resume:
116
116
  Post-Hoc & Side-Channel:
117
117
 
118
118
  /multi-agent:channels Post multi-channel report (Jira / Confluence / Wiki / PR description)
119
+ /multi-agent:feedback "msg" Tell the maintainer something broke; only your text is sent
119
120
  /multi-agent:review Parallel review of a PR or branch diff; no URL -> pick open GitHub/Bitbucket PRs
120
121
  /multi-agent:review-jira Grade a Jira issue's pipeline-readiness -> comment the gaps on it
121
122
  /multi-agent:review-issue Grade a GitHub issue's pipeline-readiness -> comment the gaps on it
122
123
  /multi-agent:analysis ["analysis-name"] Feature-spec analysis (Figma + Swagger + Confluence + repos) → per-platform v3 doc (23-section Full / 7-section Lite)
123
124
  /multi-agent:analysis-resolve [doc] Resolve Section 20 open questions of an analysis doc, one at a time with source-labeled candidates
125
+ /multi-agent:review-analysis [doc] Review a written analysis; findings cite the rule they break
124
126
  /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
125
127
  /multi-agent:build-optimize iOS-only Xcode build perf wrapper → benchmark + analyze + recommend-first .build-benchmark/optimization-plan.md
126
128
  /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)
@@ -128,10 +130,7 @@ Post-Hoc & Side-Channel:
128
130
  /multi-agent:search Cross-task log search with smart ranking; --semantic queries triage corpus
129
131
  /multi-agent:scan Skill security scan against tiered pattern catalog
130
132
  /multi-agent:refactor Best practices + bug hunt + upstream drift + toolkit MCP research -> one plan, approval, dev + sync
131
- /multi-agent:store-ready [repo] [--archive=|--ipa=|--aab=|--apk=] [--skip-sweep] Pre-submission store readiness,
132
- iOS + Android, local-only. Three symmetric gates per platform: static package audit,
133
- the store's own validator, policy review vs repo source. Plus the running-app sweep.
134
- A skipped gate is never counted as a pass. Validates only, never uploads.
133
+ /multi-agent:store-ready [repo] [--archive=|--ipa=|--aab=|--apk=] [--skip-sweep] Pre-submission store readiness, iOS + Android, local-only: three symmetric gates per platform plus the running-app sweep. A skipped gate is never a pass. Validates only, never uploads.
135
134
  /multi-agent:testflight-validation [repo] [--ipa=|--archive=] iOS-pinned alias of :store-ready, kept because it is
136
135
  the name you reach for when the target is TestFlight. Same three gates, one implementation.
137
136
  /multi-agent:ios-coding-standard [module] Audit an iOS module against the 99-rule coding-standard registry -> remediation
@@ -391,11 +390,13 @@ Status & Resume:
391
390
  Post-Hoc & Side-Channel:
392
391
 
393
392
  /multi-agent:channels Multi-channel rapor gönder (Jira / Confluence / Wiki / PR description)
393
+ /multi-agent:feedback "mesaj" Bakımcıya bir şeyin bozulduğunu bildir; yalnızca yazdığın metin gider
394
394
  /multi-agent:review PR veya branch diff'ini paralel review et; URL yoksa -> açık GitHub/Bitbucket PR'larını seçtir
395
395
  /multi-agent:review-jira Jira maddesinin pipeline'a hazırlığını değerlendir -> eksikleri yorum olarak ekle
396
396
  /multi-agent:review-issue GitHub issue'nun pipeline'a hazırlığını değerlendir -> eksikleri yorum olarak ekle
397
397
  /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)
398
398
  /multi-agent:analysis-resolve [doc] Analiz dokümanının Bölüm 20 açık sorularını kaynak etiketli adaylarla teker teker çözer
399
+ /multi-agent:review-analysis [doc] Yazılmış analizi review eder; bulgular ihlal edilen kuralı gösterir
399
400
  /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
400
401
  /multi-agent:build-optimize iOS-only Xcode build performance wrapper → benchmark + analiz + recommend-first .build-benchmark/optimization-plan.md
401
402
  /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)
@@ -403,10 +404,7 @@ Post-Hoc & Side-Channel:
403
404
  /multi-agent:search Task log'larında akıllı arama; --semantic triage corpus'unu sorgular
404
405
  /multi-agent:scan Skill güvenlik taraması (tiered pattern catalog)
405
406
  /multi-agent:refactor Uyarlanmış best-practice + bug avı + upstream-drift + multi-agent-toolkit MCP araştırması -> tek plan, onay, dev + sync
406
- /multi-agent:store-ready [repo] [--archive=|--ipa=|--aab=|--apk=] [--skip-sweep] Yükleme öncesi store hazırlığı,
407
- iOS + Android, yalnızca lokal. Platform başına 3 simetrik kapı: statik paket denetimi,
408
- store'un kendi doğrulayıcısı, kaynağa karşı politika incelemesi. Artı çalışan-app sweep'i.
409
- Atlanan kapı asla pass sayılmaz. Sadece doğrular, asla yüklemez.
407
+ /multi-agent:store-ready [repo] [--archive=|--ipa=|--aab=|--apk=] [--skip-sweep] Yükleme öncesi store hazırlığı, iOS + Android, yalnızca lokal: platform başına 3 simetrik kapı artı çalışan-app sweep'i. Atlanan kapı asla pass sayılmaz. Sadece doğrular, asla yüklemez.
410
408
  /multi-agent:testflight-validation [repo] [--ipa=|--archive=] :store-ready'nin iOS'a sabitlenmiş alias'ı; hedef
411
409
  TestFlight olduğunda akla gelen isim olduğu için korunuyor. Aynı 3 kapı, tek implementasyon.
412
410
  /multi-agent:ios-coding-standard [modül] Bir iOS modülünü 99 kurallık kodlama-standardı registry'sine göre denetler -> düzeltme
@@ -0,0 +1,32 @@
1
+ ---
2
+ description: "Review a written analysis document instead of a diff: resolve it from a path, a Confluence page or a Jira issue, run the deterministic gates first, then a parallel model review. Findings cite the Locked rule they break. Never edits the document."
3
+ description-tr: "Diff yerine yazılmış analiz dokümanını review eder: yol, Confluence sayfası veya Jira issue'sundan getirir, önce deterministik geçitleri koşar, sonra paralel model review. Bulgular ihlal edilen Locked kuralını gösterir. Dokümanı düzenlemez."
4
+ argument-hint: "[path | Confluence URL | pageId | JIRA-KEY] [--state <state.json>] - optional; with no argument, pick from recent analyses"
5
+ ---
6
+
7
+ # multi-agent review-analysis - analysis document review
8
+
9
+ **Input**: $ARGUMENTS
10
+
11
+ `/multi-agent:review` judges a diff. This judges the document that diff was supposed to come from, before anyone writes the code it describes. No worktree, no branch, no commit, and the reviewed document is never edited in place.
12
+
13
+ ## Flow
14
+
15
+ Read `$HOME/.claude/multi-agent-refs/analysis/review.md` and execute it:
16
+
17
+ 1. **Resolve** the document from a local path, a Confluence URL or `pageId`, or a Jira key. With no argument, offer the recent analyses from `~/Desktop/multiAgentAnalysis/` and from each selected repo's `analysis/`, newest first.
18
+ 2. **Deterministic gates first**: `validate-analysis-doc.mjs` on the document, and `build-references.mjs --check` when the run's state JSON is available (`--state`, or a fresh analysis). Their output is reported verbatim, before any model reads the document. A finding a script already proves does not need an opinion.
19
+ 3. **Parallel model review** against the rubric (buildability, evidence, spine, altitude, admitted gaps, contradiction), CLI-aware: 2 models on Claude Code, 3 on Copilot CLI.
20
+ 4. **Fable triage** into Blocker / Important / Suggestion, dropping duplicates and anything the document answers elsewhere.
21
+ 5. **Report**, naming the profile it judged against and, explicitly, what was NOT checked.
22
+ 6. **Output** on request only: chat (default), Confluence comment, Jira comment, or a `-review.md` beside the document.
23
+
24
+ ## Why it cites Locked decisions
25
+
26
+ The analysis flow already declares 35 Locked decisions and two deterministic validators. A reviewer that says "I would have written this differently" gives the author nothing to act on; one that says "Locked 34: the Confluence page is in the evidence record but not in Section 21" gives them a fix and a reason. Findings that map to no rule are still allowed, but they are marked as judgement, not dressed up as a violation.
27
+
28
+ ## What it never does
29
+
30
+ - Edits the reviewed document. The document belongs to its author; a reviewer who rewrites it has removed the choice to disagree. `/multi-agent:analysis-resolve` is the command that folds answers back in.
31
+ - Touches a Jira description or a Confluence page body. Comments only.
32
+ - Chains into a dev run, creates a branch, or commits.
@@ -59,7 +59,7 @@ Run every step automatically:
59
59
  ```
60
60
  Step 1: PLATFORM Detect macOS / Linux / Windows (Git Bash / WSL); export PLATFORM env
61
61
  Step 1.5: DETECT Compare timestamps, find stale targets
62
- Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 51 sub-command skills)
62
+ Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 53 sub-command skills)
63
63
  Step 2b: CODEX Claude Code -> Codex CLI (1 router skill + 51 specs as refs + 8 agent TOML)
64
64
  Step 3: REPO Claude Code -> pipeline repo (genericized, personal data scrub, bash -n on all sh)
65
65
  Step 3c: PLUGINS pipeline shared/external -> multi-agent-plugins marketplace (rebuild knowledge/,
@@ -166,7 +166,7 @@ If nothing is stale → report "All targets up to date" and stop.
166
166
  Unlike the Copilot step, this one does **not** hand-copy files. The Codex tree is a
167
167
  *transform* of the Claude tree, not a mirror of it, and the transform is real work:
168
168
 
169
- - the 51 sub-command specs become reference files, because Codex silently truncates
169
+ - the 53 sub-command specs become reference files, because Codex silently truncates
170
170
  its skills block (see `cross-cli-contract.md` 2.6 for the measurement)
171
171
  - every `$HOME/.claude/...` reference to a CLI-owned tree is retargeted, with
172
172
  `agents/<persona>.md` becoming `.toml` and the dispatcher becoming the router skill
@@ -489,15 +489,18 @@ same 51 specs as reference files rather than as peer skills, via Step 2b - see
489
489
  |-------------|-------------|
490
490
  | `~/.claude/commands/multi-agent/{cmd}/SKILL.md` | `~/.copilot/skills/multi-agent-{cmd}/SKILL.md` |
491
491
 
492
- **51 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
492
+ **53 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
493
493
 
494
494
  ```
495
- analysis, analysis-resolve, autopilot, build-optimize, channels, complaint-analysis, create-jira, design-check, dev,
496
- dev-autopilot, dev-local, dev-local-autopilot, diff-explain, forget, garbage-collect,
497
- help, ios-coding-standard, issue, jira, kill, language, local,
498
- local-autopilot, log, manual-test, prune-logs, prune-prompts, purge, refactor, resume, review, review-issue, review-jira,
499
- routines, save, scan, search, setup, resume-local, stack, status, store-ready, sync, test, test-accessibility,
500
- test-dark-mode, test-dynamic-type, test-screenshots, testflight-validation, uninstall, update
495
+ analysis, analysis-resolve, autopilot, build-optimize, channels,
496
+ complaint-analysis, create-jira, design-check, dev, dev-autopilot, dev-local,
497
+ dev-local-autopilot, diff-explain, feedback, forget, garbage-collect, help,
498
+ ios-coding-standard, issue, jira, kill, language, local, local-autopilot,
499
+ log, manual-test, prune-logs, prune-prompts, purge, refactor, resume,
500
+ resume-local, review, review-analysis, review-issue, review-jira, routines,
501
+ save, scan, search, setup, stack, status, store-ready, sync, test,
502
+ test-accessibility, test-dark-mode, test-dynamic-type, test-screenshots,
503
+ testflight-validation, uninstall, update
501
504
  ```
502
505
 
503
506
  **NOT synced**: `$HOME/.claude/multi-agent-refs/*` - lazy-load references, Claude Code specific
@@ -179,7 +179,7 @@ A git clone of the pipeline repo is a maintainer workspace, kept in sync by `/mu
179
179
  ```
180
180
  Current: v15.6.0 Latest: v15.6.1
181
181
  -> npm pack @{npm-scope}/multi-agent-pipeline@15.6.1
182
- -> node install.js --all (51 commands, 245 scripts, 208 skills)
182
+ -> node install.js --all (53 commands, 245 scripts, 208 skills)
183
183
  -> migrate-prefs.mjs (0 changes - already v2.6.0)
184
184
 
185
185
  ✓ Updated: v15.6.0 → v15.6.1
@@ -0,0 +1,86 @@
1
+ # Analysis document review (`/multi-agent:review-analysis`)
2
+
3
+ > Reviews a written analysis the way `/multi-agent:review` reviews a diff. Loaded on demand. Read-only: no branch, no worktree, no commit, and the source document is never edited in place.
4
+
5
+ `/multi-agent:review` answers "is this code right". This answers "could an implementer build the thing from this document, and does the document keep the promises its own contract makes". The two are different questions with the same failure mode: a reviewer who has opinions instead of rules produces findings nobody can act on. So this flow cites `Locked <n>` the way a code review cites a rule ID.
6
+
7
+ ## Phase 0 - Resolve the document
8
+
9
+ `$ARGUMENTS` is one of:
10
+
11
+ | Input | Resolution |
12
+ |---|---|
13
+ | A local path | Read it. |
14
+ | A Confluence page URL or `pageId` | Fetch read-only through `$HOME/.claude/multi-agent-refs/channels/confluence.md`. Record `pageId` and page version - the review is about a specific version, and Confluence pages move under you. |
15
+ | A Jira key | Fetch the issue, then follow its analysis link. If the issue carries the analysis in its description or a comment, review that text and say which it was. |
16
+ | Nothing | Offer the most recent documents from `~/Desktop/multiAgentAnalysis/` and from `analysis/` in each selected repo, newest first, and single-select one. |
17
+
18
+ Fetch failures are reported and stop the run. Reviewing a document you could not read is the one outcome worse than not reviewing it.
19
+
20
+ ## Phase 1 - Deterministic gates first
21
+
22
+ Run the machine checks before the model reads anything, and report their output verbatim. A finding a script already proves does not need a model's opinion, and a model that reads the document first tends to argue with the script afterwards.
23
+
24
+ ```bash
25
+ node "$HOME/.claude/scripts/validate-analysis-doc.mjs" "<doc>"
26
+ # when the run's state JSON is available (a fresh analysis, or --state <path>):
27
+ node "$HOME/.claude/scripts/build-references.mjs" "<state>" --check "<doc>"
28
+ ```
29
+
30
+ `validate-analysis-doc.mjs` reads `profile` from the front-matter and applies the matching contract, so the corporate backbone and the global omission rule are each judged by their own rule. Its ERRORs are Blockers in this review, its WARNs are Important unless the document states why the warned-about thing is deliberate.
31
+
32
+ **No state JSON, no references gate.** Say so in the report rather than passing silently: the coverage claim ("every source the run read is listed") is exactly the claim nobody can verify from the document alone, and marking it unchecked is the honest output.
33
+
34
+ ## Phase 2 - Rubric
35
+
36
+ Parallel model review, same shape as `/multi-agent:review`: 2 models on Claude Code, 3 on Copilot CLI, then triage. Each reviewer answers the rubric below against the resolved profile and returns findings with `Locked <n>` or a rubric id, a quote from the document, and what a reader cannot do because of it.
37
+
38
+ **A. Buildability** - could an implementer start from this alone?
39
+
40
+ - Every screen, state and error path the feature needs is described somewhere, not assumed.
41
+ - Each business requirement or rule is testable: two readers cannot disagree about whether it passed.
42
+ - Nothing important is deferred to a conversation the reader was not in.
43
+
44
+ **B. Evidence** (Locked 3, 4, 34)
45
+
46
+ - Every quoted string, endpoint, status code and event name carries a citation.
47
+ - Nothing in a forward-looking section is actually a description of the current code.
48
+ - References carry their precision anchors, and a source that could not be fetched is listed as unreachable rather than dropped.
49
+
50
+ **C. Spine** (Locked 31 global, Locked 33 corporate)
51
+
52
+ - Global: every `BR-` id reaches an acceptance criterion and a test row.
53
+ - Corporate: every `IG` is realised by a `UC`, every `FG` names a source that exists, and the traceability matrix agrees with the sections. The matrix half is already machine-checked in Phase 1; the reviewer judges whether the chain is *meaningful*, not merely present.
54
+
55
+ **D. Altitude** - Part A carries no technology name, Part C carries no business rationale. A row that is unclear in two layers at once is two rows.
56
+
57
+ **E. Gaps that were admitted** - every `EKLENECEK` and every unverified assumption has an open question naming who can answer it. A gap with an owner is a plan; a gap without one is a defect.
58
+
59
+ **F. Contradiction** - the document does not say two different things in two places. This is the finding class a human reviewer misses most, because it needs the whole document held at once.
60
+
61
+ ## Phase 3 - Triage and verdict
62
+
63
+ Fable triages the pooled findings exactly as in `/multi-agent:review`: drop duplicates, drop what the document already answers elsewhere, and keep the rest at one of three severities.
64
+
65
+ | Severity | Meaning |
66
+ |---|---|
67
+ | Blocker | An implementer would build the wrong thing, or could not start. Deterministic-gate ERRORs land here. |
68
+ | Important | The document is right but a reader will need a conversation to use it. |
69
+ | Suggestion | Clarity and consistency. Never a style preference dressed as a defect. |
70
+
71
+ The verdict names the profile it judged against, the counts per severity, and what was NOT checked (the references gate without a state file, anything the fetch could not reach). Follow the pipeline rule on claiming: state which findings are mechanically proven and which are judgement.
72
+
73
+ ## Phase 4 - Output
74
+
75
+ Default is the chat report. Nothing is written anywhere without an explicit choice.
76
+
77
+ | Target | Behaviour |
78
+ |---|---|
79
+ | Chat only | Default. |
80
+ | Confluence comment | A comment on the reviewed page, never an edit of the page body. The document belongs to its author; a reviewer who rewrites it has removed the choice to disagree. |
81
+ | Jira comment | Comment only, per `channels/issue-comment.md`. The description is never touched. |
82
+ | Local file | `<doc-dir>/<doc-name>-review.md` beside the document, so the review travels with what it reviewed. |
83
+
84
+ `/multi-agent:analysis-resolve` is the companion that acts on the findings: this command says what is wrong, that one walks the open questions and folds the answers back into the document. Say so in the report when the verdict has open questions, so the reader knows the next command rather than editing by hand.
85
+
86
+ Non-negotiables: report body follows `prefs.global.outputLanguage`; humanizer punctuation policy (Locked 7) applies to anything posted to a channel; no AI attribution anywhere; no status change, no assignment, no page edit, no commit.
@@ -6,15 +6,18 @@
6
6
 
7
7
  ---
8
8
 
9
- ## 1. Command Inventory (51 files, 47 live commands)
9
+ ## 1. Command Inventory (53 files, 49 live commands)
10
10
 
11
11
  ```
12
- analysis, analysis-resolve, autopilot, build-optimize, channels, complaint-analysis, create-jira, design-check, dev,
13
- dev-autopilot, dev-local, dev-local-autopilot, diff-explain, forget, garbage-collect,
14
- help, ios-coding-standard, issue, jira, kill, language, local,
15
- local-autopilot, log, manual-test, prune-logs, prune-prompts, purge, refactor, resume, review, review-issue, review-jira,
16
- routines, save, scan, search, setup, resume-local, stack, status, store-ready, sync, test, test-accessibility,
17
- test-dark-mode, test-dynamic-type, test-screenshots, testflight-validation, uninstall, update
12
+ analysis, analysis-resolve, autopilot, build-optimize, channels,
13
+ complaint-analysis, create-jira, design-check, dev, dev-autopilot, dev-local,
14
+ dev-local-autopilot, diff-explain, feedback, forget, garbage-collect, help,
15
+ ios-coding-standard, issue, jira, kill, language, local, local-autopilot,
16
+ log, manual-test, prune-logs, prune-prompts, purge, refactor, resume,
17
+ resume-local, review, review-analysis, review-issue, review-jira, routines,
18
+ save, scan, search, setup, stack, status, store-ready, sync, test,
19
+ test-accessibility, test-dark-mode, test-dynamic-type, test-screenshots,
20
+ testflight-validation, uninstall, update
18
21
  ```
19
22
 
20
23
  Categories:
@@ -0,0 +1,181 @@
1
+ #!/usr/bin/env node
2
+ // feedback-send.mjs - send one user-written feedback message to the
3
+ // maintainer's admin panel.
4
+ //
5
+ // WHAT IS SENT: the text the user typed, and nothing else that the user did not
6
+ // type. No logs, no repo names, no branch names, no file paths, no diffs, no
7
+ // prompts. The only fields this script adds are the ones the maintainer cannot
8
+ // act on the report without: which pipeline version it came from, which host
9
+ // CLI, and when.
10
+ //
11
+ // That restraint is the whole design. Attaching a run log would make a report
12
+ // easier to act on and would also mean a corporate user's internal identifiers
13
+ // leave their machine and land in someone else's database, from a package
14
+ // anyone can install off npm. A person can paste the one line they think
15
+ // matters; a script cannot know which line that is.
16
+ //
17
+ // Auth reuses the usage ingest token (`prefs.global.keychainMapping.usage_ingest`)
18
+ // so nothing new has to be onboarded. Unlike usage telemetry, `optOut` does NOT
19
+ // silence this: telemetry is passive collection, feedback is a deliberate act by
20
+ // the person running the command, and silently dropping something a user chose
21
+ // to send is worse than not offering the command.
22
+ //
23
+ // Usage:
24
+ // node feedback-send.mjs --text "<message>" [--kind bug|idea|question]
25
+ // [--endpoint <url>] [--dry-run]
26
+ //
27
+ // Exit: 0 sent (or dry run), 1 nothing to send / rejected, 2 usage error.
28
+
29
+ import { execFileSync } from "node:child_process";
30
+ import { readFileSync, existsSync } from "node:fs";
31
+ import { homedir } from "node:os";
32
+ import { join } from "node:path";
33
+
34
+ const ENDPOINT_DEFAULT = "https://mmerterden.vercel.app/api/feedback/ingest";
35
+ const TIMEOUT_MS = 8000;
36
+ const TEXT_MAX = 4000;
37
+ const KINDS = new Set(["bug", "idea", "question"]);
38
+
39
+ function arg(name, fallback = null) {
40
+ const i = process.argv.indexOf(name);
41
+ return i === -1 ? fallback : (process.argv[i + 1] ?? fallback);
42
+ }
43
+
44
+ function readPrefs() {
45
+ const p = join(homedir(), ".claude", "multi-agent-preferences.json");
46
+ try {
47
+ return JSON.parse(readFileSync(p, "utf-8")).global ?? {};
48
+ } catch {
49
+ return {};
50
+ }
51
+ }
52
+
53
+ function packageVersion() {
54
+ for (const p of [
55
+ join(homedir(), ".claude", ".pipeline-version"),
56
+ join(homedir(), ".copilot", ".pipeline-version"),
57
+ join(homedir(), ".codex", ".pipeline-version"),
58
+ ]) {
59
+ try {
60
+ const v = readFileSync(p, "utf-8").trim();
61
+ if (v) return v;
62
+ } catch {
63
+ /* try the next host */
64
+ }
65
+ }
66
+ return "unknown";
67
+ }
68
+
69
+ // Which CLI the person is running. Useful because a report that only reproduces
70
+ // on one host is a different bug from one that reproduces everywhere.
71
+ function host() {
72
+ if (existsSync(join(homedir(), ".claude", ".pipeline-version"))) return "claude";
73
+ if (existsSync(join(homedir(), ".copilot", ".pipeline-version"))) return "copilot";
74
+ if (existsSync(join(homedir(), ".codex", ".pipeline-version"))) return "codex";
75
+ return "unknown";
76
+ }
77
+
78
+ function resolveToken() {
79
+ if (process.env.MULTI_AGENT_USAGE_TOKEN) return process.env.MULTI_AGENT_USAGE_TOKEN;
80
+ const g = readPrefs();
81
+ const inline = g.usageLog?.token;
82
+ if (typeof inline === "string" && inline.trim()) return inline.trim();
83
+ const name = g.keychainMapping?.usage_ingest;
84
+ if (typeof name === "string" && name.trim()) {
85
+ const store = join(homedir(), ".claude", "lib", "credential-store.sh");
86
+ if (existsSync(store)) {
87
+ try {
88
+ const out = execFileSync("bash", [store, "get", name.trim()], {
89
+ encoding: "utf-8",
90
+ timeout: 4000,
91
+ stdio: ["ignore", "pipe", "ignore"],
92
+ }).trim();
93
+ if (out) return out;
94
+ } catch {
95
+ /* keychain unavailable */
96
+ }
97
+ }
98
+ }
99
+ return "";
100
+ }
101
+
102
+ // The token rides in a header, so http would put it on the wire in cleartext.
103
+ // Same rule the usage sender follows: https anywhere, http only for loopback.
104
+ function endpointAllowed(endpoint) {
105
+ let u;
106
+ try {
107
+ u = new URL(endpoint);
108
+ } catch {
109
+ return false;
110
+ }
111
+ if (u.protocol === "https:") return true;
112
+ return u.protocol === "http:" && ["localhost", "127.0.0.1", "::1"].includes(u.hostname);
113
+ }
114
+
115
+ async function main() {
116
+ const text = String(arg("--text", "") ?? "").trim();
117
+ if (!text) {
118
+ process.stderr.write('usage: feedback-send.mjs --text "<message>" [--kind bug|idea|question]\n');
119
+ process.exit(2);
120
+ }
121
+ if (text.length > TEXT_MAX) {
122
+ process.stderr.write(`ERROR: message is ${text.length} chars; the cap is ${TEXT_MAX}\n`);
123
+ process.exit(2);
124
+ }
125
+
126
+ const kindRaw = String(arg("--kind", "bug") ?? "bug").toLowerCase();
127
+ const kind = KINDS.has(kindRaw) ? kindRaw : "bug";
128
+ const endpoint = String(arg("--endpoint", ENDPOINT_DEFAULT) ?? ENDPOINT_DEFAULT);
129
+
130
+ const payload = {
131
+ text,
132
+ kind,
133
+ v: packageVersion(),
134
+ host: host(),
135
+ at: new Date().toISOString(),
136
+ };
137
+
138
+ if (process.argv.includes("--dry-run")) {
139
+ process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
140
+ process.exit(0);
141
+ }
142
+
143
+ if (!endpointAllowed(endpoint)) {
144
+ process.stderr.write(`ERROR: refusing to send over a non-TLS endpoint: ${endpoint}\n`);
145
+ process.exit(1);
146
+ }
147
+
148
+ const token = resolveToken();
149
+ if (!token) {
150
+ process.stderr.write(
151
+ "ERROR: no ingest token. Run /multi-agent:update once (it registers one) or /multi-agent:setup.\n",
152
+ );
153
+ process.exit(1);
154
+ }
155
+
156
+ const ctrl = new AbortController();
157
+ const timer = setTimeout(() => ctrl.abort(), TIMEOUT_MS);
158
+ try {
159
+ const res = await fetch(endpoint, {
160
+ method: "POST",
161
+ headers: { "Content-Type": "application/json", "X-Usage-Token": token },
162
+ body: JSON.stringify(payload),
163
+ signal: ctrl.signal,
164
+ });
165
+ if (!res.ok) {
166
+ // Unlike telemetry, this failure is reported: the person is standing there
167
+ // waiting to hear whether their message went. Swallowing it would leave
168
+ // them believing they had been heard.
169
+ process.stderr.write(`ERROR: the endpoint answered ${res.status}\n`);
170
+ process.exit(1);
171
+ }
172
+ process.stdout.write("feedback sent\n");
173
+ } catch (err) {
174
+ process.stderr.write(`ERROR: could not reach the endpoint (${err.name})\n`);
175
+ process.exit(1);
176
+ } finally {
177
+ clearTimeout(timer);
178
+ }
179
+ }
180
+
181
+ main();
@@ -82,7 +82,12 @@ fi
82
82
  WAIT="${WEBSITE_SYNC_WAIT:-45}"
83
83
  ELAPSED=0
84
84
  while [ "$ELAPSED" -lt "$WAIT" ]; do
85
- ROW="$(vercel ls --yes 2>/dev/null | grep -m1 'Production' || true)"
85
+ # `vercel ls` prints its table on STDERR, not stdout. Discarding stderr threw
86
+ # away the very rows this grep reads, so ROW was always empty and the check
87
+ # reported "no Ready production build" on every run - including the ones that
88
+ # deployed fine. A guard that cannot pass is worse than no guard: it trains
89
+ # the reader to ignore the one message meant to catch a real failure.
90
+ ROW="$(vercel ls --yes 2>&1 | grep -m1 'Production' || true)"
86
91
  case "$ROW" in
87
92
  *Ready*) echo "website: production build Ready"; exit 0 ;;
88
93
  *Error*) break ;;
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: multi-agent-feedback
3
+ language: en
4
+ description: "Send one message to the maintainer: a bug, an idea or a question. Only the text you type is sent - no logs, no repo names, no paths. Shows the payload and asks before sending. Use when a run went wrong and the maintainer should know."
5
+ user-invocable: true
6
+ argument-hint: "\"<message>\" [bug | idea | question] - with no argument, you are asked for the text"
7
+ ---
8
+
9
+ # multi-agent feedback - tell the maintainer
10
+
11
+ **Input**: $ARGUMENTS
12
+
13
+ One message to the maintainer's admin panel. It exists because the alternative is a problem nobody hears about: a run goes wrong, the person works around it, and the defect is still there a month later.
14
+
15
+ ## What is sent
16
+
17
+ Only the text you type, plus `kind` (bug / idea / question), the installed pipeline version, which host CLI, and the timestamp.
18
+
19
+ **No logs are attached, ever** - not the agent log, the diff, the repo name, the branch, or a file path. This package installs from a public registry, so an automatic log attachment would take a corporate user's internal identifiers off their machine into someone else's database. Paste the one line you think matters; a script cannot know which line that is.
20
+
21
+ ## Flow
22
+
23
+ 1. Take the message from `$ARGUMENTS`; with no argument, ask for the text and then the kind.
24
+ 2. Print the exact payload via the script's own dry run, so what is shown is what goes:
25
+ `node "$HOME/.copilot/scripts/feedback-send.mjs" --text "<message>" --kind <kind> --dry-run`
26
+ 3. **Confirm before sending.** Nothing leaves the machine before a yes; autopilot does not exempt this, because a message to a person is never fired unattended.
27
+ 4. Send the same command without `--dry-run`.
28
+ 5. Report the outcome plainly. A failure is surfaced, not swallowed - the person is waiting to hear whether their message went.
29
+
30
+ Auth reuses the usage ingest token, so nothing extra is onboarded. `usageLog.optOut` does not silence this: telemetry is passive collection, feedback is a deliberate act. The endpoint must be TLS; only loopback is exempt.
@@ -106,6 +106,8 @@ Utility Commands (dash form on Copilot, colon form on Claude Code):
106
106
  /multi-agent:review Review a PR or branch diff; no URL -> pick open GitHub/Bitbucket PRs
107
107
  /multi-agent:review-jira Grade a Jira issue's pipeline-readiness -> comment the gaps
108
108
  /multi-agent:review-issue Grade a GitHub issue's pipeline-readiness -> comment the gaps
109
+ /multi-agent:review-analysis [doc | page | KEY] Review a written analysis: gates first, then parallel model review; findings cite the rule
110
+ /multi-agent:feedback "msg" Tell the maintainer something broke; only your text is sent, shown before it goes
109
111
  /multi-agent:create-jira ["desc"] [figma-url] [swagger-url] Create a Jira Task/Bug/Story matching team conventions (asks type + preview + approval)
110
112
  /multi-agent:sync Sync ecosystem (Claude + Copilot + website)
111
113
  /multi-agent:setup Keychain tokens + Git identity + language onboarding
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: multi-agent-review-analysis
3
+ language: en
4
+ description: "Review a written analysis document instead of a diff: resolve it from a path, a Confluence page or a Jira issue, run the deterministic gates first, then a parallel model review. Findings cite the Locked rule they break. Never edits the document. Use when an analysis needs judging before development starts."
5
+ user-invocable: true
6
+ argument-hint: "[path | Confluence URL | pageId | JIRA-KEY] [--state <state.json>] - optional; with no argument, pick from recent analyses"
7
+ ---
8
+
9
+ # multi-agent review-analysis - analysis document review
10
+
11
+ **Input**: $ARGUMENTS
12
+
13
+ `multi-agent-review` judges a diff. This judges the document that diff was supposed to come from, before the code exists. No worktree, no branch, no commit, and the reviewed document is never edited in place.
14
+
15
+ ## Flow
16
+
17
+ Read `$HOME/.copilot/multi-agent-refs/analysis/review.md` and execute it:
18
+
19
+ 1. **Resolve** from a local path, a Confluence URL or `pageId`, or a Jira key. No argument -> pick from recent analyses in `~/Desktop/multiAgentAnalysis/` and each repo's `analysis/`.
20
+ 2. **Deterministic gates first**, output reported verbatim before any model reads the document:
21
+ `validate-analysis-doc.mjs <doc>`, and `build-references.mjs <state> --check <doc>` when a state JSON is available.
22
+ 3. **Parallel model review** against the rubric: buildability, evidence, spine, altitude, admitted gaps, contradiction.
23
+ 4. **Triage** into Blocker / Important / Suggestion.
24
+ 5. **Report** the profile it judged against and, explicitly, what was NOT checked.
25
+ 6. **Output** on request: chat (default), Confluence comment, Jira comment, or a `-review.md` beside the document.
26
+
27
+ Findings cite `Locked <n>` where one applies, so the author gets a rule and a fix rather than a preference. Anything with no rule behind it is marked as judgement.
28
+
29
+ ## What it never does
30
+
31
+ Edits the reviewed document (that is `multi-agent-analysis-resolve`), touches a Jira description or a Confluence page body, chains into a dev run, branches, or commits.
@@ -31,7 +31,7 @@ Run all steps automatically:
31
31
 
32
32
  ```
33
33
  Step 1: DETECT Compare timestamps, find stale targets
34
- Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 51 sub-command skills)
34
+ Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 53 sub-command skills)
35
35
  Step 2b: CODEX Claude Code -> Codex CLI (1 router skill + 51 specs as refs + 8 agent TOML)
36
36
  Step 3: REPO Claude Code -> pipeline repo (genericized, personal data scrub)
37
37
  Step 3d: DEV-TOOLKIT Companion MCP server -> detect movement, ship gates, commit + publish
@@ -98,7 +98,7 @@ If nothing is stale -> report "All targets up to date" and stop.
98
98
  ## Codex Sync (Step 2b)
99
99
 
100
100
  This step does **not** hand-copy files. The Codex tree is a *transform* of the Claude
101
- tree, not a mirror: the 51 sub-command specs become reference files (Codex silently
101
+ tree, not a mirror: the 53 sub-command specs become reference files (Codex silently
102
102
  truncates its skills block - see `cross-cli-contract.md` 2.6), every reference to a
103
103
  CLI-owned tree is retargeted (`agents/<persona>.md` becomes `.toml`, the dispatcher
104
104
  becomes the router skill), the 8 personas are regenerated as TOML with a model +
@@ -224,15 +224,18 @@ When invoked with the `release` argument:
224
224
  |-------------|-------------|
225
225
  | `~/.claude/commands/multi-agent/{cmd}.md` | `~/.copilot/skills/multi-agent-{cmd}/SKILL.md` |
226
226
 
227
- **51 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
227
+ **53 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
228
228
 
229
229
  ```
230
- analysis, analysis-resolve, autopilot, build-optimize, channels, complaint-analysis, create-jira, design-check, dev,
231
- dev-autopilot, dev-local, dev-local-autopilot, diff-explain, forget, garbage-collect,
232
- help, ios-coding-standard, issue, jira, kill, language, local,
233
- local-autopilot, log, manual-test, prune-logs, prune-prompts, purge, refactor, resume, review, review-issue, review-jira,
234
- routines, save, scan, search, setup, resume-local, stack, status, store-ready, sync, test, test-accessibility,
235
- test-dark-mode, test-dynamic-type, test-screenshots, testflight-validation, uninstall, update
230
+ analysis, analysis-resolve, autopilot, build-optimize, channels,
231
+ complaint-analysis, create-jira, design-check, dev, dev-autopilot, dev-local,
232
+ dev-local-autopilot, diff-explain, feedback, forget, garbage-collect, help,
233
+ ios-coding-standard, issue, jira, kill, language, local, local-autopilot,
234
+ log, manual-test, prune-logs, prune-prompts, purge, refactor, resume,
235
+ resume-local, review, review-analysis, review-issue, review-jira, routines,
236
+ save, scan, search, setup, stack, status, store-ready, sync, test,
237
+ test-accessibility, test-dark-mode, test-dynamic-type, test-screenshots,
238
+ testflight-validation, uninstall, update
236
239
  ```
237
240
 
238
241
  **NOT synced**: `refs/*` - Lazy-load references, Claude Code specific