@mmerterden/multi-agent-pipeline 18.0.0 → 19.0.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 (209) hide show
  1. package/CHANGELOG.md +183 -0
  2. package/README.md +34 -18
  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 +37 -26
  13. package/docs/engineering.md +1 -1
  14. package/docs/facts.json +45 -0
  15. package/docs/features.md +54 -53
  16. package/docs/performance.md +5 -5
  17. package/docs/recovery-guide.md +9 -9
  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 +209 -193
  25. package/package.json +2 -2
  26. package/pipeline/agents/dev-critic.md +3 -3
  27. package/pipeline/commands/figma-to-swiftui.md +1 -1
  28. package/pipeline/commands/multi-agent/SKILL.md +8 -8
  29. package/pipeline/commands/multi-agent/analysis/SKILL.md +9 -9
  30. package/pipeline/commands/multi-agent/autopilot/SKILL.md +7 -7
  31. package/pipeline/commands/multi-agent/channels/SKILL.md +15 -15
  32. package/pipeline/commands/multi-agent/diff-explain/SKILL.md +6 -6
  33. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -1
  34. package/pipeline/commands/multi-agent/graph/SKILL.md +1 -1
  35. package/pipeline/commands/multi-agent/help/SKILL.md +62 -62
  36. package/pipeline/commands/multi-agent/language/SKILL.md +2 -2
  37. package/pipeline/commands/multi-agent/local/SKILL.md +11 -11
  38. package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +13 -13
  39. package/pipeline/commands/multi-agent/log/SKILL.md +2 -2
  40. package/pipeline/commands/multi-agent/manual-test/SKILL.md +9 -9
  41. package/pipeline/commands/multi-agent/model/SKILL.md +69 -0
  42. package/pipeline/commands/multi-agent/refactor/SKILL.md +3 -3
  43. package/pipeline/commands/multi-agent/resume/SKILL.md +4 -4
  44. package/pipeline/commands/multi-agent/resume-local/SKILL.md +19 -17
  45. package/pipeline/commands/multi-agent/review/SKILL.md +1 -1
  46. package/pipeline/commands/multi-agent/route-off/SKILL.md +36 -0
  47. package/pipeline/commands/multi-agent/route-on/SKILL.md +74 -0
  48. package/pipeline/commands/multi-agent/route-status/SKILL.md +56 -0
  49. package/pipeline/commands/multi-agent/setup/SKILL.md +2 -2
  50. package/pipeline/commands/multi-agent/status/SKILL.md +5 -5
  51. package/pipeline/commands/multi-agent/steer/SKILL.md +2 -2
  52. package/pipeline/commands/multi-agent/sync/SKILL.md +12 -13
  53. package/pipeline/commands/multi-agent/test/SKILL.md +1 -1
  54. package/pipeline/lib/credential-inventory.sh +1 -1
  55. package/pipeline/lib/fetch-fortify.sh +1 -1
  56. package/pipeline/lib/model-rung.sh +142 -0
  57. package/pipeline/lib/phase-schema.mjs +88 -0
  58. package/pipeline/lib/plan-todos.sh +5 -5
  59. package/pipeline/lib/route-state.sh +161 -0
  60. package/pipeline/lib/run-paths.sh +2 -2
  61. package/pipeline/multi-agent-refs/_account-picker.md +1 -1
  62. package/pipeline/multi-agent-refs/_dev-context.md +1 -1
  63. package/pipeline/multi-agent-refs/_input-parser.md +1 -1
  64. package/pipeline/multi-agent-refs/analysis/evidence.md +0 -9
  65. package/pipeline/multi-agent-refs/analysis/intake.md +1 -1
  66. package/pipeline/multi-agent-refs/analysis/locked.md +21 -22
  67. package/pipeline/multi-agent-refs/analysis/render.md +1 -1
  68. package/pipeline/multi-agent-refs/analysis/synthesis.md +12 -6
  69. package/pipeline/multi-agent-refs/android-guide.md +1 -1
  70. package/pipeline/multi-agent-refs/audit-guide.md +13 -13
  71. package/pipeline/multi-agent-refs/channels/issue-comment.md +2 -2
  72. package/pipeline/multi-agent-refs/channels/jira.md +3 -3
  73. package/pipeline/multi-agent-refs/channels/pr.md +4 -4
  74. package/pipeline/multi-agent-refs/channels/wiki.md +1 -1
  75. package/pipeline/multi-agent-refs/component-dispatch.md +3 -3
  76. package/pipeline/multi-agent-refs/cross-cli-contract.md +31 -6
  77. package/pipeline/multi-agent-refs/features/autopilot-circuit-breaker.md +4 -4
  78. package/pipeline/multi-agent-refs/features/code-graph.md +5 -5
  79. package/pipeline/multi-agent-refs/features/design-conformance.md +1 -1
  80. package/pipeline/multi-agent-refs/features/dev-critic.md +3 -3
  81. package/pipeline/multi-agent-refs/features/doctor.md +2 -2
  82. package/pipeline/multi-agent-refs/features/external-context-injection.md +3 -3
  83. package/pipeline/multi-agent-refs/features/maturity-followup.md +3 -3
  84. package/pipeline/multi-agent-refs/features/model-fallback.md +5 -5
  85. package/pipeline/multi-agent-refs/features/plan-todos.md +1 -1
  86. package/pipeline/multi-agent-refs/features/repo-map.md +1 -1
  87. package/pipeline/multi-agent-refs/features/review-delta.md +3 -3
  88. package/pipeline/multi-agent-refs/features/review-multi-repo.md +1 -1
  89. package/pipeline/multi-agent-refs/features/scope-check.md +4 -4
  90. package/pipeline/multi-agent-refs/features/skill-conformance.md +2 -2
  91. package/pipeline/multi-agent-refs/features/stack-skill-routing.md +1 -1
  92. package/pipeline/multi-agent-refs/features/verify-by-test.md +4 -4
  93. package/pipeline/multi-agent-refs/features/visual-evidence.md +19 -19
  94. package/pipeline/multi-agent-refs/features/worktree-finalize.md +6 -6
  95. package/pipeline/multi-agent-refs/issue-jira-triad.md +10 -10
  96. package/pipeline/multi-agent-refs/knowledge.md +11 -11
  97. package/pipeline/multi-agent-refs/multi-repo-integration-build.md +13 -13
  98. package/pipeline/multi-agent-refs/payload-contracts.md +8 -8
  99. package/pipeline/multi-agent-refs/phases/log-format.md +10 -10
  100. package/pipeline/multi-agent-refs/phases/modes.md +30 -30
  101. package/pipeline/multi-agent-refs/phases/operations.md +8 -8
  102. package/pipeline/multi-agent-refs/phases/phase-0-init.md +24 -24
  103. package/pipeline/multi-agent-refs/phases/phase-1-plan.md +599 -0
  104. package/pipeline/multi-agent-refs/phases/{phase-3-dev.md → phase-2-dev.md} +129 -49
  105. package/pipeline/multi-agent-refs/phases/{phase-4-review.md → phase-3-review.md} +225 -107
  106. package/pipeline/multi-agent-refs/phases/{phase-6-commit.md → phase-4-commit.md} +23 -23
  107. package/pipeline/multi-agent-refs/phases/{phase-7-report.md → phase-5-report.md} +29 -29
  108. package/pipeline/multi-agent-refs/phases.md +44 -48
  109. package/pipeline/multi-agent-refs/picker-contract.md +1 -1
  110. package/pipeline/multi-agent-refs/progress-contract.md +6 -6
  111. package/pipeline/multi-agent-refs/readiness-review.md +1 -1
  112. package/pipeline/multi-agent-refs/rules.md +7 -7
  113. package/pipeline/multi-agent-refs/swiftui-guide.md +2 -2
  114. package/pipeline/multi-agent-refs/tracker-contract.md +31 -32
  115. package/pipeline/multi-agent-refs/wiki-capture.md +14 -14
  116. package/pipeline/preferences-template.json +9 -1
  117. package/pipeline/rules/outside-the-pipeline.md +1 -1
  118. package/pipeline/schemas/agent-state.schema.json +50 -50
  119. package/pipeline/schemas/analysis-output.schema.json +2 -2
  120. package/pipeline/schemas/autopilot-config.schema.json +1 -1
  121. package/pipeline/schemas/code-graph.schema.json +1 -1
  122. package/pipeline/schemas/criteria-manifest.schema.json +1 -1
  123. package/pipeline/schemas/dev-critic-output.schema.json +1 -1
  124. package/pipeline/schemas/diff-risk.schema.json +1 -1
  125. package/pipeline/schemas/migrations/prefs-2.4.0-to-2.5.0.mjs +2 -2
  126. package/pipeline/schemas/migrations/prefs-2.6.0-to-2.7.0.mjs +31 -0
  127. package/pipeline/schemas/migrations/state-2.1.0-to-2.2.0.mjs +129 -0
  128. package/pipeline/schemas/phases.json +105 -0
  129. package/pipeline/schemas/plan-todos.schema.json +5 -5
  130. package/pipeline/schemas/planning-output.schema.json +1 -1
  131. package/pipeline/schemas/prefs.schema.json +100 -56
  132. package/pipeline/schemas/reviewer-output.schema.json +3 -3
  133. package/pipeline/schemas/route-config.schema.json +74 -0
  134. package/pipeline/schemas/scope-check.schema.json +1 -1
  135. package/pipeline/schemas/test-gap.schema.json +1 -1
  136. package/pipeline/schemas/token-budget.json +12 -18
  137. package/pipeline/schemas/triage-output.schema.json +6 -6
  138. package/pipeline/scripts/README.md +3 -3
  139. package/pipeline/scripts/_code-graph.mjs +2 -2
  140. package/pipeline/scripts/_run-paths.mjs +2 -2
  141. package/pipeline/scripts/_smoke-root.sh +1 -1
  142. package/pipeline/scripts/aggregate-metrics.mjs +1 -1
  143. package/pipeline/scripts/capture-flush.sh +8 -8
  144. package/pipeline/scripts/capture-resume.sh +3 -3
  145. package/pipeline/scripts/classify-plan-safety.mjs +1 -1
  146. package/pipeline/scripts/diff-explain.mjs +1 -1
  147. package/pipeline/scripts/doctor.mjs +2 -2
  148. package/pipeline/scripts/gc-abandoned.sh +3 -3
  149. package/pipeline/scripts/gc-tmp.sh +1 -1
  150. package/pipeline/scripts/gc-worktrees.sh +1 -1
  151. package/pipeline/scripts/gen-facts.mjs +175 -0
  152. package/pipeline/scripts/gen-mode-dispatch.mjs +32 -37
  153. package/pipeline/scripts/gen-ref-toc.mjs +1 -1
  154. package/pipeline/scripts/graph-report.mjs +1 -1
  155. package/pipeline/scripts/jira-attach.sh +1 -1
  156. package/pipeline/scripts/learn-from-transcripts.mjs +1 -1
  157. package/pipeline/scripts/learning-curve.mjs +2 -2
  158. package/pipeline/scripts/log-metric.sh +17 -4
  159. package/pipeline/scripts/memory-save.sh +1 -1
  160. package/pipeline/scripts/migrate-prefs.mjs +22 -5
  161. package/pipeline/scripts/phase-banner.sh +20 -20
  162. package/pipeline/scripts/phase-tracker.sh +7 -7
  163. package/pipeline/scripts/plan-coverage-gate.mjs +2 -2
  164. package/pipeline/scripts/render-agent-log-cost.sh +1 -1
  165. package/pipeline/scripts/render-work-summary.sh +3 -3
  166. package/pipeline/scripts/review-file-filter.mjs +1 -1
  167. package/pipeline/scripts/run-aggregator.mjs +13 -6
  168. package/pipeline/scripts/run-metrics.mjs +1 -1
  169. package/pipeline/scripts/runs-index.mjs +11 -1
  170. package/pipeline/scripts/smoke-cross-cli-behavior.sh +6 -6
  171. package/pipeline/scripts/smoke-schema-validation.sh +26 -7
  172. package/pipeline/scripts/token-budget-report.mjs +13 -2
  173. package/pipeline/scripts/triage-memory.mjs +2 -2
  174. package/pipeline/scripts/validate-analysis-doc.mjs +73 -17
  175. package/pipeline/scripts/validate-planning.mjs +1 -1
  176. package/pipeline/scripts/validate-reviewer.mjs +1 -1
  177. package/pipeline/scripts/validate-state.mjs +45 -5
  178. package/pipeline/scripts/validate-triage.mjs +3 -3
  179. package/pipeline/scripts/worktree-finalize.sh +5 -5
  180. package/pipeline/skills/.skill-manifest.json +37 -21
  181. package/pipeline/skills/.skills-index.json +49 -5
  182. package/pipeline/skills/shared/README.md +10 -6
  183. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +2 -2
  184. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +2 -2
  185. package/pipeline/skills/shared/core/multi-agent/SKILL.md +69 -71
  186. package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +3 -3
  187. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +14 -14
  188. package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +5 -5
  189. package/pipeline/skills/shared/core/multi-agent-graph/SKILL.md +1 -1
  190. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +25 -23
  191. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +2 -2
  192. package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +2 -2
  193. package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +8 -8
  194. package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +6 -6
  195. package/pipeline/skills/shared/core/multi-agent-model/SKILL.md +71 -0
  196. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +3 -3
  197. package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +1 -1
  198. package/pipeline/skills/shared/core/multi-agent-resume-local/SKILL.md +7 -7
  199. package/pipeline/skills/shared/core/multi-agent-route-off/SKILL.md +39 -0
  200. package/pipeline/skills/shared/core/multi-agent-route-on/SKILL.md +76 -0
  201. package/pipeline/skills/shared/core/multi-agent-route-status/SKILL.md +59 -0
  202. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +1 -1
  203. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +5 -5
  204. package/pipeline/skills/shared/core/multi-agent-steer/SKILL.md +2 -2
  205. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +6 -5
  206. package/pipeline/skills/skills-index.md +8 -4
  207. package/pipeline/multi-agent-refs/phases/phase-1-analysis.md +0 -263
  208. package/pipeline/multi-agent-refs/phases/phase-2-planning.md +0 -344
  209. package/pipeline/multi-agent-refs/phases/phase-5-test.md +0 -182
