@mmerterden/multi-agent-pipeline 16.1.1 → 16.1.3

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
@@ -16,6 +16,34 @@ Internal file-layout changes that don't affect the slash-command surface are sti
16
16
 
17
17
  ## [Unreleased]
18
18
 
19
+ ## [16.1.3] - 2026-08-23
20
+
21
+ A dead-code and stale-name sweep. No dead symbols: every function and constant added this week is called from somewhere. Five stale names and one lie.
22
+
23
+ ### Fixed
24
+
25
+ - **The uninstall preview described the wrong MCP entry, and claimed to remove one it now keeps.** The dry-run text named `dev-toolkit` - the pre-v15.12.0 name - and listed it as removed, while a current install registers `multi-agent-toolkit` and 16.1.0 made that one survive. The preview is the last thing a user reads before confirming a destructive action, so being wrong there is worse than being wrong in a comment. Both host lines now say which entry goes and which is kept, and that `lib/` keeps the credential reader.
26
+ - `refactor`'s research ref was still `dev-toolkit-research.md`, two releases after the server was renamed. Renamed to `toolkit-research.md` with both SKILL trees updated. The file was never dangling - just carrying a name that stopped being true.
27
+ - `docs/architecture.md` listed `dev-toolkit-mcp` as a sync target; the repo is `multi-agent-toolkit-mcp`. The plugins repo README and two site comments named the old server too.
28
+ - The MCP registration header still said "80 tools"; it serves 83.
29
+
30
+ ### Added
31
+
32
+ - **Both READMEs and `docs/features.md` describe what 16.1.0 actually shipped.** They had been checked for stale `--dev` references and found clean, which is not the same as being current: the release's headline capability - the install being usable in an ordinary session - appeared in none of them. Now it does, in English and Turkish, including the part that constrains it: reads are ordinary work, writes route through the pipeline commands that carry the rules making them safe.
33
+
34
+ ## [16.1.2] - 2026-08-23
35
+
36
+ The rule reached all three hosts in 16.1.1. It only WORKED on one.
37
+
38
+ ### Fixed
39
+
40
+ - **Rules were installed with a byte copy, so every path in them dangled on two hosts.** Each CLI keeps its trees under its own root, and both installers carry a path-rewrite table that names `rules` explicitly - but `installRules` (Copilot) and `installTree` (Codex) used a plain `copyDir`, so the rewrite never ran on that tree. Result: all 13 rules told a Copilot or Codex session to run `~/.claude/lib/credential-store.sh`, a tree those installs never create. This is the same dangling-path class the Copilot rewrite was written to eliminate for skills; rules were named in the doctrine and left out of the code. It bites hardest on the one rule whose entire job is resolving that path. Both installers route rules through `copyTreeRewritten` now: `~/.copilot/lib/...` on Copilot, `~/.codex/lib/...` on Codex, unchanged on Claude Code. Twelve pre-existing rules were fixed along with the new one.
41
+ - `outside-the-pipeline.md` says what to do when the refs tree is absent. Copilot installs no `multi-agent-refs/` by design - the doctrine routes those references to `~/.claude` when Claude Code shares the machine - so a Copilot-only install was being sent to a file that is not there with no explanation. The rule now states that the summary it carries IS the contract in that case.
42
+
43
+ ### Changed
44
+
45
+ - `smoke-context-budget.sh` asserts both installers put rules through the rewriter. Verified by reverting the Copilot fix and watching it go red. Shipping a rule to a host is not the same as shipping a rule that works there, and only the second one is worth the bytes it costs every session.
46
+
19
47
  ## [16.1.1] - 2026-08-23
20
48
 
21
49
  Found by reviewing 16.1.0 after it shipped, and by the `/mcp` reconnect confirming the fix worked.
package/README.md CHANGED
@@ -133,6 +133,16 @@ says so.
133
133
 
134
134
  The **secret scan** runs as a `PreToolUse` hook on Claude Code (hard-blocks a commit on a hit) and as a pre-push check elsewhere.
135
135
 
