@mmerterden/multi-agent-pipeline 12.6.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 (271) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/README.md +18 -18
  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 +28 -28
  15. package/docs/performance.md +16 -16
  16. package/docs/recovery-guide.md +39 -39
  17. package/index.js +4 -4
  18. package/install/_common.mjs +5 -11
  19. package/install/_copilot-instructions.mjs +2 -2
  20. package/install/_dev-only-files.mjs +1 -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 +13 -10
  29. package/pipeline/commands/multi-agent/SKILL.md +1 -1
  30. package/pipeline/commands/multi-agent/analysis/SKILL.md +1 -1
  31. package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +1 -1
  32. package/pipeline/commands/multi-agent/autopilot/SKILL.md +1 -1
  33. package/pipeline/commands/multi-agent/build-optimize/SKILL.md +1 -1
  34. package/pipeline/commands/multi-agent/create-jira/SKILL.md +1 -1
  35. package/pipeline/commands/multi-agent/design-check/SKILL.md +1 -1
  36. package/pipeline/commands/multi-agent/dev/SKILL.md +1 -1
  37. package/pipeline/commands/multi-agent/dev-autopilot/SKILL.md +1 -1
  38. package/pipeline/commands/multi-agent/dev-local/SKILL.md +1 -1
  39. package/pipeline/commands/multi-agent/dev-local-autopilot/SKILL.md +1 -1
  40. package/pipeline/commands/multi-agent/diff-explain/SKILL.md +1 -1
  41. package/pipeline/commands/multi-agent/finish/SKILL.md +6 -6
  42. package/pipeline/commands/multi-agent/forget/SKILL.md +1 -1
  43. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -1
  44. package/pipeline/commands/multi-agent/help/SKILL.md +3 -3
  45. package/pipeline/commands/multi-agent/issue/SKILL.md +1 -1
  46. package/pipeline/commands/multi-agent/jira/SKILL.md +1 -1
  47. package/pipeline/commands/multi-agent/kill/SKILL.md +1 -1
  48. package/pipeline/commands/multi-agent/language/SKILL.md +1 -1
  49. package/pipeline/commands/multi-agent/local/SKILL.md +1 -1
  50. package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +1 -1
  51. package/pipeline/commands/multi-agent/log/SKILL.md +1 -1
  52. package/pipeline/commands/multi-agent/manual-test/SKILL.md +1 -1
  53. package/pipeline/commands/multi-agent/prune-logs/SKILL.md +1 -1
  54. package/pipeline/commands/multi-agent/purge/SKILL.md +1 -1
  55. package/pipeline/commands/multi-agent/refactor/SKILL.md +16 -8
  56. package/pipeline/commands/multi-agent/resume/SKILL.md +2 -2
  57. package/pipeline/commands/multi-agent/review/SKILL.md +1 -1
  58. package/pipeline/commands/multi-agent/review-issue/SKILL.md +1 -1
  59. package/pipeline/commands/multi-agent/review-jira/SKILL.md +1 -1
  60. package/pipeline/commands/multi-agent/routines/SKILL.md +1 -1
  61. package/pipeline/commands/multi-agent/save/SKILL.md +1 -1
  62. package/pipeline/commands/multi-agent/scan/SKILL.md +1 -1
  63. package/pipeline/commands/multi-agent/search/SKILL.md +1 -1
  64. package/pipeline/commands/multi-agent/setup/SKILL.md +2 -2
  65. package/pipeline/commands/multi-agent/stack/SKILL.md +3 -3
  66. package/pipeline/commands/multi-agent/status/SKILL.md +1 -1
  67. package/pipeline/commands/multi-agent/sync/SKILL.md +5 -5
  68. package/pipeline/commands/multi-agent/test/SKILL.md +1 -1
  69. package/pipeline/commands/multi-agent/uninstall/SKILL.md +1 -1
  70. package/pipeline/commands/multi-agent/update/SKILL.md +3 -3
  71. package/pipeline/eval/run-metrics-fixture.json +60 -13
  72. package/pipeline/lib/account-resolver.sh +1 -1
  73. package/pipeline/lib/channels-multi-repo.sh +1 -1
  74. package/pipeline/lib/context-link-extractor.sh +1 -1
  75. package/pipeline/lib/credential-store.sh +1 -1
  76. package/pipeline/lib/fetch-confluence.sh +1 -1
  77. package/pipeline/lib/fetch-crashlytics.sh +1 -1
  78. package/pipeline/lib/fetch-fortify.sh +1 -1
  79. package/pipeline/lib/fetch-graylog.sh +1 -1
  80. package/pipeline/lib/fetch-swagger.sh +1 -1
  81. package/pipeline/lib/issue-fetcher.sh +1 -1
  82. package/pipeline/lib/multi-repo-pipeline.sh +1 -1
  83. package/pipeline/lib/repo-cache.sh +1 -1
  84. package/pipeline/lib/submodule-detector.sh +1 -1
  85. package/pipeline/multi-agent-refs/component-dispatch.md +1 -1
  86. package/pipeline/multi-agent-refs/component-generation.md +121 -0
  87. package/pipeline/multi-agent-refs/cross-cli-contract.md +1 -1
  88. package/pipeline/multi-agent-refs/features/model-fallback.md +2 -2
  89. package/pipeline/multi-agent-refs/phases/phase-4-review.md +1 -1
  90. package/pipeline/preferences-template.json +5 -11
  91. package/pipeline/schemas/agent-state.schema.json +39 -9
  92. package/pipeline/schemas/analysis-output.schema.json +18 -4
  93. package/pipeline/schemas/analysis-spec.schema.json +120 -32
  94. package/pipeline/schemas/clarify-output.schema.json +15 -5
  95. package/pipeline/schemas/design-check-config.schema.json +32 -11
  96. package/pipeline/schemas/dev-critic-output.schema.json +20 -5
  97. package/pipeline/schemas/figma-project-config.schema.json +42 -10
  98. package/pipeline/schemas/learnings-ledger.schema.json +10 -2
  99. package/pipeline/schemas/migrations/figma-config-1.0.0-to-2.0.0.mjs +1 -4
  100. package/pipeline/schemas/migrations/prefs-2.0.0-to-2.1.0.mjs +24 -7
  101. package/pipeline/schemas/plan-todos.schema.json +6 -3
  102. package/pipeline/schemas/planning-output.schema.json +5 -1
  103. package/pipeline/schemas/prefs.schema.json +91 -229
  104. package/pipeline/schemas/test-gap.schema.json +5 -5
  105. package/pipeline/schemas/token-budget.json +8 -8
  106. package/pipeline/schemas/triage-corpus.schema.json +1 -1
  107. package/pipeline/scripts/aggregate-metrics.mjs +18 -6
  108. package/pipeline/scripts/build-skills-index.mjs +6 -2
  109. package/pipeline/scripts/build-stack-plugins.mjs +142 -39
  110. package/pipeline/scripts/check-derived-drift.mjs +196 -0
  111. package/pipeline/scripts/check-md-links.mjs +6 -2
  112. package/pipeline/scripts/classify-plan-safety.mjs +20 -7
  113. package/pipeline/scripts/cost-budget-check.mjs +2 -1
  114. package/pipeline/scripts/cost-table.json +1 -1
  115. package/pipeline/scripts/diff-explain.mjs +7 -3
  116. package/pipeline/scripts/diff-risk-score.mjs +13 -3
  117. package/pipeline/scripts/eval-golden-tasks-live.mjs +8 -3
  118. package/pipeline/scripts/eval-golden-tasks.mjs +21 -9
  119. package/pipeline/scripts/eval-intent.mjs +8 -4
  120. package/pipeline/scripts/eval-mine-corpus.mjs +14 -4
  121. package/pipeline/scripts/evidence-gate.mjs +7 -2
  122. package/pipeline/scripts/fixtures/install-layout.tsv +3 -3
  123. package/pipeline/scripts/gen-mode-dispatch.mjs +38 -21
  124. package/pipeline/scripts/gen-skills-index.mjs +18 -3
  125. package/pipeline/scripts/learning-curve.mjs +13 -3
  126. package/pipeline/scripts/learnings-ledger.mjs +103 -36
  127. package/pipeline/scripts/lint-mcp-refs.mjs +13 -2
  128. package/pipeline/scripts/lint-skills.mjs +20 -9
  129. package/pipeline/scripts/localize-commands.mjs +6 -1
  130. package/pipeline/scripts/match-skills.mjs +15 -4
  131. package/pipeline/scripts/migrate-prefs.mjs +33 -16
  132. package/pipeline/scripts/phase-tracker.sh +3 -1
  133. package/pipeline/scripts/repo-map.mjs +110 -64
  134. package/pipeline/scripts/review-scope.mjs +7 -1
  135. package/pipeline/scripts/routine-registry.mjs +4 -9
  136. package/pipeline/scripts/run-aggregator.mjs +11 -5
  137. package/pipeline/scripts/run-metrics.mjs +13 -8
  138. package/pipeline/scripts/run-smokes.mjs +57 -3
  139. package/pipeline/scripts/scorecard.mjs +258 -0
  140. package/pipeline/scripts/smoke-context-budget.sh +72 -0
  141. package/pipeline/scripts/smoke-model-fallback.sh +1 -1
  142. package/pipeline/scripts/smoke-no-mcp-in-dev-phases.sh +86 -7
  143. package/pipeline/scripts/smoke-own-punctuation.sh +103 -0
  144. package/pipeline/scripts/smoke-workflow-audit.sh +43 -11
  145. package/pipeline/scripts/smoke-write-state.sh +49 -5
  146. package/pipeline/scripts/test-gap-rules/android.json +11 -11
  147. package/pipeline/scripts/test-gap-rules/ios.json +16 -11
  148. package/pipeline/scripts/test-gap-rules/node.json +19 -7
  149. package/pipeline/scripts/test-gap-rules/python.json +10 -4
  150. package/pipeline/scripts/test-gap-scan.mjs +44 -12
  151. package/pipeline/scripts/test-integrity-gate.mjs +5 -1
  152. package/pipeline/scripts/token-budget-report.mjs +44 -21
  153. package/pipeline/scripts/triage-memory.mjs +126 -34
  154. package/pipeline/scripts/uninstall.mjs +74 -30
  155. package/pipeline/scripts/validate-analysis-doc.mjs +15 -5
  156. package/pipeline/scripts/validate-diff-risk.mjs +32 -18
  157. package/pipeline/scripts/validate-test-gap.mjs +17 -7
  158. package/pipeline/scripts/validate-triage.mjs +17 -5
  159. package/pipeline/scripts/write-state.mjs +32 -9
  160. package/pipeline/skills/.skills-index.json +91 -91
  161. package/pipeline/skills/shared/README.md +57 -57
  162. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +1 -1
  163. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +1 -1
  164. package/pipeline/skills/shared/core/multi-agent/SKILL.md +26 -279
  165. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +1 -1
  166. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +1 -1
  167. package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +1 -1
  168. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
  169. package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +1 -1
  170. package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +1 -1
  171. package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +1 -1
  172. package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +1 -1
  173. package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +1 -1
  174. package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +1 -1
  175. package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +1 -1
  176. package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
  177. package/pipeline/skills/shared/core/multi-agent-forget/SKILL.md +1 -1
  178. package/pipeline/skills/shared/core/multi-agent-garbage-collect/SKILL.md +1 -1
  179. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +1 -1
  180. package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +1 -1
  181. package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +1 -1
  182. package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +1 -1
  183. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +1 -1
  184. package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +1 -1
  185. package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +1 -1
  186. package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +1 -1
  187. package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +1 -1
  188. package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +1 -1
  189. package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +1 -1
  190. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +16 -8
  191. package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +1 -1
  192. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +1 -1
  193. package/pipeline/skills/shared/core/multi-agent-review-issue/SKILL.md +1 -1
  194. package/pipeline/skills/shared/core/multi-agent-review-jira/SKILL.md +1 -1
  195. package/pipeline/skills/shared/core/multi-agent-routines/SKILL.md +1 -1
  196. package/pipeline/skills/shared/core/multi-agent-save/SKILL.md +1 -1
  197. package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +1 -1
  198. package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +1 -1
  199. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +1 -1
  200. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +3 -3
  201. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +1 -1
  202. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +1 -1
  203. package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +1 -1
  204. package/pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md +1 -1
  205. package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +1 -1
  206. package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +1 -1
  207. package/pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md +4 -4
  208. package/pipeline/skills/shared/external/agentflow/SKILL.md +1 -1
  209. package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +1 -1
  210. package/pipeline/skills/shared/external/android_ui_verification/SKILL.md +1 -1
  211. package/pipeline/skills/shared/external/api-patterns/SKILL.md +1 -1
  212. package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +1 -1
  213. package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +1 -1
  214. package/pipeline/skills/shared/external/backlog/BACKLOG.md +1 -1
  215. package/pipeline/skills/shared/external/backlog/SKILL.md +12 -12
  216. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +1 -1
  217. package/pipeline/skills/shared/external/context-compression/SKILL.md +1 -1
  218. package/pipeline/skills/shared/external/council/SKILL.md +3 -3
  219. package/pipeline/skills/shared/external/css-modern/SKILL.md +1 -1
  220. package/pipeline/skills/shared/external/database-patterns/SKILL.md +1 -1
  221. package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +1 -1
  222. package/pipeline/skills/shared/external/docker-expert/SKILL.md +1 -1
  223. package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +1 -1
  224. package/pipeline/skills/shared/external/firebase/SKILL.md +1 -1
  225. package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +1 -1
  226. package/pipeline/skills/shared/external/help-skills/SKILL.md +1 -1
  227. package/pipeline/skills/shared/external/hig-components-content/SKILL.md +1 -1
  228. package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +1 -1
  229. package/pipeline/skills/shared/external/hig-components-status/SKILL.md +1 -1
  230. package/pipeline/skills/shared/external/hig-components-system/SKILL.md +1 -1
  231. package/pipeline/skills/shared/external/hig-foundations/SKILL.md +1 -1
  232. package/pipeline/skills/shared/external/hig-inputs/SKILL.md +1 -1
  233. package/pipeline/skills/shared/external/hig-patterns/SKILL.md +1 -1
  234. package/pipeline/skills/shared/external/hig-platforms/SKILL.md +1 -1
  235. package/pipeline/skills/shared/external/hig-technologies/SKILL.md +1 -1
  236. package/pipeline/skills/shared/external/html-semantic/SKILL.md +1 -1
  237. package/pipeline/skills/shared/external/humanizer/SKILL.md +1 -1
  238. package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +1 -1
  239. package/pipeline/skills/shared/external/ios-developer/SKILL.md +1 -1
  240. package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +1 -1
  241. package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +1 -1
  242. package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +1 -1
  243. package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +1 -1
  244. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +1 -1
  245. package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +1 -1
  246. package/pipeline/skills/shared/external/observability-engineer/SKILL.md +1 -1
  247. package/pipeline/skills/shared/external/python-patterns/SKILL.md +1 -1
  248. package/pipeline/skills/shared/external/react-best-practices/SKILL.md +1 -1
  249. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +1 -1
  250. package/pipeline/skills/shared/external/search-first/SKILL.md +2 -2
  251. package/pipeline/skills/shared/external/skill-creator/SKILL.md +12 -12
  252. package/pipeline/skills/shared/external/skill-creator/audit.md +21 -21
  253. package/pipeline/skills/shared/external/skill-creator/checklist.md +3 -3
  254. package/pipeline/skills/shared/external/skill-creator/examples.md +10 -10
  255. package/pipeline/skills/shared/external/skill-creator/label-check.md +17 -17
  256. package/pipeline/skills/shared/external/skill-creator/scripts/audit-panel.js +86 -50
  257. package/pipeline/skills/shared/external/skill-creator/template.md +9 -9
  258. package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +1 -1
  259. package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +1 -1
  260. package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +1 -1
  261. package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +1 -1
  262. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +1 -1
  263. package/pipeline/skills/shared/external/testing-backend/SKILL.md +1 -1
  264. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +1 -1
  265. package/pipeline/skills/shared/external/vue-composition/SKILL.md +1 -1
  266. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +1 -1
  267. package/pipeline/skills/shared/external/web-performance/SKILL.md +1 -1
  268. package/pipeline/skills/shared/external/web-testing/SKILL.md +1 -1
  269. package/pipeline/skills/shared/external/xcode-build-benchmark/schemas/build-benchmark.schema.json +9 -49
  270. package/pipeline/skills/skills-index.md +57 -57
  271. package/pipeline/scripts/smoke-plugin-validate.sh +0 -64
