@mmerterden/multi-agent-pipeline 12.5.0 → 12.7.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 (290) hide show
  1. package/CHANGELOG.md +213 -0
  2. package/README.md +19 -19
  3. package/docs/FIGMA_PIPELINE.md +34 -34
  4. package/docs/adr/0001-three-model-triage.md +12 -12
  5. package/docs/adr/0002-instruction-driven-flag.md +5 -5
  6. package/docs/adr/0003-unified-shared-skills.md +5 -5
  7. package/docs/adr/0004-zero-dependency-philosophy.md +5 -5
  8. package/docs/adr/0005-lazy-phase-docs.md +2 -2
  9. package/docs/adr/0006-skills-core-external-split.md +6 -6
  10. package/docs/adr/0007-multi-tool-adapter-framework.md +19 -19
  11. package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +19 -19
  12. package/docs/adr/README.md +1 -1
  13. package/docs/best-practices.md +3 -3
  14. package/docs/features.md +48 -28
  15. package/docs/performance.md +16 -16
  16. package/docs/recovery-guide.md +39 -39
  17. package/index.js +11 -5
  18. package/install/_common.mjs +5 -11
  19. package/install/_copilot-instructions.mjs +2 -2
  20. package/install/_dev-only-files.mjs +2 -1
  21. package/install/_platform-filter.mjs +1 -1
  22. package/install/_telemetry.mjs +1 -1
  23. package/install/claude.mjs +10 -9
  24. package/install/copilot.mjs +10 -19
  25. package/install/index.mjs +7 -15
  26. package/install/templates/copilot-instructions.md +54 -54
  27. package/install.js +1 -1
  28. package/package.json +15 -11
  29. package/pipeline/agents/security-auditor.md +1 -1
  30. package/pipeline/commands/archive-guard.md +5 -5
  31. package/pipeline/commands/multi-agent/SKILL.md +3 -1
  32. package/pipeline/commands/multi-agent/analysis/SKILL.md +1 -1
  33. package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +1 -1
  34. package/pipeline/commands/multi-agent/autopilot/SKILL.md +1 -1
  35. package/pipeline/commands/multi-agent/build-optimize/SKILL.md +1 -1
  36. package/pipeline/commands/multi-agent/create-jira/SKILL.md +1 -1
  37. package/pipeline/commands/multi-agent/design-check/SKILL.md +287 -0
  38. package/pipeline/commands/multi-agent/dev/SKILL.md +1 -1
  39. package/pipeline/commands/multi-agent/dev-autopilot/SKILL.md +1 -1
  40. package/pipeline/commands/multi-agent/dev-local/SKILL.md +1 -1
  41. package/pipeline/commands/multi-agent/dev-local-autopilot/SKILL.md +1 -1
  42. package/pipeline/commands/multi-agent/diff-explain/SKILL.md +1 -1
  43. package/pipeline/commands/multi-agent/finish/SKILL.md +6 -6
  44. package/pipeline/commands/multi-agent/forget/SKILL.md +1 -1
  45. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -1
  46. package/pipeline/commands/multi-agent/help/SKILL.md +46 -6
  47. package/pipeline/commands/multi-agent/issue/SKILL.md +1 -1
  48. package/pipeline/commands/multi-agent/jira/SKILL.md +1 -1
  49. package/pipeline/commands/multi-agent/kill/SKILL.md +1 -1
  50. package/pipeline/commands/multi-agent/language/SKILL.md +1 -1
  51. package/pipeline/commands/multi-agent/local/SKILL.md +1 -1
  52. package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +1 -1
  53. package/pipeline/commands/multi-agent/log/SKILL.md +1 -1
  54. package/pipeline/commands/multi-agent/manual-test/SKILL.md +1 -1
  55. package/pipeline/commands/multi-agent/prune-logs/SKILL.md +1 -1
  56. package/pipeline/commands/multi-agent/purge/SKILL.md +1 -1
  57. package/pipeline/commands/multi-agent/refactor/SKILL.md +107 -19
  58. package/pipeline/commands/multi-agent/resume/SKILL.md +2 -2
  59. package/pipeline/commands/multi-agent/review/SKILL.md +2 -2
  60. package/pipeline/commands/multi-agent/review-issue/SKILL.md +1 -1
  61. package/pipeline/commands/multi-agent/review-jira/SKILL.md +1 -1
  62. package/pipeline/commands/multi-agent/routines/SKILL.md +1 -1
  63. package/pipeline/commands/multi-agent/save/SKILL.md +1 -1
  64. package/pipeline/commands/multi-agent/scan/SKILL.md +1 -1
  65. package/pipeline/commands/multi-agent/search/SKILL.md +1 -1
  66. package/pipeline/commands/multi-agent/setup/SKILL.md +2 -2
  67. package/pipeline/commands/multi-agent/stack/SKILL.md +3 -3
  68. package/pipeline/commands/multi-agent/status/SKILL.md +1 -1
  69. package/pipeline/commands/multi-agent/sync/SKILL.md +123 -16
  70. package/pipeline/commands/multi-agent/test/SKILL.md +2 -2
  71. package/pipeline/commands/multi-agent/uninstall/SKILL.md +1 -1
  72. package/pipeline/commands/multi-agent/update/SKILL.md +3 -3
  73. package/pipeline/commands/sim-test.md +5 -5
  74. package/pipeline/eval/run-metrics-fixture.json +60 -13
  75. package/pipeline/lib/account-resolver.sh +1 -1
  76. package/pipeline/lib/channels-multi-repo.sh +1 -1
  77. package/pipeline/lib/context-link-extractor.sh +1 -1
  78. package/pipeline/lib/credential-store.sh +33 -1
  79. package/pipeline/lib/fetch-confluence.sh +1 -1
  80. package/pipeline/lib/fetch-crashlytics.sh +1 -1
  81. package/pipeline/lib/fetch-fortify.sh +1 -1
  82. package/pipeline/lib/fetch-graylog.sh +1 -1
  83. package/pipeline/lib/fetch-swagger.sh +1 -1
  84. package/pipeline/lib/issue-fetcher.sh +1 -1
  85. package/pipeline/lib/multi-repo-pipeline.sh +1 -1
  86. package/pipeline/lib/repo-cache.sh +1 -1
  87. package/pipeline/lib/submodule-detector.sh +1 -1
  88. package/pipeline/multi-agent-refs/component-dispatch.md +1 -1
  89. package/pipeline/multi-agent-refs/component-generation.md +121 -0
  90. package/pipeline/multi-agent-refs/cross-cli-contract.md +4 -4
  91. package/pipeline/multi-agent-refs/features/model-fallback.md +2 -2
  92. package/pipeline/multi-agent-refs/phases/phase-3-dev.md +2 -2
  93. package/pipeline/multi-agent-refs/phases/phase-4-review.md +1 -1
  94. package/pipeline/multi-agent-refs/phases/phase-5-test.md +4 -4
  95. package/pipeline/preferences-template.json +23 -12
  96. package/pipeline/schemas/agent-state.schema.json +125 -5
  97. package/pipeline/schemas/analysis-output.schema.json +18 -4
  98. package/pipeline/schemas/analysis-spec.schema.json +120 -32
  99. package/pipeline/schemas/clarify-output.schema.json +15 -5
  100. package/pipeline/schemas/design-check-config.schema.json +183 -0
  101. package/pipeline/schemas/dev-critic-output.schema.json +20 -5
  102. package/pipeline/schemas/figma-project-config.schema.json +42 -10
  103. package/pipeline/schemas/learnings-ledger.schema.json +10 -2
  104. package/pipeline/schemas/migrations/figma-config-1.0.0-to-2.0.0.mjs +1 -4
  105. package/pipeline/schemas/migrations/prefs-2.0.0-to-2.1.0.mjs +24 -7
  106. package/pipeline/schemas/migrations/state-2.0.0-to-2.1.0.mjs +30 -12
  107. package/pipeline/schemas/plan-todos.schema.json +6 -3
  108. package/pipeline/schemas/planning-output.schema.json +5 -1
  109. package/pipeline/schemas/prefs.schema.json +215 -197
  110. package/pipeline/schemas/test-gap.schema.json +5 -5
  111. package/pipeline/schemas/token-budget.json +8 -8
  112. package/pipeline/schemas/triage-corpus.schema.json +1 -1
  113. package/pipeline/scripts/README.md +7 -5
  114. package/pipeline/scripts/aggregate-metrics.mjs +18 -6
  115. package/pipeline/scripts/build-skills-index.mjs +6 -2
  116. package/pipeline/scripts/build-stack-plugins.mjs +142 -39
  117. package/pipeline/scripts/check-derived-drift.mjs +196 -0
  118. package/pipeline/scripts/check-md-links.mjs +6 -2
  119. package/pipeline/scripts/classify-plan-safety.mjs +26 -8
  120. package/pipeline/scripts/cost-budget-check.mjs +11 -6
  121. package/pipeline/scripts/cost-table.json +1 -1
  122. package/pipeline/scripts/diff-explain.mjs +7 -3
  123. package/pipeline/scripts/diff-risk-score.mjs +13 -3
  124. package/pipeline/scripts/eval-golden-tasks-live.mjs +8 -3
  125. package/pipeline/scripts/eval-golden-tasks.mjs +21 -9
  126. package/pipeline/scripts/eval-intent.mjs +8 -4
  127. package/pipeline/scripts/eval-mine-corpus.mjs +14 -4
  128. package/pipeline/scripts/evidence-gate.mjs +7 -2
  129. package/pipeline/scripts/fixtures/install-layout.tsv +7 -7
  130. package/pipeline/scripts/gen-mode-dispatch.mjs +38 -21
  131. package/pipeline/scripts/gen-skills-index.mjs +18 -3
  132. package/pipeline/scripts/learning-curve.mjs +13 -3
  133. package/pipeline/scripts/learnings-ledger.mjs +119 -34
  134. package/pipeline/scripts/lint-mcp-refs.mjs +218 -0
  135. package/pipeline/scripts/lint-skills.mjs +20 -9
  136. package/pipeline/scripts/localize-commands.mjs +6 -1
  137. package/pipeline/scripts/match-skills.mjs +15 -4
  138. package/pipeline/scripts/memory-load.sh +5 -1
  139. package/pipeline/scripts/migrate-prefs.mjs +33 -16
  140. package/pipeline/scripts/phase-tracker.sh +3 -1
  141. package/pipeline/scripts/render-work-summary.sh +4 -1
  142. package/pipeline/scripts/repo-map.mjs +110 -64
  143. package/pipeline/scripts/review-scope.mjs +7 -1
  144. package/pipeline/scripts/routine-registry.mjs +4 -9
  145. package/pipeline/scripts/run-aggregator.mjs +11 -5
  146. package/pipeline/scripts/run-metrics.mjs +13 -8
  147. package/pipeline/scripts/run-smokes.mjs +57 -3
  148. package/pipeline/scripts/scorecard.mjs +258 -0
  149. package/pipeline/scripts/smoke-command-inventory.sh +81 -0
  150. package/pipeline/scripts/smoke-commands-skills-parity.sh +1 -1
  151. package/pipeline/scripts/smoke-compliance-skills.sh +4 -4
  152. package/pipeline/scripts/smoke-context-budget.sh +72 -0
  153. package/pipeline/scripts/smoke-cross-cli-behavior.sh +12 -2
  154. package/pipeline/scripts/smoke-generate-issue.sh +6 -5
  155. package/pipeline/scripts/smoke-model-fallback.sh +1 -1
  156. package/pipeline/scripts/smoke-no-mcp-in-dev-phases.sh +86 -7
  157. package/pipeline/scripts/smoke-own-punctuation.sh +103 -0
  158. package/pipeline/scripts/smoke-per-repo-memory.sh +2 -2
  159. package/pipeline/scripts/smoke-review-readiness.sh +3 -2
  160. package/pipeline/scripts/smoke-schema-validation.sh +19 -5
  161. package/pipeline/scripts/smoke-shadow-git.sh +4 -2
  162. package/pipeline/scripts/smoke-workflow-audit.sh +43 -11
  163. package/pipeline/scripts/smoke-write-state.sh +49 -5
  164. package/pipeline/scripts/test-gap-rules/android.json +11 -11
  165. package/pipeline/scripts/test-gap-rules/ios.json +16 -11
  166. package/pipeline/scripts/test-gap-rules/node.json +19 -7
  167. package/pipeline/scripts/test-gap-rules/python.json +10 -4
  168. package/pipeline/scripts/test-gap-scan.mjs +44 -12
  169. package/pipeline/scripts/test-integrity-gate.mjs +5 -1
  170. package/pipeline/scripts/token-budget-report.mjs +44 -21
  171. package/pipeline/scripts/triage-memory.mjs +142 -32
  172. package/pipeline/scripts/uninstall.mjs +75 -31
  173. package/pipeline/scripts/validate-analysis-doc.mjs +15 -5
  174. package/pipeline/scripts/validate-diff-risk.mjs +32 -18
  175. package/pipeline/scripts/validate-test-gap.mjs +17 -7
  176. package/pipeline/scripts/validate-triage.mjs +17 -5
  177. package/pipeline/scripts/write-state.mjs +32 -9
  178. package/pipeline/skills/.skill-manifest.json +24 -8
  179. package/pipeline/skills/.skills-index.json +125 -89
  180. package/pipeline/skills/shared/README.md +65 -61
  181. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +10 -8
  182. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +1 -1
  183. package/pipeline/skills/shared/core/multi-agent/SKILL.md +26 -279
  184. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +1 -1
  185. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +1 -1
  186. package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +1 -1
  187. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
  188. package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +1 -1
  189. package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +248 -0
  190. package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +1 -1
  191. package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +1 -1
  192. package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +1 -1
  193. package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +1 -1
  194. package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +1 -1
  195. package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
  196. package/pipeline/skills/shared/core/multi-agent-forget/SKILL.md +1 -1
  197. package/pipeline/skills/shared/core/multi-agent-garbage-collect/SKILL.md +1 -1
  198. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +23 -1
  199. package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +1 -1
  200. package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +1 -1
  201. package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +1 -1
  202. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +1 -1
  203. package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +1 -1
  204. package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +1 -1
  205. package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +1 -1
  206. package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +1 -1
  207. package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +1 -1
  208. package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +1 -1
  209. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +82 -18
  210. package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +1 -1
  211. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +2 -2
  212. package/pipeline/skills/shared/core/multi-agent-review-issue/SKILL.md +1 -1
  213. package/pipeline/skills/shared/core/multi-agent-review-jira/SKILL.md +1 -1
  214. package/pipeline/skills/shared/core/multi-agent-routines/SKILL.md +1 -1
  215. package/pipeline/skills/shared/core/multi-agent-save/SKILL.md +1 -1
  216. package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +1 -1
  217. package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +1 -1
  218. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +1 -1
  219. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +3 -3
  220. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +1 -1
  221. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +51 -9
  222. package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +2 -2
  223. package/pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md +1 -1
  224. package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +1 -1
  225. package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +1 -1
  226. package/pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md +4 -4
  227. package/pipeline/skills/shared/external/agentflow/SKILL.md +1 -1
  228. package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +1 -1
  229. package/pipeline/skills/shared/external/android_ui_verification/SKILL.md +1 -1
  230. package/pipeline/skills/shared/external/api-patterns/SKILL.md +1 -1
  231. package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +1 -1
  232. package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +1 -1
  233. package/pipeline/skills/shared/external/backlog/BACKLOG.md +1 -1
  234. package/pipeline/skills/shared/external/backlog/SKILL.md +12 -12
  235. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +1 -1
  236. package/pipeline/skills/shared/external/context-compression/SKILL.md +1 -1
  237. package/pipeline/skills/shared/external/council/SKILL.md +3 -3
  238. package/pipeline/skills/shared/external/css-modern/SKILL.md +1 -1
  239. package/pipeline/skills/shared/external/database-patterns/SKILL.md +1 -1
  240. package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +1 -1
  241. package/pipeline/skills/shared/external/docker-expert/SKILL.md +1 -1
  242. package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +1 -1
  243. package/pipeline/skills/shared/external/firebase/SKILL.md +1 -1
  244. package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +1 -1
  245. package/pipeline/skills/shared/external/help-skills/SKILL.md +1 -1
  246. package/pipeline/skills/shared/external/hig-components-content/SKILL.md +1 -1
  247. package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +1 -1
  248. package/pipeline/skills/shared/external/hig-components-status/SKILL.md +1 -1
  249. package/pipeline/skills/shared/external/hig-components-system/SKILL.md +1 -1
  250. package/pipeline/skills/shared/external/hig-foundations/SKILL.md +1 -1
  251. package/pipeline/skills/shared/external/hig-inputs/SKILL.md +1 -1
  252. package/pipeline/skills/shared/external/hig-patterns/SKILL.md +1 -1
  253. package/pipeline/skills/shared/external/hig-platforms/SKILL.md +1 -1
  254. package/pipeline/skills/shared/external/hig-technologies/SKILL.md +1 -1
  255. package/pipeline/skills/shared/external/html-semantic/SKILL.md +1 -1
  256. package/pipeline/skills/shared/external/humanizer/SKILL.md +1 -1
  257. package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +1 -1
  258. package/pipeline/skills/shared/external/ios-developer/SKILL.md +1 -1
  259. package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +1 -1
  260. package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +1 -1
  261. package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +1 -1
  262. package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +1 -1
  263. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +1 -1
  264. package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +1 -1
  265. package/pipeline/skills/shared/external/observability-engineer/SKILL.md +1 -1
  266. package/pipeline/skills/shared/external/python-patterns/SKILL.md +1 -1
  267. package/pipeline/skills/shared/external/react-best-practices/SKILL.md +1 -1
  268. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +1 -1
  269. package/pipeline/skills/shared/external/search-first/SKILL.md +2 -2
  270. package/pipeline/skills/shared/external/skill-creator/SKILL.md +12 -12
  271. package/pipeline/skills/shared/external/skill-creator/audit.md +21 -21
  272. package/pipeline/skills/shared/external/skill-creator/checklist.md +3 -3
  273. package/pipeline/skills/shared/external/skill-creator/examples.md +10 -10
  274. package/pipeline/skills/shared/external/skill-creator/label-check.md +17 -17
  275. package/pipeline/skills/shared/external/skill-creator/scripts/audit-panel.js +86 -50
  276. package/pipeline/skills/shared/external/skill-creator/template.md +9 -9
  277. package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +1 -1
  278. package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +1 -1
  279. package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +1 -1
  280. package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +1 -1
  281. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +1 -1
  282. package/pipeline/skills/shared/external/testing-backend/SKILL.md +1 -1
  283. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +1 -1
  284. package/pipeline/skills/shared/external/vue-composition/SKILL.md +1 -1
  285. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +1 -1
  286. package/pipeline/skills/shared/external/web-performance/SKILL.md +1 -1
  287. package/pipeline/skills/shared/external/web-testing/SKILL.md +1 -1
  288. package/pipeline/skills/shared/external/xcode-build-benchmark/schemas/build-benchmark.schema.json +9 -49
  289. package/pipeline/skills/skills-index.md +63 -59
  290. package/pipeline/scripts/smoke-plugin-validate.sh +0 -64