136
+ ## Outside a pipeline run
137
+
138
+ Installing the pipeline is not only useful when you run it. Open an ordinary session and the same three things are available, announced by `rules/outside-the-pipeline.md` which loads with every conversation:
139
+
140
+ - **Services you already onboarded.** The token `setup` mapped is readable now - resolve the logical name through `credential-store.sh` and fetch the issue, the page, the log. **Reads are ordinary work; writes are not.** Posting a Jira comment, editing an issue or opening a PR goes through the pipeline commands, because the rules that make those safe (never auto-close, `Ref:` not `Closes:`, humanizer on outward prose) live there.
141
+ - **The stack skills `/multi-agent:stack` enabled for the repo.** Each toolkit's own `index` skill routes; the pipeline keeps no copy of that table.
142
+ - **The `multi-agent-toolkit` MCP.** 83 tools for a running app - screen state, crash logs, design comparison, store pre-submission.
143
+
144
+ Uninstall preserves this layer: the tokens, the reader that opens them, the mapping that names them, and the MCP registration. Removing the pipeline should not cost you the credentials you onboarded through it.
145
+
136
146
  ## Platform support
137
147
 
138
148
  Runs on **macOS**, **Linux**, and **Windows** (Git Bash / WSL). Shell and credential access go through a platform-agnostic layer - the keychain resolves automatically to **macOS Keychain**, **Linux libsecret** (`secret-tool`), or **Windows Credential Manager**, and scripts fall back between BSD and GNU tool variants. Node.js 20.11+ (tested on 20 and 22).
package/README.tr.md CHANGED
@@ -133,6 +133,16 @@ triage notu bunu belirtir.
133
133
 
