@mmerterden/multi-agent-pipeline 16.11.0 → 16.12.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.
- package/CHANGELOG.md +29 -0
- package/README.md +5 -3
- package/README.tr.md +5 -3
- package/docs/adr/0001-three-model-triage.md +5 -0
- package/docs/features.md +18 -2
- package/package.json +1 -1
- package/pipeline/claude-md-template.md +1 -1
- package/pipeline/commands/multi-agent/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/analysis/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/help/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/resume-local/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/review/SKILL.md +3 -3
- package/pipeline/commands/multi-agent/review-analysis/SKILL.md +1 -1
- package/pipeline/lib/figma-screenshot.sh +107 -7
- package/pipeline/lib/md2confluence-v3.py +133 -25
- package/pipeline/multi-agent-refs/analysis/locked.md +4 -3
- package/pipeline/multi-agent-refs/analysis/render.md +44 -9
- package/pipeline/multi-agent-refs/analysis/review.md +17 -1
- package/pipeline/multi-agent-refs/analysis-template-corporate.md +14 -3
- package/pipeline/multi-agent-refs/knowledge.md +1 -1
- package/pipeline/multi-agent-refs/phases/phase-4-review.md +8 -8
- package/pipeline/schemas/analysis-spec.schema.json +2 -0
- package/pipeline/schemas/reviewer-output.schema.json +1 -1
- package/pipeline/schemas/triage-output.schema.json +1 -1
- package/pipeline/scripts/anonymize-findings.mjs +1 -1
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +9 -9
- package/pipeline/scripts/validate-analysis-doc.mjs +85 -23
- package/pipeline/skills/.skills-index.json +2 -2
- package/pipeline/skills/shared/README.md +1 -1
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +3 -3
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +2 -2
- package/pipeline/skills/skills-index.md +1 -1
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/reviewer-output.schema.json",
|
|
4
4
|
"version": "1.1.0",
|
|
5
5
|
"title": "Multi-Agent Pipeline - Phase 4 reviewer output",
|
|
6
|
-
"description": "Contract for a single code-reviewer subagent's JSON output in Phase 4 Step 2.
|
|
6
|
+
"description": "Contract for a single code-reviewer subagent's JSON output in Phase 4 Step 2. Every host dispatches 3 parallel reviewers; the middle slot is CLI-aware: Claude Code (Fable, Opus, Sonnet); Copilot CLI (Opus, GPT-5.4, Sonnet); Codex CLI dispatches 3 (gpt-5.6 at xhigh, gpt-5.4, gpt-5.6 at medium). Every reviewer must return an object matching this shape before Opus triage merges them. v1.1.0 adds the rule-ID conformance checklist: when the orchestrator supplies a ${CRITERIA} block (Phase 4 Step 1.78), the reviewer must return one conformance row per selected rule ID. Findings alone cannot answer 'was this applied completely' - a reviewer that opened nothing returns the same empty findings array as one that checked everything.",
|
|
7
7
|
"type": "object",
|
|
8
8
|
"additionalProperties": false,
|
|
9
9
|
"required": ["findings", "approved"],
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"reviewerCount": {
|
|
103
103
|
"type": "integer",
|
|
104
104
|
"minimum": 1,
|
|
105
|
-
"description": "Reviewers dispatched this iteration (Claude Code =
|
|
105
|
+
"description": "Reviewers dispatched this iteration (Claude Code = 3, Copilot CLI = 3, Codex CLI = 3)."
|
|
106
106
|
},
|
|
107
107
|
"verdict": {
|
|
108
108
|
"type": "string",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// anonymize-findings.mjs - strip reviewer identity before a model judges findings.
|
|
3
3
|
//
|
|
4
|
-
// Phase 4 dispatches
|
|
4
|
+
// Phase 4 dispatches 3 reviewers on Claude Code (Fable + Opus + Sonnet) and 3 on
|
|
5
5
|
// Copilot CLI (GPT + Opus + Sonnet), then hands the merged findings to triage -
|
|
6
6
|
// Fable on Claude Code, Opus on Copilot. On both sides the triage model is also
|
|
7
7
|
// one of the reviewers, and Step 3.2 used to label the input "Reviewer 1 +
|
|
@@ -185,12 +185,12 @@ else
|
|
|
185
185
|
fi
|
|
186
186
|
|
|
187
187
|
# ──────────────────────────────────────────────────────────────────────────
|
|
188
|
-
# CLI-aware reviewer-count contract: Claude Code =
|
|
188
|
+
# CLI-aware reviewer-count contract: Claude Code = 3 (Fable + Opus + Sonnet), Copilot CLI
|
|
189
189
|
# = 3 (Opus + GPT-5.4 + Sonnet), Codex CLI = 3 (gpt-5.6 xhigh + gpt-5.4 + gpt-5.6
|
|
190
190
|
# medium). Nothing in code enforces the count (the orchestrator dispatches per the
|
|
191
191
|
# doc), so lock the CONTRACT here against drift across the phase doc, the schema,
|
|
192
192
|
# and the consensus block.
|
|
193
|
-
echo "→ reviewer-count contract (Claude=
|
|
193
|
+
echo "→ reviewer-count contract (Claude=3, Copilot=3, Codex=3)"
|
|
194
194
|
# `/multi-agent:update` runs this smoke on the user's machine, where the tree is
|
|
195
195
|
# ~/.claude/{schemas,multi-agent-refs} and NOT <root>/pipeline/*. Resolving the
|
|
196
196
|
# root by hand here reported three phantom failures in an install, which reads as
|
|
@@ -203,10 +203,10 @@ TRSCHEMA="${MA_SCHEMAS:+$MA_SCHEMAS/triage-output.schema.json}"
|
|
|
203
203
|
|
|
204
204
|
if [ -z "$P4" ] || [ ! -f "$P4" ]; then
|
|
205
205
|
echo " ↷ SKIP: phase-4-review.md not present in this $MA_LAYOUT layout"
|
|
206
|
-
elif grep -qiE "Claude Code (dispatches|=|:) ?
|
|
206
|
+
elif grep -qiE "Claude Code (dispatches|=|:) ?3|Claude Code dispatches Fable \+ Opus \+ Sonnet" "$P4" \
|
|
207
207
|
&& grep -qiE "Copilot CLI (dispatches|=|:) ?3|3-model" "$P4" \
|
|
208
|
-
&& grep -qiE "Codex CLI (dispatches|=|:) ?3|Claude Code
|
|
209
|
-
pass "phase-4-review declares Claude=
|
|
208
|
+
&& grep -qiE "Codex CLI (dispatches|=|:) ?3|Claude Code 3, Copilot CLI 3, Codex CLI 3" "$P4"; then
|
|
209
|
+
pass "phase-4-review declares Claude=3 / Copilot=3 / Codex=3 reviewers"
|
|
210
210
|
else
|
|
211
211
|
fail "phase-4-review does not declare the CLI-aware reviewer count for all three hosts"
|
|
212
212
|
fi
|
|
@@ -231,13 +231,13 @@ else
|
|
|
231
231
|
fail "reviewer-output schema missing the CLI-aware note"
|
|
232
232
|
fi
|
|
233
233
|
|
|
234
|
-
# consensus.reviewerCount must accommodate
|
|
234
|
+
# consensus.reviewerCount must accommodate 3 on every host (min 1, no max < 3)
|
|
235
235
|
if [ -z "$TRSCHEMA" ] || [ ! -f "$TRSCHEMA" ]; then
|
|
236
236
|
echo " ↷ SKIP: triage-output.schema.json not present in this $MA_LAYOUT layout"
|
|
237
|
-
elif grep -q '"reviewerCount"' "$TRSCHEMA" && grep -qi "Claude Code =
|
|
238
|
-
pass "triage consensus.reviewerCount documents
|
|
237
|
+
elif grep -q '"reviewerCount"' "$TRSCHEMA" && grep -qi "Claude Code = 3, Copilot CLI = 3" "$TRSCHEMA"; then
|
|
238
|
+
pass "triage consensus.reviewerCount documents 3 reviewers on every host"
|
|
239
239
|
else
|
|
240
|
-
fail "triage consensus.reviewerCount does not document the
|
|
240
|
+
fail "triage consensus.reviewerCount does not document the 3-reviewer set"
|
|
241
241
|
fi
|
|
242
242
|
|
|
243
243
|
echo ""
|
|
@@ -215,11 +215,15 @@ function main() {
|
|
|
215
215
|
}
|
|
216
216
|
}
|
|
217
217
|
|
|
218
|
-
// 2a. Corporate profile: every EKLENECEK owes an open question.
|
|
218
|
+
// 2a. Corporate profile: every EKLENECEK owes an open question, by id.
|
|
219
219
|
//
|
|
220
220
|
// A placeholder with nobody assigned to resolve it is how "to be filled in"
|
|
221
|
-
// reaches production.
|
|
222
|
-
//
|
|
221
|
+
// reaches production. This used to pair a gap with Section 20 by matching the
|
|
222
|
+
// section NUMBER inside the risks block, which is ambiguous in both directions:
|
|
223
|
+
// "9" is a substring of "19" and "5.9" of "5.9.5", so the regex grew guards for
|
|
224
|
+
// cases it still could not separate. Stable ids remove the ambiguity the same
|
|
225
|
+
// way IG / UC / FG already do: the body writes EKLENECEK (AS-07) and Section 20
|
|
226
|
+
// defines AS-07, and each side is checked against the other.
|
|
223
227
|
if (profile === "corporate") {
|
|
224
228
|
const lines = text.split("\n");
|
|
225
229
|
const risksStart = lines.findIndex((l) =>
|
|
@@ -232,29 +236,61 @@ function main() {
|
|
|
232
236
|
risksBlock += `${lines[i]}\n`;
|
|
233
237
|
}
|
|
234
238
|
}
|
|
235
|
-
|
|
236
|
-
const
|
|
239
|
+
const AS_ID = /\bAS-(\d{2,3})\b/g;
|
|
240
|
+
const definedIds = new Set(
|
|
241
|
+
[...risksBlock.matchAll(AS_ID)].map((m) => `AS-${m[1]}`),
|
|
242
|
+
);
|
|
243
|
+
const referencedIds = new Set();
|
|
237
244
|
for (let i = 0; i < lines.length; i++) {
|
|
238
|
-
const m = lines[i].match(/^#{2,4}\s+(\d+(?:\.\d+)*)\.?\s/);
|
|
239
|
-
if (m) currentSection = m[1];
|
|
240
|
-
if (!lines[i].includes("EKLENECEK")) continue;
|
|
241
245
|
if (risksStart !== -1 && i > risksStart) continue;
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
//
|
|
245
|
-
//
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
);
|
|
252
|
-
if (!token.test(risksBlock)) unpaired.add(currentSection);
|
|
246
|
+
for (const m of lines[i].matchAll(AS_ID)) referencedIds.add(`AS-${m[1]}`);
|
|
247
|
+
if (!lines[i].includes("EKLENECEK")) continue;
|
|
248
|
+
// A gap that names no id cannot be traced to an owner, which is the whole
|
|
249
|
+
// point of admitting it.
|
|
250
|
+
if (!/\bAS-\d{2,3}\b/.test(lines[i])) {
|
|
251
|
+
errors.push(
|
|
252
|
+
`line ${i + 1}: EKLENECEK carries no AS-NN reference (Locked 33)`,
|
|
253
|
+
);
|
|
254
|
+
}
|
|
253
255
|
}
|
|
254
|
-
for (const
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
256
|
+
for (const id of referencedIds) {
|
|
257
|
+
if (!definedIds.has(id)) {
|
|
258
|
+
errors.push(
|
|
259
|
+
`${id} is referenced in the body but not defined in Risks and Open Questions (Locked 33)`,
|
|
260
|
+
);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
for (const id of definedIds) {
|
|
264
|
+
if (!referencedIds.has(id)) {
|
|
265
|
+
// An open question with no body reference is allowed only when the row
|
|
266
|
+
// says so; otherwise it is a question about nothing the document raises.
|
|
267
|
+
const row = risksBlock
|
|
268
|
+
.split("\n")
|
|
269
|
+
.find((l) => l.includes(id)) || "";
|
|
270
|
+
if (!/(no body reference|govde referansi yok)/i.test(row)) {
|
|
271
|
+
errors.push(
|
|
272
|
+
`${id} is defined in Risks and Open Questions but never referenced in the body (Locked 33)`,
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// 2b. JSON does not fit in a table cell (Locked 37).
|
|
279
|
+
//
|
|
280
|
+
// One document rendered `Request` as inline JSON with a field note glued to
|
|
281
|
+
// the end, and `Response` as a proper fenced block below the table: two
|
|
282
|
+
// formats for the same thing, one table apart. The payload belongs under the
|
|
283
|
+
// table; the cell says which of the three states it is in.
|
|
284
|
+
for (let i = 0; i < lines.length; i++) {
|
|
285
|
+
const line = lines[i];
|
|
286
|
+
if (!/^\|\s*\*\*(Request|Response)\*\*\s*\|/.test(line)) continue;
|
|
287
|
+
const cell = line.split("|")[2] || "";
|
|
288
|
+
if (/[{}]/.test(cell)) {
|
|
289
|
+
errors.push(
|
|
290
|
+
`line ${i + 1}: ${/Request/.test(line) ? "Request" : "Response"} cell holds JSON; ` +
|
|
291
|
+
"put the payload in a fenced block under the table (Locked 37)",
|
|
292
|
+
);
|
|
293
|
+
}
|
|
258
294
|
}
|
|
259
295
|
|
|
260
296
|
// The traceability matrix is the most expensive thing in the document to get
|
|
@@ -295,6 +331,32 @@ function main() {
|
|
|
295
331
|
}
|
|
296
332
|
}
|
|
297
333
|
|
|
334
|
+
// 2c. Diagram labels keep their diacritics.
|
|
335
|
+
//
|
|
336
|
+
// The punctuation gate skips fenced blocks, so a mermaid diagram is the one
|
|
337
|
+
// place a Turkish document can quietly go ASCII: one run shipped `Hayir` and
|
|
338
|
+
// `Basarili` in its flow chart while every other line was correct. A warning,
|
|
339
|
+
// not an error - node ids are legitimately ASCII, only labels are checked.
|
|
340
|
+
if (parsed.fm.language === "tr") {
|
|
341
|
+
const mmLines = text.split("\n");
|
|
342
|
+
let inMermaid = false;
|
|
343
|
+
for (let i = 0; i < mmLines.length; i++) {
|
|
344
|
+
const t = mmLines[i].trim();
|
|
345
|
+
if (/^```mermaid\s*$/.test(t)) { inMermaid = true; continue; }
|
|
346
|
+
if (inMermaid && t === "```") { inMermaid = false; continue; }
|
|
347
|
+
if (!inMermaid) continue;
|
|
348
|
+
const labels = [...mmLines[i].matchAll(/[[({|]([^\]})|]{3,})[\]})|]/g)].map((m) => m[1]);
|
|
349
|
+
for (const lbl of labels) {
|
|
350
|
+
if (/^[\x20-\x7E]+$/.test(lbl) && /\b(Hayir|Basarili|Basarisiz|Odeme|Iptal|Gecerli|Gecersiz|Secim|Dogrulama|Uyari|Baslangic|Bitis|Onay|Aciklama)\b/.test(lbl)) {
|
|
351
|
+
errors.push(
|
|
352
|
+
`WARN line ${i + 1}: diagram label "${lbl}" looks like Turkish flattened to ASCII (Locked 7)`,
|
|
353
|
+
);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
|
|
298
360
|
// 2b. Opt-in coverage sections must be present when the front-matter says so.
|
|
299
361
|
const uiTests = String(parsed?.fm?.ui_tests || "false").toLowerCase() === "true";
|
|
300
362
|
const a11yDepth = String(parsed?.fm?.a11y_depth || "basic").toLowerCase();
|
|
@@ -950,7 +950,7 @@
|
|
|
950
950
|
},
|
|
951
951
|
{
|
|
952
952
|
"name": "multi-agent",
|
|
953
|
-
"description": "Task orchestrator: runs the full pipeline from a Jira ID or GitHub Issue URL - analysis → plan → TDD development → parallel review (Fable + Sonnet on Claude Code, GPT + Opus + Sonnet on Copilot CLI) → commit → log. Every step is written to agent-log.md. Use when given a Jira ID, a GitHub issue or ",
|
|
953
|
+
"description": "Task orchestrator: runs the full pipeline from a Jira ID or GitHub Issue URL - analysis → plan → TDD development → parallel review (Fable + Opus + Sonnet on Claude Code, GPT + Opus + Sonnet on Copilot CLI) → commit → log. Every step is written to agent-log.md. Use when given a Jira ID, a GitHub issue or ",
|
|
954
954
|
"platform": null,
|
|
955
955
|
"group": "core",
|
|
956
956
|
"plugin": null,
|
|
@@ -1313,7 +1313,7 @@
|
|
|
1313
1313
|
},
|
|
1314
1314
|
{
|
|
1315
1315
|
"name": "multi-agent-review",
|
|
1316
|
-
"description": "Run parallel review on a branch diff or a Pull Request:
|
|
1316
|
+
"description": "Run parallel review on a branch diff or a Pull Request: 3 models on Claude Code (Fable + Opus + Sonnet), 3 models on Copilot CLI (GPT + Opus + Sonnet). On PR input, posts per-finding inline comments + approve/needs-work. With no input (interactive), lists open GitHub + Bitbucket PRs to multi-select. Use wh",
|
|
1317
1317
|
"platform": null,
|
|
1318
1318
|
"group": "core",
|
|
1319
1319
|
"plugin": null,
|
|
@@ -60,7 +60,7 @@ Source layout is logical grouping only - skill discovery at runtime is unchang
|
|
|
60
60
|
| [`multi-agent-refactor`](./core/multi-agent-refactor/) | `core` | Analyse the project: extract adapted best-practices, hunt real bugs + improvement areas, check upstream drift of derived skills, research th |
|
|
61
61
|
| [`multi-agent-resume`](./core/multi-agent-resume/) | `core` | Resume a stopped or failed task from the phase where it left off. Use when a task stopped or failed and should carry on from where it left o |
|
|
62
62
|
| [`multi-agent-resume-local`](./core/multi-agent-resume-local/) | `core` | Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenari |
|
|
63
|
-
| [`multi-agent-review`](./core/multi-agent-review/) | `core` | Run parallel review on a branch diff or a Pull Request:
|
|
63
|
+
| [`multi-agent-review`](./core/multi-agent-review/) | `core` | Run parallel review on a branch diff or a Pull Request: 3 models on Claude Code (Fable + Opus + Sonnet), 3 models on Copilot CLI (GPT + Opus + Sonn |
|
|
64
64
|
| [`multi-agent-review-analysis`](./core/multi-agent-review-analysis/) | `core` | Review a written analysis document instead of a diff: resolve it from a path, a Confluence page or a Jira issue, run the deterministic gates |
|
|
65
65
|
| [`multi-agent-review-issue`](./core/multi-agent-review-issue/) | `core` | Assess whether a GitHub issue is ready for multi-agent development: fetch it, grade scope / acceptance criteria / repro / design / API / sta |
|
|
66
66
|
| [`multi-agent-review-jira`](./core/multi-agent-review-jira/) | `core` | Assess whether a Jira issue is ready for multi-agent development: fetch it, grade scope / acceptance criteria / repro / design / API / stack |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: multi-agent
|
|
3
3
|
language: en
|
|
4
|
-
description: "Task orchestrator: runs the full pipeline from a Jira ID or GitHub Issue URL - analysis → plan → TDD development → parallel review (Fable + Sonnet on Claude Code, GPT + Opus + Sonnet on Copilot CLI) → commit → log. Every step is written to agent-log.md. Use when given a Jira ID, a GitHub issue or a free-text task and the whole pipeline should run."
|
|
4
|
+
description: "Task orchestrator: runs the full pipeline from a Jira ID or GitHub Issue URL - analysis → plan → TDD development → parallel review (Fable + Opus + Sonnet on Claude Code, GPT + Opus + Sonnet on Copilot CLI) → commit → log. Every step is written to agent-log.md. Use when given a Jira ID, a GitHub issue or a free-text task and the whole pipeline should run."
|
|
5
5
|
user-invocable: true
|
|
6
6
|
argument-hint: '"PROJ-12345" "feature/PROJ-12345-flight-filter" | "https://github.com/.../issues/316" | status | log #1 | resume #1 | kill #1 | clear-logs | purge | review'
|
|
7
7
|
---
|
|
@@ -455,7 +455,7 @@ For each todo (respecting dependency order):
|
|
|
455
455
|
### Phase 4: Review (parallel + triage)
|
|
456
456
|
0. **Diff Risk Scoring (advisory, v8.3+)** - before reviewer dispatch run `node $HOME/.claude/scripts/diff-risk-score.mjs --base "$BASE_BRANCH" --top 5` and inject the top-N risk-ranked files as a `${PRIORITY_FILES}` block into each reviewer's prompt. Heuristic, deterministic, sub-second, never gates the pipeline. Disabled when `prefs.global.diffRiskAdvisory = false`. Signals: security paths (×3), schema migrations (×4), public API surfaces (×2), no-test-change (×2.5), complexity delta (×1.5), UI-critical paths (×1.5), loc changed (×1).
|
|
457
457
|
1. Launch **code-reviewer** agents in parallel. Reviewer set depends on which CLI is hosting the pipeline:
|
|
458
|
-
- **Claude Code** (
|
|
458
|
+
- **Claude Code** (3 reviewers): `claude-fable-5` (deep security + architecture) + `claude-sonnet-5` (quality + correctness)
|
|
459
459
|
- **Copilot CLI** (3 reviewers): `gpt-5.4` (edge cases, different perspective) + `claude-opus-5` + `claude-sonnet-5` (Fable 5 is not offered on Copilot CLI)
|
|
460
460
|
- Triage: single top-tier pass over merged findings (`claude-fable-5` on Claude Code, `claude-opus-5` on Copilot CLI)
|
|
461
461
|
2. Collect findings, classify:
|
|
@@ -656,7 +656,7 @@ Phase 3: Dev
|
|
|
656
656
|
└─ TDD, token rules, code style - from global instructions
|
|
657
657
|
|
|
658
658
|
Phase 4: Review (parallel + triage)
|
|
659
|
-
Claude Code (
|
|
659
|
+
Claude Code (3 parallel):
|
|
660
660
|
├─ code-reviewer (claude-opus) → all 5 review skills
|
|
661
661
|
└─ code-reviewer (claude-sonnet) → all 5 review skills
|
|
662
662
|
Copilot CLI (3 parallel):
|
|
@@ -63,7 +63,7 @@ Pipeline (after Phase 0):
|
|
|
63
63
|
Phase 2: Planning -> Task breakdown + architecture review + Plan Approval Gate
|
|
64
64
|
Phase 3: Dev -> TDD: test -> code -> build (Sonnet) + build queue
|
|
65
65
|
Phase 4: Review -> Deterministic gates + parallel AI review + Fable triage
|
|
66
|
-
(Claude Code: Fable + Sonnet · Copilot CLI: GPT-5.4 + Opus + Sonnet)
|
|
66
|
+
(Claude Code: Fable + Opus + Sonnet · Copilot CLI: GPT-5.4 + Opus + Sonnet)
|
|
67
67
|
Phase 5: Test -> Optional: switch to branch, test in Xcode
|
|
68
68
|
Phase 6: Commit -> Commit -> push -> PR + issue body update (never auto-closes)
|
|
69
69
|
Phase 7: Report -> Channels dispatcher (PR · Jira · Confluence · Wiki, multi-select)
|
|
@@ -240,7 +240,7 @@ Pipeline (Phase 0'dan sonra):
|
|
|
240
240
|
Phase 2: Planning -> Task kırılımı + mimari inceleme + Plan Onay Kapısı
|
|
241
241
|
Phase 3: Dev -> TDD: test -> kod -> build (Sonnet) + build queue
|
|
242
242
|
Phase 4: Review -> Deterministik kapılar + paralel AI review + Fable triage
|
|
243
|
-
(Claude Code: Fable + Sonnet · Copilot CLI: GPT-5.4 + Opus + Sonnet)
|
|
243
|
+
(Claude Code: Fable + Opus + Sonnet · Copilot CLI: GPT-5.4 + Opus + Sonnet)
|
|
244
244
|
Phase 5: Test -> Opsiyonel: branch'e geç, Xcode'da test
|
|
245
245
|
Phase 6: Commit -> Commit -> push -> PR + issue body güncelleme (hiç auto-close yok)
|
|
246
246
|
Phase 7: Report -> Channels dispatcher (PR · Jira · Confluence · Wiki, multi-select)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: multi-agent-review
|
|
3
3
|
language: en
|
|
4
|
-
description: "Run parallel review on a branch diff or a Pull Request:
|
|
4
|
+
description: "Run parallel review on a branch diff or a Pull Request: 3 models on Claude Code (Fable + Opus + Sonnet), 3 models on Copilot CLI (GPT + Opus + Sonnet). On PR input, posts per-finding inline comments + approve/needs-work. With no input (interactive), lists open GitHub + Bitbucket PRs to multi-select. Use when a branch diff or a pull request needs reviewing before it merges."
|
|
5
5
|
user-invocable: true
|
|
6
6
|
argument-hint: "[#N | repo#N | PR-URL | branch] - PR by number/URL, repo+number, or branch (GitHub + Bitbucket Server). If omitted: interactive PR picker, else current branch."
|
|
7
7
|
---
|
|
@@ -33,7 +33,7 @@ Skip Phase 0-3 and review a diff only. Input shapes: a PR (`#N`, `repo#N`, GitHu
|
|
|
33
33
|
|
|
34
34
|
3. **Start parallel reviewers** - reviewer set depends on the host CLI:
|
|
35
35
|
|
|
36
|
-
**Claude Code (
|
|
36
|
+
**Claude Code (3 in parallel):**
|
|
37
37
|
- Agent 1: `claude-fable-5` → security + architecture
|
|
38
38
|
- Agent 2: `claude-sonnet-5` → general quality
|
|
39
39
|
|
|
@@ -126,7 +126,7 @@
|
|
|
126
126
|
| core | `multi-agent-refactor` | - | Analyse the project: extract adapted best-practices, hunt real bugs + improvement areas, check upstream drift of derived skills, research th |
|
|
127
127
|
| core | `multi-agent-resume` | - | Resume a stopped or failed task from the phase where it left off. Use when a task stopped or failed and should carry on from where it left o |
|
|
128
128
|
| core | `multi-agent-resume-local` | - | Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenari |
|
|
129
|
-
| core | `multi-agent-review` | - | Run parallel review on a branch diff or a Pull Request:
|
|
129
|
+
| core | `multi-agent-review` | - | Run parallel review on a branch diff or a Pull Request: 3 models on Claude Code (Fable + Opus + Sonnet), 3 models on Copilot CLI (GPT + Opus + Sonn |
|
|
130
130
|
| core | `multi-agent-review-analysis` | - | Review a written analysis document instead of a diff: resolve it from a path, a Confluence page or a Jira issue, run the deterministic gates |
|
|
131
131
|
| core | `multi-agent-review-issue` | - | Assess whether a GitHub issue is ready for multi-agent development: fetch it, grade scope / acceptance criteria / repro / design / API / sta |
|
|
132
132
|
| core | `multi-agent-review-jira` | - | Assess whether a Jira issue is ready for multi-agent development: fetch it, grade scope / acceptance criteria / repro / design / API / stack |
|