@mmerterden/multi-agent-pipeline 18.0.0 → 19.1.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 (234) hide show
  1. package/CHANGELOG.md +287 -0
  2. package/README.md +36 -20
  3. package/README.tr.md +14 -16
  4. package/docs/adr/0002-instruction-driven-flag.md +1 -0
  5. package/docs/adr/0005-lazy-phase-docs.md +11 -1
  6. package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +1 -0
  7. package/docs/adr/0010-own-code-graph.md +1 -0
  8. package/docs/adr/0014-six-phase-consolidation.md +134 -0
  9. package/docs/adr/README.md +2 -1
  10. package/docs/architecture.md +37 -38
  11. package/docs/best-practices.md +1 -1
  12. package/docs/ecosystem.md +46 -27
  13. package/docs/engineering.md +1 -1
  14. package/docs/facts.json +61 -0
  15. package/docs/features.md +55 -54
  16. package/docs/performance.md +5 -5
  17. package/docs/recovery-guide.md +17 -17
  18. package/docs/token-budget-history.md +3 -1
  19. package/index.js +2 -2
  20. package/install/_codex-agents.mjs +1 -1
  21. package/install/templates/claude-hooks.json +1 -1
  22. package/install/templates/codex-instructions.md +1 -1
  23. package/install/templates/copilot-instructions.md +28 -28
  24. package/manifest.json +234 -216
  25. package/package.json +2 -2
  26. package/pipeline/agents/dev-critic.md +7 -7
  27. package/pipeline/commands/figma-to-swiftui.md +1 -1
  28. package/pipeline/commands/multi-agent/SKILL.md +9 -9
  29. package/pipeline/commands/multi-agent/analysis/SKILL.md +15 -15
  30. package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +2 -2
  31. package/pipeline/commands/multi-agent/autopilot/SKILL.md +7 -7
  32. package/pipeline/commands/multi-agent/channels/SKILL.md +15 -15
  33. package/pipeline/commands/multi-agent/diff-explain/SKILL.md +6 -6
  34. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -1
  35. package/pipeline/commands/multi-agent/graph/SKILL.md +1 -1
  36. package/pipeline/commands/multi-agent/help/SKILL.md +62 -62
  37. package/pipeline/commands/multi-agent/language/SKILL.md +2 -2
  38. package/pipeline/commands/multi-agent/local/SKILL.md +11 -11
  39. package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +13 -13
  40. package/pipeline/commands/multi-agent/log/SKILL.md +2 -2
  41. package/pipeline/commands/multi-agent/manual-test/SKILL.md +9 -9
  42. package/pipeline/commands/multi-agent/model/SKILL.md +69 -0
  43. package/pipeline/commands/multi-agent/refactor/SKILL.md +3 -3
  44. package/pipeline/commands/multi-agent/resume/SKILL.md +4 -4
  45. package/pipeline/commands/multi-agent/resume-local/SKILL.md +19 -17
  46. package/pipeline/commands/multi-agent/review/SKILL.md +2 -2
  47. package/pipeline/commands/multi-agent/review-analysis/SKILL.md +1 -1
  48. package/pipeline/commands/multi-agent/route-off/SKILL.md +36 -0
  49. package/pipeline/commands/multi-agent/route-on/SKILL.md +74 -0
  50. package/pipeline/commands/multi-agent/route-status/SKILL.md +56 -0
  51. package/pipeline/commands/multi-agent/setup/SKILL.md +2 -2
  52. package/pipeline/commands/multi-agent/status/SKILL.md +5 -5
  53. package/pipeline/commands/multi-agent/steer/SKILL.md +2 -2
  54. package/pipeline/commands/multi-agent/sync/SKILL.md +12 -13
  55. package/pipeline/commands/multi-agent/test/SKILL.md +1 -1
  56. package/pipeline/lib/credential-inventory.sh +1 -1
  57. package/pipeline/lib/fetch-fortify.sh +1 -1
  58. package/pipeline/lib/model-dispatch.sh +140 -0
  59. package/pipeline/lib/model-rung.sh +142 -0
  60. package/pipeline/lib/outbound-gate.mjs +14 -0
  61. package/pipeline/lib/phase-schema.mjs +88 -0
  62. package/pipeline/lib/plan-todos.sh +5 -5
  63. package/pipeline/lib/route-state.sh +161 -0
  64. package/pipeline/lib/run-paths.sh +2 -2
  65. package/pipeline/multi-agent-refs/_account-picker.md +1 -1
  66. package/pipeline/multi-agent-refs/_dev-context.md +6 -6
  67. package/pipeline/multi-agent-refs/_input-parser.md +1 -1
  68. package/pipeline/multi-agent-refs/analysis/evidence.md +2 -11
  69. package/pipeline/multi-agent-refs/analysis/intake.md +7 -7
  70. package/pipeline/multi-agent-refs/analysis/locked.md +48 -22
  71. package/pipeline/multi-agent-refs/analysis/redesign.md +1 -1
  72. package/pipeline/multi-agent-refs/analysis/render.md +10 -10
  73. package/pipeline/multi-agent-refs/analysis/resolve.md +1 -1
  74. package/pipeline/multi-agent-refs/analysis/review.md +2 -2
  75. package/pipeline/multi-agent-refs/analysis/synthesis.md +13 -7
  76. package/pipeline/multi-agent-refs/analysis-template-corporate.md +9 -9
  77. package/pipeline/multi-agent-refs/analysis-template.md +19 -19
  78. package/pipeline/multi-agent-refs/android-guide.md +1 -1
  79. package/pipeline/multi-agent-refs/audit-guide.md +13 -13
  80. package/pipeline/multi-agent-refs/channels/issue-comment.md +2 -2
  81. package/pipeline/multi-agent-refs/channels/jira.md +3 -3
  82. package/pipeline/multi-agent-refs/channels/pr.md +4 -4
  83. package/pipeline/multi-agent-refs/channels/wiki.md +1 -1
  84. package/pipeline/multi-agent-refs/component-dispatch.md +8 -8
  85. package/pipeline/multi-agent-refs/conventions-defaults.md +2 -2
  86. package/pipeline/multi-agent-refs/cross-cli-contract.md +31 -6
  87. package/pipeline/multi-agent-refs/features/analysis-jira.md +1 -1
  88. package/pipeline/multi-agent-refs/features/autopilot-circuit-breaker.md +4 -4
  89. package/pipeline/multi-agent-refs/features/code-graph.md +5 -5
  90. package/pipeline/multi-agent-refs/features/design-conformance.md +1 -1
  91. package/pipeline/multi-agent-refs/features/dev-critic.md +3 -3
  92. package/pipeline/multi-agent-refs/features/doctor.md +3 -3
  93. package/pipeline/multi-agent-refs/features/external-context-injection.md +3 -3
  94. package/pipeline/multi-agent-refs/features/maturity-followup.md +3 -3
  95. package/pipeline/multi-agent-refs/features/model-fallback.md +41 -5
  96. package/pipeline/multi-agent-refs/features/plan-todos.md +1 -1
  97. package/pipeline/multi-agent-refs/features/repo-map.md +1 -1
  98. package/pipeline/multi-agent-refs/features/review-delta.md +3 -3
  99. package/pipeline/multi-agent-refs/features/review-multi-repo.md +2 -2
  100. package/pipeline/multi-agent-refs/features/scope-check.md +4 -4
  101. package/pipeline/multi-agent-refs/features/skill-conformance.md +2 -2
  102. package/pipeline/multi-agent-refs/features/stack-skill-routing.md +1 -1
  103. package/pipeline/multi-agent-refs/features/url-enrichment.md +1 -1
  104. package/pipeline/multi-agent-refs/features/verify-by-test.md +4 -4
  105. package/pipeline/multi-agent-refs/features/visual-evidence.md +19 -19
  106. package/pipeline/multi-agent-refs/features/worktree-finalize.md +6 -6
  107. package/pipeline/multi-agent-refs/issue-jira-triad.md +10 -10
  108. package/pipeline/multi-agent-refs/knowledge.md +11 -11
  109. package/pipeline/multi-agent-refs/multi-repo-integration-build.md +13 -13
  110. package/pipeline/multi-agent-refs/payload-contracts.md +8 -8
  111. package/pipeline/multi-agent-refs/phases/log-format.md +10 -10
  112. package/pipeline/multi-agent-refs/phases/modes.md +30 -30
  113. package/pipeline/multi-agent-refs/phases/operations.md +8 -8
  114. package/pipeline/multi-agent-refs/phases/phase-0-init.md +24 -24
  115. package/pipeline/multi-agent-refs/phases/phase-1-plan.md +599 -0
  116. package/pipeline/multi-agent-refs/phases/{phase-3-dev.md → phase-2-dev.md} +129 -49
  117. package/pipeline/multi-agent-refs/phases/{phase-4-review.md → phase-3-review.md} +225 -107
  118. package/pipeline/multi-agent-refs/phases/{phase-6-commit.md → phase-4-commit.md} +23 -23
  119. package/pipeline/multi-agent-refs/phases/{phase-7-report.md → phase-5-report.md} +29 -29
  120. package/pipeline/multi-agent-refs/phases.md +44 -48
  121. package/pipeline/multi-agent-refs/picker-contract.md +1 -1
  122. package/pipeline/multi-agent-refs/progress-contract.md +6 -6
  123. package/pipeline/multi-agent-refs/readiness-review.md +1 -1
  124. package/pipeline/multi-agent-refs/rules.md +7 -7
  125. package/pipeline/multi-agent-refs/swiftui-guide.md +2 -2
  126. package/pipeline/multi-agent-refs/tracker-contract.md +31 -32
  127. package/pipeline/multi-agent-refs/wiki-capture.md +14 -14
  128. package/pipeline/preferences-template.json +9 -1
  129. package/pipeline/rules/figma-pipeline.md +8 -8
  130. package/pipeline/rules/outside-the-pipeline.md +1 -1
  131. package/pipeline/schemas/agent-state.schema.json +50 -50
  132. package/pipeline/schemas/analysis-output.schema.json +3 -3
  133. package/pipeline/schemas/analysis-spec.schema.json +2 -2
  134. package/pipeline/schemas/autopilot-config.schema.json +1 -1
  135. package/pipeline/schemas/code-graph.schema.json +1 -1
  136. package/pipeline/schemas/criteria-manifest.schema.json +1 -1
  137. package/pipeline/schemas/dev-critic-output.schema.json +1 -1
  138. package/pipeline/schemas/diff-risk.schema.json +1 -1
  139. package/pipeline/schemas/figma-project-config.schema.json +1 -1
  140. package/pipeline/schemas/migrations/prefs-2.4.0-to-2.5.0.mjs +2 -2
  141. package/pipeline/schemas/migrations/prefs-2.6.0-to-2.7.0.mjs +31 -0
  142. package/pipeline/schemas/migrations/state-2.1.0-to-2.2.0.mjs +129 -0
  143. package/pipeline/schemas/phases.json +105 -0
  144. package/pipeline/schemas/plan-todos.schema.json +5 -5
  145. package/pipeline/schemas/planning-output.schema.json +1 -1
  146. package/pipeline/schemas/prefs.schema.json +102 -58
  147. package/pipeline/schemas/reviewer-output.schema.json +3 -3
  148. package/pipeline/schemas/route-config.schema.json +74 -0
  149. package/pipeline/schemas/scope-check.schema.json +1 -1
  150. package/pipeline/schemas/secret-patterns.json +124 -0
  151. package/pipeline/schemas/test-gap.schema.json +1 -1
  152. package/pipeline/schemas/token-budget.json +12 -18
  153. package/pipeline/schemas/triage-output.schema.json +6 -6
  154. package/pipeline/scripts/README.md +3 -3
  155. package/pipeline/scripts/_code-graph.mjs +2 -2
  156. package/pipeline/scripts/_run-paths.mjs +2 -2
  157. package/pipeline/scripts/_smoke-root.sh +1 -1
  158. package/pipeline/scripts/aggregate-metrics.mjs +1 -1
  159. package/pipeline/scripts/build-references.mjs +2 -2
  160. package/pipeline/scripts/bulk-read.sh +10 -1
  161. package/pipeline/scripts/capture-flush.sh +8 -8
  162. package/pipeline/scripts/capture-resume.sh +3 -3
  163. package/pipeline/scripts/classify-plan-safety.mjs +1 -1
  164. package/pipeline/scripts/cost-table.json +8 -1
  165. package/pipeline/scripts/diff-explain.mjs +1 -1
  166. package/pipeline/scripts/doctor.mjs +3 -3
  167. package/pipeline/scripts/gc-abandoned.sh +3 -3
  168. package/pipeline/scripts/gc-tmp.sh +1 -1
  169. package/pipeline/scripts/gc-worktrees.sh +1 -1
  170. package/pipeline/scripts/gen-facts.mjs +280 -0
  171. package/pipeline/scripts/gen-mode-dispatch.mjs +32 -37
  172. package/pipeline/scripts/gen-ref-toc.mjs +1 -1
  173. package/pipeline/scripts/graph-report.mjs +1 -1
  174. package/pipeline/scripts/jira-attach.sh +1 -1
  175. package/pipeline/scripts/learn-from-transcripts.mjs +1 -1
  176. package/pipeline/scripts/learning-curve.mjs +2 -2
  177. package/pipeline/scripts/log-metric.sh +17 -4
  178. package/pipeline/scripts/memory-save.sh +1 -1
  179. package/pipeline/scripts/migrate-prefs.mjs +22 -5
  180. package/pipeline/scripts/phase-banner.sh +20 -20
  181. package/pipeline/scripts/phase-tracker.sh +12 -12
  182. package/pipeline/scripts/plan-coverage-gate.mjs +2 -2
  183. package/pipeline/scripts/pre-commit-check.sh +30 -1
  184. package/pipeline/scripts/render-agent-log-cost.sh +1 -1
  185. package/pipeline/scripts/render-work-summary.sh +3 -3
  186. package/pipeline/scripts/review-file-filter.mjs +1 -1
  187. package/pipeline/scripts/run-aggregator.mjs +13 -6
  188. package/pipeline/scripts/run-metrics.mjs +1 -1
  189. package/pipeline/scripts/runs-index.mjs +11 -1
  190. package/pipeline/scripts/scan-skills.sh +26 -0
  191. package/pipeline/scripts/smoke-cross-cli-behavior.sh +6 -6
  192. package/pipeline/scripts/smoke-schema-validation.sh +26 -7
  193. package/pipeline/scripts/token-budget-report.mjs +13 -2
  194. package/pipeline/scripts/triage-memory.mjs +2 -2
  195. package/pipeline/scripts/validate-analysis-doc.mjs +274 -43
  196. package/pipeline/scripts/validate-planning.mjs +1 -1
  197. package/pipeline/scripts/validate-reviewer.mjs +1 -1
  198. package/pipeline/scripts/validate-state.mjs +45 -5
  199. package/pipeline/scripts/validate-triage.mjs +3 -3
  200. package/pipeline/scripts/verify-citations.mjs +1 -1
  201. package/pipeline/scripts/worktree-finalize.sh +5 -5
  202. package/pipeline/scripts/write-state.mjs +32 -0
  203. package/pipeline/skills/.skill-manifest.json +38 -22
  204. package/pipeline/skills/.skills-index.json +49 -5
  205. package/pipeline/skills/shared/README.md +10 -6
  206. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +8 -8
  207. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +8 -8
  208. package/pipeline/skills/shared/core/multi-agent/SKILL.md +81 -82
  209. package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +3 -3
  210. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +14 -14
  211. package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +5 -5
  212. package/pipeline/skills/shared/core/multi-agent-graph/SKILL.md +1 -1
  213. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +25 -23
  214. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +2 -2
  215. package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +2 -2
  216. package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +8 -8
  217. package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +6 -6
  218. package/pipeline/skills/shared/core/multi-agent-model/SKILL.md +71 -0
  219. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +3 -3
  220. package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +1 -1
  221. package/pipeline/skills/shared/core/multi-agent-resume-local/SKILL.md +7 -7
  222. package/pipeline/skills/shared/core/multi-agent-route-off/SKILL.md +39 -0
  223. package/pipeline/skills/shared/core/multi-agent-route-on/SKILL.md +76 -0
  224. package/pipeline/skills/shared/core/multi-agent-route-status/SKILL.md +59 -0
  225. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +1 -1
  226. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +5 -5
  227. package/pipeline/skills/shared/core/multi-agent-steer/SKILL.md +2 -2
  228. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +6 -5
  229. package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +1 -1
  230. package/pipeline/skills/shared/external/signal-community/SKILL.md +8 -1
  231. package/pipeline/skills/skills-index.md +8 -4
  232. package/pipeline/multi-agent-refs/phases/phase-1-analysis.md +0 -263
  233. package/pipeline/multi-agent-refs/phases/phase-2-planning.md +0 -344
  234. package/pipeline/multi-agent-refs/phases/phase-5-test.md +0 -182