134
134
  **Secret scan**, Claude Code'da bir `PreToolUse` hook'u olarak (bulgu halinde commit'i sert-engeller) ve diğer yerlerde bir pre-push kontrolü olarak çalışır.
135
135
 
136
+ ## Pipeline koşusu dışında
137
+
138
+ Pipeline'ı kurmak yalnız onu çalıştırdığında işe yaramıyor. Sıradan bir oturum açtığında aynı üç şey elinin altında; her sohbette yüklenen `rules/outside-the-pipeline.md` bunları duyuruyor:
139
+
140
+ - **Zaten onboard ettiğin servisler.** `setup`'ın eşlediği token okunabilir durumda - mantıksal adı `credential-store.sh` ile çöz, issue'yu, sayfayı, logu getir. **Okuma sıradan iş, yazma değil.** Jira yorumu, issue düzenleme ve PR açma pipeline komutlarından geçer, çünkü onları güvenli kılan kurallar (issue asla otomatik kapanmaz, `Closes:` değil `Ref:`, dışa dönük metinde humanizer) orada yaşıyor.
141
+ - **`/multi-agent:stack`'in bu repo için açtığı stack skilleri.** Yönlendirmeyi her toolkit'in kendi `index` skill'i yapar; pipeline o tablonun kopyasını tutmaz.
142
+ - **`multi-agent-toolkit` MCP.** Çalışan uygulama için 83 araç - ekran durumu, crash logu, tasarım karşılaştırma, store ön-kontrolü.
143
+
144
+ Uninstall bu katmanı korur: token'lar, onları açan okuyucu, adlarını tutan eşleme ve MCP kaydı. Pipeline'ı kaldırmak, onun üzerinden onboard ettiğin credential'ları kaybetmek anlamına gelmemeli.
145
+
136
146
  ## Platform desteği
137
147
 
138
148
  **macOS**, **Linux** ve **Windows** (Git Bash / WSL) üzerinde çalışır. Shell ve credential erişimi platform-agnostik bir katmandan geçer - keychain otomatik olarak **macOS Keychain**, **Linux libsecret** (`secret-tool`) veya **Windows Credential Manager**'a çözülür, ve script'ler BSD ile GNU araç varyantları arasında fallback yapar. Node.js 20.11+ (20 ve 22'de test edildi).
@@ -164,7 +164,7 @@ User Input → Phase 0 (Init)
164
164
 
165
165
  `/multi-agent:sync` actually walks **five** targets, not the three shown in earlier
166
166
  revisions of this diagram - Codex CLI and the two independently-shipped repos
167
- (`multi-agent-plugins`, `dev-toolkit-mcp`) are real sync targets too:
167
+ (`multi-agent-plugins`, `multi-agent-toolkit-mcp`) are real sync targets too:
168
168
 
169
169
  ```mermaid
170
170
  graph TD
package/docs/features.md CHANGED
@@ -30,6 +30,16 @@ Each phase reads its own spec file under `pipeline/multi-agent-refs/phases/phase
30
30
 
31
31
  Depth is not a flag. `/multi-agent` and `/multi-agent:local` ask Full or Short at Phase 0 Step 7.5, recommending from the detected `taskType`; Short strips to Init → Dev(Opus self-contained) → Review → Test → Commit → Report. Autopilot never asks and always runs Full - "fast plus unattended" was removed in v16.0.0, because something has to choose when nobody is asked and unattended is the worst place to drop analysis and planning.
32
32
 
33
+ ### Outside a Pipeline Run
34
+
35
+ The install is not only useful while `/multi-agent` is running. `rules/outside-the-pipeline.md` loads with every session and announces three things a plain conversation would otherwise not know it had:
36
+
37
+ - **Onboarded service credentials.** Resolve the logical name through `credential-store.sh` and read the issue, page or log. Writes route through the pipeline commands, which carry the rules that make them safe - issues are never auto-closed, PR bodies use `Ref:`, outward prose goes through the humanizer.
38
+ - **The stack skills enabled for this repo.** Each toolkit's own `index` skill routes. The pipeline reads the effective `enabledPlugins` rather than keeping a stack table, so a seventh toolkit needs no code change.
39
+ - **The `multi-agent-toolkit` MCP.** 83 tools for a running app.
40
+
41
+ Uninstall preserves the whole layer - tokens, the reader that opens them, the mapping that names them, the MCP registration. It is 1.5 kB of always-loaded text; the detail lives in a ref that loads on demand, and a gate keeps both under a ceiling because every byte there is paid by every session.
42
+
33
43
  ### Stack Auto-Detection
34
44
 
35
45
  | Platform | Detection | Guide Loaded |
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Codex got MCP registration when its installer was written; Copilot never did, and
7
7
  * neither did Claude Code. The result was a host that carried the full pipeline skill
8
- * set and could not call a single one of the 80 dev-toolkit tools those skills depend
8
+ * set and could not call a single one of the 83 toolkit tools those skills depend
9
9
  * on - `design-check`, every `ios_*` / `android_*` simulator call, the archive audits.
10
10
  * Nothing failed at install time, and the skills only fail when a run actually reaches
11
11
  * for a tool.
package/install/codex.mjs CHANGED
@@ -493,6 +493,14 @@ function installScripts(pipelineSrc, dest, useSymlinks) {
493
493
  * Copy a pipeline tree verbatim (lib / schemas). These are executed, not read
494
494
  * as prose, and they resolve their own paths at runtime.
495
495
  */
496
+ // Trees whose text references `$HOME/.claude/...` and therefore have to be
497
+ // retargeted on the way in. The rewrite table already carries rules -> .codex
498
+ // rules, but `rules` was installed with a byte copy, so every rule naming
499
+ // `~/.claude/lib/credential-store.sh` pointed at a tree a Codex-only install
500
+ // never creates. `lib` and `schemas` are data the pipeline reads by absolute
501
+ // path from the caller's side, so they stay byte-identical.
502
+ const REWRITTEN_TREES = new Set(["rules"]);
503
+
496
504
  function installTree(name, pipelineSrc, dest, useSymlinks) {
497
505
  const src = join(pipelineSrc, name);
498
506
  if (!existsSync(src)) return;
@@ -501,6 +509,11 @@ function installTree(name, pipelineSrc, dest, useSymlinks) {
501
509
  ensureDir(dest);
502
510
  }
503
511
  wipeDir(dest);
512
+ if (!useSymlinks && REWRITTEN_TREES.has(name)) {
513
+ const n = copyTreeRewritten(src, dest);
514
+ console.log(` -> ${n} ${name} file(s) copied to ${dest} (paths retargeted)`);
515
+ return;
516
+ }
504
517
  copyDir(src, dest, { useSymlinks });
505
518
  console.log(` -> ${countFiles(src)} ${name} file(s) copied to ${dest}`);
506
519
  }
@@ -283,8 +283,20 @@ function installRules(pipelineSrc, dest, useSymlinks) {
283
283
  if (!existsSync(rulesSrc)) return;
284
284
  if (!useSymlinks) ensureRealDir(dest);
285
285
  wipeDir(dest);
286
- copyDir(rulesSrc, dest, { useSymlinks });
287
- console.log(` -> ${countFiles(rulesSrc)} files copied to ${dest}`);
286
+ if (useSymlinks) {
287
+ copyDir(rulesSrc, dest, { useSymlinks });
288
+ console.log(` -> ${countFiles(rulesSrc)} files linked to ${dest}`);
289
+ return;
290
+ }
291
+ // Rewritten, not copied. COPILOT_PATH_REWRITES lists `rules` among the trees
292
+ // Copilot owns, but this function used plain copyDir - so every rule shipped
293
+ // here naming `~/.claude/lib/credential-store.sh` pointed at a tree a
294
+ // Copilot-only install never creates. The same dangling-path class the
295
+ // rewrite was introduced to kill for skills, still live in rules because
296
+ // rules never went through it. It matters most for the one rule whose whole
297
+ // job is resolving that path.
298
+ const n = copyTreeRewritten(rulesSrc, dest);
299
+ console.log(` -> ${n} files copied to ${dest} (paths retargeted)`);
288
300
  }
289
301
 
290
302
  function installSkills(opts) {
@@ -379,7 +391,8 @@ function installSkills(opts) {
379
391
  let prevDelivered = null;
380
392
  try {
381
393
  const parsed = JSON.parse(readFileSync(join(dest, EXTERNAL_SKILLS_MANIFEST), "utf-8"));
382
- if (Array.isArray(parsed)) prevDelivered = new Set(parsed.filter((n) => typeof n === "string"));
394
+ if (Array.isArray(parsed))
395
+ prevDelivered = new Set(parsed.filter((n) => typeof n === "string"));
383
396
  } catch {
384
397
  prevDelivered = null;
385
398
  }
@@ -421,7 +434,9 @@ function installSkills(opts) {
421
434
  }
422
435
  }
423
436
  writeExternalSkillsManifest(dest, keep);
424
- console.log(` -> stack filter (${selectionSource}): ${keep.length} kept, ${skipped.length} skipped`);
437
+ console.log(
438
+ ` -> stack filter (${selectionSource}): ${keep.length} kept, ${skipped.length} skipped`,
439
+ );
425
440
  if (keptForeign > 0) {
426
441
  console.log(
427
442
  ` note: ${keptForeign} skipped-stack dir(s) kept - not delivered by this pipeline (no manifest entry, differs from catalog)`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "16.1.1",
3
+ "version": "16.1.3",
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",
@@ -112,7 +112,7 @@ Procedure:
112
112
 
113
113
  The pipeline's hands on devices and browsers are MCP tools served by a companion repo (`multi-agent-toolkit-mcp`): Phase 5 test, `manual-test`, `design-check` and `apple-archive-compliance` all call them, and several pipeline skills declare a minimum toolkit version (see `cross-cli-contract.md`). That repo therefore has to track the MCP field, not just its own README. This step researches what current practice is and audits the toolkit against it.
114
114
 
115
- Full procedure - resolution (configuration first, never a hardcoded path; skip when nothing resolves or `enabled` is false), the 5 research axes, the audit command block, and the band-E output table + rules - lives in `$HOME/.claude/multi-agent-refs/refactor/dev-toolkit-research.md`. Read it before running this step.
115
+ Full procedure - resolution (configuration first, never a hardcoded path; skip when nothing resolves or `enabled` is false), the 5 research axes, the audit command block, and the band-E output table + rules - lives in `$HOME/.claude/multi-agent-refs/refactor/toolkit-research.md`. Read it before running this step.
116
116
 
117
117
  ## Step 0d: RUN-ERRORS - what the pipeline actually failed on
118
118
 
@@ -3,7 +3,8 @@
3
3
  `/multi-agent` is not the only way to use what the install set up. Reach for
4
4
  these when the work calls for it - not eagerly, and not by starting an 8-phase
5
5
  run to read one ticket. Detail, commands and the safety contract:
6
- `$HOME/.claude/multi-agent-refs/outside-the-pipeline.md`.
6
+ `$HOME/.claude/multi-agent-refs/outside-the-pipeline.md` - absent on a host that
7
+ installs no refs tree, in which case the summary below is the contract.
7
8
 
8
9
  **Services.** Tokens onboarded by `/multi-agent:setup` are readable now. Logical
9
10
  name in `prefs.global.keychainMapping`, value via
@@ -277,7 +277,8 @@ function removeGeneratedCodexAgents(agentsDir) {
277
277
  }
278
278
 
279
279
  /**
280
- * Hand the dev-toolkit MCP registration back to the host CLI that owns it.
280
+ * Hand the RETIRED MCP registration back to the host CLI that owns it. The
281
+ * current one (multi-agent-toolkit) is preserved - see MCP_PRESERVED below.
281
282
  *
282
283
  * Best-effort: a missing binary or an already-absent entry is not an uninstall
283
284
  * failure. Never edits the host's config file directly - Codex keeps marketplace
@@ -699,7 +700,7 @@ export async function main() {
699
700
  console.log(" Targets:");
700
701
  if (forClaude)
701
702
  console.log(
702
- " - Claude Code (~/.claude/{commands/multi-agent, scripts, multi-agent-refs, schemas, lib} + pipeline skills + pipeline agent files + user-scope dev-toolkit MCP entry)",
703
+ " - Claude Code (~/.claude/{commands/multi-agent, scripts, multi-agent-refs, schemas, lib except the credential reader} + pipeline skills + pipeline agent files + the retired dev-toolkit MCP entry; the multi-agent-toolkit entry is KEPT)",
703
704
  );
704
705
  if (forCopilot)
705
706
  console.log(
@@ -717,7 +718,7 @@ export async function main() {
717
718
  );
718
719
  if (forCodex)
719
720
  console.log(
720
- " - Codex CLI (~/.codex: skills/multi-agent, multi-agent-refs, agents/*.toml, prompts/multi-agent.md, scripts, lib, schemas, rules, AGENTS.md block, dev-toolkit MCP entry)",
721
+ " - Codex CLI (~/.codex: skills/multi-agent, multi-agent-refs, agents/*.toml, prompts/multi-agent.md, scripts, lib except the credential reader, schemas, rules, AGENTS.md block, the retired dev-toolkit MCP entry; multi-agent-toolkit is KEPT)",
721
722
  );
722
723
  console.log("");
723
724
  if (allData) {
@@ -114,7 +114,7 @@ Procedure:
114
114
 
115
115
  The pipeline's hands on devices and browsers are MCP tools served by a companion repo (`multi-agent-toolkit-mcp`): Phase 5 test, `manual-test`, `design-check` and `apple-archive-compliance` all call them, and several pipeline skills declare a minimum toolkit version (see `cross-cli-contract.md`). That repo therefore has to track the MCP field, not just its own README. This step researches what current practice is and audits the toolkit against it.
116
116
 
117
- Full procedure - resolution (configuration first, never a hardcoded path; skip when nothing resolves or `enabled` is false), the 5 research axes, the audit command block, and the band-E output table + rules - lives in `$HOME/.claude/multi-agent-refs/refactor/dev-toolkit-research.md`. Read it before running this step.
117
+ Full procedure - resolution (configuration first, never a hardcoded path; skip when nothing resolves or `enabled` is false), the 5 research axes, the audit command block, and the band-E output table + rules - lives in `$HOME/.claude/multi-agent-refs/refactor/toolkit-research.md`. Read it before running this step.
118
118
 
119
119
  ## Step 0d: RUN-ERRORS - what the pipeline actually failed on
120
120