@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
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/prefs.schema.json",
4
- "title": "Multi-Agent Pipeline \u2014 multi-agent-preferences.json",
5
- "description": "User-level preferences. Written to $HOME/.claude/multi-agent-preferences.json. Never committed. Never synced to the open-source repo \u2014 may contain personal data.",
4
+ "title": "Multi-Agent Pipeline - multi-agent-preferences.json",
5
+ "description": "User-level preferences. Written to $HOME/.claude/multi-agent-preferences.json. Never committed. Never synced to the open-source repo - may contain personal data.",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
8
  "patternProperties": {
@@ -10,21 +10,11 @@
10
10
  "description": "Documentation-only blocks shipped in preferences-template.json (_figmaConfigTemplate, _derivedSkillSourcesTemplate, _devToolkitTemplate). Copy-paste examples, never read by the pipeline."
11
11
  }
12
12
  },
13
- "required": [
14
- "schemaVersion",
15
- "global",
16
- "projects"
17
- ],
13
+ "required": ["schemaVersion", "global", "projects"],
18
14
  "properties": {
19
15
  "schemaVersion": {
20
16
  "type": "string",
21
- "enum": [
22
- "2.0.0",
23
- "2.1.0",
24
- "2.2.0",
25
- "2.3.0",
26
- "2.4.0"
27
- ],
17
+ "enum": ["2.0.0", "2.1.0", "2.2.0", "2.3.0", "2.4.0"],
28
18
  "description": "v2.0.0: pre-v3.7. v2.1.0: v3.7+ adds identities[].servicePatMap, platformIdentityRouting, recentGroups, recentBranches, serviceStatus, settings, expanded keychainMapping. v2.2.0: v6.0.0 formalizes v5.7 / v5.8 additions (reportChannels, reportContent with technicalAnalysis, wikiScope, autopilotReportTimeoutSeconds) that had been running as 2.1.0 sub-migrations without a proper version bump."
29
19
  },
30
20
  "global": {
@@ -37,10 +27,7 @@
37
27
  "items": {
38
28
  "type": "object",
39
29
  "additionalProperties": false,
40
- "required": [
41
- "name",
42
- "email"
43
- ],
30
+ "required": ["name", "email"],
44
31
  "properties": {
45
32
  "name": {
46
33
  "type": "string"
@@ -59,7 +46,7 @@
59
46
  "servicePatMap": {
60
47
  "type": "object",
61
48
  "additionalProperties": false,
62
- "description": "v2.1.0+. Maps a service name to the Keychain key name this identity owns for that service. Enables cross-identity isolation \u2014 corporate identity's Jira PAT is not accidentally used for personal repos.",
49
+ "description": "v2.1.0+. Maps a service name to the Keychain key name this identity owns for that service. Enables cross-identity isolation - corporate identity's Jira PAT is not accidentally used for personal repos.",
63
50
  "properties": {
64
51
  "jira": {
65
52
  "type": "string"
@@ -81,7 +68,7 @@
81
68
  },
82
69
  "firebase": {
83
70
  "type": "string",
84
- "description": "Firebase JSON (base64-encoded). project_id is parsed from the decoded JSON \u2014 no separate firebase_project entry."
71
+ "description": "Firebase JSON (base64-encoded). project_id is parsed from the decoded JSON - no separate firebase_project entry."
85
72
  },
86
73
  "fortify": {
87
74
  "type": "string"
@@ -97,7 +84,7 @@
97
84
  "gitIdentities": {
98
85
  "type": "array",
99
86
  "deprecated": true,
100
- "description": "DEPRECATED in v2.1.0 \u2014 renamed to 'identities'. Migration script converts automatically. Kept in schema temporarily for migration compatibility.",
87
+ "description": "DEPRECATED in v2.1.0 - renamed to 'identities'. Migration script converts automatically. Kept in schema temporarily for migration compatibility.",
101
88
  "items": {
102
89
  "type": "object",
103
90
  "additionalProperties": true
@@ -109,112 +96,61 @@
109
96
  "description": "Maps logical token names to actual Keychain item names. Pipeline looks up tokens via `security find-generic-password -s <mapped-name>` (or `pipeline/lib/credential-store.sh get` cross-platform). Covered keys: jira, bitbucket, bitbucket_token, bitbucket_user, github, confluence, figma, figma_pat, figma_user, figma_mcp, fortify, graylog, firebase, jenkins, npm, claude_oauth_token, claude_oauth_token_fallback.",
110
97
  "properties": {
111
98
  "jira": {
112
- "type": [
113
- "string",
114
- "null"
115
- ]
99
+ "type": ["string", "null"]
116
100
  },
117
101
  "bitbucket": {
118
- "type": [
119
- "string",
120
- "null"
121
- ],
102
+ "type": ["string", "null"],
122
103
  "description": "Legacy alias for bitbucket_token."
123
104
  },
124
105
  "bitbucket_token": {
125
- "type": [
126
- "string",
127
- "null"
128
- ]
106
+ "type": ["string", "null"]
129
107
  },
130
108
  "bitbucket_user": {
131
- "type": [
132
- "string",
133
- "null"
134
- ]
109
+ "type": ["string", "null"]
135
110
  },
136
111
  "github": {
137
- "type": [
138
- "string",
139
- "null"
140
- ]
112
+ "type": ["string", "null"]
141
113
  },
142
114
  "confluence": {
143
- "type": [
144
- "string",
145
- "null"
146
- ]
115
+ "type": ["string", "null"]
147
116
  },
148
117
  "figma": {
149
- "type": [
150
- "string",
151
- "null"
152
- ]
118
+ "type": ["string", "null"]
153
119
  },
154
120
  "figma_mcp": {
155
- "type": [
156
- "string",
157
- "null"
158
- ]
121
+ "type": ["string", "null"]
159
122
  },
160
123
  "fortify": {
161
- "type": [
162
- "string",
163
- "null"
164
- ]
124
+ "type": ["string", "null"]
165
125
  },
166
126
  "graylog": {
167
- "type": [
168
- "string",
169
- "null"
170
- ]
127
+ "type": ["string", "null"]
171
128
  },
172
129
  "figma_pat": {
173
- "type": [
174
- "string",
175
- "null"
176
- ],
130
+ "type": ["string", "null"],
177
131
  "description": "Figma Personal Access Token. Tier 2 of the Figma access chain (REST API) resolves this key."
178
132
  },
179
133
  "figma_user": {
180
- "type": [
181
- "string",
182
- "null"
183
- ],
134
+ "type": ["string", "null"],
184
135
  "description": "Figma account identifier, when the REST flow needs it alongside figma_pat."
185
136
  },
186
137
  "claude_oauth_token": {
187
- "type": [
188
- "string",
189
- "null"
190
- ],
138
+ "type": ["string", "null"],
191
139
  "description": "Claude Code OAuth token used by headless / scheduled runs."
192
140
  },
193
141
  "claude_oauth_token_fallback": {
194
- "type": [
195
- "string",
196
- "null"
197
- ],
142
+ "type": ["string", "null"],
198
143
  "description": "Secondary OAuth token used when the primary is rate-limited or expired."
199
144
  },
200
145
  "firebase": {
201
- "type": [
202
- "string",
203
- "null"
204
- ],
146
+ "type": ["string", "null"],
205
147
  "description": "Firebase JSON (base64-encoded). project_id is parsed from the decoded JSON."
206
148
  },
207
149
  "jenkins": {
208
- "type": [
209
- "string",
210
- "null"
211
- ]
150
+ "type": ["string", "null"]
212
151
  },
213
152
  "npm": {
214
- "type": [
215
- "string",
216
- "null"
217
- ],
153
+ "type": ["string", "null"],
218
154
  "description": "NPM registry token (npm.pkg.github.com or npmjs.com). Used by package publish flow."
219
155
  }
220
156
  }
@@ -222,10 +158,7 @@
222
158
  "tokenScripts": {
223
159
  "type": "object",
224
160
  "additionalProperties": {
225
- "type": [
226
- "string",
227
- "null"
228
- ]
161
+ "type": ["string", "null"]
229
162
  },
230
163
  "default": {},
231
164
  "description": "Maps service ids to user-owned token generation scripts (absolute paths, personal - never synced). Used by the Phase 0 token pre-flight: figma_mcp silent renewal reads the .figma-oauth.json next to tokenScripts.figma_mcp; the 'Regenerate now (script)' option runs the script itself."
@@ -255,9 +188,7 @@
255
188
  {
256
189
  "type": "object",
257
190
  "additionalProperties": false,
258
- "required": [
259
- "path"
260
- ],
191
+ "required": ["path"],
261
192
  "properties": {
262
193
  "path": {
263
194
  "type": "string"
@@ -287,9 +218,7 @@
287
218
  "items": {
288
219
  "type": "object",
289
220
  "additionalProperties": false,
290
- "required": [
291
- "branch"
292
- ],
221
+ "required": ["branch"],
293
222
  "properties": {
294
223
  "branch": {
295
224
  "type": "string"
@@ -347,9 +276,7 @@
347
276
  "items": {
348
277
  "type": "object",
349
278
  "additionalProperties": false,
350
- "required": [
351
- "repos"
352
- ],
279
+ "required": ["repos"],
353
280
  "properties": {
354
281
  "label": {
355
282
  "type": "string",
@@ -381,9 +308,7 @@
381
308
  "items": {
382
309
  "type": "object",
383
310
  "additionalProperties": false,
384
- "required": [
385
- "repoSet"
386
- ],
311
+ "required": ["repoSet"],
387
312
  "properties": {
388
313
  "repoSet": {
389
314
  "type": "array",
@@ -403,11 +328,7 @@
403
328
  },
404
329
  "platform": {
405
330
  "type": "string",
406
- "enum": [
407
- "ios",
408
- "android",
409
- "mixed"
410
- ]
331
+ "enum": ["ios", "android", "mixed"]
411
332
  },
412
333
  "hostScheme": {
413
334
  "type": "string",
@@ -439,11 +360,7 @@
439
360
  },
440
361
  "lastResult": {
441
362
  "type": "string",
442
- "enum": [
443
- "success",
444
- "failed",
445
- "skipped"
446
- ]
363
+ "enum": ["success", "failed", "skipped"]
447
364
  }
448
365
  }
449
366
  },
@@ -451,14 +368,11 @@
451
368
  },
452
369
  "serviceStatus": {
453
370
  "type": "object",
454
- "description": "v2.1.0+. Ephemeral per-service reachability cache. TTL 5 minutes (settings.serviceStatusCacheSeconds). Each service is independent \u2014 Jira may be reachable while Bitbucket is not.",
371
+ "description": "v2.1.0+. Ephemeral per-service reachability cache. TTL 5 minutes (settings.serviceStatusCacheSeconds). Each service is independent - Jira may be reachable while Bitbucket is not.",
455
372
  "additionalProperties": {
456
373
  "type": "object",
457
374
  "additionalProperties": false,
458
- "required": [
459
- "ok",
460
- "checkedAt"
461
- ],
375
+ "required": ["ok", "checkedAt"],
462
376
  "properties": {
463
377
  "ok": {
464
378
  "type": "boolean"
@@ -532,10 +446,7 @@
532
446
  }
533
447
  },
534
448
  "defaultJiraKey": {
535
- "type": [
536
- "string",
537
- "null"
538
- ],
449
+ "type": ["string", "null"],
539
450
  "description": "Default Jira project key used for placeholder replacement. null until /multi-agent:setup onboards a Jira project."
540
451
  },
541
452
  "modelFallback": {
@@ -549,10 +460,7 @@
549
460
  "description": "Master switch for tier fallback."
550
461
  },
551
462
  "premiumTierUntil": {
552
- "type": [
553
- "string",
554
- "null"
555
- ],
463
+ "type": ["string", "null"],
556
464
  "description": "ISO date after which the premium tier is assumed gone. null = no expiry known."
557
465
  },
558
466
  "fallbackModel": {
@@ -569,7 +477,7 @@
569
477
  "hosts": {
570
478
  "type": "object",
571
479
  "additionalProperties": false,
572
- "description": "Corporate service hosts used by Jira / Confluence / Bitbucket / email-domain placeholders. Collected inline during Token Save Flow (Step 3.5) when a hosted-service token is added for the first time. Per-user, never committed \u2014 lives in ~/.claude/multi-agent-preferences.json only.",
480
+ "description": "Corporate service hosts used by Jira / Confluence / Bitbucket / email-domain placeholders. Collected inline during Token Save Flow (Step 3.5) when a hosted-service token is added for the first time. Per-user, never committed - lives in ~/.claude/multi-agent-preferences.json only.",
573
481
  "properties": {
574
482
  "jira": {
575
483
  "type": "string",
@@ -600,27 +508,27 @@
600
508
  "reportChannels": {
601
509
  "type": "object",
602
510
  "additionalProperties": false,
603
- "description": "v5.7+ \u2014 Phase 7 / /multi-agent:channels kanal se\u00e7imi default'lar\u0131. Multi-select men\u00fcde tick'li gelecek kanallar. Her kanal ba\u011f\u0131ms\u0131z boolean. Autopilot Phase 7'de ALWAYS pauses (30-min timeout) \u2014 bu de\u011ferler sadece men\u00fcn\u00fcn \u00f6nceden se\u00e7ili halini belirler.",
511
+ "description": "v5.7+ - Phase 7 / /multi-agent:channels kanal se\u00e7imi default'lar\u0131. Multi-select men\u00fcde tick'li gelecek kanallar. Her kanal ba\u011f\u0131ms\u0131z boolean. Autopilot Phase 7'de ALWAYS pauses (30-min timeout) - bu de\u011ferler sadece men\u00fcn\u00fcn \u00f6nceden se\u00e7ili halini belirler.",
604
512
  "properties": {
605
513
  "pr": {
606
514
  "type": "boolean",
607
515
  "default": true,
608
- "description": "PR description update (replace/append). Default ON \u2014 en yayg\u0131n kanal."
516
+ "description": "PR description update (replace/append). Default ON - en yayg\u0131n kanal."
609
517
  },
610
518
  "jira": {
611
519
  "type": "boolean",
612
520
  "default": true,
613
- "description": "Jira comment on linked issue. Default ON \u2014 task'a jiraId varsa tick'li gelir."
521
+ "description": "Jira comment on linked issue. Default ON - task'a jiraId varsa tick'li gelir."
614
522
  },
615
523
  "confluence": {
616
524
  "type": "boolean",
617
525
  "default": false,
618
- "description": "Confluence page creation. Default OFF \u2014 bir kez parent page se\u00e7ince LRU'dan \u00f6ner."
526
+ "description": "Confluence page creation. Default OFF - bir kez parent page se\u00e7ince LRU'dan \u00f6ner."
619
527
  },
620
528
  "wiki": {
621
529
  "type": "boolean",
622
530
  "default": false,
623
- "description": "Component wiki pages (Case A scope multi-select). Default OFF \u2014 taskType=component + figmaConfig.wiki.enabled gerekli, yoksa men\u00fcde greyed out."
531
+ "description": "Component wiki pages (Case A scope multi-select). Default OFF - taskType=component + figmaConfig.wiki.enabled gerekli, yoksa men\u00fcde greyed out."
624
532
  }
625
533
  },
626
534
  "default": {
@@ -633,7 +541,7 @@
633
541
  "reportContent": {
634
542
  "type": "object",
635
543
  "additionalProperties": false,
636
- "description": "v5.7+ \u2014 Phase 7 / /multi-agent:channels i\u00e7erik se\u00e7imi default'lar\u0131. Multi-select men\u00fcde tick'li gelecek content source'lar\u0131.",
544
+ "description": "v5.7+ - Phase 7 / /multi-agent:channels i\u00e7erik se\u00e7imi default'lar\u0131. Multi-select men\u00fcde tick'li gelecek content source'lar\u0131.",
637
545
  "properties": {
638
546
  "normalAnalysis": {
639
547
  "type": "boolean",
@@ -653,7 +561,7 @@
653
561
  "autoDiff": {
654
562
  "type": "boolean",
655
563
  "default": false,
656
- "description": "PR diff'ten auto-generate \u00f6zet (eski enrich behavior \u2014 root cause / solution / changed files / test scenarios). PR linked de\u011filse greyed out."
564
+ "description": "PR diff'ten auto-generate \u00f6zet (eski enrich behavior - root cause / solution / changed files / test scenarios). PR linked de\u011filse greyed out."
657
565
  },
658
566
  "manualNote": {
659
567
  "type": "boolean",
@@ -663,12 +571,12 @@
663
571
  "costSummary": {
664
572
  "type": "boolean",
665
573
  "default": false,
666
- "description": "v6.1.0+ \u2014 Per-phase token cost summary (phase name, tokens_in, tokens_out, est. USD). Source: phase-tracker.sh token tallies + optional OTel spans (MULTI_AGENT_OTEL_SPANS=1). Greyed out if tracker has no token data for the task. Opt-in \u2014 off by default so baseline PR body stays unchanged."
574
+ "description": "v6.1.0+ - Per-phase token cost summary (phase name, tokens_in, tokens_out, est. USD). Source: phase-tracker.sh token tallies + optional OTel spans (MULTI_AGENT_OTEL_SPANS=1). Greyed out if tracker has no token data for the task. Opt-in - off by default so baseline PR body stays unchanged."
667
575
  },
668
576
  "workSummary": {
669
577
  "type": "boolean",
670
578
  "default": false,
671
- "description": "v7.1.0+ \u2014 Executive 'Work Done' summary block. Distills the whole pipeline run into a single-screen section: task + branch + base + PR number, scope delivered (\u2705/\u23f3 per Phase 2 task), changed files with +/- counts (capped at 20 rows), review outcome (accepted/deferred/rejected counts + approved flag), and a one-line phase tick strip (0 Init \u2705 \u00b7 1 Analysis \u2705 \u00b7 \u2026). Source: `agent-state.json` + `phase-tracker.json` + `git diff --numstat` between `baseBranch`\u2026HEAD. Consumed by `render-work-summary.sh`. Greyed out if no state file exists for the task. Opt-in \u2014 off by default so baseline PR body stays unchanged."
579
+ "description": "v7.1.0+ - Executive 'Work Done' summary block. Distills the whole pipeline run into a single-screen section: task + branch + base + PR number, scope delivered (\u2705/\u23f3 per Phase 2 task), changed files with +/- counts (capped at 20 rows), review outcome (accepted/deferred/rejected counts + approved flag), and a one-line phase tick strip (0 Init \u2705 \u00b7 1 Analysis \u2705 \u00b7 ...). Source: `agent-state.json` + `phase-tracker.json` + `git diff --numstat` between `baseBranch`...HEAD. Consumed by `render-work-summary.sh`. Greyed out if no state file exists for the task. Opt-in - off by default so baseline PR body stays unchanged."
672
580
  }
673
581
  },
674
582
  "default": {
@@ -686,36 +594,22 @@
686
594
  "default": 1800,
687
595
  "minimum": 60,
688
596
  "maximum": 7200,
689
- "description": "v5.7+ \u2014 Phase 7'de autopilot always-pause men\u00fcs\u00fcnde kullan\u0131c\u0131 cevap vermezse session'\u0131 sonland\u0131rma s\u00fcresi (saniye). Default 1800 (30 dk). Timeout'ta external delivery aborted, internal capture (agent-log, telemetry, knowledge) yine \u00e7al\u0131\u015f\u0131r, session /multi-agent:resume ile devam ettirilebilir."
597
+ "description": "v5.7+ - Phase 7'de autopilot always-pause men\u00fcs\u00fcnde kullan\u0131c\u0131 cevap vermezse session'\u0131 sonland\u0131rma s\u00fcresi (saniye). Default 1800 (30 dk). Timeout'ta external delivery aborted, internal capture (agent-log, telemetry, knowledge) yine \u00e7al\u0131\u015f\u0131r, session /multi-agent:resume ile devam ettirilebilir."
690
598
  },
691
599
  "wikiScope": {
692
600
  "type": "array",
693
601
  "items": {
694
602
  "type": "string",
695
- "enum": [
696
- "main",
697
- "ios",
698
- "screenshots",
699
- "index"
700
- ]
603
+ "enum": ["main", "ios", "screenshots", "index"]
701
604
  },
702
- "default": [
703
- "main",
704
- "ios",
705
- "screenshots",
706
- "index"
707
- ],
708
- "description": "v5.7+ \u2014 Wiki Case A scope multi-select default'u. Component wiki dispatch'inde hangi artifact'lar yaz\u0131lacak: main (ana component sayfas\u0131), ios (iOS sub-page), screenshots (assets/ klas\u00f6r\u00fc), index (_Sidebar.md + ComponentImplementationStatus.md). Legacy wikiDefault=true \u2192 [main,ios,screenshots,index] migration; wikiDefault=false \u2192 [] (empty array = Wiki adapter Case B men\u00fcs\u00fcne d\u00fc\u015fer)."
605
+ "default": ["main", "ios", "screenshots", "index"],
606
+ "description": "v5.7+ - Wiki Case A scope multi-select default'u. Component wiki dispatch'inde hangi artifact'lar yaz\u0131lacak: main (ana component sayfas\u0131), ios (iOS sub-page), screenshots (assets/ klas\u00f6r\u00fc), index (_Sidebar.md + ComponentImplementationStatus.md). Legacy wikiDefault=true \u2192 [main,ios,screenshots,index] migration; wikiDefault=false \u2192 [] (empty array = Wiki adapter Case B men\u00fcs\u00fcne d\u00fc\u015fer)."
709
607
  },
710
608
  "autoJiraFromGithubIssue": {
711
609
  "type": "string",
712
- "enum": [
713
- "ask",
714
- "always",
715
- "never"
716
- ],
610
+ "enum": ["ask", "always", "never"],
717
611
  "default": "ask",
718
- "description": "Policy for the GitHub-issue Jira auto-create (WS-6 triad, Phase 0 Step 1). `ask` prompts the user when a GitHub issue has no Jira ID. `always` auto-creates silently (and patches the GitHub issue body with the link). `never` skips and uses the `feature/GH{issueNo}-kebab` branch. Autopilot treats `ask` as `always` \u2014 there is no interactive fallback when running unattended."
612
+ "description": "Policy for the GitHub-issue Jira auto-create (WS-6 triad, Phase 0 Step 1). `ask` prompts the user when a GitHub issue has no Jira ID. `always` auto-creates silently (and patches the GitHub issue body with the link). `never` skips and uses the `feature/GH{issueNo}-kebab` branch. Autopilot treats `ask` as `always` - there is no interactive fallback when running unattended."
719
613
  },
720
614
  "wikiToJiraComment": {
721
615
  "type": "boolean",
@@ -724,31 +618,21 @@
724
618
  },
725
619
  "promptLanguage": {
726
620
  "type": "string",
727
- "enum": [
728
- "en",
729
- "tr"
730
- ],
621
+ "enum": ["en", "tr"],
731
622
  "default": "en",
732
623
  "description": "Language used for user-facing INTERACTIVE pipeline copy: pickers (account, project, dev-context, base branch, branch name, maturity ack, channels), Phase 5 test prompt, Phase 6 local-checkout prompt, Phase 6 commit/PR confirmations, TaskCreate card subjects, and phase-banner.sh headers (`PHASE_LANG` resolves from this field via the `auto` sentinel). Canonical label table lives in `pipeline/skills/shared/multi-agent/SKILL.md`. External payloads stay English regardless of this setting: reviewer/triage system prompts, commit messages, PR titles/bodies, Jira comments, wiki content, agent-log.md payloads. Set via `/multi-agent:language prompt <en|tr>` or answered on first run by `/multi-agent:setup`."
733
624
  },
734
625
  "outputLanguage": {
735
626
  "type": "string",
736
- "enum": [
737
- "en",
738
- "tr"
739
- ],
627
+ "enum": ["en", "tr"],
740
628
  "default": "en",
741
629
  "description": "Language used for the assistant's NON-INTERACTIVE explanations, status updates, error messages, and pipeline-generated reports rendered to the user (e.g. `/multi-agent:help` body, `/multi-agent:status` table headers, summary blocks at the end of a run). Independent of `promptLanguage` so a user can have Turkish pickers but English summaries (or vice versa). External payloads (commits, PR/Jira/wiki) and skill-picker / confirmation / error UI exposed by the CLI host stay English regardless of this setting. Set via `/multi-agent:language output <en|tr>` or answered on first run by `/multi-agent:setup`."
742
630
  },
743
631
  "progressVerbosity": {
744
632
  "type": "string",
745
- "enum": [
746
- "quiet",
747
- "normal",
748
- "verbose"
749
- ],
633
+ "enum": ["quiet", "normal", "verbose"],
750
634
  "default": "normal",
751
- "description": "Verbosity of the live progress-line contract (`refs/progress-contract.md`). `quiet` shows only phase banners and user prompts (CI-friendly). `normal` shows banners + the canonical action set per phase \u2014 recommended for interactive use. `verbose` shows sub-agent internal actions, file-level reads, schema validations, retry internals \u2014 forced automatically when `mode: autopilot` is set in agent state so the run remains audit-grade when the user isn't watching live."
635
+ "description": "Verbosity of the live progress-line contract (`refs/progress-contract.md`). `quiet` shows only phase banners and user prompts (CI-friendly). `normal` shows banners + the canonical action set per phase - recommended for interactive use. `verbose` shows sub-agent internal actions, file-level reads, schema validations, retry internals - forced automatically when `mode: autopilot` is set in agent state so the run remains audit-grade when the user isn't watching live."
752
636
  },
753
637
  "triageCrossCheck": {
754
638
  "type": "object",
@@ -769,11 +653,9 @@
769
653
  },
770
654
  "model": {
771
655
  "type": "string",
772
- "enum": [
773
- "sonnet"
774
- ],
656
+ "enum": ["sonnet"],
775
657
  "default": "sonnet",
776
- "description": "Cross-check model. Locked to Sonnet \u2014 Opus would just agree with Opus."
658
+ "description": "Cross-check model. Locked to Sonnet - Opus would just agree with Opus."
777
659
  },
778
660
  "blockOnDisagreement": {
779
661
  "type": "boolean",
@@ -785,7 +667,7 @@
785
667
  "reviewDisagreementRound": {
786
668
  "type": "boolean",
787
669
  "default": false,
788
- "description": "v6.1.0+ \u2014 Phase 4 Step 2.5 rebuttal round. When reviewers disagree (mixed blocker/approved verdict), each reviewer is re-prompted with the others' opposing arguments for one additional round before triage. Lifts signal quality on ambiguous findings at ~1\u00d7 Step 2 token cost. Off by default \u2014 flip for security-critical or release-branch reviews."
670
+ "description": "v6.1.0+ - Phase 4 Step 2.5 rebuttal round. When reviewers disagree (mixed blocker/approved verdict), each reviewer is re-prompted with the others' opposing arguments for one additional round before triage. Lifts signal quality on ambiguous findings at ~1\u00d7 Step 2 token cost. Off by default - flip for security-critical or release-branch reviews."
789
671
  },
790
672
  "updateCheck": {
791
673
  "type": "object",
@@ -830,10 +712,7 @@
830
712
  },
831
713
  "model": {
832
714
  "type": "string",
833
- "enum": [
834
- "sonnet",
835
- "opus"
836
- ],
715
+ "enum": ["sonnet", "opus"],
837
716
  "default": "sonnet",
838
717
  "description": "Verifier agent model. Writing a minimal repro test is mechanical work; Sonnet is the cost-sane default."
839
718
  },
@@ -1048,7 +927,7 @@
1048
927
  "devCritic": {
1049
928
  "type": "object",
1050
929
  "additionalProperties": false,
1051
- "description": "v8.6+ \u2014 Phase 3.5 evaluator-optimizer. After the Dev generator's last edit and BEFORE Phase 4 reviewers, dispatch agents/dev-critic.md (Sonnet by default) to run deterministic gates (build/lint/test/secrets) + the platform checklist (rules/*.md). Max 2 critic iterations, then escalate. Catches gate failures and checklist violations that would otherwise burn 2\u20133 Phase 4 reviewer calls + Opus triage. Off by default \u2014 introduces 1\u00d7 Sonnet call per Dev iteration; flip on for feature work, security-touching paths, or multi-file refactors. Source: Anthropic 'Building Effective Agents' (Dec 2024) evaluator-optimizer pattern.",
930
+ "description": "v8.6+ - Phase 3.5 evaluator-optimizer. After the Dev generator's last edit and BEFORE Phase 4 reviewers, dispatch agents/dev-critic.md (Sonnet by default) to run deterministic gates (build/lint/test/secrets) + the platform checklist (rules/*.md). Max 2 critic iterations, then escalate. Catches gate failures and checklist violations that would otherwise burn 2-3 Phase 4 reviewer calls + Opus triage. Off by default - introduces 1\u00d7 Sonnet call per Dev iteration; flip on for feature work, security-touching paths, or multi-file refactors. Source: Anthropic 'Building Effective Agents' (Dec 2024) evaluator-optimizer pattern.",
1052
931
  "properties": {
1053
932
  "enabled": {
1054
933
  "type": "boolean",
@@ -1060,13 +939,13 @@
1060
939
  "minimum": 1,
1061
940
  "maximum": 3,
1062
941
  "default": 2,
1063
- "description": "Critic loop cap. Round 1 = full pass. Round 2 = re-check round 1 failures only. Round 3 NOT recommended \u2014 escalate to user (interactive) or proceed with logged failure (autopilot)."
942
+ "description": "Critic loop cap. Round 1 = full pass. Round 2 = re-check round 1 failures only. Round 3 NOT recommended - escalate to user (interactive) or proceed with logged failure (autopilot)."
1064
943
  },
1065
944
  "model": {
1066
945
  "type": "string",
1067
946
  "enum": ["sonnet", "opus", "haiku"],
1068
947
  "default": "sonnet",
1069
- "description": "Critic model. Sonnet is the cost/quality default. Opus override only when diff > 500 LOC or touches security-critical paths. Haiku is too brittle for checklist reasoning \u2014 use only for trivial verification tasks."
948
+ "description": "Critic model. Sonnet is the cost/quality default. Opus override only when diff > 500 LOC or touches security-critical paths. Haiku is too brittle for checklist reasoning - use only for trivial verification tasks."
1070
949
  },
1071
950
  "minDiffLoc": {
1072
951
  "type": "integer",
@@ -1079,7 +958,7 @@
1079
958
  "diffRiskAdvisory": {
1080
959
  "type": "boolean",
1081
960
  "default": true,
1082
- "description": "v8.3+ \u2014 Phase 4 Step 1.75 advisory diff risk scoring. When enabled, `pipeline/scripts/diff-risk-score.mjs` runs before reviewer dispatch and the top-N risk-ranked files are injected into each reviewer's prompt as a priority hint (security paths, public API surfaces, untested source changes, schema migrations). Heuristic, deterministic, no LLM cost. Default ON \u2014 the run is sub-second and never gates the pipeline. Flip to false to skip the script and the prompt injection entirely."
961
+ "description": "v8.3+ - Phase 4 Step 1.75 advisory diff risk scoring. When enabled, `pipeline/scripts/diff-risk-score.mjs` runs before reviewer dispatch and the top-N risk-ranked files are injected into each reviewer's prompt as a priority hint (security paths, public API surfaces, untested source changes, schema migrations). Heuristic, deterministic, no LLM cost. Default ON - the run is sub-second and never gates the pipeline. Flip to false to skip the script and the prompt injection entirely."
1083
962
  },
1084
963
  "priorArtEnrichment": {
1085
964
  "type": "object",
@@ -1148,23 +1027,23 @@
1148
1027
  "testGap": {
1149
1028
  "type": "object",
1150
1029
  "additionalProperties": false,
1151
- "description": "v8.3+ \u2014 Phase 5 Step 0 advisory test-gap detector. Walks the diff for newly added public symbols and reports those without a paired test (or test method covering them). Heuristic, deterministic, no LLM cost.",
1030
+ "description": "v8.3+ - Phase 5 Step 0 advisory test-gap detector. Walks the diff for newly added public symbols and reports those without a paired test (or test method covering them). Heuristic, deterministic, no LLM cost.",
1152
1031
  "properties": {
1153
1032
  "enabled": {
1154
1033
  "type": "boolean",
1155
1034
  "default": true,
1156
- "description": "Master switch. Default ON \u2014 the scan is sub-second."
1035
+ "description": "Master switch. Default ON - the scan is sub-second."
1157
1036
  },
1158
1037
  "scanTree": {
1159
1038
  "type": "boolean",
1160
1039
  "default": false,
1161
- "description": "When true, also scan the repo tree (not just the diff) for existing tests that already mention the symbol \u2014 catches gaps that are technically covered by older tests outside the current diff. Slower but more accurate. Off by default \u2014 diff-only scan is sufficient for the common case."
1040
+ "description": "When true, also scan the repo tree (not just the diff) for existing tests that already mention the symbol - catches gaps that are technically covered by older tests outside the current diff. Slower but more accurate. Off by default - diff-only scan is sufficient for the common case."
1162
1041
  },
1163
1042
  "blockingThreshold": {
1164
1043
  "type": ["integer", "null"],
1165
1044
  "minimum": 1,
1166
1045
  "default": null,
1167
- "description": "If set, gaps where `important + blocking` count exceeds the threshold are treated as a Phase 4 rework finding (loops back to Phase 3). null = advisory only \u2014 Phase 5 prints the report but never gates."
1046
+ "description": "If set, gaps where `important + blocking` count exceeds the threshold are treated as a Phase 4 rework finding (loops back to Phase 3). null = advisory only - Phase 5 prints the report but never gates."
1168
1047
  },
1169
1048
  "promoteSeverity": {
1170
1049
  "type": "boolean",
@@ -1182,17 +1061,17 @@
1182
1061
  "perRepoMemory": {
1183
1062
  "type": "boolean",
1184
1063
  "default": false,
1185
- "description": "v6.2.0+ \u2014 Per-repo file-system memory layer. When enabled, Phase 0 reads `$PROJECT_ROOT/.multi-agent/memory/MEMORY.md` (if present) and injects it into the pipeline context, and Phase 7 dispatches a scoped synthesis subagent that may write new memory files to the same directory. Categories: user / feedback / project / reference (same taxonomy as the conversation-level auto-memory). Memory is local to each repo \u2014 never synced to remote, never committed to git (pipeline installer adds `.multi-agent/memory/` to `.gitignore`). Off by default \u2014 flip when working on a repo long enough that accumulated project context starts paying for itself."
1064
+ "description": "v6.2.0+ - Per-repo file-system memory layer. When enabled, Phase 0 reads `$PROJECT_ROOT/.multi-agent/memory/MEMORY.md` (if present) and injects it into the pipeline context, and Phase 7 dispatches a scoped synthesis subagent that may write new memory files to the same directory. Categories: user / feedback / project / reference (same taxonomy as the conversation-level auto-memory). Memory is local to each repo - never synced to remote, never committed to git (pipeline installer adds `.multi-agent/memory/` to `.gitignore`). Off by default - flip when working on a repo long enough that accumulated project context starts paying for itself."
1186
1065
  },
1187
1066
  "autopilotSafetyGate": {
1188
1067
  "type": "boolean",
1189
1068
  "default": true,
1190
- "description": "v7.0.0+ \u2014 Phase 2 autopilot safety classifier. Before autopilot mode consumes the user's approval skip, run `classify-plan-safety.mjs` over the approved plan. If the heuristic score \u2265 50 (e.g. >15 files touched, or security-path touch, or delete-without-test, or schema migration) inject a ONE-TIME pause asking for explicit manual approval \u2014 even in autopilot. Default ON because the risk of skipping this gate is asymmetric: a pause on a high-blast-radius plan costs seconds; a silent auto-merge of a bad one costs hours of rollback. Flip to `false` only for tightly-scoped autopilot workflows (e.g. batch figma component iteration) where the task class is known-safe."
1069
+ "description": "v7.0.0+ - Phase 2 autopilot safety classifier. Before autopilot mode consumes the user's approval skip, run `classify-plan-safety.mjs` over the approved plan. If the heuristic score \u2265 50 (e.g. >15 files touched, or security-path touch, or delete-without-test, or schema migration) inject a ONE-TIME pause asking for explicit manual approval - even in autopilot. Default ON because the risk of skipping this gate is asymmetric: a pause on a high-blast-radius plan costs seconds; a silent auto-merge of a bad one costs hours of rollback. Flip to `false` only for tightly-scoped autopilot workflows (e.g. batch figma component iteration) where the task class is known-safe."
1191
1070
  },
1192
1071
  "dynamicSkillLoading": {
1193
1072
  "type": "boolean",
1194
1073
  "default": false,
1195
- "description": "v7.0.0+ \u2014 Dynamic trigger-based skill loading. When enabled, the orchestrator reads `~/.claude/skills/.skills-index.json` after Phase 1 analysis and injects only the top-N matched skills into subagent prompts (via `match-skills.mjs`), instead of relying on eager-loaded SKILL.md bodies. Large token win on small tasks; no visible behavior change on big ones where many skills match. Requires either a full install (index is always shipped) or the `install.js --index-only` mode for users who want skill bodies fetched on demand. Off by default in v7.0 \u2014 flip to `true` to opt in; a future v7.x may flip the default once enough telemetry confirms no regression."
1074
+ "description": "v7.0.0+ - Dynamic trigger-based skill loading. When enabled, the orchestrator reads `~/.claude/skills/.skills-index.json` after Phase 1 analysis and injects only the top-N matched skills into subagent prompts (via `match-skills.mjs`), instead of relying on eager-loaded SKILL.md bodies. Large token win on small tasks; no visible behavior change on big ones where many skills match. Requires either a full install (index is always shipped) or the `install.js --index-only` mode for users who want skill bodies fetched on demand. Off by default in v7.0 - flip to `true` to opt in; a future v7.x may flip the default once enough telemetry confirms no regression."
1196
1075
  },
1197
1076
  "derivedSkillSources": {
1198
1077
  "type": "array",
@@ -1200,12 +1079,7 @@
1200
1079
  "items": {
1201
1080
  "type": "object",
1202
1081
  "additionalProperties": false,
1203
- "required": [
1204
- "label",
1205
- "localPath",
1206
- "upstreamPlugin",
1207
- "derivedFromVersion"
1208
- ],
1082
+ "required": ["label", "localPath", "upstreamPlugin", "derivedFromVersion"],
1209
1083
  "properties": {
1210
1084
  "label": {
1211
1085
  "type": "string",
@@ -1230,11 +1104,20 @@
1230
1104
  },
1231
1105
  "derivedFromVersion": {
1232
1106
  "type": "string",
1233
- "description": "Upstream version we last synced from. Bumped after a drift port is applied."
1107
+ "description": "Upstream version we last synced from, read from the manifest named by `upstreamVersionSource`. Bumped after a drift port is applied."
1108
+ },
1109
+ "upstreamVersionSource": {
1110
+ "enum": ["marketplace.json", "plugin.json"],
1111
+ "default": "marketplace.json",
1112
+ "description": "Which upstream manifest carries the authoritative version. Defaults to marketplace.json because that is what a marketplace consumer resolves; some upstreams keep plugin.json deliberately unused, so reading it silently records a version nobody ships. Recording from the wrong manifest is how an entry here sat at 0.7.0 while the marketplace said 0.6.0."
1113
+ },
1114
+ "upstreamLocalClone": {
1115
+ "type": "string",
1116
+ "description": "Working copy of the upstream repository, checked before the plugin cache. The cache under ~/.claude/plugins/cache is only as fresh as the last `claude marketplace update`, so it is a mirror and never the authority. A private upstream may also be unreachable over the API from the active account, in which case this clone is the only source."
1234
1117
  },
1235
1118
  "upstreamRepoUrl": {
1236
1119
  "type": "string",
1237
- "description": "Used only when the marketplace is not installed locally (WebFetch fallback)."
1120
+ "description": "Used when neither a local clone nor the installed marketplace is available (WebFetch / gh fallback)."
1238
1121
  }
1239
1122
  }
1240
1123
  }
@@ -1268,11 +1151,7 @@
1268
1151
  },
1269
1152
  "registry": {
1270
1153
  "type": "string",
1271
- "enum": [
1272
- "github-packages",
1273
- "npmjs",
1274
- "none"
1275
- ],
1154
+ "enum": ["github-packages", "npmjs", "none"],
1276
1155
  "default": "github-packages",
1277
1156
  "description": "Publish target for Step 3d. `none` means commit + push only, never publish. The concrete URL comes from the repo's publishConfig; the token comes from the `npm` logical Keychain key through a throwaway --userconfig."
1278
1157
  },
@@ -1288,9 +1167,7 @@
1288
1167
  "items": {
1289
1168
  "type": "object",
1290
1169
  "additionalProperties": false,
1291
- "required": [
1292
- "id"
1293
- ],
1170
+ "required": ["id"],
1294
1171
  "properties": {
1295
1172
  "id": {
1296
1173
  "type": "string",
@@ -1314,13 +1191,11 @@
1314
1191
  },
1315
1192
  "accounts": {
1316
1193
  "type": "array",
1317
- "description": "v7.4.0+. Per-account overrides \u2014 host, label, default platform. Resolved by account-resolver.sh by matching `id` (e.g. my-account). When unset, hosts fall back to global.hosts.{jira,bitbucket}.",
1194
+ "description": "v7.4.0+. Per-account overrides - host, label, default platform. Resolved by account-resolver.sh by matching `id` (e.g. my-account). When unset, hosts fall back to global.hosts.{jira,bitbucket}.",
1318
1195
  "items": {
1319
1196
  "type": "object",
1320
1197
  "additionalProperties": false,
1321
- "required": [
1322
- "id"
1323
- ],
1198
+ "required": ["id"],
1324
1199
  "properties": {
1325
1200
  "id": {
1326
1201
  "type": "string",
@@ -1343,12 +1218,7 @@
1343
1218
  },
1344
1219
  "defaultProvider": {
1345
1220
  "type": "string",
1346
- "enum": [
1347
- "github",
1348
- "bitbucket",
1349
- "gitlab",
1350
- "generic-git"
1351
- ]
1221
+ "enum": ["github", "bitbucket", "gitlab", "generic-git"]
1352
1222
  }
1353
1223
  }
1354
1224
  },
@@ -1378,14 +1248,11 @@
1378
1248
  "type": "string"
1379
1249
  },
1380
1250
  "maxItems": 10,
1381
- "description": "GitHub fallback reviewers \u2014 @user or org/team slug. Used only when no CODEOWNERS / branch protection surfaces reviewers."
1251
+ "description": "GitHub fallback reviewers - @user or org/team slug. Used only when no CODEOWNERS / branch protection surfaces reviewers."
1382
1252
  },
1383
1253
  "defaultPrMode": {
1384
1254
  "type": "string",
1385
- "enum": [
1386
- "draft",
1387
- "ready"
1388
- ],
1255
+ "enum": ["draft", "ready"],
1389
1256
  "description": "Last-used draft/ready choice, shown as the default on next prompt."
1390
1257
  },
1391
1258
  "baseBranch": {
@@ -1424,12 +1291,7 @@
1424
1291
  },
1425
1292
  "remoteType": {
1426
1293
  "type": "string",
1427
- "enum": [
1428
- "bitbucket",
1429
- "github",
1430
- "gitlab",
1431
- "generic-git"
1432
- ],
1294
+ "enum": ["bitbucket", "github", "gitlab", "generic-git"],
1433
1295
  "description": "Hint used when repo URL doesn't make platform obvious."
1434
1296
  },
1435
1297
  "taskCount": {