package/CHANGELOG.md CHANGED
@@ -14,6 +14,293 @@ Internal file-layout changes that don't affect the slash-command surface are sti
14
14
 
15
15
  ---
16
16
 
17
+ ## [19.1.0] - 2026-09-20
18
+
19
+ Minor: the routing preference 19.0.0 shipped now reaches dispatch, and the
20
+ toolkit's three new tool families are reflected everywhere the pipeline counts
21
+ them.
22
+
23
+ ### Added
24
+
25
+ - **`pipeline/lib/model-dispatch.sh` - routing that changes the answer.**
26
+ 19.0.0 shipped `prefs.global.modelRouting` with a schema, four commands and a
27
+ status report, and nothing consulted it at dispatch time. A preference that is
28
+ written, validated and displayed but never read is worse than a missing one:
29
+ `route-status` said routing was on, the rules looked applied, and every call
30
+ went where it always went. Two call sites now ask: the subagent dispatch
31
+ contract in `skills/shared/core/multi-agent/SKILL.md`, and `bulk-read.sh`.
32
+
33
+ Precedence is `PHASE_MODEL_OVERRIDE` > a matching rule > persona
34
+ `preferredModel` > the global default. Routing sits below the per-dispatch
35
+ override on purpose: Phase 3 makes Reviewer 3 sonnet so the three reviewers
36
+ disagree, and a policy that could overrule that would turn a deliberate choice
37
+ into a suggestion.
38
+
39
+ The script never fails and never returns an empty rung - a router that can die
40
+ turns every call site into a place the run can die, for a feature that ships
41
+ disabled. Missing prefs, missing jq, unparseable JSON, an out-of-scope call
42
+ site and an unknown rung all return the caller's default, exit 0.
43
+
44
+ Two limits are enforced rather than documented. A rule preferring `fable`
45
+ falls past it while `modelFallback.fableEnabled` is false, so
46
+ `/multi-agent:model off` keeps meaning what it says. And a non-Anthropic rung
47
+ is refused for a subagent, because subagent dispatch belongs to the host - the
48
+ script says so on stderr instead of substituting an Anthropic rung and leaving
49
+ the user believing a rule worked that never could.
50
+ - `cost-table.json` rungs declare a `provider`. Without it every rung looks
51
+ alike and the subagent limit above cannot be checked at all.
52
+ - `smoke-model-dispatch.sh` (18 assertions). Half of them drive the router; the
53
+ other half assert the call sites invoke it, because a correct router nothing
54
+ calls is the same outage with better internals - which is exactly what 19.0.0
55
+ shipped.
56
+ - **Six analysis Locked decisions gained a gate.** 13 (Section 4 scenarios are
57
+ Gherkin), 14 (a goal owes a paired non-goal), 15 (a new non-SVG asset owes a
58
+ rationale), 17 (Section 9 may not write "other errors" in place of a status
59
+ code), 18 (a screenshot is embedded, not linked to a host that outlives
60
+ nothing), and 21 (References is the last numbered section). Each checks a
61
+ shape the template prescribes and keys off a structure only a real document
62
+ carries, so a minimal fixture is skipped rather than failed. The Gate status
63
+ count moves 11 -> 18, and the 18 that stay prose now say WHY in three groups:
64
+ run behaviour no document records, evidence gathering that happened before
65
+ rendering, and judgement about meaning.
66
+ - Nine anchors below Locked 25 in `smoke-locked-citations.sh`. The existing
67
+ anchors all sat above 25, which is where the v19 removal re-flowed the
68
+ numbering - and that is precisely why the older drift survived.
69
+
70
+ ### Fixed
71
+
72
+ - **Nine drifted Locked citations in `analysis-template.md`.** It cited 13 for
73
+ paired goals (14), 12 for Gherkin (13), 14 for the SVG default (15), 16 for
74
+ exhaustive response variants (17), 21 for the concept layer (22), 28 for the
75
+ SwiftUI preview (27), 18 for variant drilling (19), and "17 + 18" for the
76
+ design reference (18 + 19). A tenth cited Locked 17 for analytics PII, which
77
+ no decision covers at all - the rule stays, the number goes, because a number
78
+ a reader cannot look up is worse than none. The new anchors hold all of them.
79
+ - **Locked 33 was enforced all along and documented as prose.**
80
+ `build-references.mjs --check` runs its coverage gate and
81
+ `smoke-build-references.sh` tests it, but neither named the decision in a
82
+ failure message and the attribution check reads messages. Both name it now.
83
+ The same trap caught the new Locked 21 check on its first run: the attribution
84
+ scan reads an error message up to the first semicolon, and the message had one
85
+ in the middle.
86
+ - **write-state verifies the write after the rename, not only before it.** No
87
+ POSIX call renames a file conditionally on still holding a lock, so the
88
+ `stillOurs` check is a time-of-check and the rename is the time-of-use. The
89
+ writer now reads the file back and compares the `rev` on disk against the one
90
+ it just wrote; a different rev means another writer's rename landed on top,
91
+ and the writer exits 4 instead of 0. Reporting success while losing an update
92
+ is the one outcome that script exists to prevent, and a window it could not
93
+ see was the one place that could still happen. The clobber branch has no test:
94
+ staging it from a shell needs a hook inside the writer, and a test-only hook
95
+ in the file that guards state is the worse trade.
96
+
97
+ - **Stale phase numbers in eleven files.** `/multi-agent:review` recorded its
98
+ standalone runs under phase id 4; a tracker example in `phase-3-review.md`
99
+ drew `Phase 3 Dev`; `rules/figma-pipeline.md` carried the whole eight-phase
100
+ access matrix, including two rows for phases that no longer exist. Historical
101
+ files (CHANGELOG, ROADMAP entries, ADRs, migration headers) were left alone -
102
+ they narrate what was true then - and so were the separate phase namespaces
103
+ that `analysis/SKILL.md` and the Figma component flow use.
104
+
105
+ ### Changed
106
+
107
+ - Toolkit counts follow `multi-agent-toolkit-mcp` 3.13.0: **115 tools in 13
108
+ categories**, up from 99 in 10. The new families are a full-text context index
109
+ (FTS5 + bm25 over offloaded payloads), provider-backed research, and video key
110
+ frames. `docs/ecosystem.md` gained their rows, `docs/facts.json` regenerated,
111
+ and the MCP-server context-cost note in `doctor` and the prefs schema now
112
+ names the real number.
113
+ - `signal-community` records the second search path. The community-signal skill
114
+ carried a parity exemption because web search is not guaranteed on every host;
115
+ `research_search` runs over the MCP channel every host already speaks, so the
116
+ exemption now names the host's own search specifically and points at the
117
+ toolkit path as the preferred one.
118
+
119
+ ---
120
+
121
+ ## [19.0.0] - 2026-09-18
122
+
123
+ Major, because phase numbers are the contract and they moved. Eight phases
124
+ became six: two of the eight were doing the same work twice, and the count
125
+ itself was guarded by nothing.
126
+
127
+ Full reasoning, mapping and rejected alternatives:
128
+ [ADR-0014](./docs/adr/0014-six-phase-consolidation.md).
129
+
130
+ ### Changed
131
+
132
+ - **Six phases.** `0 Init`, `1 Plan`, `2 Dev`, `3 Review`, `4 Commit`,
133
+ `5 Report`. Analysis and Planning were already one decision - the depth
134
+ picker skipped them together and `onlyDevelop` described them as one unit -
135
+ and they are one phase now. Review Stage 1 became Dev's exit gate, which is
136
+ what removes the second build: Dev built and tee'd a log, then Review built
137
+ again, and nothing consumed the difference. The user test moved inside
138
+ Review, keeping its waiting state.
139
+ - **`pipeline/schemas/phases.json` is the phase contract.** The list existed as
140
+ eight independent copies, none derived from another. The generator, the run
141
+ index, the metrics logger and the token budget read it now, and comparison
142
+ thresholds that used to be literals (`phase >= 6` for "waiting on you", the
143
+ Short-run boundary) are named fields in it.
144
+ - **`smoke-phase-contract.sh`** is the gate that never existed. The phase count
145
+ appeared in 91 places across 40 files with nothing holding any of them; the
146
+ command count, the jq count and the persona count all had gates. It derives
147
+ the count from the contract and checks the generator's output, the token
148
+ budget, the state-schema bounds, every shipped surface that states a count,
149
+ the progress fractions in sample output and the named thresholds. Verified
150
+ both ways: a deliberately wrong contract fails it.
151
+ - **`smoke-no-mcp-in-dev-phases.sh` keeps `phase >= 2`, and the gate now
152
+ asserts that it is unchanged.** Figma MCP was reachable only in Analysis (1);
153
+ Analysis is inside Plan (1). The permitted set `{0, 1}` is identical either
154
+ way, so the threshold surviving a renumbering is a result of the mapping
155
+ rather than an oversight - and an edit that "corrects" it would widen access.
156
+ - **Analysis has one pipeline.** Lite mode is removed. It chose sections from a
157
+ fixed list scored on three signals while Locked 2 chooses them from evidence,
158
+ and the two disagreed in both directions: a small feature with rich business
159
+ rules lost Section 15 because it was not on the list, and a feature with no
160
+ API contract kept Section 9 because it was. 37 Locked decisions became 36.
161
+ - **Locked 2's numbering clause was wrong and is corrected.** It said numbering
162
+ re-flows `1..N`; Locked 30 threads ids across the document BY NUMBER
163
+ (`Section 15.1`, `Section 4.4`), so a re-flowed document sends every one of
164
+ those references to the wrong section. No emitted document ever re-flowed.
165
+ A rendered section keeps its canonical number, gaps included, and the
166
+ validator now checks what actually holds: numbers inside the template range,
167
+ ascending, no repeats.
168
+
169
+ ### Added
170
+
171
+ - **`/multi-agent:model`** turns the top rung on or off AND realigns
172
+ `costBudget.pricingModel` in the same write. The switch existed; the command
173
+ did not, and the pricing field it must move with was left to the user to
174
+ remember. It reports what the switch means on the host it runs on: a live
175
+ switch on Claude Code, a status report on Copilot CLI and Codex CLI.
176
+ - **`/multi-agent:route-on` · `:route-off` · `:route-status`** - policy-driven
177
+ model routing, shipping disabled. `scope` has no `host-session` member and
178
+ the schema enforces that: rewriting the host's base URL would route the
179
+ user's whole session, including work unrelated to this pipeline. `route-off`
180
+ keeps the rules, so `route-on` does not re-ask. `route-status` prints the
181
+ honest limit every time - a subagent cannot be sent to a non-Anthropic model,
182
+ because subagent dispatch belongs to the host.
183
+ - **`docs/facts.json`**, generated by `pipeline/scripts/gen-facts.mjs`: the
184
+ phase, command, skill and tool counts, derived rather than written. The
185
+ website read its own copies and said "8 faz + 51 komut" while the repo had
186
+ six phases and sixty commands. The tool count is asked of the toolkit's own
187
+ `tools/list` rather than counted out of its source, because three tool
188
+ families live in modules the main file only spreads in - a regex over
189
+ `index.js` returns 2 when the answer is 99.
190
+ - **`prefs.schema.json` moves to 2.7.0, and the shipped template moves with
191
+ it.** The template had been left at 2.6.0, which
192
+ `smoke-schema-validation.sh` catches by design: a fresh install that starts
193
+ behind the migration target makes an old entry in the migrator's accepted set
194
+ load-bearing purely to rescue the template. 2.7.0 removes the Lite value from
195
+ `analysisPhase.mode` and declares `global.modelRouting`, which the template
196
+ now ships explicitly disabled rather than leaving absent - a default that is
197
+ written down is one a reader can find.
198
+ - **The description-surface ceiling moves 86,500 -> 88,000**, and this is where
199
+ that has to be said. Four commands with a shared/core twin each is eight
200
+ descriptions; the average held at 316 against its own 420 ceiling, which is
201
+ the condition the gate's convention names for a raise rather than a trim -
202
+ the surface grew because there are more commands, not wordier ones. The
203
+ fixed per-run load was a different answer: it went 122 bytes over its 60,000
204
+ ceiling and the bytes were reclaimed from prose rather than the ceiling
205
+ raised, which is what that gate's message asks for in as many words.
206
+ - **`smoke-six-phase-run.sh`** drives phase-tracker.sh through a synthetic run
207
+ and asserts what a live run would show: six tiles named from the contract, no
208
+ tile above 5, the `Phase 2 Dev` line shape, a sub-step that registers under
209
+ its parent phase rather than as a seventh tile, a token count and a start
210
+ timestamp for the cost and elapsed suffixes, and a state file that validates
211
+ at 0..5 while `currentPhase: 6` is rejected. It says plainly what it does not
212
+ cover: that Review does not build a second time is an assertion about a model
213
+ following a document, and only a live run's `.build.log` mtime can show it.
214
+ Verified both ways - a seventh phase in the contract fails it.
215
+ - **A facts gate on the website** (`tests/facts-consistency.test.ts`). It does
216
+ not check that the copied `facts.json` is fresh - CI has no pipeline
217
+ checkout, that is `sync-facts.mjs --check` on a machine that does. It checks
218
+ what actually failed: that no component states a phase count or a phase
219
+ number that disagrees with the contract. Copy may say "6 phases"; it may not
220
+ say a different number. Verified both ways.
221
+ - **`metrics.jsonl` carries `phaseSchema`.** The file is append-only across a
222
+ renumbering, so `phase: 3` means Dev in a pre-v19 row and Review in a post-v19
223
+ one. Lines without the field are generation 1. `pipeline/lib/phase-schema.mjs`
224
+ resolves both, and the two aggregators that compared phase numbers to literals
225
+ go through it.
226
+
227
+ ### Migration
228
+
229
+ - **`state-2.1.0-to-2.2.0.mjs`** maps `0→0, 1→1, 2→1, 3→2, 4→3, 5→3, 6→4, 7→5`.
230
+ Two sources can collide onto one `phases{}` key: furthest-along status wins,
231
+ `retryCount` takes the MAX (the schema caps it at 3, so a sum would emit an
232
+ invalid state), `files[]` union, earliest start, latest finish. It also
233
+ repairs four defects the live corpus already carried - `completed` →
234
+ `complete`, `awaiting-user-test-main-checkout` → `awaiting_input`, and
235
+ explicit defaults for a missing `currentPhase` or `status`. Measured on the
236
+ 62 real state files: **52 valid before, 62 after.**
237
+ - **`prefs-2.6.0-to-2.7.0.mjs`** rewrites `analysisPhase.mode` from `auto` or
238
+ `lite` to `full`. The key is kept rather than deleted, so a file that set it
239
+ stays valid.
240
+
241
+ ### Fixed
242
+
243
+ - `migrate-prefs.mjs` read its target version from a literal that had drifted
244
+ behind the schema. It reads the schema now, as do the two gates that were
245
+ checking against their own copies of it.
246
+ - `phases.md` carried a second token-budget table whose total said 17,000 while
247
+ the enforced file said 63,150 - wrong by a factor of four, for most of the
248
+ project's life, guarded by nothing. The numbers are gone; the enforced source
249
+ is named instead.
250
+ - `validate-analysis-doc.mjs` gated one half of Locked 2 and not the other. The
251
+ one emitted document available rendered `1..10, 12, 16, 20, 21` and nothing
252
+ looked.
253
+ - Eight pieces of dead code on the website, found by the linter rather than by
254
+ grep - which had already been wrong three times about this repo.
255
+ - **The phase bound is generation-aware, and it had to be.** Tightening
256
+ `currentPhase` to 0..5 marked every pre-v19 run log invalid - a run that
257
+ finished at phase 7 in October was correct when it was written, and a
258
+ validator that calls correct history invalid is one people learn to ignore.
259
+ A file stamped 2.2.0 or later is bounded 0..5; anything older, including the
260
+ files that predate stamping entirely, is bounded 0..7 and says so in the
261
+ error text. The same decision `metrics.jsonl` got: label the generation, do
262
+ not rewrite history. The tightening still bites where it matters - phase 7 on
263
+ a file claiming 2.2.0 is exactly what a skipped migration produces, and that
264
+ is rejected. Measured on the live corpus: 2 valid of 16 before, 11 of 16
265
+ after, and the 5 that remain were already invalid for reasons the plan had
266
+ recorded (no `currentPhase` at all, non-object phase values).
267
+ - `validate-state.mjs` did not check `retryCount`. The schema caps it at 3 and
268
+ four documents call 3 a hard kill, so `retryCount: 4` was a state that every
269
+ document forbade and every validator accepted. The bound is checked now. The
270
+ limit is named rather than overstated: this closes the validation boundary,
271
+ it does not stop the loop - that stays prose.
272
+ - **`phase-banner.sh` still had eight labels**, and it is the banner every
273
+ phase prints. Its table is bare words - `en:4) echo "Review"` - so all three
274
+ sweeps walked past it: they looked for `Phase 4 Review`, `4:Review` and
275
+ `Phase 4: Review`, and none of those spellings appear in it. It is now six
276
+ labels in both languages, and `smoke-phase-contract.sh` check 14 compares
277
+ every one against the contract and rejects a label above the last id, so the
278
+ one copy of the phase list that nothing derives is at least checked.
279
+ - A third spelling of a phase reference, `Phase N: Name`, which the first sweep
280
+ could not see: its rules matched `Phase 3 Dev` and the tracker tuple `3:Dev`,
281
+ and the colon form sits between them. It had left the canonical label table in
282
+ `skills/shared/core/multi-agent/SKILL.md` reading eight rows with six-phase
283
+ labels, and `/multi-agent:local` listing both a Phase 4 Review and a Phase 4
284
+ Commit. Fifteen files, corrected by name match rather than by number.
285
+ - The golden-task fixtures are named for the phases that produce them, so they
286
+ moved too: `phase-2-plan.json` -> `phase-1-plan.json`, `phase-4-review.json`
287
+ -> `phase-3-review.json`, `phase-4-triage.json` -> `phase-3-triage.json`.
288
+ - A doc sweep of 166 files in the repo and 68 in the source tree, none of which
289
+ the eight-phase plan had listed. Release history is deliberately excluded:
290
+ `CHANGELOG`, the `ROADMAP` "Previous Release" sections and
291
+ `docs/token-budget-history.md` keep the numbers their versions shipped with,
292
+ and four ADRs carry a pointer to ADR-0014 instead of being rewritten, because
293
+ an ADR records what was decided rather than what is true today.
294
+
295
+ ### Removed
296
+
297
+ - **The engagement page** (`src/app/_nisan`, its API routes and its admin
298
+ panel) on the website. The 16 RSVP rows were exported before anything was
299
+ deleted and **the `rsvp_entries` table is kept** - removing code does not
300
+ remove data, and dropping the table is a separate decision.
301
+
302
+ ---
303
+
17
304
  ## [18.0.0] - 2026-09-17