package/CHANGELOG.md CHANGED
@@ -14,6 +14,189 @@ Internal file-layout changes that don't affect the slash-command surface are sti
14
14
 
15
15
  ---
16
16
 
17
+ ## [19.0.0] - 2026-09-18
18
+
19
+ Major, because phase numbers are the contract and they moved. Eight phases
20
+ became six: two of the eight were doing the same work twice, and the count
21
+ itself was guarded by nothing.
22
+
23
+ Full reasoning, mapping and rejected alternatives:
24
+ [ADR-0014](./docs/adr/0014-six-phase-consolidation.md).
25
+
26
+ ### Changed
27
+
28
+ - **Six phases.** `0 Init`, `1 Plan`, `2 Dev`, `3 Review`, `4 Commit`,
29
+ `5 Report`. Analysis and Planning were already one decision - the depth
30
+ picker skipped them together and `onlyDevelop` described them as one unit -
31
+ and they are one phase now. Review Stage 1 became Dev's exit gate, which is
32
+ what removes the second build: Dev built and tee'd a log, then Review built
33
+ again, and nothing consumed the difference. The user test moved inside
34
+ Review, keeping its waiting state.
35
+ - **`pipeline/schemas/phases.json` is the phase contract.** The list existed as
36
+ eight independent copies, none derived from another. The generator, the run
37
+ index, the metrics logger and the token budget read it now, and comparison
38
+ thresholds that used to be literals (`phase >= 6` for "waiting on you", the
39
+ Short-run boundary) are named fields in it.
40
+ - **`smoke-phase-contract.sh`** is the gate that never existed. The phase count
41
+ appeared in 91 places across 40 files with nothing holding any of them; the
42
+ command count, the jq count and the persona count all had gates. It derives
43
+ the count from the contract and checks the generator's output, the token
44
+ budget, the state-schema bounds, every shipped surface that states a count,
45
+ the progress fractions in sample output and the named thresholds. Verified
46
+ both ways: a deliberately wrong contract fails it.
47
+ - **`smoke-no-mcp-in-dev-phases.sh` keeps `phase >= 2`, and the gate now
48
+ asserts that it is unchanged.** Figma MCP was reachable only in Analysis (1);
49
+ Analysis is inside Plan (1). The permitted set `{0, 1}` is identical either
50
+ way, so the threshold surviving a renumbering is a result of the mapping
51
+ rather than an oversight - and an edit that "corrects" it would widen access.
52
+ - **Analysis has one pipeline.** Lite mode is removed. It chose sections from a
53
+ fixed list scored on three signals while Locked 2 chooses them from evidence,
54
+ and the two disagreed in both directions: a small feature with rich business
55
+ rules lost Section 15 because it was not on the list, and a feature with no
56
+ API contract kept Section 9 because it was. 37 Locked decisions became 36.
57
+ - **Locked 2's numbering clause was wrong and is corrected.** It said numbering
58
+ re-flows `1..N`; Locked 30 threads ids across the document BY NUMBER
59
+ (`Section 15.1`, `Section 4.4`), so a re-flowed document sends every one of
60
+ those references to the wrong section. No emitted document ever re-flowed.
61
+ A rendered section keeps its canonical number, gaps included, and the
62
+ validator now checks what actually holds: numbers inside the template range,
63
+ ascending, no repeats.
64
+
65
+ ### Added
66
+
67
+ - **`/multi-agent:model`** turns the top rung on or off AND realigns
68
+ `costBudget.pricingModel` in the same write. The switch existed; the command
69
+ did not, and the pricing field it must move with was left to the user to
70
+ remember. It reports what the switch means on the host it runs on: a live
71
+ switch on Claude Code, a status report on Copilot CLI and Codex CLI.
72
+ - **`/multi-agent:route-on` · `:route-off` · `:route-status`** - policy-driven
73
+ model routing, shipping disabled. `scope` has no `host-session` member and
74
+ the schema enforces that: rewriting the host's base URL would route the
75
+ user's whole session, including work unrelated to this pipeline. `route-off`
76
+ keeps the rules, so `route-on` does not re-ask. `route-status` prints the
77
+ honest limit every time - a subagent cannot be sent to a non-Anthropic model,
78
+ because subagent dispatch belongs to the host.
79
+ - **`docs/facts.json`**, generated by `pipeline/scripts/gen-facts.mjs`: the
80
+ phase, command, skill and tool counts, derived rather than written. The
81
+ website read its own copies and said "8 faz + 51 komut" while the repo had
82
+ six phases and sixty commands. The tool count is asked of the toolkit's own
83
+ `tools/list` rather than counted out of its source, because three tool
84
+ families live in modules the main file only spreads in - a regex over
85
+ `index.js` returns 2 when the answer is 99.
86
+ - **`prefs.schema.json` moves to 2.7.0, and the shipped template moves with
87
+ it.** The template had been left at 2.6.0, which
88
+ `smoke-schema-validation.sh` catches by design: a fresh install that starts
89
+ behind the migration target makes an old entry in the migrator's accepted set
90
+ load-bearing purely to rescue the template. 2.7.0 removes the Lite value from
91
+ `analysisPhase.mode` and declares `global.modelRouting`, which the template
92
+ now ships explicitly disabled rather than leaving absent - a default that is
93
+ written down is one a reader can find.
94
+ - **The description-surface ceiling moves 86,500 -> 88,000**, and this is where
95
+ that has to be said. Four commands with a shared/core twin each is eight
96
+ descriptions; the average held at 316 against its own 420 ceiling, which is
97
+ the condition the gate's convention names for a raise rather than a trim -
98
+ the surface grew because there are more commands, not wordier ones. The
99
+ fixed per-run load was a different answer: it went 122 bytes over its 60,000
100
+ ceiling and the bytes were reclaimed from prose rather than the ceiling
101
+ raised, which is what that gate's message asks for in as many words.
102
+ - **`smoke-six-phase-run.sh`** drives phase-tracker.sh through a synthetic run
103
+ and asserts what a live run would show: six tiles named from the contract, no
104
+ tile above 5, the `Phase 2 Dev` line shape, a sub-step that registers under
105
+ its parent phase rather than as a seventh tile, a token count and a start
106
+ timestamp for the cost and elapsed suffixes, and a state file that validates
107
+ at 0..5 while `currentPhase: 6` is rejected. It says plainly what it does not
108
+ cover: that Review does not build a second time is an assertion about a model
109
+ following a document, and only a live run's `.build.log` mtime can show it.
110
+ Verified both ways - a seventh phase in the contract fails it.
111
+ - **A facts gate on the website** (`tests/facts-consistency.test.ts`). It does
112
+ not check that the copied `facts.json` is fresh - CI has no pipeline
113
+ checkout, that is `sync-facts.mjs --check` on a machine that does. It checks
114
+ what actually failed: that no component states a phase count or a phase
115
+ number that disagrees with the contract. Copy may say "6 phases"; it may not
116
+ say a different number. Verified both ways.
117
+ - **`metrics.jsonl` carries `phaseSchema`.** The file is append-only across a
118
+ renumbering, so `phase: 3` means Dev in a pre-v19 row and Review in a post-v19
119
+ one. Lines without the field are generation 1. `pipeline/lib/phase-schema.mjs`
120
+ resolves both, and the two aggregators that compared phase numbers to literals
121
+ go through it.
122
+
123
+ ### Migration
124
+
125
+ - **`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`.
126
+ Two sources can collide onto one `phases{}` key: furthest-along status wins,
127
+ `retryCount` takes the MAX (the schema caps it at 3, so a sum would emit an
128
+ invalid state), `files[]` union, earliest start, latest finish. It also
129
+ repairs four defects the live corpus already carried - `completed` →
130
+ `complete`, `awaiting-user-test-main-checkout` → `awaiting_input`, and
131
+ explicit defaults for a missing `currentPhase` or `status`. Measured on the
132
+ 62 real state files: **52 valid before, 62 after.**
133
+ - **`prefs-2.6.0-to-2.7.0.mjs`** rewrites `analysisPhase.mode` from `auto` or
134
+ `lite` to `full`. The key is kept rather than deleted, so a file that set it
135
+ stays valid.
136
+
137
+ ### Fixed
138
+
139
+ - `migrate-prefs.mjs` read its target version from a literal that had drifted
140
+ behind the schema. It reads the schema now, as do the two gates that were
141
+ checking against their own copies of it.
142
+ - `phases.md` carried a second token-budget table whose total said 17,000 while
143
+ the enforced file said 63,150 - wrong by a factor of four, for most of the
144
+ project's life, guarded by nothing. The numbers are gone; the enforced source
145
+ is named instead.
146
+ - `validate-analysis-doc.mjs` gated one half of Locked 2 and not the other. The
147
+ one emitted document available rendered `1..10, 12, 16, 20, 21` and nothing
148
+ looked.
149
+ - Eight pieces of dead code on the website, found by the linter rather than by
150
+ grep - which had already been wrong three times about this repo.
151
+ - **The phase bound is generation-aware, and it had to be.** Tightening
152
+ `currentPhase` to 0..5 marked every pre-v19 run log invalid - a run that
153
+ finished at phase 7 in October was correct when it was written, and a
154
+ validator that calls correct history invalid is one people learn to ignore.
155
+ A file stamped 2.2.0 or later is bounded 0..5; anything older, including the
156
+ files that predate stamping entirely, is bounded 0..7 and says so in the
157
+ error text. The same decision `metrics.jsonl` got: label the generation, do
158
+ not rewrite history. The tightening still bites where it matters - phase 7 on
159
+ a file claiming 2.2.0 is exactly what a skipped migration produces, and that
160
+ is rejected. Measured on the live corpus: 2 valid of 16 before, 11 of 16
161
+ after, and the 5 that remain were already invalid for reasons the plan had
162
+ recorded (no `currentPhase` at all, non-object phase values).
163
+ - `validate-state.mjs` did not check `retryCount`. The schema caps it at 3 and
164
+ four documents call 3 a hard kill, so `retryCount: 4` was a state that every
165
+ document forbade and every validator accepted. The bound is checked now. The
166
+ limit is named rather than overstated: this closes the validation boundary,
167
+ it does not stop the loop - that stays prose.
168
+ - **`phase-banner.sh` still had eight labels**, and it is the banner every
169
+ phase prints. Its table is bare words - `en:4) echo "Review"` - so all three
170
+ sweeps walked past it: they looked for `Phase 4 Review`, `4:Review` and
171
+ `Phase 4: Review`, and none of those spellings appear in it. It is now six
172
+ labels in both languages, and `smoke-phase-contract.sh` check 14 compares
173
+ every one against the contract and rejects a label above the last id, so the
174
+ one copy of the phase list that nothing derives is at least checked.
175
+ - A third spelling of a phase reference, `Phase N: Name`, which the first sweep
176
+ could not see: its rules matched `Phase 3 Dev` and the tracker tuple `3:Dev`,
177
+ and the colon form sits between them. It had left the canonical label table in
178
+ `skills/shared/core/multi-agent/SKILL.md` reading eight rows with six-phase
179
+ labels, and `/multi-agent:local` listing both a Phase 4 Review and a Phase 4
180
+ Commit. Fifteen files, corrected by name match rather than by number.
181
+ - The golden-task fixtures are named for the phases that produce them, so they
182
+ moved too: `phase-2-plan.json` -> `phase-1-plan.json`, `phase-4-review.json`
183
+ -> `phase-3-review.json`, `phase-4-triage.json` -> `phase-3-triage.json`.
184
+ - A doc sweep of 166 files in the repo and 68 in the source tree, none of which
185
+ the eight-phase plan had listed. Release history is deliberately excluded:
186
+ `CHANGELOG`, the `ROADMAP` "Previous Release" sections and
187
+ `docs/token-budget-history.md` keep the numbers their versions shipped with,
188
+ and four ADRs carry a pointer to ADR-0014 instead of being rewritten, because
189
+ an ADR records what was decided rather than what is true today.
190
+
191
+ ### Removed
192
+
193
+ - **The engagement page** (`src/app/_nisan`, its API routes and its admin
194
+ panel) on the website. The 16 RSVP rows were exported before anything was
195
+ deleted and **the `rsvp_entries` table is kept** - removing code does not
196
+ remove data, and dropping the table is a separate decision.
197
+
198
+ ---
199
+
17
200
  ## [18.0.0] - 2026-09-17