package/CHANGELOG.md CHANGED
@@ -16,6 +16,89 @@ Internal file-layout changes that don't affect the slash-command surface are sti
16
16
 
17
17
  ## [Unreleased]
18
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
+
19
102
  ## [12.6.0] - 2026-07-25
20
103
 
21
104
  Two threads. The design-check command gains a scenario inventory, a coverage
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
 
@@ -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-
@@ -11,7 +11,7 @@ instructions for phases not yet relevant, leaving less room for the actual
11
11
  code being worked on.
12
12
 
13
13
  Additionally, phase docs are the easiest part of the pipeline to inflate
14
- accidentally examples, prose, caveats pile up. Without a budget, phase
14
+ accidentally - examples, prose, caveats pile up. Without a budget, phase
15
15
  docs silently grow until they push useful content out of context.
16
16
 
17
17
  ## Decision
@@ -43,7 +43,7 @@ Positive:
43
43
  - Context window stays available for the code under review.
44
44
  - Budgets surface "this phase is getting bloated" early (warn) before they
45
45
  become blocking (max).
46
- - A PR that inflates a phase doc past `max` fails CI hard forcing function
46
+ - A PR that inflates a phase doc past `max` fails CI - hard forcing function
47
47
  against doc rot.
48
48
 
49
49
  Negative:
