@mmerterden/multi-agent-pipeline 12.5.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 +213 -0
- package/README.md +19 -19
- 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 +48 -28
- package/docs/performance.md +16 -16
- package/docs/recovery-guide.md +39 -39
- package/index.js +11 -5
- package/install/_common.mjs +5 -11
- package/install/_copilot-instructions.mjs +2 -2
- package/install/_dev-only-files.mjs +2 -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 +15 -11
- package/pipeline/agents/security-auditor.md +1 -1
- package/pipeline/commands/archive-guard.md +5 -5
- package/pipeline/commands/multi-agent/SKILL.md +3 -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 +287 -0
- 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 +46 -6
- 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 +107 -19
- package/pipeline/commands/multi-agent/resume/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/review/SKILL.md +2 -2
- 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 +123 -16
- package/pipeline/commands/multi-agent/test/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/uninstall/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/update/SKILL.md +3 -3
- package/pipeline/commands/sim-test.md +5 -5
- 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 +33 -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 +4 -4
- package/pipeline/multi-agent-refs/features/model-fallback.md +2 -2
- package/pipeline/multi-agent-refs/phases/phase-3-dev.md +2 -2
- package/pipeline/multi-agent-refs/phases/phase-4-review.md +1 -1
- package/pipeline/multi-agent-refs/phases/phase-5-test.md +4 -4
- package/pipeline/preferences-template.json +23 -12
- package/pipeline/schemas/agent-state.schema.json +125 -5
- 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 +183 -0
- 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/migrations/state-2.0.0-to-2.1.0.mjs +30 -12
- package/pipeline/schemas/plan-todos.schema.json +6 -3
- package/pipeline/schemas/planning-output.schema.json +5 -1
- package/pipeline/schemas/prefs.schema.json +215 -197
- 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/README.md +7 -5
- 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 +26 -8
- package/pipeline/scripts/cost-budget-check.mjs +11 -6
- 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 +7 -7
- 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 +119 -34
- package/pipeline/scripts/lint-mcp-refs.mjs +218 -0
- 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/memory-load.sh +5 -1
- package/pipeline/scripts/migrate-prefs.mjs +33 -16
- package/pipeline/scripts/phase-tracker.sh +3 -1
- package/pipeline/scripts/render-work-summary.sh +4 -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-command-inventory.sh +81 -0
- package/pipeline/scripts/smoke-commands-skills-parity.sh +1 -1
- package/pipeline/scripts/smoke-compliance-skills.sh +4 -4
- package/pipeline/scripts/smoke-context-budget.sh +72 -0
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +12 -2
- package/pipeline/scripts/smoke-generate-issue.sh +6 -5
- 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-per-repo-memory.sh +2 -2
- package/pipeline/scripts/smoke-review-readiness.sh +3 -2
- package/pipeline/scripts/smoke-schema-validation.sh +19 -5
- package/pipeline/scripts/smoke-shadow-git.sh +4 -2
- 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 +142 -32
- package/pipeline/scripts/uninstall.mjs +75 -31
- 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/.skill-manifest.json +24 -8
- package/pipeline/skills/.skills-index.json +125 -89
- package/pipeline/skills/shared/README.md +65 -61
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +10 -8
- 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 +248 -0
- 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 +23 -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 +82 -18
- package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +2 -2
- 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 +51 -9
- package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +2 -2
- 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 +63 -59
- package/pipeline/scripts/smoke-plugin-validate.sh +0 -64
package/CHANGELOG.md
CHANGED
|
@@ -14,6 +14,219 @@ Internal file-layout changes that don't affect the slash-command surface are sti
|
|
|
14
14
|
|
|
15
15
|
---
|
|
16
16
|
|
|
17
|
+
## [Unreleased]
|
|
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
|
+
|
|
102
|
+
## [12.6.0] - 2026-07-25
|
|
103
|
+
|
|
104
|
+
Two threads. The design-check command gains a scenario inventory, a coverage
|
|
105
|
+
gate and MCP-currency gating, and the refactor/sync pair learns to research,
|
|
106
|
+
audit and ship the companion dev-toolkit MCP server. Alongside that, a defect
|
|
107
|
+
sweep found eight gates and features that exited 0 while doing nothing - six
|
|
108
|
+
of them guarded by a smoke test whose fixture had the wrong shape, so the suite
|
|
109
|
+
stayed green the whole time.
|
|
110
|
+
|
|
111
|
+
Requires `@mmerterden/dev-toolkit-mcp` >= v2.9.0 for the App Store audit path.
|
|
112
|
+
|
|
113
|
+
### Fixed
|
|
114
|
+
|
|
115
|
+
- **Eight gates and features that reported success while doing nothing.** Each
|
|
116
|
+
exited 0 without doing its job, and in six cases the guarding smoke test
|
|
117
|
+
hand-wrote a fixture with the wrong shape, so the suite stayed green.
|
|
118
|
+
`npx @mmerterden/multi-agent-pipeline uninstall` was a silent no-op (the
|
|
119
|
+
`isMainModule` guard compared `import.meta.url` to `argv[1]`, which is
|
|
120
|
+
`index.js` under the bin dispatcher). `cost-budget-check.mjs` probed
|
|
121
|
+
`.worktrees/<id>/phase-tracker.json` while `phase-tracker.sh` writes
|
|
122
|
+
`~/.claude/logs/multi-agent/<id>/tracker-state.json`, so the cost ceiling
|
|
123
|
+
could never fire; it also now prices `tokens_cached`. `classify-plan-safety.mjs`
|
|
124
|
+
required `score >= 50` while its heaviest rule is 35, so no single heavy
|
|
125
|
+
signal could trip the autopilot pause its own contract promises.
|
|
126
|
+
`triage-memory.mjs` and `learnings-ledger.mjs` derived the repo slug from
|
|
127
|
+
`--show-toplevel`, which inside a worktree is the task id, sharding the
|
|
128
|
+
per-repo store one directory per task; they now use `--git-common-dir`.
|
|
129
|
+
`state-2.0.0-to-2.1.0.mjs` emitted keys `agent-state.schema.json` rejects
|
|
130
|
+
under `additionalProperties: false`. `memory-load.sh` read `preferences.json`
|
|
131
|
+
while the installer only writes `multi-agent-preferences.json`, so per-repo
|
|
132
|
+
memory was dead in production. `smoke-cross-cli-behavior.sh` had unquoted
|
|
133
|
+
command substitution (SC2046) that made two gates pass while violations were
|
|
134
|
+
present. The CI leak gate in all three workflows grepped 5 of the 23
|
|
135
|
+
forbidden patterns and was `release.yml`'s only PII gate; all three now call
|
|
136
|
+
`smoke-personal-data.sh --root`, keeping one pattern list.
|
|
137
|
+
- **shellcheck moves from `error` to `warning` severity.** `error` returns zero
|
|
138
|
+
findings across all 175 scripts, so the gate could not catch this repo's
|
|
139
|
+
actual defect class - SC2046 is a warning. Noisy codes are excluded with a
|
|
140
|
+
per-code rationale. Four real findings surfaced and are fixed, including two
|
|
141
|
+
unguarded `cd` calls in `smoke-shadow-git.sh`, one preceding a relative
|
|
142
|
+
`rm -rf`.
|
|
143
|
+
- **`credential-store.sh` resolves logical keys through
|
|
144
|
+
`prefs.global.keychainMapping`.** `get github` searched the backend for a
|
|
145
|
+
credential literally named "github" and returned empty with exit 1 -
|
|
146
|
+
indistinguishable from "no such credential" - because the entry is named by
|
|
147
|
+
the mapping. Applied in `get`/`set`/`delete`, falling back to the logical key
|
|
148
|
+
when no mapping exists.
|
|
149
|
+
|
|
150
|
+
### Changed
|
|
151
|
+
|
|
152
|
+
- **`ios_app_store_audit` catalog grows to 18 rules**, requiring
|
|
153
|
+
`@mmerterden/dev-toolkit-mcp` >= v2.9.0. Adds `sdk-floor` (ITMS-90725, the
|
|
154
|
+
iOS 26 / Xcode 26 build floor in force since 2026-04-28). `embedded-sdk`'s
|
|
155
|
+
missing framework privacy manifest moves from a `5.1.1` WARNING to
|
|
156
|
+
`ITMS-91061` ERROR, an enforced rejection since 2025-02-12, so archives that
|
|
157
|
+
previously passed with a warning now fail. The rule count and the declared
|
|
158
|
+
minimum are updated across all nine files that asserted them.
|
|
159
|
+
|
|
160
|
+
### Added
|
|
161
|
+
|
|
162
|
+
- **`/multi-agent:refactor` band E (Step 0c)**: the companion dev-toolkit MCP
|
|
163
|
+
server is now in scope. The step researches current MCP practice (protocol
|
|
164
|
+
revisions and SDK releases, host-client conventions, peer servers, the
|
|
165
|
+
platform tooling it wraps, field practice) and audits the toolkit repo
|
|
166
|
+
against it: syntax, stdout hygiene (stdout carries the JSON-RPC frames),
|
|
167
|
+
advertised tool counts vs reality, `files[]` coverage, dependency freshness.
|
|
168
|
+
Findings land in the merged Step 4 plan as band-E items, applied in that repo
|
|
169
|
+
and shipped by sync. New focus filter: `/multi-agent:refactor dev-toolkit`.
|
|
170
|
+
- **`/multi-agent:sync` Step 3d**: ships the dev-toolkit MCP server when it
|
|
171
|
+
moved (dirty tree, unpushed commits, or an untagged version). Seven ship
|
|
172
|
+
gates run before anything leaves the machine, including a `tools/list`
|
|
173
|
+
stdio handshake that must answer with a non-zero tool count, an
|
|
174
|
+
advertised-count match against README and `package.json`, an
|
|
175
|
+
`npm pack --dry-run` check that every runtime `tools/*/` directory is inside
|
|
176
|
+
`files[]`, and a version-contract check against the minimums pipeline skills
|
|
177
|
+
declare. Publish goes to the registry from that repo's `publishConfig`
|
|
178
|
+
through a throwaway `--userconfig` built from the `npm` logical Keychain key.
|
|
179
|
+
Outside autopilot / `release` it asks first; `/multi-agent:sync dev-toolkit`
|
|
180
|
+
runs only this step.
|
|
181
|
+
- **`global.devToolkit` preference** (schema + template): `enabled`, `label`,
|
|
182
|
+
`localPath`, `mcpServerName`, `packageName`, `registry`, `repoUrl`. Both
|
|
183
|
+
commands fall back to auto-detecting the repo from the `mcpServers`
|
|
184
|
+
registration when `localPath` is absent, and skip silently when nothing
|
|
185
|
+
resolves. No path is ever hardcoded.
|
|
186
|
+
|
|
187
|
+
- **`smoke-command-inventory.sh`**: the command count is now DERIVED from
|
|
188
|
+
`pipeline/commands/multi-agent/*/` and the prose must agree with the tree
|
|
189
|
+
(contract header, both sync surfaces, every command listed on all three, and a
|
|
190
|
+
`shared/core` skill counterpart per command). `smoke-generate-issue.sh` and
|
|
191
|
+
`smoke-review-readiness.sh` stopped asserting the literal `41` and now compare
|
|
192
|
+
against the derived count too.
|
|
193
|
+
- **`lint-mcp-refs.mjs`**: every `mcp__<server>__<tool>` reference in
|
|
194
|
+
`commands/`, `skills/` and `multi-agent-refs/` must name a known registered
|
|
195
|
+
MCP server, and when the companion toolkit resolves locally the referenced
|
|
196
|
+
`dev-toolkit` tools are checked against its live `tools/list`. Wired into
|
|
197
|
+
`npm test` and `npm run test:quick`.
|
|
198
|
+
- **`validate-prefs.mjs`**: validates `preferences-template.json` against
|
|
199
|
+
`prefs.schema.json` (hard failure) and the local preferences file (advisory,
|
|
200
|
+
`--strict-live` to enforce). Dev-only (ajv), excluded from the published
|
|
201
|
+
package so the runtime stays zero-dep.
|
|
202
|
+
- `design-check` is registered in the command inventory: contract list +
|
|
203
|
+
category row, both sync inventories, and the Copilot mirror. Inventory is 42
|
|
204
|
+
commands.
|
|
205
|
+
|
|
206
|
+
### Fixed
|
|
207
|
+
|
|
208
|
+
- **Every `mcp__dev_toolkit__*` reference is now `mcp__dev-toolkit__*`** (55
|
|
209
|
+
lines across 10 files). A host composes MCP tool names as
|
|
210
|
+
`mcp__<registered-server-name>__<tool>` and the server registers as
|
|
211
|
+
`dev-toolkit`, so the snake_case form named tools that do not exist. The worst
|
|
212
|
+
case was silent: `design-check`'s `allowed-tools` allowlist matched nothing, so
|
|
213
|
+
the skill was denied the tools it needs, and `smoke-compliance-skills.sh`
|
|
214
|
+
asserted the wrong spelling and kept the gate green.
|
|
215
|
+
- `prefs.schema.json` accepted neither the template it describes nor a real
|
|
216
|
+
preferences file. Now declared: `global.modelFallback`, the `_*Template`
|
|
217
|
+
documentation blocks, nullable `defaultJiraKey`, `keychainMapping.figma_pat` /
|
|
218
|
+
`figma_user` / `claude_oauth_token` / `claude_oauth_token_fallback` (all four
|
|
219
|
+
resolved by shipped flows), project-level `componentDevWorkflow`, and a
|
|
220
|
+
`defaultReviewers` ceiling that fits real reviewer groups (10 -> 40).
|
|
221
|
+
- `global.derivedSkillSources` is now declared in `prefs.schema.json`. It was
|
|
222
|
+
used by refactor Step 0b and shipped in the preferences template, but the
|
|
223
|
+
strict (`additionalProperties: false`) global block rejected it.
|
|
224
|
+
- `/multi-agent:sync` Step 3d prefers the toolkit repo's own gate script
|
|
225
|
+
(`npm run gates`) over the inline gate list, so the definition lives in the
|
|
226
|
+
repo being shipped and the two cannot drift apart.
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
17
230
|
## [12.5.0] - 2026-07-24
|
|
18
231
|
|
|
19
232
|
Repo learning loop: repeated runs on the same repo produce better and cheaper
|
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
|
|
|
@@ -64,7 +64,7 @@ The discipline behind all of this — bounded loops, evidence gates, token-budge
|
|
|
64
64
|
| Local | `/multi-agent:local "task"` | Full pipeline, current branch (no worktree) |
|
|
65
65
|
| Finish | `/multi-agent:finish` | Run the review→test→commit→report tail over local work |
|
|
66
66
|
|
|
67
|
-
Helpers: `setup`, `status`, `resume #N`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `create-jira`. Full list: `/multi-agent:help`.
|
|
67
|
+
Helpers: `setup`, `status`, `resume #N`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `create-jira`, `save`, `routines`, `forget`. Full list: `/multi-agent:help`.
|
|
68
68
|
|
|
69
69
|
## Stacks
|
|
70
70
|
|
|
@@ -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-
|