18
305
 
19
306
  Major, for two behaviour changes rather than a renamed command: a run's state now
package/README.md CHANGED
@@ -8,16 +8,16 @@
8
8
 
9
9
  🇹🇷 Türkçe: [README.tr.md](./README.tr.md)
10
10
 
11
- An 8-phase AI development pipeline for **Claude Code**, **Copilot CLI** and **Codex 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.
11
+ A 6-phase AI development pipeline for **Claude Code**, **Copilot CLI** and **Codex 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.
12
12
 
13
13
  Runs natively on Claude Code, Copilot CLI and Codex CLI. macOS only. Zero runtime dependencies.
14
14
 
15
- 📐 **[Architecture diagrams](./docs/architecture.md)** - the 8-phase flow, operating modes, review/triage, Figma subphases, component layout. **[Ecosystem diagram](./docs/ecosystem.md)** - how this repo, the `multi-agent-plugins` marketplace and `multi-agent-toolkit-mcp` compose.
15
+ 📐 **[Architecture diagrams](./docs/architecture.md)** - the 6-phase flow, operating modes, review/triage, Figma subphases, component layout. **[Ecosystem diagram](./docs/ecosystem.md)** - how this repo, the `multi-agent-plugins` marketplace and `multi-agent-toolkit-mcp` compose.
16
16
 