18
201
 
19
202
  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. 82 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.
@@ -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 |
@@ -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
 
@@ -0,0 +1,134 @@
1
+ # 14. Six phases, because two of the eight were doing the same work twice
2
+
3
+ **Status:** Accepted · 2026-09-18 · amends [ADR-0005](./0005-lazy-phase-docs.md)
4
+
5
+ Three further ADRs carry the old numbers in their bodies and now carry a pointer
6
+ back here instead of being rewritten: [ADR-0002](./0002-instruction-driven-flag.md)
7
+ (Phase 6 commit truth table), [ADR-0008](./0008-installer-modularization-and-secret-leak-defense.md)
8
+ (producer/consumer phase docs) and [ADR-0010](./0010-own-code-graph.md)
9
+ (`phase-1-analysis.md`, Phase 7 refresh). [ADR-0007](./0007-multi-tool-adapter-framework.md)
10
+ is Superseded and needs none.
11
+
12
+ ## Context
13
+
14
+ The pipeline shipped an eight-phase contract (0 Init, 1 Analysis, 2 Planning,
15
+ 3 Dev, 4 Review, 5 Test, 6 Commit, 7 Report) from v1 until v18. Two seams in
16
+ it were doing redundant work, and both were visible in the repo rather than
17
+ inferred.
18
+
19
+ **The build ran twice.** Phase 2 Dev built the project and tee'd the log
20
+ (`phase-2-dev.md:177-182`, up to three attempts). Phase 3 Review opened by
21
+ building it again (`phase-3-review.md:19-20`). Both logs fed the same evidence
22
+ gate. Nothing consumed the difference between them - the second build existed
23
+ because Review was written to be runnable standalone, not because the first
24
+ build was untrusted.
25
+
26
+ **Analysis and Planning were already one unit.** The depth picker never chose
27
+ between them: `agent-state.schema.json` described `onlyDevelop` as "Short
28
+ pipeline - phases 1 and 2 are skipped", and `features/skill-conformance.md`
29
+ opened an entire section with "Dev-mode substitutes (Phases 1 and 2 never
30
+ ran)". Two phase numbers, one decision, in every mode that had a choice.
31
+
32
+ A third fact shaped the mapping rather than motivating it: the phase count
33
+ appeared in 91 places across 40 files and **no gate held any of them**. The
34
+ command count (56) was guarded in seven files, the jq count was guarded, the
35
+ persona count was guarded. The phase count was not. A renumbering could have
36
+ left the whole tree stale and the suite would have stayed green.
37
+
38
+ ## Decision
39
+
40
+ Six phases. The mapping:
41
+
42
+ | Was | Is | Name | What changed |
43
+ |---|---|---|---|
44
+ | 0 Init | **0** | Init | Nothing |
45
+ | 1 Analysis + 2 Planning | **1** | Plan | One doc, one exit gate |
46
+ | 3 Dev + 4 Review Stage 1 | **2** | Dev | Verify became Dev's exit gate; the build runs once |
47
+ | 4 Review (Stage 2-3) + 5 Test | **3** | Review | The user test moved inside Review |
48
+ | 6 Commit | **4** | Commit | Nothing |
49
+ | 7 Report | **5** | Report | Nothing |
50
+
51
+ Analysis folds into Plan rather than into Init because of the token budget,
52
+ not preference. Init is 733 lines with a 13,400-token ceiling, already the
53
+ largest doc; adding Analysis would have put it near 18,000 and
54
+ `smoke-token-budget.sh` would have rejected it. Folded into Planning instead,
55
+ the merged doc lands under Init's existing ceiling.
56
+
57
+ Three supporting decisions came with it:
58
+
59
+ **`pipeline/schemas/phases.json` is the contract.** The phase list previously
60
+ existed as eight independent copies, none derived from another. It is now one
61
+ file that `gen-mode-dispatch.mjs`, `runs-index.mjs`, `log-metric.sh` and the
62
+ token budget read, and that `smoke-phase-contract.sh` holds every remaining
63
+ copy to. Comparison thresholds that used to be literals (`phase >= 6` for
64
+ "waiting on you", the Short-run boundary) are named fields in it.
65
+
66
+ **`smoke-no-mcp-in-dev-phases.sh` keeps its `phase >= 2` threshold, and the
67
+ gate now asserts that it is unchanged.** Figma MCP was reachable only in
68
+ Analysis (1); Analysis is now inside Plan (1). The permitted set `{0, 1}` is
69
+ identical either way. The threshold surviving a renumbering is a result of the
70
+ mapping, not an oversight, and an edit that "corrects" it would widen MCP
71
+ access - so the assertion is written as a gate rather than a comment.
72
+
73
+ **`metrics.jsonl` gets a generation marker, not a rewrite.** The file is
74
+ append-only and `phase: 3` means Dev in a pre-v19 row and Review in a post-v19
75
+ one. Every line written from v19.0.0 on carries `phaseSchema: 2`; a line
76
+ without the field is generation 1. `pipeline/lib/phase-schema.mjs` resolves
77
+ both, and the two aggregators that compared phase numbers to literals
78
+ (`token-budget-report.mjs`, `run-aggregator.mjs`) go through it. The file held
79
+ four rows at the time of the change, so migrating history was not worth doing;
80
+ adding the field was, because the next renumbering will not find four rows.
81
+
82
+ ## Consequences
83
+
84
+ Positive:
85
+
86
+ - One build per run instead of two. Phase 3 Review inherits `.build.log` and
87
+ `.test.log` from Phase 2 and runs the evidence gate against them.
88
+ - The phase count is guarded. `smoke-phase-contract.sh` derives it from
89
+ `phases.json` and checks the generator's output, the token budget, the state
90
+ schema bounds, every shipped surface that states a count, the progress
91
+ fractions in sample output, and the named thresholds. It fails on a
92
+ deliberately wrong contract - verified both ways.
93
+ - `state-2.1.0-to-2.2.0.mjs` is the first migration that rewrites phase
94
+ numbers, and it repairs four defects the live corpus already carried. The
95
+ 62-file corpus went from 52 valid to 62.
96
+
97
+ Negative:
98
+
99
+ - Two source phases can collide onto one target key in `state.phases{}`. The
100
+ merge rule (furthest-along status, max `retryCount`, union of `files[]`,
101
+ earliest start, latest finish) is a judgement call, and `retryCount` takes
102
+ the max specifically because the schema caps it at 3 and a sum would emit an
103
+ invalid state.
104
+ - Historical `agent-log.md` files keep their old phase names. They are dated
105
+ human documents and are correct as written; only new runs use new names.
106
+ - Phase 3 Review is now the largest doc in the set. Stage 1 left it and the
107
+ user test entered it, and the net is growth. Its ceiling was re-measured
108
+ after the merge rather than summed from the old two, because
109
+ `smoke-token-budget.sh` rejects a ceiling more than 25% above the
110
+ measurement - summing would have shipped a stale ceiling by construction.
111
+
112
+ ## Alternatives Considered
113
+
114
+ **Fold Analysis into Init.** Rejected on the token budget, as above. The
115
+ semantic argument pointed the same way: `onlyDevelop` already treated Analysis
116
+ and Planning as one unit, and never grouped Analysis with Init.
117
+
118
+ **Keep six phases, hide the empty tiles in the tracker.** Rejected: this is
119
+ cosmetic. The double build is a contract problem, not a display problem, and
120
+ hiding tiles would leave it running while making it harder to see.
121
+
122
+ **Fold Report into Commit.** Rejected. `ROADMAP.md` records the Phase 5
123
+ approval requirement as a permanent design line: Jira, Confluence, wiki and PR
124
+ bodies are externally visible, and content sent in the wrong tone leaks to the
125
+ team. Merging Report into Commit would put that approval gate inside a phase
126
+ that autopilot runs without interaction.
127
+
128
+ **Drop the user test entirely.** Rejected. `phase-3-review.md` produces
129
+ structured evidence that Phase 4 consumes; it is a real output, not a pause.
130
+ It moved inside Review and kept its behaviour, including its waiting state.
131
+
132
+ **Renumber without a contract file.** Rejected - this is what created the
133
+ problem being fixed. Eight hand edits to eight independent copies is the
134
+ mechanism by which the ninth copy gets missed.
@@ -14,7 +14,7 @@ Format: lightly adapted from [Michael Nygard's ADR template](https://cognitect.c
14
14
  | [0002](./0002-instruction-driven-flag.md) | instructionDriven flag as explicit pipeline fork | Accepted |
15
15
  | [0003](./0003-unified-shared-skills.md) | Unified `skills/shared/` for Claude Code + Copilot | Accepted (amended v5.3.3) |
16
16
  | [0004](./0004-zero-dependency-philosophy.md) | Keep the package zero-runtime-deps | Accepted |
17
- | [0005](./0005-lazy-phase-docs.md) | Lazy-loaded phase docs with per-phase token budget | Accepted |
17
+ | [0005](./0005-lazy-phase-docs.md) | Lazy-loaded phase docs with per-phase token budget | Accepted (amended by 0014: eight phase docs became six) |
18
18
  | [0006](./0006-skills-core-external-split.md) | `shared/core/` vs `shared/external/` source org | Accepted |
19
19
  | [0007](./0007-multi-tool-adapter-framework.md) | Multi-tool adapter framework + token-preserving uninstall | Superseded by v10.7.0 (adapters removed; Claude Code + Copilot CLI only) |
20
20
  | [0008](./0008-installer-modularization-and-secret-leak-defense.md) | Installer modularization + secret-leak defense | Accepted (amended v10.7.0: adapter module removed) |
@@ -23,6 +23,7 @@ Format: lightly adapted from [Michael Nygard's ADR template](https://cognitect.c
23
23
  | [0011](./0011-dormant-ci.md) | CI dormant in-repo; pre-push gate is primary | Accepted |
24
24
  | [0012](./0012-macos-only.md) | macOS only; Linux and Windows support removed | Accepted |
25
25
  | [0013](./0013-lsp-code-intelligence.md) | A language server for the answers regex cannot give | Accepted |
26
+ | [0014](./0014-six-phase-consolidation.md) | Six phases, because two of the eight were doing the same work twice | Accepted |
26
27
 
27
28
  ## Writing a New ADR
28
29