@mmerterden/multi-agent-pipeline 8.6.1 → 10.0.6
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 +544 -2484
- package/README.md +117 -138
- package/docs/features.md +1 -1
- package/index.js +8 -10
- package/install/_adapters.mjs +5 -1
- package/install/_common.mjs +63 -0
- package/install/claude.mjs +14 -14
- package/install/copilot.mjs +14 -8
- package/install/index.mjs +85 -19
- package/install/templates/claude-hooks.json +18 -0
- package/install/templates/copilot-instructions.md +3 -3
- package/package.json +21 -6
- package/pipeline/adapters/_base.mjs +366 -14
- package/pipeline/adapters/antigravity.mjs +140 -0
- package/pipeline/adapters/codex.mjs +159 -0
- package/pipeline/adapters/copilot-chat-orchestration.mjs +148 -0
- package/pipeline/adapters/copilot-chat.mjs +34 -68
- package/pipeline/adapters/cursor-orchestration.mjs +152 -0
- package/pipeline/adapters/cursor.mjs +49 -90
- package/pipeline/agents/android-architect.md +5 -5
- package/pipeline/agents/backend-architect.md +4 -4
- package/pipeline/agents/code-reviewer.md +10 -10
- package/pipeline/agents/dev-critic.md +17 -17
- package/pipeline/agents/explorer.md +3 -3
- package/pipeline/agents/ios-architect.md +4 -4
- package/pipeline/agents/security-auditor.md +12 -12
- package/pipeline/agents/task-clarifier.md +18 -18
- package/pipeline/claude-md-template.md +3 -3
- package/pipeline/commands/archive-guard.md +3 -3
- package/pipeline/commands/figma-to-swiftui.md +10 -10
- package/pipeline/commands/multi-agent/_account-picker.md +13 -9
- package/pipeline/commands/multi-agent/_dev-context.md +15 -15
- package/pipeline/commands/multi-agent/_input-parser.md +4 -4
- package/pipeline/commands/multi-agent/_repo-picker.md +9 -9
- package/pipeline/commands/multi-agent/analysis-resolve.md +129 -0
- package/pipeline/commands/multi-agent/analysis.md +667 -0
- package/pipeline/commands/multi-agent/autopilot.md +22 -22
- package/pipeline/commands/multi-agent/build-optimize.md +77 -0
- package/pipeline/commands/multi-agent/channels.md +96 -96
- package/pipeline/commands/multi-agent/delete.md +19 -17
- package/pipeline/commands/multi-agent/dev-autopilot.md +23 -23
- package/pipeline/commands/multi-agent/dev-local-autopilot.md +23 -23
- package/pipeline/commands/multi-agent/dev-local.md +25 -22
- package/pipeline/commands/multi-agent/dev.md +49 -49
- package/pipeline/commands/multi-agent/diff-explain.md +4 -4
- package/pipeline/commands/multi-agent/garbage-collect.md +58 -0
- package/pipeline/commands/multi-agent/help.md +75 -66
- package/pipeline/commands/multi-agent/issue.md +3 -3
- package/pipeline/commands/multi-agent/jira.md +12 -12
- package/pipeline/commands/multi-agent/kill.md +6 -6
- package/pipeline/commands/multi-agent/language.md +12 -12
- package/pipeline/commands/multi-agent/local-autopilot.md +34 -34
- package/pipeline/commands/multi-agent/local.md +24 -25
- package/pipeline/commands/multi-agent/log.md +6 -6
- package/pipeline/commands/multi-agent/manual-test.md +3 -3
- package/pipeline/commands/multi-agent/prune-logs.md +60 -0
- package/pipeline/commands/multi-agent/purge.md +10 -7
- package/pipeline/commands/multi-agent/refactor.md +9 -9
- package/pipeline/commands/multi-agent/refs/analysis-template.md +1062 -0
- package/pipeline/commands/multi-agent/refs/android-guide.md +15 -13
- package/pipeline/commands/multi-agent/refs/audit-guide.md +20 -20
- package/pipeline/commands/multi-agent/refs/backend-guide.md +9 -9
- package/pipeline/commands/multi-agent/refs/channels/confluence.md +17 -17
- package/pipeline/commands/multi-agent/refs/channels/issue-comment.md +30 -30
- package/pipeline/commands/multi-agent/refs/channels/jira.md +15 -15
- package/pipeline/commands/multi-agent/refs/channels/pr-review-actions.md +19 -17
- package/pipeline/commands/multi-agent/refs/channels/pr.md +22 -22
- package/pipeline/commands/multi-agent/refs/channels/wiki.md +19 -19
- package/pipeline/commands/multi-agent/refs/component-dispatch.md +11 -11
- package/pipeline/commands/multi-agent/refs/conventions-defaults.md +179 -0
- package/pipeline/commands/multi-agent/refs/cross-cli-contract.md +35 -33
- package/pipeline/commands/multi-agent/refs/features/dev-critic.md +5 -5
- package/pipeline/commands/multi-agent/refs/features/external-context-injection.md +6 -6
- package/pipeline/commands/multi-agent/refs/features/model-fallback.md +73 -0
- package/pipeline/commands/multi-agent/refs/features/plan-todos.md +1 -1
- package/pipeline/commands/multi-agent/refs/features/prior-fix-detection.md +4 -4
- package/pipeline/commands/multi-agent/refs/features/repo-map.md +6 -6
- package/pipeline/commands/multi-agent/refs/features/shadow-git.md +2 -2
- package/pipeline/commands/multi-agent/refs/frontend-guide.md +16 -16
- package/pipeline/commands/multi-agent/refs/issue-jira-triad.md +18 -18
- package/pipeline/commands/multi-agent/refs/keychain.md +18 -8
- package/pipeline/commands/multi-agent/refs/knowledge.md +9 -9
- package/pipeline/commands/multi-agent/refs/multi-repo-integration-build.md +19 -19
- package/pipeline/commands/multi-agent/refs/phases/log-format.md +29 -9
- package/pipeline/commands/multi-agent/refs/phases/modes.md +33 -33
- package/pipeline/commands/multi-agent/refs/phases/operations.md +11 -11
- package/pipeline/commands/multi-agent/refs/phases/phase-0-init.md +93 -57
- package/pipeline/commands/multi-agent/refs/phases/phase-1-analysis.md +59 -28
- package/pipeline/commands/multi-agent/refs/phases/phase-2-planning.md +115 -63
- package/pipeline/commands/multi-agent/refs/phases/phase-3-dev.md +99 -36
- package/pipeline/commands/multi-agent/refs/phases/phase-4-review.md +160 -63
- package/pipeline/commands/multi-agent/refs/phases/phase-5-test.md +33 -18
- package/pipeline/commands/multi-agent/refs/phases/phase-6-commit.md +45 -43
- package/pipeline/commands/multi-agent/refs/phases/phase-7-report.md +54 -28
- package/pipeline/commands/multi-agent/refs/phases.md +17 -17
- package/pipeline/commands/multi-agent/refs/picker-contract.md +65 -0
- package/pipeline/commands/multi-agent/refs/progress-contract.md +37 -21
- package/pipeline/commands/multi-agent/refs/rules.md +83 -25
- package/pipeline/commands/multi-agent/refs/swiftui-guide.md +32 -30
- package/pipeline/commands/multi-agent/refs/tracker-contract.md +54 -30
- package/pipeline/commands/multi-agent/refs/wiki-capture.md +36 -33
- package/pipeline/commands/multi-agent/resume.md +9 -9
- package/pipeline/commands/multi-agent/review.md +24 -24
- package/pipeline/commands/multi-agent/scan.md +10 -10
- package/pipeline/commands/multi-agent/search.md +8 -8
- package/pipeline/commands/multi-agent/setup.md +111 -84
- package/pipeline/commands/multi-agent/stack.md +5 -5
- package/pipeline/commands/multi-agent/status.md +5 -5
- package/pipeline/commands/multi-agent/sync.md +123 -111
- package/pipeline/commands/multi-agent/test.md +6 -6
- package/pipeline/commands/multi-agent/update.md +1 -1
- package/pipeline/commands/multi-agent.md +66 -60
- package/pipeline/commands/sim-test.md +14 -14
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-1-analysis.json +1 -1
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-review.json +2 -2
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-triage.json +2 -2
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/metadata.json +1 -1
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-1-analysis.json +2 -2
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-review.json +3 -3
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-triage.json +4 -4
- package/pipeline/eval/golden-tasks/02-android-feature-compose/metadata.json +1 -1
- package/pipeline/eval/golden-tasks/02-android-feature-compose/task.json +1 -1
- package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-1-analysis.json +29 -0
- package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-2-plan.json +42 -0
- package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-4-review.json +20 -0
- package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-4-triage.json +15 -0
- package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/task.json +12 -0
- package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-1-analysis.json +29 -0
- package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-2-plan.json +40 -0
- package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-4-review.json +20 -0
- package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-4-triage.json +15 -0
- package/pipeline/eval/golden-tasks/04-frontend-next-hydration/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/04-frontend-next-hydration/task.json +12 -0
- package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-1-analysis.json +29 -0
- package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-2-plan.json +42 -0
- package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-4-review.json +28 -0
- package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-4-triage.json +27 -0
- package/pipeline/eval/golden-tasks/05-ios-security-keychain/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/05-ios-security-keychain/task.json +12 -0
- package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-1-analysis.json +29 -0
- package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-2-plan.json +41 -0
- package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-4-review.json +12 -0
- package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-4-triage.json +6 -0
- package/pipeline/eval/golden-tasks/06-android-refactor-usecase/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/06-android-refactor-usecase/task.json +12 -0
- package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-1-analysis.json +29 -0
- package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-2-plan.json +42 -0
- package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-4-review.json +28 -0
- package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-4-triage.json +27 -0
- package/pipeline/eval/golden-tasks/07-backend-node-idempotency/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/07-backend-node-idempotency/task.json +12 -0
- package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-1-analysis.json +25 -0
- package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-2-plan.json +31 -0
- package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-4-review.json +12 -0
- package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-4-triage.json +18 -0
- package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/task.json +12 -0
- package/pipeline/eval/golden-tasks/README.md +14 -14
- package/pipeline/eval/intent-cases.json +40 -0
- package/pipeline/eval/run-metrics-fixture.json +46 -0
- package/pipeline/eval/triage/01-empty-findings/notes.md +1 -1
- package/pipeline/eval/triage/02-real-blocker/notes.md +2 -2
- package/pipeline/eval/triage/03-out-of-scope-defer/notes.md +1 -1
- package/pipeline/eval/triage/04-false-positive-reject/notes.md +1 -1
- package/pipeline/eval/triage/05-mixed-classification/notes.md +2 -2
- package/pipeline/eval/triage/06-severity-mismatch/notes.md +2 -2
- package/pipeline/eval/triage/07-duplicate-reviewers/notes.md +1 -1
- package/pipeline/eval/triage/08-style-misclassified/notes.md +1 -1
- package/pipeline/eval/triage/09-cascading-finding/notes.md +2 -2
- package/pipeline/eval/triage/10-deferred-crossref/notes.md +2 -2
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/expected.json +3 -3
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/input.json +2 -2
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/notes.md +5 -5
- package/pipeline/eval/triage/README.md +4 -4
- package/pipeline/lib/account-resolver.sh +3 -3
- package/pipeline/lib/ask-choice.sh +98 -0
- package/pipeline/lib/channels-multi-repo.sh +3 -3
- package/pipeline/lib/classify-intent.sh +110 -0
- package/pipeline/lib/context-link-extractor.sh +3 -3
- package/pipeline/lib/credential-store-resolver.sh +3 -3
- package/pipeline/lib/credential-store.sh +9 -5
- package/pipeline/lib/extract-conventions.sh +1034 -0
- package/pipeline/lib/fetch-confluence.sh +3 -3
- package/pipeline/lib/fetch-crashlytics.sh +5 -5
- package/pipeline/lib/fetch-fortify.sh +5 -21
- package/pipeline/lib/fetch-swagger.sh +5 -5
- package/pipeline/lib/figma-screenshot.sh +536 -0
- package/pipeline/lib/issue-fetcher.sh +46 -20
- package/pipeline/lib/md2confluence-v3.py +1076 -0
- package/pipeline/lib/multi-repo-pipeline.sh +13 -22
- package/pipeline/lib/plan-todos.sh +7 -7
- package/pipeline/lib/post-pr-review.sh +53 -21
- package/pipeline/lib/repo-cache.sh +5 -5
- package/pipeline/lib/review-watch.sh +17 -13
- package/pipeline/lib/shadow-git.sh +7 -7
- package/pipeline/lib/submodule-detector.sh +3 -3
- package/pipeline/lib/vercel-deploy.sh +28 -15
- package/pipeline/preferences-template.json +21 -4
- package/pipeline/rules/app-store-guidelines.md +2 -2
- package/pipeline/rules/code-style.md +6 -6
- package/pipeline/rules/figma-pipeline.md +100 -2
- package/pipeline/rules/kotlin-android.md +8 -8
- package/pipeline/rules/security.md +4 -4
- package/pipeline/rules/tdd.md +1 -1
- package/pipeline/rules/testing.md +5 -5
- package/pipeline/schemas/agent-state.schema.json +55 -20
- package/pipeline/schemas/analysis-output.schema.json +7 -2
- package/pipeline/schemas/analysis-spec.schema.json +484 -0
- package/pipeline/schemas/clarify-output.schema.json +5 -5
- package/pipeline/schemas/conventions-output.schema.json +70 -0
- package/pipeline/schemas/dev-critic-output.schema.json +2 -2
- package/pipeline/schemas/diff-risk.schema.json +3 -3
- package/pipeline/schemas/figma-project-config.schema.json +3 -3
- package/pipeline/schemas/learnings-ledger.schema.json +39 -0
- package/pipeline/schemas/migrations/README.md +2 -2
- package/pipeline/schemas/migrations/figma-config-1.0.0-to-2.0.0.mjs +5 -5
- package/pipeline/schemas/migrations/prefs-2.0.0-to-2.1.0.mjs +3 -3
- package/pipeline/schemas/migrations/prefs-2.1.0-to-2.2.0.mjs +4 -4
- package/pipeline/schemas/migrations/prefs-2.2.0-to-2.3.0.mjs +5 -5
- package/pipeline/schemas/migrations/state-2.0.0-to-2.1.0.mjs +3 -3
- package/pipeline/schemas/plan-todos.schema.json +4 -4
- package/pipeline/schemas/planning-output.schema.json +3 -3
- package/pipeline/schemas/prefs.schema.json +97 -13
- package/pipeline/schemas/reviewer-output.schema.json +7 -3
- package/pipeline/schemas/test-gap.schema.json +1 -1
- package/pipeline/schemas/token-budget.json +8 -8
- package/pipeline/schemas/triage-corpus.schema.json +1 -1
- package/pipeline/schemas/triage-output.schema.json +44 -6
- package/pipeline/scripts/README.md +64 -64
- package/pipeline/scripts/aggregate-metrics.mjs +55 -16
- package/pipeline/scripts/audit-log-rotate.sh +3 -3
- package/pipeline/scripts/audit-log.sh +20 -7
- package/pipeline/scripts/benchmark-phase-0.sh +6 -6
- package/pipeline/scripts/build-skills-index.mjs +15 -15
- package/pipeline/scripts/check-md-links.mjs +59 -0
- package/pipeline/scripts/classify-plan-safety.mjs +24 -18
- package/pipeline/scripts/cost-budget-check.mjs +160 -0
- package/pipeline/scripts/cost-table.json +23 -13
- package/pipeline/scripts/diff-explain.mjs +12 -12
- package/pipeline/scripts/diff-risk-score.mjs +18 -17
- package/pipeline/scripts/eval-golden-tasks-live.mjs +13 -10
- package/pipeline/scripts/eval-golden-tasks.mjs +3 -14
- package/pipeline/scripts/eval-intent.mjs +103 -0
- package/pipeline/scripts/eval-triage.mjs +3 -3
- package/pipeline/scripts/evidence-gate.mjs +155 -0
- package/pipeline/scripts/fixtures/install-layout.tsv +9 -9
- package/pipeline/scripts/gc-tmp.sh +102 -0
- package/pipeline/scripts/gen-mode-dispatch.mjs +27 -21
- package/pipeline/scripts/gen-skills-index.mjs +6 -6
- package/pipeline/scripts/github-ssh-setup.sh +1 -1
- package/pipeline/scripts/keychain-save.sh +1 -1
- package/pipeline/scripts/keychain.py +6 -6
- package/pipeline/scripts/learnings-ledger.mjs +284 -0
- package/pipeline/scripts/lint-skills.mjs +80 -0
- package/pipeline/scripts/log-metric.sh +18 -9
- package/pipeline/scripts/match-skills.mjs +13 -8
- package/pipeline/scripts/memory-load.sh +3 -3
- package/pipeline/scripts/memory-save.sh +5 -5
- package/pipeline/scripts/migrate-prefs.mjs +17 -17
- package/pipeline/scripts/migrate-state.mjs +12 -12
- package/pipeline/scripts/output-quality-check.sh +7 -7
- package/pipeline/scripts/phase-banner.sh +5 -5
- package/pipeline/scripts/phase-tracker.sh +90 -53
- package/pipeline/scripts/pre-commit-check.sh +45 -5
- package/pipeline/scripts/pre-push-check.sh +7 -7
- package/pipeline/scripts/prune-logs.sh +118 -0
- package/pipeline/scripts/render-agent-log-cost.sh +55 -18
- package/pipeline/scripts/render-cost-summary.sh +9 -9
- package/pipeline/scripts/render-work-summary.sh +4 -4
- package/pipeline/scripts/repo-map.mjs +9 -9
- package/pipeline/scripts/run-aggregator.mjs +7 -6
- package/pipeline/scripts/run-metrics.mjs +129 -0
- package/pipeline/scripts/run-smokes.mjs +76 -0
- package/pipeline/scripts/scan-skills.sh +11 -11
- package/pipeline/scripts/search-logs.sh +8 -8
- package/pipeline/scripts/sign-skills.sh +2 -2
- package/pipeline/scripts/smoke-adapters.sh +79 -10
- package/pipeline/scripts/smoke-add-detail.sh +5 -5
- package/pipeline/scripts/smoke-agent-log-cost.sh +85 -6
- package/pipeline/scripts/smoke-agent-model-routing.sh +3 -3
- package/pipeline/scripts/smoke-ask-choice.sh +42 -0
- package/pipeline/scripts/smoke-bitbucket-contract.sh +19 -3
- package/pipeline/scripts/smoke-changelog-version.sh +47 -0
- package/pipeline/scripts/smoke-channels-flow.sh +1 -1
- package/pipeline/scripts/smoke-ci-workflows.sh +5 -5
- package/pipeline/scripts/smoke-clarify.sh +3 -3
- package/pipeline/scripts/smoke-commands-skills-parity.sh +4 -4
- package/pipeline/scripts/smoke-community-gates.sh +75 -0
- package/pipeline/scripts/smoke-compliance-skills.sh +5 -5
- package/pipeline/scripts/smoke-cost-budget.sh +70 -0
- package/pipeline/scripts/smoke-cost-summary.sh +4 -4
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +50 -9
- package/pipeline/scripts/smoke-cross-phase-cohesion.sh +5 -5
- package/pipeline/scripts/smoke-delete-flow.sh +5 -5
- package/pipeline/scripts/smoke-dev-critic.sh +2 -2
- package/pipeline/scripts/smoke-diff-explain.sh +22 -3
- package/pipeline/scripts/smoke-diff-risk.sh +1 -1
- package/pipeline/scripts/smoke-dynamic-skill-loading.sh +1 -1
- package/pipeline/scripts/smoke-eval-live.sh +4 -4
- package/pipeline/scripts/smoke-evidence-gate.sh +93 -0
- package/pipeline/scripts/smoke-existing-discovery-gate.sh +1 -1
- package/pipeline/scripts/smoke-extract-conventions.sh +163 -0
- package/pipeline/scripts/smoke-figma-android-parity.sh +1 -1
- package/pipeline/scripts/smoke-figma-credential-store.sh +3 -3
- package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +12 -12
- package/pipeline/scripts/smoke-figma-dispatch.sh +5 -5
- package/pipeline/scripts/smoke-figma-sync.sh +1 -1
- package/pipeline/scripts/smoke-gate-hooks.sh +56 -0
- package/pipeline/scripts/smoke-gc-tmp.sh +84 -0
- package/pipeline/scripts/smoke-identity-isolation.sh +7 -7
- package/pipeline/scripts/smoke-install-layout.sh +10 -10
- package/pipeline/scripts/smoke-intent-guard.sh +86 -0
- package/pipeline/scripts/smoke-issue-comment-template.sh +3 -3
- package/pipeline/scripts/smoke-issue-jira-triad.sh +1 -1
- package/pipeline/scripts/smoke-keychain.sh +6 -6
- package/pipeline/scripts/smoke-language-axis.sh +2 -2
- package/pipeline/scripts/smoke-learnings-ledger.sh +86 -0
- package/pipeline/scripts/smoke-lib-scripts.sh +2 -2
- package/pipeline/scripts/smoke-mcp-gate.sh +68 -0
- package/pipeline/scripts/smoke-md-links.sh +8 -0
- package/pipeline/scripts/smoke-md2confluence.sh +126 -0
- package/pipeline/scripts/smoke-metrics-cache-ratio.sh +72 -0
- package/pipeline/scripts/smoke-migrate-state.sh +10 -10
- package/pipeline/scripts/smoke-mode-dispatch-drift.sh +7 -4
- package/pipeline/scripts/smoke-model-fallback.sh +80 -0
- package/pipeline/scripts/smoke-multi-repo-integration.sh +3 -3
- package/pipeline/scripts/smoke-multi-repo-worktree.sh +1 -1
- package/pipeline/scripts/smoke-no-mcp-in-dev-phases.sh +115 -0
- package/pipeline/scripts/smoke-no-token-prompt.sh +31 -15
- package/pipeline/scripts/smoke-pat-audit.sh +26 -5
- package/pipeline/scripts/smoke-per-repo-memory.sh +1 -1
- package/pipeline/scripts/smoke-phase-0-multi-repo.sh +1 -1
- package/pipeline/scripts/smoke-phase-6-multi.sh +2 -2
- package/pipeline/scripts/smoke-phase-banner.sh +1 -1
- package/pipeline/scripts/smoke-phase-tracker.sh +1 -1
- package/pipeline/scripts/smoke-phase0-bridge-contract.sh +4 -4
- package/pipeline/scripts/smoke-phase4-triage.sh +94 -7
- package/pipeline/scripts/smoke-plan-approval-gate.sh +3 -3
- package/pipeline/scripts/smoke-plan-safety.sh +1 -1
- package/pipeline/scripts/smoke-plan-todos.sh +7 -4
- package/pipeline/scripts/smoke-pr-review-actions.sh +2 -2
- package/pipeline/scripts/smoke-pre-commit.sh +34 -2
- package/pipeline/scripts/smoke-pref-migration.sh +1 -1
- package/pipeline/scripts/smoke-prefs-language.sh +5 -5
- package/pipeline/scripts/smoke-progress-contract.sh +3 -3
- package/pipeline/scripts/smoke-prune-logs.sh +87 -0
- package/pipeline/scripts/smoke-push-retry.sh +1 -1
- package/pipeline/scripts/smoke-readme-counts.sh +1 -1
- package/pipeline/scripts/smoke-repo-map.sh +9 -9
- package/pipeline/scripts/smoke-review-watch.sh +12 -0
- package/pipeline/scripts/smoke-run-aggregator.sh +7 -7
- package/pipeline/scripts/smoke-run-metrics.sh +50 -0
- package/pipeline/scripts/smoke-schema-validation.sh +18 -11
- package/pipeline/scripts/smoke-search.sh +5 -5
- package/pipeline/scripts/smoke-shared-runtime.sh +108 -0
- package/pipeline/scripts/smoke-skill-authoring.sh +13 -13
- package/pipeline/scripts/smoke-skill-language.sh +4 -4
- package/pipeline/scripts/smoke-skill-manifest.sh +2 -2
- package/pipeline/scripts/smoke-skill-scan.sh +2 -2
- package/pipeline/scripts/smoke-stack-swap.sh +2 -2
- package/pipeline/scripts/smoke-subagent-validators.sh +8 -5
- package/pipeline/scripts/smoke-sync-adapters.sh +1 -1
- package/pipeline/scripts/smoke-sync-delegation.sh +7 -7
- package/pipeline/scripts/smoke-sync-parity.sh +1 -1
- package/pipeline/scripts/smoke-tasklist-ordering.sh +7 -7
- package/pipeline/scripts/smoke-telemetry.sh +1 -1
- package/pipeline/scripts/smoke-test-gap.sh +5 -5
- package/pipeline/scripts/smoke-token-budget.sh +1 -1
- package/pipeline/scripts/smoke-tracker-contract.sh +6 -6
- package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +9 -1
- package/pipeline/scripts/smoke-triage-memory.sh +2 -2
- package/pipeline/scripts/smoke-url-enrichment.sh +2 -2
- package/pipeline/scripts/smoke-validator-contradiction.sh +1 -1
- package/pipeline/scripts/smoke-validator-gates.sh +164 -0
- package/pipeline/scripts/smoke-vercel-deploy-redact.sh +11 -11
- package/pipeline/scripts/smoke-wiki-integration.sh +2 -2
- package/pipeline/scripts/smoke-work-summary.sh +3 -3
- package/pipeline/scripts/smoke-worktree-path-convention.sh +4 -4
- package/pipeline/scripts/smoke-write-state.sh +2 -2
- package/pipeline/scripts/stack-swap.sh +3 -3
- package/pipeline/scripts/sync-adapters.mjs +37 -10
- package/pipeline/scripts/sync-parity-check.sh +6 -6
- package/pipeline/scripts/test-gap-scan.mjs +11 -13
- package/pipeline/scripts/token-budget-report.mjs +4 -4
- package/pipeline/scripts/triage-memory.mjs +6 -6
- package/pipeline/scripts/uninstall.mjs +42 -4
- package/pipeline/scripts/update-issue-progress.sh +2 -2
- package/pipeline/scripts/validate-analysis.mjs +19 -21
- package/pipeline/scripts/validate-diff-risk.mjs +4 -4
- package/pipeline/scripts/validate-planning.mjs +3 -3
- package/pipeline/scripts/validate-reviewer.mjs +4 -4
- package/pipeline/scripts/validate-schemas.mjs +4 -4
- package/pipeline/scripts/validate-test-gap.mjs +4 -4
- package/pipeline/scripts/validate-triage.mjs +68 -9
- package/pipeline/scripts/verify-skills.sh +7 -7
- package/pipeline/scripts/write-state.mjs +49 -11
- package/pipeline/skills/.skill-manifest.json +245 -149
- package/pipeline/skills/.skills-index.json +236 -47
- package/pipeline/skills/figma-android/README.md +5 -5
- package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +3 -3
- package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +8 -8
- package/pipeline/skills/figma-android/figma-component-test/SKILL.md +4 -4
- package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +5 -5
- package/pipeline/skills/figma-android/figma-to-component/SKILL.md +14 -14
- package/pipeline/skills/figma-common/README.md +29 -29
- package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +20 -15
- package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +35 -30
- package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +35 -30
- package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +20 -20
- package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +32 -32
- package/pipeline/skills/figma-common/figma-commit/REVIEW.md +9 -9
- package/pipeline/skills/figma-common/figma-commit/SKILL.md +25 -20
- package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +11 -6
- package/pipeline/skills/figma-common/figma-component-start/SKILL.md +30 -25
- package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +9 -4
- package/pipeline/skills/figma-common/figma-fix/SKILL.md +27 -22
- package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +38 -38
- package/pipeline/skills/figma-common/figma-issue/SKILL.md +39 -34
- package/pipeline/skills/figma-common/figma-iterate/SKILL.md +20 -15
- package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +44 -39
- package/pipeline/skills/figma-common/figma-mend/SKILL.md +6 -6
- package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +30 -30
- package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +1 -1
- package/pipeline/skills/figma-common/figma-review/SKILL.md +31 -26
- package/pipeline/skills/figma-common/figma-setup/SKILL.md +11 -11
- package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +5 -5
- package/pipeline/skills/figma-common/figma-skip/SKILL.md +6 -6
- package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +12 -12
- package/pipeline/skills/figma-common/figma-utility/SKILL.md +4 -4
- package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +1 -1
- package/pipeline/skills/figma-common/figma-validate/SKILL.md +48 -48
- package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +42 -37
- package/pipeline/skills/figma-common/performance-review-next/SKILL.md +23 -18
- package/pipeline/skills/figma-common/performance-start/SKILL.md +52 -47
- package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +68 -68
- package/pipeline/skills/figma-common/performance-tour/SKILL.md +42 -37
- package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +16 -16
- package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +15 -15
- package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +9 -9
- package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +15 -15
- package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +18 -18
- package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +38 -38
- package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +2 -2
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +12 -12
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +19 -19
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +25 -25
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +7 -7
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +6 -6
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +38 -38
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +3 -3
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +29 -29
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +6 -6
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +3 -3
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +12 -12
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +57 -57
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +6 -6
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +10 -10
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +16 -16
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +23 -23
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +26 -26
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +43 -43
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +17 -17
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +19 -19
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +15 -15
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +39 -39
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +7 -7
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +29 -29
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +9 -9
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +31 -31
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +18 -18
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +16 -16
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +2 -2
- package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +49 -49
- package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +8 -8
- package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +2 -2
- package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +9 -9
- package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +10 -10
- package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +11 -11
- package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +14 -14
- package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +2 -2
- package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +6 -6
- package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +9 -9
- package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +18 -18
- package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +3 -3
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +18 -18
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.example.json +9 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +3 -3
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +3 -3
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +12 -12
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +3 -3
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +26 -26
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +2 -2
- package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +41 -41
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +8 -8
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +7 -7
- package/pipeline/skills/shared/README.md +62 -41
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +39 -39
- package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +44 -44
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +182 -176
- package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +55 -0
- package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +48 -0
- package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +16 -16
- package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +48 -0
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +40 -40
- package/pipeline/skills/shared/core/multi-agent-delete/SKILL.md +33 -30
- package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +26 -26
- package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +22 -22
- package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +6 -6
- package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +12 -12
- package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +20 -20
- package/pipeline/skills/shared/core/multi-agent-garbage-collect/SKILL.md +61 -0
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +22 -22
- package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +15 -15
- package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +12 -12
- package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +14 -14
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +12 -12
- package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +10 -10
- package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +18 -18
- package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +9 -9
- package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +20 -20
- package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +63 -0
- package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +16 -13
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +110 -110
- package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +13 -13
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +22 -22
- package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +18 -18
- package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +13 -13
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +33 -30
- package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +14 -14
- package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +9 -9
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +79 -79
- package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +5 -5
- package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +10 -10
- package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +41 -0
- package/pipeline/skills/shared/external/NOTICE-xcode-build-skills.md +53 -0
- package/pipeline/skills/shared/external/agentflow/SKILL.md +9 -9
- package/pipeline/skills/shared/external/alarmkit/SKILL.md +113 -52
- package/pipeline/skills/shared/external/alarmkit/evals/evals.json +41 -0
- package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +23 -16
- package/pipeline/skills/shared/external/app-clips/SKILL.md +85 -354
- package/pipeline/skills/shared/external/app-clips/evals/evals.json +50 -0
- package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +135 -0
- package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +125 -0
- package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +113 -0
- package/pipeline/skills/shared/external/app-intents/SKILL.md +152 -59
- package/pipeline/skills/shared/external/app-intents/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +161 -118
- package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +289 -392
- package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +46 -0
- package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +174 -0
- package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +191 -0
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +57 -107
- package/pipeline/skills/shared/external/app-store-review/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +35 -12
- package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +28 -26
- package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +53 -62
- package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +7 -1
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +4 -1
- package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +32 -12
- package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +34 -30
- package/pipeline/skills/shared/external/authentication/SKILL.md +134 -138
- package/pipeline/skills/shared/external/authentication/evals/evals.json +48 -0
- package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +56 -29
- package/pipeline/skills/shared/external/authentication/references/passkeys.md +183 -0
- package/pipeline/skills/shared/external/avkit/SKILL.md +497 -0
- package/pipeline/skills/shared/external/avkit/evals/evals.json +55 -0
- package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +668 -0
- package/pipeline/skills/shared/external/background-processing/SKILL.md +29 -29
- package/pipeline/skills/shared/external/background-processing/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +44 -19
- package/pipeline/skills/shared/external/callkit-voip/SKILL.md +136 -99
- package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +27 -8
- package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +7 -6
- package/pipeline/skills/shared/external/clean-code/SKILL.md +2 -2
- package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +63 -56
- package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +7 -4
- package/pipeline/skills/shared/external/contacts-framework/SKILL.md +31 -11
- package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +41 -0
- package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +51 -51
- package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +70 -65
- package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +25 -1
- package/pipeline/skills/shared/external/core-data/SKILL.md +496 -0
- package/pipeline/skills/shared/external/core-data/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/core-motion/SKILL.md +47 -14
- package/pipeline/skills/shared/external/core-motion/evals/evals.json +49 -0
- package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +47 -16
- package/pipeline/skills/shared/external/core-nfc/SKILL.md +43 -54
- package/pipeline/skills/shared/external/core-nfc/evals/evals.json +49 -0
- package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +32 -2
- package/pipeline/skills/shared/external/coreml/SKILL.md +89 -48
- package/pipeline/skills/shared/external/coreml/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +82 -37
- package/pipeline/skills/shared/external/cryptokit/SKILL.md +493 -0
- package/pipeline/skills/shared/external/cryptokit/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +602 -0
- package/pipeline/skills/shared/external/css-modern/SKILL.md +3 -2
- package/pipeline/skills/shared/external/database-patterns/SKILL.md +6 -5
- package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +77 -47
- package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +42 -34
- package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +2 -2
- package/pipeline/skills/shared/external/device-integrity/SKILL.md +136 -176
- package/pipeline/skills/shared/external/device-integrity/evals/evals.json +45 -0
- package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +240 -0
- package/pipeline/skills/shared/external/energykit/SKILL.md +73 -34
- package/pipeline/skills/shared/external/energykit/evals/evals.json +45 -0
- package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +80 -38
- package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +67 -53
- package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +53 -3
- package/pipeline/skills/shared/external/healthkit/SKILL.md +57 -124
- package/pipeline/skills/shared/external/healthkit/evals/evals.json +46 -0
- package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +82 -1
- package/pipeline/skills/shared/external/homekit-matter/SKILL.md +43 -41
- package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +45 -0
- package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +13 -8
- package/pipeline/skills/shared/external/html-semantic/SKILL.md +5 -4
- package/pipeline/skills/shared/external/humanizer/SKILL.md +4 -4
- package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +174 -18
- package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +49 -0
- package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +262 -4
- package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +117 -0
- package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +141 -0
- package/pipeline/skills/shared/external/ios-localization/SKILL.md +67 -14
- package/pipeline/skills/shared/external/ios-localization/evals/evals.json +49 -0
- package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +20 -3
- package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +131 -22
- package/pipeline/skills/shared/external/ios-networking/SKILL.md +69 -22
- package/pipeline/skills/shared/external/ios-networking/evals/evals.json +50 -0
- package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +28 -16
- package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +354 -0
- package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +69 -44
- package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +35 -69
- package/pipeline/skills/shared/external/ios-security/references/file-storage-patterns.md +8 -8
- package/pipeline/skills/shared/external/ios-simulator/SKILL.md +485 -0
- package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +316 -0
- package/pipeline/skills/shared/external/live-activities/SKILL.md +120 -131
- package/pipeline/skills/shared/external/live-activities/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/live-activities/references/{live-activity-patterns.md → activitykit-patterns.md} +148 -63
- package/pipeline/skills/shared/external/mapkit-location/SKILL.md +40 -21
- package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/mapkit-location/references/{corelocation-patterns.md → mapkit-corelocation-patterns.md} +88 -41
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +27 -24
- package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +129 -172
- package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +46 -0
- package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +180 -0
- package/pipeline/skills/shared/external/musickit-audio/SKILL.md +45 -18
- package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +26 -6
- package/pipeline/skills/shared/external/natural-language/SKILL.md +48 -18
- package/pipeline/skills/shared/external/natural-language/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +20 -7
- package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +4 -3
- package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +156 -66
- package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +51 -0
- package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +69 -19
- package/pipeline/skills/shared/external/pdfkit/SKILL.md +499 -0
- package/pipeline/skills/shared/external/pdfkit/evals/evals.json +42 -0
- package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +844 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +122 -28
- package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +49 -18
- package/pipeline/skills/shared/external/permissionkit/SKILL.md +100 -51
- package/pipeline/skills/shared/external/permissionkit/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +48 -8
- package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +13 -15
- package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +4 -4
- package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +2 -2
- package/pipeline/skills/shared/external/photos-camera-media/references/{photospicker-patterns.md → photokit-patterns.md} +3 -3
- package/pipeline/skills/shared/external/push-notifications/SKILL.md +45 -48
- package/pipeline/skills/shared/external/push-notifications/evals/evals.json +46 -0
- package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +22 -33
- package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +56 -37
- package/pipeline/skills/shared/external/python-patterns/SKILL.md +4 -3
- package/pipeline/skills/shared/external/react-best-practices/SKILL.md +1 -0
- package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +74 -53
- package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +10 -10
- package/pipeline/skills/shared/external/rest-api-design/SKILL.md +21 -20
- package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +81 -64
- package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +48 -9
- package/pipeline/skills/shared/external/speech-recognition/SKILL.md +118 -104
- package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +49 -0
- package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +171 -0
- package/pipeline/skills/shared/external/spm-build-analysis/SKILL.md +93 -0
- package/pipeline/skills/shared/external/spm-build-analysis/references/build-optimization-sources.md +155 -0
- package/pipeline/skills/shared/external/spm-build-analysis/references/recommendation-format.md +85 -0
- package/pipeline/skills/shared/external/spm-build-analysis/references/spm-analysis-checks.md +105 -0
- package/pipeline/skills/shared/external/spm-build-analysis/scripts/check_spm_pins.py +118 -0
- package/pipeline/skills/shared/external/storekit/SKILL.md +110 -44
- package/pipeline/skills/shared/external/storekit/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +94 -43
- package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +82 -33
- package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +449 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +50 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +164 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +219 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +184 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +158 -0
- package/pipeline/skills/shared/external/swift-architecture/SKILL.md +499 -0
- package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +45 -0
- package/pipeline/skills/shared/external/swift-charts/SKILL.md +52 -40
- package/pipeline/skills/shared/external/swift-charts/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +92 -11
- package/pipeline/skills/shared/external/swift-codable/SKILL.md +43 -16
- package/pipeline/skills/shared/external/swift-codable/evals/evals.json +43 -0
- package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +50 -30
- package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +11 -4
- package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +113 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +150 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/{swift-6-2-concurrency.md → concurrency-patterns.md} +22 -11
- package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +52 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +2 -2
- package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +21 -15
- package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +3 -3
- package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +2 -2
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/actors.md +3 -3
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/async-streams.md +1 -1
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/bridging.md +3 -3
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/bug-patterns.md +3 -3
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/cancellation.md +8 -8
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/diagnostics.md +1 -1
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/hotspots.md +2 -2
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/interop.md +4 -4
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/new-features.md +1 -1
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/structured.md +2 -2
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/testing.md +2 -2
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/unstructured.md +3 -3
- package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +339 -0
- package/pipeline/skills/shared/external/swift-language/SKILL.md +33 -34
- package/pipeline/skills/shared/external/swift-language/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +97 -0
- package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +19 -6
- package/pipeline/skills/shared/external/swift-security/SKILL.md +195 -0
- package/pipeline/skills/shared/external/swift-security/evals/evals.json +48 -0
- package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +595 -0
- package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +611 -0
- package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +708 -0
- package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +573 -0
- package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +752 -0
- package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +538 -0
- package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +530 -0
- package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +543 -0
- package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +620 -0
- package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +515 -0
- package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +496 -0
- package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +747 -0
- package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +566 -0
- package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +813 -0
- package/pipeline/skills/shared/external/swift-testing/SKILL.md +97 -297
- package/pipeline/skills/shared/external/swift-testing/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +123 -0
- package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +162 -34
- package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +2 -2
- package/pipeline/skills/shared/external/swift-testing-pro/references/async-tests.md +3 -3
- package/pipeline/skills/shared/external/swift-testing-pro/references/core-rules.md +2 -2
- package/pipeline/skills/shared/external/swift-testing-pro/references/migrating-from-xctest.md +5 -5
- package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +3 -3
- package/pipeline/skills/shared/external/swift-testing-pro/references/writing-better-tests.md +5 -5
- package/pipeline/skills/shared/external/swiftdata/SKILL.md +44 -23
- package/pipeline/skills/shared/external/swiftdata/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +3 -3
- package/pipeline/skills/shared/external/swiftdata/references/indexing.md +75 -0
- package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +54 -0
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +14 -10
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +5 -5
- package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +2 -2
- package/pipeline/skills/shared/external/swiftdata-pro/references/class-inheritance.md +2 -2
- package/pipeline/skills/shared/external/swiftdata-pro/references/cloudkit.md +1 -1
- package/pipeline/skills/shared/external/swiftdata-pro/references/core-rules.md +6 -6
- package/pipeline/skills/shared/external/swiftlint/SKILL.md +337 -0
- package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +297 -0
- package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +170 -0
- package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +307 -0
- package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +35 -0
- package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +306 -0
- package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +56 -65
- package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +48 -44
- package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +6 -6
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts-accessibility.md +13 -13
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts.md +3 -3
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/image-optimization.md +1 -1
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/latest-apis.md +4 -4
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/layout-best-practices.md +2 -2
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/list-patterns.md +1 -1
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-scenes.md +16 -16
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-views.md +11 -11
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-window-styling.md +7 -7
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/state-management.md +5 -5
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/view-structure.md +6 -6
- package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +38 -16
- package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +13 -3
- package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +32 -28
- package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +1 -1
- package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +202 -41
- package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +16 -25
- package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +71 -26
- package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +284 -65
- package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +387 -0
- package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +10 -10
- package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +15 -3
- package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +2 -2
- package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +1 -1
- package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +51 -25
- package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +78 -6
- package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +161 -16
- package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +85 -27
- package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +37 -33
- package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +39 -51
- package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +204 -30
- package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +226 -21
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +220 -20
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +159 -34
- package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +27 -0
- package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +2 -2
- package/pipeline/skills/shared/external/swiftui-pro/references/accessibility.md +4 -4
- package/pipeline/skills/shared/external/swiftui-pro/references/api.md +1 -1
- package/pipeline/skills/shared/external/swiftui-pro/references/data.md +2 -2
- package/pipeline/skills/shared/external/swiftui-pro/references/design.md +4 -4
- package/pipeline/skills/shared/external/swiftui-pro/references/hygiene.md +2 -2
- package/pipeline/skills/shared/external/swiftui-pro/references/navigation.md +1 -1
- package/pipeline/skills/shared/external/swiftui-pro/references/performance.md +1 -1
- package/pipeline/skills/shared/external/swiftui-pro/references/swift.md +2 -2
- package/pipeline/skills/shared/external/swiftui-pro/references/views.md +2 -2
- package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +1 -1
- package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +12 -12
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +3 -3
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +1 -1
- package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +11 -11
- package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +124 -10
- package/pipeline/skills/shared/external/tailwind-css/SKILL.md +3 -2
- package/pipeline/skills/shared/external/testing-backend/SKILL.md +2 -1
- package/pipeline/skills/shared/external/tipkit/SKILL.md +3 -3
- package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +9 -9
- package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +17 -16
- package/pipeline/skills/shared/external/vision-framework/SKILL.md +11 -11
- package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +1 -1
- package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +5 -5
- package/pipeline/skills/shared/external/vue-composition/SKILL.md +7 -6
- package/pipeline/skills/shared/external/weatherkit/SKILL.md +3 -3
- package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +9 -9
- package/pipeline/skills/shared/external/web-accessibility/SKILL.md +1 -0
- package/pipeline/skills/shared/external/web-performance/SKILL.md +8 -7
- package/pipeline/skills/shared/external/web-testing/SKILL.md +7 -6
- package/pipeline/skills/shared/external/widgetkit/SKILL.md +23 -17
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +99 -0
- package/pipeline/skills/shared/external/xcode-build-benchmark/SKILL.md +89 -0
- package/pipeline/skills/shared/external/xcode-build-benchmark/references/benchmark-artifacts.md +94 -0
- package/pipeline/skills/shared/external/xcode-build-benchmark/references/benchmarking-workflow.md +67 -0
- package/pipeline/skills/shared/external/xcode-build-benchmark/schemas/build-benchmark.schema.json +230 -0
- package/pipeline/skills/shared/external/xcode-build-benchmark/scripts/benchmark_builds.py +308 -0
- package/pipeline/skills/shared/external/xcode-build-fixer/SKILL.md +219 -0
- package/pipeline/skills/shared/external/xcode-build-fixer/references/build-settings-best-practices.md +216 -0
- package/pipeline/skills/shared/external/xcode-build-fixer/references/fix-patterns.md +290 -0
- package/pipeline/skills/shared/external/xcode-build-fixer/references/recommendation-format.md +85 -0
- package/pipeline/skills/shared/external/xcode-build-fixer/scripts/benchmark_builds.py +308 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/SKILL.md +157 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/references/benchmark-artifacts.md +94 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/references/build-settings-best-practices.md +216 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/references/orchestration-report-template.md +143 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/references/recommendation-format.md +85 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/scripts/benchmark_builds.py +308 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/scripts/diagnose_compilation.py +273 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/scripts/generate_optimization_report.py +533 -0
- package/pipeline/skills/shared/external/xcode-compilation-analyzer/SKILL.md +90 -0
- package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/build-optimization-sources.md +155 -0
- package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/code-compilation-checks.md +106 -0
- package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/recommendation-format.md +85 -0
- package/pipeline/skills/shared/external/xcode-compilation-analyzer/scripts/diagnose_compilation.py +273 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/SKILL.md +77 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/references/build-optimization-sources.md +155 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/references/build-settings-best-practices.md +216 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/references/project-audit-checks.md +101 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/references/recommendation-format.md +85 -0
- package/pipeline/skills/skills-index.md +213 -192
- package/docs/GENERICITY-REVIEW.md +0 -277
- package/docs/STABILITY-FIX-PLAN.md +0 -168
- package/pipeline/scripts/.last-figma-sync-plan.json +0 -23
- package/pipeline/scripts/README-figma-smokes.md +0 -34
- package/pipeline/scripts/figma-placeholder-map.json +0 -191
- package/pipeline/scripts/import-figma-skills.sh +0 -253
- package/pipeline/scripts/smoke-figma-config-schema.sh +0 -144
- package/pipeline/scripts/smoke-figma-skill-import.sh +0 -174
- package/pipeline/scripts/smoke-install-leak-gate.sh +0 -125
- package/pipeline/scripts/smoke-personal-data.sh +0 -82
- package/pipeline/scripts/sync-figma-source.sh +0 -228
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.json +0 -94
- package/pipeline/skills/shared/external/app-store-review/references/code-signing.md +0 -259
- package/pipeline/skills/shared/external/app-store-review/references/rejection-patterns.md +0 -152
- package/pipeline/skills/shared/external/pencilkit-drawing/references/paperkit-integration.md +0 -376
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Task orchestrator
|
|
2
|
+
description: "Task orchestrator - full pipeline via Jira ID + branch or GitHub Issue URL: analysis, plan, TDD development, parallel review + Fable triage (CLI-aware: 2-model on Claude Code, 3-model on Copilot CLI), commit, log"
|
|
3
3
|
allowed-tools: Agent, Bash, Read, Write, Edit, Glob, Grep, TaskCreate, TaskUpdate, TaskList, TaskGet, AskUserQuestion, WebFetch, WebSearch, NotebookEdit, Skill
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Multi-Agent Task Orchestrator
|
|
7
7
|
|
|
8
|
+
> **MUST: Figma MCP is BLOCKING for any task with a Figma reference.** Before any UI synthesis runs in this pipeline (analysis, planning, dev, or rework), call `mcp__claude_ai_Figma__get_design_context` for every referenced frame and use the `CodeConnectSnippet` component name verbatim. Backend-only tasks are exempt. See `refs/rules.md` "User Interaction Discipline" and `pipeline/rules/figma-pipeline.md` "MUST: Figma MCP-first (BLOCKING)".
|
|
9
|
+
|
|
8
10
|
Parse the user input and route to the correct sub-command.
|
|
9
11
|
|
|
10
12
|
**Input**: $ARGUMENTS
|
|
@@ -13,7 +15,7 @@ Parse the user input and route to the correct sub-command.
|
|
|
13
15
|
|
|
14
16
|
## Canonical Invocation (per CLI)
|
|
15
17
|
|
|
16
|
-
Each helper subcommand has its own slash entry
|
|
18
|
+
Each helper subcommand has its own slash entry - use the CLI-native form:
|
|
17
19
|
|
|
18
20
|
| Helper | Claude Code | Copilot CLI |
|
|
19
21
|
|--------|-------------|-------------|
|
|
@@ -32,7 +34,7 @@ the canonical invocations and the only forms surfaced in autocomplete.
|
|
|
32
34
|
|
|
33
35
|
## Input Parsing
|
|
34
36
|
|
|
35
|
-
Classification schema lives in `commands/multi-agent/_input-parser.md`
|
|
37
|
+
Classification schema lives in `commands/multi-agent/_input-parser.md` - canonical source. Summary:
|
|
36
38
|
|
|
37
39
|
| # | Pattern | Type | Picker flow |
|
|
38
40
|
|---|---------|------|--------|
|
|
@@ -45,42 +47,44 @@ Classification schema lives in `commands/multi-agent/_input-parser.md` — canon
|
|
|
45
47
|
| 7 | `issue` | full picker | account → repo (multi) → issue → maturity → dev-context |
|
|
46
48
|
| 8 | Free-text | `freetext` | account → repo (single) → dev-context (maturity skip) |
|
|
47
49
|
|
|
48
|
-
**Rule**: Whatever the type, **account is always asked** (autopilot picks a default). After issue fetch, **maturity check is mandatory**
|
|
50
|
+
**Rule**: Whatever the type, **account is always asked** (autopilot picks a default). After issue fetch, **maturity check is mandatory** - blockers halt the pipeline. All picker UI strings render in English (`promptLanguage` is locked to `en`).
|
|
49
51
|
|
|
50
52
|
Lib scripts (`~/.claude/lib/`):
|
|
51
|
-
- `account-resolver.sh`
|
|
52
|
-
- `issue-fetcher.sh`
|
|
53
|
-
- `repo-cache.sh`
|
|
54
|
-
- `submodule-detector.sh`
|
|
55
|
-
- `multi-repo-pipeline.sh`
|
|
53
|
+
- `account-resolver.sh` - keychain account inventory
|
|
54
|
+
- `issue-fetcher.sh` - Jira/GitHub fetch + maturity scoring
|
|
55
|
+
- `repo-cache.sh` - TTL-cached repo list
|
|
56
|
+
- `submodule-detector.sh` - `.gitmodules` parse → dev-context suggestions
|
|
57
|
+
- `multi-repo-pipeline.sh` - worktree/branch/commit/PR orchestration
|
|
56
58
|
|
|
57
59
|
## Routing
|
|
58
60
|
|
|
59
61
|
| Input Pattern | Action |
|
|
60
62
|
|---------------|--------|
|
|
61
|
-
| `#N`, `316` | GitHub Issue #
|
|
62
|
-
| `https://github.com/.../issues/N` | GitHub Issue URL
|
|
63
|
-
| `https://{JIRA_HOST}/browse/{JIRA_KEY}-XXXXX` | Jira URL
|
|
64
|
-
| `{JIRA_KEY}-XXXXX` | Jira ID
|
|
65
|
-
| Free-text | Bug/feature description
|
|
66
|
-
| `jira` | 4-step picker (hesap → proje → issue → dev-context)
|
|
67
|
-
| `issue` | 4-step picker (hesap → repo → issue → dev-context)
|
|
63
|
+
| `#N`, `316` | GitHub Issue # - parse, select project, start pipeline |
|
|
64
|
+
| `https://github.com/.../issues/N` | GitHub Issue URL - fetch, auto-detect or ask project |
|
|
65
|
+
| `https://{JIRA_HOST}/browse/{JIRA_KEY}-XXXXX` | Jira URL - fetch, select project, start pipeline |
|
|
66
|
+
| `{JIRA_KEY}-XXXXX` | Jira ID - fetch, select project, start pipeline |
|
|
67
|
+
| Free-text | Bug/feature description - select project, start pipeline |
|
|
68
|
+
| `jira` | 4-step picker (hesap → proje → issue → dev-context) - `commands/multi-agent/jira.md` delegate |
|
|
69
|
+
| `issue` | 4-step picker (hesap → repo → issue → dev-context) - `commands/multi-agent/issue.md` delegate |
|
|
68
70
|
| `status` | List all tasks (scan `$HOME/.claude/logs/multi-agent/`) |
|
|
69
71
|
| `log [id]` | Show task log |
|
|
70
72
|
| `resume [id]` | Resume paused task |
|
|
71
73
|
| `kill [id]` | Delete worktree (logs preserved). Confirm first |
|
|
72
74
|
| `clear-logs` | Clean global log directory. Keep counter |
|
|
73
|
-
| `purge` | Worktree + logs + counter
|
|
75
|
+
| `purge` | Worktree + logs + counter - full reset (double confirm) |
|
|
74
76
|
| `review` | Review current diff only (lightweight, no worktree) |
|
|
77
|
+
| `analysis ["<feature>"]` | Standalone feature-spec analizi: Figma / Swagger / Confluence / Jira / repo girdileri sabit 7-bölümlük şablona dökülür, humanizer'dan geçer, Local/Confluence/Jira hedef(ler)ine post edilir. Worktree veya commit yok. Dev'e zincirleme yok. |
|
|
78
|
+
| `build-optimize` | iOS-only Xcode build performance wrapper. Vendored `xcode-build-orchestrator`'a dispatch eder; benchmark + compilation / project / SPM analyzer'lar + recommend-first plan `.build-benchmark/optimization-plan.md`. Non-iOS stack'lerde fail-fast. |
|
|
75
79
|
| `channels [PR-url\|#N\|Jira-url\|Jira-id] [--channels pr,jira,confluence,wiki] [--content normal,test,auto-diff,note] [--message "..."]` | Post task report to multi-select channels (PR description, Jira comment, Confluence page, Wiki pages) with multi-select content sources. Humanizer pass per-channel. Bitbucket PR updates use reviewer-preserving PUT. Phase 7 delegates to this command; also invocable post-hoc for fixes made outside the pipeline. No worktree. |
|
|
76
|
-
| `test` or `test [args]` | UI Bug Hunter
|
|
77
|
-
| `manual-test [#id]` | Phase 5 standalone Manual Test
|
|
80
|
+
| `test` or `test [args]` | UI Bug Hunter - screenshot + tap + analyze on booted simulator via MCP (read `$HOME/.claude/commands/sim-test.md`). `/multi-agent:test` also resolves here via the `commands/multi-agent/test.md` delegate. |
|
|
81
|
+
| `manual-test [#id]` | Phase 5 standalone Manual Test - checks out the task branch, prints Xcode / SourceTree hints, waits for user verdict (`ok` / `fix: ...`). |
|
|
78
82
|
| `stack [ios\|android\|backend\|mobile\|all]` | Swap skills for next conversation. No arg = show current stack. |
|
|
79
83
|
| `language [en\|tr]` | Show or set the assistant `outputLanguage` (explanations and chat replies). `promptLanguage` is locked to `en` and is not toggleable. No arg = show current `outputLanguage`. With `en` or `tr` = set and persist `outputLanguage`. External payloads (commits, PR bodies, Jira) stay English. |
|
|
80
84
|
| `setup` | Keychain token + Git Identity onboarding |
|
|
81
|
-
| `--dev` | Dev-only: Init -> Dev(
|
|
82
|
-
| `--dev autopilot` or `dev-autopilot` | Fastest path
|
|
83
|
-
| `--local` | No worktree
|
|
85
|
+
| `--dev` | Dev-only: Init -> Dev(Fable) -> Commit -> Report |
|
|
86
|
+
| `--dev autopilot` or `dev-autopilot` | Fastest path - Dev(Fable) + zero interaction |
|
|
87
|
+
| `--local` | No worktree - works directly on local branch |
|
|
84
88
|
| `autopilot` | Skip user confirmations, auto commit/PR |
|
|
85
89
|
| No args / `help` | Show usage guide |
|
|
86
90
|
|
|
@@ -92,7 +96,7 @@ This command uses lazy loading for token efficiency. Read the relevant sub-file
|
|
|
92
96
|
|
|
93
97
|
**File layout:**
|
|
94
98
|
- `commands/multi-agent/*.md` → **invocable actions** (each gets its own `/multi-agent:<name>` slash command)
|
|
95
|
-
- `commands/multi-agent/refs/**` → **internal references**, read by the main command, never invoked directly (surface as `/multi-agent:refs:...` in autocomplete
|
|
99
|
+
- `commands/multi-agent/refs/**` → **internal references**, read by the main command, never invoked directly (surface as `/multi-agent:refs:...` in autocomplete - the prefix signals "not an action")
|
|
96
100
|
|
|
97
101
|
| Route | File to Read |
|
|
98
102
|
|-------|-------------|
|
|
@@ -104,14 +108,16 @@ This command uses lazy loading for token efficiency. Read the relevant sub-file
|
|
|
104
108
|
| `help` | `$HOME/.claude/commands/multi-agent/help.md` |
|
|
105
109
|
| `channels` | `$HOME/.claude/commands/multi-agent/channels.md` |
|
|
106
110
|
| `sync` | `$HOME/.claude/commands/multi-agent/sync.md` |
|
|
107
|
-
| `clear-logs` | Handled inline
|
|
111
|
+
| `clear-logs` | Handled inline - scan + delete agent-log.md/agent-state.json files |
|
|
108
112
|
| `review` | `$HOME/.claude/commands/multi-agent/review.md` |
|
|
113
|
+
| `analysis` | `$HOME/.claude/commands/multi-agent/analysis.md` |
|
|
114
|
+
| `build-optimize` | `$HOME/.claude/commands/multi-agent/build-optimize.md` |
|
|
109
115
|
| `local` | `$HOME/.claude/commands/multi-agent/local.md` |
|
|
110
116
|
| `local-autopilot` | `$HOME/.claude/commands/multi-agent/local-autopilot.md` |
|
|
111
117
|
| `dev-local` | `$HOME/.claude/commands/multi-agent/dev-local.md` |
|
|
112
118
|
| `dev-local-autopilot` | `$HOME/.claude/commands/multi-agent/dev-local-autopilot.md` |
|
|
113
119
|
| `stack` | `$HOME/.claude/commands/multi-agent/stack.md` |
|
|
114
|
-
| `language` | Handled inline
|
|
120
|
+
| `language` | Handled inline - set/show prompt language in preferences |
|
|
115
121
|
| SwiftUI component task (iOS) | `$HOME/.claude/commands/multi-agent/refs/swiftui-guide.md` |
|
|
116
122
|
| Jetpack Compose task (Android) | `$HOME/.claude/commands/multi-agent/refs/android-guide.md` |
|
|
117
123
|
| Backend API task | `$HOME/.claude/commands/multi-agent/refs/backend-guide.md` |
|
|
@@ -122,7 +128,7 @@ This command uses lazy loading for token efficiency. Read the relevant sub-file
|
|
|
122
128
|
| `test` | `$HOME/.claude/commands/sim-test.md` (colon-form `/multi-agent:test` uses the delegate at `commands/multi-agent/test.md`) |
|
|
123
129
|
| `manual-test` | `$HOME/.claude/commands/multi-agent/manual-test.md` |
|
|
124
130
|
|
|
125
|
-
**Modifier flags** (`--dev`, `--local`, `autopilot`) and **ops** (`status`, `log`, `resume`, `kill`, `clear-logs`, `purge`, `review`) are parsed inline by this file
|
|
131
|
+
**Modifier flags** (`--dev`, `--local`, `autopilot`) and **ops** (`status`, `log`, `resume`, `kill`, `clear-logs`, `purge`, `review`) are parsed inline by this file - no separate spec files, they compose with the pipeline or do one-shot work.
|
|
126
132
|
|
|
127
133
|
**How**: After routing, `Read` the relevant file and follow its instructions. Only load what the current action needs.
|
|
128
134
|
|
|
@@ -134,12 +140,12 @@ This command uses lazy loading for token efficiency. Read the relevant sub-file
|
|
|
134
140
|
- Multiple stacks -> load all relevant guides
|
|
135
141
|
|
|
136
142
|
**Agent definitions** (used in Phase 1 and Phase 4):
|
|
137
|
-
- `$HOME/.claude/agents/code-reviewer.md`
|
|
138
|
-
- `$HOME/.claude/agents/explorer.md`
|
|
139
|
-
- `$HOME/.claude/agents/ios-architect.md`
|
|
140
|
-
- `$HOME/.claude/agents/android-architect.md`
|
|
141
|
-
- `$HOME/.claude/agents/backend-architect.md`
|
|
142
|
-
- `$HOME/.claude/agents/security-auditor.md`
|
|
143
|
+
- `$HOME/.claude/agents/code-reviewer.md` - Phase 4 reviewer persona (`preferredModel: opus`; Phase 4 overrides Reviewer 3 to `sonnet`)
|
|
144
|
+
- `$HOME/.claude/agents/explorer.md` - Phase 1 codebase scan persona (`preferredModel: sonnet` - scan work, cost-efficient)
|
|
145
|
+
- `$HOME/.claude/agents/ios-architect.md` - iOS architecture review (`preferredModel: opus`)
|
|
146
|
+
- `$HOME/.claude/agents/android-architect.md` - Android architecture review (`preferredModel: opus`)
|
|
147
|
+
- `$HOME/.claude/agents/backend-architect.md` - Backend/API architecture review (`preferredModel: opus`)
|
|
148
|
+
- `$HOME/.claude/agents/security-auditor.md` - Security audit (`preferredModel: opus`)
|
|
143
149
|
|
|
144
150
|
**Per-persona model routing:** Before each Agent dispatch, the orchestrator reads `preferredModel` from the persona file and exports `CLAUDE_CODE_SUBAGENT_MODEL` (Claude Code) / passes `--model` (Copilot CLI). Precedence: per-dispatch `PHASE_MODEL_OVERRIDE` > persona `preferredModel` > `opus`. Full contract: `skills/shared/core/multi-agent/SKILL.md#agent-dispatch--per-persona-model-routing-v610`.
|
|
145
151
|
|
|
@@ -147,7 +153,7 @@ This command uses lazy loading for token efficiency. Read the relevant sub-file
|
|
|
147
153
|
|
|
148
154
|
## language Command
|
|
149
155
|
|
|
150
|
-
Toggles only `outputLanguage` (`promptLanguage` is locked to `"en"`
|
|
156
|
+
Toggles only `outputLanguage` (`promptLanguage` is locked to `"en"` - see `refs/rules.md` section "Language Application"). Full spec: `pipeline/commands/multi-agent/language.md`.
|
|
151
157
|
|
|
152
158
|
---
|
|
153
159
|
|
|
@@ -155,14 +161,14 @@ Toggles only `outputLanguage` (`promptLanguage` is locked to `"en"` — see `ref
|
|
|
155
161
|
|
|
156
162
|
Delegates to `commands/multi-agent/jira.md` (4-step picker). Read that file, then apply:
|
|
157
163
|
|
|
158
|
-
1. **Pick account**
|
|
159
|
-
2. **Pick projects (multi)**
|
|
160
|
-
3. **Pick issue**
|
|
161
|
-
4. **Maturity check**
|
|
162
|
-
5. **Dev context** (`_dev-context.md`)
|
|
164
|
+
1. **Pick account** - `_account-picker.md` (`lib/account-resolver.sh --providers jira`)
|
|
165
|
+
2. **Pick projects (multi)** - Jira project list, multi-select
|
|
166
|
+
3. **Pick issue** - aggregate across selected projects, `lib/issue-fetcher.sh` with maturity check
|
|
167
|
+
4. **Maturity check** - halt on blocker, prompt on warning (autopilot auto-continues)
|
|
168
|
+
5. **Dev context** (`_dev-context.md`) - extra repo selection
|
|
163
169
|
6. → Interactive Launcher (branch/mode/autopilot) → Phase 0
|
|
164
170
|
|
|
165
|
-
Steps 1
|
|
171
|
+
Steps 1-5 are detailed in `jira.md`; the Interactive Launcher (below) consumes the result.
|
|
166
172
|
|
|
167
173
|
---
|
|
168
174
|
|
|
@@ -170,11 +176,11 @@ Steps 1–5 are detailed in `jira.md`; the Interactive Launcher (below) consumes
|
|
|
170
176
|
|
|
171
177
|
Delegates to `commands/multi-agent/issue.md` (4-step picker). Read that file, then apply:
|
|
172
178
|
|
|
173
|
-
1. **Pick account**
|
|
174
|
-
2. **Pick repos (multi)**
|
|
175
|
-
3. **Pick issue**
|
|
176
|
-
4. **Maturity check**
|
|
177
|
-
5. **Dev context** (`_dev-context.md`)
|
|
179
|
+
1. **Pick account** - `_account-picker.md` (`--providers github`)
|
|
180
|
+
2. **Pick repos (multi)** - `lib/repo-cache.sh github <owner>`, multi-select
|
|
181
|
+
3. **Pick issue** - aggregate across repos (`gh issue list`), maturity check
|
|
182
|
+
4. **Maturity check** - `lib/issue-fetcher.sh` maturity field; blocker halts, warning prompts
|
|
183
|
+
5. **Dev context** (`_dev-context.md`) - submodule auto-suggest + extra repos
|
|
178
184
|
6. → Interactive Launcher → Phase 0
|
|
179
185
|
|
|
180
186
|
---
|
|
@@ -183,12 +189,12 @@ Delegates to `commands/multi-agent/issue.md` (4-step picker). Read that file, th
|
|
|
183
189
|
|
|
184
190
|
When the user supplies an ID/URL/free-text:
|
|
185
191
|
|
|
186
|
-
1. **Detect type**
|
|
187
|
-
2. **Pick account**
|
|
188
|
-
3. **Fetch issue**
|
|
189
|
-
4. **Repo picker**
|
|
190
|
-
5. **Maturity check**
|
|
191
|
-
6. **Dev context**
|
|
192
|
+
1. **Detect type** - per `_input-parser.md`
|
|
193
|
+
2. **Pick account** - always asked (autopilot picks default)
|
|
194
|
+
3. **Fetch issue** - `lib/issue-fetcher.sh "$INPUT"` (Jira/GitHub fetch + maturity)
|
|
195
|
+
4. **Repo picker** - only for `gh-num` (e.g. `316`) when repo is ambiguous, multi-select
|
|
196
|
+
5. **Maturity check** - blocker halts (autopilot too), warning prompt/log
|
|
197
|
+
6. **Dev context** - always runs, empty submit allowed
|
|
192
198
|
7. → Interactive Launcher → Phase 0
|
|
193
199
|
|
|
194
200
|
---
|
|
@@ -197,7 +203,7 @@ When the user supplies an ID/URL/free-text:
|
|
|
197
203
|
|
|
198
204
|
After the user selects an issue from either `jira` or `issue` command:
|
|
199
205
|
|
|
200
|
-
### Step 1
|
|
206
|
+
### Step 1 - Branch Selection
|
|
201
207
|
Same as Phase 0 Step 3: fetch remote branches, sort (develop* first → release/* → main/master), present with Recent suggestion from prefs:
|
|
202
208
|
```
|
|
203
209
|
Base branch:
|
|
@@ -210,15 +216,15 @@ Select [number] or enter for suggested:
|
|
|
210
216
|
```
|
|
211
217
|
Save to `prefs.projects[{project}].branches`.
|
|
212
218
|
|
|
213
|
-
### Step 2
|
|
219
|
+
### Step 2 - Mode Selection
|
|
214
220
|
```
|
|
215
221
|
Pipeline mode:
|
|
216
|
-
1. Full pipeline (8 phases, Sonnet dev, parallel review + triage
|
|
217
|
-
2. --dev (fast: Init → Dev(
|
|
222
|
+
1. Full pipeline (8 phases, Sonnet dev, parallel review + triage - CLI-aware reviewer set)
|
|
223
|
+
2. --dev (fast: Init → Dev(Fable) → Commit → Report)
|
|
218
224
|
Select [1/2]:
|
|
219
225
|
```
|
|
220
226
|
|
|
221
|
-
### Step 3
|
|
227
|
+
### Step 3 - Autopilot
|
|
222
228
|
```
|
|
223
229
|
Enable autopilot? (skip confirmations, auto commit/PR)
|
|
224
230
|
1. Yes
|
|
@@ -226,12 +232,12 @@ Enable autopilot? (skip confirmations, auto commit/PR)
|
|
|
226
232
|
Select [1/2]:
|
|
227
233
|
```
|
|
228
234
|
|
|
229
|
-
### Step 4
|
|
235
|
+
### Step 4 - Launch
|
|
230
236
|
Compose the final command arguments and start the pipeline:
|
|
231
237
|
- `jira` source → input type is `jira-id` (e.g. `PROJ-1234`)
|
|
232
238
|
- `issue` source → input type is `github-issue-url` (e.g. `https://github.com/org/repo/issues/610`)
|
|
233
239
|
|
|
234
|
-
Pass selected base branch + mode flags. The pipeline enters Phase 0 Step 1 with the issue already fetched
|
|
240
|
+
Pass selected base branch + mode flags. The pipeline enters Phase 0 Step 1 with the issue already fetched - skip redundant API calls.
|
|
235
241
|
|
|
236
242
|
---
|
|
237
243
|
|
|
@@ -241,15 +247,15 @@ When called with `review`:
|
|
|
241
247
|
1. Detect current branch and project from cwd (or ask)
|
|
242
248
|
2. Get diff: `git diff HEAD` (unstaged + staged)
|
|
243
249
|
3. If no diff, get diff against base branch: `git diff origin/{baseBranch}...HEAD`
|
|
244
|
-
4. Launch Phase 4 review (parallel +
|
|
245
|
-
5. No worktree, no state file
|
|
250
|
+
4. Launch Phase 4 review (parallel + Fable triage - 2-model on Claude Code, 3-model on Copilot CLI) on the diff
|
|
251
|
+
5. No worktree, no state file - lightweight one-shot review
|
|
246
252
|
6. Print findings to terminal
|
|
247
253
|
|
|
248
254
|
---
|
|
249
255
|
|
|
250
256
|
## Rules
|
|
251
257
|
|
|
252
|
-
**Non-negotiable rules that apply to every phase, every mode.** Full reference at `$HOME/.claude/commands/multi-agent/refs/rules.md`
|
|
258
|
+
**Non-negotiable rules that apply to every phase, every mode.** Full reference at `$HOME/.claude/commands/multi-agent/refs/rules.md` - read before any invocation that writes code, commits, or posts to external systems.
|
|
253
259
|
|
|
254
260
|
Quick pointers:
|
|
255
261
|
- No "Copilot/AI/generated by" attribution. Ever.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Mobile UI Bug Hunter
|
|
2
|
+
description: "Mobile UI Bug Hunter - iOS Simulator (simctl) + Android Emulator (adb) - auto-detects platform"
|
|
3
3
|
allowed-tools: Agent, Bash, Read, Write, Edit, TaskCreate, TaskUpdate, TaskList, TaskGet, mcp__dev_toolkit__ios_list_devices, mcp__dev_toolkit__ios_boot_device, mcp__dev_toolkit__ios_screenshot, mcp__dev_toolkit__ios_tap, mcp__dev_toolkit__ios_swipe, mcp__dev_toolkit__ios_type_text, mcp__dev_toolkit__ios_launch_app, mcp__dev_toolkit__ios_terminate_app, mcp__dev_toolkit__ios_list_apps, mcp__dev_toolkit__ios_go_home, mcp__dev_toolkit__ios_set_appearance, mcp__dev_toolkit__ios_set_content_size, mcp__dev_toolkit__ios_set_locale, mcp__dev_toolkit__ios_open_url, mcp__dev_toolkit__ios_status_bar, mcp__dev_toolkit__ios_push_notification, mcp__dev_toolkit__ios_grant_permission, mcp__dev_toolkit__ios_revoke_permission, mcp__dev_toolkit__ios_reset_permissions, mcp__dev_toolkit__ios_set_location, mcp__dev_toolkit__ios_clear_location, mcp__dev_toolkit__ios_set_increase_contrast, mcp__dev_toolkit__ios_record_video, mcp__dev_toolkit__ios_add_media, mcp__dev_toolkit__ios_keychain_reset, mcp__dev_toolkit__ios_get_app_container, mcp__dev_toolkit__ios_erase_device, mcp__dev_toolkit__ios_get_ui_tree, mcp__dev_toolkit__android_list_devices, mcp__dev_toolkit__android_screenshot, mcp__dev_toolkit__android_tap, mcp__dev_toolkit__android_swipe, mcp__dev_toolkit__android_type_text, mcp__dev_toolkit__android_key_event, mcp__dev_toolkit__android_launch_app, mcp__dev_toolkit__android_stop_app, mcp__dev_toolkit__android_list_packages, mcp__dev_toolkit__android_go_home, mcp__dev_toolkit__android_go_back, mcp__dev_toolkit__android_get_ui_tree, mcp__dev_toolkit__android_set_dark_mode, mcp__dev_toolkit__android_set_font_scale, mcp__dev_toolkit__android_set_locale, mcp__dev_toolkit__android_set_location, mcp__dev_toolkit__android_grant_permission, mcp__dev_toolkit__android_revoke_permission, mcp__dev_toolkit__android_record_screen, mcp__dev_toolkit__android_install_apk, mcp__dev_toolkit__android_uninstall_app, mcp__dev_toolkit__android_logcat, mcp__dev_toolkit__android_get_screen_size, mcp__dev_toolkit__android_open_url, mcp__dev_toolkit__android_clear_app_data
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -43,7 +43,7 @@ For Android: use `mcp__dev_toolkit__android_*` tools
|
|
|
43
43
|
|
|
44
44
|
## Flow
|
|
45
45
|
|
|
46
|
-
### Step 1
|
|
46
|
+
### Step 1 - Device & App Discovery
|
|
47
47
|
|
|
48
48
|
```
|
|
49
49
|
Call: ios_list_devices (or android_list_devices)
|
|
@@ -58,13 +58,13 @@ Call: ios_launch_app (bundle_id)
|
|
|
58
58
|
-> Wait 2 seconds for app to load
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
### Step 2
|
|
61
|
+
### Step 2 - Clean Status Bar (for screenshots)
|
|
62
62
|
|
|
63
63
|
```
|
|
64
64
|
Call: ios_status_bar (time: "09:41", battery_level: 100)
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
### Step 3
|
|
67
|
+
### Step 3 - Systematic Screen Exploration
|
|
68
68
|
|
|
69
69
|
For each screen in the app:
|
|
70
70
|
|
|
@@ -85,7 +85,7 @@ Call: ios_tap (on each tab bar item, button, navigation link)
|
|
|
85
85
|
4. Scroll: `ios_swipe(200, 600, 200, 200)` to scroll down -> screenshot
|
|
86
86
|
5. Type in text fields: `ios_type_text("test input")`
|
|
87
87
|
|
|
88
|
-
### Step 4
|
|
88
|
+
### Step 4 - Variant Testing (based on input argument)
|
|
89
89
|
|
|
90
90
|
**"dark mode":**
|
|
91
91
|
|
|
@@ -129,13 +129,13 @@ Platform detection:
|
|
|
129
129
|
cwd contains build.gradle OR build.gradle.kts -> Android
|
|
130
130
|
Otherwise -> error: "store-ready needs an iOS or Android project"
|
|
131
131
|
|
|
132
|
-
Step A
|
|
132
|
+
Step A - run the standard visual + accessibility sweep (light + dark + large text).
|
|
133
133
|
|
|
134
|
-
Step B
|
|
134
|
+
Step B - dispatch compliance skill:
|
|
135
135
|
iOS:
|
|
136
136
|
Load pipeline/skills/shared/core/apple-archive-compliance/SKILL.md
|
|
137
137
|
Prereq: @mmerterden/dev-toolkit-mcp ≥ v2.4 (provides ios_app_store_audit MCP tool)
|
|
138
|
-
|
|
138
|
+
- installable via npm; standalone ArchiveGuard binary deprecated in v8.4.0
|
|
139
139
|
Artifact: pick newest .xcarchive under ~/Library/Developer/Xcode/Archives/**
|
|
140
140
|
OR accept explicit path argument after "store-ready"
|
|
141
141
|
Invoke: mcp__dev_toolkit__ios_app_store_audit({ archive_path: <path>, rules: "all" })
|
|
@@ -150,11 +150,11 @@ Step B — dispatch compliance skill:
|
|
|
150
150
|
apksigner verify, ABI/native scan
|
|
151
151
|
Merge findings with UI-hunter findings -> single report, severity-grouped.
|
|
152
152
|
|
|
153
|
-
Step C
|
|
153
|
+
Step C - humanize via `--lang en` by default (promptLanguage is locked to "en"; pass --lang=tr explicitly to opt into Turkish), group by severity
|
|
154
154
|
(error = blocker, warning = risk, info = hygiene), link each finding to the
|
|
155
155
|
Apple ITMS / Play policy reference supplied by the skill catalog.
|
|
156
156
|
|
|
157
|
-
Step D
|
|
157
|
+
Step D - offer `/multi-agent:channels` follow-up so findings can land in
|
|
158
158
|
Jira / Confluence / Wiki / PR body via the normal Phase 7 machinery.
|
|
159
159
|
```
|
|
160
160
|
|
|
@@ -165,7 +165,7 @@ Step D — offer `/multi-agent:channels` follow-up so findings can land in
|
|
|
165
165
|
- Run large text -> all screens
|
|
166
166
|
- Compile complete report
|
|
167
167
|
|
|
168
|
-
### Step 5
|
|
168
|
+
### Step 5 - Bug Detection (on EVERY screenshot)
|
|
169
169
|
|
|
170
170
|
When analyzing each screenshot, check for:
|
|
171
171
|
|
|
@@ -180,7 +180,7 @@ When analyzing each screenshot, check for:
|
|
|
180
180
|
| **Localization** | Untranslated strings, text clipping in long translations |
|
|
181
181
|
| **Interaction** | Button didn't respond (before/after screenshots identical after tap) |
|
|
182
182
|
|
|
183
|
-
### Step 6
|
|
183
|
+
### Step 6 - Report
|
|
184
184
|
|
|
185
185
|
Create tasks for each bug found:
|
|
186
186
|
|
|
@@ -228,7 +228,7 @@ Then output full report:
|
|
|
228
228
|
|
|
229
229
|
Save to: `$HOME/.claude/logs/sim-test/{bundle_id}/{timestamp}.md`
|
|
230
230
|
|
|
231
|
-
### Step 7
|
|
231
|
+
### Step 7 - Fix Offer
|
|
232
232
|
|
|
233
233
|
After report is complete, if bugs were found:
|
|
234
234
|
|
|
@@ -247,7 +247,7 @@ If user says yes:
|
|
|
247
247
|
4. Re-run screenshot on that screen to verify fix
|
|
248
248
|
5. Show before/after comparison
|
|
249
249
|
|
|
250
|
-
### Step 8
|
|
250
|
+
### Step 8 - Cleanup
|
|
251
251
|
|
|
252
252
|
```
|
|
253
253
|
Call: ios_set_appearance("light")
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
],
|
|
17
17
|
"risks": [
|
|
18
18
|
{
|
|
19
|
-
"risk": "LoginView başka ekran tarafından preview alanı olarak kullanılıyor olabilir
|
|
19
|
+
"risk": "LoginView başka ekran tarafından preview alanı olarak kullanılıyor olabilir - token değişimi preview snapshot'larını kırabilir",
|
|
20
20
|
"severity": "low",
|
|
21
21
|
"mitigation": "Preview varyantlarını snapshot'lar ile koruyarak incremental değiştir"
|
|
22
22
|
}
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
"severity": "blocking",
|
|
7
7
|
"file": "Sources/Auth/LoginView.swift",
|
|
8
8
|
"line": 42,
|
|
9
|
-
"issue": "Hardcoded .font(.system(size: 14)) kaldı
|
|
10
|
-
"fix": "Replace with .typographyStyle(.body1)
|
|
9
|
+
"issue": "Hardcoded .font(.system(size: 14)) kaldı - aynı fix sırasında typography token'ına da bağlanmalı",
|
|
10
|
+
"fix": "Replace with .typographyStyle(.body1) - same pattern as the color token migration"
|
|
11
11
|
}
|
|
12
12
|
],
|
|
13
13
|
"approved": false
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
"severity": "blocking",
|
|
5
5
|
"file": "Sources/Auth/LoginView.swift",
|
|
6
6
|
"line": 42,
|
|
7
|
-
"issue": "Hardcoded .font(.system(size: 14)) kaldı
|
|
8
|
-
"fix": "Replace with .typographyStyle(.body1)
|
|
7
|
+
"issue": "Hardcoded .font(.system(size: 14)) kaldı - aynı fix sırasında typography token'ına da bağlanmalı",
|
|
8
|
+
"fix": "Replace with .typographyStyle(.body1) - same pattern as the color token migration",
|
|
9
9
|
"reviewer": "opus"
|
|
10
10
|
}
|
|
11
11
|
],
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"focus": "SwiftUI bugfix path
|
|
2
|
+
"focus": "SwiftUI bugfix path - verifies that Phase 4 picks up an in-scope but adjacent blocker (token drift) even when the primary issue is resolved.",
|
|
3
3
|
"exercises": [
|
|
4
4
|
"Phase 1 stack detection (iOS / Swift 6 / SwiftUI)",
|
|
5
5
|
"Phase 2 TDD ordering (test before code)",
|
package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-1-analysis.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
},
|
|
12
12
|
{
|
|
13
13
|
"path": "feature/orders/src/main/java/com/example/orders/OrdersViewModel.kt",
|
|
14
|
-
"why": "isRefreshing state flow eklenecek
|
|
14
|
+
"why": "isRefreshing state flow eklenecek - PullToRefreshBox'ın state binding'i için"
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
"path": "feature/orders/src/test/java/com/example/orders/OrdersScreenTest.kt",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
],
|
|
21
21
|
"risks": [
|
|
22
22
|
{
|
|
23
|
-
"risk": "Material3 PullToRefreshBox henüz beta API
|
|
23
|
+
"risk": "Material3 PullToRefreshBox henüz beta API - 1.3.x'de signature değişti",
|
|
24
24
|
"severity": "medium",
|
|
25
25
|
"mitigation": "Existing libs.versions.toml'de material3 sürümünü teyit et, gerekirse bump et"
|
|
26
26
|
}
|
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
"severity": "blocking",
|
|
7
7
|
"file": "feature/orders/src/main/java/com/example/orders/OrdersViewModel.kt",
|
|
8
8
|
"line": 28,
|
|
9
|
-
"issue": "refresh() içinde isRefreshing = false finally bloğunda değil
|
|
9
|
+
"issue": "refresh() içinde isRefreshing = false finally bloğunda değil - exception fırlatıldığında spinner sonsuza dek takılır",
|
|
10
10
|
"fix": "Wrap the body in try/finally and set _isRefreshing.value = false in finally"
|
|
11
11
|
},
|
|
12
12
|
{
|
|
13
13
|
"severity": "important",
|
|
14
14
|
"file": "feature/orders/src/main/java/com/example/orders/OrdersScreen.kt",
|
|
15
15
|
"line": 0,
|
|
16
|
-
"issue": "Yeni modifier chain lazılarla LazyColumn semantics test matcher'larını kırabilir
|
|
16
|
+
"issue": "Yeni modifier chain lazılarla LazyColumn semantics test matcher'larını kırabilir - Compose stability endişesi var",
|
|
17
17
|
"fix": "Measure recomposition count with Compose Compiler Reports before merging"
|
|
18
18
|
}
|
|
19
19
|
],
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"severity": "important",
|
|
27
27
|
"file": "feature/orders/src/main/java/com/example/orders/OrdersScreen.kt",
|
|
28
28
|
"line": 54,
|
|
29
|
-
"issue": "PullToRefreshState hoisted yerine composable içinde tutuluyor
|
|
29
|
+
"issue": "PullToRefreshState hoisted yerine composable içinde tutuluyor - configuration change'de state kaybı",
|
|
30
30
|
"fix": "Use rememberSaveable or hoist the state up to ViewModel"
|
|
31
31
|
}
|
|
32
32
|
],
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"severity": "blocking",
|
|
5
5
|
"file": "feature/orders/src/main/java/com/example/orders/OrdersViewModel.kt",
|
|
6
6
|
"line": 28,
|
|
7
|
-
"issue": "refresh() içinde isRefreshing = false finally bloğunda değil
|
|
7
|
+
"issue": "refresh() içinde isRefreshing = false finally bloğunda değil - exception fırlatıldığında spinner sonsuza dek takılır",
|
|
8
8
|
"fix": "Wrap the body in try/finally and set _isRefreshing.value = false in finally",
|
|
9
9
|
"reviewer": "opus"
|
|
10
10
|
},
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"severity": "important",
|
|
13
13
|
"file": "feature/orders/src/main/java/com/example/orders/OrdersScreen.kt",
|
|
14
14
|
"line": 54,
|
|
15
|
-
"issue": "PullToRefreshState hoisted yerine composable içinde tutuluyor
|
|
15
|
+
"issue": "PullToRefreshState hoisted yerine composable içinde tutuluyor - configuration change'de state kaybı",
|
|
16
16
|
"fix": "Use rememberSaveable or hoist the state up to ViewModel",
|
|
17
17
|
"reviewer": "sonnet"
|
|
18
18
|
}
|
|
@@ -23,11 +23,11 @@
|
|
|
23
23
|
"severity": "important",
|
|
24
24
|
"file": "feature/orders/src/main/java/com/example/orders/OrdersScreen.kt",
|
|
25
25
|
"line": 0,
|
|
26
|
-
"issue": "Yeni modifier chain lazılarla LazyColumn semantics test matcher'larını kırabilir
|
|
26
|
+
"issue": "Yeni modifier chain lazılarla LazyColumn semantics test matcher'larını kırabilir - Compose stability endişesi var",
|
|
27
27
|
"fix": "Measure recomposition count with Compose Compiler Reports before merging",
|
|
28
28
|
"reviewer": "opus"
|
|
29
29
|
},
|
|
30
|
-
"reason": "Out of scope for this task
|
|
30
|
+
"reason": "Out of scope for this task - recomposition audit is a performance sweep, not a correctness gate for adding pull-to-refresh"
|
|
31
31
|
}
|
|
32
32
|
],
|
|
33
33
|
"rejected": [],
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"focus": "Android/Compose feature path with mixed-verdict triage
|
|
2
|
+
"focus": "Android/Compose feature path with mixed-verdict triage - one finding deferred out-of-scope, two accepted (one blocker + one important cross-reviewer match).",
|
|
3
3
|
"exercises": [
|
|
4
4
|
"Phase 1 stack detection (android / Kotlin 2.1 / Jetpack Compose)",
|
|
5
5
|
"Phase 2 3-task decomposition with clear dependency chain (T1 test → T2 VM → T3 UI)",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"title": "Add pull-to-refresh on OrdersScreen",
|
|
3
|
-
"description": "Compose OrdersScreen'de swipe-to-refresh yok. Material3 PullToRefreshBox eklenmeli, ViewModel refresh() zaten var
|
|
3
|
+
"description": "Compose OrdersScreen'de swipe-to-refresh yok. Material3 PullToRefreshBox eklenmeli, ViewModel refresh() zaten var - UI tarafı bağlanmadı.",
|
|
4
4
|
"inputType": "free-text",
|
|
5
5
|
"expectedStack": "android",
|
|
6
6
|
"expectedLanguage": "Kotlin",
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"stack": {
|
|
3
|
+
"primary": "backend",
|
|
4
|
+
"language": "Python 3.13",
|
|
5
|
+
"framework": "FastAPI"
|
|
6
|
+
},
|
|
7
|
+
"touchedAreas": [
|
|
8
|
+
{
|
|
9
|
+
"path": "app/middleware/rate_limit.py",
|
|
10
|
+
"why": "New sliding-window per-IP limiter implemented as ASGI middleware"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"path": "app/api/auth.py",
|
|
14
|
+
"why": "Login router registers the limiter and returns 429 + Retry-After on breach"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"path": "tests/test_rate_limit.py",
|
|
18
|
+
"why": "Covers allowed-under-limit, blocked-over-limit, and window reset"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"risks": [
|
|
22
|
+
{
|
|
23
|
+
"risk": "An in-memory counter does not share state across Gunicorn/Uvicorn workers, so the limit is per-process not per-cluster",
|
|
24
|
+
"severity": "medium",
|
|
25
|
+
"mitigation": "Document the single-process assumption now; back it with Redis when the service scales horizontally"
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"summary": "Brute-force on POST /auth/login is unthrottled. Add a sliding-window per-IP limiter as middleware, wire it into the auth router, and return 429 with Retry-After. Scope is three files; the main caveat is multi-worker state sharing, deferred to a Redis-backed follow-up."
|
|
29
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"approach": "TDD-first. Write a failing test that fires N+1 requests from one IP and asserts the last one returns 429 with Retry-After (RED). Implement the sliding-window limiter middleware (GREEN). Wire it into the auth router and assert allowed traffic still passes (refactor + integration).",
|
|
3
|
+
"tasks": [
|
|
4
|
+
{
|
|
5
|
+
"id": "T1",
|
|
6
|
+
"title": "Add failing rate-limit tests (under limit, over limit, window reset)",
|
|
7
|
+
"type": "test",
|
|
8
|
+
"files": ["tests/test_rate_limit.py"],
|
|
9
|
+
"dependsOn": [],
|
|
10
|
+
"acceptanceCriteria": [
|
|
11
|
+
"N requests under the limit all return 200",
|
|
12
|
+
"The N+1th request within the window returns 429 with a Retry-After header",
|
|
13
|
+
"After the window elapses, requests are allowed again"
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "T2",
|
|
18
|
+
"title": "Implement sliding-window per-IP limiter middleware",
|
|
19
|
+
"type": "code",
|
|
20
|
+
"files": ["app/middleware/rate_limit.py"],
|
|
21
|
+
"dependsOn": ["T1"],
|
|
22
|
+
"acceptanceCriteria": [
|
|
23
|
+
"Tracks request timestamps per client IP in a sliding window",
|
|
24
|
+
"Emits 429 with Retry-After once the threshold is exceeded",
|
|
25
|
+
"Window bookkeeping is safe under concurrent requests"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "T3",
|
|
30
|
+
"title": "Register the limiter on the auth login route",
|
|
31
|
+
"type": "code",
|
|
32
|
+
"files": ["app/api/auth.py"],
|
|
33
|
+
"dependsOn": ["T2"],
|
|
34
|
+
"acceptanceCriteria": [
|
|
35
|
+
"POST /auth/login passes through the limiter",
|
|
36
|
+
"Normal login traffic under the limit is unaffected"
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"approved": true,
|
|
41
|
+
"userFeedback": null
|
|
42
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"reviewer": "opus",
|
|
4
|
+
"findings": [
|
|
5
|
+
{
|
|
6
|
+
"severity": "blocking",
|
|
7
|
+
"file": "app/middleware/rate_limit.py",
|
|
8
|
+
"line": 38,
|
|
9
|
+
"issue": "The per-IP window dict is read-modified-written without a lock; under concurrent requests two coroutines can both pass the check and under-count, letting bursts through",
|
|
10
|
+
"fix": "Guard the read-modify-write with an asyncio.Lock keyed per IP, or use an atomic counter structure"
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"approved": false
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"reviewer": "sonnet",
|
|
17
|
+
"findings": [],
|
|
18
|
+
"approved": true
|
|
19
|
+
}
|
|
20
|
+
]
|