17
17
  ### Prerequisites
18
18
 
19
19
  - **Node.js >= 20.11** - required; the pipeline's own tooling runs on it.
20
- - **`jq`** - required for nine paths, optional for the rest. 78 shell files call it. The nine that publish or decide - the autopilot queue, Jira comments, PR reviews, issue updates, the plan file, both Figma fetchers, log search and Jira auth - now refuse with exit 3 rather than run, because a missing `jq` renders as empty DATA and the work carries on with it. Everywhere else it still degrades. The install prints a note when it is missing.
20
+ - **`jq`** - required for nine paths, optional for the rest. 84 shell files call it. The nine that publish or decide - the autopilot queue, Jira comments, PR reviews, issue updates, the plan file, both Figma fetchers, log search and Jira auth - now refuse with exit 3 rather than run, because a missing `jq` renders as empty DATA and the work carries on with it. Everywhere else it still degrades. The install prints a note when it is missing.
21
21
  - **`gh`** - for GitHub issue and PR work. Its built-in `--jq` is independent of the `jq` binary.
22
22
 
23
23
  ## Quick Start
@@ -91,22 +91,38 @@ Update later with `/multi-agent:update`. Uninstall (tokens preserved) with `npx
91
91
 
92
92
  ## How it works
93
93
 
94
- One command runs up to 8 phases, with a gate between the risky ones. Phase 0
94
+ One command runs up to 6 phases, with a gate between the risky ones. Phase 0
95
95
  asks two questions that decide the shape of the rest - how deep the run goes
96
96
  (Full or Short) and where the branch lives (a worktree or your current
97
97
  checkout):
98
98
 
99
99
  - **0 · Init** - parse the input (Jira id / GitHub URL / free text), pick account + repo(s), fetch the issue, run a maturity check.
100
- - **1 · Analysis** - detect the stack, scan the codebase, map impact (Sonnet).
101
- - **2 · Plan** - write a task breakdown and **stop for your approval** before touching code.
102
- - **3 · Dev** - TDD: failing test → code → green, following the repo's style + the active stack skills.
103
- - **4 · Review** - deterministic gates (build / lint / test / secret-scan) must pass first, then a **CLI-aware parallel review** - Claude Code runs 3 models (Fable + Opus + Sonnet), Copilot CLI runs 3 (GPT-5.4 + Opus + Sonnet) - and a **Fable triage** keeps only actionable findings; blockers loop back to Phase 3.
104
- - **5 · Test** - build + run the suite; success is required (no faked passes).
105
- - **6 · Commit/PR** - conventional commit, push (must succeed), open a PR (`Ref: #N`, never auto-close).
106
- - **7 · Report** - technical summary + a Jira comment with test scenarios, posted through the channels layer.
100
+ - **1 · Plan** - detect the stack, scan the codebase and write the analysis document, then break it into tasks with file-level targets and **stop for your approval** before touching code. Analysis and planning were two phases until 19.0.0; the depth picker always skipped them together, because they are one decision. Codebase scanning runs on the explorer persona (Sonnet).
101
+ - **2 · Dev** - TDD: failing test → code → green, following the repo's style + the active stack skills. The phase ends at its own gate: build, lint, tests and a secret scan, run **once**. Review used to build again, and nothing consumed the difference.
102
+ - **3 · Review** - a **CLI-aware parallel review** against the logs Dev produced - Claude Code runs 3 models (Fable + Opus + Sonnet), Copilot CLI runs 3 (GPT-5.4 + Opus + Sonnet) - then a **Fable triage** keeps only actionable findings; blockers loop back to Phase 2. The optional user test lives here, keeping its waiting state.
103
+ - **4 · Commit/PR** - conventional commit, push (must succeed), open a PR (`Ref: #N`, never auto-close).
104
+ - **5 · Report** - technical summary + a Jira comment with test scenarios, posted through the channels layer. This is the one step autopilot still pauses at, in every mode.
107
105
 