package/CHANGELOG.md CHANGED
@@ -14,6 +14,219 @@ Internal file-layout changes that don't affect the slash-command surface are sti
14
14
 
15
15
  ---
16
16
 
17
+ ## [Unreleased]
18
+
19
+ ## [12.7.0] - 2026-07-26
20
+
21
+ A refactor pass whose theme turned out to be one recurring defect: gates that
22
+ reported success without checking anything. Nine of them, plus a data-loss bug found
23
+ while fixing them.
24
+
25
+ ### Fixed
26
+
27
+ - **The GitHub Actions security audit had never run anywhere.** `smoke-workflow-audit.sh`
28
+ reported "0 passed, 0 failed, 2 skipped" on the workstation and on the runner, and
29
+ `ci-lite.yml` justified not installing zizmor and actionlint by saying to run it
30
+ locally "where the tools exist" - where they were equally absent. Run for the first
31
+ time it found nine issues: a high-severity cache-poisoning path restoring a
32
+ lockfile-keyed dependency cache into the job that signs and publishes the tarball,
33
+ four checkouts persisting their credential, four jobs on the default token scope.
34
+ All nine fixed across all three repos. The smoke is strict by default now; a
35
+ missing linter fails, and the local escape hatch is ignored when `CI` is set.
36
+ - **A suite that asserted nothing reported success.** `run-smokes` only read exit
37
+ codes, and three suites were exiting 0 having checked nothing - including the gate
38
+ for the no-MCP-outside-analysis rule, which printed "no run to check" on every
39
+ clean clone and every CI runner. It self-tests against eight fixtures now. The
40
+ runner counts assertions and fails a suite that made none; the four output shapes
41
+ it recognises were surveyed across all suites rather than assumed.
42
+ - **`smoke-plugin-validate.sh` ran zero checks here** while appearing as a green CI
43
+ step. Removed; the real check lives in multi-agent-plugins, which gained its own CI.
44
+ - **The drift check read a mirror and called it the authority.** It resolved the
45
+ upstream version from the installed plugin cache, only as fresh as the last
46
+ marketplace update, so it reported "up to date" for a derivation four releases
47
+ behind. Resolution is local clone, then repo API, then cache; a cache-only answer
48
+ reports "unverified" rather than passing. `check-derived-drift.mjs` makes the order
49
+ testable - seven tests, including a clone whose two manifests disagree.
50
+ - **`write-state.mjs` lost a concurrent write.** The lock was created empty with its
51
+ PID written on the next line, so a writer arriving in that window read an
52
+ unparseable PID, called the lock stale, and deleted a live one. Both writers then
53
+ did their own read-modify-write and one update vanished. Reproduced three times in
54
+ fifteen runs under load, invisible on an idle machine, which is why the smoke read
55
+ as flaky. The lock is created atomically with its PID via `link()`, an unreadable
56
+ PID no longer counts as stale, and the smoke went 10 checks to 12 with the race
57
+ pinned directly.
58
+ - **Coverage was measured against the wrong denominator.** `.c8rc.json` lacked `all`,
59
+ reporting 83% against a real 33% over its own include set. Floors are 72/68/85.
60
+ - **Two HIGH advisories** pinned by the lockfile, closed.
61
+ - **One skill routed into two stack plugins**: the backend pattern carried a bare
62
+ `architecture` alternative that also matched `android-architecture` and
63
+ `swift-architecture`, so a Python/Node plugin shipped Compose and SwiftUI guidance.
64
+ - **`engines.node` claimed `>=20.0.0`** while the code uses `import.meta.dirname`,
65
+ which arrived in 20.11. A user on 20.0 through 20.10 would have broken.
66
+ - **The orchestrator skill named a log path the code had stopped using**, in one of
67
+ three sections it had duplicated from loadable references while citing them zero
68
+ times.
69
+
70
+ ### Added
71
+
72
+ - **`npm run scorecard`** gates the measurable half of a review score against locked
73
+ thresholds and names the four categories no script can score instead of giving them
74
+ a number. Nine measured metrics: coverage floors, zero high or critical advisories,
75
+ the fixed context budget, the workflow audit, the punctuation rule, a routing clause
76
+ on every skill description, licence and changelog presence, the zero-assertion check
77
+ still wired, derived skills current with upstream. Its own first version trusted an
78
+ exit code that meant two different things and reported an unconfigured machine as
79
+ passing.
80
+ - **`smoke-context-budget.sh`** pins the bytes every run pays before it starts.
81
+ - **`smoke-own-punctuation.sh`** enforces the locked punctuation rule on our own tree,
82
+ in both the literal and the escaped encoding - `prefs.schema.json` carried 50
83
+ escaped em-dashes that the first version of the gate could not see.
84
+ - **`check-derived-drift.mjs`**, with `upstreamVersionSource` and `upstreamLocalClone`
85
+ in the prefs schema.
86
+ - **`eslint-plugin-n`** and **`publint`**, the latter having sat behind
87
+ `npx --no-install` and never executed.
88
+
89
+ ### Changed
90
+
91
+ - **Fixed per-run context: 67150 -> 57831 bytes.** Three duplicated sections moved
92
+ out of the orchestrator skill to the references it now cites.
93
+ - **A routing clause in all 193 skill descriptions**, 93 of which had none. The
94
+ linter fails on a missing one instead of warning.
95
+ - **`prettier` is enforced.** It was configured with nothing running it, so 583 files
96
+ failed the declared style. Scope is code and config; markdown is excluded on
97
+ purpose and the reason is in the workflow.
98
+ - **The punctuation rule applied to our own files**: 719 em-dashes across 77 files.
99
+ - `--ignore-scripts` on the four CI `npm ci` lines; `pipefail` in 13 lib scripts.
100
+ - eslint 10.8, prettier 3.9.6, c8 12.
101
+
102
+ ## [12.6.0] - 2026-07-25
103
+
104
+ Two threads. The design-check command gains a scenario inventory, a coverage
105
+ gate and MCP-currency gating, and the refactor/sync pair learns to research,
106
+ audit and ship the companion dev-toolkit MCP server. Alongside that, a defect
107
+ sweep found eight gates and features that exited 0 while doing nothing - six
108
+ of them guarded by a smoke test whose fixture had the wrong shape, so the suite
109
+ stayed green the whole time.
110
+
111
+ Requires `@mmerterden/dev-toolkit-mcp` >= v2.9.0 for the App Store audit path.
112
+
113
+ ### Fixed
114
+
115
+ - **Eight gates and features that reported success while doing nothing.** Each
116
+ exited 0 without doing its job, and in six cases the guarding smoke test
117
+ hand-wrote a fixture with the wrong shape, so the suite stayed green.
118
+ `npx @mmerterden/multi-agent-pipeline uninstall` was a silent no-op (the
119
+ `isMainModule` guard compared `import.meta.url` to `argv[1]`, which is
120
+ `index.js` under the bin dispatcher). `cost-budget-check.mjs` probed
121
+ `.worktrees/<id>/phase-tracker.json` while `phase-tracker.sh` writes
122
+ `~/.claude/logs/multi-agent/<id>/tracker-state.json`, so the cost ceiling
123
+ could never fire; it also now prices `tokens_cached`. `classify-plan-safety.mjs`
124
+ required `score >= 50` while its heaviest rule is 35, so no single heavy
125
+ signal could trip the autopilot pause its own contract promises.
126
+ `triage-memory.mjs` and `learnings-ledger.mjs` derived the repo slug from
127
+ `--show-toplevel`, which inside a worktree is the task id, sharding the
128
+ per-repo store one directory per task; they now use `--git-common-dir`.
129
+ `state-2.0.0-to-2.1.0.mjs` emitted keys `agent-state.schema.json` rejects
130
+ under `additionalProperties: false`. `memory-load.sh` read `preferences.json`
131
+ while the installer only writes `multi-agent-preferences.json`, so per-repo
132
+ memory was dead in production. `smoke-cross-cli-behavior.sh` had unquoted
133
+ command substitution (SC2046) that made two gates pass while violations were
134
+ present. The CI leak gate in all three workflows grepped 5 of the 23
135
+ forbidden patterns and was `release.yml`'s only PII gate; all three now call
136
+ `smoke-personal-data.sh --root`, keeping one pattern list.
137
+ - **shellcheck moves from `error` to `warning` severity.** `error` returns zero
138
+ findings across all 175 scripts, so the gate could not catch this repo's
139
+ actual defect class - SC2046 is a warning. Noisy codes are excluded with a
140
+ per-code rationale. Four real findings surfaced and are fixed, including two
141
+ unguarded `cd` calls in `smoke-shadow-git.sh`, one preceding a relative
142
+ `rm -rf`.
143
+ - **`credential-store.sh` resolves logical keys through
144
+ `prefs.global.keychainMapping`.** `get github` searched the backend for a
145
+ credential literally named "github" and returned empty with exit 1 -
146
+ indistinguishable from "no such credential" - because the entry is named by
147
+ the mapping. Applied in `get`/`set`/`delete`, falling back to the logical key
148
+ when no mapping exists.
149
+
150
+ ### Changed
151
+
152
+ - **`ios_app_store_audit` catalog grows to 18 rules**, requiring
153
+ `@mmerterden/dev-toolkit-mcp` >= v2.9.0. Adds `sdk-floor` (ITMS-90725, the
154
+ iOS 26 / Xcode 26 build floor in force since 2026-04-28). `embedded-sdk`'s
155
+ missing framework privacy manifest moves from a `5.1.1` WARNING to
156
+ `ITMS-91061` ERROR, an enforced rejection since 2025-02-12, so archives that
157
+ previously passed with a warning now fail. The rule count and the declared
158
+ minimum are updated across all nine files that asserted them.
159
+
160
+ ### Added
161
+
162
+ - **`/multi-agent:refactor` band E (Step 0c)**: the companion dev-toolkit MCP
163
+ server is now in scope. The step researches current MCP practice (protocol
164
+ revisions and SDK releases, host-client conventions, peer servers, the
165
+ platform tooling it wraps, field practice) and audits the toolkit repo
166
+ against it: syntax, stdout hygiene (stdout carries the JSON-RPC frames),
167
+ advertised tool counts vs reality, `files[]` coverage, dependency freshness.
168
+ Findings land in the merged Step 4 plan as band-E items, applied in that repo
169
+ and shipped by sync. New focus filter: `/multi-agent:refactor dev-toolkit`.
170
+ - **`/multi-agent:sync` Step 3d**: ships the dev-toolkit MCP server when it
171
+ moved (dirty tree, unpushed commits, or an untagged version). Seven ship
172
+ gates run before anything leaves the machine, including a `tools/list`
173
+ stdio handshake that must answer with a non-zero tool count, an
174
+ advertised-count match against README and `package.json`, an
175
+ `npm pack --dry-run` check that every runtime `tools/*/` directory is inside
176
+ `files[]`, and a version-contract check against the minimums pipeline skills
177
+ declare. Publish goes to the registry from that repo's `publishConfig`
178
+ through a throwaway `--userconfig` built from the `npm` logical Keychain key.
179
+ Outside autopilot / `release` it asks first; `/multi-agent:sync dev-toolkit`
180
+ runs only this step.
181
+ - **`global.devToolkit` preference** (schema + template): `enabled`, `label`,
182
+ `localPath`, `mcpServerName`, `packageName`, `registry`, `repoUrl`. Both
183
+ commands fall back to auto-detecting the repo from the `mcpServers`
184
+ registration when `localPath` is absent, and skip silently when nothing
185
+ resolves. No path is ever hardcoded.
186
+
187
+ - **`smoke-command-inventory.sh`**: the command count is now DERIVED from
188
+ `pipeline/commands/multi-agent/*/` and the prose must agree with the tree
189
+ (contract header, both sync surfaces, every command listed on all three, and a
190
+ `shared/core` skill counterpart per command). `smoke-generate-issue.sh` and
191
+ `smoke-review-readiness.sh` stopped asserting the literal `41` and now compare
192
+ against the derived count too.
193
+ - **`lint-mcp-refs.mjs`**: every `mcp__<server>__<tool>` reference in
194
+ `commands/`, `skills/` and `multi-agent-refs/` must name a known registered
195
+ MCP server, and when the companion toolkit resolves locally the referenced
196
+ `dev-toolkit` tools are checked against its live `tools/list`. Wired into
197
+ `npm test` and `npm run test:quick`.
198
+ - **`validate-prefs.mjs`**: validates `preferences-template.json` against
199
+ `prefs.schema.json` (hard failure) and the local preferences file (advisory,
200
+ `--strict-live` to enforce). Dev-only (ajv), excluded from the published
201
+ package so the runtime stays zero-dep.
202
+ - `design-check` is registered in the command inventory: contract list +
203
+ category row, both sync inventories, and the Copilot mirror. Inventory is 42
204
+ commands.
205
+
206
+ ### Fixed
207
+
208
+ - **Every `mcp__dev_toolkit__*` reference is now `mcp__dev-toolkit__*`** (55
209
+ lines across 10 files). A host composes MCP tool names as
210
+ `mcp__<registered-server-name>__<tool>` and the server registers as
211
+ `dev-toolkit`, so the snake_case form named tools that do not exist. The worst
212
+ case was silent: `design-check`'s `allowed-tools` allowlist matched nothing, so
213
+ the skill was denied the tools it needs, and `smoke-compliance-skills.sh`
214
+ asserted the wrong spelling and kept the gate green.
215
+ - `prefs.schema.json` accepted neither the template it describes nor a real
216
+ preferences file. Now declared: `global.modelFallback`, the `_*Template`
217
+ documentation blocks, nullable `defaultJiraKey`, `keychainMapping.figma_pat` /
218
+ `figma_user` / `claude_oauth_token` / `claude_oauth_token_fallback` (all four
219
+ resolved by shipped flows), project-level `componentDevWorkflow`, and a
220
+ `defaultReviewers` ceiling that fits real reviewer groups (10 -> 40).
221
+ - `global.derivedSkillSources` is now declared in `prefs.schema.json`. It was
222
+ used by refactor Step 0b and shipped in the preferences template, but the
223
+ strict (`additionalProperties: false`) global block rejected it.
224
+ - `/multi-agent:sync` Step 3d prefers the toolkit repo's own gate script
225
+ (`npm run gates`) over the inline gate list, so the definition lives in the
226
+ repo being shipped and the two cannot drift apart.
227
+
228
+ ---
229
+
17
230
  ## [12.5.0] - 2026-07-24