@@ -9,7 +9,7 @@ ADR-0003 (v3.5.0) collapsed the split `skills/claude/` + `skills/copilot/` into
9
9
  By v5.3.x the maintenance burden of the flat tree became visible in everyday work:
10
10
 
11
11
  - **Source navigation.** Browsing `pipeline/skills/shared/` on GitHub shows 148 sibling directories with no hint which ones are load-bearing for the pipeline vs. which ones are third-party imports.
12
- - **Code review cost.** Changes under `shared/` have very different risk profiles depending on which kind of skill changed. `multi-agent-sync/SKILL.md` is pipeline-critical any drift breaks cross-CLI parity. `ios-developer/SKILL.md` is a reference guide imported from upstream edits almost never affect pipeline behavior.
12
+ - **Code review cost.** Changes under `shared/` have very different risk profiles depending on which kind of skill changed. `multi-agent-sync/SKILL.md` is pipeline-critical - any drift breaks cross-CLI parity. `ios-developer/SKILL.md` is a reference guide imported from upstream - edits almost never affect pipeline behavior.
13
13
  - **Grep noise.** `grep -r skills/shared/` produces 148× the noise it should when searching for pipeline code.
14
14
  - **Audit findings.** The v5.3.0 audit flagged this as technical debt worth addressing once the pipeline stabilized.