108
106
  `/multi-agent:analysis` runs its own shorter chain and, since v16.12.0, reviews what it wrote before publishing it: the draft goes through the same three-reviewer set and triage as a code diff, a blocking finding returns it to synthesis with dispatch closed, and the gaps that survive are either searched, asked about, or recorded with an owner. It used to publish behind a structural validator alone.
109
107
 
108
+ ### 19.0.0: six phases, and a gate for the number
109
+
110
+ Two of the six phases were doing the same work twice. Dev built the project
111
+ and tee'd a log; Review opened by building it again. Analysis and Planning were
112
+ already one decision - the depth picker skipped them together and the state
113
+ schema described them as one unit. Six phases now, one build per run.
114
+
115
+ The other half of the change is that the count is finally guarded.
116
+ `smoke-phase-contract.sh` derives it from `pipeline/schemas/phases.json` and
117
+ holds every other copy to it: the generator's output, the token budget, the
118
+ state-schema bounds, the progress fractions in sample output, and the named
119
+ thresholds that used to be literals scattered across scripts. The phase count
120
+ appeared in 91 places across 40 files with nothing checking any of them, while
121
+ the command count, the jq count and the persona count all had gates.
122
+
123
+ Reasoning, mapping and rejected alternatives:
124
+ [ADR-0014](./docs/adr/0014-six-phase-consolidation.md).
125
+
110
126
  ### 18.0.0: one state directory, and a way to ask whether your install is real
