@mmerterden/multi-agent-pipeline 20.3.1 → 20.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/docs/ecosystem.md +2 -2
  3. package/docs/facts.json +1 -1
  4. package/install/claude.mjs +35 -0
  5. package/manifest.json +40 -39
  6. package/package.json +1 -1
  7. package/pipeline/commands/figma-to-swiftui.md +6 -4
  8. package/pipeline/commands/multi-agent/jira/SKILL.md +2 -2
  9. package/pipeline/commands/multi-agent/refactor/SKILL.md +1 -1
  10. package/pipeline/commands/multi-agent/review/SKILL.md +1 -1
  11. package/pipeline/commands/multi-agent/setup/SKILL.md +2 -2
  12. package/pipeline/commands/multi-agent/stack/SKILL.md +2 -4
  13. package/pipeline/commands/multi-agent/sync/SKILL.md +2 -2
  14. package/pipeline/commands/multi-agent/update/SKILL.md +3 -10
  15. package/pipeline/multi-agent-refs/channels/pr.md +2 -2
  16. package/pipeline/multi-agent-refs/features/doctor.md +2 -1
  17. package/pipeline/multi-agent-refs/features/prior-fix-detection.md +1 -1
  18. package/pipeline/multi-agent-refs/generate-issue.md +9 -9
  19. package/pipeline/multi-agent-refs/outside-the-pipeline.md +2 -2
  20. package/pipeline/multi-agent-refs/phases/phase-0-init.md +1 -1
  21. package/pipeline/multi-agent-refs/phases/phase-2-dev.md +2 -1
  22. package/pipeline/multi-agent-refs/phases/phase-4-commit.md +4 -4
  23. package/pipeline/multi-agent-refs/setup/repo-discovery.md +2 -2
  24. package/pipeline/schemas/prefs.schema.json +1 -1
  25. package/pipeline/scripts/capture-resume.sh +51 -37
  26. package/pipeline/scripts/check-derived-drift.mjs +1 -1
  27. package/pipeline/scripts/doctor.mjs +21 -0
  28. package/pipeline/scripts/plugin-refresh.sh +92 -0
  29. package/pipeline/scripts/usage-report.mjs +4 -4
  30. package/pipeline/skills/.skill-manifest.json +7 -7
  31. package/pipeline/skills/shared/core/multi-agent/SKILL.md +6 -4
  32. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +2 -2
  33. package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +2 -2
  34. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +1 -1
  35. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +2 -4
  36. package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +1 -1
  37. package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-artifact.py +1 -1
package/CHANGELOG.md CHANGED
@@ -16,6 +16,19 @@ Internal file-layout changes that don't affect the slash-command surface are sti
16
16
 
17
17
  ## [Unreleased]
18
18
 
19
+ ## [20.4.0] - 2026-09-25
20
+
21
+ ### Changed
22
+
23
+ - **Stack plugins are actually updated.** `/multi-agent:update`, setup and `/multi-agent:stack` call the new `plugin-refresh.sh`, which uses `claude plugin marketplace add|update` and then `claude plugin update` for every installed `@multi-agent-plugins` plugin in its own scope (project installs from inside their project). The previous `claude marketplace ...` form is not a CLI command, and its errors were discarded; the script passes the CLI's errors through and exits non-zero on a failed step.
24
+ - **Tokens stay off argv in shipped curl examples.** Authorization and X-Figma-Token headers are piped from `printf` (a shell builtin) into `curl -H @-`, which keeps the URL on argv for the unattended host allowlist; `-u user:token` pairs go through `--config <(printf ...)`. `smoke-secret-off-argv.sh` now scans for the argv form.
25
+ - **Issue and ticket text never lands inside double quotes.** Commit messages, PR titles and issue bodies filled from issue text are written to a file and passed with `-F` / `--body-file` (or a quoted heredoc outside the phase docs); `smoke-untrusted-in-quotes.sh` guards it. The reviewer lookup in Phase 4 passes the project name to jq with `--arg`.
26
+
27
+ ### Fixed
28
+
29
+ - The SessionStart banner counted the `artifacts/` backup that `gc-abandoned` keeps of an abandoned run as a live run, read a state that records `phase` instead of `currentPhase` as Phase `?`, named the newest run as the oldest, missed the Phase 5 channel pause, and ignored `outputLanguage`.
30
+ - The installer collapses a hook registered twice on the same matcher to one registration, and `/multi-agent:doctor` reports a duplicate under `hook-coverage`.
31
+
19
32
  ## [20.3.1] - 2026-09-25
20
33
 
21
34
  ### Fixed
package/docs/ecosystem.md CHANGED
@@ -128,7 +128,7 @@ graph TD
128
128
  BUMP -->|yes| PATCH["bump that plugin's<br/>patch version"]
129
129
  BUMP -->|no| SKIP["idempotent no-op"]
130
130
 
131
- PATCH --> CONSUMER["/multi-agent:update<br/>→ claude marketplace update multi-agent-plugins"]
131
+ PATCH --> CONSUMER["/multi-agent:update<br/>→ plugin marketplace update + plugin update"]
132
132
 
133
133
  style EXT fill:#ffd,stroke:#333