15
15
 
@@ -19,14 +19,14 @@ Keep the single-write benefit of ADR-0003. Split the source layout into two subd
19
19
 
20
20
  ```
21
21
  pipeline/skills/shared/
22
- ├── core/ 21 multi-agent* orchestration skills (pipeline-critical)
23
- ├── external/ 127 iOS / Android / generic skills imported from upstream
24
- └── README.md skill index
22
+ ├── core/ - 21 multi-agent* orchestration skills (pipeline-critical)
23
+ ├── external/ - 127 iOS / Android / generic skills imported from upstream
24
+ └── README.md - skill index
25
25
  ```
26
26
 
27
27
  **Install destination is unchanged.** Both trees flatten into `~/.claude/skills/` and `~/.copilot/skills/`; skill discovery at runtime sees the same flat list of 148 skills regardless of where they live in source. ADR-0003's core decision ("same coverage on both CLIs") is preserved.
28
28
 
29
- `install.js` was updated to `copyDir(sharedCoreSrc, CLAUDE_SKILLS)` + `copyDir(sharedExternalSrc, CLAUDE_SKILLS)` two reads, same flat write.
29
+ `install.js` was updated to `copyDir(sharedCoreSrc, CLAUDE_SKILLS)` + `copyDir(sharedExternalSrc, CLAUDE_SKILLS)` - two reads, same flat write.
30
30
 
31
31
  ## Consequences
32
32
 
@@ -41,7 +41,7 @@ Negative:
41
41
 
42
42
  - `install.js` walks two source trees instead of one. Implementation cost: 6 lines.
43
43
  - Every smoke test and doc reference that hard-coded `pipeline/skills/shared/multi-agent-*/` as a path had to update to `pipeline/skills/shared/core/multi-agent-*/`. One-time sweep.
44
- - ADR-0003's "single source of truth" wording becomes "single install target from two logical sources" slightly more nuance to explain.
44
+ - ADR-0003's "single source of truth" wording becomes "single install target from two logical sources" - slightly more nuance to explain.
45
45
 
46
46
  ## Alternatives Considered
47
47