111
127
 
112
128
  - **`multi-agent-pipeline verify`.** The install is a copy, and from the moment it is written the two halves drift independently: an edit in the installed tree is behaviour with no source, and a file the installer skipped is a script the docs describe and nobody has. `verify` compares both against a manifest built at pack time. What a green result proves is stated plainly - the bytes match what the publisher recorded, not who published them.
@@ -118,7 +134,7 @@ checkout):
118
134
 
119
135
  Three smaller things in 17.6.0, each closing a gap where the pipeline assumed instead of looking:
120
136
 
121
- - **Phase 3 stopped typing `npm`.** A repo on pnpm, yarn or bun used to fail in the development phase, with a worktree and a branch already created. The manager is resolved from the repo now - an env override, then `package.json#packageManager`, then the lock file, then npm reported as a default rather than as evidence. iOS and Android are untouched.
137
+ - **Phase 2 stopped typing `npm`.** A repo on pnpm, yarn or bun used to fail in the development phase, with a worktree and a branch already created. The manager is resolved from the repo now - an env override, then `package.json#packageManager`, then the lock file, then npm reported as a default rather than as evidence. iOS and Android are untouched.
122
138
  - **A compaction no longer eats what a phase learned.** The capture hook ran at session end; an auto-compaction summarizes a long review or development phase while it is still running, and anything not yet written was gone before session end ever fired. The hooks template now flushes at `PreCompact` too.
123
139
  - **`doctor` counts your MCP servers.** Every registered server sends its tool list on every turn and they are added one at a time, so nobody ever sees the total. It reports the count and nothing else: no warning, no blocking, no disabling.
124
140
 
@@ -150,8 +166,8 @@ The discipline behind all of this - bounded loops, evidence gates, token-budgete
150
166
 
151
167
  | Mode | Command | Flow |
152
168
  | --------- | ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
153
- | Full | `/multi-agent "task"` | All 8 phases, interactive |
154
- | Autopilot | `/multi-agent:autopilot "task"` | 7 phases (interactive Test gate dropped), no confirmations |
169
+ | Full | `/multi-agent "task"` | All 6 phases, interactive |
170
+ | Autopilot | `/multi-agent:autopilot "task"` | 6 phases (interactive Test gate dropped), no confirmations |
155
171
  | Local | `/multi-agent:local "task"` | Full pipeline minus the interactive Test gate, current branch (no worktree) |
156
172
  | Depth | asked at Phase 0 Step 7.5 | Full (all phases) or Short (Dev → Review → Test → Commit → Report). Not a command name - `/multi-agent` and `:local` ask, both autopilot entries always run Full |
157
173
  | Ship | `/multi-agent:resume-local` | Run the review→test→commit→report tail over local work |
@@ -207,7 +223,7 @@ The widget follows the answer rather than predicting it: Phase 0 is the only til
207
223
  | `/multi-agent:review-jira` | Grade a Jira issue's readiness for development, comment the gaps |
208
224
  | `/multi-agent:review-issue` | Same grading for a GitHub issue |
209
225
  | `/multi-agent:review-analysis` | Review a written analysis document; findings cite the Locked rule they break |
210
- | `/multi-agent:diff-explain` | Map a Phase 4 triage finding back to the diff lines that caused it |
226
+ | `/multi-agent:diff-explain` | Map a Phase 3 triage finding back to the diff lines that caused it |
211
227
  | `/multi-agent:refactor` | Best-practice extraction + bug hunt + derived-skill drift + toolkit MCP research → one plan |
212
228
  | `/multi-agent:scan` | Skill security scan of local skill directories against a tiered pattern catalog |
213
229
  | `/multi-agent:prune-prompts` | Zero-base review of the always-on instruction footprint; keep / trial / delete per rule |
@@ -230,7 +246,7 @@ The widget follows the answer rather than predicting it: Phase 0 is the only til
230
246
  | `/multi-agent:test-accessibility` | VoiceOver labels, sub-44pt tap targets, contrast, traits |
231
247
  | `/multi-agent:test-dynamic-type` | Re-walk every screen at XL through accessibility-XL, report truncation |
232
248
  | `/multi-agent:test-screenshots [locale]` | App Store screenshot set in a locale (defaults to `tr`) |