134
134
  ```
@@ -147,7 +147,7 @@ change.
147
147
  **Consumption is pull, not push.** A consumer repo enables a stack plugin once
148
148
  (`/multi-agent:stack ios`, writing the enabled-plugins list into
149
149
  `.claude/settings.json`) and picks up new plugin versions only when it runs
150
- `/multi-agent:update`, which calls `claude marketplace update multi-agent-plugins`.
150
+ `/multi-agent:update`, which refreshes the catalog with `claude plugin marketplace update multi-agent-plugins` and then runs `claude plugin update` for each installed plugin (`pipeline/scripts/plugin-refresh.sh`).
151
151
  Publishing a new plugin version does not retroactively change anything already
152
152
  running in a consumer's session.
153
153
 
package/docs/facts.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$comment": "Generated by pipeline/scripts/gen-facts.mjs. Do not hand-edit: the site reads this, and a number edited here instead of at its source is the drift this file removes.",
3
3
  "generatedAt": "2026-09-25",
4
- "version": "20.3.1",
4
+ "version": "20.4.0",
5
5
  "phaseSchema": 2,
6
6
  "phases": [
7
7
  {
@@ -685,6 +685,39 @@ function ensurePreferences(prefsPath, pipelineSrc) {
685
685
  }
686
686
  }
687
687
 
688
+ // The installer adds a hook only when it is absent, and a hand-merged template
689
+ // or an older install can leave the same command registered twice on one
690
+ // matcher. Claude Code then runs it twice on every matching tool call. Keep the
691
+ // first occurrence of each (event, matcher, command) and drop groups left empty.
692
+ export function collapseDuplicateHooks(hooks) {
693
+ if (!hooks || typeof hooks !== "object") return false;
694
+ let changed = false;
695
+ for (const [event, groups] of Object.entries(hooks)) {
696
+ if (!Array.isArray(groups)) continue;
697
+ const seen = new Set();
698
+ const kept = [];
699
+ for (const group of groups) {
700
+ if (!group || !Array.isArray(group.hooks)) {
701
+ kept.push(group);
702
+ continue;
703
+ }
704
+ const before = group.hooks.length;
705
+ group.hooks = group.hooks.filter((h) => {
706
+ if (!h || typeof h.command !== "string") return true;
707
+ const key = `${group.matcher || ""}\u0000${h.command}`;
708
+ if (seen.has(key)) return false;
709
+ seen.add(key);
710
+ return true;
711
+ });
712
+ if (group.hooks.length !== before) changed = true;
713
+ if (group.hooks.length > 0) kept.push(group);
714
+ }
715
+ if (kept.length !== groups.length) changed = true;
716
+ hooks[event] = kept;
717
+ }
718
+ return changed;
719
+ }
720
+
688
721
  export function configureSettings(home) {
689
722
  console.log(" [Claude Code] Configuring hooks + context management...");
690
723
  const SETTINGS_PATH = join(home, ".claude", "settings.json");
@@ -789,6 +822,8 @@ export function configureSettings(home) {
789
822
  settingsChanged = true;
790
823
  }
791
824
 
825
+ if (collapseDuplicateHooks(settings.hooks)) settingsChanged = true;
826
+
792
827
  if (settingsChanged && isDryRun()) {
793
828
  console.log(` [dry-run] would update ${SETTINGS_PATH} (hooks + env)`);
794
829
  } else if (settingsChanged) {
package/manifest.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "20.3.1",
4
- "commit": "04abc89922765fe8de6d8d722f08d0396d01450f",
5
- "generatedAt": "2026-09-25T12:47:27.638Z",
3
+ "version": "20.4.0",
4
+ "commit": "47524b22c14c8b28503ea0707ac4b7d7dfa3718f",
5
+ "generatedAt": "2026-09-25T15:35:01.768Z",
6
6
  "algorithm": "sha256",
7
- "fileCount": 1216,
7
+ "fileCount": 1217,
8
8
  "files": {
9
- "CHANGELOG.md": "a6dc8c4862792667cc8d8adadfd6c9b41c9c2f3aea6d45e8d100fd7134a40460",
9
+ "CHANGELOG.md": "3d7abc887673cc1897d4eea75c3db3d4cd2a396a6cb8148c3e1e607e29c2984b",
10
10
  "LICENSE": "8d8c51aaf1e1538b180c69965fa038db71be86798cc3e26a143bebfefe16a43e",
11
11
  "README.md": "0613eebb0b38062bd94c44043595d1950b5c9b470874dd8e402c052fd20960cf",
12
12
  "README.tr.md": "0c6b5e6943d6c3d3bf3a7ed99c705fb9a78d15d7722e6252f58404d3f6d3524d",
@@ -31,9 +31,9 @@
31
31
  "docs/adr/README.md": "6ff58bc97dde4f1d94df60e4e221396a46906682b429ef275fd813cd288956e1",
32
32
  "docs/architecture.md": "fab80b1206fd8d1274f18d53a0bb3014709975256e927feaa457af45ed6955a7",
33
33
  "docs/best-practices.md": "f8b75b0d38b5896a6a852bb30a1edddeb24dab8b5b7b1d9313290e1241c72024",
34
- "docs/ecosystem.md": "cbd5f2e5609d7c80f87c03899d499d1a605b95bb53bf1f9bcdd74260051d56ba",
34
+ "docs/ecosystem.md": "e6c00f30e95b5e178f77bdfbefd686c8a4164f39c03865a89ab23465d1a37acf",
35
35
  "docs/engineering.md": "550528cd47c7d2c921729c68d0782a00ac8e77a4bdfec479f6749f9c3235d188",
36
- "docs/facts.json": "6b3d8527857739bf04a8e3bb7b533d81681ab87ae1c0e381052c1696ec5d1b50",
36
+ "docs/facts.json": "5b4dd591c0972a9021bb96761715555b63a2de819d4207439f32c27a3193f01c",
37
37
  "docs/features.md": "6c9f0efb00c683e6f611c440c87847b187f8b0eee59e9e812f3a241695bc2ae1",
38
38
  "docs/performance.md": "bbf2f3922c25dcba0c1a9e69ef420e3871a729af5b35009a49b48a5d3c5cd151",
39
39
  "docs/recovery-guide.md": "59a8f1b66b34cb9ff5507b3d54dac3b9915e184aa044d9c758d18cac818d510e",
@@ -51,7 +51,7 @@
51
51
  "install/_plugin-skills.mjs": "bf287053133f940df0ca434cfc5ee522fd27e80dc7f7e60ccc963ecaabee047a",
52
52
  "install/_telemetry.mjs": "5433d753f909beed2c8789272bba05e245482c472f83d3444f58000c4c9a634b",
53
53
  "install/_unattended-profile.mjs": "e1ed82bde35d19105ee12c2a551eb778912b0e5c93ab227fd15c993098d98de0",
54
- "install/claude.mjs": "24fa8407d7e88a40c4d3742d71346be73fdddef401690fb161592dd78a98a718",
54
+ "install/claude.mjs": "f98055b1a48850f773711189b275be9fc855ca53fdf6828369595a4fa89c82a7",
55
55
  "install/codex.mjs": "1eb8422a73617994ed80711946a4a49415f092ecacc50396eed047f899f5ea65",
56
56
  "install/copilot.mjs": "555e9e253fb9d3e20584dd3822575e40016fb5ded5cba52559f56f4fb61b0af7",
57
57
  "install/index.mjs": "9179e64ebab9eef27db614611a10df399a5c96757fff0faba7853fba3d5fbbdb",
@@ -61,7 +61,7 @@
61
61
  "install/templates/multi-agent-autopilot-awake.plist.template": "ddd25c76c56fcbb38a89de8e35637372d70ace993d6bc487a88ca9cfb702fe1f",
62
62
  "install/templates/multi-agent-autopilot.plist.template": "122c8a61cd927edd99375d6e3da40f1d42bcceed5b6641785c8b28bb930bc77e",
63
63
  "install/unattended-profile-legacy.json": "f52e86b998956f09ad306b1735a6c10b58580d7082d8a55665a4c6bb15c3aa1f",
64
- "package.json": "1218189167652e06d6fe4f738d8fc7cad168e2d82f76cd99495823728517a881",
64
+ "package.json": "ef6a78d030798ebfd4823be3c4b884ce9a7b24a04d1b1ea9e2671d6c8ef8ec3c",
65
65
  "pipeline/agents/android-architect.md": "baa5787b3a4c800dd065e27e05f44462927c9938c8bb676c80f18cb10e2b12c4",
66
66
  "pipeline/agents/backend-architect.md": "a83bd7f8b0a5289a1ef9a9b59d60fc759b8db260606ff2df427cf5ade5db8530",
67
67
  "pipeline/agents/bulk-reader.md": "0b9d415fab2c449d43329d759049af9401255d06b32d57a38c95e684837b19bf",
@@ -75,7 +75,7 @@
75
75
  "pipeline/claude-md-template.md": "bcc75808a54f32f11e688875cda23d3be3c1524511258e3d4ea5e7c0d2a92a92",
76
76
  "pipeline/commands/archive-guard.md": "16c5d3feaa91950402d62e66adc7fcf519a25d028a9303cb1e9c08af2765c04b",
77
77
  "pipeline/commands/deploy.md": "d20f95f3b1d2357c8c92f3047e8fe11eadf539ff13cab9b54f072f0ad697242a",
78
- "pipeline/commands/figma-to-swiftui.md": "9840ba4725149fa03484b32c3dec032e2554dd913c65e3f95cb0a9906860090f",
78
+ "pipeline/commands/figma-to-swiftui.md": "cb198d279d36c6c34648ab9834433d00f81c9d427934cc1641c0e09f1878b0a6",
79
79
  "pipeline/commands/multi-agent/SKILL.md": "974ee683523b29a6b9c426158c2a73d4f24c6521b934476a37b1d4b0df354b57",
80
80
  "pipeline/commands/multi-agent/analysis-jira/SKILL.md": "3b656d82f6d83599e34c871e66127caf3f8522eafd22c5527404c8f854e2e8f1",
81
81
  "pipeline/commands/multi-agent/analysis-resolve/SKILL.md": "3c712e86d4b2e80d1ba51811ea32c8d5fa11291ab62c6dae944f9c19ddfd9868",
@@ -98,7 +98,7 @@
98
98
  "pipeline/commands/multi-agent/help/SKILL.md": "1edef50940b29a9b0d391270347e52032de91ead07e5c0c02bf047ea382425ab",
99
99
  "pipeline/commands/multi-agent/ios-coding-standard/SKILL.md": "436d00f345601b6b3fac369af48cf3c73109022cc4218e8df0625a6c62f1ae70",
100
100
  "pipeline/commands/multi-agent/issue/SKILL.md": "9a7ca4c1cb107f91841922bfcc369d3ea5424772b1fe3e9855717e645954b16d",
101
- "pipeline/commands/multi-agent/jira/SKILL.md": "46f43c5f728bbdffd5223ff6b52b2086d7d4ca87127b784e75b7f1b83b5874de",
101
+ "pipeline/commands/multi-agent/jira/SKILL.md": "3e67461c2fd6e3dbf45340b6ee1e12bae30ebf596e476d620d1582378af75dd1",
102
102
  "pipeline/commands/multi-agent/kill/SKILL.md": "159815a8e221957199bc0a1b4f89171b30ebd560a71a4c94951c46e0274f59f7",
103
103
  "pipeline/commands/multi-agent/language/SKILL.md": "4b58b25bda9449a52df005f8d3417ace2f8b3a18d84524dc021a9561f1d16b9d",
104
104
  "pipeline/commands/multi-agent/log/SKILL.md": "033bafcf4c9b8d117a892f50a3039fd11d753b4db070ed14c50e8388613482fa",
@@ -107,13 +107,13 @@
107
107
  "pipeline/commands/multi-agent/prune-logs/SKILL.md": "a7b22228ec338623c386cfd3744092488eed6871c65b531bdb6a0eb8dc8c2e9b",
108
108
  "pipeline/commands/multi-agent/prune-prompts/SKILL.md": "1aefd2b737b34aaff18f3fd12090322c04dbc41c981200622d7989c9ad45e9c2",
109
109
  "pipeline/commands/multi-agent/purge/SKILL.md": "c881805f80d7db909bcf09f1a5c980ebaf0c31d9a8ee9cae4f729387ff4ca19d",
110
- "pipeline/commands/multi-agent/refactor/SKILL.md": "aa4bd7a2e6dd1689b78f5103d9265d41574678aaf23f1c6b9b3539cbaaf10c02",
110
+ "pipeline/commands/multi-agent/refactor/SKILL.md": "2b494c2390121a8b8ae3c056f56583661d5dbed79d8bd073eff40095981d540e",
111
111
  "pipeline/commands/multi-agent/research/SKILL.md": "aab85ea942291b0a68aec5896b0b3f79677684733859a4c4cbb77931c7dacf92",
112
112
  "pipeline/commands/multi-agent/resume/SKILL.md": "190a604ac1e87912ef2519f59199928d2329caa7a611bdc49fe237c43e885975",
113
113
  "pipeline/commands/multi-agent/review-analysis/SKILL.md": "735bc597def9779d5862cecf6a2b2542ac4d9573752aa3a46bca6b49f223f1e4",
114
114
  "pipeline/commands/multi-agent/review-issue/SKILL.md": "7ae7fe774c02114840cc21fb303f98c9a36bc2903f1db4cfc2cebe213ca70f1b",
115
115
  "pipeline/commands/multi-agent/review-jira/SKILL.md": "db8ecc7ec8c7040aac9c71dcf40dae194a76f146ab227833b909b45580b5347a",
116
- "pipeline/commands/multi-agent/review/SKILL.md": "700ad7b83c7cc464398626e98856024687006a343e3228412ee73697a1949453",
116
+ "pipeline/commands/multi-agent/review/SKILL.md": "82d87c534e65d721fbe156b7b43903ccd3eaf85c3a8d06145dd9e8295c969a2b",
117
117
  "pipeline/commands/multi-agent/route-off/SKILL.md": "aa8b677898b0efde1bd19c50383497da43a83b3b811e36f60695675d845c2de8",
118
118
  "pipeline/commands/multi-agent/route-on/SKILL.md": "3324430a81609719264a5118d6b4613a6af10e4a04c13a809ee367f1251e58f9",
119
119
  "pipeline/commands/multi-agent/route-status/SKILL.md": "00b1759c523b672c053bfb5f3c6af67ef0bd9b7ab473576017da22c6a73148ec",
@@ -124,12 +124,12 @@
124
124
  "pipeline/commands/multi-agent/search/SKILL.md": "231f0dd266907423cc45feeadc4170852dc6fd45239e0bee3ee4e08d4d0f5958",
125
125
  "pipeline/commands/multi-agent/security-review/SKILL.md": "dfc2fad484c81169912062391f7ad97500ef113d95741902e5e18e7dd60b6da1",
126
126
  "pipeline/commands/multi-agent/serve/SKILL.md": "88f6f0350cb0abcd2a4ed54c12f6cfb5bf4298909bff06891fede25888ae69ec",
127
- "pipeline/commands/multi-agent/setup/SKILL.md": "0daade88eeb2be3838622985aef8625fff0ec4b047baa1d2e4f92551e81f9461",
128
- "pipeline/commands/multi-agent/stack/SKILL.md": "509c8be87d93a4e209f1c8d68b2b1c74637f72801bccc8e17e51cad379ae73ed",
127
+ "pipeline/commands/multi-agent/setup/SKILL.md": "6bd501bb8ec23a45a53337e383e4ed077e0aeb939580935b92ae8bb708e2e264",
128
+ "pipeline/commands/multi-agent/stack/SKILL.md": "6d64e96b9a2d41d25ff077afa84300172cac9bf9dd78ec1d9fbbaf45df34f5dd",
129
129
  "pipeline/commands/multi-agent/status/SKILL.md": "a2ed316434aca49f692aafe11f95873822b9b955558a53f4f6a9667ee32a3659",
130
130
  "pipeline/commands/multi-agent/steer/SKILL.md": "07e738c228ba328f717f86e97e7af207df090b16433e28e613d430c3ff0aee3e",
131
131
  "pipeline/commands/multi-agent/store-ready/SKILL.md": "0fa95a4bb2c355b360bf0943e1d69f0319ded18d7af540f2a154f31101514558",
132
- "pipeline/commands/multi-agent/sync/SKILL.md": "eb9cdd62e2a8d34524839fc800e52b44065c488b799b2c236f898d61c9f35d13",
132
+ "pipeline/commands/multi-agent/sync/SKILL.md": "17049e9ef98613825b0c4d074655477f033df460c9b760728c661f6c843a7276",
133
133
  "pipeline/commands/multi-agent/test-accessibility/SKILL.md": "d62992541303a0776ca088d5f3d5475108fd3fba5e25af04efb3ea4bbbd1fe21",
134
134
  "pipeline/commands/multi-agent/test-dark-mode/SKILL.md": "6bfe158c94f76fc6f4d06454978d0c5cad6ec00645ab48c1d1cee15ad93ae095",
135
135
  "pipeline/commands/multi-agent/test-dynamic-type/SKILL.md": "c093fe1a78a4266ad4cf1e48b3cc233d9abd7e1c524d0b8e5db0c81d8b4d58fd",
@@ -137,7 +137,7 @@
137
137
  "pipeline/commands/multi-agent/test/SKILL.md": "5a67be2b1ec0321e79f8b7f35be53676e349e55a4f8ca09a07f0de89dadac8c4",
138
138
  "pipeline/commands/multi-agent/testflight-validation/SKILL.md": "38fa8d3d3c8340d025e100c53a70183cbad22665b7ddccbb6102c05986cce489",
139
139
  "pipeline/commands/multi-agent/uninstall/SKILL.md": "b2124820a6e10cdd72be71df2183aad4f8bd8988ec90248c88599c1514f7d9ab",
140
- "pipeline/commands/multi-agent/update/SKILL.md": "96208dac365e5ec94c818be19b8ee71f7bd8ffe8c16761e900d827c806886fac",
140
+ "pipeline/commands/multi-agent/update/SKILL.md": "63b896036401a37da80de26a53eb855b0dba368215ee96ab0f83ef22478f7d21",
141
141
  "pipeline/commands/sim-test.md": "17fcefc2030f0ab24b3ee59807dfc11264b34d7455138081996859b1fee8664e",
142
142
  "pipeline/contract/CHANGELOG.md": "33d5dd6b35d8498928f431729dbccc9aae2f42e3beb04da1bd52f682846b2c10",
143
143
  "pipeline/contract/README.md": "4a60faddcd31973302bab93bb3fab74da96024c79aaba3676c6ceeabc2088132",
@@ -238,7 +238,7 @@
238
238
  "pipeline/multi-agent-refs/channels/issue-comment.md": "19df6d8d6c23b5ea88687250dc10dd5fa35ba2b2e279efcb000e83622a0664f6",
239
239
  "pipeline/multi-agent-refs/channels/jira.md": "7969579dbc69c40743dc547163c5161af06205dece7327e33c9c4775bac96c14",
240
240
  "pipeline/multi-agent-refs/channels/pr-review-actions.md": "21bf53796ae4ecd59769f9944ad8c7d1cd3a5915b0956be99ec875b847b33c00",
241
- "pipeline/multi-agent-refs/channels/pr.md": "a6d5244a3bf5cf5f15d961a07972c9917db98c436f1a9cfdfe6c3c3dba7d5b69",
241
+ "pipeline/multi-agent-refs/channels/pr.md": "abe0101d4f2a7cb1ecd88c4260e9ae9e7d6dd65dd52afbf6c44c573c48d11f20",
242
242
  "pipeline/multi-agent-refs/channels/wiki.md": "ba52c5efaedc067dd8456fe9076af694d7e3dae9bda621f1df65c9159cd422da",
243
243
  "pipeline/multi-agent-refs/complaint-analysis-template.md": "dd5f12a8f56ee4dc177fa7bfba4ffe9ad021e5f1b9e661a49031f02dd6e37109",
244
244
  "pipeline/multi-agent-refs/component-dispatch.md": "f20ebaef98e2e48c3aa2c247ac10402ef5f433956ccb1481fc47585174871711",
@@ -255,7 +255,7 @@
255
255
  "pipeline/multi-agent-refs/features/cost-analysis.md": "42f1b90b41ef454f29ccfd3f93c959920f0e74cbca65e140695e9a30d6d90b87",
256
256
  "pipeline/multi-agent-refs/features/design-conformance.md": "8bcc1c9221f39ec8764c6aa20e59f968d6beb777f644c61adf7a38e35af1a9d5",
257
257
  "pipeline/multi-agent-refs/features/dev-critic.md": "08e01edef04b5ac216f8f43332126966d33da7b95625e47a8a6cd8ac105b263f",
258
- "pipeline/multi-agent-refs/features/doctor.md": "e809127f05ca107e3ed1f87a80cf078d8d9094af9c89506bfb592adc402e94df",
258
+ "pipeline/multi-agent-refs/features/doctor.md": "4e4ff5f4ec03b017f4d1b8e6a0cb64cd86fbde063aee72d7589875c90567b019",
259
259
  "pipeline/multi-agent-refs/features/external-context-injection.md": "fe0373f27c3e9aae660a55a3ba9a8163df329b4d95c727d6023b6b3afaf71d66",
260
260
  "pipeline/multi-agent-refs/features/jira-context.md": "7d14802ed9ad1747e1a06dec26f22ff9e8959e03c47d7a018af45b8274aea47c",
261
261
  "pipeline/multi-agent-refs/features/maturity-followup.md": "e663e5bcf0b3b4d4d2a67f4516dbb9fb12520dfbdedb47a9c5f57c13a9a0633e",
@@ -264,7 +264,7 @@
264
264
  "pipeline/multi-agent-refs/features/phone-api.md": "5e81290c85c4cb2cd83e3925b0fb502a19298ae3699aac351194f8ce3f21c791",
265
265
  "pipeline/multi-agent-refs/features/plan-critic.md": "d218c8599d893211480a412d46efdbba4aa48e3b18e8bb0ebfd66782f3b8ebc5",
266
266
  "pipeline/multi-agent-refs/features/plan-todos.md": "8780d80b4541daee2b05080759a0694ef7e6270abe9a4621deb92ec7bac94e8e",
267
- "pipeline/multi-agent-refs/features/prior-fix-detection.md": "f194c444f1685bb103e1aa16164ca6737ba9910b7c8f89874924da950838b074",
267
+ "pipeline/multi-agent-refs/features/prior-fix-detection.md": "9bd172fa116b0c334576ee3df2dc478810a7e282422410e045be74ac2299253d",
268
268
  "pipeline/multi-agent-refs/features/repo-map.md": "9102f95d5c819c3bce3dc992cc98c67657e83f1fbc77d2e9b3d16b040bfab9f6",
269
269
  "pipeline/multi-agent-refs/features/research.md": "776c9f3b644f8ff355108000b4a7381ff173e38811e8e2a73ef66e756d60c169",
270
270
  "pipeline/multi-agent-refs/features/review-decision.md": "4154539340df923e564a91d3d807145f3a94d5bd52872068af083fc5345f7010",
@@ -286,22 +286,22 @@
286
286
  "pipeline/multi-agent-refs/features/verify.md": "1a6db5e7239eac01e51100353013abd16bf785a7fce88b40139fca27f4166be4",
287
287
  "pipeline/multi-agent-refs/features/visual-evidence.md": "2b6aa2e4ff05c7a1fbe9e0fedfa4b28b9ad01c93a64f1ca6f6cd3e02293866aa",
288
288
  "pipeline/multi-agent-refs/features/worktree-finalize.md": "628f627b94927a9c4a5b0b261fed1f0ffa42d4155390d57b5e56566a26ed8193",
289
- "pipeline/multi-agent-refs/generate-issue.md": "8ef8909ab229cc597511972f6c6bc52be3d27b14ff3224bb97753a7080a4beaf",
289
+ "pipeline/multi-agent-refs/generate-issue.md": "61e762456d2748525fbbea0ee5f9dde863d75d3bb9bbece14a36f6e3c9e82b3d",
290
290
  "pipeline/multi-agent-refs/issue-jira-triad.md": "a12f4e3b75badf8a466e0c3531a5f0e12e44a1dd7799522fb03ff11068ce391d",
291
291
  "pipeline/multi-agent-refs/keychain.md": "8f775488ed846cc11470bfe5a4db1803f4145a16e12e8fa17a3f338380f096a7",
292
292
  "pipeline/multi-agent-refs/knowledge.md": "33f6a4cc0ced930d192f32e0f7b2adf785395562f9dedd82ce939306c3d7a0e5",
293
293
  "pipeline/multi-agent-refs/multi-repo-integration-build.md": "ff4ad08d382d1d31f5c4f3c382cb340058bbe5cb1cffbfef520500cad7b9c05c",
294
- "pipeline/multi-agent-refs/outside-the-pipeline.md": "edf98027fe6d8d22b25347cb8eaf0a4061d2273d7fddafa6c3cbd57998263adb",
294
+ "pipeline/multi-agent-refs/outside-the-pipeline.md": "84213bb29124da8ad74f62276217dce9909a6962a03a9e4b49390df529436b3e",
295
295
  "pipeline/multi-agent-refs/payload-contracts.md": "77b10f1d616c20b96c8f83185f9b507c9764fdc69eae1795bff9127ecbc6f37e",
296
296
  "pipeline/multi-agent-refs/phases.md": "730d598b27b8df4776adece9487f51e4835dbdb5a7d33c097e272f3360cbe844",
297
297
  "pipeline/multi-agent-refs/phases/log-format.md": "62d51e57cca8445ab40f3c0dc29615e4b5c8e4743286bf9ef0173610e81397aa",
298
298
  "pipeline/multi-agent-refs/phases/modes.md": "0733e20dce458c09f30343db9149fc93bc5a4c9531670b93952f223811dcb1aa",
299
299
  "pipeline/multi-agent-refs/phases/operations.md": "9506a26684abfff1e332d92c2321e840544fd4f049aff9f118731e198dabca94",
300
- "pipeline/multi-agent-refs/phases/phase-0-init.md": "6b1ebed3a75e0e1baf41c2406b20675aa4ac12e2c225634635ffb58f3bed700c",
300
+ "pipeline/multi-agent-refs/phases/phase-0-init.md": "3ec8a7f979818413c82418325e20ff8144a2505bfcdac61e3b8bfb2d8bcf0db8",
301
301
  "pipeline/multi-agent-refs/phases/phase-1-plan.md": "a83e43d6e41c986f76d6176c222af6f7a8d87d3c74f52a07de86cd52b70e42f0",
302
- "pipeline/multi-agent-refs/phases/phase-2-dev.md": "20dabe5696f8a847dfdb9d5083539416a30998a2091c3c33a83138929498d74b",
302
+ "pipeline/multi-agent-refs/phases/phase-2-dev.md": "a7d7ba4cf473da623a4301d1cf01eb334a387d5f40546f2b80970032e15569b6",
303
303
  "pipeline/multi-agent-refs/phases/phase-3-review.md": "98b910da84bb0b36527d6487a0634a5401b382ccea6672bf7e27abe7c0cf4c3b",
304
- "pipeline/multi-agent-refs/phases/phase-4-commit.md": "27ac1acee32f853629596df52048e99e26867a7562a6af82f956ec1103c3ca2b",
304
+ "pipeline/multi-agent-refs/phases/phase-4-commit.md": "b433f1a9147ce2bd6d0d944c643d2bd91f29c12488752c095c3468825f3ee6e5",
305
305
  "pipeline/multi-agent-refs/phases/phase-5-report.md": "5831563300bbabcfbae96f98c6f95bdbb664e345b853e57391224285532a09fa",
306
306
  "pipeline/multi-agent-refs/picker-contract.md": "6e4f77954aec80077da0df0b055894b125bad74bd1a2cd0b2e2adb1072f75637",
307
307
  "pipeline/multi-agent-refs/platform-parity.md": "43a3836efc359c6b7d30af38d66408d8d18661e72e5165b25bb8e15953e6feaf",
@@ -314,7 +314,7 @@
314
314
  "pipeline/multi-agent-refs/rules.md": "0b272d9ee2ba4a2fde28313f3084b8caa3d26f10e78d6099547a800e6c33534a",
315
315
  "pipeline/multi-agent-refs/setup/app-store-connect.md": "6208a8125212e3ef44faf61236c5dd8ec3e8f71817fa477e8cd92415906a0759",
316
316
  "pipeline/multi-agent-refs/setup/firebase.md": "a82031c67993762303a7ecd222e2574fbbf8d65dcc6b17e051a8dd53a9e31474",
317
- "pipeline/multi-agent-refs/setup/repo-discovery.md": "b3b325169e68b3c9f59832570d26cb3296cdfdfb6cad36f5de1c5b011a9b2876",
317
+ "pipeline/multi-agent-refs/setup/repo-discovery.md": "06944e7b7677d998b6d169fbf5bebcac08c0f5eab808f9f1f3e5b6b2dc6a1f55",
318
318
  "pipeline/multi-agent-refs/swiftui-guide.md": "3f86cb3e2161389da5a466793dae570d854e35354490f58249b5defbaccb1375",
319
319
  "pipeline/multi-agent-refs/threat-model.md": "3628881538b846f94decd78e389b34b473ba6f91b6e6dcf5c927d307ed264bea",
320
320
  "pipeline/multi-agent-refs/tracker-contract.md": "cd3568027a4ab3e6dbb5d5b860fc471717dae7896d3ac1f07944f5d8049b9a1c",
@@ -381,7 +381,7 @@
381
381
  "pipeline/schemas/plan-todos.schema.json": "f1dcf8df338b29bbc1d874addd3408c0841a5f869c0b6075efd9242e3e8552d6",
382
382
  "pipeline/schemas/planning-output.schema.json": "bc6eda32ecd435cf84d846078f9d38347f8f741f8a427cff15913dd6c380d4b8",
383
383
  "pipeline/schemas/pr-request.schema.json": "ae75c4856349d62834802b1189af516bb6fb3d36646831b7ff2fa61d938afcd0",
384
- "pipeline/schemas/prefs.schema.json": "929568889ec8ea8411e4b6fe2f3d72566ab359fad7e16c9efdfd2626f558271c",
384
+ "pipeline/schemas/prefs.schema.json": "c327827b65c01cec5c73fdde0b4ad553daf157fb7786c4d0e97a335cfc687282",
385
385
  "pipeline/schemas/research-output.schema.json": "54e3ba1b04fdc20fbaa84333b943a8ab95d1395c7b0e0aedc67929184cb49523",
386
386
  "pipeline/schemas/review-file-exclusions.json": "2e8c44b45d21d2c82fc95aa2bf76ad3fbf2d5c68180c7b2ebf89c4a926688d77",
387
387
  "pipeline/schemas/review-file-exclusions.schema.json": "d7310b4328ae14673f0971c9f823a697d3cafe054062a680ef0f020be1867ea3",
@@ -449,8 +449,8 @@
449
449
  "pipeline/scripts/bulk-read.sh": "f5f55e229b00b849a84e6b6015e3bba1f0cb59dba5fb011857d1ceaafe7ad614",
450
450
  "pipeline/scripts/capture-evidence.sh": "2f7657786e07c17c302b76d4ea6bafe391b65be3dd891901b78019af3a7e38e1",
451
451
  "pipeline/scripts/capture-flush.sh": "291da92a3a708bf2e8e0884d1d6e0a676da83650ee723f7a499a6549e6cd2adc",
452
- "pipeline/scripts/capture-resume.sh": "782a7b6969cbf9c0cc8ed119643382234eb24b32eb934eb079592c6923168d77",
453
- "pipeline/scripts/check-derived-drift.mjs": "a86b1563e7a1f9780a91d2bb1c07d33e207b980a058ec80e08e5a28bbfc61fd4",
452
+ "pipeline/scripts/capture-resume.sh": "4934ff7961e2b8eabcd154ca06dd53c1d4aab03986a39dff287b8c16f5cea7ee",
453
+ "pipeline/scripts/check-derived-drift.mjs": "6716f1354b5b17d0314e5bbe18d987c5143ffeadd0825ff35d7414b3d7a516ad",
454
454
  "pipeline/scripts/check-read-size.py": "fa094f7fcc3ea830411a55f4acda12ffe5a2323c8fd105033ef238e13bc04c99",
455
455
  "pipeline/scripts/check-read-size.sh": "b5db605ffb3ad2b2b9dc7acfbf4ec7089b3ee8a22a29bf92475231bc66c7c787",
456
456
  "pipeline/scripts/classify-plan-safety.mjs": "d25f21da21dd4ee1ea507fb0df89301715071121b1bd96aca9ef140a4eee896b",
@@ -470,7 +470,7 @@
470
470
  "pipeline/scripts/crush-json.mjs": "303382670f8f170c8c6710202853a2de2915625813cd157185f9be4e2b27258e",
471
471
  "pipeline/scripts/diff-explain.mjs": "194d0635639607cb1af3de064453162e01c0d59dc0c2e187d21d45bae3bc559c",
472
472
  "pipeline/scripts/diff-risk-score.mjs": "b3e8da42fea1258162e40f4eb7809074831339b7563874527f7e825f7aa795ca",
473
- "pipeline/scripts/doctor.mjs": "abbdcbde479e96d00816330eb1ea46990f8bcf0e57c6bea9b360c7fb19533b0c",
473
+ "pipeline/scripts/doctor.mjs": "e37cee071270432d60bd52fd8ec6d9ed9132b90b405def7ad4874daba4104d7d",
474
474
  "pipeline/scripts/evidence-gate.mjs": "347a8d3fa1d17d996de345585c216bd7071f4c1d687999daf6e48881720ea5df",
475
475
  "pipeline/scripts/feedback-send.mjs": "d3ed66e9dacdfb4b5eacf1b244bf66752304fb4fcb144531441b458f3ab806be",
476
476
  "pipeline/scripts/finding-fingerprint.mjs": "fa12ab10701db5d2bfff014e41d1cd4c0b2b772aee5fc69205de14b2761b0c83",
@@ -523,6 +523,7 @@
523
523
  "pipeline/scripts/phone-devices.mjs": "f32288cbe56670eecb7d3a4b43f9ebcb4baeac5eeec357322fe19399603d59e3",
524
524
  "pipeline/scripts/plan-coverage-gate.mjs": "1a83bc52584438a9bd5cba96d2ddefed92a6a317d30ee695e67ef6c00b93e5a8",
525
525
  "pipeline/scripts/plan-critique-gate.mjs": "b139394e5f16d11e4997d0bb0b08529f439dbd7fad39781ef4c2475247d8fa97",
526
+ "pipeline/scripts/plugin-refresh.sh": "687a33199ad963616ab537e32210ec8c967e76ecc42f494ee8a1dc9fe947fc30",
526
527
  "pipeline/scripts/pr-request.mjs": "59b86c7fd768067af7016836d6a29debec36c4d8f10171ae4591fd6773977989",
527
528
  "pipeline/scripts/pre-commit-check.sh": "81937ed7c0974fdfe440e19ce31405a38bbdf2b45a9bf226f490268fcf915942",
528
529
  "pipeline/scripts/pre-push-check.sh": "ff98e73d02aa75cfa9411c29c838241e8529e832e1421ca9c25c39aa07bcd968",
@@ -576,7 +577,7 @@
576
577
  "pipeline/scripts/update-issue-progress.sh": "ccfef87743e91272e009e396ac07461d2784b2fa84a06c802a582526eeeb9ed9",
577
578
  "pipeline/scripts/usage-identity.mjs": "3e2479bafc290f1acb253f5273339c87550f97d332818a26e5ac266d7ef289dc",
578
579
  "pipeline/scripts/usage-register.mjs": "2844d2187226006d1a8b4e9b044d7591f4a5d3313cb24f9e388b36639022ce4c",
579
- "pipeline/scripts/usage-report.mjs": "c3492168ee11d1c5cf9b9008bf13cfcb7debd1499f31d5bc805d9473debcaa0e",
580
+ "pipeline/scripts/usage-report.mjs": "01ef50005c3358d17ca4ef69b80b5b576887ec47cb360c0211adbcc9c1f1e2aa",
580
581
  "pipeline/scripts/validate-analysis-doc.mjs": "ae56b7578ef51e008a99f84eba9def3e0f1dd2bd87a3880f2083aa98b365f7a1",
581
582
  "pipeline/scripts/validate-analysis.mjs": "d2dc9ccf45f6ca2702908761939edd830d18b3b273016a4b449f26fe285d5ea1",
582
583
  "pipeline/scripts/validate-code-graph.mjs": "0ceac2f5b59f641334d54dc30bee5265361fb5fe1fc97e2f9791b546efe79941",
@@ -595,7 +596,7 @@
595
596
  "pipeline/scripts/worktree-prepare.sh": "9391c828375b127f77c86e3c830dbbaf355a61464c6437319969f2f1eecc72b1",
596
597
  "pipeline/scripts/worktrees.mjs": "90dfd09b70fffe9b56c331a4ae2692cc248f4898f4ee6aee4239ef0b20888a90",
597
598
  "pipeline/scripts/write-state.mjs": "e1198bf970eace07d3eff22b394808a526e473df65d3d58aa2d5a12cfdac8b49",
598
- "pipeline/skills/.skill-manifest.json": "51c83a1bce2575f46469d427b572f9e91720b60638eed0240e2aee3a80ddc365",
599
+ "pipeline/skills/.skill-manifest.json": "cffda3b70d7f2807055ef6e963637b2d4e9650465a2b606d0d8dab429da35d03",
599
600
  "pipeline/skills/.skills-index.json": "042b1090f3e2ca310c6ce70d1bb304e8c7f96bd73133e504b95d83801608e470",
600
601
  "pipeline/skills/shared/README.md": "98196ea7c9d84637e8917ca4053c34b45de46586f71fb0c0034dce0808af857d",
601
602
  "pipeline/skills/shared/core/apple-archive-compliance/SKILL.md": "7239fef717ea45b79276bfcc2c3903acd57950b6e00dd6a2a66399c4b09cbd51",
@@ -610,7 +611,7 @@
610
611
  "pipeline/skills/shared/core/multi-agent-autopilot-status/SKILL.md": "0833c8c63b82c8c360bd2c5a9df77a958aa8829326fdb3ad0c7d8d8197a42c29",
611
612
  "pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md": "426158ddbb5e8d6e594cd2e02aceb197e1769d692602dfbd2a368a6707081bd3",
612
613
  "pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md": "8534891d1198597a0893d131e6b944d15443f62b24cb5584c486a235845fd281",
613
- "pipeline/skills/shared/core/multi-agent-channels/SKILL.md": "e52daada5aba4f772018d4cab508acc87b9b1c2686e1f5a770c4843f76c74208",
614
+ "pipeline/skills/shared/core/multi-agent-channels/SKILL.md": "03f7c648e1938f3d6d7c48d4c1c01f2bd734cdce873ec5203120b5be3ae761db",
614
615
  "pipeline/skills/shared/core/multi-agent-complaint-analysis/SKILL.md": "dd30708491303902aa8629130809e9601c2096dc12aa9fc671f798142cea3485",
615
616
  "pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md": "5aad0d841e9e5b7140bb441e07819209ca64c5b6fc209d6ad586b5fbb353e377",
616
617
  "pipeline/skills/shared/core/multi-agent-design-check/SKILL.md": "fa7ed1f53973a604af22fe01d26d8ca0fa9dea66e0e671326a50f0f26c396997",
@@ -623,7 +624,7 @@
623
624
  "pipeline/skills/shared/core/multi-agent-help/SKILL.md": "c6a18752fd6ca3f4887a3b1774dcd062dc8958d6e078fb6d3ef77566810ada2d",
624
625
  "pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md": "15fae4bfcdfe689bacd18edd7464913e75f33ed07f35cfb5c3a7bdb1f560f191",
625
626
  "pipeline/skills/shared/core/multi-agent-issue/SKILL.md": "9747f15970c602bb4898b4be125534453d04d4af87d2ccfb8c0fa151534d53aa",
626
- "pipeline/skills/shared/core/multi-agent-jira/SKILL.md": "c3e75df9f353bfeb0eb33632fab409721f03aab9c901102502d328eea93a6092",
627
+ "pipeline/skills/shared/core/multi-agent-jira/SKILL.md": "d7e23fd1565b6640d33c23cce4d025660212d9d3f3ab80a43369ad80ae8be080",
627
628
  "pipeline/skills/shared/core/multi-agent-kill/SKILL.md": "04698cbd8932d75cd39500ee4e53c75d4c10896dd3feba72448f6d119a39c9d4",
628
629
  "pipeline/skills/shared/core/multi-agent-language/SKILL.md": "ca4932ca4491546309666b67c8a9a676700ecc09c6ddab8696788464991b435f",
629
630
  "pipeline/skills/shared/core/multi-agent-log/SKILL.md": "094c703e6e6229a31868b3506fff651a91465de15456763ac87264becac99dbd",
@@ -632,7 +633,7 @@
632
633
  "pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md": "9e0745c2aac474b401126218a7e0d81a72942cd331ac0e591da72407d523fda9",
633
634
  "pipeline/skills/shared/core/multi-agent-prune-prompts/SKILL.md": "2750dad7d6cab8566798f6249094e071bd37fc519b8b350de3158cc9167c7a47",
634
635
  "pipeline/skills/shared/core/multi-agent-purge/SKILL.md": "52da8b43a9b59731fc1ae9950216b716bc742adb3d218ba65ddd59948789f0d9",
635
- "pipeline/skills/shared/core/multi-agent-refactor/SKILL.md": "dedcdb18c961b0ddf87d1f3308e9aba94cc31534cc4263503098fbdd5dd292e1",
636
+ "pipeline/skills/shared/core/multi-agent-refactor/SKILL.md": "889c17f800b83d5c5d13d097eff63f28dc8d7869679bfcdb72efecd8b1d66391",
636
637
  "pipeline/skills/shared/core/multi-agent-research/SKILL.md": "6f13e2feb57789f9ddd378f5faf723c8dbd5461ce541e81600bfd997b2ec7a08",
637
638
  "pipeline/skills/shared/core/multi-agent-resume/SKILL.md": "eea33e326f39980255decf4170b3ed4f8f83bd5c182c9a31086b2308eb686312",
638
639
  "pipeline/skills/shared/core/multi-agent-review-analysis/SKILL.md": "f55d3b28266001d150d0438e92f8bb5dfa9cdce517892cf12fe94beee8440c07",
@@ -650,7 +651,7 @@
650
651
  "pipeline/skills/shared/core/multi-agent-security-review/SKILL.md": "3c483d5942f2c2b81c0537d4db0b36804c13cabd66fd7fae2972d07a8f239f69",
651
652
  "pipeline/skills/shared/core/multi-agent-serve/SKILL.md": "01853f3a4726ef4374177fb0c3bd753520435fc7ccc263f3ef2399352cba8f04",
652
653
  "pipeline/skills/shared/core/multi-agent-setup/SKILL.md": "d57769a5857c6ed06f1c2c9995da77901af14c5ae493c8ec8c454b977c5666e9",
653
- "pipeline/skills/shared/core/multi-agent-stack/SKILL.md": "827d1582ee536ed65660574f24687b17b8b0a2a76f9b69ab03c9bb184a7712bb",
654
+ "pipeline/skills/shared/core/multi-agent-stack/SKILL.md": "ac964cd00dd6ed06512530489d867efbc51d7d7614265f9aa022679325d5defe",
654
655
  "pipeline/skills/shared/core/multi-agent-status/SKILL.md": "444c3773b52e6786e40bc67c8833ea6aecadbcd4459b01127b4aff152157040a",
655
656
  "pipeline/skills/shared/core/multi-agent-steer/SKILL.md": "20f332bd2fe2745da5341f8d8187211fc47c06b4b5f5031e217affee0282ddb5",
656
657
  "pipeline/skills/shared/core/multi-agent-store-ready/SKILL.md": "86838f9b922cdaebfebdc019aab7861e8e0d436620e43a715b3e3da1ddfc804b",
@@ -662,8 +663,8 @@
662
663
  "pipeline/skills/shared/core/multi-agent-test/SKILL.md": "538c7e27f1137975127883b249ebd552d07a114fe27aa33b31a0e659c93cd742",
663
664
  "pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md": "6bfd1569117bfbacb485d831c0b7f262ebb3a2f9471f6177a646f5ce32c06a25",
664
665
  "pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md": "9dccf78ffc2fb014d83f67d683d395f56f4fad8b5a36b9aa84e6cbd075b58818",
665
- "pipeline/skills/shared/core/multi-agent-update/SKILL.md": "b58574eb82a28c1657d30524b528a55a8d1f3e2eadd7b23f85525b2aca243c4b",
666
- "pipeline/skills/shared/core/multi-agent/SKILL.md": "b738b5055f4eb9a37934730ceddec8f02058c9a5e5c3d99158de1b4634e0d2a6",
666
+ "pipeline/skills/shared/core/multi-agent-update/SKILL.md": "d96e18b70bab0a601057f75f212dd4fb563db0cb250607c770ce1c7a1df4b1d0",
667
+ "pipeline/skills/shared/core/multi-agent/SKILL.md": "3bfaa4f0743aa1ab8d7f2bec4edb6b3c759f6c7a890535b2f0e1606f2ce7547d",
667
668
  "pipeline/skills/shared/external/NOTICE-avdlee-swiftui-agent-skill.md": "24df1d1dfb47b06b8fafb98938cf1b353fb0245c3a8f8212e197321d537dadff",
668
669
  "pipeline/skills/shared/external/NOTICE-dimillian-skills.md": "b98a170d97836f00ac6ee9c80e0befde324a6062071dc06a7eedce65fa5141cd",
669
670
  "pipeline/skills/shared/external/NOTICE-paul-hudson-skills.md": "bca5fe8779df70fb0f234483d65ff3562c67521e719b69b22aac260803b75244",
@@ -871,7 +872,7 @@
871
872
  "pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md": "32b9eefc4d8ee764e2c2516ea8e02e088790881f37f08d6379d6ec4c4ed6d803",
872
873
  "pipeline/skills/shared/external/localization-reuse-map/reference/publish-and-snapshot.md": "5ba54a86be18355df9776f8d35d14d2f11fb6b4a954f7ee1407b5e8acbc29548",
873
874
  "pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md": "14eeeb6a380a1101b879629a5a76dc5abdf6d66dc9df25a20d46089252bb01e9",
874
- "pipeline/skills/shared/external/localization-reuse-map/scripts/build-artifact.py": "a37c4fa154ffe1148427df5a479d137f1716b004dcc051e898f5a9f6c9b1487a",
875
+ "pipeline/skills/shared/external/localization-reuse-map/scripts/build-artifact.py": "0160e308e1dbafdd1aa098ebd42c17ca0b9b4592eca0607a2797441daadee78b",
875
876
  "pipeline/skills/shared/external/localization-reuse-map/scripts/build-spreadsheet.py": "5b5fcda496d5de0221a136bedc9744299a015fbe7fff308d1c7c75521d7f07ab",
876
877
  "pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-annotations.py": "fc53b521ea663750b5188f55178a87d17002410e19fe00b44a6cad3cdc2db9d2",
877
878
  "pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-legacy-labels.py": "e71ba938bdc5209e68af4baccbff8fc0c8d7fd6b52ab7b345cc08d8fab05deb7",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "20.3.1",
3
+ "version": "20.4.0",
4
4
  "description": "6-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",
@@ -191,8 +191,8 @@ WIKI_BRANCH=$(git -C "$WIKI_REL_ABS" symbolic-ref refs/remotes/origin/HEAD 2>/de
191
191
 
192
192
  2. **Fetch design-source screenshot** (Figma by default; other sources swap the fetch call):
193
193
  ```bash