18
231
 
19
232
  Repo learning loop: repeated runs on the same repo produce better and cheaper
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  [![Zero Dependencies](https://img.shields.io/badge/dependencies-0-brightgreen)](https://github.com/mmerterden/multi-agent-pipeline/blob/main/package.json)
7
7
  [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/mmerterden/multi-agent-pipeline/badge)](https://scorecard.dev/viewer/?uri=github.com/mmerterden/multi-agent-pipeline)
8
8
 
9
- An 8-phase AI development pipeline for **Claude Code** and **Copilot CLI**. Drives a Jira issue or GitHub URL to a merged PR in one command analysis → plan → TDD → review → test → commit → PR with multi-repo orchestration, a plan-approval gate, CLI-aware parallel review, and store-compliance checks. Component and Figma-to-code work is dispatched to the per-stack marketplace plugins (iOS/SwiftUI, Android/Compose) rather than bundled, so component skills live in one place.
9
+ An 8-phase AI development pipeline for **Claude Code** and **Copilot CLI**. Drives a Jira issue or GitHub URL to a merged PR in one command - analysis → plan → TDD → review → test → commit → PR - with multi-repo orchestration, a plan-approval gate, CLI-aware parallel review, and store-compliance checks. Component and Figma-to-code work is dispatched to the per-stack marketplace plugins (iOS/SwiftUI, Android/Compose) rather than bundled, so component skills live in one place.
10
10
 
11
11
  Runs natively on Claude Code and Copilot CLI. macOS / Linux / Windows. Zero runtime dependencies.
12
12
 
@@ -20,7 +20,7 @@ npx @mmerterden/multi-agent-pipeline install --all # Claude Code + Copilot CLI
20
20
  /multi-agent:setup # keychain token scan + git identity + default stack
21
21
  ```
22
22
 
23
- Run a task the input type is auto-detected:
23
+ Run a task - the input type is auto-detected:
24
24
 
25
25
  ```bash
26
26
  /multi-agent "PROJ-1234" # Jira id → fetch, plan, build
@@ -31,7 +31,7 @@ Run a task — the input type is auto-detected:
31
31
  /multi-agent:issue # browse unassigned GitHub issues → pick
32
32
  ```
33
33
 
34
- Every input runs the same short intake **account → (repo) → maturity check → dev-context** then enters Phase 0. A Jira id or GitHub URL is fetched and maturity-checked *before* any code is written; free-text skips the fetch and goes straight to planning. Multi-repo tasks add extra repos at the dev-context step.
34
+ Every input runs the same short intake - **account → (repo) → maturity check → dev-context** - then enters Phase 0. A Jira id or GitHub URL is fetched and maturity-checked *before* any code is written; free-text skips the fetch and goes straight to planning. Multi-repo tasks add extra repos at the dev-context step.
35
35
 
36
36
  Add `autopilot` to skip confirmations, `--dev` for the fast dev-only path, or `--local` to work on the current branch without a worktree (e.g. `/multi-agent:autopilot "PROJ-1234"`).
37
37
 
@@ -41,18 +41,18 @@ Update later with `/multi-agent:update`. Uninstall (tokens preserved) with `npx
41
41
 
42
42
  One command runs 8 phases, with a gate between the risky ones:
43
43
 
44
- - **0 · Init** parse the input (Jira id / GitHub URL / free text), pick account + repo(s), fetch the issue, run a maturity check.
45
- - **1 · Analysis** detect the stack, scan the codebase, map impact (Opus).
46
- - **2 · Plan** write a task breakdown and **stop for your approval** before touching code.
47
- - **3 · Dev** TDD: failing test → code → green, following the repo's style + the active stack skills.
48
- - **4 · Review** deterministic gates (build / lint / test / secret-scan) must pass first, then a **CLI-aware parallel review** Claude Code runs 2 models (Fable + Sonnet), Copilot CLI runs 3 (GPT-5.4 + Opus + Sonnet) and a **Fable triage** keeps only actionable findings; blockers loop back to Phase 3.
49
- - **5 · Test** build + run the suite; success is required (no faked passes).
50
- - **6 · Commit/PR** conventional commit, push (must succeed), open a PR (`Ref: #N`, never auto-close).
51
- - **7 · Report** technical summary + a Jira comment with test scenarios, posted through the channels layer.
44
+ - **0 · Init** - parse the input (Jira id / GitHub URL / free text), pick account + repo(s), fetch the issue, run a maturity check.
45
+ - **1 · Analysis** - detect the stack, scan the codebase, map impact (Opus).
46
+ - **2 · Plan** - write a task breakdown and **stop for your approval** before touching code.
47
+ - **3 · Dev** - TDD: failing test → code → green, following the repo's style + the active stack skills.
48
+ - **4 · Review** - deterministic gates (build / lint / test / secret-scan) must pass first, then a **CLI-aware parallel review** - Claude Code runs 2 models (Fable + Sonnet), Copilot CLI runs 3 (GPT-5.4 + Opus + Sonnet) - and a **Fable triage** keeps only actionable findings; blockers loop back to Phase 3.
49
+ - **5 · Test** - build + run the suite; success is required (no faked passes).
50
+ - **6 · Commit/PR** - conventional commit, push (must succeed), open a PR (`Ref: #N`, never auto-close).
51
+ - **7 · Report** - technical summary + a Jira comment with test scenarios, posted through the channels layer.
52
52
 
53
- Under the hood: each task runs in its own **git worktree** (or the current branch with `:local`), commits use the **git identity routed from the repo's origin URL**, and **multi-repo** tasks get per-repo worktrees plus an integration build. Tokens stay in the OS keychain; nothing is committed or logged. `/multi-agent:review` can also review an existing GitHub/Bitbucket PR per-finding inline comments anchored to `file:line` + an explicit Approve / Needs-Work state.
53
+ Under the hood: each task runs in its own **git worktree** (or the current branch with `:local`), commits use the **git identity routed from the repo's origin URL**, and **multi-repo** tasks get per-repo worktrees plus an integration build. Tokens stay in the OS keychain; nothing is committed or logged. `/multi-agent:review` can also review an existing GitHub/Bitbucket PR - per-finding inline comments anchored to `file:line` + an explicit Approve / Needs-Work state.
54
54
 
55
- The discipline behind all of this bounded loops, evidence gates, token-budgeted phase docs, immutable tests, fresh-context handoffs is catalogued in [docs/engineering.md](./docs/engineering.md). The full feature list lives in [docs/features.md](./docs/features.md).
55
+ The discipline behind all of this - bounded loops, evidence gates, token-budgeted phase docs, immutable tests, fresh-context handoffs - is catalogued in [docs/engineering.md](./docs/engineering.md). The full feature list lives in [docs/features.md](./docs/features.md).
56
56
 
57
57
  ## Modes
58
58
 
@@ -64,7 +64,7 @@ The discipline behind all of this — bounded loops, evidence gates, token-budge
64
64
  | Local | `/multi-agent:local "task"` | Full pipeline, current branch (no worktree) |
65
65
  | Finish | `/multi-agent:finish` | Run the review→test→commit→report tail over local work |
66
66
 
67
- Helpers: `setup`, `status`, `resume #N`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `create-jira`. Full list: `/multi-agent:help`.
67
+ Helpers: `setup`, `status`, `resume #N`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `create-jira`, `save`, `routines`, `forget`. Full list: `/multi-agent:help`.
68
68
 
69
69
  ## Stacks
70
70
 
@@ -78,7 +78,7 @@ This enables the matching plugin (+ the shared `ai-common` plugin) in the repo's
78
78
 
79
79
  ## Tool support
80
80
 
81
- The pipeline runs natively on **Claude Code** and **Copilot CLI** both install from the same `pipeline/skills/` source and get identical coverage.
81
+ The pipeline runs natively on **Claude Code** and **Copilot CLI** - both install from the same `pipeline/skills/` source and get identical coverage.
82
82
 
83
83
  | Tool | Flag | Notes |
84
84
  |---|---|---|
@@ -89,7 +89,7 @@ Filter skills by stack with `--platform=ios\|android\|all`.
89
89
 
90
90
  ## Tokens & integrations
91
91
 
92
- `setup` scans your OS keychain and maps each token by a **logical name** (e.g. `jira`) to its real keychain entry the pipeline resolves tokens through that mapping (`credential-store.sh`), so literal keychain names never appear in synced files. Tokens stay in the keychain (macOS Keychain / Windows Credential Manager / Linux libsecret), are **never committed or logged**, and are all **optional** the pipeline asks for any it needs at Phase 0.
92
+ `setup` scans your OS keychain and maps each token by a **logical name** (e.g. `jira`) to its real keychain entry - the pipeline resolves tokens through that mapping (`credential-store.sh`), so literal keychain names never appear in synced files. Tokens stay in the keychain (macOS Keychain / Windows Credential Manager / Linux libsecret), are **never committed or logged**, and are all **optional** - the pipeline asks for any it needs at Phase 0.
93
93
 
94
94
  | Token | Used for | Phase |
95
95
  |---|---|---|
@@ -107,15 +107,15 @@ The **secret scan** runs as a `PreToolUse` hook on Claude Code (hard-blocks a co
107
107
 
108
108
  ## Platform support
109
109
 
110
- 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 18 / 20 / 22.
110
+ 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 18 / 20 / 22.
111
111
 
112
112
  ## Companion repos
113
113
 
114
114
  | Repo | What it is |
115
115
  |---|---|
116
116
  | [`mmerterden/multi-agent-plugins`](https://github.com/mmerterden/multi-agent-plugins) | Marketplace of per-stack skill toolkits (iOS / Android / Frontend / Backend + common). `/multi-agent:stack` enables the matching plugin. |
117
- | [`mmerterden/dev-toolkit-mcp`](https://github.com/mmerterden/dev-toolkit-mcp) | MCP server for UI testing / simulator capture / xcodebuild powers the Phase 5 UI Bug Hunter. `npx @mmerterden/dev-toolkit-mcp` |
117
+ | [`mmerterden/dev-toolkit-mcp`](https://github.com/mmerterden/dev-toolkit-mcp) | MCP server for UI testing / simulator capture / xcodebuild - powers the Phase 5 UI Bug Hunter. `npx @mmerterden/dev-toolkit-mcp` |
118
118
 
119
119
  ## License
120
120
 
121
- MIT see [LICENSE](./LICENSE). Security issues: see [SECURITY.md](./SECURITY.md) (do not open public issues for vulnerabilities).
121
+ MIT - see [LICENSE](./LICENSE). Security issues: see [SECURITY.md](./SECURITY.md) (do not open public issues for vulnerabilities).
@@ -6,38 +6,38 @@ End-to-end guide for generating production-ready UI components from Figma design
6
6
 
7
7
  ## What you get
8
8
 
9
- - **One command** `/multi-agent <figma-url-or-issue>` produces a complete component: Configuration + View + Modifiers + Preview + README + three layers of tests + Code Connect + wiki doc.
10
- - **Platform-agnostic orchestration** classification happens once in Phase 0; the orchestrator picks the right code generator for iOS or Android based on `figmaConfig.project.platform`.
11
- - **Multi-repo aware** components span multiple repos (tokens in `common`, view in `components`, docs in `wiki`). The orchestrator sequences writes correctly.
12
- - **Non-blocking side effects** wiki generation + Jira sync run as augmentations; failures log and Phase 7 continues.
13
- - **Cross-cutting integration skills** Phase 3D detects content patterns (`figma-form-integration`, `figma-price-integration`, `figma-ui-patterns`) and interaction patterns (`figma-navigation`, `figma-overlays`, `figma-bottom-sheets`) and dispatches the matching skill. All are **native-SwiftUI-first**; a project's own navigation/overlay/sheet system is used only when `figmaConfig.ui.{navigationSystem,overlaySystem,sheetSystem}` declares one (absent → stock SwiftUI: `NavigationStack`, `.alert`/`.sheet(item:)`, `.presentationDetents`). Generic across SwiftUI codebases.
14
- - **Evolve an existing component** `figma-evolve-component` reconciles a shipped component against current Figma (drift-heal) and additively extends it for a new need, behind a mandatory human gate distinct from a fresh build, `figma-mend` (rebuild), and `figma-fix` (review bug).
9
+ - **One command** - `/multi-agent <figma-url-or-issue>` - produces a complete component: Configuration + View + Modifiers + Preview + README + three layers of tests + Code Connect + wiki doc.
10
+ - **Platform-agnostic orchestration** - classification happens once in Phase 0; the orchestrator picks the right code generator for iOS or Android based on `figmaConfig.project.platform`.
11
+ - **Multi-repo aware** - components span multiple repos (tokens in `common`, view in `components`, docs in `wiki`). The orchestrator sequences writes correctly.
12
+ - **Non-blocking side effects** - wiki generation + Jira sync run as augmentations; failures log and Phase 7 continues.
13
+ - **Cross-cutting integration skills** - Phase 3D detects content patterns (`figma-form-integration`, `figma-price-integration`, `figma-ui-patterns`) and interaction patterns (`figma-navigation`, `figma-overlays`, `figma-bottom-sheets`) and dispatches the matching skill. All are **native-SwiftUI-first**; a project's own navigation/overlay/sheet system is used only when `figmaConfig.ui.{navigationSystem,overlaySystem,sheetSystem}` declares one (absent → stock SwiftUI: `NavigationStack`, `.alert`/`.sheet(item:)`, `.presentationDetents`). Generic across SwiftUI codebases.
14
+ - **Evolve an existing component** - `figma-evolve-component` reconciles a shipped component against current Figma (drift-heal) and additively extends it for a new need, behind a mandatory human gate - distinct from a fresh build, `figma-mend` (rebuild), and `figma-fix` (review bug).
15
15
 
16
16
  ## How it runs
17
17
 
18
- When multi-agent Phase 0 classifies a task as `component` (Figma URL in description, or figma-driven instruction path), Phase 3 delegates the entire phase to the enabled `ai-<platform>-engineering-toolkit` marketplace plugin's component skill (`create-component`, fallback `create-ui-component`) via the Skill tool. Component skills live in the plugin marketplace, not the pipeline. The dispatch layer records a coarse component-build row in `state.phases["3"].subphases[]` multi-agent's phase-tracker reads that array with no special case. The subphase list below describes the flow the plugin skill runs internally.
18
+ When multi-agent Phase 0 classifies a task as `component` (Figma URL in description, or figma-driven instruction path), Phase 3 delegates the entire phase to the enabled `ai-<platform>-engineering-toolkit` marketplace plugin's component skill (`create-component`, fallback `create-ui-component`) via the Skill tool. Component skills live in the plugin marketplace, not the pipeline. The dispatch layer records a coarse component-build row in `state.phases["3"].subphases[]` - multi-agent's phase-tracker reads that array with no special case. The subphase list below describes the flow the plugin skill runs internally.
19
19
 
20
20
  ### Internal phase order
21
21
 
22
22
  ```
23
- 3.0 init node-id parse, registry lookup, worktree confirm
24
- 3.1 gather Figma API / MCP fetch, variant properties, token extraction
25
- 3.2a testing identifiers semantic tags (platform-agnostic)
26
- 3.2b localisation string keys → common repo
27
- 3.2c accessibility a11y metadata; platform-aware output
28
- 3.2d analytics event keys
29
- 3.3 token mapping Figma values → design token symbols
30
- 3.4a Configuration pure value type (SwiftUI struct / Compose @Immutable data class)
31
- 3.4b View SwiftUI body / @Composable fun
32
- 3.4c Docs FIGMA.md (iOS) / README.md (Android)
33
- 3.4d Preview variant grid
34
- 3.4e Modifiers fluent API
35
- 3.5a structural tests ViewInspector / Compose Testing
36
- 3.5b snapshot tests SnapshotTesting / Paparazzi
37
- 3.5c unit tests configuration semantics + behavioural
38
- 3.6 Code Connect .figma.swift / .figma.kt registration
39
- 3.7 wiki 4-adapter dispatch (submodule / in-repo / github-wiki / separate-repo)
40
- 3.8 cleanup artifact pruning, state finalize
23
+ 3.0 init - node-id parse, registry lookup, worktree confirm
24
+ 3.1 gather - Figma API / MCP fetch, variant properties, token extraction
25
+ 3.2a testing identifiers - semantic tags (platform-agnostic)
26
+ 3.2b localisation - string keys → common repo
27
+ 3.2c accessibility - a11y metadata; platform-aware output
28
+ 3.2d analytics - event keys
29
+ 3.3 token mapping - Figma values → design token symbols
30
+ 3.4a Configuration - pure value type (SwiftUI struct / Compose @Immutable data class)
31
+ 3.4b View - SwiftUI body / @Composable fun
32
+ 3.4c Docs - FIGMA.md (iOS) / README.md (Android)
33
+ 3.4d Preview - variant grid
34
+ 3.4e Modifiers - fluent API
35
+ 3.5a structural tests - ViewInspector / Compose Testing
36
+ 3.5b snapshot tests - SnapshotTesting / Paparazzi
37
+ 3.5c unit tests - configuration semantics + behavioural
38
+ 3.6 Code Connect - .figma.swift / .figma.kt registration
39
+ 3.7 wiki - 4-adapter dispatch (submodule / in-repo / github-wiki / separate-repo)
40
+ 3.8 cleanup - artifact pruning, state finalize
41
41
  ```
42
42
 
43
43
  Each subphase emits a `→ <verb> <object>` progress line per `refs/progress-contract.md`; multi-agent's phase-tracker renders them inline under the Phase 3 row.
@@ -71,7 +71,7 @@ Minimum viable config:
71
71
 
72
72
  Android projects swap the `build` section to `{ "gradleModule": ":components:button", "variant": "debug" }` and set `project.platform` to `"android"`.
73
73
 
74
- **Optional `ui` block UI interaction systems.** Consumed by the `figma-navigation` / `figma-overlays` / `figma-bottom-sheets` skills and Phase 4 review. Omit it (or set `mode: "native"`) and the pipeline generates stock SwiftUI (`NavigationStack`, `.alert`/`.sheet(item:)`, `.sheet`+`presentationDetents`). Set `mode: "custom"` to route to a project-supplied system by type name:
74
+ **Optional `ui` block - UI interaction systems.** Consumed by the `figma-navigation` / `figma-overlays` / `figma-bottom-sheets` skills and Phase 4 review. Omit it (or set `mode: "native"`) and the pipeline generates stock SwiftUI (`NavigationStack`, `.alert`/`.sheet(item:)`, `.sheet`+`presentationDetents`). Set `mode: "custom"` to route to a project-supplied system by type name:
75
75
 
76
76
  ```json
77
77
  "ui": {
@@ -97,7 +97,7 @@ Full contract: [`pipeline/multi-agent-refs/issue-jira-triad.md`](../pipeline/mul
97
97
  | Mode | Path layout | Push semantics |
98
98
  |---|---|---|
99
99
  | `submodule` | `{repos.wiki.path}/FigmaComponents/{Category}/{Name}/{Name}.md` | Commit into submodule's branch, push, update parent repo's pointer |
100
- | `in-repo` | `{repos.components.path}/.wiki/components/{Category}/{Name}.md` | No push ships with the component commit in Phase 6 |
100
+ | `in-repo` | `{repos.components.path}/.wiki/components/{Category}/{Name}.md` | No push - ships with the component commit in Phase 6 |
101
101
  | `github-wiki` | `{owner}/{repo}.wiki.git/{Category}/{Name}.md` | Clone the `.wiki.git`, commit, push |
102
102
  | `separate-repo` | Remote repo's configured branch | Clone to cache, commit, push |
103
103
 
@@ -124,14 +124,14 @@ Global settings that affect the figma pipeline:
124
124
  |---|---|---|
125
125
  | Phase 3 halts with "plugin not enabled" | The `ai-<platform>-engineering-toolkit` plugin is not enabled in this repo | Enable it in the repo's `.claude/settings.local.json` (`"ai-ios-engineering-toolkit@<marketplace>": true`) and reload the session |
126
126
  | `multi-agent:create-component` not found | Marketplace not installed / plugin disabled | Install the marketplace and enable the platform toolkit; dispatch tries `create-component` then `create-ui-component` |
127
- | Wiki adapter failure | Remote unreachable (separate-repo mode) | Adapter caches pending output; next run retries. Non-blocking Phase 7 continues. |
128
- | Jira auto-create hits 5xx | Transient Jira outage | Non-blocking pipeline continues without link. User can run `/multi-agent:channels` post-hoc to add it. |
127
+ | Wiki adapter failure | Remote unreachable (separate-repo mode) | Adapter caches pending output; next run retries. Non-blocking - Phase 7 continues. |
128
+ | Jira auto-create hits 5xx | Transient Jira outage | Non-blocking - pipeline continues without link. User can run `/multi-agent:channels` post-hoc to add it. |
129
129
  | Android gradle unresolved | `figmaConfig.build.gradleModule` not set | Populate the config; halt is intentional (no guessing) |
130
130
 
131
131
  ## Further reading
132
132
 
133
- - [`pipeline/multi-agent-refs/component-dispatch.md`](../pipeline/multi-agent-refs/component-dispatch.md) Phase 3 delegation contract.
134
- - [`pipeline/multi-agent-refs/wiki-capture.md`](../pipeline/multi-agent-refs/wiki-capture.md) Phase 7 wiki contract.
135
- - [`pipeline/multi-agent-refs/issue-jira-triad.md`](../pipeline/multi-agent-refs/issue-jira-triad.md) issue → jira → wiki triad contract.
136
- - [`pipeline/multi-agent-refs/progress-contract.md`](../pipeline/multi-agent-refs/progress-contract.md) live progress-line emission contract.
137
- - [`pipeline/multi-agent-refs/cross-cli-contract.md`](../pipeline/multi-agent-refs/cross-cli-contract.md) Claude ↔ Copilot CLI parity.
133
+ - [`pipeline/multi-agent-refs/component-dispatch.md`](../pipeline/multi-agent-refs/component-dispatch.md) - Phase 3 delegation contract.
134
+ - [`pipeline/multi-agent-refs/wiki-capture.md`](../pipeline/multi-agent-refs/wiki-capture.md) - Phase 7 wiki contract.
135
+ - [`pipeline/multi-agent-refs/issue-jira-triad.md`](../pipeline/multi-agent-refs/issue-jira-triad.md) - issue → jira → wiki triad contract.
136
+ - [`pipeline/multi-agent-refs/progress-contract.md`](../pipeline/multi-agent-refs/progress-contract.md) - live progress-line emission contract.
137
+ - [`pipeline/multi-agent-refs/cross-cli-contract.md`](../pipeline/multi-agent-refs/cross-cli-contract.md) - Claude ↔ Copilot CLI parity.
@@ -1,11 +1,11 @@
1
1
  # 1. CLI-aware parallel review with top-tier triage
2
2
 
3
- **Status:** Accepted · 2025 · Amended 2026-04 (CLI-aware reviewer set) · Amended 2026-07 (v10.6.0: Fable 5 restored Reviewer 1 and triage run on Fable on Claude Code; Copilot CLI pins Opus. "Opus" below reads as "the top tier of the day")
3
+ **Status:** Accepted · 2025 · Amended 2026-04 (CLI-aware reviewer set) · Amended 2026-07 (v10.6.0: Fable 5 restored - Reviewer 1 and triage run on Fable on Claude Code; Copilot CLI pins Opus. "Opus" below reads as "the top tier of the day")
4
4
 
5
5
  ## Context
6
6
 
7
7
  Code review is the phase where the pipeline most commonly ships wrong work. A
8
- single reviewer model whether Opus, Sonnet, or GPT systematically misses
8
+ single reviewer model - whether Opus, Sonnet, or GPT - systematically misses
9
9
  certain failure classes and hallucinates others. Worse, reviewer output tends
10
10
  to be noisy: style nitpicks, out-of-scope findings, and repeated observations
11
11
  across diffs.
@@ -20,26 +20,26 @@ We need a review stage that:
20
20
 
21
21
  Phase 4 runs **reviewers in parallel** on the same diff. The reviewer set is
22
22
  determined by the host CLI, because GPT-5.4 is only natively reachable from
23
- Copilot CLI Claude Code has no first-class GPT bridge, and round-tripping
23
+ Copilot CLI - Claude Code has no first-class GPT bridge, and round-tripping
24
24
  would add latency without improving signal.
25
25
 
26
26
  **Claude Code (2 parallel reviewers):**
27
27
 
28
- - **Opus** deep security and architecture focus
29
- - **Sonnet** quality, correctness, naming
28
+ - **Opus** - deep security and architecture focus
29
+ - **Sonnet** - quality, correctness, naming
30
30
 
31
31
  **Copilot CLI (3 parallel reviewers):**
32
32
 
33
- - **Opus** deep security and architecture focus
34
- - **GPT-5.4** edge cases and cross-provider diversity
35
- - **Sonnet** quality, correctness, naming
33
+ - **Opus** - deep security and architecture focus
34
+ - **GPT-5.4** - edge cases and cross-provider diversity
35
+ - **Sonnet** - quality, correctness, naming
36
36
 
37
37
  Their raw findings are then passed to a **separate Opus triage agent** that
38
38
  classifies each finding as `accepted`, `deferred`, or `rejected`. Only
39
39
  `accepted` blocking items loop back to Phase 3 for rework.
40
40
 
41
41
  Deterministic gates (build, lint, test, secret scan) run before any AI
42
- reviewer is invoked no point paying for review on code that doesn't build.
42
+ reviewer is invoked - no point paying for review on code that doesn't build.
43
43
 
44
44
  ## Consequences
45
45
 
@@ -47,7 +47,7 @@ Positive:
47
47
 
48
48
  - Three different model lineages each catch a different slice of issues.
49
49
  - The triage pass filters the noise that individual reviewers can't filter
50
- about themselves it has scope context from Phase 1/2 that single reviewers
50
+ about themselves - it has scope context from Phase 1/2 that single reviewers
51
51
  don't carry.
52
52
  - Hallucinated findings get rejected instead of looping the pipeline forever.
53
53
  - `validate-triage.mjs` enforces the triage output contract at runtime; a
@@ -61,7 +61,7 @@ Negative / costs:
61
61
  more expensive.
62
62
  - Triage agent introduces a single point of failure; validator + fallback
63
63
  (treat all findings as accepted after double-failure) bounds the damage.
64
- - Cross-provider (GPT) dependency on Copilot CLI if the provider is down,
64
+ - Cross-provider (GPT) dependency on Copilot CLI - if the provider is down,
65
65
  the pipeline continues with 2 reviewers (Opus + Sonnet) and a warning.
66
66
  - Cross-CLI asymmetry: Copilot CLI catches a slice of failures (edge cases
67
67
  via GPT diversity) that Claude Code's 2-model set misses. Accepted as a
@@ -70,7 +70,7 @@ Negative / costs:
70
70
  ## Alternatives Considered
71
71
 
72
72
  **Single reviewer (Opus only):** simpler, cheaper, but misses edge cases
73
- the other model lineages catch. Trialed in early v2 noticeable false
73
+ the other model lineages catch. Trialed in early v2 - noticeable false
74
74
  negatives on concurrency bugs.
75
75
 
76
76
  **Two reviewers + no triage:** cheaper still. Rejected because the raw
@@ -7,12 +7,12 @@
7
7
  The main 9-phase pipeline is TDD-centric. The Figma-to-SwiftUI workflow is
8
8
  config-driven (design tokens, Code Connect, Wiki generation) and does not
9
9
  map onto the red-green-refactor cycle. Earlier versions handled this with
10
- implicit branching in Phase 3 "if the task has a Figma URL, fork here".
10
+ implicit branching in Phase 3 - "if the task has a Figma URL, fork here".
11
11
 
12
12
  Implicit branches had three problems:
13
13
 
14
- 1. Hard to debug no single place where the fork was decided.
15
- 2. Silent failure when instruction files were missing or misnamed Phase 6
14
+ 1. Hard to debug - no single place where the fork was decided.
15
+ 2. Silent failure when instruction files were missing or misnamed - Phase 6
16
16
  would fall through to standard commit flow, losing Figma-specific steps.
17
17
  3. Phase 7 audit couldn't tell which branch was actually taken.
18
18
 
@@ -30,7 +30,7 @@ Phase 6 uses a **deterministic truth table** (documented at
30
30
  | ------------------- | -------------------------------- | ------ |
31
31
  | true | yes | Instruction-driven path |
32
32
  | true | no | Log error, set `instructionDrivenFallback=true`, use standard path |
33
- | false | | Standard path |
33
+ | false | - | Standard path |
34
34
 
35
35
  ## Consequences
36
36
 
@@ -40,7 +40,7 @@ Positive:
40
40
  - Missing instruction files fail loud (`instructionDrivenFallback` surfaced in
41
41
  Phase 7 report) instead of silent.
42
42
  - The Figma pipeline could be extracted to its own package without changing
43
- main pipeline code it just writes the flag + files, and the main pipeline
43
+ main pipeline code - it just writes the flag + files, and the main pipeline
44
44
  reads them.
45
45
 
46
46
  Negative:
@@ -1,6 +1,6 @@
1
1
  # 3. Unified `skills/shared/` for Claude Code + Copilot CLI
2
2
 
3
- **Status:** Accepted · 2026-04 (v3.5.0) · Amended 2026-04 (v5.3.3 internal `core/external/` split, install destination unchanged)
3
+ **Status:** Accepted · 2026-04 (v3.5.0) · Amended 2026-04 (v5.3.3 - internal `core/external/` split, install destination unchanged)
4
4
 
5
5
  ## Context
6
6
 
@@ -11,7 +11,7 @@ Consequences:
11
11
  - Claude users could not invoke `multi-agent-*` pipeline skills (they were
12
12
  Copilot-only).
13
13
  - Copilot users couldn't access iOS/SwiftUI guidance.
14
- - Two directories meant two places to add or update a skill drift was
14
+ - Two directories meant two places to add or update a skill - drift was
15
15
  inevitable, and unnoticed.
16
16
  - README claim "145 skills" was not accurate for either CLI.
17
17
 
@@ -33,7 +33,7 @@ Positive:
33
33
  - Adding a skill is now a single write.
34
34
  - Skill index (`pipeline/skills/shared/README.md`) auto-generates from a
35
35
  single source.
36
- - Unblocks the 4.0 single-source-for-commands-and-skills plan same
36
+ - Unblocks the 4.0 single-source-for-commands-and-skills plan - same
37
37
  directory structure, just needs content unification.
38
38
 
39
39
  Negative:
@@ -41,7 +41,7 @@ Negative:
41
41
  - Disk footprint per install is ~1.5× larger than before for users who
42
42
  only wanted iOS or only wanted web.
43
43
  - Some iOS skills are noise for backend-only users and vice versa.
44
- Mitigated by the categorized index easy to browse and ignore.
44
+ Mitigated by the categorized index - easy to browse and ignore.
45
45
 
46
46
  ## Alternatives Considered
47
47
 
@@ -49,7 +49,7 @@ Negative:
49
49
  the drift-risk but not the "which CLI gets what" asymmetry in the source.
50
50
  Hidden complexity.
51
51
 
52
- **Per-stack skill packs (`skills/ios/`, `skills/android/`, ) with
52
+ **Per-stack skill packs (`skills/ios/`, `skills/android/`, ...) with
53
53
  install-time filter:** tempting. Rejected for 3.5.0 because the install-time
54
54
  filter would need a stack detector exact enough to not exclude relevant
55
55
  cross-cutting skills. Revisit for 4.0.
@@ -10,8 +10,8 @@ compatibility puzzle. For a CLI tool that installs itself into user shells
10
10
  and runs with write access to `~/.claude/` and `~/.copilot/`, the blast
11
11
  radius of a compromised dependency is large.
12
12
 
13
- At the same time, some conveniences JSON Schema validators (`ajv`), YAML
14
- parsers (`yaml`), templating engines would be trivial to pull in and would
13
+ At the same time, some conveniences - JSON Schema validators (`ajv`), YAML
14
+ parsers (`yaml`), templating engines - would be trivial to pull in and would
15
15
  shorten a few scripts.
16
16
 
17
17
  ## Decision
@@ -26,7 +26,7 @@ Consequences:
26
26
  - `validate-triage.mjs`, `validate-{reviewer,analysis,planning}.mjs`,
27
27
  `write-state.mjs`, `migrate-state.mjs` all hand-roll their JSON Schema
28
28
  validation. Slower to write, but zero attack surface.
29
- - `validate-schemas.mjs` is a shallow checker catches "the schema file is
29
+ - `validate-schemas.mjs` is a shallow checker - catches "the schema file is
30
30
  itself malformed", doesn't deep-validate every instance. That's what the
31
31
  runtime validators are for.
32
32
  - Install is fast: `npm install` against the published package is a single
@@ -37,7 +37,7 @@ Consequences:
37
37
  Positive:
38
38
 
39
39
  - No supply-chain surface in the published package.
40
- - No Node version interop headaches Node 18+ core APIs are stable enough.
40
+ - No Node version interop headaches - Node 18+ core APIs are stable enough.
41
41
  - `npx @mmerterden/multi-agent-pipeline install` runs instantly from cold.
42
42
 
43
43
  Negative:
@@ -53,7 +53,7 @@ Negative:
53
53
  **Pull in `ajv` for real schema validation:** clean and standard. Rejected
54
54
  because of supply-chain surface + bundle bloat (adds ~200 kB gzipped).
55
55
 
56
- **Optional deps use `ajv` if installed, fall back otherwise:** too clever.
56
+ **Optional deps - use `ajv` if installed, fall back otherwise:** too clever.
57
57
  "Sometimes validated, sometimes not" is worse than either extreme.
58
58
 
59
59
  **Bundle dependencies into the published tarball:** would remove the install-