@mmerterden/multi-agent-pipeline 12.6.0 → 12.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +83 -0
- package/README.md +18 -18
- package/docs/FIGMA_PIPELINE.md +34 -34
- package/docs/adr/0001-three-model-triage.md +12 -12
- package/docs/adr/0002-instruction-driven-flag.md +5 -5
- package/docs/adr/0003-unified-shared-skills.md +5 -5
- package/docs/adr/0004-zero-dependency-philosophy.md +5 -5
- package/docs/adr/0005-lazy-phase-docs.md +2 -2
- package/docs/adr/0006-skills-core-external-split.md +6 -6
- package/docs/adr/0007-multi-tool-adapter-framework.md +19 -19
- package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +19 -19
- package/docs/adr/README.md +1 -1
- package/docs/best-practices.md +3 -3
- package/docs/features.md +28 -28
- package/docs/performance.md +16 -16
- package/docs/recovery-guide.md +39 -39
- package/index.js +4 -4
- package/install/_common.mjs +5 -11
- package/install/_copilot-instructions.mjs +2 -2
- package/install/_dev-only-files.mjs +1 -1
- package/install/_platform-filter.mjs +1 -1
- package/install/_telemetry.mjs +1 -1
- package/install/claude.mjs +10 -9
- package/install/copilot.mjs +10 -19
- package/install/index.mjs +7 -15
- package/install/templates/copilot-instructions.md +54 -54
- package/install.js +1 -1
- package/package.json +13 -10
- package/pipeline/commands/multi-agent/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/analysis/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/autopilot/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/build-optimize/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/create-jira/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/design-check/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/dev/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/dev-autopilot/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/dev-local/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/dev-local-autopilot/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/diff-explain/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/finish/SKILL.md +6 -6
- package/pipeline/commands/multi-agent/forget/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/help/SKILL.md +3 -3
- package/pipeline/commands/multi-agent/issue/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/jira/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/kill/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/language/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/local/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/log/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/manual-test/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/prune-logs/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/purge/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/refactor/SKILL.md +16 -8
- package/pipeline/commands/multi-agent/resume/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/review/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/review-issue/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/review-jira/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/routines/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/save/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/scan/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/search/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/setup/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/stack/SKILL.md +3 -3
- package/pipeline/commands/multi-agent/status/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/sync/SKILL.md +5 -5
- package/pipeline/commands/multi-agent/test/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/uninstall/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/update/SKILL.md +3 -3
- package/pipeline/eval/run-metrics-fixture.json +60 -13
- package/pipeline/lib/account-resolver.sh +1 -1
- package/pipeline/lib/channels-multi-repo.sh +1 -1
- package/pipeline/lib/context-link-extractor.sh +1 -1
- package/pipeline/lib/credential-store.sh +1 -1
- package/pipeline/lib/fetch-confluence.sh +1 -1
- package/pipeline/lib/fetch-crashlytics.sh +1 -1
- package/pipeline/lib/fetch-fortify.sh +1 -1
- package/pipeline/lib/fetch-graylog.sh +1 -1
- package/pipeline/lib/fetch-swagger.sh +1 -1
- package/pipeline/lib/issue-fetcher.sh +1 -1
- package/pipeline/lib/multi-repo-pipeline.sh +1 -1
- package/pipeline/lib/repo-cache.sh +1 -1
- package/pipeline/lib/submodule-detector.sh +1 -1
- package/pipeline/multi-agent-refs/component-dispatch.md +1 -1
- package/pipeline/multi-agent-refs/component-generation.md +121 -0
- package/pipeline/multi-agent-refs/cross-cli-contract.md +1 -1
- package/pipeline/multi-agent-refs/features/model-fallback.md +2 -2
- package/pipeline/multi-agent-refs/phases/phase-4-review.md +1 -1
- package/pipeline/preferences-template.json +5 -11
- package/pipeline/schemas/agent-state.schema.json +39 -9
- package/pipeline/schemas/analysis-output.schema.json +18 -4
- package/pipeline/schemas/analysis-spec.schema.json +120 -32
- package/pipeline/schemas/clarify-output.schema.json +15 -5
- package/pipeline/schemas/design-check-config.schema.json +32 -11
- package/pipeline/schemas/dev-critic-output.schema.json +20 -5
- package/pipeline/schemas/figma-project-config.schema.json +42 -10
- package/pipeline/schemas/learnings-ledger.schema.json +10 -2
- package/pipeline/schemas/migrations/figma-config-1.0.0-to-2.0.0.mjs +1 -4
- package/pipeline/schemas/migrations/prefs-2.0.0-to-2.1.0.mjs +24 -7
- package/pipeline/schemas/plan-todos.schema.json +6 -3
- package/pipeline/schemas/planning-output.schema.json +5 -1
- package/pipeline/schemas/prefs.schema.json +91 -229
- package/pipeline/schemas/test-gap.schema.json +5 -5
- package/pipeline/schemas/token-budget.json +8 -8
- package/pipeline/schemas/triage-corpus.schema.json +1 -1
- package/pipeline/scripts/aggregate-metrics.mjs +18 -6
- package/pipeline/scripts/build-skills-index.mjs +6 -2
- package/pipeline/scripts/build-stack-plugins.mjs +142 -39
- package/pipeline/scripts/check-derived-drift.mjs +196 -0
- package/pipeline/scripts/check-md-links.mjs +6 -2
- package/pipeline/scripts/classify-plan-safety.mjs +20 -7
- package/pipeline/scripts/cost-budget-check.mjs +2 -1
- package/pipeline/scripts/cost-table.json +1 -1
- package/pipeline/scripts/diff-explain.mjs +7 -3
- package/pipeline/scripts/diff-risk-score.mjs +13 -3
- package/pipeline/scripts/eval-golden-tasks-live.mjs +8 -3
- package/pipeline/scripts/eval-golden-tasks.mjs +21 -9
- package/pipeline/scripts/eval-intent.mjs +8 -4
- package/pipeline/scripts/eval-mine-corpus.mjs +14 -4
- package/pipeline/scripts/evidence-gate.mjs +7 -2
- package/pipeline/scripts/fixtures/install-layout.tsv +3 -3
- package/pipeline/scripts/gen-mode-dispatch.mjs +38 -21
- package/pipeline/scripts/gen-skills-index.mjs +18 -3
- package/pipeline/scripts/learning-curve.mjs +13 -3
- package/pipeline/scripts/learnings-ledger.mjs +103 -36
- package/pipeline/scripts/lint-mcp-refs.mjs +13 -2
- package/pipeline/scripts/lint-skills.mjs +20 -9
- package/pipeline/scripts/localize-commands.mjs +6 -1
- package/pipeline/scripts/match-skills.mjs +15 -4
- package/pipeline/scripts/migrate-prefs.mjs +33 -16
- package/pipeline/scripts/phase-tracker.sh +3 -1
- package/pipeline/scripts/repo-map.mjs +110 -64
- package/pipeline/scripts/review-scope.mjs +7 -1
- package/pipeline/scripts/routine-registry.mjs +4 -9
- package/pipeline/scripts/run-aggregator.mjs +11 -5
- package/pipeline/scripts/run-metrics.mjs +13 -8
- package/pipeline/scripts/run-smokes.mjs +57 -3
- package/pipeline/scripts/scorecard.mjs +258 -0
- package/pipeline/scripts/smoke-context-budget.sh +72 -0
- package/pipeline/scripts/smoke-model-fallback.sh +1 -1
- package/pipeline/scripts/smoke-no-mcp-in-dev-phases.sh +86 -7
- package/pipeline/scripts/smoke-own-punctuation.sh +103 -0
- package/pipeline/scripts/smoke-workflow-audit.sh +43 -11
- package/pipeline/scripts/smoke-write-state.sh +49 -5
- package/pipeline/scripts/test-gap-rules/android.json +11 -11
- package/pipeline/scripts/test-gap-rules/ios.json +16 -11
- package/pipeline/scripts/test-gap-rules/node.json +19 -7
- package/pipeline/scripts/test-gap-rules/python.json +10 -4
- package/pipeline/scripts/test-gap-scan.mjs +44 -12
- package/pipeline/scripts/test-integrity-gate.mjs +5 -1
- package/pipeline/scripts/token-budget-report.mjs +44 -21
- package/pipeline/scripts/triage-memory.mjs +126 -34
- package/pipeline/scripts/uninstall.mjs +74 -30
- package/pipeline/scripts/validate-analysis-doc.mjs +15 -5
- package/pipeline/scripts/validate-diff-risk.mjs +32 -18
- package/pipeline/scripts/validate-test-gap.mjs +17 -7
- package/pipeline/scripts/validate-triage.mjs +17 -5
- package/pipeline/scripts/write-state.mjs +32 -9
- package/pipeline/skills/.skills-index.json +91 -91
- package/pipeline/skills/shared/README.md +57 -57
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +1 -1
- package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +26 -279
- package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-forget/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-garbage-collect/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +16 -8
- package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-review-issue/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-review-jira/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-routines/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-save/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +3 -3
- package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +1 -1
- package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +1 -1
- package/pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md +4 -4
- package/pipeline/skills/shared/external/agentflow/SKILL.md +1 -1
- package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +1 -1
- package/pipeline/skills/shared/external/android_ui_verification/SKILL.md +1 -1
- package/pipeline/skills/shared/external/api-patterns/SKILL.md +1 -1
- package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +1 -1
- package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +1 -1
- package/pipeline/skills/shared/external/backlog/BACKLOG.md +1 -1
- package/pipeline/skills/shared/external/backlog/SKILL.md +12 -12
- package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +1 -1
- package/pipeline/skills/shared/external/context-compression/SKILL.md +1 -1
- package/pipeline/skills/shared/external/council/SKILL.md +3 -3
- package/pipeline/skills/shared/external/css-modern/SKILL.md +1 -1
- package/pipeline/skills/shared/external/database-patterns/SKILL.md +1 -1
- package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +1 -1
- package/pipeline/skills/shared/external/docker-expert/SKILL.md +1 -1
- package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +1 -1
- package/pipeline/skills/shared/external/firebase/SKILL.md +1 -1
- package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +1 -1
- package/pipeline/skills/shared/external/help-skills/SKILL.md +1 -1
- package/pipeline/skills/shared/external/hig-components-content/SKILL.md +1 -1
- package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +1 -1
- package/pipeline/skills/shared/external/hig-components-status/SKILL.md +1 -1
- package/pipeline/skills/shared/external/hig-components-system/SKILL.md +1 -1
- package/pipeline/skills/shared/external/hig-foundations/SKILL.md +1 -1
- package/pipeline/skills/shared/external/hig-inputs/SKILL.md +1 -1
- package/pipeline/skills/shared/external/hig-patterns/SKILL.md +1 -1
- package/pipeline/skills/shared/external/hig-platforms/SKILL.md +1 -1
- package/pipeline/skills/shared/external/hig-technologies/SKILL.md +1 -1
- package/pipeline/skills/shared/external/html-semantic/SKILL.md +1 -1
- package/pipeline/skills/shared/external/humanizer/SKILL.md +1 -1
- package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +1 -1
- package/pipeline/skills/shared/external/ios-developer/SKILL.md +1 -1
- package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +1 -1
- package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +1 -1
- package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +1 -1
- package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +1 -1
- package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +1 -1
- package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +1 -1
- package/pipeline/skills/shared/external/observability-engineer/SKILL.md +1 -1
- package/pipeline/skills/shared/external/python-patterns/SKILL.md +1 -1
- package/pipeline/skills/shared/external/react-best-practices/SKILL.md +1 -1
- package/pipeline/skills/shared/external/rest-api-design/SKILL.md +1 -1
- package/pipeline/skills/shared/external/search-first/SKILL.md +2 -2
- package/pipeline/skills/shared/external/skill-creator/SKILL.md +12 -12
- package/pipeline/skills/shared/external/skill-creator/audit.md +21 -21
- package/pipeline/skills/shared/external/skill-creator/checklist.md +3 -3
- package/pipeline/skills/shared/external/skill-creator/examples.md +10 -10
- package/pipeline/skills/shared/external/skill-creator/label-check.md +17 -17
- package/pipeline/skills/shared/external/skill-creator/scripts/audit-panel.js +86 -50
- package/pipeline/skills/shared/external/skill-creator/template.md +9 -9
- package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +1 -1
- package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +1 -1
- package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +1 -1
- package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +1 -1
- package/pipeline/skills/shared/external/tailwind-css/SKILL.md +1 -1
- package/pipeline/skills/shared/external/testing-backend/SKILL.md +1 -1
- package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +1 -1
- package/pipeline/skills/shared/external/vue-composition/SKILL.md +1 -1
- package/pipeline/skills/shared/external/web-accessibility/SKILL.md +1 -1
- package/pipeline/skills/shared/external/web-performance/SKILL.md +1 -1
- package/pipeline/skills/shared/external/web-testing/SKILL.md +1 -1
- package/pipeline/skills/shared/external/xcode-build-benchmark/schemas/build-benchmark.schema.json +9 -49
- package/pipeline/skills/skills-index.md +57 -57
- package/pipeline/scripts/smoke-plugin-validate.sh +0 -64
package/CHANGELOG.md
CHANGED
|
@@ -16,6 +16,89 @@ Internal file-layout changes that don't affect the slash-command surface are sti
|
|
|
16
16
|
|
|
17
17
|
## [Unreleased]
|
|
18
18
|
|
|
19
|
+
## [12.7.0] - 2026-07-26
|
|
20
|
+
|
|
21
|
+
A refactor pass whose theme turned out to be one recurring defect: gates that
|
|
22
|
+
reported success without checking anything. Nine of them, plus a data-loss bug found
|
|
23
|
+
while fixing them.
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
- **The GitHub Actions security audit had never run anywhere.** `smoke-workflow-audit.sh`
|
|
28
|
+
reported "0 passed, 0 failed, 2 skipped" on the workstation and on the runner, and
|
|
29
|
+
`ci-lite.yml` justified not installing zizmor and actionlint by saying to run it
|
|
30
|
+
locally "where the tools exist" - where they were equally absent. Run for the first
|
|
31
|
+
time it found nine issues: a high-severity cache-poisoning path restoring a
|
|
32
|
+
lockfile-keyed dependency cache into the job that signs and publishes the tarball,
|
|
33
|
+
four checkouts persisting their credential, four jobs on the default token scope.
|
|
34
|
+
All nine fixed across all three repos. The smoke is strict by default now; a
|
|
35
|
+
missing linter fails, and the local escape hatch is ignored when `CI` is set.
|
|
36
|
+
- **A suite that asserted nothing reported success.** `run-smokes` only read exit
|
|
37
|
+
codes, and three suites were exiting 0 having checked nothing - including the gate
|
|
38
|
+
for the no-MCP-outside-analysis rule, which printed "no run to check" on every
|
|
39
|
+
clean clone and every CI runner. It self-tests against eight fixtures now. The
|
|
40
|
+
runner counts assertions and fails a suite that made none; the four output shapes
|
|
41
|
+
it recognises were surveyed across all suites rather than assumed.
|
|
42
|
+
- **`smoke-plugin-validate.sh` ran zero checks here** while appearing as a green CI
|
|
43
|
+
step. Removed; the real check lives in multi-agent-plugins, which gained its own CI.
|
|
44
|
+
- **The drift check read a mirror and called it the authority.** It resolved the
|
|
45
|
+
upstream version from the installed plugin cache, only as fresh as the last
|
|
46
|
+
marketplace update, so it reported "up to date" for a derivation four releases
|
|
47
|
+
behind. Resolution is local clone, then repo API, then cache; a cache-only answer
|
|
48
|
+
reports "unverified" rather than passing. `check-derived-drift.mjs` makes the order
|
|
49
|
+
testable - seven tests, including a clone whose two manifests disagree.
|
|
50
|
+
- **`write-state.mjs` lost a concurrent write.** The lock was created empty with its
|
|
51
|
+
PID written on the next line, so a writer arriving in that window read an
|
|
52
|
+
unparseable PID, called the lock stale, and deleted a live one. Both writers then
|
|
53
|
+
did their own read-modify-write and one update vanished. Reproduced three times in
|
|
54
|
+
fifteen runs under load, invisible on an idle machine, which is why the smoke read
|
|
55
|
+
as flaky. The lock is created atomically with its PID via `link()`, an unreadable
|
|
56
|
+
PID no longer counts as stale, and the smoke went 10 checks to 12 with the race
|
|
57
|
+
pinned directly.
|
|
58
|
+
- **Coverage was measured against the wrong denominator.** `.c8rc.json` lacked `all`,
|
|
59
|
+
reporting 83% against a real 33% over its own include set. Floors are 72/68/85.
|
|
60
|
+
- **Two HIGH advisories** pinned by the lockfile, closed.
|
|
61
|
+
- **One skill routed into two stack plugins**: the backend pattern carried a bare
|
|
62
|
+
`architecture` alternative that also matched `android-architecture` and
|
|
63
|
+
`swift-architecture`, so a Python/Node plugin shipped Compose and SwiftUI guidance.
|
|
64
|
+
- **`engines.node` claimed `>=20.0.0`** while the code uses `import.meta.dirname`,
|
|
65
|
+
which arrived in 20.11. A user on 20.0 through 20.10 would have broken.
|
|
66
|
+
- **The orchestrator skill named a log path the code had stopped using**, in one of
|
|
67
|
+
three sections it had duplicated from loadable references while citing them zero
|
|
68
|
+
times.
|
|
69
|
+
|
|
70
|
+
### Added
|
|
71
|
+
|
|
72
|
+
- **`npm run scorecard`** gates the measurable half of a review score against locked
|
|
73
|
+
thresholds and names the four categories no script can score instead of giving them
|
|
74
|
+
a number. Nine measured metrics: coverage floors, zero high or critical advisories,
|
|
75
|
+
the fixed context budget, the workflow audit, the punctuation rule, a routing clause
|
|
76
|
+
on every skill description, licence and changelog presence, the zero-assertion check
|
|
77
|
+
still wired, derived skills current with upstream. Its own first version trusted an
|
|
78
|
+
exit code that meant two different things and reported an unconfigured machine as
|
|
79
|
+
passing.
|
|
80
|
+
- **`smoke-context-budget.sh`** pins the bytes every run pays before it starts.
|
|
81
|
+
- **`smoke-own-punctuation.sh`** enforces the locked punctuation rule on our own tree,
|
|
82
|
+
in both the literal and the escaped encoding - `prefs.schema.json` carried 50
|
|
83
|
+
escaped em-dashes that the first version of the gate could not see.
|
|
84
|
+
- **`check-derived-drift.mjs`**, with `upstreamVersionSource` and `upstreamLocalClone`
|
|
85
|
+
in the prefs schema.
|
|
86
|
+
- **`eslint-plugin-n`** and **`publint`**, the latter having sat behind
|
|
87
|
+
`npx --no-install` and never executed.
|
|
88
|
+
|
|
89
|
+
### Changed
|
|
90
|
+
|
|
91
|
+
- **Fixed per-run context: 67150 -> 57831 bytes.** Three duplicated sections moved
|
|
92
|
+
out of the orchestrator skill to the references it now cites.
|
|
93
|
+
- **A routing clause in all 193 skill descriptions**, 93 of which had none. The
|
|
94
|
+
linter fails on a missing one instead of warning.
|
|
95
|
+
- **`prettier` is enforced.** It was configured with nothing running it, so 583 files
|
|
96
|
+
failed the declared style. Scope is code and config; markdown is excluded on
|
|
97
|
+
purpose and the reason is in the workflow.
|
|
98
|
+
- **The punctuation rule applied to our own files**: 719 em-dashes across 77 files.
|
|
99
|
+
- `--ignore-scripts` on the four CI `npm ci` lines; `pipefail` in 13 lib scripts.
|
|
100
|
+
- eslint 10.8, prettier 3.9.6, c8 12.
|
|
101
|
+
|
|
19
102
|
## [12.6.0] - 2026-07-25
|
|
20
103
|
|
|
21
104
|
Two threads. The design-check command gains a scenario inventory, a coverage
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
[](https://github.com/mmerterden/multi-agent-pipeline/blob/main/package.json)
|
|
7
7
|
[](https://scorecard.dev/viewer/?uri=github.com/mmerterden/multi-agent-pipeline)
|
|
8
8
|
|
|
9
|
-
An 8-phase AI development pipeline for **Claude Code** and **Copilot CLI**. Drives a Jira issue or GitHub URL to a merged PR in one command
|
|
9
|
+
An 8-phase AI development pipeline for **Claude Code** and **Copilot CLI**. Drives a Jira issue or GitHub URL to a merged PR in one command - analysis → plan → TDD → review → test → commit → PR - with multi-repo orchestration, a plan-approval gate, CLI-aware parallel review, and store-compliance checks. Component and Figma-to-code work is dispatched to the per-stack marketplace plugins (iOS/SwiftUI, Android/Compose) rather than bundled, so component skills live in one place.
|
|
10
10
|
|
|
11
11
|
Runs natively on Claude Code and Copilot CLI. macOS / Linux / Windows. Zero runtime dependencies.
|
|
12
12
|
|
|
@@ -20,7 +20,7 @@ npx @mmerterden/multi-agent-pipeline install --all # Claude Code + Copilot CLI
|
|
|
20
20
|
/multi-agent:setup # keychain token scan + git identity + default stack
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
Run a task
|
|
23
|
+
Run a task - the input type is auto-detected:
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
26
|
/multi-agent "PROJ-1234" # Jira id → fetch, plan, build
|
|
@@ -31,7 +31,7 @@ Run a task — the input type is auto-detected:
|
|
|
31
31
|
/multi-agent:issue # browse unassigned GitHub issues → pick
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
Every input runs the same short intake
|
|
34
|
+
Every input runs the same short intake - **account → (repo) → maturity check → dev-context** - then enters Phase 0. A Jira id or GitHub URL is fetched and maturity-checked *before* any code is written; free-text skips the fetch and goes straight to planning. Multi-repo tasks add extra repos at the dev-context step.
|
|
35
35
|
|
|
36
36
|
Add `autopilot` to skip confirmations, `--dev` for the fast dev-only path, or `--local` to work on the current branch without a worktree (e.g. `/multi-agent:autopilot "PROJ-1234"`).
|
|
37
37
|
|
|
@@ -41,18 +41,18 @@ Update later with `/multi-agent:update`. Uninstall (tokens preserved) with `npx
|
|
|
41
41
|
|
|
42
42
|
One command runs 8 phases, with a gate between the risky ones:
|
|
43
43
|
|
|
44
|
-
- **0 · Init**
|
|
45
|
-
- **1 · Analysis**
|
|
46
|
-
- **2 · Plan**
|
|
47
|
-
- **3 · Dev**
|
|
48
|
-
- **4 · Review**
|
|
49
|
-
- **5 · Test**
|
|
50
|
-
- **6 · Commit/PR**
|
|
51
|
-
- **7 · Report**
|
|
44
|
+
- **0 · Init** - parse the input (Jira id / GitHub URL / free text), pick account + repo(s), fetch the issue, run a maturity check.
|
|
45
|
+
- **1 · Analysis** - detect the stack, scan the codebase, map impact (Opus).
|
|
46
|
+
- **2 · Plan** - write a task breakdown and **stop for your approval** before touching code.
|
|
47
|
+
- **3 · Dev** - TDD: failing test → code → green, following the repo's style + the active stack skills.
|
|
48
|
+
- **4 · Review** - deterministic gates (build / lint / test / secret-scan) must pass first, then a **CLI-aware parallel review** - Claude Code runs 2 models (Fable + Sonnet), Copilot CLI runs 3 (GPT-5.4 + Opus + Sonnet) - and a **Fable triage** keeps only actionable findings; blockers loop back to Phase 3.
|
|
49
|
+
- **5 · Test** - build + run the suite; success is required (no faked passes).
|
|
50
|
+
- **6 · Commit/PR** - conventional commit, push (must succeed), open a PR (`Ref: #N`, never auto-close).
|
|
51
|
+
- **7 · Report** - technical summary + a Jira comment with test scenarios, posted through the channels layer.
|
|
52
52
|
|
|
53
|
-
Under the hood: each task runs in its own **git worktree** (or the current branch with `:local`), commits use the **git identity routed from the repo's origin URL**, and **multi-repo** tasks get per-repo worktrees plus an integration build. Tokens stay in the OS keychain; nothing is committed or logged. `/multi-agent:review` can also review an existing GitHub/Bitbucket PR
|
|
53
|
+
Under the hood: each task runs in its own **git worktree** (or the current branch with `:local`), commits use the **git identity routed from the repo's origin URL**, and **multi-repo** tasks get per-repo worktrees plus an integration build. Tokens stay in the OS keychain; nothing is committed or logged. `/multi-agent:review` can also review an existing GitHub/Bitbucket PR - per-finding inline comments anchored to `file:line` + an explicit Approve / Needs-Work state.
|
|
54
54
|
|
|
55
|
-
The discipline behind all of this
|
|
55
|
+
The discipline behind all of this - bounded loops, evidence gates, token-budgeted phase docs, immutable tests, fresh-context handoffs - is catalogued in [docs/engineering.md](./docs/engineering.md). The full feature list lives in [docs/features.md](./docs/features.md).
|
|
56
56
|
|
|
57
57
|
## Modes
|
|
58
58
|
|
|
@@ -78,7 +78,7 @@ This enables the matching plugin (+ the shared `ai-common` plugin) in the repo's
|
|
|
78
78
|
|
|
79
79
|
## Tool support
|
|
80
80
|
|
|
81
|
-
The pipeline runs natively on **Claude Code** and **Copilot CLI**
|
|
81
|
+
The pipeline runs natively on **Claude Code** and **Copilot CLI** - both install from the same `pipeline/skills/` source and get identical coverage.
|
|
82
82
|
|
|
83
83
|
| Tool | Flag | Notes |
|
|
84
84
|
|---|---|---|
|
|
@@ -89,7 +89,7 @@ Filter skills by stack with `--platform=ios\|android\|all`.
|
|
|
89
89
|
|
|
90
90
|
## Tokens & integrations
|
|
91
91
|
|
|
92
|
-
`setup` scans your OS keychain and maps each token by a **logical name** (e.g. `jira`) to its real keychain entry
|
|
92
|
+
`setup` scans your OS keychain and maps each token by a **logical name** (e.g. `jira`) to its real keychain entry - the pipeline resolves tokens through that mapping (`credential-store.sh`), so literal keychain names never appear in synced files. Tokens stay in the keychain (macOS Keychain / Windows Credential Manager / Linux libsecret), are **never committed or logged**, and are all **optional** - the pipeline asks for any it needs at Phase 0.
|
|
93
93
|
|
|
94
94
|
| Token | Used for | Phase |
|
|
95
95
|
|---|---|---|
|
|
@@ -107,15 +107,15 @@ The **secret scan** runs as a `PreToolUse` hook on Claude Code (hard-blocks a co
|
|
|
107
107
|
|
|
108
108
|
## Platform support
|
|
109
109
|
|
|
110
|
-
Runs on **macOS**, **Linux**, and **Windows** (Git Bash / WSL). Shell and credential access go through a platform-agnostic layer
|
|
110
|
+
Runs on **macOS**, **Linux**, and **Windows** (Git Bash / WSL). Shell and credential access go through a platform-agnostic layer - the keychain resolves automatically to **macOS Keychain**, **Linux libsecret** (`secret-tool`), or **Windows Credential Manager**, and scripts fall back between BSD and GNU tool variants. Node.js 18 / 20 / 22.
|
|
111
111
|
|
|
112
112
|
## Companion repos
|
|
113
113
|
|
|
114
114
|
| Repo | What it is |
|
|
115
115
|
|---|---|
|
|
116
116
|
| [`mmerterden/multi-agent-plugins`](https://github.com/mmerterden/multi-agent-plugins) | Marketplace of per-stack skill toolkits (iOS / Android / Frontend / Backend + common). `/multi-agent:stack` enables the matching plugin. |
|
|
117
|
-
| [`mmerterden/dev-toolkit-mcp`](https://github.com/mmerterden/dev-toolkit-mcp) | MCP server for UI testing / simulator capture / xcodebuild
|
|
117
|
+
| [`mmerterden/dev-toolkit-mcp`](https://github.com/mmerterden/dev-toolkit-mcp) | MCP server for UI testing / simulator capture / xcodebuild - powers the Phase 5 UI Bug Hunter. `npx @mmerterden/dev-toolkit-mcp` |
|
|
118
118
|
|
|
119
119
|
## License
|
|
120
120
|
|
|
121
|
-
MIT
|
|
121
|
+
MIT - see [LICENSE](./LICENSE). Security issues: see [SECURITY.md](./SECURITY.md) (do not open public issues for vulnerabilities).
|
package/docs/FIGMA_PIPELINE.md
CHANGED
|
@@ -6,38 +6,38 @@ End-to-end guide for generating production-ready UI components from Figma design
|
|
|
6
6
|
|
|
7
7
|
## What you get
|
|
8
8
|
|
|
9
|
-
- **One command**
|
|
10
|
-
- **Platform-agnostic orchestration**
|
|
11
|
-
- **Multi-repo aware**
|
|
12
|
-
- **Non-blocking side effects**
|
|
13
|
-
- **Cross-cutting integration skills**
|
|
14
|
-
- **Evolve an existing component**
|
|
9
|
+
- **One command** - `/multi-agent <figma-url-or-issue>` - produces a complete component: Configuration + View + Modifiers + Preview + README + three layers of tests + Code Connect + wiki doc.
|
|
10
|
+
- **Platform-agnostic orchestration** - classification happens once in Phase 0; the orchestrator picks the right code generator for iOS or Android based on `figmaConfig.project.platform`.
|
|
11
|
+
- **Multi-repo aware** - components span multiple repos (tokens in `common`, view in `components`, docs in `wiki`). The orchestrator sequences writes correctly.
|
|
12
|
+
- **Non-blocking side effects** - wiki generation + Jira sync run as augmentations; failures log and Phase 7 continues.
|
|
13
|
+
- **Cross-cutting integration skills** - Phase 3D detects content patterns (`figma-form-integration`, `figma-price-integration`, `figma-ui-patterns`) and interaction patterns (`figma-navigation`, `figma-overlays`, `figma-bottom-sheets`) and dispatches the matching skill. All are **native-SwiftUI-first**; a project's own navigation/overlay/sheet system is used only when `figmaConfig.ui.{navigationSystem,overlaySystem,sheetSystem}` declares one (absent → stock SwiftUI: `NavigationStack`, `.alert`/`.sheet(item:)`, `.presentationDetents`). Generic across SwiftUI codebases.
|
|
14
|
+
- **Evolve an existing component** - `figma-evolve-component` reconciles a shipped component against current Figma (drift-heal) and additively extends it for a new need, behind a mandatory human gate - distinct from a fresh build, `figma-mend` (rebuild), and `figma-fix` (review bug).
|
|
15
15
|
|
|
16
16
|
## How it runs
|
|
17
17
|
|
|
18
|
-
When multi-agent Phase 0 classifies a task as `component` (Figma URL in description, or figma-driven instruction path), Phase 3 delegates the entire phase to the enabled `ai-<platform>-engineering-toolkit` marketplace plugin's component skill (`create-component`, fallback `create-ui-component`) via the Skill tool. Component skills live in the plugin marketplace, not the pipeline. The dispatch layer records a coarse component-build row in `state.phases["3"].subphases[]`
|
|
18
|
+
When multi-agent Phase 0 classifies a task as `component` (Figma URL in description, or figma-driven instruction path), Phase 3 delegates the entire phase to the enabled `ai-<platform>-engineering-toolkit` marketplace plugin's component skill (`create-component`, fallback `create-ui-component`) via the Skill tool. Component skills live in the plugin marketplace, not the pipeline. The dispatch layer records a coarse component-build row in `state.phases["3"].subphases[]` - multi-agent's phase-tracker reads that array with no special case. The subphase list below describes the flow the plugin skill runs internally.
|
|
19
19
|
|
|
20
20
|
### Internal phase order
|
|
21
21
|
|
|
22
22
|
```
|
|
23
|
-
3.0 init
|
|
24
|
-
3.1 gather
|
|
25
|
-
3.2a testing identifiers
|
|
26
|
-
3.2b localisation
|
|
27
|
-
3.2c accessibility
|
|
28
|
-
3.2d analytics
|
|
29
|
-
3.3 token mapping
|
|
30
|
-
3.4a Configuration
|
|
31
|
-
3.4b View
|
|
32
|
-
3.4c Docs
|
|
33
|
-
3.4d Preview
|
|
34
|
-
3.4e Modifiers
|
|
35
|
-
3.5a structural tests
|
|
36
|
-
3.5b snapshot tests
|
|
37
|
-
3.5c unit tests
|
|
38
|
-
3.6 Code Connect
|
|
39
|
-
3.7 wiki
|
|
40
|
-
3.8 cleanup
|
|
23
|
+
3.0 init - node-id parse, registry lookup, worktree confirm
|
|
24
|
+
3.1 gather - Figma API / MCP fetch, variant properties, token extraction
|
|
25
|
+
3.2a testing identifiers - semantic tags (platform-agnostic)
|
|
26
|
+
3.2b localisation - string keys → common repo
|
|
27
|
+
3.2c accessibility - a11y metadata; platform-aware output
|
|
28
|
+
3.2d analytics - event keys
|
|
29
|
+
3.3 token mapping - Figma values → design token symbols
|
|
30
|
+
3.4a Configuration - pure value type (SwiftUI struct / Compose @Immutable data class)
|
|
31
|
+
3.4b View - SwiftUI body / @Composable fun
|
|
32
|
+
3.4c Docs - FIGMA.md (iOS) / README.md (Android)
|
|
33
|
+
3.4d Preview - variant grid
|
|
34
|
+
3.4e Modifiers - fluent API
|
|
35
|
+
3.5a structural tests - ViewInspector / Compose Testing
|
|
36
|
+
3.5b snapshot tests - SnapshotTesting / Paparazzi
|
|
37
|
+
3.5c unit tests - configuration semantics + behavioural
|
|
38
|
+
3.6 Code Connect - .figma.swift / .figma.kt registration
|
|
39
|
+
3.7 wiki - 4-adapter dispatch (submodule / in-repo / github-wiki / separate-repo)
|
|
40
|
+
3.8 cleanup - artifact pruning, state finalize
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
Each subphase emits a `→ <verb> <object>` progress line per `refs/progress-contract.md`; multi-agent's phase-tracker renders them inline under the Phase 3 row.
|
|
@@ -71,7 +71,7 @@ Minimum viable config:
|
|
|
71
71
|
|
|
72
72
|
Android projects swap the `build` section to `{ "gradleModule": ":components:button", "variant": "debug" }` and set `project.platform` to `"android"`.
|
|
73
73
|
|
|
74
|
-
**Optional `ui` block
|
|
74
|
+
**Optional `ui` block - UI interaction systems.** Consumed by the `figma-navigation` / `figma-overlays` / `figma-bottom-sheets` skills and Phase 4 review. Omit it (or set `mode: "native"`) and the pipeline generates stock SwiftUI (`NavigationStack`, `.alert`/`.sheet(item:)`, `.sheet`+`presentationDetents`). Set `mode: "custom"` to route to a project-supplied system by type name:
|
|
75
75
|
|
|
76
76
|
```json
|
|
77
77
|
"ui": {
|
|
@@ -97,7 +97,7 @@ Full contract: [`pipeline/multi-agent-refs/issue-jira-triad.md`](../pipeline/mul
|
|
|
97
97
|
| Mode | Path layout | Push semantics |
|
|
98
98
|
|---|---|---|
|
|
99
99
|
| `submodule` | `{repos.wiki.path}/FigmaComponents/{Category}/{Name}/{Name}.md` | Commit into submodule's branch, push, update parent repo's pointer |
|
|
100
|
-
| `in-repo` | `{repos.components.path}/.wiki/components/{Category}/{Name}.md` | No push
|
|
100
|
+
| `in-repo` | `{repos.components.path}/.wiki/components/{Category}/{Name}.md` | No push - ships with the component commit in Phase 6 |
|
|
101
101
|
| `github-wiki` | `{owner}/{repo}.wiki.git/{Category}/{Name}.md` | Clone the `.wiki.git`, commit, push |
|
|
102
102
|
| `separate-repo` | Remote repo's configured branch | Clone to cache, commit, push |
|
|
103
103
|
|
|
@@ -124,14 +124,14 @@ Global settings that affect the figma pipeline:
|
|
|
124
124
|
|---|---|---|
|
|
125
125
|
| Phase 3 halts with "plugin not enabled" | The `ai-<platform>-engineering-toolkit` plugin is not enabled in this repo | Enable it in the repo's `.claude/settings.local.json` (`"ai-ios-engineering-toolkit@<marketplace>": true`) and reload the session |
|
|
126
126
|
| `multi-agent:create-component` not found | Marketplace not installed / plugin disabled | Install the marketplace and enable the platform toolkit; dispatch tries `create-component` then `create-ui-component` |
|
|
127
|
-
| Wiki adapter failure | Remote unreachable (separate-repo mode) | Adapter caches pending output; next run retries. Non-blocking
|
|
128
|
-
| Jira auto-create hits 5xx | Transient Jira outage | Non-blocking
|
|
127
|
+
| Wiki adapter failure | Remote unreachable (separate-repo mode) | Adapter caches pending output; next run retries. Non-blocking - Phase 7 continues. |
|
|
128
|
+
| Jira auto-create hits 5xx | Transient Jira outage | Non-blocking - pipeline continues without link. User can run `/multi-agent:channels` post-hoc to add it. |
|
|
129
129
|
| Android gradle unresolved | `figmaConfig.build.gradleModule` not set | Populate the config; halt is intentional (no guessing) |
|
|
130
130
|
|
|
131
131
|
## Further reading
|
|
132
132
|
|
|
133
|
-
- [`pipeline/multi-agent-refs/component-dispatch.md`](../pipeline/multi-agent-refs/component-dispatch.md)
|
|
134
|
-
- [`pipeline/multi-agent-refs/wiki-capture.md`](../pipeline/multi-agent-refs/wiki-capture.md)
|
|
135
|
-
- [`pipeline/multi-agent-refs/issue-jira-triad.md`](../pipeline/multi-agent-refs/issue-jira-triad.md)
|
|
136
|
-
- [`pipeline/multi-agent-refs/progress-contract.md`](../pipeline/multi-agent-refs/progress-contract.md)
|
|
137
|
-
- [`pipeline/multi-agent-refs/cross-cli-contract.md`](../pipeline/multi-agent-refs/cross-cli-contract.md)
|
|
133
|
+
- [`pipeline/multi-agent-refs/component-dispatch.md`](../pipeline/multi-agent-refs/component-dispatch.md) - Phase 3 delegation contract.
|
|
134
|
+
- [`pipeline/multi-agent-refs/wiki-capture.md`](../pipeline/multi-agent-refs/wiki-capture.md) - Phase 7 wiki contract.
|
|
135
|
+
- [`pipeline/multi-agent-refs/issue-jira-triad.md`](../pipeline/multi-agent-refs/issue-jira-triad.md) - issue → jira → wiki triad contract.
|
|
136
|
+
- [`pipeline/multi-agent-refs/progress-contract.md`](../pipeline/multi-agent-refs/progress-contract.md) - live progress-line emission contract.
|
|
137
|
+
- [`pipeline/multi-agent-refs/cross-cli-contract.md`](../pipeline/multi-agent-refs/cross-cli-contract.md) - Claude ↔ Copilot CLI parity.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# 1. CLI-aware parallel review with top-tier triage
|
|
2
2
|
|
|
3
|
-
**Status:** Accepted · 2025 · Amended 2026-04 (CLI-aware reviewer set) · Amended 2026-07 (v10.6.0: Fable 5 restored
|
|
3
|
+
**Status:** Accepted · 2025 · Amended 2026-04 (CLI-aware reviewer set) · Amended 2026-07 (v10.6.0: Fable 5 restored - Reviewer 1 and triage run on Fable on Claude Code; Copilot CLI pins Opus. "Opus" below reads as "the top tier of the day")
|
|
4
4
|
|
|
5
5
|
## Context
|
|
6
6
|
|
|
7
7
|
Code review is the phase where the pipeline most commonly ships wrong work. A
|
|
8
|
-
single reviewer model
|
|
8
|
+
single reviewer model - whether Opus, Sonnet, or GPT - systematically misses
|
|
9
9
|
certain failure classes and hallucinates others. Worse, reviewer output tends
|
|
10
10
|
to be noisy: style nitpicks, out-of-scope findings, and repeated observations
|
|
11
11
|
across diffs.
|
|
@@ -20,26 +20,26 @@ We need a review stage that:
|
|
|
20
20
|
|
|
21
21
|
Phase 4 runs **reviewers in parallel** on the same diff. The reviewer set is
|
|
22
22
|
determined by the host CLI, because GPT-5.4 is only natively reachable from
|
|
23
|
-
Copilot CLI
|
|
23
|
+
Copilot CLI - Claude Code has no first-class GPT bridge, and round-tripping
|
|
24
24
|
would add latency without improving signal.
|
|
25
25
|
|
|
26
26
|
**Claude Code (2 parallel reviewers):**
|
|
27
27
|
|
|
28
|
-
- **Opus**
|
|
29
|
-
- **Sonnet**
|
|
28
|
+
- **Opus** - deep security and architecture focus
|
|
29
|
+
- **Sonnet** - quality, correctness, naming
|
|
30
30
|
|
|
31
31
|
**Copilot CLI (3 parallel reviewers):**
|
|
32
32
|
|
|
33
|
-
- **Opus**
|
|
34
|
-
- **GPT-5.4**
|
|
35
|
-
- **Sonnet**
|
|
33
|
+
- **Opus** - deep security and architecture focus
|
|
34
|
+
- **GPT-5.4** - edge cases and cross-provider diversity
|
|
35
|
+
- **Sonnet** - quality, correctness, naming
|
|
36
36
|
|
|
37
37
|
Their raw findings are then passed to a **separate Opus triage agent** that
|
|
38
38
|
classifies each finding as `accepted`, `deferred`, or `rejected`. Only
|
|
39
39
|
`accepted` blocking items loop back to Phase 3 for rework.
|
|
40
40
|
|
|
41
41
|
Deterministic gates (build, lint, test, secret scan) run before any AI
|
|
42
|
-
reviewer is invoked
|
|
42
|
+
reviewer is invoked - no point paying for review on code that doesn't build.
|
|
43
43
|
|
|
44
44
|
## Consequences
|
|
45
45
|
|
|
@@ -47,7 +47,7 @@ Positive:
|
|
|
47
47
|
|
|
48
48
|
- Three different model lineages each catch a different slice of issues.
|
|
49
49
|
- The triage pass filters the noise that individual reviewers can't filter
|
|
50
|
-
about themselves
|
|
50
|
+
about themselves - it has scope context from Phase 1/2 that single reviewers
|
|
51
51
|
don't carry.
|
|
52
52
|
- Hallucinated findings get rejected instead of looping the pipeline forever.
|
|
53
53
|
- `validate-triage.mjs` enforces the triage output contract at runtime; a
|
|
@@ -61,7 +61,7 @@ Negative / costs:
|
|
|
61
61
|
more expensive.
|
|
62
62
|
- Triage agent introduces a single point of failure; validator + fallback
|
|
63
63
|
(treat all findings as accepted after double-failure) bounds the damage.
|
|
64
|
-
- Cross-provider (GPT) dependency on Copilot CLI
|
|
64
|
+
- Cross-provider (GPT) dependency on Copilot CLI - if the provider is down,
|
|
65
65
|
the pipeline continues with 2 reviewers (Opus + Sonnet) and a warning.
|
|
66
66
|
- Cross-CLI asymmetry: Copilot CLI catches a slice of failures (edge cases
|
|
67
67
|
via GPT diversity) that Claude Code's 2-model set misses. Accepted as a
|
|
@@ -70,7 +70,7 @@ Negative / costs:
|
|
|
70
70
|
## Alternatives Considered
|
|
71
71
|
|
|
72
72
|
**Single reviewer (Opus only):** simpler, cheaper, but misses edge cases
|
|
73
|
-
the other model lineages catch. Trialed in early v2
|
|
73
|
+
the other model lineages catch. Trialed in early v2 - noticeable false
|
|
74
74
|
negatives on concurrency bugs.
|
|
75
75
|
|
|
76
76
|
**Two reviewers + no triage:** cheaper still. Rejected because the raw
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
The main 9-phase pipeline is TDD-centric. The Figma-to-SwiftUI workflow is
|
|
8
8
|
config-driven (design tokens, Code Connect, Wiki generation) and does not
|
|
9
9
|
map onto the red-green-refactor cycle. Earlier versions handled this with
|
|
10
|
-
implicit branching in Phase 3
|
|
10
|
+
implicit branching in Phase 3 - "if the task has a Figma URL, fork here".
|
|
11
11
|
|
|
12
12
|
Implicit branches had three problems:
|
|
13
13
|
|
|
14
|
-
1. Hard to debug
|
|
15
|
-
2. Silent failure when instruction files were missing or misnamed
|
|
14
|
+
1. Hard to debug - no single place where the fork was decided.
|
|
15
|
+
2. Silent failure when instruction files were missing or misnamed - Phase 6
|
|
16
16
|
would fall through to standard commit flow, losing Figma-specific steps.
|
|
17
17
|
3. Phase 7 audit couldn't tell which branch was actually taken.
|
|
18
18
|
|
|
@@ -30,7 +30,7 @@ Phase 6 uses a **deterministic truth table** (documented at
|
|
|
30
30
|
| ------------------- | -------------------------------- | ------ |
|
|
31
31
|
| true | yes | Instruction-driven path |
|
|
32
32
|
| true | no | Log error, set `instructionDrivenFallback=true`, use standard path |
|
|
33
|
-
| false |
|
|
33
|
+
| false | - | Standard path |
|
|
34
34
|
|
|
35
35
|
## Consequences
|
|
36
36
|
|
|
@@ -40,7 +40,7 @@ Positive:
|
|
|
40
40
|
- Missing instruction files fail loud (`instructionDrivenFallback` surfaced in
|
|
41
41
|
Phase 7 report) instead of silent.
|
|
42
42
|
- The Figma pipeline could be extracted to its own package without changing
|
|
43
|
-
main pipeline code
|
|
43
|
+
main pipeline code - it just writes the flag + files, and the main pipeline
|
|
44
44
|
reads them.
|
|
45
45
|
|
|
46
46
|
Negative:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 3. Unified `skills/shared/` for Claude Code + Copilot CLI
|
|
2
2
|
|
|
3
|
-
**Status:** Accepted · 2026-04 (v3.5.0) · Amended 2026-04 (v5.3.3
|
|
3
|
+
**Status:** Accepted · 2026-04 (v3.5.0) · Amended 2026-04 (v5.3.3 - internal `core/external/` split, install destination unchanged)
|
|
4
4
|
|
|
5
5
|
## Context
|
|
6
6
|
|
|
@@ -11,7 +11,7 @@ Consequences:
|
|
|
11
11
|
- Claude users could not invoke `multi-agent-*` pipeline skills (they were
|
|
12
12
|
Copilot-only).
|
|
13
13
|
- Copilot users couldn't access iOS/SwiftUI guidance.
|
|
14
|
-
- Two directories meant two places to add or update a skill
|
|
14
|
+
- Two directories meant two places to add or update a skill - drift was
|
|
15
15
|
inevitable, and unnoticed.
|
|
16
16
|
- README claim "145 skills" was not accurate for either CLI.
|
|
17
17
|
|
|
@@ -33,7 +33,7 @@ Positive:
|
|
|
33
33
|
- Adding a skill is now a single write.
|
|
34
34
|
- Skill index (`pipeline/skills/shared/README.md`) auto-generates from a
|
|
35
35
|
single source.
|
|
36
|
-
- Unblocks the 4.0 single-source-for-commands-and-skills plan
|
|
36
|
+
- Unblocks the 4.0 single-source-for-commands-and-skills plan - same
|
|
37
37
|
directory structure, just needs content unification.
|
|
38
38
|
|
|
39
39
|
Negative:
|
|
@@ -41,7 +41,7 @@ Negative:
|
|
|
41
41
|
- Disk footprint per install is ~1.5× larger than before for users who
|
|
42
42
|
only wanted iOS or only wanted web.
|
|
43
43
|
- Some iOS skills are noise for backend-only users and vice versa.
|
|
44
|
-
Mitigated by the categorized index
|
|
44
|
+
Mitigated by the categorized index - easy to browse and ignore.
|
|
45
45
|
|
|
46
46
|
## Alternatives Considered
|
|
47
47
|
|
|
@@ -49,7 +49,7 @@ Negative:
|
|
|
49
49
|
the drift-risk but not the "which CLI gets what" asymmetry in the source.
|
|
50
50
|
Hidden complexity.
|
|
51
51
|
|
|
52
|
-
**Per-stack skill packs (`skills/ios/`, `skills/android/`,
|
|
52
|
+
**Per-stack skill packs (`skills/ios/`, `skills/android/`, ...) with
|
|
53
53
|
install-time filter:** tempting. Rejected for 3.5.0 because the install-time
|
|
54
54
|
filter would need a stack detector exact enough to not exclude relevant
|
|
55
55
|
cross-cutting skills. Revisit for 4.0.
|
|
@@ -10,8 +10,8 @@ compatibility puzzle. For a CLI tool that installs itself into user shells
|
|
|
10
10
|
and runs with write access to `~/.claude/` and `~/.copilot/`, the blast
|
|
11
11
|
radius of a compromised dependency is large.
|
|
12
12
|
|
|
13
|
-
At the same time, some conveniences
|
|
14
|
-
parsers (`yaml`), templating engines
|
|
13
|
+
At the same time, some conveniences - JSON Schema validators (`ajv`), YAML
|
|
14
|
+
parsers (`yaml`), templating engines - would be trivial to pull in and would
|
|
15
15
|
shorten a few scripts.
|
|
16
16
|
|
|
17
17
|
## Decision
|
|
@@ -26,7 +26,7 @@ Consequences:
|
|
|
26
26
|
- `validate-triage.mjs`, `validate-{reviewer,analysis,planning}.mjs`,
|
|
27
27
|
`write-state.mjs`, `migrate-state.mjs` all hand-roll their JSON Schema
|
|
28
28
|
validation. Slower to write, but zero attack surface.
|
|
29
|
-
- `validate-schemas.mjs` is a shallow checker
|
|
29
|
+
- `validate-schemas.mjs` is a shallow checker - catches "the schema file is
|
|
30
30
|
itself malformed", doesn't deep-validate every instance. That's what the
|
|
31
31
|
runtime validators are for.
|
|
32
32
|
- Install is fast: `npm install` against the published package is a single
|
|
@@ -37,7 +37,7 @@ Consequences:
|
|
|
37
37
|
Positive:
|
|
38
38
|
|
|
39
39
|
- No supply-chain surface in the published package.
|
|
40
|
-
- No Node version interop headaches
|
|
40
|
+
- No Node version interop headaches - Node 18+ core APIs are stable enough.
|
|
41
41
|
- `npx @mmerterden/multi-agent-pipeline install` runs instantly from cold.
|
|
42
42
|
|
|
43
43
|
Negative:
|
|
@@ -53,7 +53,7 @@ Negative:
|
|
|
53
53
|
**Pull in `ajv` for real schema validation:** clean and standard. Rejected
|
|
54
54
|
because of supply-chain surface + bundle bloat (adds ~200 kB gzipped).
|
|
55
55
|
|
|
56
|
-
**Optional deps
|
|
56
|
+
**Optional deps - use `ajv` if installed, fall back otherwise:** too clever.
|
|
57
57
|
"Sometimes validated, sometimes not" is worse than either extreme.
|
|
58
58
|
|
|
59
59
|
**Bundle dependencies into the published tarball:** would remove the install-
|
|
@@ -11,7 +11,7 @@ instructions for phases not yet relevant, leaving less room for the actual
|
|
|
11
11
|
code being worked on.
|
|
12
12
|
|
|
13
13
|
Additionally, phase docs are the easiest part of the pipeline to inflate
|
|
14
|
-
accidentally
|
|
14
|
+
accidentally - examples, prose, caveats pile up. Without a budget, phase
|
|
15
15
|
docs silently grow until they push useful content out of context.
|
|
16
16
|
|
|
17
17
|
## Decision
|
|
@@ -43,7 +43,7 @@ Positive:
|
|
|
43
43
|
- Context window stays available for the code under review.
|
|
44
44
|
- Budgets surface "this phase is getting bloated" early (warn) before they
|
|
45
45
|
become blocking (max).
|
|
46
|
-
- A PR that inflates a phase doc past `max` fails CI
|
|
46
|
+
- A PR that inflates a phase doc past `max` fails CI - hard forcing function
|
|
47
47
|
against doc rot.
|
|
48
48
|
|
|
49
49
|
Negative:
|
|
@@ -9,7 +9,7 @@ ADR-0003 (v3.5.0) collapsed the split `skills/claude/` + `skills/copilot/` into
|
|
|
9
9
|
By v5.3.x the maintenance burden of the flat tree became visible in everyday work:
|
|
10
10
|
|
|
11
11
|
- **Source navigation.** Browsing `pipeline/skills/shared/` on GitHub shows 148 sibling directories with no hint which ones are load-bearing for the pipeline vs. which ones are third-party imports.
|
|
12
|
-
- **Code review cost.** Changes under `shared/` have very different risk profiles depending on which kind of skill changed. `multi-agent-sync/SKILL.md` is pipeline-critical
|
|
12
|
+
- **Code review cost.** Changes under `shared/` have very different risk profiles depending on which kind of skill changed. `multi-agent-sync/SKILL.md` is pipeline-critical - any drift breaks cross-CLI parity. `ios-developer/SKILL.md` is a reference guide imported from upstream - edits almost never affect pipeline behavior.
|
|
13
13
|
- **Grep noise.** `grep -r skills/shared/` produces 148× the noise it should when searching for pipeline code.
|
|
14
14
|
- **Audit findings.** The v5.3.0 audit flagged this as technical debt worth addressing once the pipeline stabilized.
|
|
15
15
|
|
|
@@ -19,14 +19,14 @@ Keep the single-write benefit of ADR-0003. Split the source layout into two subd
|
|
|
19
19
|
|
|
20
20
|
```
|
|
21
21
|
pipeline/skills/shared/
|
|
22
|
-
├── core/
|
|
23
|
-
├── external/
|
|
24
|
-
└── README.md
|
|
22
|
+
├── core/ - 21 multi-agent* orchestration skills (pipeline-critical)
|
|
23
|
+
├── external/ - 127 iOS / Android / generic skills imported from upstream
|
|
24
|
+
└── README.md - skill index
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
**Install destination is unchanged.** Both trees flatten into `~/.claude/skills/` and `~/.copilot/skills/`; skill discovery at runtime sees the same flat list of 148 skills regardless of where they live in source. ADR-0003's core decision ("same coverage on both CLIs") is preserved.
|
|
28
28
|
|
|
29
|
-
`install.js` was updated to `copyDir(sharedCoreSrc, CLAUDE_SKILLS)` + `copyDir(sharedExternalSrc, CLAUDE_SKILLS)`
|
|
29
|
+
`install.js` was updated to `copyDir(sharedCoreSrc, CLAUDE_SKILLS)` + `copyDir(sharedExternalSrc, CLAUDE_SKILLS)` - two reads, same flat write.
|
|
30
30
|
|
|
31
31
|
## Consequences
|
|
32
32
|
|
|
@@ -41,7 +41,7 @@ Negative:
|
|
|
41
41
|
|
|
42
42
|
- `install.js` walks two source trees instead of one. Implementation cost: 6 lines.
|
|
43
43
|
- Every smoke test and doc reference that hard-coded `pipeline/skills/shared/multi-agent-*/` as a path had to update to `pipeline/skills/shared/core/multi-agent-*/`. One-time sweep.
|
|
44
|
-
- ADR-0003's "single source of truth" wording becomes "single install target from two logical sources"
|
|
44
|
+
- ADR-0003's "single source of truth" wording becomes "single install target from two logical sources" - slightly more nuance to explain.
|
|
45
45
|
|
|
46
46
|
## Alternatives Considered
|
|
47
47
|
|