194
- RESPONSE=$(curl -s "https://api.figma.com/v1/images/{fileKey}?ids={nodeId}&format=png&scale=2" \
195
- -H "X-Figma-Token: $DESIGN_TOKEN")
194
+ RESPONSE=$(printf 'X-Figma-Token: %s\n' "$DESIGN_TOKEN" | curl -s -H @- \
195
+ "https://api.figma.com/v1/images/{fileKey}?ids={nodeId}&format=png&scale=2")
196
196
  IMAGE_URL=$(echo "$RESPONSE" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['images']['{nodeId}'])")
197
197
  curl -s -o "$WIKI_REL_ABS/{wikiCategory}/{ComponentName}/assets/screenshot.png" "$IMAGE_URL"
198
198
  ```
@@ -209,7 +209,9 @@ WIKI_BRANCH=$(git -C "$WIKI_REL_ABS" symbolic-ref refs/remotes/origin/HEAD 2>/de
209
209
  cd "$WIKI_REL_ABS"
210
210
  git add "{wikiCategory}/{ComponentName}/"
211
211
  git -c user.name="{identity.name}" -c user.email="{identity.email}" \
212
- commit -m "docs({scope}): add {ComponentName} wiki pages [{jiraId}]"
212
+ commit -F - <<'MA_MSG'
213
+ docs({scope}): add {ComponentName} wiki pages [{jiraId}]
214
+ MA_MSG
213
215
  git fetch origin && git rebase "origin/$WIKI_BRANCH"
214
216
  git push origin "HEAD:$WIKI_BRANCH"
215
217
  ```
