@mmerterden/multi-agent-pipeline 8.6.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 +2623 -0
- package/LICENSE +21 -0
- package/README.md +852 -0
- package/docs/FIGMA_PIPELINE.md +138 -0
- package/docs/GENERICITY-REVIEW.md +277 -0
- package/docs/STABILITY-FIX-PLAN.md +168 -0
- package/docs/adr/0001-three-model-triage.md +81 -0
- package/docs/adr/0002-instruction-driven-flag.md +62 -0
- package/docs/adr/0003-unified-shared-skills.md +55 -0
- package/docs/adr/0004-zero-dependency-philosophy.md +60 -0
- package/docs/adr/0005-lazy-phase-docs.md +68 -0
- package/docs/adr/0006-skills-core-external-split.md +52 -0
- package/docs/adr/0007-multi-tool-adapter-framework.md +110 -0
- package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +98 -0
- package/docs/adr/README.md +33 -0
- package/docs/architecture.md +181 -0
- package/docs/best-practices.md +93 -0
- package/docs/features.md +274 -0
- package/docs/performance.md +116 -0
- package/docs/recovery-guide.md +479 -0
- package/index.js +76 -0
- package/install/_adapters.mjs +69 -0
- package/install/_common.mjs +150 -0
- package/install/_copilot-instructions.mjs +32 -0
- package/install/_dev-only-files.mjs +23 -0
- package/install/_platform-filter.mjs +132 -0
- package/install/_telemetry.mjs +79 -0
- package/install/claude.mjs +332 -0
- package/install/copilot.mjs +254 -0
- package/install/index.mjs +179 -0
- package/install/templates/copilot-instructions.md +319 -0
- package/install.js +24 -0
- package/package.json +78 -0
- package/pipeline/adapters/_base.mjs +288 -0
- package/pipeline/adapters/copilot-chat.mjs +158 -0
- package/pipeline/adapters/cursor.mjs +187 -0
- package/pipeline/agents/android-architect.md +42 -0
- package/pipeline/agents/backend-architect.md +43 -0
- package/pipeline/agents/code-reviewer.md +57 -0
- package/pipeline/agents/dev-critic.md +148 -0
- package/pipeline/agents/explorer.md +34 -0
- package/pipeline/agents/ios-architect.md +41 -0
- package/pipeline/agents/security-auditor.md +98 -0
- package/pipeline/agents/task-clarifier.md +113 -0
- package/pipeline/claude-md-template.md +55 -0
- package/pipeline/commands/archive-guard.md +45 -0
- package/pipeline/commands/deploy.md +54 -0
- package/pipeline/commands/figma-to-swiftui.md +295 -0
- package/pipeline/commands/multi-agent/_account-picker.md +90 -0
- package/pipeline/commands/multi-agent/_dev-context.md +111 -0
- package/pipeline/commands/multi-agent/_input-parser.md +43 -0
- package/pipeline/commands/multi-agent/_repo-picker.md +76 -0
- package/pipeline/commands/multi-agent/autopilot.md +116 -0
- package/pipeline/commands/multi-agent/channels.md +465 -0
- package/pipeline/commands/multi-agent/delete.md +66 -0
- package/pipeline/commands/multi-agent/dev-autopilot.md +120 -0
- package/pipeline/commands/multi-agent/dev-local-autopilot.md +110 -0
- package/pipeline/commands/multi-agent/dev-local.md +105 -0
- package/pipeline/commands/multi-agent/dev.md +246 -0
- package/pipeline/commands/multi-agent/diff-explain.md +68 -0
- package/pipeline/commands/multi-agent/help.md +422 -0
- package/pipeline/commands/multi-agent/issue.md +79 -0
- package/pipeline/commands/multi-agent/jira.md +132 -0
- package/pipeline/commands/multi-agent/kill.md +38 -0
- package/pipeline/commands/multi-agent/language.md +94 -0
- package/pipeline/commands/multi-agent/local-autopilot.md +139 -0
- package/pipeline/commands/multi-agent/local.md +117 -0
- package/pipeline/commands/multi-agent/log.md +25 -0
- package/pipeline/commands/multi-agent/manual-test.md +43 -0
- package/pipeline/commands/multi-agent/purge.md +39 -0
- package/pipeline/commands/multi-agent/refactor.md +188 -0
- package/pipeline/commands/multi-agent/refs/android-guide.md +250 -0
- package/pipeline/commands/multi-agent/refs/audit-guide.md +240 -0
- package/pipeline/commands/multi-agent/refs/backend-guide.md +135 -0
- package/pipeline/commands/multi-agent/refs/channels/confluence.md +153 -0
- package/pipeline/commands/multi-agent/refs/channels/issue-comment.md +141 -0
- package/pipeline/commands/multi-agent/refs/channels/jira.md +127 -0
- package/pipeline/commands/multi-agent/refs/channels/pr-review-actions.md +135 -0
- package/pipeline/commands/multi-agent/refs/channels/pr.md +139 -0
- package/pipeline/commands/multi-agent/refs/channels/wiki.md +66 -0
- package/pipeline/commands/multi-agent/refs/component-dispatch.md +92 -0
- package/pipeline/commands/multi-agent/refs/cross-cli-contract.md +326 -0
- package/pipeline/commands/multi-agent/refs/frontend-guide.md +136 -0
- package/pipeline/commands/multi-agent/refs/issue-jira-triad.md +104 -0
- package/pipeline/commands/multi-agent/refs/keychain.md +80 -0
- package/pipeline/commands/multi-agent/refs/knowledge.md +112 -0
- package/pipeline/commands/multi-agent/refs/multi-repo-integration-build.md +207 -0
- package/pipeline/commands/multi-agent/refs/phases/log-format.md +89 -0
- package/pipeline/commands/multi-agent/refs/phases/modes.md +156 -0
- package/pipeline/commands/multi-agent/refs/phases/operations.md +91 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-0-init.md +481 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-1-analysis.md +264 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-2-planning.md +278 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-3-dev.md +364 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-4-review.md +378 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-5-test.md +129 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-6-commit.md +339 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-7-report.md +361 -0
- package/pipeline/commands/multi-agent/refs/phases.md +187 -0
- package/pipeline/commands/multi-agent/refs/progress-contract.md +155 -0
- package/pipeline/commands/multi-agent/refs/rules.md +189 -0
- package/pipeline/commands/multi-agent/refs/swiftui-guide.md +254 -0
- package/pipeline/commands/multi-agent/refs/tracker-contract.md +256 -0
- package/pipeline/commands/multi-agent/refs/wiki-capture.md +109 -0
- package/pipeline/commands/multi-agent/resume.md +28 -0
- package/pipeline/commands/multi-agent/review.md +228 -0
- package/pipeline/commands/multi-agent/scan.md +74 -0
- package/pipeline/commands/multi-agent/search.md +97 -0
- package/pipeline/commands/multi-agent/setup.md +767 -0
- package/pipeline/commands/multi-agent/stack.md +48 -0
- package/pipeline/commands/multi-agent/status.md +38 -0
- package/pipeline/commands/multi-agent/sync.md +319 -0
- package/pipeline/commands/multi-agent/test.md +39 -0
- package/pipeline/commands/multi-agent/update.md +88 -0
- package/pipeline/commands/multi-agent.md +293 -0
- package/pipeline/commands/security-review.md +6 -0
- package/pipeline/commands/sim-test.md +256 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-1-analysis.json +25 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-2-plan.json +30 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-review.json +20 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-triage.json +15 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/task.json +12 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-1-analysis.json +29 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-2-plan.json +43 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-review.json +35 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-triage.json +35 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/task.json +12 -0
- package/pipeline/eval/golden-tasks/README.md +65 -0
- package/pipeline/eval/triage/01-empty-findings/expected.json +6 -0
- package/pipeline/eval/triage/01-empty-findings/input.json +5 -0
- package/pipeline/eval/triage/01-empty-findings/notes.md +7 -0
- package/pipeline/eval/triage/02-real-blocker/expected.json +15 -0
- package/pipeline/eval/triage/02-real-blocker/input.json +14 -0
- package/pipeline/eval/triage/02-real-blocker/notes.md +7 -0
- package/pipeline/eval/triage/03-out-of-scope-defer/expected.json +18 -0
- package/pipeline/eval/triage/03-out-of-scope-defer/input.json +14 -0
- package/pipeline/eval/triage/03-out-of-scope-defer/notes.md +10 -0
- package/pipeline/eval/triage/04-false-positive-reject/expected.json +18 -0
- package/pipeline/eval/triage/04-false-positive-reject/input.json +14 -0
- package/pipeline/eval/triage/04-false-positive-reject/notes.md +10 -0
- package/pipeline/eval/triage/05-mixed-classification/expected.json +43 -0
- package/pipeline/eval/triage/05-mixed-classification/input.json +38 -0
- package/pipeline/eval/triage/05-mixed-classification/notes.md +17 -0
- package/pipeline/eval/triage/06-severity-mismatch/expected.json +15 -0
- package/pipeline/eval/triage/06-severity-mismatch/input.json +14 -0
- package/pipeline/eval/triage/06-severity-mismatch/notes.md +9 -0
- package/pipeline/eval/triage/07-duplicate-reviewers/expected.json +27 -0
- package/pipeline/eval/triage/07-duplicate-reviewers/input.json +22 -0
- package/pipeline/eval/triage/07-duplicate-reviewers/notes.md +9 -0
- package/pipeline/eval/triage/08-style-misclassified/expected.json +18 -0
- package/pipeline/eval/triage/08-style-misclassified/input.json +14 -0
- package/pipeline/eval/triage/08-style-misclassified/notes.md +9 -0
- package/pipeline/eval/triage/09-cascading-finding/expected.json +23 -0
- package/pipeline/eval/triage/09-cascading-finding/input.json +22 -0
- package/pipeline/eval/triage/09-cascading-finding/notes.md +9 -0
- package/pipeline/eval/triage/10-deferred-crossref/expected.json +18 -0
- package/pipeline/eval/triage/10-deferred-crossref/input.json +14 -0
- package/pipeline/eval/triage/10-deferred-crossref/notes.md +9 -0
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/expected.json +27 -0
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/input.json +22 -0
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/notes.md +14 -0
- package/pipeline/eval/triage/README.md +54 -0
- package/pipeline/lib/account-resolver.sh +204 -0
- package/pipeline/lib/channels-multi-repo.sh +218 -0
- package/pipeline/lib/context-link-extractor.sh +192 -0
- package/pipeline/lib/credential-store-resolver.sh +57 -0
- package/pipeline/lib/credential-store.sh +226 -0
- package/pipeline/lib/fetch-confluence.sh +358 -0
- package/pipeline/lib/fetch-crashlytics.sh +314 -0
- package/pipeline/lib/fetch-fortify.sh +321 -0
- package/pipeline/lib/fetch-swagger.sh +270 -0
- package/pipeline/lib/issue-fetcher.sh +333 -0
- package/pipeline/lib/multi-repo-pipeline.sh +252 -0
- package/pipeline/lib/plan-todos.sh +284 -0
- package/pipeline/lib/post-pr-review.sh +374 -0
- package/pipeline/lib/repo-cache.sh +231 -0
- package/pipeline/lib/review-watch.sh +244 -0
- package/pipeline/lib/shadow-git.sh +222 -0
- package/pipeline/lib/submodule-detector.sh +177 -0
- package/pipeline/lib/vercel-deploy.sh +170 -0
- package/pipeline/preferences-template.json +132 -0
- package/pipeline/rules/app-store-guidelines.md +59 -0
- package/pipeline/rules/code-review.md +27 -0
- package/pipeline/rules/code-style.md +37 -0
- package/pipeline/rules/debugging.md +24 -0
- package/pipeline/rules/figma-pipeline.md +190 -0
- package/pipeline/rules/git-conventions.md +29 -0
- package/pipeline/rules/kotlin-android.md +92 -0
- package/pipeline/rules/performance.md +23 -0
- package/pipeline/rules/security.md +39 -0
- package/pipeline/rules/swiftui-qa.md +32 -0
- package/pipeline/rules/tdd.md +25 -0
- package/pipeline/rules/testing.md +37 -0
- package/pipeline/schemas/agent-state.schema.json +273 -0
- package/pipeline/schemas/analysis-output.schema.json +59 -0
- package/pipeline/schemas/clarify-output.schema.json +74 -0
- package/pipeline/schemas/dev-critic-output.schema.json +104 -0
- package/pipeline/schemas/diff-risk.schema.json +78 -0
- package/pipeline/schemas/figma-project-config.schema.json +372 -0
- package/pipeline/schemas/migrations/README.md +73 -0
- package/pipeline/schemas/migrations/figma-config-1.0.0-to-2.0.0.mjs +112 -0
- package/pipeline/schemas/migrations/prefs-2.0.0-to-2.1.0.mjs +75 -0
- package/pipeline/schemas/migrations/prefs-2.1.0-to-2.2.0.mjs +64 -0
- package/pipeline/schemas/migrations/prefs-2.2.0-to-2.3.0.mjs +36 -0
- package/pipeline/schemas/migrations/state-2.0.0-to-2.1.0.mjs +34 -0
- package/pipeline/schemas/plan-todos.schema.json +62 -0
- package/pipeline/schemas/planning-output.schema.json +57 -0
- package/pipeline/schemas/prefs.schema.json +1137 -0
- package/pipeline/schemas/reviewer-output.schema.json +55 -0
- package/pipeline/schemas/test-gap.schema.json +64 -0
- package/pipeline/schemas/token-budget.json +17 -0
- package/pipeline/schemas/triage-corpus.schema.json +31 -0
- package/pipeline/schemas/triage-output.schema.json +115 -0
- package/pipeline/scripts/.last-figma-sync-plan.json +23 -0
- package/pipeline/scripts/README-figma-smokes.md +34 -0
- package/pipeline/scripts/README.md +104 -0
- package/pipeline/scripts/aggregate-metrics.mjs +310 -0
- package/pipeline/scripts/audit-log-rotate.sh +61 -0
- package/pipeline/scripts/audit-log.sh +69 -0
- package/pipeline/scripts/benchmark-phase-0.sh +128 -0
- package/pipeline/scripts/build-skills-index.mjs +139 -0
- package/pipeline/scripts/classify-plan-safety.mjs +177 -0
- package/pipeline/scripts/cost-table.json +27 -0
- package/pipeline/scripts/diff-explain.mjs +276 -0
- package/pipeline/scripts/diff-risk-score.mjs +328 -0
- package/pipeline/scripts/eval-golden-tasks-live.mjs +294 -0
- package/pipeline/scripts/eval-golden-tasks.mjs +223 -0
- package/pipeline/scripts/eval-triage.mjs +171 -0
- package/pipeline/scripts/figma-placeholder-map.json +191 -0
- package/pipeline/scripts/fixtures/diff-risk-android.diff +40 -0
- package/pipeline/scripts/fixtures/diff-risk-ios.diff +48 -0
- package/pipeline/scripts/fixtures/install-layout.tsv +16 -0
- package/pipeline/scripts/fixtures/test-gap-node.diff +30 -0
- package/pipeline/scripts/fixtures/test-gap-python.diff +32 -0
- package/pipeline/scripts/gen-mode-dispatch.mjs +170 -0
- package/pipeline/scripts/gen-skills-index.mjs +90 -0
- package/pipeline/scripts/github-ssh-setup.sh +103 -0
- package/pipeline/scripts/import-figma-skills.sh +253 -0
- package/pipeline/scripts/keychain-save.sh +74 -0
- package/pipeline/scripts/keychain.py +294 -0
- package/pipeline/scripts/log-metric.sh +98 -0
- package/pipeline/scripts/match-skills.mjs +167 -0
- package/pipeline/scripts/memory-load.sh +46 -0
- package/pipeline/scripts/memory-save.sh +76 -0
- package/pipeline/scripts/migrate-prefs.mjs +390 -0
- package/pipeline/scripts/migrate-state.mjs +215 -0
- package/pipeline/scripts/output-quality-check.sh +125 -0
- package/pipeline/scripts/phase-banner.sh +158 -0
- package/pipeline/scripts/phase-tracker.sh +548 -0
- package/pipeline/scripts/pre-commit-check.sh +69 -0
- package/pipeline/scripts/pre-push-check.sh +77 -0
- package/pipeline/scripts/render-agent-log-cost.sh +149 -0
- package/pipeline/scripts/render-cost-summary.sh +137 -0
- package/pipeline/scripts/render-work-summary.sh +195 -0
- package/pipeline/scripts/repo-map.mjs +367 -0
- package/pipeline/scripts/run-aggregator.mjs +298 -0
- package/pipeline/scripts/scan-skills.sh +332 -0
- package/pipeline/scripts/search-logs.sh +291 -0
- package/pipeline/scripts/sign-skills.sh +67 -0
- package/pipeline/scripts/smoke-adapters.sh +207 -0
- package/pipeline/scripts/smoke-add-detail.sh +137 -0
- package/pipeline/scripts/smoke-agent-log-cost.sh +183 -0
- package/pipeline/scripts/smoke-agent-model-routing.sh +87 -0
- package/pipeline/scripts/smoke-bitbucket-contract.sh +223 -0
- package/pipeline/scripts/smoke-channels-flow.sh +130 -0
- package/pipeline/scripts/smoke-ci-workflows.sh +88 -0
- package/pipeline/scripts/smoke-clarify.sh +148 -0
- package/pipeline/scripts/smoke-commands-skills-parity.sh +87 -0
- package/pipeline/scripts/smoke-compliance-skills.sh +119 -0
- package/pipeline/scripts/smoke-cost-summary.sh +139 -0
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +198 -0
- package/pipeline/scripts/smoke-cross-phase-cohesion.sh +128 -0
- package/pipeline/scripts/smoke-delete-flow.sh +151 -0
- package/pipeline/scripts/smoke-dev-critic.sh +144 -0
- package/pipeline/scripts/smoke-diff-explain.sh +128 -0
- package/pipeline/scripts/smoke-diff-risk.sh +161 -0
- package/pipeline/scripts/smoke-dynamic-skill-loading.sh +160 -0
- package/pipeline/scripts/smoke-eval-live.sh +136 -0
- package/pipeline/scripts/smoke-existing-discovery-gate.sh +71 -0
- package/pipeline/scripts/smoke-figma-android-parity.sh +148 -0
- package/pipeline/scripts/smoke-figma-config-schema.sh +144 -0
- package/pipeline/scripts/smoke-figma-credential-store.sh +105 -0
- package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +177 -0
- package/pipeline/scripts/smoke-figma-dispatch.sh +123 -0
- package/pipeline/scripts/smoke-figma-skill-import.sh +174 -0
- package/pipeline/scripts/smoke-figma-sync.sh +149 -0
- package/pipeline/scripts/smoke-identity-isolation.sh +70 -0
- package/pipeline/scripts/smoke-install-layout.sh +241 -0
- package/pipeline/scripts/smoke-install-leak-gate.sh +125 -0
- package/pipeline/scripts/smoke-issue-comment-template.sh +86 -0
- package/pipeline/scripts/smoke-issue-jira-triad.sh +120 -0
- package/pipeline/scripts/smoke-keychain.sh +158 -0
- package/pipeline/scripts/smoke-language-axis.sh +109 -0
- package/pipeline/scripts/smoke-lib-scripts.sh +395 -0
- package/pipeline/scripts/smoke-migrate-state.sh +102 -0
- package/pipeline/scripts/smoke-mode-dispatch-drift.sh +158 -0
- package/pipeline/scripts/smoke-multi-repo-integration.sh +116 -0
- package/pipeline/scripts/smoke-multi-repo-worktree.sh +61 -0
- package/pipeline/scripts/smoke-no-token-prompt.sh +69 -0
- package/pipeline/scripts/smoke-pat-audit.sh +107 -0
- package/pipeline/scripts/smoke-per-repo-memory.sh +156 -0
- package/pipeline/scripts/smoke-personal-data.sh +82 -0
- package/pipeline/scripts/smoke-phase-0-multi-repo.sh +170 -0
- package/pipeline/scripts/smoke-phase-6-multi.sh +79 -0
- package/pipeline/scripts/smoke-phase-banner.sh +101 -0
- package/pipeline/scripts/smoke-phase-tracker.sh +255 -0
- package/pipeline/scripts/smoke-phase0-bridge-contract.sh +241 -0
- package/pipeline/scripts/smoke-phase4-triage.sh +142 -0
- package/pipeline/scripts/smoke-plan-approval-gate.sh +71 -0
- package/pipeline/scripts/smoke-plan-safety.sh +139 -0
- package/pipeline/scripts/smoke-plan-todos.sh +193 -0
- package/pipeline/scripts/smoke-pr-review-actions.sh +152 -0
- package/pipeline/scripts/smoke-pre-commit.sh +138 -0
- package/pipeline/scripts/smoke-pref-migration.sh +224 -0
- package/pipeline/scripts/smoke-prefs-language.sh +134 -0
- package/pipeline/scripts/smoke-progress-contract.sh +118 -0
- package/pipeline/scripts/smoke-push-retry.sh +75 -0
- package/pipeline/scripts/smoke-readme-counts.sh +120 -0
- package/pipeline/scripts/smoke-repo-map.sh +300 -0
- package/pipeline/scripts/smoke-review-watch.sh +134 -0
- package/pipeline/scripts/smoke-run-aggregator.sh +216 -0
- package/pipeline/scripts/smoke-schema-validation.sh +173 -0
- package/pipeline/scripts/smoke-search.sh +187 -0
- package/pipeline/scripts/smoke-shadow-git.sh +175 -0
- package/pipeline/scripts/smoke-skill-authoring.sh +142 -0
- package/pipeline/scripts/smoke-skill-language.sh +83 -0
- package/pipeline/scripts/smoke-skill-manifest.sh +138 -0
- package/pipeline/scripts/smoke-skill-scan.sh +198 -0
- package/pipeline/scripts/smoke-stack-swap.sh +132 -0
- package/pipeline/scripts/smoke-subagent-validators.sh +105 -0
- package/pipeline/scripts/smoke-sync-delegation.sh +74 -0
- package/pipeline/scripts/smoke-sync-parity.sh +92 -0
- package/pipeline/scripts/smoke-tasklist-ordering.sh +111 -0
- package/pipeline/scripts/smoke-telemetry.sh +147 -0
- package/pipeline/scripts/smoke-test-gap.sh +183 -0
- package/pipeline/scripts/smoke-token-budget.sh +67 -0
- package/pipeline/scripts/smoke-tracker-contract.sh +129 -0
- package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +65 -0
- package/pipeline/scripts/smoke-triage-memory.sh +174 -0
- package/pipeline/scripts/smoke-url-enrichment.sh +70 -0
- package/pipeline/scripts/smoke-validator-contradiction.sh +67 -0
- package/pipeline/scripts/smoke-vercel-deploy-redact.sh +129 -0
- package/pipeline/scripts/smoke-wiki-integration.sh +146 -0
- package/pipeline/scripts/smoke-work-summary.sh +163 -0
- package/pipeline/scripts/smoke-worktree-path-convention.sh +86 -0
- package/pipeline/scripts/smoke-write-state.sh +115 -0
- package/pipeline/scripts/stack-swap.sh +182 -0
- package/pipeline/scripts/sync-figma-source.sh +228 -0
- package/pipeline/scripts/sync-parity-check.sh +135 -0
- package/pipeline/scripts/test-gap-rules/android.json +25 -0
- package/pipeline/scripts/test-gap-rules/ios.json +29 -0
- package/pipeline/scripts/test-gap-rules/node.json +17 -0
- package/pipeline/scripts/test-gap-rules/python.json +19 -0
- package/pipeline/scripts/test-gap-scan.mjs +343 -0
- package/pipeline/scripts/token-budget-report.mjs +145 -0
- package/pipeline/scripts/triage-memory.mjs +258 -0
- package/pipeline/scripts/ui-tree-dumper.swift +122 -0
- package/pipeline/scripts/uninstall.mjs +331 -0
- package/pipeline/scripts/update-issue-progress.sh +146 -0
- package/pipeline/scripts/validate-analysis.mjs +132 -0
- package/pipeline/scripts/validate-diff-risk.mjs +117 -0
- package/pipeline/scripts/validate-planning.mjs +180 -0
- package/pipeline/scripts/validate-reviewer.mjs +131 -0
- package/pipeline/scripts/validate-schemas.mjs +88 -0
- package/pipeline/scripts/validate-test-gap.mjs +90 -0
- package/pipeline/scripts/validate-triage.mjs +175 -0
- package/pipeline/scripts/verify-skills.sh +126 -0
- package/pipeline/scripts/write-state.mjs +175 -0
- package/pipeline/skills/.skill-manifest.json +779 -0
- package/pipeline/skills/.skills-index.json +1771 -0
- package/pipeline/skills/figma-android/README.md +36 -0
- package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +62 -0
- package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +158 -0
- package/pipeline/skills/figma-android/figma-component-test/SKILL.md +120 -0
- package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +35 -0
- package/pipeline/skills/figma-android/figma-to-component/SKILL.md +124 -0
- package/pipeline/skills/figma-common/README.md +57 -0
- package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +277 -0
- package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +498 -0
- package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +283 -0
- package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +362 -0
- package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +206 -0
- package/pipeline/skills/figma-common/figma-commit/REVIEW.md +337 -0
- package/pipeline/skills/figma-common/figma-commit/SKILL.md +211 -0
- package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +218 -0
- package/pipeline/skills/figma-common/figma-component-start/SKILL.md +246 -0
- package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +73 -0
- package/pipeline/skills/figma-common/figma-fix/SKILL.md +316 -0
- package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +542 -0
- package/pipeline/skills/figma-common/figma-issue/SKILL.md +745 -0
- package/pipeline/skills/figma-common/figma-iterate/SKILL.md +203 -0
- package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +1015 -0
- package/pipeline/skills/figma-common/figma-mend/SKILL.md +331 -0
- package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +398 -0
- package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +104 -0
- package/pipeline/skills/figma-common/figma-review/SKILL.md +395 -0
- package/pipeline/skills/figma-common/figma-setup/SKILL.md +514 -0
- package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +592 -0
- package/pipeline/skills/figma-common/figma-skip/SKILL.md +129 -0
- package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +104 -0
- package/pipeline/skills/figma-common/figma-utility/SKILL.md +274 -0
- package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +808 -0
- package/pipeline/skills/figma-common/figma-validate/SKILL.md +633 -0
- package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +711 -0
- package/pipeline/skills/figma-common/performance-review-next/SKILL.md +233 -0
- package/pipeline/skills/figma-common/performance-start/SKILL.md +425 -0
- package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +706 -0
- package/pipeline/skills/figma-common/performance-tour/SKILL.md +418 -0
- package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +67 -0
- package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +178 -0
- package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +184 -0
- package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +219 -0
- package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +274 -0
- package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +401 -0
- package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +57 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +307 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +119 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +174 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +333 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +368 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +393 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +617 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +352 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +337 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +206 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +235 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +214 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +871 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +156 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +175 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +176 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +333 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +412 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +336 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +695 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +332 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +380 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +262 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +482 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +274 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +636 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +142 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +547 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +39 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +659 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +580 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +51 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +129 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +64 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +531 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +89 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +155 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +196 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +57 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +89 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +227 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +157 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +90 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +116 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +153 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +130 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +218 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +188 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +93 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +98 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +261 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +147 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +182 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +185 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +609 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +332 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +261 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +184 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +188 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +768 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +191 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +420 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.json +94 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +336 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +391 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +292 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +1 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +93 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +299 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +343 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +206 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +149 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +281 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +332 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +176 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +98 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +298 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +195 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +1298 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +228 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +1089 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +141 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +106 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +162 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +105 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +179 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +260 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +260 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +86 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +321 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +1470 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +176 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +147 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +629 -0
- package/pipeline/skills/shared/README.md +212 -0
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +315 -0
- package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +348 -0
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +944 -0
- package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +51 -0
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +300 -0
- package/pipeline/skills/shared/core/multi-agent-delete/SKILL.md +63 -0
- package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +64 -0
- package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +56 -0
- package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +36 -0
- package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +42 -0
- package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +66 -0
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +292 -0
- package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +35 -0
- package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +38 -0
- package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +41 -0
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +87 -0
- package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +37 -0
- package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +53 -0
- package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +28 -0
- package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +47 -0
- package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +42 -0
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +191 -0
- package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +31 -0
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +61 -0
- package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +61 -0
- package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +62 -0
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +309 -0
- package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +55 -0
- package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +41 -0
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +184 -0
- package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +44 -0
- package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +34 -0
- package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +45 -0
- package/pipeline/skills/shared/external/agentflow/SKILL.md +199 -0
- package/pipeline/skills/shared/external/alarmkit/SKILL.md +438 -0
- package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +584 -0
- package/pipeline/skills/shared/external/android-architecture/SKILL.md +407 -0
- package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +153 -0
- package/pipeline/skills/shared/external/android-performance/SKILL.md +736 -0
- package/pipeline/skills/shared/external/android-security/SKILL.md +577 -0
- package/pipeline/skills/shared/external/android_ui_verification/SKILL.md +66 -0
- package/pipeline/skills/shared/external/api-patterns/SKILL.md +85 -0
- package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +910 -0
- package/pipeline/skills/shared/external/app-clips/SKILL.md +436 -0
- package/pipeline/skills/shared/external/app-intents/SKILL.md +489 -0
- package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +1076 -0
- package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +75 -0
- package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +409 -0
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +411 -0
- package/pipeline/skills/shared/external/app-store-review/references/code-signing.md +259 -0
- package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +90 -0
- package/pipeline/skills/shared/external/app-store-review/references/rejection-patterns.md +152 -0
- package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +118 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +500 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +425 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +344 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +508 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +285 -0
- package/pipeline/skills/shared/external/architecture/SKILL.md +60 -0
- package/pipeline/skills/shared/external/authentication/SKILL.md +496 -0
- package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +211 -0
- package/pipeline/skills/shared/external/background-processing/SKILL.md +499 -0
- package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +390 -0
- package/pipeline/skills/shared/external/callkit-voip/SKILL.md +461 -0
- package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +425 -0
- package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +462 -0
- package/pipeline/skills/shared/external/clean-code/SKILL.md +94 -0
- package/pipeline/skills/shared/external/closed-loop-delivery/SKILL.md +116 -0
- package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +492 -0
- package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +461 -0
- package/pipeline/skills/shared/external/compose-components/SKILL.md +441 -0
- package/pipeline/skills/shared/external/compose-navigation/SKILL.md +436 -0
- package/pipeline/skills/shared/external/compose-testing/SKILL.md +527 -0
- package/pipeline/skills/shared/external/contacts-framework/SKILL.md +425 -0
- package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +409 -0
- package/pipeline/skills/shared/external/context-compression/SKILL.md +266 -0
- package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +491 -0
- package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +435 -0
- package/pipeline/skills/shared/external/core-motion/SKILL.md +388 -0
- package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +405 -0
- package/pipeline/skills/shared/external/core-nfc/SKILL.md +495 -0
- package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +420 -0
- package/pipeline/skills/shared/external/coreml/SKILL.md +458 -0
- package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +765 -0
- package/pipeline/skills/shared/external/css-modern/SKILL.md +467 -0
- package/pipeline/skills/shared/external/database-patterns/SKILL.md +335 -0
- package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +422 -0
- package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +387 -0
- package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +298 -0
- package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +37 -0
- package/pipeline/skills/shared/external/device-integrity/SKILL.md +477 -0
- package/pipeline/skills/shared/external/docker-expert/SKILL.md +413 -0
- package/pipeline/skills/shared/external/energykit/SKILL.md +460 -0
- package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +541 -0
- package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +483 -0
- package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +326 -0
- package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +190 -0
- package/pipeline/skills/shared/external/firebase/SKILL.md +61 -0
- package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +348 -0
- package/pipeline/skills/shared/external/gradle-kotlin-dsl/SKILL.md +552 -0
- package/pipeline/skills/shared/external/healthkit/SKILL.md +498 -0
- package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +602 -0
- package/pipeline/skills/shared/external/help-skills/SKILL.md +166 -0
- package/pipeline/skills/shared/external/hig-components-content/SKILL.md +81 -0
- package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +95 -0
- package/pipeline/skills/shared/external/hig-components-status/SKILL.md +82 -0
- package/pipeline/skills/shared/external/hig-components-system/SKILL.md +101 -0
- package/pipeline/skills/shared/external/hig-foundations/SKILL.md +94 -0
- package/pipeline/skills/shared/external/hig-inputs/SKILL.md +110 -0
- package/pipeline/skills/shared/external/hig-patterns/SKILL.md +99 -0
- package/pipeline/skills/shared/external/hig-platforms/SKILL.md +81 -0
- package/pipeline/skills/shared/external/hig-technologies/SKILL.md +125 -0
- package/pipeline/skills/shared/external/homekit-matter/SKILL.md +496 -0
- package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +455 -0
- package/pipeline/skills/shared/external/html-semantic/SKILL.md +301 -0
- package/pipeline/skills/shared/external/humanizer/SKILL.md +118 -0
- package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +301 -0
- package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +140 -0
- package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +59 -0
- package/pipeline/skills/shared/external/ios-developer/SKILL.md +217 -0
- package/pipeline/skills/shared/external/ios-localization/SKILL.md +418 -0
- package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +627 -0
- package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +462 -0
- package/pipeline/skills/shared/external/ios-networking/SKILL.md +441 -0
- package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +862 -0
- package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -0
- package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +563 -0
- package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +1116 -0
- package/pipeline/skills/shared/external/ios-security/SKILL.md +496 -0
- package/pipeline/skills/shared/external/ios-security/references/app-review-guidelines.md +174 -0
- package/pipeline/skills/shared/external/ios-security/references/cryptokit-advanced.md +297 -0
- package/pipeline/skills/shared/external/ios-security/references/file-storage-patterns.md +354 -0
- package/pipeline/skills/shared/external/ios-security/references/privacy-manifest.md +117 -0
- package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +101 -0
- package/pipeline/skills/shared/external/live-activities/SKILL.md +500 -0
- package/pipeline/skills/shared/external/live-activities/references/live-activity-patterns.md +868 -0
- package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +109 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +110 -0
- package/pipeline/skills/shared/external/mapkit-location/SKILL.md +485 -0
- package/pipeline/skills/shared/external/mapkit-location/references/corelocation-patterns.md +730 -0
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +748 -0
- package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +479 -0
- package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +64 -0
- package/pipeline/skills/shared/external/musickit-audio/SKILL.md +395 -0
- package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +363 -0
- package/pipeline/skills/shared/external/natural-language/SKILL.md +412 -0
- package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +311 -0
- package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +418 -0
- package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +38 -0
- package/pipeline/skills/shared/external/observability-engineer/SKILL.md +235 -0
- package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +398 -0
- package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +254 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +387 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/references/paperkit-integration.md +376 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +302 -0
- package/pipeline/skills/shared/external/permissionkit/SKILL.md +446 -0
- package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +435 -0
- package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +501 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +701 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +774 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +869 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/photospicker-patterns.md +597 -0
- package/pipeline/skills/shared/external/play-store-review/SKILL.md +350 -0
- package/pipeline/skills/shared/external/push-notifications/SKILL.md +501 -0
- package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +677 -0
- package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +745 -0
- package/pipeline/skills/shared/external/python-patterns/SKILL.md +383 -0
- package/pipeline/skills/shared/external/react-best-practices/SKILL.md +290 -0
- package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +479 -0
- package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +480 -0
- package/pipeline/skills/shared/external/rest-api-design/SKILL.md +386 -0
- package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +506 -0
- package/pipeline/skills/shared/external/room-database/SKILL.md +564 -0
- package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +483 -0
- package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +544 -0
- package/pipeline/skills/shared/external/speech-recognition/SKILL.md +485 -0
- package/pipeline/skills/shared/external/storekit/SKILL.md +478 -0
- package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +58 -0
- package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +755 -0
- package/pipeline/skills/shared/external/swift-charts/SKILL.md +487 -0
- package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +895 -0
- package/pipeline/skills/shared/external/swift-codable/SKILL.md +467 -0
- package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +408 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +80 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/swift-6-2-concurrency.md +233 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +187 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +341 -0
- package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +113 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +124 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/actors.md +155 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/async-streams.md +67 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/bridging.md +52 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/bug-patterns.md +100 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/cancellation.md +107 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/diagnostics.md +70 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/hotspots.md +47 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/interop.md +129 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/new-features.md +224 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/structured.md +101 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/testing.md +218 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/unstructured.md +61 -0
- package/pipeline/skills/shared/external/swift-language/SKILL.md +498 -0
- package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +505 -0
- package/pipeline/skills/shared/external/swift-testing/SKILL.md +462 -0
- package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +504 -0
- package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +97 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/async-tests.md +252 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/core-rules.md +52 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/migrating-from-xctest.md +34 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +318 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/writing-better-tests.md +254 -0
- package/pipeline/skills/shared/external/swiftdata/SKILL.md +334 -0
- package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +504 -0
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +975 -0
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +675 -0
- package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +102 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/class-inheritance.md +104 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/cloudkit.md +10 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/core-rules.md +20 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/indexing.md +27 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/predicates.md +73 -0
- package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +503 -0
- package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +821 -0
- package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +553 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/SKILL.md +102 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/accessibility-patterns.md +215 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-advanced.md +403 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-basics.md +284 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-transitions.md +326 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts-accessibility.md +135 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts.md +602 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/image-optimization.md +203 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/latest-apis.md +464 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/layout-best-practices.md +266 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/liquid-glass.md +416 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/list-patterns.md +394 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-scenes.md +318 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-views.md +357 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-window-styling.md +303 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/performance-patterns.md +403 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/scroll-patterns.md +293 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/sheet-navigation-patterns.md +363 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/state-management.md +417 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/view-structure.md +389 -0
- package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +450 -0
- package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +425 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +336 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +97 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +69 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +99 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +147 -0
- package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +98 -0
- package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +262 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +207 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +177 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +169 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +178 -0
- package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +371 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +486 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +1097 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +780 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +696 -0
- package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +487 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +46 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +29 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +33 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +52 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +114 -0
- package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +108 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/accessibility.md +13 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/api.md +39 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/data.md +43 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/design.md +31 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/hygiene.md +9 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/navigation.md +14 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/performance.md +46 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/swift.md +56 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/views.md +35 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +103 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +428 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +534 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +948 -0
- package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +210 -0
- package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +273 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +151 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +95 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +51 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +111 -0
- package/pipeline/skills/shared/external/tailwind-css/SKILL.md +309 -0
- package/pipeline/skills/shared/external/testing-backend/SKILL.md +393 -0
- package/pipeline/skills/shared/external/tipkit/SKILL.md +494 -0
- package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +782 -0
- package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +336 -0
- package/pipeline/skills/shared/external/vision-framework/SKILL.md +475 -0
- package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +736 -0
- package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +738 -0
- package/pipeline/skills/shared/external/vue-composition/SKILL.md +371 -0
- package/pipeline/skills/shared/external/weatherkit/SKILL.md +410 -0
- package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +567 -0
- package/pipeline/skills/shared/external/web-accessibility/SKILL.md +373 -0
- package/pipeline/skills/shared/external/web-performance/SKILL.md +345 -0
- package/pipeline/skills/shared/external/web-testing/SKILL.md +385 -0
- package/pipeline/skills/shared/external/widgetkit/SKILL.md +497 -0
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +871 -0
- package/pipeline/skills/skills-index.md +205 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# 1. CLI-aware parallel review with Opus triage
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted · 2025 · Amended 2026-04 (CLI-aware reviewer set)
|
|
4
|
+
|
|
5
|
+
## Context
|
|
6
|
+
|
|
7
|
+
Code review is the phase where the pipeline most commonly ships wrong work. A
|
|
8
|
+
single reviewer model — whether Opus, Sonnet, or GPT — systematically misses
|
|
9
|
+
certain failure classes and hallucinates others. Worse, reviewer output tends
|
|
10
|
+
to be noisy: style nitpicks, out-of-scope findings, and repeated observations
|
|
11
|
+
across diffs.
|
|
12
|
+
|
|
13
|
+
We need a review stage that:
|
|
14
|
+
|
|
15
|
+
1. Catches real bugs and security issues reliably.
|
|
16
|
+
2. Doesn't block on false positives.
|
|
17
|
+
3. Doesn't inflate token cost to the point the pipeline becomes unaffordable.
|
|
18
|
+
|
|
19
|
+
## Decision
|
|
20
|
+
|
|
21
|
+
Phase 4 runs **reviewers in parallel** on the same diff. The reviewer set is
|
|
22
|
+
determined by the host CLI, because GPT-5.4 is only natively reachable from
|
|
23
|
+
Copilot CLI — Claude Code has no first-class GPT bridge, and round-tripping
|
|
24
|
+
would add latency without improving signal.
|
|
25
|
+
|
|
26
|
+
**Claude Code (2 parallel reviewers):**
|
|
27
|
+
|
|
28
|
+
- **Opus** — deep security and architecture focus
|
|
29
|
+
- **Sonnet** — quality, correctness, naming
|
|
30
|
+
|
|
31
|
+
**Copilot CLI (3 parallel reviewers):**
|
|
32
|
+
|
|
33
|
+
- **Opus** — deep security and architecture focus
|
|
34
|
+
- **GPT-5.4** — edge cases and cross-provider diversity
|
|
35
|
+
- **Sonnet** — quality, correctness, naming
|
|
36
|
+
|
|
37
|
+
Their raw findings are then passed to a **separate Opus triage agent** that
|
|
38
|
+
classifies each finding as `accepted`, `deferred`, or `rejected`. Only
|
|
39
|
+
`accepted` blocking items loop back to Phase 3 for rework.
|
|
40
|
+
|
|
41
|
+
Deterministic gates (build, lint, test, secret scan) run before any AI
|
|
42
|
+
reviewer is invoked — no point paying for review on code that doesn't build.
|
|
43
|
+
|
|
44
|
+
## Consequences
|
|
45
|
+
|
|
46
|
+
Positive:
|
|
47
|
+
|
|
48
|
+
- Three different model lineages each catch a different slice of issues.
|
|
49
|
+
- The triage pass filters the noise that individual reviewers can't filter
|
|
50
|
+
about themselves — it has scope context from Phase 1/2 that single reviewers
|
|
51
|
+
don't carry.
|
|
52
|
+
- Hallucinated findings get rejected instead of looping the pipeline forever.
|
|
53
|
+
- `validate-triage.mjs` enforces the triage output contract at runtime; a
|
|
54
|
+
malformed triage blocks progression with explicit error codes.
|
|
55
|
+
|
|
56
|
+
Negative / costs:
|
|
57
|
+
|
|
58
|
+
- On Copilot CLI, running three reviewers costs ~3× the review-phase tokens
|
|
59
|
+
vs. one reviewer. On Claude Code the 2-reviewer set costs ~2×. Offset: the
|
|
60
|
+
failure rate would otherwise force more Phase 3 re-runs, which are much
|
|
61
|
+
more expensive.
|
|
62
|
+
- Triage agent introduces a single point of failure; validator + fallback
|
|
63
|
+
(treat all findings as accepted after double-failure) bounds the damage.
|
|
64
|
+
- Cross-provider (GPT) dependency on Copilot CLI — if the provider is down,
|
|
65
|
+
the pipeline continues with 2 reviewers (Opus + Sonnet) and a warning.
|
|
66
|
+
- Cross-CLI asymmetry: Copilot CLI catches a slice of failures (edge cases
|
|
67
|
+
via GPT diversity) that Claude Code's 2-model set misses. Accepted as a
|
|
68
|
+
tradeoff against platform reachability.
|
|
69
|
+
|
|
70
|
+
## Alternatives Considered
|
|
71
|
+
|
|
72
|
+
**Single reviewer (Opus only):** simpler, cheaper, but misses edge cases
|
|
73
|
+
the other model lineages catch. Trialed in early v2 — noticeable false
|
|
74
|
+
negatives on concurrency bugs.
|
|
75
|
+
|
|
76
|
+
**Two reviewers + no triage:** cheaper still. Rejected because the raw
|
|
77
|
+
finding noise overwhelmed Phase 3 loops in early experiments.
|
|
78
|
+
|
|
79
|
+
**Tournament / voting:** all 3 reviewers, majority wins per finding. Too
|
|
80
|
+
many false positives still slipped through majority vote when the same
|
|
81
|
+
hallucination appeared in 2/3 reviewers (convergent failure mode).
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# 2. `instructionDriven` flag as explicit pipeline fork
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted · 2025
|
|
4
|
+
|
|
5
|
+
## Context
|
|
6
|
+
|
|
7
|
+
The main 9-phase pipeline is TDD-centric. The Figma-to-SwiftUI workflow is
|
|
8
|
+
config-driven (design tokens, Code Connect, Wiki generation) and does not
|
|
9
|
+
map onto the red-green-refactor cycle. Earlier versions handled this with
|
|
10
|
+
implicit branching in Phase 3 — "if the task has a Figma URL, fork here".
|
|
11
|
+
|
|
12
|
+
Implicit branches had three problems:
|
|
13
|
+
|
|
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
|
+
would fall through to standard commit flow, losing Figma-specific steps.
|
|
17
|
+
3. Phase 7 audit couldn't tell which branch was actually taken.
|
|
18
|
+
|
|
19
|
+
## Decision
|
|
20
|
+
|
|
21
|
+
Introduce an explicit boolean `instructionDriven` in `agent-state.json`
|
|
22
|
+
(`agent-state.schema.json:95`). Set at Phase 0 Step 9 after inspecting the
|
|
23
|
+
parsed task input (`figmaUrl` + detected instruction files). All downstream
|
|
24
|
+
phases that need to fork read this flag.
|
|
25
|
+
|
|
26
|
+
Phase 6 uses a **deterministic truth table** (documented at
|
|
27
|
+
`phase-6-commit.md:25`) to dispatch:
|
|
28
|
+
|
|
29
|
+
| `instructionDriven` | `instructionFiles.commit` exists | Action |
|
|
30
|
+
| ------------------- | -------------------------------- | ------ |
|
|
31
|
+
| true | yes | Instruction-driven path |
|
|
32
|
+
| true | no | Log error, set `instructionDrivenFallback=true`, use standard path |
|
|
33
|
+
| false | — | Standard path |
|
|
34
|
+
|
|
35
|
+
## Consequences
|
|
36
|
+
|
|
37
|
+
Positive:
|
|
38
|
+
|
|
39
|
+
- Fork decision is a single, auditable flag in state.
|
|
40
|
+
- Missing instruction files fail loud (`instructionDrivenFallback` surfaced in
|
|
41
|
+
Phase 7 report) instead of silent.
|
|
42
|
+
- The Figma pipeline could be extracted to its own package without changing
|
|
43
|
+
main pipeline code — it just writes the flag + files, and the main pipeline
|
|
44
|
+
reads them.
|
|
45
|
+
|
|
46
|
+
Negative:
|
|
47
|
+
|
|
48
|
+
- Adds a schema field that must be maintained forever once shipped.
|
|
49
|
+
- Introduces a coupling between the Figma pipeline's instruction file naming
|
|
50
|
+
and the main pipeline's expectations. Mitigated by documenting the contract
|
|
51
|
+
in `instructionFiles` schema sub-object.
|
|
52
|
+
|
|
53
|
+
## Alternatives Considered
|
|
54
|
+
|
|
55
|
+
**Implicit detection (current-task-has-Figma-URL):** previous approach.
|
|
56
|
+
Rejected because a task might have a Figma URL but not need instruction-driven
|
|
57
|
+
mode (e.g. `/multi-agent "Fix text spacing in FigmaDesign-X"`).
|
|
58
|
+
|
|
59
|
+
**Separate top-level command (`/figma-to-swiftui` bypasses `/multi-agent`):**
|
|
60
|
+
considered. Rejected because it duplicates the 9-phase scaffolding
|
|
61
|
+
(branch creation, state management, Phase 6 commit flow). The current design
|
|
62
|
+
lets Figma reuse Phases 0, 6, 7 wholesale.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# 3. Unified `skills/shared/` for Claude Code + Copilot CLI
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted · 2026-04 (v3.5.0) · Amended 2026-04 (v5.3.3 — internal `core/external/` split, install destination unchanged)
|
|
4
|
+
|
|
5
|
+
## Context
|
|
6
|
+
|
|
7
|
+
Up through v3.4, skills were split into `pipeline/skills/claude/` (84 iOS-only)
|
|
8
|
+
and `pipeline/skills/copilot/` (60 Android/web + pipeline). Zero overlap.
|
|
9
|
+
Consequences:
|
|
10
|
+
|
|
11
|
+
- Claude users could not invoke `multi-agent-*` pipeline skills (they were
|
|
12
|
+
Copilot-only).
|
|
13
|
+
- Copilot users couldn't access iOS/SwiftUI guidance.
|
|
14
|
+
- Two directories meant two places to add or update a skill — drift was
|
|
15
|
+
inevitable, and unnoticed.
|
|
16
|
+
- README claim "145 skills" was not accurate for either CLI.
|
|
17
|
+
|
|
18
|
+
## Decision
|
|
19
|
+
|
|
20
|
+
Collapse both directories into `pipeline/skills/shared/`. Installer copies
|
|
21
|
+
the same set to both `~/.claude/skills/` and `~/.copilot/skills/`. Both CLIs
|
|
22
|
+
now ship with identical skill coverage (145 skills as of 3.5.0).
|
|
23
|
+
|
|
24
|
+
Fifteen loose `*.md` files that were in the old copilot tree were normalized
|
|
25
|
+
to the canonical `folder/SKILL.md` shape.
|
|
26
|
+
|
|
27
|
+
## Consequences
|
|
28
|
+
|
|
29
|
+
Positive:
|
|
30
|
+
|
|
31
|
+
- Downloaders get the same capability regardless of which CLI flag they
|
|
32
|
+
installed with.
|
|
33
|
+
- Adding a skill is now a single write.
|
|
34
|
+
- Skill index (`pipeline/skills/shared/README.md`) auto-generates from a
|
|
35
|
+
single source.
|
|
36
|
+
- Unblocks the 4.0 single-source-for-commands-and-skills plan — same
|
|
37
|
+
directory structure, just needs content unification.
|
|
38
|
+
|
|
39
|
+
Negative:
|
|
40
|
+
|
|
41
|
+
- Disk footprint per install is ~1.5× larger than before for users who
|
|
42
|
+
only wanted iOS or only wanted web.
|
|
43
|
+
- Some iOS skills are noise for backend-only users and vice versa.
|
|
44
|
+
Mitigated by the categorized index — easy to browse and ignore.
|
|
45
|
+
|
|
46
|
+
## Alternatives Considered
|
|
47
|
+
|
|
48
|
+
**Keep two directories, add symlinks / install-time copy:** would have fixed
|
|
49
|
+
the drift-risk but not the "which CLI gets what" asymmetry in the source.
|
|
50
|
+
Hidden complexity.
|
|
51
|
+
|
|
52
|
+
**Per-stack skill packs (`skills/ios/`, `skills/android/`, …) with
|
|
53
|
+
install-time filter:** tempting. Rejected for 3.5.0 because the install-time
|
|
54
|
+
filter would need a stack detector exact enough to not exclude relevant
|
|
55
|
+
cross-cutting skills. Revisit for 4.0.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# 4. Zero runtime dependencies
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted · 2025
|
|
4
|
+
|
|
5
|
+
## Context
|
|
6
|
+
|
|
7
|
+
`package.json` dependencies are a long-term liability: each one is a
|
|
8
|
+
supply-chain attack surface, a breaking-change source, and a peer-dep
|
|
9
|
+
compatibility puzzle. For a CLI tool that installs itself into user shells
|
|
10
|
+
and runs with write access to `~/.claude/` and `~/.copilot/`, the blast
|
|
11
|
+
radius of a compromised dependency is large.
|
|
12
|
+
|
|
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
|
+
shorten a few scripts.
|
|
16
|
+
|
|
17
|
+
## Decision
|
|
18
|
+
|
|
19
|
+
`@mmerterden/multi-agent-pipeline` ships with **zero runtime dependencies**.
|
|
20
|
+
Devs can add dev dependencies freely (ESLint, Prettier, c8), but the
|
|
21
|
+
published package (the `pipeline/` tree, `install.js`, `index.js`) must
|
|
22
|
+
import only from Node.js core modules.
|
|
23
|
+
|
|
24
|
+
Consequences:
|
|
25
|
+
|
|
26
|
+
- `validate-triage.mjs`, `validate-{reviewer,analysis,planning}.mjs`,
|
|
27
|
+
`write-state.mjs`, `migrate-state.mjs` all hand-roll their JSON Schema
|
|
28
|
+
validation. Slower to write, but zero attack surface.
|
|
29
|
+
- `validate-schemas.mjs` is a shallow checker — catches "the schema file is
|
|
30
|
+
itself malformed", doesn't deep-validate every instance. That's what the
|
|
31
|
+
runtime validators are for.
|
|
32
|
+
- Install is fast: `npm install` against the published package is a single
|
|
33
|
+
tarball, no transitive resolution.
|
|
34
|
+
|
|
35
|
+
## Consequences
|
|
36
|
+
|
|
37
|
+
Positive:
|
|
38
|
+
|
|
39
|
+
- No supply-chain surface in the published package.
|
|
40
|
+
- No Node version interop headaches — Node 18+ core APIs are stable enough.
|
|
41
|
+
- `npx @mmerterden/multi-agent-pipeline install` runs instantly from cold.
|
|
42
|
+
|
|
43
|
+
Negative:
|
|
44
|
+
|
|
45
|
+
- Some scripts are longer than they'd be with a library.
|
|
46
|
+
- Hand-rolled validators can drift from the JSON Schema they claim to enforce.
|
|
47
|
+
Mitigated by smoke tests: each validator has a matching `smoke-*.sh` with
|
|
48
|
+
≥10 assertions covering the enum / edge paths.
|
|
49
|
+
- Adding a new validator requires writing the boilerplate by hand.
|
|
50
|
+
|
|
51
|
+
## Alternatives Considered
|
|
52
|
+
|
|
53
|
+
**Pull in `ajv` for real schema validation:** clean and standard. Rejected
|
|
54
|
+
because of supply-chain surface + bundle bloat (adds ~200 kB gzipped).
|
|
55
|
+
|
|
56
|
+
**Optional deps — use `ajv` if installed, fall back otherwise:** too clever.
|
|
57
|
+
"Sometimes validated, sometimes not" is worse than either extreme.
|
|
58
|
+
|
|
59
|
+
**Bundle dependencies into the published tarball:** would remove the install-
|
|
60
|
+
time resolution but keep the code surface. Defeats the point.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# 5. Lazy-loaded phase docs with per-phase token budget
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted · 2025
|
|
4
|
+
|
|
5
|
+
## Context
|
|
6
|
+
|
|
7
|
+
Phase specs are model-facing instructions. When the orchestrator (Claude Code
|
|
8
|
+
or Copilot CLI) enters a phase, it reads the phase doc and follows the steps.
|
|
9
|
+
If all phase docs were loaded up front, the context window would fill with
|
|
10
|
+
instructions for phases not yet relevant, leaving less room for the actual
|
|
11
|
+
code being worked on.
|
|
12
|
+
|
|
13
|
+
Additionally, phase docs are the easiest part of the pipeline to inflate
|
|
14
|
+
accidentally — examples, prose, caveats pile up. Without a budget, phase
|
|
15
|
+
docs silently grow until they push useful content out of context.
|
|
16
|
+
|
|
17
|
+
## Decision
|
|
18
|
+
|
|
19
|
+
Each phase doc is a separate file (`pipeline/commands/multi-agent/refs/phases/
|
|
20
|
+
phase-N-*.md`) that the orchestrator loads only when entering that phase.
|
|
21
|
+
|
|
22
|
+
`pipeline/schemas/token-budget.json` defines `warn` and `max` thresholds per
|
|
23
|
+
phase. The `smoke-token-budget.sh` check approximates token count for each
|
|
24
|
+
phase doc and fails the build if any phase exceeds its `max`.
|
|
25
|
+
|
|
26
|
+
Current budgets (v3.5.0):
|
|
27
|
+
|
|
28
|
+
- Phase 0: warn 3500 / max 4000 (INIT is interactive + token-heavy)
|
|
29
|
+
- Phase 1: warn 1200 / max 1500
|
|
30
|
+
- Phase 2: warn 800 / max 1000
|
|
31
|
+
- Phase 3: warn 1500 / max 1800
|
|
32
|
+
- Phase 4: warn 1800 / max 2200 (triage + 3-model review is verbose)
|
|
33
|
+
- Phase 5: warn 600 / max 800
|
|
34
|
+
- Phase 6: warn 2400 / max 2800 (commit + PR + issue body update)
|
|
35
|
+
- Phase 7: warn 1800 / max 2200
|
|
36
|
+
|
|
37
|
+
Total phase doc budget: 14,300 tokens across 8 phases, loaded incrementally.
|
|
38
|
+
|
|
39
|
+
## Consequences
|
|
40
|
+
|
|
41
|
+
Positive:
|
|
42
|
+
|
|
43
|
+
- Context window stays available for the code under review.
|
|
44
|
+
- Budgets surface "this phase is getting bloated" early (warn) before they
|
|
45
|
+
become blocking (max).
|
|
46
|
+
- A PR that inflates a phase doc past `max` fails CI — hard forcing function
|
|
47
|
+
against doc rot.
|
|
48
|
+
|
|
49
|
+
Negative:
|
|
50
|
+
|
|
51
|
+
- Cross-phase references require either duplication (bad) or jumping back to
|
|
52
|
+
a phase's doc (imperfect). Mitigated by keeping phase docs self-contained
|
|
53
|
+
and putting cross-cutting rules in `refs/rules.md`, loaded once at Phase 0.
|
|
54
|
+
- The token estimator is approximate (character-count based); true token
|
|
55
|
+
cost varies by model. Budgets err on the generous side to avoid false
|
|
56
|
+
failures.
|
|
57
|
+
|
|
58
|
+
## Alternatives Considered
|
|
59
|
+
|
|
60
|
+
**Single monolithic phase doc:** what the pipeline started with. Rejected
|
|
61
|
+
after `modes.md` + phase docs added up to >8K tokens just for instructions.
|
|
62
|
+
|
|
63
|
+
**Dynamic budget (load until context fills):** too lossy. Some phases
|
|
64
|
+
(Phase 4 triage) would silently lose content mid-instruction.
|
|
65
|
+
|
|
66
|
+
**Per-model budgets (Opus gets bigger, Sonnet gets smaller):** over-engineered
|
|
67
|
+
for current needs. Same budgets work across the models the pipeline uses
|
|
68
|
+
today. Reconsider if per-model skew becomes measurable.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# 6. `shared/core/` vs `shared/external/` source organization
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted · 2026-04 (v5.3.3)
|
|
4
|
+
|
|
5
|
+
## Context
|
|
6
|
+
|
|
7
|
+
ADR-0003 (v3.5.0) collapsed the split `skills/claude/` + `skills/copilot/` into a single `skills/shared/` tree. That resolved drift between CLIs and made skill authoring a single-write operation. Two years later the flat tree carries 148 directories.
|
|
8
|
+
|
|
9
|
+
By v5.3.x the maintenance burden of the flat tree became visible in everyday work:
|
|
10
|
+
|
|
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 — any drift breaks cross-CLI parity. `ios-developer/SKILL.md` is a reference guide imported from upstream — edits almost never affect pipeline behavior.
|
|
13
|
+
- **Grep noise.** `grep -r skills/shared/` produces 148× the noise it should when searching for pipeline code.
|
|
14
|
+
- **Audit findings.** The v5.3.0 audit flagged this as technical debt worth addressing once the pipeline stabilized.
|
|
15
|
+
|
|
16
|
+
## Decision
|
|
17
|
+
|
|
18
|
+
Keep the single-write benefit of ADR-0003. Split the source layout into two subdirectories by origin / blast radius:
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
pipeline/skills/shared/
|
|
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
|
+
```
|
|
26
|
+
|
|
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
|
+
|
|
29
|
+
`install.js` was updated to `copyDir(sharedCoreSrc, CLAUDE_SKILLS)` + `copyDir(sharedExternalSrc, CLAUDE_SKILLS)` — two reads, same flat write.
|
|
30
|
+
|
|
31
|
+
## Consequences
|
|
32
|
+
|
|
33
|
+
Positive:
|
|
34
|
+
|
|
35
|
+
- Source browsing separates the 21 files that get changed by pipeline work from the 127 that get refreshed on upstream sync.
|
|
36
|
+
- Code review can apply different scrutiny by subdirectory. A PR touching `external/*` is almost always a mechanical refresh; a PR touching `core/*` is pipeline logic.
|
|
37
|
+
- Grep / Glob queries can scope to `core/` or `external/` cheaply (`rg --glob 'shared/core/**'`).
|
|
38
|
+
- Prepares for a future per-stack install filter (ADR-0003's deferred "skills/ios/" idea) by making "external" a single unit.
|
|
39
|
+
|
|
40
|
+
Negative:
|
|
41
|
+
|
|
42
|
+
- `install.js` walks two source trees instead of one. Implementation cost: 6 lines.
|
|
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" — slightly more nuance to explain.
|
|
45
|
+
|
|
46
|
+
## Alternatives Considered
|
|
47
|
+
|
|
48
|
+
**Per-stack tree (`skills/ios/`, `skills/android/`, ...):** the original idea ADR-0003 deferred. Rejected for v5.3.x because install-time stack filtering still needs a stack detector accurate enough not to exclude relevant cross-cutting skills (e.g. `api-security-best-practices` applies to both backend and mobile). Revisit when the stack-detection story is solid.
|
|
49
|
+
|
|
50
|
+
**Leave the flat tree alone:** the 148-dir tree is cosmetically ugly but functionally correct. Rejected because the blast-radius distinction between `multi-agent*` skills and upstream mirrors is real and recurring; naming it in the source layout documents it.
|
|
51
|
+
|
|
52
|
+
**Soft categorization via `SKILL.md` frontmatter (`category: core`):** would support tooling but wouldn't help the primary use case (source browsing on GitHub). Rejected as insufficient on its own.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# 7. Multi-tool adapter framework + token-preserving uninstall
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted · 2026-04-27 (v7.7.0 / v7.9.0)
|
|
4
|
+
|
|
5
|
+
## Context
|
|
6
|
+
|
|
7
|
+
Through v7.6, the pipeline shipped to two CLIs only: Claude Code and Copilot CLI. Both expose **subagent dispatch** — the ability for the orchestrator to fan out work to parallel sub-agents with their own model, prompt, and context. This is a hard prerequisite for the 8-phase pipeline (Phase 1 parallel exploration, Phase 4 multi-reviewer review, Phase 7 multi-channel reporting).
|
|
8
|
+
|
|
9
|
+
Users started asking: "can it work with Cursor / Windsurf / Cline / Copilot Chat / Continue / Zed?" The honest answer is mixed:
|
|
10
|
+
|
|
11
|
+
- **Subagent dispatch:** none of those tools expose it. So the orchestration layer cannot run there; only single-shot rules / instructions are loaded into a chat context.
|
|
12
|
+
- **Knowledge layer:** the pipeline's value is split roughly 30/70 between orchestration and content. The 193 SKILL.md catalog + 12 rules describe how to write good Swift / Compose / TypeScript / etc. — that part is genuinely portable and would benefit users on tools where the orchestration can't run.
|
|
13
|
+
|
|
14
|
+
Three forces shaped this decision:
|
|
15
|
+
|
|
16
|
+
1. We didn't want to fork the project per tool.
|
|
17
|
+
2. We didn't want to silently drop support claims (e.g. saying "works with Cursor" when only the rules were loaded but the user expected `:dev` and `:review` to run).
|
|
18
|
+
3. We needed a clean opposite for every install path. Once `npx ... install --cursor` writes 174 files into a user's repo, there must be a documented, **token-preserving** way to remove them all in one step.
|
|
19
|
+
|
|
20
|
+
## Decision
|
|
21
|
+
|
|
22
|
+
We introduce a tiered support model and a uninstaller that's contractually forbidden from touching credential storage.
|
|
23
|
+
|
|
24
|
+
### Tier 1 — Full pipeline (orchestration + knowledge)
|
|
25
|
+
|
|
26
|
+
Tools with subagent dispatch get the full 8-phase pipeline.
|
|
27
|
+
|
|
28
|
+
- **Claude Code** (default, `--claude`)
|
|
29
|
+
- **Copilot CLI** (`--copilot`)
|
|
30
|
+
|
|
31
|
+
Both install slash commands / skills, agent personas, scripts, rules, and the full skills tree to `$HOME/.claude/` or `$HOME/.copilot/`.
|
|
32
|
+
|
|
33
|
+
### Tier 2 — Knowledge layer only (v7.7.0)
|
|
34
|
+
|
|
35
|
+
Tools without subagent dispatch but with a documented rules / instructions format. Pipeline orchestration commands are filtered out (they have no callable surface here); rules + skills catalog port natively to each tool's format.
|
|
36
|
+
|
|
37
|
+
- **Cursor** (`--cursor`) — `.cursor/rules/multi-agent-*.mdc` + `.cursorrules` legacy fallback
|
|
38
|
+
- **Windsurf** (`--windsurf`) — `.windsurfrules` (single file, marker-wrapped)
|
|
39
|
+
- **Cline** (`--cline`) — `.clinerules/multi-agent-*.md` per-skill files
|
|
40
|
+
|
|
41
|
+
### Tier 3 — Knowledge layer (v7.9.0)
|
|
42
|
+
|
|
43
|
+
Three more tools with the same contract.
|
|
44
|
+
|
|
45
|
+
- **GitHub Copilot Chat** (`--copilot-chat`) — `.github/copilot-instructions.md` marker-wrapped + `.github/instructions/multi-agent-*.instructions.md` per-skill
|
|
46
|
+
- **Continue.dev** (`--continue`) — `.continue/rules/multi-agent-*.md` per-skill
|
|
47
|
+
- **Zed AI** (`--zed`) — `.rules` single file, marker-wrapped
|
|
48
|
+
|
|
49
|
+
### Tier 4 — Manual port
|
|
50
|
+
|
|
51
|
+
Closed/proprietary tools (JetBrains AI, Codeium, Tabnine, Amazon Q Developer) get no automated installer. Skill content can be copy-pasted; PRs welcome.
|
|
52
|
+
|
|
53
|
+
### Adapter framework
|
|
54
|
+
|
|
55
|
+
All non-Tier-1 adapters share `pipeline/adapters/_base.mjs`:
|
|
56
|
+
|
|
57
|
+
- **`parseFrontmatter`** / **`walkSkills`** — read SKILL.md, return name + frontmatter + body
|
|
58
|
+
- **`inferGlobs`** — map skill name → glob pattern (`**/*.swift`, `**/*.{kt,kts}`, etc.) for tools that scope rules by file pattern
|
|
59
|
+
- **`replaceManagedBlock`** / **`removeManagedBlock`** — read/write/strip the `<!-- multi-agent-pipeline:begin / end -->` marker pair inside a user-owned file. Lets us share rules files (`.windsurfrules`, `.rules`, `copilot-instructions.md`) with content the user already authored.
|
|
60
|
+
- **`withoutOrchestrationSkills`** — filter `multi-agent-*` core skills (the orchestration namespace) from the export. They have no callable surface in Tier 2 / Tier 3 tools.
|
|
61
|
+
- **`concatSkills`** — single-document concatenation for adapters that emit one rules file (Windsurf, Zed) instead of per-skill files.
|
|
62
|
+
|
|
63
|
+
Each adapter exports a `{ name, install, uninstall }` contract. New adapters are mostly format-mapping over this base; adding a fourth would be ~150 LOC.
|
|
64
|
+
|
|
65
|
+
### Token-preserving uninstall
|
|
66
|
+
|
|
67
|
+
Every install path has a documented opposite via `npx @mmerterden/multi-agent-pipeline uninstall` (or `delete` alias). Slash command: `/multi-agent:delete` with a Copilot CLI peer `multi-agent-delete`.
|
|
68
|
+
|
|
69
|
+
The uninstaller is **contractually forbidden** from touching:
|
|
70
|
+
|
|
71
|
+
1. Personal access tokens stored in macOS Keychain / Windows Credential Manager / Linux libsecret.
|
|
72
|
+
2. `~/.claude/CLAUDE.md` and `~/.claude/multi-agent-preferences.json` (user customizations).
|
|
73
|
+
3. User content outside the `<!-- multi-agent-pipeline:begin / end -->` markers in any shared rules file.
|
|
74
|
+
|
|
75
|
+
The contract is enforced statically by `smoke-delete-flow.sh` step 7:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
grep -qE "credential-store|delete-generic-password|cmdkey /delete|secret-tool clear" uninstall.mjs
|
|
79
|
+
# fail varsa exit 1 — pattern eklenirse build kırılır
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
A future refactor that adds any credential-store deletion API to the uninstaller fails the build before it ships. Same posture for adapter modules: `smoke-adapters-tier3.sh` step 6 scans every Tier 3 adapter file.
|
|
83
|
+
|
|
84
|
+
## Consequences
|
|
85
|
+
|
|
86
|
+
Positive:
|
|
87
|
+
|
|
88
|
+
- One framework, six adapter targets. Tier 4 tools could be added incrementally without touching the orchestrator.
|
|
89
|
+
- Clear contract about what works where: Tier 1 = full pipeline, Tier 2/3 = knowledge layer only, Tier 4 = manual. No overpromising.
|
|
90
|
+
- Marker-wrapped blocks let us cohabit user-authored content cleanly. Users who ran `--zed` then later edited their `.rules` get their content back after `uninstall --zed`.
|
|
91
|
+
- Token-preserving uninstall is a reversible commitment. Removing the pipeline can never accidentally cost the user a re-auth round across Jira / GitHub / Bitbucket / Confluence / Vercel / Firebase / Telegram.
|
|
92
|
+
- Installer flag set is backward-compatible: zero-flag default still installs Claude Code exactly as v7.6 did.
|
|
93
|
+
|
|
94
|
+
Negative / costs:
|
|
95
|
+
|
|
96
|
+
- 6 adapters means 6 places where the format mapping can drift from upstream tool changes. Mitigation: round-trip smoke tests for each adapter exercise install + uninstall on every PR.
|
|
97
|
+
- `--all-tools` writes ~900 files (174 cursor + ~50 windsurf concat + 173 cline + 161 copilot-chat + 161 continue + 1 zed) into the user's repo. Acceptable — `.gitignore` patterns already cover most of these (`.cursor/`, `.continue/`, `.clinerules/`), and `:delete` cleans them all in one step.
|
|
98
|
+
- Per-tool format drift across tool versions (e.g. Cursor's `.mdc` format changes in 2027) requires per-adapter maintenance. Insulated from the orchestrator: bumping a Tier 2/3 tool format never touches Phase 1-7 logic.
|
|
99
|
+
|
|
100
|
+
## Alternatives Considered
|
|
101
|
+
|
|
102
|
+
**Refuse non-orchestration tools entirely:** simplest. Rejected because users on Cursor / Copilot Chat are a large slice of the pipeline's potential audience, and they get real value from the rules + skills catalog even without orchestration.
|
|
103
|
+
|
|
104
|
+
**Single "universal rules format" exported once, users hand-port:** simpler ship, but every user repeats the porting work, and no idempotent uninstall is possible without per-tool knowledge of where the rules ended up.
|
|
105
|
+
|
|
106
|
+
**Symlink mode (one rules dir, every tool reads from it):** elegant but no Tier 2/3 tool actually supports a single canonical location. Each tool insists on its own path (`.cursor/rules/`, `.windsurfrules`, `.clinerules/`, etc.).
|
|
107
|
+
|
|
108
|
+
**Generate adapters from a manifest at install time** instead of shipping per-adapter `.mjs` files: less code in the repo, but worse DX (debugging a generated adapter is painful) and harder to test per-tool round-trips. Per-adapter modules with shared `_base.mjs` won the readability tradeoff.
|
|
109
|
+
|
|
110
|
+
**Allow uninstall to clean credential entries:** rejected outright. Removing the tool should be a reversible decision; re-auth across Jira / GitHub / Bitbucket / Confluence / Vercel / Firebase / Telegram on every install + uninstall cycle is a poor user experience. The static check makes this guarantee permanent.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# 8. Installer modularization + secret-leak defense
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted · 2026-04-27 (v8.0.0)
|
|
4
|
+
|
|
5
|
+
## Context
|
|
6
|
+
|
|
7
|
+
Two pressures collided during the v7.x line:
|
|
8
|
+
|
|
9
|
+
1. **Installer monolith.** `install.js` reached 1246 LOC by v7.9.1. It mixed flag parsing, three platform installers (Claude / Copilot / six third-party adapters), telemetry, a dev-only file exclusion list, and a 200-line static generator for `copilot-instructions.md`. Reasoning about install behaviour required holding the whole file in your head; reviewers asked for documentation we could not produce because every change touched untyped, intertwined sections.
|
|
10
|
+
|
|
11
|
+
2. **Secret leaks at deploy time.** During the v7.9.1 production deploy of `mmerterden.dev`, a `vercel deploy --token=vcp_…` invocation failed. The Vercel CLI printed the failed argv verbatim in its retry hint. That leaked the deploy token into the conversation transcript and forced a token rotation. A second incident in the same release window — `git -c user.email=…` overriding the repo-local config — pushed seven commits with the wrong author identity, which Vercel's contributor gate then blocked. Both classes of failure share a root cause: privileged values flowed through argv when the codebase had no audited boundary between provider tools and the orchestration layer.
|
|
12
|
+
|
|
13
|
+
We needed an architectural answer that prevented both classes of failure from recurring without expanding scope into "rewrite everything as TypeScript" — the project's zero-dependency philosophy (ADR-4) is a hard constraint.
|
|
14
|
+
|
|
15
|
+
## Decision
|
|
16
|
+
|
|
17
|
+
### 1. `install.js` becomes a 24-line shim; logic moves under `install/`
|
|
18
|
+
|
|
19
|
+
The monolith splits into focused modules under `install/`:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
install/
|
|
23
|
+
index.mjs — entry point, flag parsing, dispatcher
|
|
24
|
+
claude.mjs — Claude Code installer
|
|
25
|
+
copilot.mjs — Copilot CLI installer
|
|
26
|
+
_adapters.mjs — third-party adapter dispatch
|
|
27
|
+
_common.mjs — shared FS helpers (copyDir, ensureDir, …)
|
|
28
|
+
_platform-filter.mjs — --platform=ios|android filter
|
|
29
|
+
_telemetry.mjs — opt-in install telemetry
|
|
30
|
+
_copilot-instructions.mjs — generator for ~/.copilot/copilot-instructions.md
|
|
31
|
+
_dev-only-files.mjs — single source of truth for excluded files
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
`install.js` keeps its bin entry contract (24 lines, just `import { runInstall } from './install/index.mjs'; await runInstall(process.argv)`). Existing invocations — `npx … install --all`, the `package.json` `./install` export, every smoke test that runs `node install.js` — continue working without API changes. The package.json `files` array adds `install/**/*` so npm publish ships the new modules.
|
|
35
|
+
|
|
36
|
+
### 2. Install layout is now a regression gate
|
|
37
|
+
|
|
38
|
+
`pipeline/scripts/smoke-install-layout.sh` (35 assertions) runs the live installer into a temp HOME and proves:
|
|
39
|
+
|
|
40
|
+
- All 9 expected modules exist under `install/`.
|
|
41
|
+
- `install.js` is under 50 lines and imports `install/index.mjs`.
|
|
42
|
+
- `--claude`, `--copilot`, `--all` produce the same on-disk tree the v7.x monolith produced (file counts, hook registration, multi-agent skill pruning).
|
|
43
|
+
- Cross-target file count parity for shared scripts and agents.
|
|
44
|
+
|
|
45
|
+
Future refactors must keep this smoke green. Drift is detected before it ships, not after.
|
|
46
|
+
|
|
47
|
+
### 3. Provider tools wrap CLIs that leak credentials
|
|
48
|
+
|
|
49
|
+
`pipeline/lib/vercel-deploy.sh` is the safe wrapper around the Vercel CLI. Three properties hold for every invocation:
|
|
50
|
+
|
|
51
|
+
1. Tokens flow through `VERCEL_TOKEN` env var. The wrapper refuses to deploy if `--token=` appears anywhere in argv — that pattern was the v7.9.1 leak.
|
|
52
|
+
2. Every stdout/stderr line is piped through a `redact_filter` sed pass that scrubs `--token=…`, `vcp_…`, `Bearer …`, `"token":"…"`, and `"VERCEL_TOKEN":"…"` shapes.
|
|
53
|
+
3. Failed deploys exit with a clear marker line; the wrapper does not echo the original argv that the CLI printed in its retry hint.
|
|
54
|
+
|
|
55
|
+
`pipeline/scripts/smoke-vercel-deploy-redact.sh` (12 assertions) is the regression gate for the redact filter. Each known leak shape has a fixture that must NOT survive redaction.
|
|
56
|
+
|
|
57
|
+
### 4. Mode dispatch generator + drift smoke
|
|
58
|
+
|
|
59
|
+
`pipeline/scripts/gen-mode-dispatch.mjs` is the canonical source for the "Required: Phase Tracker Contract" section embedded in every mode dispatch file. `pipeline/scripts/smoke-mode-dispatch-drift.sh` (61 assertions) verifies each mode file declares the right phase list (4-phase for `dev*`, 8-phase for `local`/`autopilot`) and links `refs/tracker-contract.md`.
|
|
60
|
+
|
|
61
|
+
### 5. Cross-phase cohesion smoke
|
|
62
|
+
|
|
63
|
+
Schema validation proves each schema is well-formed. It does not prove that producer / consumer phase docs both reference the schema they hand off. `pipeline/scripts/smoke-cross-phase-cohesion.sh` (17 assertions) adds the cohesion gate: Phase 1 → Phase 2 (`analysis-output`), Phase 2 → Phase 3 (`planning-output`), Phase 4 → Phase 4 triage (`reviewer-output`), Phase 4 triage → Phase 6 (`triage-output`), and Phase 6 → Phase 7 (`agent-state`) hand-offs are documented on both sides.
|
|
64
|
+
|
|
65
|
+
### 6. CI matrix splits into full + lite workflows
|
|
66
|
+
|
|
67
|
+
`.github/workflows/test.yml` keeps the full matrix (Ubuntu/macOS/Windows × Node 20/22 + credential-store round-trips). `.github/workflows/ci-lite.yml` is the workflow_dispatch-only fast lane (Ubuntu + Node 22, no credential round-trips, ~3 minutes). The lite workflow is the one contributors run via `act` while billing is paused; the full matrix runs on demand for releases.
|
|
68
|
+
|
|
69
|
+
### 7. Recovery guide gains four new playbooks
|
|
70
|
+
|
|
71
|
+
`docs/recovery-guide.md` adds: worktree corruption, tracker state corruption, token rotation mid-pipeline, and failed-push force-with-lease decision tree. All four were learned from the v7.9.1 release window.
|
|
72
|
+
|
|
73
|
+
## Consequences
|
|
74
|
+
|
|
75
|
+
**What gets easier:**
|
|
76
|
+
|
|
77
|
+
- Reading the installer. Each module is < 300 LOC and has a single responsibility.
|
|
78
|
+
- Reviewing installer changes. A diff that touches `install/copilot.mjs` is bounded; reviewers do not need to skim 1246 lines of context.
|
|
79
|
+
- Auditing for credential exposure. Every Vercel call goes through one wrapper; future provider integrations follow the same pattern (next: deploy-to-Cloudflare wrapper, npm publish wrapper).
|
|
80
|
+
- Detecting doc drift. Smokes catch missing schema references before docs ship to users.
|
|
81
|
+
|
|
82
|
+
**What gets harder:**
|
|
83
|
+
|
|
84
|
+
- Adding a brand-new install target. The contributor must touch `install/index.mjs` (flag wiring), create `install/<target>.mjs` (installer), update `smoke-install-layout.sh` (assertion). That's three files instead of one — but the boundaries are sharp and a smoke fails loudly if anything is missed.
|
|
85
|
+
- Maintaining the static `_copilot-instructions.mjs` generator. The body still has to match the source-of-truth content in `pipeline/commands/multi-agent/`. Plan: in v9 we replace the static template with a generator that reads the actual phase files. For v8 the smoke `smoke-multi-repo-integration.sh` already greps the generator output for canonical strings, so drift is detected.
|
|
86
|
+
|
|
87
|
+
**What we explicitly chose not to do:**
|
|
88
|
+
|
|
89
|
+
- Migrate to TypeScript. The zero-dependency rule (ADR-4) still holds; TS would force a build step.
|
|
90
|
+
- Move the install layout assertions into a unit test. Bash + `find` is the right tool — the assertions check a real filesystem tree, not pure logic.
|
|
91
|
+
- Auto-rotate Vercel tokens on detected leak. Rotation is a user decision; the wrapper just makes leaks harder, never silently mints replacements.
|
|
92
|
+
|
|
93
|
+
## References
|
|
94
|
+
|
|
95
|
+
- `install/` directory split (this ADR)
|
|
96
|
+
- `pipeline/lib/vercel-deploy.sh` — secret-leak defense wrapper
|
|
97
|
+
- `pipeline/scripts/smoke-install-layout.sh`, `smoke-vercel-deploy-redact.sh`, `smoke-mode-dispatch-drift.sh`, `smoke-cross-phase-cohesion.sh` — regression gates
|
|
98
|
+
- `feedback_vercel_cli_token_leak.md`, `feedback_git_author_repo_local.md`, `feedback_explicit_consent_for_push.md` — incident retrospectives that drove this work
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Architecture Decision Records
|
|
2
|
+
|
|
3
|
+
ADRs capture the reasoning behind architectural choices so future changes
|
|
4
|
+
don't re-litigate the same debates or accidentally reverse a load-bearing
|
|
5
|
+
decision.
|
|
6
|
+
|
|
7
|
+
Format: lightly adapted from [Michael Nygard's ADR template](https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions).
|
|
8
|
+
|
|
9
|
+
## Index
|
|
10
|
+
|
|
11
|
+
| # | Title | Status |
|
|
12
|
+
|---|-------|--------|
|
|
13
|
+
| [0001](./0001-three-model-triage.md) | CLI-aware parallel review with Opus triage | Accepted (amended v5.2.2) |
|
|
14
|
+
| [0002](./0002-instruction-driven-flag.md) | instructionDriven flag as explicit pipeline fork | Accepted |
|
|
15
|
+
| [0003](./0003-unified-shared-skills.md) | Unified `skills/shared/` for Claude Code + Copilot | Accepted (amended v5.3.3) |
|
|
16
|
+
| [0004](./0004-zero-dependency-philosophy.md) | Keep the package zero-runtime-deps | Accepted |
|
|
17
|
+
| [0005](./0005-lazy-phase-docs.md) | Lazy-loaded phase docs with per-phase token budget | Accepted |
|
|
18
|
+
| [0006](./0006-skills-core-external-split.md) | `shared/core/` vs `shared/external/` source org | Accepted |
|
|
19
|
+
| [0007](./0007-multi-tool-adapter-framework.md) | Multi-tool adapter framework + token-preserving uninstall | Accepted (v7.7.0 / v7.9.0) |
|
|
20
|
+
|
|
21
|
+
## Writing a New ADR
|
|
22
|
+
|
|
23
|
+
1. Copy `0001-three-model-triage.md` as the template shape.
|
|
24
|
+
2. Increment the number.
|
|
25
|
+
3. Fill in: Context, Decision, Consequences, Alternatives.
|
|
26
|
+
4. Set status to `Proposed` in a PR; the merging reviewer flips it to
|
|
27
|
+
`Accepted` once discussion closes.
|
|
28
|
+
5. Add the row to the index table above.
|
|
29
|
+
|
|
30
|
+
## Changing a Past Decision
|
|
31
|
+
|
|
32
|
+
Don't rewrite ADRs — write a new one that supersedes the old. Set the old
|
|
33
|
+
ADR's status to `Superseded by 00NN` and link both ways.
|