233
- | `/multi-agent:manual-test` | Phase 5 standalone: check out the task branch and prepare it for Xcode |
249
+ | `/multi-agent:manual-test` | Phase 3 standalone: check out the task branch and prepare it for Xcode |
234
250
 
235
251
  ### Design, build and store
236
252
 
@@ -343,17 +359,17 @@ This enables the matching plugin (+ the shared `ai-common` plugin) in the repo's
343
359
 
344
360
  ## Tool support
345
361
 
346
- The pipeline runs natively on **Claude Code**, **Copilot CLI** and **Codex CLI** - all three install from the same `pipeline/` source and get the same 56 commands.
362
+ The pipeline runs natively on **Claude Code**, **Copilot CLI** and **Codex CLI** - all three install from the same `pipeline/` source and get the same 60 commands.
347
363
 
348
364
  | Tool | Flag | What it installs |
349
365
  | ----------- | -------------------- | ------------------------------------------------------------------------------------------------------ |
350
366
  | Claude Code | `--claude` (default) | slash commands + skills + agents + three `PreToolUse` hooks (secret scan, agent-guard, read-size gate) |
351
- | Copilot CLI | `--copilot` | instructions + 56 sub-command skills + scripts |
352
- | Codex CLI | `--codex` | one router skill + 56 specs as refs + 9 agent TOML + `AGENTS.md` block + `codex mcp add` |
367
+ | Copilot CLI | `--copilot` | instructions + 60 sub-command skills + scripts |
368
+ | Codex CLI | `--codex` | one router skill + 60 specs as refs + 9 agent TOML + `AGENTS.md` block + `codex mcp add` |
353
369
 
354
370
  Filter skills by stack with `--platform=ios\|android\|all`.
355
371
 
356
- **Why Codex gets one skill and not 56.** Codex assembles every discovered skill's name
372
+ **Why Codex gets one skill and not 60.** Codex assembles every discovered skill's name
357
373
  and description into a single prompt block and drops entries when it overflows, with no
358
374
  error. Measured on 0.145: installing one plugin that declares 142 skills surfaced only
359
375
  75 of them and evicted an unrelated user skill. So on Codex the pipeline ships a single
package/README.tr.md CHANGED
@@ -8,11 +8,11 @@
8
8
 
9
9
  🇬🇧 English: [README.md](./README.md)
10
10
 
11
- **Claude Code**, **Copilot CLI** ve **Codex CLI** için 8 fazlı bir AI geliştirme pipeline'ı. Bir Jira issue'sunu veya GitHub URL'sini tek komutla merge edilmiş bir PR'a dönüştürür - analiz → plan → TDD → review → test → commit → PR - çoklu-repo orkestrasyonu, bir plan-onay kapısı, CLI-farkında paralel review ve store-uyumluluk kontrolleriyle birlikte. Component ve Figma-to-code işleri paket içine gömülmek yerine stack başına marketplace plugin'lerine (iOS/SwiftUI, Android/Compose) devredilir, böylece component skill'leri tek bir yerde yaşar.
11
+ **Claude Code**, **Copilot CLI** ve **Codex CLI** için 6 fazlı bir AI geliştirme pipeline'ı. Bir Jira issue'sunu veya GitHub URL'sini tek komutla merge edilmiş bir PR'a dönüştürür - analiz → plan → TDD → review → test → commit → PR - çoklu-repo orkestrasyonu, bir plan-onay kapısı, CLI-farkında paralel review ve store-uyumluluk kontrolleriyle birlikte. Component ve Figma-to-code işleri paket içine gömülmek yerine stack başına marketplace plugin'lerine (iOS/SwiftUI, Android/Compose) devredilir, böylece component skill'leri tek bir yerde yaşar.
12
12
 
13
13
  Claude Code, Copilot CLI ve Codex CLI üzerinde native çalışır. Yalnızca macOS. Sıfır runtime dependency.
14
14
 
15
- 📐 **[Mimari diyagramları](./docs/architecture.md)** - 8 faz akışı, çalışma modları, review/triage, Figma subphase'leri, component yapısı. **[Ekosistem diyagramı](./docs/ecosystem.md)** - bu repo, `multi-agent-plugins` marketplace'i ve `multi-agent-toolkit-mcp`'nin nasıl bir araya geldiği.
15
+ 📐 **[Mimari diyagramları](./docs/architecture.md)** - 6 faz akışı, çalışma modları, review/triage, Figma subphase'leri, component yapısı. **[Ekosistem diyagramı](./docs/ecosystem.md)** - bu repo, `multi-agent-plugins` marketplace'i ve `multi-agent-toolkit-mcp`'nin nasıl bir araya geldiği.
16
16
 
17
17
  ### Önkoşullar
18
18
 
@@ -90,19 +90,17 @@ Sonra `/multi-agent:update` ile güncelle. Kaldırmak için (tokenlar korunur) `
90
90
 
91
91
  ## Nasıl çalışır
92
92
 
93
- Tek komut en fazla 8 fazı çalıştırır, riskli olanlar arasında bir kapı ile. Faz
93
+ Tek komut en fazla 6 fazı çalıştırır, riskli olanlar arasında bir kapı ile. Faz
94
94
  0 geri kalanın şeklini belirleyen iki soru sorar: koşu ne kadar derin olacak
95
95
  (Tam mı Kısa mı) ve branch nerede yaşayacak (worktree mi, mevcut checkout'un
96
96
  mu):
97
97
 
98
98
  - **0 · Init** - girdiyi ayrıştır (Jira id / GitHub URL / serbest metin), hesap + repo(lar) seç, issue'yu çek, maturity kontrolü yap.
99
- - **1 · Analysis** - stack'i tespit et, codebase'i tara, etkiyi haritala (Sonnet).
100
- - **2 · Plan** - bir görev kırılımı yaz ve koda dokunmadan önce **onayın için dur**.
101
- - **3 · Dev** - TDD: başarısız test → kod → yeşil, repo'nun stiline + aktif stack skill'lerine uyarak.
102
- - **4 · Review** - önce deterministik kapılar (build / lint / test / secret-scan) geçmeli, sonra bir **CLI-farkında paralel review** - Claude Code 3 model çalıştırır (Fable + Opus + Sonnet), Copilot CLI 3 (GPT-5.4 + Opus + Sonnet) - ve bir **Fable triage** sadece aksiyon alınabilir bulguları tutar; blocker'lar Phase 3'e geri döner.
103
- - **5 · Test** - build + suite'i çalıştır; başarı zorunlu (sahte pass yok).
104
- - **6 · Commit/PR** - conventional commit, push (başarılı olmalı), bir PR aç (`Ref: #N`, asla otomatik kapatma).
105
- - **7 · Report** - teknik özet + test senaryolarıyla bir Jira yorumu, channels katmanından gönderilir.
99
+ - **1 · Plan** - stack'i tespit et, codebase'i tara ve analiz dokümanını yaz; sonra onu dosya seviyesinde hedefleri olan görevlere böl ve koda dokunmadan önce **onayın için dur**. Analiz ve planlama 19.0.0'a kadar iki ayrı fazdı; derinlik seçici ikisini hep birlikte atlıyordu, çünkü tek bir karar. Codebase taraması explorer persona'sı üzerinde koşar (Sonnet).
100
+ - **2 · Dev** - TDD: başarısız test → kod → yeşil, repo'nun stiline + aktif stack skill'lerine uyarak. Faz kendi kapısında biter: build, lint, test ve sır taraması, **bir kez** koşar. Review eskiden ikinci kez build ediyordu ve aradaki farkı kimse okumuyordu.
101
+ - **3 · Review** - Dev'in ürettiği log'lara karşı **CLI-farkında paralel review** - Claude Code 3 model çalıştırır (Fable + Opus + Sonnet), Copilot CLI 3 (GPT-5.4 + Opus + Sonnet) - ve bir **Fable triage** sadece aksiyon alınabilir bulguları tutar; blocker'lar Phase 2'ye geri döner. Opsiyonel kullanıcı testi burada, bekleme durumunu koruyarak.
102
+ - **4 · Commit/PR** - conventional commit, push (başarılı olmalı), bir PR aç (`Ref: #N`, asla otomatik kapatma).
103
+ - **5 · Report** - teknik özet + test senaryolarıyla bir Jira yorumu, channels katmanından gönderilir. Autopilot'un her modda hâlâ durduğu tek adım bu.
106
104
 