@@ -250,7 +252,7 @@ If a GitHub Issue tracks this component, update its body after commit + PR:
250
252
  - Fill the `### Pull Requests` section with PR URL(s), one row per submodule touched
251
253
  - Flip Implementation / Testing / Code Connect flags from Pending to Done using whatever marker the template uses (match in place, don't introduce new markers)
252
254
  - Flip the Wiki flag to Done (SubPhase 4F already pushed the wiki pages)
253
- - Apply with `gh issue edit {issueNo} --body "{updated body}"` - preserve every other section unchanged
255
+ - Write the updated body to a temp file and apply it with `gh issue edit {issueNo} --body-file <file>` - preserve every other section unchanged
254
256
  - NEVER use `Closes:` / `Fixes:` / `Resolves:` keywords - use `Ref:` or `Related:` instead
255
257
 
256
258
  Skip this phase if the task has no GitHub Issue (Jira-only or free-text runs).
@@ -31,7 +31,7 @@ ACCOUNTS=$(~/.claude/lib/account-resolver.sh --providers jira)
31
31
  Fetch projects:
32
32
  ```bash
33
33
  TOKEN=$(~/.claude/lib/credential-store.sh get "$ACCOUNT_JIRA_TOKEN_KEY")
34
- curl -s -H "Authorization: Bearer $TOKEN" \
34
+ printf 'Authorization: Bearer %s\n' "$TOKEN" | curl -s -H @- \
35
35
  "https://$ACCOUNT_JIRA_HOST/rest/api/2/project" \
36
36
  | python3 -c 'import json,sys; [print(p["key"]+"\t"+p["name"]) for p in json.load(sys.stdin)]'
37
37
  ```
@@ -45,7 +45,7 @@ The same list, already merged, sorted and scrubbed of hosts and URLs, is `node "
45
45
  Combine open issues across selected projects, sort by priority + status:
46
46
  ```bash
47
47
  JQL="assignee=currentUser() AND project in (${JIRA_PROJECT_KEYS}) AND resolution = EMPTY AND status not in (Done,Closed,Cancelled)"
48
- curl -s -H "Authorization: Bearer $TOKEN" \
48
+ printf 'Authorization: Bearer %s\n' "$TOKEN" | curl -s -H @- \
49
49
  "https://$ACCOUNT_JIRA_HOST/rest/api/2/search?jql=$(printf '%s' "$JQL" | python3 -c 'import sys,urllib.parse; print(urllib.parse.quote(sys.stdin.read()))')&fields=key,summary,status,issuetype,priority,resolution,fixVersions&maxResults=50"
50
50
  ```
51
51
 
@@ -88,7 +88,7 @@ The upstream mapping is **configuration, never hardcoded** (it can reference pri
88
88
  }
89
89
  ```
90
90
 
91
- **The plugin cache is a mirror, not the authority.** `~/.claude/plugins/cache/<marketplace>/<plugin>/<version>/` only holds whatever the last `claude marketplace update` fetched. Reading it as the current upstream version is how this step reported "up to date" while the derivation was four releases behind: the cache sat at 0.2.1 and upstream was at 0.4.1. Resolve in the order below and never let the cache alone produce an "up to date" verdict.
91
+ **The plugin cache is a mirror, not the authority.** `~/.claude/plugins/cache/<marketplace>/<plugin>/<version>/` only holds whatever the last `claude plugin marketplace update` fetched. Reading it as the current upstream version is how this step reported "up to date" while the derivation was four releases behind: the cache sat at 0.2.1 and upstream was at 0.4.1. Resolve in the order below and never let the cache alone produce an "up to date" verdict.
92
92
 
93
93
  **Which manifest carries the version** is `upstreamVersionSource`, default `marketplace.json`. That is what a marketplace consumer actually resolves, and some upstreams keep per-plugin `plugin.json` versions deliberately unused - reading those records a version nobody ships. An entry here was recorded at 0.7.0 from `plugin.json` while the upstream marketplace said 0.6.0 and its CHANGELOG stated in as many words that `plugin.json` is not used.
94
94
 
@@ -131,7 +131,7 @@ BB_USER=$("$CRED_STORE" get "$USER_KEY")
131
131
  BB_TOKEN=$("$CRED_STORE" get "$TOKEN_KEY")
132
132
 
133
133
  DIFF_FILE="/tmp/multi-agent-review-${TASK_ID}-diff.patch"
134
- http=$(curl -sS -m 60 -u "$BB_USER:$BB_TOKEN" -H "Accept: text/plain" \
134
+ http=$(curl -sS -m 60 --config <(printf 'user = "%s:%s"\n' "$BB_USER" "$BB_TOKEN") -H "Accept: text/plain" \
135
135
  "https://$bb_server_host/rest/api/1.0/projects/$bb_project_key/repos/$bb_repo_slug/pull-requests/$pr_number/diff?contextLines=10" \
136
136
  -o "$DIFF_FILE" -w '%{http_code}')
137
137
  if [ "$http" != "200" ]; then
@@ -446,7 +446,7 @@ Save to `prefs.global.hosts.{service}`. For Fortify, also ask `Fortify project v
446
446
  For Jira, **discover the project keys instead of asking the user to recall them.** The token is already saved and the host is already known, so ask Jira which projects this person actually works in - a corporate instance has thousands of projects, and a typed key is a typo waiting to route branches and new issues at the wrong board:
447
447
 
448
448
  ```bash
449
- curl -s -H "Authorization: Bearer $TOKEN" \
449
+ printf 'Authorization: Bearer %s\n' "$TOKEN" | curl -s -H @- \
450
450
  "https://{JIRA_HOST}/rest/api/2/search?jql=assignee%3DcurrentUser()%20OR%20reporter%3DcurrentUser()%20ORDER%20BY%20updated%20DESC&fields=project&maxResults=100" \
451
451
  | jq -r '[.issues[].fields.project | "\(.key)\t\(.name)"] | unique | .[]'
452
452
  ```
@@ -804,7 +804,7 @@ Stack skills ship as versioned plugins in the `{owner}/multi-agent-plugins` mark
804
804
 
805
805
  1. Ensure the marketplace is known (idempotent):
806
806
  ```bash
807
- claude marketplace add {owner}/multi-agent-plugins 2>/dev/null || true
807
+ bash "$HOME/.claude/scripts/plugin-refresh.sh" {owner} --add-only
808
808
  ```
809
809
  2. Ask the detector, then derive. No marker list here: a second list is a second
810
810
  answer, and this one defaulted to `ai-ios-toolkit` when nothing matched - how
@@ -80,10 +80,8 @@ REPO_SETTINGS=".claude/settings.json"
80
80
  MP="multi-agent-plugins"
81
81
 
82
82
  # --- ensure the marketplace is known (idempotent) -------------------------
83
- if ! claude marketplace list 2>/dev/null | grep -q "$MP"; then
84
- claude marketplace add {owner}/multi-agent-plugins 2>/dev/null \
85
- || echo "note: add the marketplace once with: claude marketplace add {owner}/multi-agent-plugins"
86
- fi
83
+ bash "$HOME/.claude/scripts/plugin-refresh.sh" {owner} --add-only \
84
+ || echo "note: add the marketplace once with: claude plugin marketplace add {owner}/$MP"
87
85
 
88
86
  # Enable-mode only: with zero args the write rules below would set every stack
89
87
  # toolkit to false (nothing but the always-on pair is in $ON), silently wiping the repo's
@@ -234,7 +234,7 @@ node "$HOME/multi-agent-pipeline/pipeline/scripts/build-stack-plugins.mjs" --dry
234
234
  node "$HOME/multi-agent-pipeline/pipeline/scripts/build-stack-plugins.mjs"
235
235
  ```
236
236
 
237
- **Version-based management:** the generator bumps a plugin's `version` (patch) only when its skill set actually changed. Idempotent - a no-op run bumps nothing. Consumers pick up new versions via `/multi-agent:update` (which runs `claude marketplace update multi-agent-plugins`).
237
+ **Version-based management:** the generator bumps a plugin's `version` (patch) only when its skill set actually changed. Idempotent - a no-op run bumps nothing. Consumers pick up new versions via `/multi-agent:update` (which refreshes the catalog with `claude plugin marketplace update multi-agent-plugins`, then runs `claude plugin update` for each installed plugin).
238
238
 
239
239
  **Help + README freshness (mandatory when the generator reported any change):**
240
240
 
@@ -329,7 +329,7 @@ for d in tools/*/; do printf '%s' "$PACK" | grep -q "$d" || echo "ABORT: $d miss
329
329
  ```bash
330
330
  gh auth switch --user {owner}
331
331
  git add -A
332
- git commit -m "{type}(v$NEW): {what changed}" # that repo's own commit convention
332
+ git commit -F "/tmp/release-msg-$NEW.txt" # "{type}(v$NEW): {what changed}", written with the file tool
333
333
  git tag "v$NEW" && git push origin main --tags
334
334
  ```
335
335
 
@@ -83,18 +83,11 @@ A git clone of the pipeline repo is a maintainer workspace, kept in sync by `/mu
83
83
 
84
84
  The installer refreshes every configured CLI target (Claude Code, Copilot CLI, Codex CLI) and writes the new version to `$HOME/.claude/.pipeline-version`.
85
85
 
86
- 4b. **Update the stack-plugin marketplace** (pulls the latest plugin versions):
86
+ 4b. **Update the stack plugins** (catalog refresh, then every installed plugin in its own scope):
87
87
  ```bash
88
- # Stack skills ship as versioned plugins in {owner}/multi-agent-plugins.
89
- # Refresh the marketplace so newly published plugin versions are picked up.
90
- if claude marketplace list 2>/dev/null | grep -q "multi-agent-plugins"; then
91
- claude marketplace update multi-agent-plugins 2>/dev/null \
92
- || claude marketplace add {owner}/multi-agent-plugins 2>/dev/null
93
- echo " -> marketplace multi-agent-plugins refreshed"
94
- else
95
- echo " -> marketplace not added yet; add with: claude marketplace add {owner}/multi-agent-plugins"
96
- fi
88
+ bash "$HOME/.claude/scripts/plugin-refresh.sh" {owner}
97
89
  ```
90
+ A non-zero exit means a step failed and the CLI's own error is already on screen. Report it to the user; do not retry silently.
98
91
 
99
92
  4c. **Prune retired adapter files** (Cursor / Antigravity / Copilot Chat were removed in v10.7.0 - the pipeline targets Claude Code, Copilot CLI and Codex CLI):
100
93
  ```bash
@@ -251,7 +251,7 @@ The two adapters run in the same phase over the same source markdown, so the fai
251
251
  ## Reviewer-preserving Bitbucket payload (required)
252
252
 
253
253
  ```bash
254
- PR_JSON=$(curl -s -u "$BB_USER:$BB_TOKEN" "$PR_URL")
254
+ PR_JSON=$(curl -s --config <(printf 'user = "%s:%s"\n' "$BB_USER" "$BB_TOKEN") "$PR_URL")
255
255
  REVIEWERS=$(jq '[.reviewers[] | {user: {name: .user.name}, approved, status}]' <<< "$PR_JSON")
256
256
  VERSION=$(jq -r '.version' <<< "$PR_JSON")
257
257
  TITLE=$(jq -r '.title' <<< "$PR_JSON")
@@ -268,7 +268,7 @@ jq -n --rawfile body /tmp/channels-$TASK_ID-pr.md \
268
268
  reviewers: $reviewers, fromRef: $fromRef, toRef: $toRef, draft: $draft}' \
269
269
  > /tmp/channels-$TASK_ID-pr-payload.json
270
270
 
271
- curl -s -X PUT -u "$BB_USER:$BB_TOKEN" -H "Content-Type: application/json" \
271
+ curl -s -X PUT --config <(printf 'user = "%s:%s"\n' "$BB_USER" "$BB_TOKEN") -H "Content-Type: application/json" \
272
272
  --data-binary @/tmp/channels-$TASK_ID-pr-payload.json "$PR_URL"
273
273
  ```
274
274
 
@@ -167,7 +167,8 @@ reaches Phase 4 and stops there.
167
167
  ### hook-coverage
168
168
 
169
169
  The blocking `PreToolUse` gates from `templates/claude-hooks.json` are present in
170
- `settings.json`. WARN. SKIP when the template is not installed - which was the
170
+ `settings.json`, and none of them is registered twice on the same matcher
171
+ (Claude Code runs a duplicate on every matching call). WARN. SKIP when the template is not installed - which was the
171
172
  permanent state until the installer began copying `templates/`, and is exactly
172
173
  the case this severity exists to make visible.
173
174
 
@@ -19,7 +19,7 @@ Before any analysis, check if this issue was already fixed by someone else.
19
19
  3. **Jira comments/status** - fetch latest comments to see if someone reported a fix:
20
20
 
21
21
  ```bash
22
- curl -s -H "Authorization: Bearer $JIRA_TOKEN" \
22
+ printf 'Authorization: Bearer %s\n' "$JIRA_TOKEN" | curl -s -H @- \
23
23
  "$JIRA_BASE/issue/{jiraId}?fields=status,comment&expand=changelog" \
24
24
  | jq '.fields.status.name, .fields.comment.comments[-3:][]?.body'
25
25
  ```