@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,136 @@
|
|
|
1
|
+
## Frontend Development Guide
|
|
2
|
+
|
|
3
|
+
When the task involves frontend development (React, Next.js, Vue), follow these patterns.
|
|
4
|
+
|
|
5
|
+
### Component Architecture
|
|
6
|
+
|
|
7
|
+
| File | When | Content |
|
|
8
|
+
| ----------------------------------------- | ------------- | ---------------------------------- |
|
|
9
|
+
| `{Name}.tsx` | Always | Component with props interface |
|
|
10
|
+
| `{Name}.module.css` or `{Name}.styles.ts` | Styled | CSS modules or styled-components |
|
|
11
|
+
| `{Name}.test.tsx` | Always | Unit + integration tests |
|
|
12
|
+
| `{Name}.stories.tsx` | Reusable | Storybook stories for all variants |
|
|
13
|
+
| `use{Name}.ts` | Complex state | Custom hook for state/logic |
|
|
14
|
+
|
|
15
|
+
### React Component Pattern
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
// Props interface — explicit, documented
|
|
19
|
+
interface ButtonProps {
|
|
20
|
+
label: string;
|
|
21
|
+
variant?: "primary" | "secondary" | "ghost";
|
|
22
|
+
size?: "sm" | "md" | "lg";
|
|
23
|
+
disabled?: boolean;
|
|
24
|
+
loading?: boolean;
|
|
25
|
+
onClick: () => void;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Component — single responsibility
|
|
29
|
+
export function Button({
|
|
30
|
+
label,
|
|
31
|
+
variant = "primary",
|
|
32
|
+
size = "md",
|
|
33
|
+
disabled = false,
|
|
34
|
+
loading = false,
|
|
35
|
+
onClick,
|
|
36
|
+
}: ButtonProps) {
|
|
37
|
+
return (
|
|
38
|
+
<button
|
|
39
|
+
className={cn(styles.button, styles[variant], styles[size])}
|
|
40
|
+
disabled={disabled || loading}
|
|
41
|
+
onClick={onClick}
|
|
42
|
+
aria-busy={loading}
|
|
43
|
+
>
|
|
44
|
+
{loading ? <Spinner size={size} /> : label}
|
|
45
|
+
</button>
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### State Management
|
|
51
|
+
|
|
52
|
+
```tsx
|
|
53
|
+
// Simple state — useState/useReducer
|
|
54
|
+
const [count, setCount] = useState(0);
|
|
55
|
+
|
|
56
|
+
// Complex state — custom hook
|
|
57
|
+
function useAuth() {
|
|
58
|
+
const [user, setUser] = useState<User | null>(null);
|
|
59
|
+
const [loading, setLoading] = useState(true);
|
|
60
|
+
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
authService
|
|
63
|
+
.getCurrentUser()
|
|
64
|
+
.then(setUser)
|
|
65
|
+
.finally(() => setLoading(false));
|
|
66
|
+
}, []);
|
|
67
|
+
|
|
68
|
+
return { user, loading, isAuthenticated: !!user };
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Server state — React Query / SWR
|
|
72
|
+
const { data, isLoading, error } = useQuery({
|
|
73
|
+
queryKey: ["users", userId],
|
|
74
|
+
queryFn: () => fetchUser(userId),
|
|
75
|
+
});
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Token Discipline
|
|
79
|
+
|
|
80
|
+
| Bad | Good |
|
|
81
|
+
| ------------------ | -------------------------------------------- |
|
|
82
|
+
| `padding: '16px'` | `padding: tokens.spacing.md` or CSS variable |
|
|
83
|
+
| `color: '#E31837'` | `color: var(--color-primary)` |
|
|
84
|
+
| `fontSize: '14px'` | `fontSize: tokens.typography.body.size` |
|
|
85
|
+
| `"Submit"` inline | `t('form.submit')` (i18n) |
|
|
86
|
+
|
|
87
|
+
### Accessibility
|
|
88
|
+
|
|
89
|
+
Every interactive element MUST have:
|
|
90
|
+
|
|
91
|
+
- Semantic HTML (`<button>`, `<nav>`, `<main>`, not `<div onClick>`)
|
|
92
|
+
- `aria-label` when visual label is absent
|
|
93
|
+
- `aria-describedby` for supplementary info
|
|
94
|
+
- Keyboard navigation support (focus management)
|
|
95
|
+
- Color contrast ratio >= 4.5:1
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
<button aria-label="Close dialog" aria-describedby="dialog-description" onClick={onClose}>
|
|
99
|
+
<CloseIcon aria-hidden="true" />
|
|
100
|
+
</button>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Testing
|
|
104
|
+
|
|
105
|
+
```tsx
|
|
106
|
+
// Component test — React Testing Library
|
|
107
|
+
test("renders button with label", () => {
|
|
108
|
+
render(<Button label="Submit" onClick={vi.fn()} />);
|
|
109
|
+
expect(screen.getByRole("button", { name: "Submit" })).toBeInTheDocument();
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
test("calls onClick when clicked", async () => {
|
|
113
|
+
const onClick = vi.fn();
|
|
114
|
+
render(<Button label="Submit" onClick={onClick} />);
|
|
115
|
+
await userEvent.click(screen.getByRole("button"));
|
|
116
|
+
expect(onClick).toHaveBeenCalledOnce();
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
test("shows loading state", () => {
|
|
120
|
+
render(<Button label="Submit" loading onClick={vi.fn()} />);
|
|
121
|
+
expect(screen.getByRole("button")).toHaveAttribute("aria-busy", "true");
|
|
122
|
+
});
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Quality Checklist
|
|
126
|
+
|
|
127
|
+
1. No magic numbers — design tokens or CSS variables
|
|
128
|
+
2. Semantic HTML — correct elements, not div-soup
|
|
129
|
+
3. Accessibility — ARIA labels, keyboard nav, contrast
|
|
130
|
+
4. Responsive — works on mobile, tablet, desktop
|
|
131
|
+
5. i18n — all strings via translation keys
|
|
132
|
+
6. Error boundaries — graceful error handling
|
|
133
|
+
7. Loading states — skeleton/spinner for async operations
|
|
134
|
+
8. Tests — component + hook tests, no implementation details
|
|
135
|
+
9. Performance — memoization where needed (React.memo, useMemo, useCallback)
|
|
136
|
+
10. Build passes — zero warnings, TypeScript strict mode
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Issue → Jira → Wiki Triad
|
|
2
|
+
|
|
3
|
+
> **TLDR** — When a GitHub issue triggers the pipeline and has no Jira ID, the `autoJiraFromGithubIssue` policy decides whether to auto-create a Jira task (and patch the GitHub issue body with the new Jira link). Phase 7 then posts a humanizer'd wiki-content summary back as a Jira comment, closing the loop. Autopilot treats `ask` as `always`.
|
|
4
|
+
|
|
5
|
+
This doc is referenced from `refs/phases/phase-0-init.md` Step 1 (GitHub issue input) and `refs/phases/phase-7-report.md` Step 2 (component wiki). Keeps the phase docs tight and gives the triad contract a stable home.
|
|
6
|
+
|
|
7
|
+
## The triad at a glance
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
GitHub issue (no Jira link)
|
|
11
|
+
│
|
|
12
|
+
▼ Phase 0 Step 1 — auto-create policy
|
|
13
|
+
Jira issue (new, linked both ways)
|
|
14
|
+
│
|
|
15
|
+
▼ Phase 3 — component implementation
|
|
16
|
+
wiki markdown in pipeline/skills/…
|
|
17
|
+
│
|
|
18
|
+
▼ Phase 7 Report Step 2 — wiki capture + Jira comment post
|
|
19
|
+
Jira comment (humanizer'd component summary)
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Phase 0 auto-create policy
|
|
23
|
+
|
|
24
|
+
Inputs:
|
|
25
|
+
|
|
26
|
+
- `state.inputType === "github-issue-url"` or `"github-issue-number"` — not `jira-*`, not `free-text`.
|
|
27
|
+
- `state.jiraId` is null (no `{JIRA_KEY}-XXXXX` found in the issue body).
|
|
28
|
+
- `prefs.global.autoJiraFromGithubIssue` — enum `ask` | `always` | `never`.
|
|
29
|
+
- `state.mode` — `autopilot` overrides `ask` to `always` (no interactive fallback when user isn't watching).
|
|
30
|
+
|
|
31
|
+
Decision table:
|
|
32
|
+
|
|
33
|
+
| preference | interactive | autopilot |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| `ask` | prompt `Create Jira issue for this? (y/n)` | treat as `always` |
|
|
36
|
+
| `always` | silently create + log | silently create + log |
|
|
37
|
+
| `never` | skip + log | skip + log |
|
|
38
|
+
|
|
39
|
+
**Create path:**
|
|
40
|
+
|
|
41
|
+
1. Emit progress line `→ creating Jira issue for GH{issueNo}`.
|
|
42
|
+
2. Resolve Jira token via `keychainMapping.jira`. Token missing → run Token Save Flow from `setup.md` inline (clipboard-based; user can add now or skip). Skip → treat as `never` for this run.
|
|
43
|
+
3. Derive Jira fields from the GitHub issue:
|
|
44
|
+
- `summary` ← GitHub issue title (truncate to 255 chars).
|
|
45
|
+
- `description` ← GitHub issue body, prefixed with `h3. From GitHub\n[GH{issueNo}|{url}]\n\n`.
|
|
46
|
+
- `issueType` — infer from labels: `bug` → Bug, `enhancement` → Story, default Task.
|
|
47
|
+
- `project` — `figmaConfig.jira.projectKey`, or `prefs.global.defaultJiraKey`, or prompt (cached after first use).
|
|
48
|
+
- `priority` — derive from labels if present (`priority:high` → High, etc.); else leave unset (Jira default).
|
|
49
|
+
4. `POST {jira.baseUrl}/rest/api/2/issue` with the derived payload.
|
|
50
|
+
5. On success: store new Jira key in `state.jiraId`. Emit `→ created Jira {newKey}`.
|
|
51
|
+
6. Patch the GitHub issue body: append a line `Jira: [{newKey}]({jira.baseUrl}/browse/{newKey})` so the bidirectional link is visible on GitHub without refetching the pipeline state.
|
|
52
|
+
|
|
53
|
+
**Skip path** (`never` or user declined): Branch falls back to `feature/GH{issueNo}-{kebab}`; Phase 7 later emits `→ no Jira linked (policy: {preference})`.
|
|
54
|
+
|
|
55
|
+
**Failure isolation:** Jira API 5xx or network error → log the error, warn the user, and **continue with no Jira link** (do not halt Phase 0). Rationale: a transient Jira outage should not block code work; user can link manually post-hoc.
|
|
56
|
+
|
|
57
|
+
## Phase 7 wiki → Jira comment
|
|
58
|
+
|
|
59
|
+
Runs after Phase 7 Report Step 2 (wiki capture) has produced markdown and only when:
|
|
60
|
+
|
|
61
|
+
- `state.jiraId` is non-null (from Phase 0 scan or auto-create).
|
|
62
|
+
- `prefs.global.wikiToJiraComment !== false` (default true).
|
|
63
|
+
- Step 2 actually wrote files (skipped taskTypes don't trigger this).
|
|
64
|
+
|
|
65
|
+
Flow:
|
|
66
|
+
|
|
67
|
+
1. Emit `→ posting wiki summary to Jira {jiraId}`.
|
|
68
|
+
2. Read the first N lines of the primary wiki markdown file (the component's overview page — one of `writtenPaths[0]`).
|
|
69
|
+
3. Render as Jira comment: title line (`h3. Component docs — {componentName}`) + an overview paragraph + a link to the full page (wiki URL, if the adapter returned `pushedRemote`).
|
|
70
|
+
4. **Run through the humanizer skill** — same policy as Step 4 Confluence: user-facing content must read naturally.
|
|
71
|
+
5. `POST {jira.baseUrl}/rest/api/2/issue/{jiraId}/comment`.
|
|
72
|
+
6. Log: `Phase 7: wiki summary posted to Jira {jiraId}`.
|
|
73
|
+
|
|
74
|
+
On failure: log + continue. Wiki is already written; the Jira comment is an augmentation. Don't regress Phase 7 over a Jira 5xx.
|
|
75
|
+
|
|
76
|
+
## Autopilot behaviour
|
|
77
|
+
|
|
78
|
+
Autopilot forces:
|
|
79
|
+
|
|
80
|
+
- `autoJiraFromGithubIssue: ask` → `always` (no user to prompt).
|
|
81
|
+
- `wikiToJiraComment` obeys its preference (default `true`) — no prompting either way.
|
|
82
|
+
|
|
83
|
+
Rationale: autopilot is explicit consent for side-effect creation; muting Jira activity would defeat the purpose.
|
|
84
|
+
|
|
85
|
+
## Preferences involved
|
|
86
|
+
|
|
87
|
+
| key | type | default | controls |
|
|
88
|
+
|---|---|---|---|
|
|
89
|
+
| `prefs.global.autoJiraFromGithubIssue` | enum ask/always/never | `ask` | Phase 0 auto-create decision |
|
|
90
|
+
| `prefs.global.wikiToJiraComment` | bool | `true` | Phase 7 wiki → Jira comment post |
|
|
91
|
+
| `figmaConfig.jira.projectKey` | string | — | Target project for new issues (falls back to `prefs.global.defaultJiraKey`) |
|
|
92
|
+
| `prefs.global.keychainMapping.jira` | string | — | Jira token keychain lookup |
|
|
93
|
+
|
|
94
|
+
## Cross-CLI parity
|
|
95
|
+
|
|
96
|
+
Both Claude Code and Copilot CLI implementations MUST:
|
|
97
|
+
|
|
98
|
+
- Resolve the `autoJiraFromGithubIssue` enum the same way.
|
|
99
|
+
- Derive Jira fields from GitHub issue metadata identically (title → summary, body → description with `h3. From GitHub` prefix, label → issueType mapping).
|
|
100
|
+
- Patch the GitHub issue body with the `Jira: [KEY](url)` line after create.
|
|
101
|
+
- Treat failures as non-blocking with the same log shape.
|
|
102
|
+
- Run the humanizer skill on the wiki-summary Jira comment.
|
|
103
|
+
|
|
104
|
+
`smoke-issue-jira-triad.sh` asserts every contract item.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
## Keychain Token Registry
|
|
2
|
+
|
|
3
|
+
Tokens live in the platform-native credential store (macOS Keychain / Linux libsecret / Windows Credential Manager). Key names are resolved via **preferences mapping** — never hardcoded.
|
|
4
|
+
|
|
5
|
+
### Rule 1 — Never prompt for a token mid-run
|
|
6
|
+
|
|
7
|
+
The pipeline NEVER prompts the user mid-phase for a token value. If a token is needed for the current operation:
|
|
8
|
+
|
|
9
|
+
1. Read the mapped key from `prefs.global.keychainMapping.<service>`.
|
|
10
|
+
2. Resolve via `~/.claude/lib/credential-store.sh get "$KEY_NAME"`.
|
|
11
|
+
3. **If the credential store returns empty / missing**: pause the current adapter, surface a structured error (`{ status: "blocked", reason: "missing-token", service: "<id>", expected_key: "<name>" }`), and direct the user to `/multi-agent:setup` (the inline Token Save Flow). Resume from the same step after setup. **Do NOT** ask the user to paste the token in chat.
|
|
12
|
+
4. **If the credential returns 401 / invalid**: surface the same structured error with `reason: "expired-token"`. Open the Save Flow with the "expired" trigger.
|
|
13
|
+
|
|
14
|
+
Reasons:
|
|
15
|
+
- Asking for a token in chat leaks it into the conversation transcript and any audit log.
|
|
16
|
+
- The user has already configured the keychain; missing/expired is a setup issue, not a per-run issue.
|
|
17
|
+
- The structured error gives the orchestrator a clear path: pause → setup → resume.
|
|
18
|
+
|
|
19
|
+
The smoke gate `pipeline/scripts/smoke-no-token-prompt.sh` greps the pipeline source for hardcoded "enter token" / "paste token" / "API key:" prompts and fails the build if any are introduced. Token I/O is exclusively `credential-store.sh` calls.
|
|
20
|
+
|
|
21
|
+
**Retrieve pattern (always use mapping):**
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
PREFS_FILE="$HOME/.claude/multi-agent-preferences.json"
|
|
25
|
+
|
|
26
|
+
# Read mapped key name for a service, fallback to standard name
|
|
27
|
+
KEY_NAME=$(jq -r '.global.keychainMapping.<service_id> // "<standard_key_name>"' "$PREFS_FILE")
|
|
28
|
+
TOKEN=$(~/.claude/lib/credential-store.sh get "$KEY_NAME" 2>/dev/null)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The shell driver auto-delegates to `~/.claude/scripts/keychain.py` on macOS / Linux for deterministic behaviour (writes both `-l` (label) and `-s` (service) attributes; reads tolerate either convention so manually-added personal tokens are findable).
|
|
32
|
+
|
|
33
|
+
**Standard key names (convention for new tokens):**
|
|
34
|
+
|
|
35
|
+
| Service ID | Context | Standard Key Name | Type |
|
|
36
|
+
| ------------------ | ------------------ | ---------------------------------- | ----------------- |
|
|
37
|
+
| `jira` | Jira issue fetch | `${USER}_Jira_Access_Token` | PAT |
|
|
38
|
+
| `bitbucket_token` | Bitbucket PR/push | `${USER}_Bitbucket_Access_Token` | App Password |
|
|
39
|
+
| `bitbucket_user` | Bitbucket username | `${USER}_Bitbucket_Username` | Plain text |
|
|
40
|
+
| `github` | GitHub issue/PR | `${USER}_Github_Access_Token` | PAT (+ `gh auth`) |
|
|
41
|
+
| `confluence` | Confluence docs | `${USER}_Confluence_Access_Token` | PAT |
|
|
42
|
+
| `figma` | Figma | `${USER}_Figma_Access_Token` | PAT |
|
|
43
|
+
| `figma_mcp` | Figma MCP | `${USER}_Figma_Mcp_Access_Token` | OAuth |
|
|
44
|
+
| `fortify` | Fortify | `${USER}_Fortify_Access_Token` | API Token |
|
|
45
|
+
| `firebase` | Firebase | `${USER}_Firebase_Access_Json` | JSON (base64) |
|
|
46
|
+
| `jenkins` | Jenkins CI | `${USER}_Jenkins_Access_Token` | API Token |
|
|
47
|
+
| — | Git Identity | Stored in preferences JSON | Not Keychain |
|
|
48
|
+
|
|
49
|
+
**Key name mapping lives in preferences:**
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"global": {
|
|
54
|
+
"keychainMapping": {
|
|
55
|
+
"jira": "${USER}_Jira_Access_Token",
|
|
56
|
+
"bitbucket_token": "${USER}_Bitbucket_Access_Token",
|
|
57
|
+
"bitbucket_user": "${USER}_Bitbucket_Username",
|
|
58
|
+
"github": "${USER}_Github_Access_Token",
|
|
59
|
+
"confluence": "${USER}_Confluence_Access_Token",
|
|
60
|
+
"figma": "${USER}_Figma_Access_Token",
|
|
61
|
+
"figma_mcp": "${USER}_Figma_Mcp_Access_Token",
|
|
62
|
+
"fortify": "${USER}_Fortify_Access_Token",
|
|
63
|
+
"firebase": "${USER}_Firebase_Access_Json",
|
|
64
|
+
"jenkins": "${USER}_Jenkins_Access_Token"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Key naming rule:**
|
|
71
|
+
- **Existing tokens**: actual key names may differ from standard names (e.g. `MyGithubPAT` instead of `${USER}_Github_Access_Token`). These are NEVER renamed — the mapping in preferences resolves the difference. Run `/multi-agent setup` to discover and map existing keys.
|
|
72
|
+
- **New tokens**: ALWAYS created with the standard key name from the table above. This ensures cross-machine consistency for new installations.
|
|
73
|
+
|
|
74
|
+
**Multiple keys for same service**: If Keychain contains more than one entry for a service (e.g. multiple Firebase keys), list all found entries and ask the user which one to use. Never assume — always ask.
|
|
75
|
+
|
|
76
|
+
**Adding a new token (uses standard key name automatically):**
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
bash "$HOME/.claude/scripts/keychain-save.sh" <service-id>
|
|
80
|
+
```
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
## Project Knowledge Base
|
|
2
|
+
|
|
3
|
+
An incrementally growing knowledge system for each project, enabling knowledge transfer across sessions.
|
|
4
|
+
|
|
5
|
+
### Directory Structure
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
$HOME/.claude/knowledge/
|
|
9
|
+
my-app/
|
|
10
|
+
architecture.md — module map, file relationships, dependency graph
|
|
11
|
+
patterns.md — naming, conventions, recurring structures
|
|
12
|
+
gotchas.md — build errors, edge cases, workarounds
|
|
13
|
+
decisions.md — architectural decisions and rationale (ADR-lite)
|
|
14
|
+
another-project/
|
|
15
|
+
architecture.md
|
|
16
|
+
patterns.md
|
|
17
|
+
gotchas.md
|
|
18
|
+
decisions.md
|
|
19
|
+
...
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### How It Works
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
Task 1 (first time): Phase 1 -> full Explore -> Phase 7 -> create knowledge
|
|
26
|
+
Task 2: Phase 1 -> read knowledge -> targeted Explore -> Phase 7 -> update knowledge
|
|
27
|
+
Task 3: Phase 1 -> read knowledge -> minimal Explore -> Phase 7 -> update knowledge
|
|
28
|
+
...
|
|
29
|
+
Task N: Phase 1 -> knowledge sufficient -> SKIP Explore -> Phase 7 -> update knowledge
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Each task teaches the project a bit more. Token cost decreases over time.
|
|
33
|
+
|
|
34
|
+
### Knowledge vs CLAUDE.md vs Auto Memory
|
|
35
|
+
|
|
36
|
+
| Layer | Who Writes | Scope | Lifetime |
|
|
37
|
+
| ------------------------------------------- | --------------------- | ------------------------------------------ | ------------------------ |
|
|
38
|
+
| `$PROJECT_ROOT/CLAUDE.md` | User | Project rules, build commands | Persistent (in git) |
|
|
39
|
+
| Auto Memory (`~/.claude/projects/`) | Claude (automatic) | User preferences, feedback | Persistent (global) |
|
|
40
|
+
| **Knowledge Base** (`~/.claude/knowledge/`) | Multi-agent (Phase 7) | Architecture, patterns, gotchas, decisions | Persistent (per-project) |
|
|
41
|
+
|
|
42
|
+
They all complement each other — no conflicts.
|
|
43
|
+
|
|
44
|
+
### Knowledge in --dev Mode
|
|
45
|
+
|
|
46
|
+
In `--dev` mode Phase 1 is skipped but knowledge **is still read**:
|
|
47
|
+
|
|
48
|
+
- Knowledge files are added to the prompt before the Opus agent starts in Phase 3
|
|
49
|
+
- Knowledge capture is still performed in Phase 7 (simplified report)
|
|
50
|
+
|
|
51
|
+
### Knowledge Maintenance
|
|
52
|
+
|
|
53
|
+
Knowledge files grow over time. Maintenance rules:
|
|
54
|
+
|
|
55
|
+
- Every entry has a `<!-- captured: {date}, task: {id} -->` tag
|
|
56
|
+
- 90-day-old entries are considered "stale" — not used without verification
|
|
57
|
+
- Stale check: orchestrator checks file mtime during Phase 1 knowledge injection
|
|
58
|
+
- Stale entries are added to the prompt with a "STALE — verify before relying" tag
|
|
59
|
+
- `clear-logs` does not touch knowledge — only deletes logs and state
|
|
60
|
+
- `purge` does not touch knowledge either — separate command: `/multi-agent clear-knowledge {project}`
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Skill Injection Strategy
|
|
65
|
+
|
|
66
|
+
When calling sub-agents, inject task-specific context from previous phases:
|
|
67
|
+
|
|
68
|
+
### Phase -> Agent -> Context Flow
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
Phase 1: Analysis
|
|
72
|
+
-- Explore agents (parallel) -> codebase scan
|
|
73
|
+
|
|
74
|
+
Phase 2: Planning
|
|
75
|
+
-- Architecture review agent
|
|
76
|
+
Context: task description + Phase 1 findings + affected modules
|
|
77
|
+
|
|
78
|
+
Phase 3: Dev
|
|
79
|
+
-- Sonnet agent (TDD)
|
|
80
|
+
Context: Phase 2 plan + task dependencies
|
|
81
|
+
|
|
82
|
+
Phase 4: Review (CLI-aware parallel + triage)
|
|
83
|
+
Claude Code (2 parallel):
|
|
84
|
+
|-- Reviewer (opus) -> security + architecture
|
|
85
|
+
+-- Reviewer (sonnet) -> quality + correctness + edge cases
|
|
86
|
+
Copilot CLI (3 parallel):
|
|
87
|
+
|-- Reviewer (opus) -> security + architecture
|
|
88
|
+
|-- Reviewer (gpt-5.4) -> edge cases, cross-provider diversity
|
|
89
|
+
+-- Reviewer (sonnet) -> quality + correctness + naming
|
|
90
|
+
Context for ALL: Phase 1 files + Phase 2 decisions + Phase 3 diff
|
|
91
|
+
Then: single Opus triage pass filters false-positives
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Context-Aware Agent Prompting
|
|
95
|
+
|
|
96
|
+
When launching review agents in Phase 4, include:
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
"Review this diff for {task-id}. Focus areas based on analysis:
|
|
100
|
+
- {files changed summary from Phase 1}
|
|
101
|
+
- {architecture decisions from Phase 2}
|
|
102
|
+
- {specific risk areas identified}"
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
When launching architecture agent in Phase 2, include:
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
"Evaluate architecture for {task-id}. Context:
|
|
109
|
+
- {task description}
|
|
110
|
+
- {affected modules from Phase 1}
|
|
111
|
+
- {existing patterns found by explore agents}"
|
|
112
|
+
```
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# Multi-Repo Integration Build — Learn Once, Auto-Apply
|
|
2
|
+
|
|
3
|
+
> **TLDR** — When a task touches ≥2 repos that have a producer→consumer dependency (e.g. shared codegen library + consuming UI library), the pipeline MUST build the **host project** that integrates them before commit/PR. Codegen mismatches (nested vs flat keys, missing entries, overwritten files) only surface when the full dependency chain builds together. Building repos in isolation gives false confidence.
|
|
4
|
+
>
|
|
5
|
+
> The pipeline **learns** the host per repo-combo once, persists to `prefs.global.multiRepoIntegrationHosts`, and auto-applies on subsequent runs.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Why this exists
|
|
10
|
+
|
|
11
|
+
Codegen outputs (identifiers, localization keys, tokens) in Repo A get referenced by source code in Repo B. Repo B is consumed as a submodule or SPM/Gradle dependency by host Repo C. Changes in A or B can silently break C if key structures diverge (e.g. nested enum vs flat access pattern). Skipping integration build has caused post-merge build failures that required additional fix PRs and wasted review cycles.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## When this rule fires
|
|
16
|
+
|
|
17
|
+
In Phase 6 (Commit & PR), **before** the pre-commit local checkout prompt, if `state.projects.length >= 2`:
|
|
18
|
+
|
|
19
|
+
1. Compute `repoSet` = sorted array of touched repo names.
|
|
20
|
+
2. Look up `prefs.global.multiRepoIntegrationHosts` for an entry whose `repoSet` (sorted) equals this combo.
|
|
21
|
+
3. Match found → **auto-run** the learned build (steps below).
|
|
22
|
+
4. No match → **learn-once prompt** (below), then run.
|
|
23
|
+
|
|
24
|
+
Single-repo tasks skip this step entirely — no prompt, no overhead.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Learn-once prompt (first encounter of a combo)
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
This task touched N repos: <name>, <name>, <name>
|
|
32
|
+
Do any of these need a host project (submodule consumer) built together
|
|
33
|
+
to verify codegen / interface integration?
|
|
34
|
+
|
|
35
|
+
[1] Yes — register host project now (will auto-run on future runs)
|
|
36
|
+
[2] No — this combo is independent (save as "no host" so we don't re-ask)
|
|
37
|
+
[3] Skip this run only (no learning)
|
|
38
|
+
|
|
39
|
+
Select [1-3]:
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**On [1]** — ask follow-ups:
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
Host project path (absolute): _______________________
|
|
46
|
+
Platform: [ios | android | mixed]
|
|
47
|
+
Scheme / target / module: _____________________________ (iOS: xcodebuild scheme · Android: gradle module)
|
|
48
|
+
Submodule paths to refresh (space-separated, relative to host):
|
|
49
|
+
_____________________________________________________
|
|
50
|
+
Dependency resolve command (press enter for defaults):
|
|
51
|
+
default ios: xcodebuild -resolvePackageDependencies -skipMacroValidation
|
|
52
|
+
default android: ./gradlew dependencies --refresh-dependencies
|
|
53
|
+
Build command (press enter for defaults):
|
|
54
|
+
default ios: xcodebuild -scheme <S> -destination 'platform=iOS Simulator,name=iPhone 17 Pro,OS=latest' build -skipMacroValidation
|
|
55
|
+
default android: ./gradlew :<module>:assembleDebug
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Persist to `prefs.global.multiRepoIntegrationHosts[]`:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"repoSet": ["<repo-a>", "<repo-b>"],
|
|
63
|
+
"hostPath": "/absolute/path/to/host",
|
|
64
|
+
"platform": "ios",
|
|
65
|
+
"hostScheme": "<Scheme>",
|
|
66
|
+
"submodulePaths": [
|
|
67
|
+
"<submodule-path-a>",
|
|
68
|
+
"<submodule-path-b>"
|
|
69
|
+
],
|
|
70
|
+
"resolveCommand": "xcodebuild -project <HostProject>.xcodeproj -scheme <Scheme> -resolvePackageDependencies -skipMacroValidation",
|
|
71
|
+
"buildCommand": "xcodebuild -project <HostProject>.xcodeproj -scheme <Scheme> -destination 'platform=iOS Simulator,name=iPhone 17 Pro,OS=latest' build -skipMacroValidation",
|
|
72
|
+
"lastUsed": "2026-04-20T15:30:00Z",
|
|
73
|
+
"count": 1,
|
|
74
|
+
"lastResult": "success"
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**On [2]** — persist a negative entry so the combo never re-asks:
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{ "repoSet": ["<repo-a>", "<repo-b>"], "noHost": true, "lastUsed": "..." }
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**On [3]** — no write, re-ask next time.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Auto-run steps (when host is learned)
|
|
89
|
+
|
|
90
|
+
Progress-contract line `→ integrating <host-scheme> with <N> submodules`. Tracker sub-step on Phase 6 to show live status: `phase-tracker.sh sub 6 0 "Integration build" in_progress`.
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
HOST="$(jq -r --arg key "$repoSet_sorted_joined" \
|
|
94
|
+
'.global.multiRepoIntegrationHosts[]
|
|
95
|
+
| select((.repoSet | sort | join(",")) == $key)' "$PREFS_FILE")"
|
|
96
|
+
|
|
97
|
+
HOST_PATH=$(echo "$HOST" | jq -r '.hostPath')
|
|
98
|
+
RESOLVE_CMD=$(echo "$HOST" | jq -r '.resolveCommand')
|
|
99
|
+
BUILD_CMD=$(echo "$HOST" | jq -r '.buildCommand')
|
|
100
|
+
|
|
101
|
+
cd "$HOST_PATH"
|
|
102
|
+
|
|
103
|
+
# 1. Pull latest submodules to pick up this task's changes
|
|
104
|
+
for sm in $(echo "$HOST" | jq -r '.submodulePaths[]'); do
|
|
105
|
+
git submodule update --remote "$sm"
|
|
106
|
+
done
|
|
107
|
+
|
|
108
|
+
# 2. Resolve package dependencies (flush stale SPM/Gradle cache)
|
|
109
|
+
eval "$RESOLVE_CMD"
|
|
110
|
+
|
|
111
|
+
# 3. Run the host build, capture only error lines
|
|
112
|
+
BUILD_ERRORS=$(eval "$BUILD_CMD" 2>&1 | grep -E "error:|FAILURE:|error FS" || true)
|
|
113
|
+
|
|
114
|
+
# 4. Evaluate + decide
|
|
115
|
+
if [ -z "$BUILD_ERRORS" ]; then
|
|
116
|
+
phase-tracker.sh sub 6 0 "Integration build" completed
|
|
117
|
+
log "Phase 6.0: Integration build — clean"
|
|
118
|
+
# proceed to pre-commit checkout prompt + commit
|
|
119
|
+
else
|
|
120
|
+
phase-tracker.sh sub 6 0 "Integration build" failed
|
|
121
|
+
log "Phase 6.0: Integration build — NEW errors detected"
|
|
122
|
+
# show errors, ask user
|
|
123
|
+
fi
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Update `lastUsed`, `count++`, `lastResult` after each run.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Error evaluation contract
|
|
131
|
+
|
|
132
|
+
Three outcomes after the build:
|
|
133
|
+
|
|
134
|
+
1. **Zero errors** → sub-step `completed`, proceed to pre-commit prompt.
|
|
135
|
+
2. **New errors from our changes** → sub-step `failed`, STOP. Print the error lines, ask:
|
|
136
|
+
```
|
|
137
|
+
Integration build failed with N new errors. Pipeline can go back to
|
|
138
|
+
Phase 3 to fix, or you can fix manually and tell the pipeline to retry.
|
|
139
|
+
|
|
140
|
+
[1] Return to Phase 3: Dev with these errors as input (auto-fix attempt)
|
|
141
|
+
[2] Pause — I'll fix manually, then /multi-agent resume
|
|
142
|
+
[3] Override — proceed to commit anyway (logs a warning in Phase 7 report)
|
|
143
|
+
|
|
144
|
+
Select [1-3]:
|
|
145
|
+
```
|
|
146
|
+
3. **Pre-existing errors (unrelated to this task)** → if the pipeline has a baseline error count (from a clean pre-change build), compare deltas. When `current_errors <= baseline`, treat as **no new errors** and proceed; log the pre-existing count in Phase 7 Report.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Autopilot behavior
|
|
151
|
+
|
|
152
|
+
Autopilot skips the "Override / pause" prompt. If `count` < 3 on this combo (new / low-confidence), autopilot treats a build failure as BLOCKING and returns to Phase 3 automatically (option 1). If `count >= 3` and `lastResult == success`, a new failure is treated as blocking the same way — but with lower surprise since we've seen this combo succeed before.
|
|
153
|
+
|
|
154
|
+
The learn-once prompt itself also skips under autopilot: instead, autopilot logs `"Phase 6.0: SKIPPED — no learned host for this combo, autopilot refuses to prompt. Run in normal mode once to teach."` and proceeds. This is explicit and recoverable.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Phase 7 knowledge capture
|
|
159
|
+
|
|
160
|
+
When a learn-once prompt writes a new entry, Phase 7 Step 5 (knowledge + memory) ALSO writes a project-scoped memory:
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
Type: reference
|
|
164
|
+
Name: multi-repo integration host — {combo}
|
|
165
|
+
Body: For tasks touching {repoA} + {repoB}, the integration build runs in {hostPath} via
|
|
166
|
+
scheme {hostScheme}. Established {date}. Full config lives in
|
|
167
|
+
prefs.global.multiRepoIntegrationHosts.
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Memories that reference integration hosts NEVER get auto-pruned — even if a combo goes many runs without firing, the knowledge is stable and worth keeping indexed for future teammates.
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Generic rule (for copilot-instructions.md)
|
|
175
|
+
|
|
176
|
+
> **Post-Development Integration Build (Multi-Repo)**
|
|
177
|
+
>
|
|
178
|
+
> When a task touches multiple repositories that have a producer→consumer dependency (e.g. shared library + consuming component library), the pipeline MUST build the **consumer/host project** after all changes are complete — before commit/PR.
|
|
179
|
+
>
|
|
180
|
+
> **When this applies:**
|
|
181
|
+
> - Code generation outputs (identifiers, localization keys, tokens) in Repo A are referenced by source code in Repo B
|
|
182
|
+
> - Repo B is consumed as a submodule or SPM/Gradle dependency by a host project (Repo C)
|
|
183
|
+
> - Changes in Repo A or B can silently break Repo C if key structures diverge (e.g. nested enum vs flat access pattern)
|
|
184
|
+
>
|
|
185
|
+
> **Required steps (after dev, before commit):**
|
|
186
|
+
> 1. Identify the host project — the project that integrates all touched repos as submodules or package dependencies. Check `prefs.global.multiRepoIntegrationHosts` first; ask the user once if unknown.
|
|
187
|
+
> 2. Update submodules to point at the latest feature branch / merged commit.
|
|
188
|
+
> 3. Resolve package dependencies (flush stale SPM/Gradle/CocoaPods cache).
|
|
189
|
+
> 4. Build the host project's relevant scheme / target.
|
|
190
|
+
> 5. Evaluate: new errors from our changes → fix before proceeding; pre-existing errors unrelated → document and proceed; zero new errors → continue to commit/PR.
|
|
191
|
+
>
|
|
192
|
+
> **Why this exists:** codegen mismatches only surface when the full dependency chain is built together. Building repos in isolation gives false confidence. Skipping this step has caused post-merge build failures requiring fix PRs + wasted review cycles.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Schema
|
|
197
|
+
|
|
198
|
+
`prefs.schema.json` adds `global.multiRepoIntegrationHosts` — see `pipeline/schemas/prefs.schema.json` for the authoritative definition. Required fields: `repoSet` (array ≥2), one of `(hostPath + platform)` OR `(noHost: true)`. Optional: `hostScheme`, `submodulePaths`, `resolveCommand`, `buildCommand`, `lastUsed`, `count`, `lastResult`.
|
|
199
|
+
|
|
200
|
+
## Smoke coverage
|
|
201
|
+
|
|
202
|
+
`smoke-multi-repo-integration.sh` verifies:
|
|
203
|
+
- Match logic: sorted `repoSet` equality
|
|
204
|
+
- Negative-entry handling (`noHost: true`)
|
|
205
|
+
- Autopilot refuses to prompt, skips gracefully
|
|
206
|
+
- Schema validator accepts valid entries, rejects malformed (empty repoSet, missing hostPath without noHost)
|
|
207
|
+
- Memory write on first learn
|