107
105
  `/multi-agent:analysis` kendi kısa zincirini koşar ve v16.12.0'dan beri yazdığını yayınlamadan önce review ediyor: taslak, bir kod diff'iyle aynı üç-reviewer setinden ve triyajdan geçiyor, bloklayıcı bulgu dokümanı sentez fazına geri gönderip dispatch'i kapatıyor, hayatta kalan boşluklar ya aranıyor ya sana soruluyor ya da sahibiyle birlikte kayda giriyor. Önceden yalnızca yapısal bir validator'ın arkasından yayınlıyordu.
108
106
 
@@ -149,8 +147,8 @@ Bunun arkasındaki disiplin - sınırlı loop'lar, kanıt kapıları, token-büt
149
147
 
150
148
  | Mod | Komut | Akış |
151
149
  | --------- | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
152
- | Full | `/multi-agent "task"` | Tüm 8 faz, interaktif |
153
- | Autopilot | `/multi-agent:autopilot "task"` | 7 faz (interaktif Test kapısı atlanır), onaysız |
150
+ | Full | `/multi-agent "task"` | Tüm 6 faz, interaktif |
151
+ | Autopilot | `/multi-agent:autopilot "task"` | 6 faz (interaktif Test kapısı atlanır), onaysız |
154
152
  | Local | `/multi-agent:local "task"` | İnteraktif Test kapısı hariç tam pipeline, mevcut branch (worktree yok) |
155
153
  | Derinlik | Faz 0 Adım 7.5'te sorulur | Full (tüm fazlar) veya Short (Dev → Review → Test → Commit → Report). Komut adı değil - `/multi-agent` ve `:local` sorar, iki autopilot girişi de her zaman Full koşar |
156
154
  | Ship | `/multi-agent:resume-local` | Lokal iş üzerinde review→test→commit→report kuyruğunu çalıştır |
@@ -343,17 +341,17 @@ Bu, ilgili plugin'i (+ ortak `ai-common` plugin'ini) repo'nun `.claude/settings.
343
341
 
344
342
  ## Araç desteği
345
343
 
346
- Pipeline **Claude Code**, **Copilot CLI** ve **Codex CLI** üzerinde native çalışır - üçü de aynı `pipeline/` kaynağından kurulur ve aynı 56 komutu alır.
344
+ Pipeline **Claude Code**, **Copilot CLI** ve **Codex CLI** üzerinde native çalışır - üçü de aynı `pipeline/` kaynağından kurulur ve aynı 60 komutu alır.
347
345
 
348
346
  | Araç | Bayrak | Ne kurar |
349
347
  | ----------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------- |
350
348
  | Claude Code | `--claude` (varsayılan) | slash komutları + skill'ler + agent'lar + üç `PreToolUse` hook'u (secret scan, agent-guard, okuma-boyutu geçidi) |
351
- | Copilot CLI | `--copilot` | talimatlar + 56 alt-komut skill'i + script'ler |
352
- | Codex CLI | `--codex` | bir router skill + ref olarak 56 spec + 9 agent TOML + `AGENTS.md` bloğu + `codex mcp add` |
349
+ | Copilot CLI | `--copilot` | talimatlar + 60 alt-komut skill'i + script'ler |
350
+ | Codex CLI | `--codex` | bir router skill + ref olarak 60 spec + 9 agent TOML + `AGENTS.md` bloğu + `codex mcp add` |
353
351
 
354
352
  Skill'leri stack'e göre filtrele: `--platform=ios\|android\|all`.
355
353
 
356
- **Codex neden 56 değil de tek bir skill alıyor.** Codex, keşfettiği her skill'in adını
354
+ **Codex neden 60 değil de tek bir skill alıyor.** Codex, keşfettiği her skill'in adını
357
355
  ve açıklamasını tek bir prompt bloğuna toplar ve blok taştığında girdileri hatasızca
358
356
  düşürür. 0.145 üzerinde ölçüldü: 142 skill deklare eden bir plugin kurulduğunda sadece
359
357
  75'i yüzeye çıktı ve alakasız bir kullanıcı skill'i tahliye edildi. Bu yüzden Codex'te
@@ -1,6 +1,7 @@
1
1
  # 2. `instructionDriven` flag as explicit pipeline fork
2
2
 
3
3
  **Status:** Accepted · 2025
4
+ > **Phase numbers below are the eight-phase ones.** [ADR-0014](./0014-six-phase-consolidation.md) renumbered the contract in v19.0.0 (Phase 6 Commit is now Phase 4, Phase 7 Report is now Phase 5). The decision this ADR records is unchanged; only the labels moved, and they are left as written because an ADR records what was decided.
4
5
 
5
6
  ## Context
6
7
 
@@ -1,6 +1,6 @@
1
1
  # 5. Lazy-loaded phase docs with per-phase token budget
2
2
 
3
- **Status:** Accepted · 2025
3
+ **Status:** Accepted · 2025 · amended by [ADR-0014](./0014-six-phase-consolidation.md)
4
4
 
5
5
  ## Context
6
6
 
@@ -36,6 +36,16 @@ Current budgets (v3.5.0):
36
36
 
37
37
  Total phase doc budget: 14,300 tokens across 8 phases, loaded incrementally.
38
38
 
39
+ > **Amended by [ADR-0014](./0014-six-phase-consolidation.md) (v19.0.0).** There
40
+ > are six phase docs now, not eight, and the numbers above are the v3.5.0 ones
41
+ > rather than the current ceilings. They are left as written because an ADR
42
+ > records what was decided, not what is true today. The mechanism this ADR
43
+ > establishes is unchanged and still load-bearing: one document per phase,
44
+ > loaded on entry, with a committed ceiling `smoke-token-budget.sh` enforces.
45
+ > The live ceilings are in `pipeline/schemas/token-budget.json` and the phase
46
+ > list itself in `pipeline/schemas/phases.json`, which is the duplication
47
+ > ADR-0014 removed - restating either here would recreate it.
48
+
39
49
  ## Consequences
40
50
 
41
51
  Positive:
@@ -1,6 +1,7 @@
1
1
  # 8. Installer modularization + secret-leak defense
2
2
 
3
3
  **Status:** Accepted · 2026-04-27 (v8.0.0)
4
+ > **Phase numbers below are the eight-phase ones.** [ADR-0014](./0014-six-phase-consolidation.md) renumbered the contract in v19.0.0 (the producer/consumer phase docs it names were renumbered). The decision this ADR records is unchanged; only the labels moved, and they are left as written because an ADR records what was decided.
4
5
 
5
6
  > **Amended v10.7.0:** the `_adapters.mjs` module and its third-party adapter dispatch were removed when the pipeline narrowed to Claude Code + Copilot CLI (see ADR 0007). `install/` now ships **8** modules, not 9; the module list below records the v8.0.0 decision as it shipped at the time.
6
7
 
@@ -1,6 +1,7 @@
1
1
  # 10. Our own code graph, not a forked one
2
2
 
3
3
  **Status:** Accepted · 2026-08-28
4
+ > **Phase numbers below are the eight-phase ones.** [ADR-0014](./0014-six-phase-consolidation.md) renumbered the contract in v19.0.0 (`phase-1-analysis.md` is now `phase-1-plan.md` and Phase 7 Report is now Phase 5). The decision this ADR records is unchanged; only the labels moved, and they are left as written because an ADR records what was decided.
4
5
 
5
6
  ## Context
6
7