@mmerterden/multi-agent-pipeline 8.6.2 → 10.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +660 -2483
- package/README.md +100 -101
- 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 +3 -3
- package/pipeline/agents/backend-architect.md +2 -2
- package/pipeline/agents/code-reviewer.md +8 -8
- package/pipeline/agents/dev-critic.md +17 -17
- package/pipeline/agents/explorer.md +3 -3
- package/pipeline/agents/ios-architect.md +2 -2
- package/pipeline/agents/security-auditor.md +10 -10
- 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 +12 -8
- 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 +20 -20
- package/pipeline/commands/multi-agent/dev-local-autopilot.md +22 -22
- package/pipeline/commands/multi-agent/dev-local.md +23 -20
- package/pipeline/commands/multi-agent/dev.md +43 -43
- 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 +65 -56
- 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 +16 -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 +41 -35
- 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 +91 -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 +24 -14
- package/pipeline/commands/multi-agent/refs/phases/phase-0-init.md +107 -57
- package/pipeline/commands/multi-agent/refs/phases/phase-1-analysis.md +65 -29
- package/pipeline/commands/multi-agent/refs/phases/phase-2-planning.md +114 -62
- package/pipeline/commands/multi-agent/refs/phases/phase-3-dev.md +99 -36
- package/pipeline/commands/multi-agent/refs/phases/phase-4-review.md +181 -62
- 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 +12 -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 +64 -58
- 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 +5 -5
- package/pipeline/lib/fetch-crashlytics.sh +7 -7
- package/pipeline/lib/fetch-fortify.sh +6 -22
- package/pipeline/lib/fetch-swagger.sh +6 -6
- 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 +28 -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 +63 -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 +42 -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 +95 -11
- 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 +17 -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 +97 -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 +88 -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 +2 -2
- 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-state.mjs +108 -0
- 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 +62 -13
- 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 +37 -30
- package/pipeline/skills/figma-common/figma-bottom-sheets/SKILL.md +137 -0
- 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-evolve-component/SKILL.md +61 -0
- 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-navigation/SKILL.md +142 -0
- package/pipeline/skills/figma-common/figma-overlays/SKILL.md +128 -0
- 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 +13 -12
- package/pipeline/skills/figma-common/figma-ui-patterns/patterns/animated-gradient-border.md +112 -0
- 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 +53 -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 +88 -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 +53 -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 +56 -2
- 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/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 -84
- 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,9 +1,9 @@
|
|
|
1
|
-
# PHASE 3D
|
|
1
|
+
# PHASE 3D - Pattern Detection + Component Architecture + Complexity
|
|
2
2
|
|
|
3
3
|
Analyze design data to detect structural patterns, design the Swift API shape, and evaluate complexity.
|
|
4
|
-
This is the most critical analysis phase
|
|
4
|
+
This is the most critical analysis phase - its output defines the API that Phase 4 implements.
|
|
5
5
|
|
|
6
|
-
required
|
|
6
|
+
required - always execute this phase.
|
|
7
7
|
PARALLEL WITH: Phase 3A, 3B, 3C, 3E, 3F (all read from pass1/ independently)
|
|
8
8
|
|
|
9
9
|
---
|
|
@@ -100,13 +100,13 @@ Same component with property-based variations.
|
|
|
100
100
|
| Boolean toggles MULTIPLE elements | Keep `Bool`, keep content properties | `ShowHeader boolean` controls title + subtitle + icon → `showHeader: Bool` |
|
|
101
101
|
| Boolean controls behavior (not visibility) | Keep `Bool` | `IsInteractive boolean` → `isInteractive: Bool` |
|
|
102
102
|
|
|
103
|
-
**Rationale:** In Figma, a boolean + content slot is two properties because Figma has no optionals. In Swift, `Optional` naturally expresses "present or absent." Keeping a separate `showX: Bool` alongside the content creates redundant state
|
|
103
|
+
**Rationale:** In Figma, a boolean + content slot is two properties because Figma has no optionals. In Swift, `Optional` naturally expresses "present or absent." Keeping a separate `showX: Bool` alongside the content creates redundant state - you can have `showLabel: false` but `text: "Hello"`, which is a contradiction the API shouldn't allow.
|
|
104
104
|
|
|
105
|
-
**Apply this merge consistently**
|
|
105
|
+
**Apply this merge consistently** - if the icon boolean was merged into `Image?`, the label boolean must also be merged into `String?`. Same pattern, same treatment.
|
|
106
106
|
|
|
107
|
-
**Cross-source merges (Figma boolean + LAYER_TEXT):** After Layer Text Classification (
|
|
107
|
+
**Cross-source merges (Figma boolean + LAYER_TEXT):** After Layer Text Classification (section1.5), re-evaluate the merge rule against the combined property set. A Figma boolean may gate a LAYER_TEXT dynamic property - if the boolean toggles visibility of that single text element, merge the boolean into the LAYER_TEXT property as `String?`. The merge rule applies identically regardless of whether the content property originated from a Figma TEXT override or from layer text classification.
|
|
108
108
|
|
|
109
|
-
**Shared-content exception:** When MULTIPLE booleans independently gate sections that share ONE content source, do NOT merge. Each boolean provides independent per-section visibility that a single optional can't express. Example: `/Money&Mil` and `+Money&Mil` both display `milesAmount`
|
|
109
|
+
**Shared-content exception:** When MULTIPLE booleans independently gate sections that share ONE content source, do NOT merge. Each boolean provides independent per-section visibility that a single optional can't express. Example: `/Money&Mil` and `+Money&Mil` both display `milesAmount` - merging would destroy the ability to show one section but not the other. Keep the booleans; the view short-circuits via `if showX, let content = sharedContent { ... }`.
|
|
110
110
|
|
|
111
111
|
### 1.3 Extract Variant Examples
|
|
112
112
|
|
|
@@ -125,16 +125,16 @@ From metadata_response.xml:
|
|
|
125
125
|
|
|
126
126
|
### 1.5 Layer Text Classification
|
|
127
127
|
|
|
128
|
-
Figma component properties capture variant axes, boolean toggles, text overrides, and instance swaps
|
|
128
|
+
Figma component properties capture variant axes, boolean toggles, text overrides, and instance swaps - but NOT the actual text content rendered inside layers. That layer text often contains **sample/placeholder data** that must become dynamic API parameters.
|
|
129
129
|
|
|
130
130
|
**Procedure:**
|
|
131
131
|
|
|
132
132
|
1. Extract every visible text value from `design_context_response.json` (from the generated code / layer content)
|
|
133
|
-
2. Filter out texts already captured as Figma TEXT properties in `component_properties.json`
|
|
134
|
-
3. Filter out texts that have a localization key assigned in `pass2/utility_localization.json` (read if available)
|
|
133
|
+
2. Filter out texts already captured as Figma TEXT properties in `component_properties.json` - these are already handled
|
|
134
|
+
3. Filter out texts that have a localization key assigned in `pass2/utility_localization.json` (read if available) - these are static labels managed by the localization system
|
|
135
135
|
4. For each remaining text, classify as STATIC or DYNAMIC using contextual reasoning
|
|
136
136
|
|
|
137
|
-
**Classification
|
|
137
|
+
**Classification - reason about the component's semantic purpose and each text's role:**
|
|
138
138
|
|
|
139
139
|
| Question | If YES → |
|
|
140
140
|
|----------|----------|
|
|
@@ -144,7 +144,7 @@ Figma component properties capture variant axes, boolean toggles, text overrides
|
|
|
144
144
|
| Is this a fixed UI label describing what adjacent data represents? | STATIC |
|
|
145
145
|
| Is this a structural/grammatical element (separator, connector, operator like "/" or "+")? | STATIC |
|
|
146
146
|
|
|
147
|
-
**Key principle:** Reason about what the component IS FOR. A Price component displays prices
|
|
147
|
+
**Key principle:** Reason about what the component IS FOR. A Price component displays prices - price amounts are inherently variable. A "Total Amount" label is inherently fixed - it describes the data, it IS not data. A currency code like "TRY" is variable - the same component shows USD, EUR, GBP in different contexts.
|
|
148
148
|
|
|
149
149
|
**Edge cases:**
|
|
150
150
|
- Currency codes/symbols (TRY, USD, €) → DYNAMIC: varies by market/context
|
|
@@ -154,8 +154,8 @@ Figma component properties capture variant axes, boolean toggles, text overrides
|
|
|
154
154
|
- Structural operators that visually separate data ("+", "/", "·") → STATIC
|
|
155
155
|
|
|
156
156
|
**For each DYNAMIC text, propose:**
|
|
157
|
-
- Swift property name (camelCase, descriptive of the semantic role
|
|
158
|
-
- Swift type: `String` (formatting is the caller's responsibility
|
|
157
|
+
- Swift property name (camelCase, descriptive of the semantic role - e.g., `currencyCode` not `tryText`)
|
|
158
|
+
- Swift type: `String` (formatting is the caller's responsibility - even for numeric data)
|
|
159
159
|
- Whether required or optional (based on whether the element's parent section is boolean-gated)
|
|
160
160
|
|
|
161
161
|
**Output:** Include classification in `04_patterns.md` (Layer Text Classification table) and carry DYNAMIC entries into GATE 2 as additional API properties.
|
|
@@ -169,11 +169,11 @@ When Layer Text Classification identifies a **currency code + numeric amount** p
|
|
|
169
169
|
**Detection:** Two adjacent DYNAMIC texts where one is a currency code (3-letter ISO 4217 or known symbol) and the other is a numeric amount. Also triggered when a nested `Price` component instance is detected.
|
|
170
170
|
|
|
171
171
|
**Rules:**
|
|
172
|
-
- Define a **nested `Price` struct** conforming to `PriceRepresentable`
|
|
173
|
-
- The amount parameter type MUST be `Double`, NOT `String`
|
|
174
|
-
- Do NOT flatten price fields into the parent Configuration
|
|
172
|
+
- Define a **nested `Price` struct** conforming to `PriceRepresentable` - include ONLY the properties this component needs (amount + currency at minimum)
|
|
173
|
+
- The amount parameter type MUST be `Double`, NOT `String` - formatting is handled by `toConfiguration()` → `CurrencyAmountFormatter` at render time
|
|
174
|
+
- Do NOT flatten price fields into the parent Configuration - keep them grouped in the nested `Price` type
|
|
175
175
|
- The view uses `Price(priceModel)` for standalone price display or `CurrencyTextRenderer` for inline attributed text
|
|
176
|
-
- Do NOT hardcode currency placement (left/right)
|
|
176
|
+
- Do NOT hardcode currency placement (left/right) - `CurrencyFormatProvider` determines this from the currency code
|
|
177
177
|
|
|
178
178
|
**Additional price properties to check for in the design:**
|
|
179
179
|
- Strikethrough/original price → `originalAmount: Double?`
|
|
@@ -182,11 +182,11 @@ When Layer Text Classification identifies a **currency code + numeric amount** p
|
|
|
182
182
|
- Green/red coloring with +/- prefix → `sign: PriceSign?`
|
|
183
183
|
|
|
184
184
|
**Architecture output:** When a price pattern is detected, the property coverage should list:
|
|
185
|
-
- `price: ComponentName.Price` (PRICE_PATTERN, IMPLEMENT)
|
|
185
|
+
- `price: ComponentName.Price` (PRICE_PATTERN, IMPLEMENT) - nested `PriceRepresentable` conformance
|
|
186
186
|
|
|
187
187
|
### 1.5.1b Inline Price in Attributed Text
|
|
188
188
|
|
|
189
|
-
When a **price pattern** (
|
|
189
|
+
When a **price pattern** (section1.5.1) appears **inside a text element** alongside static surrounding text (e.g., "TRY 10.000 dan başlayan fiyatlarla"), this is an **inline price attributed text pattern**.
|
|
190
190
|
|
|
191
191
|
**Detection:** A DYNAMIC price (currency + amount) adjacent to STATIC text within the same visual text block, where the price portion has different typography (bold, larger) than the surrounding text.
|
|
192
192
|
|
|
@@ -212,25 +212,25 @@ When a **price pattern** (§1.5.1) appears **inside a text element** alongside s
|
|
|
212
212
|
```
|
|
213
213
|
|
|
214
214
|
**Architecture output:** When an inline price attributed text pattern is detected, the property coverage should list:
|
|
215
|
-
- `price: ComponentName.Price` (PRICE_PATTERN, IMPLEMENT)
|
|
216
|
-
- Note in patterns output: "Inline price in attributed text
|
|
215
|
+
- `price: ComponentName.Price` (PRICE_PATTERN, IMPLEMENT) - nested `PriceRepresentable` conformance
|
|
216
|
+
- Note in patterns output: "Inline price in attributed text - use `price.attributedString(style:)` with `AttributedString.format()`"
|
|
217
217
|
|
|
218
|
-
**This pattern must be explicitly confirmed during analysis.** If a price appears near text, ask: is this a standalone `Price` view + separate `Text`, or a single attributed string combining both? Check the Figma layer structure
|
|
218
|
+
**This pattern must be explicitly confirmed during analysis.** If a price appears near text, ask: is this a standalone `Price` view + separate `Text`, or a single attributed string combining both? Check the Figma layer structure - if the price and surrounding text are in the same text layer with different font styles, it's inline attributed text.
|
|
219
219
|
|
|
220
220
|
### 1.5.1a Attributed Text Pattern (Multi-Font Text)
|
|
221
221
|
|
|
222
222
|
**Detection during Layer Text Classification:** When examining text elements in `design_context_response.json`, look for text where the generated code has multiple sibling `<span>` tags with different `font-family` or `font-weight` classes. Each distinct style run within a single text element indicates a multi-font attributed text pattern.
|
|
223
223
|
|
|
224
|
-
**Classify each style run independently** using the same DYNAMIC/STATIC rules from
|
|
224
|
+
**Classify each style run independently** using the same DYNAMIC/STATIC rules from section1.5 - a highlighted portion may be a dynamic prop (varies per instance) OR a static localization key (fixed but styled differently).
|
|
225
225
|
|
|
226
226
|
**Rules:**
|
|
227
227
|
- The surrounding text → localization format key with `%@` placeholders
|
|
228
228
|
- Each differently-styled portion → classify as DYNAMIC (`String` prop) or STATIC (its own localization key)
|
|
229
|
-
- Render using `AttributedString.format()` from `UIExtensions`
|
|
229
|
+
- Render using `AttributedString.format()` from `UIExtensions` - template gets base styling, each `%@` argument gets its own styling
|
|
230
230
|
|
|
231
231
|
### 1.5.3 Form Pattern Detection
|
|
232
232
|
|
|
233
|
-
When Sub-Component analysis identifies embedded instances of form-capable design-system components
|
|
233
|
+
When Sub-Component analysis identifies embedded instances of form-capable design-system components - **Selectbox, Checkbox, CheckboxButton, Radio, RadioButton, TextboxTextarea, DatepickerSchedule** - this is a **form pattern**.
|
|
234
234
|
|
|
235
235
|
**IMPORTANT:** When a form pattern is detected, read the `/figma-form-integration` skill instructions at `.instructions/figma/figma-form-integration/SKILL.md` for the full integration guide.
|
|
236
236
|
|
|
@@ -240,10 +240,10 @@ When Sub-Component analysis identifies embedded instances of form-capable design
|
|
|
240
240
|
- 2+ → **composite form**: nested `Section: FormSection` class declared in an extension on the component namespace, owned via Configuration.
|
|
241
241
|
|
|
242
242
|
**Rules:**
|
|
243
|
-
- Every form input MUST be modeled as a `*FormField` subclass
|
|
244
|
-
- The caller (scene view-model) constructs fields and rules. The component is headless
|
|
243
|
+
- Every form input MUST be modeled as a `*FormField` subclass - no `Binding<Value>`, no `@State` values, no ad-hoc `isChecked: Bool` / `selectedOption` properties.
|
|
244
|
+
- The caller (scene view-model) constructs fields and rules. The component is headless - it never instantiates fields and never calls `validate()`.
|
|
245
245
|
- Static copy (labels, placeholders, helper text, toggle captions) lives in Configuration; fields carry value+state+rules only.
|
|
246
|
-
- Non-form actions (e.g. "Sil", "Edit", "Detaylar") stay as paired closures on the View
|
|
246
|
+
- Non-form actions (e.g. "Sil", "Edit", "Detaylar") stay as paired closures on the View - they are NOT fields and NOT Configuration values.
|
|
247
247
|
|
|
248
248
|
**Figma → FormField mapping:**
|
|
249
249
|
|
|
@@ -278,11 +278,42 @@ Configuration then carries `public let section: ComponentName.Section` plus stat
|
|
|
278
278
|
|
|
279
279
|
**Architecture output (atomic, 1 field):** Configuration (or View init) carries the FormField directly, e.g. `public let terms: CheckboxFormField`.
|
|
280
280
|
|
|
281
|
+
### 1.5.4 Interaction Pattern Detection (navigation / overlays / bottom sheets)
|
|
282
|
+
|
|
283
|
+
Beyond content patterns, detect **interaction affordances** the component must expose without owning the presentation/routing. Each maps to a cross-cutting integration skill (native-SwiftUI default; a project-supplied system only when `figma-config` declares `ui.<system>`). The rule is the same in all three: the component emits a typed intent (Output closure) or takes a caller-owned binding - it never routes, never presents an app-level surface, never owns the sheet.
|
|
284
|
+
|
|
285
|
+
**Navigation pattern** → read `/figma-navigation` (`.instructions/figma/figma-navigation/SKILL.md`).
|
|
286
|
+
- **Detect:** a tab/section switcher that changes top-level content; a nav bar / header with a **back** or close affordance; a row/card variant implying a **push/detail** (chevron, "Detaylar", disclosure); a link/button whose label implies leaving the screen; a URL landing surface.
|
|
287
|
+
- **Architecture output:** a navigation **Output** (`output: (Output) -> Void` / `onSelect: (ID) -> Void`) OR a caller-owned `selection: Binding<Tab>` OR a plain deep-link entry param. Labels/icons are static (localized) Configuration copy; only the *intent* is a closure. Never a hardcoded `NavigationLink(destination:)`.
|
|
288
|
+
- **Guard:** an in-place segmented filter (no screen change) is a plain `Binding<Enum>`, not navigation.
|
|
289
|
+
|
|
290
|
+
**Overlay pattern** → read `/figma-overlays` (`.instructions/figma/figma-overlays/SKILL.md`).
|
|
291
|
+
- **Detect:** a toast/snackbar, a spinner/HUD or blocking dim, an alert dialog (1-3 buttons), a data-driven modal card; or a component action needing post-action feedback (saved/deleted/error).
|
|
292
|
+
- **Architecture output:** the component emits an **intent** (`.saved` / `.removeRequested(id)`); the caller (scene/VM) shows the toast/alert/modal. Overlay content is data, never `AnyView`; rich/interactive content is a local `.sheet/.modal { }` at the owning view. Loading is ref-counted with min-show.
|
|
293
|
+
- **Guard:** a static inline banner that is part of the component's own layout is plain content, not an overlay.
|
|
294
|
+
|
|
295
|
+
**Bottom-sheet pattern** → read `/figma-bottom-sheets` (`.instructions/figma/figma-bottom-sheets/SKILL.md`).
|
|
296
|
+
- **Detect:** the component is (or reveals) a bottom sheet / half-sheet / drawer, a **pinned bottom CTA** bar, a resizable pull-up panel, a **content-sized** sheet, or a **multi-step** in-sheet flow.
|
|
297
|
+
- **Architecture output:** the component is sheet **content**; the caller owns `isPresented`/`item` + detents. A pinned CTA is `.safeAreaInset(edge:.bottom)`, not a presented sheet. If the component *reveals* a child sheet, it emits the trigger intent and the caller presents.
|
|
298
|
+
- **Guard:** an inline expandable/disclosure within the page flow is plain component content.
|
|
299
|
+
|
|
300
|
+
**Property classification additions:**
|
|
301
|
+
|
|
302
|
+
| Classification | When | Swift Pattern |
|
|
303
|
+
|---|---|---|
|
|
304
|
+
| Navigation output | push/select/back affordance | `output`/`onSelect` closure on the View |
|
|
305
|
+
| Tab/selection binding | switches top-level content | `selection: Binding<Tab>` |
|
|
306
|
+
| Overlay intent | action needs app-level feedback/confirm | `output`/`onX` closure (caller shows overlay) |
|
|
307
|
+
| Sheet content | component lives inside a sheet | plain component; caller adds `.presentationDetents(...)` |
|
|
308
|
+
| Pinned CTA | sticky bottom action bar | `.safeAreaInset(edge:.bottom)` at the screen |
|
|
309
|
+
|
|
310
|
+
Record detected interaction patterns in `04b_component_architecture.md` under **Navigation / Overlays / Bottom Sheet** headings (see each skill's "Integration with Phase 3D" for the table shape).
|
|
311
|
+
|
|
281
312
|
### 1.5.2 Image Asset Classification
|
|
282
313
|
|
|
283
314
|
Figma designs contain images that are either **static assets** (bundled in the app) or **dynamic content** (loaded remotely at runtime). Classify each image in the design context.
|
|
284
315
|
|
|
285
|
-
**Classification
|
|
316
|
+
**Classification - reason about what the image represents:**
|
|
286
317
|
|
|
287
318
|
| Signal | Classification |
|
|
288
319
|
|--------|---------------|
|
|
@@ -298,7 +329,7 @@ Figma designs contain images that are either **static assets** (bundled in the a
|
|
|
298
329
|
**For DYNAMIC images:**
|
|
299
330
|
- Swift type: `URL` or `String` (the remote image URL)
|
|
300
331
|
- The view MUST use the remote image component from `CoreUI` (Kingfisher-backed) for async loading, caching, and placeholder handling
|
|
301
|
-
- Do NOT download the Figma placeholder image
|
|
332
|
+
- Do NOT download the Figma placeholder image - it's sample data, not a real asset
|
|
302
333
|
- Add a `placeholder` parameter or use a default placeholder view for loading state
|
|
303
334
|
|
|
304
335
|
**For STATIC images:**
|
|
@@ -308,7 +339,7 @@ Figma designs contain images that are either **static assets** (bundled in the a
|
|
|
308
339
|
- Reference via the generated `Image.` accessor
|
|
309
340
|
|
|
310
341
|
**Architecture output:** When a dynamic image is detected, the property coverage should list:
|
|
311
|
-
- `{imageName}URL: URL` (LAYER_IMAGE, IMPLEMENT)
|
|
342
|
+
- `{imageName}URL: URL` (LAYER_IMAGE, IMPLEMENT) - or `String` if the URL comes as a string from the API
|
|
312
343
|
|
|
313
344
|
### 1.6 Write `{artifactPath}/pass3/04_patterns.md`
|
|
314
345
|
|
|
@@ -355,9 +386,9 @@ OR: None detected.
|
|
|
355
386
|
|
|
356
387
|
| Layer Text | Semantic Role | Classification | Swift Property | Notes |
|
|
357
388
|
|------------|--------------|----------------|----------------|-------|
|
|
358
|
-
| "{text}" | {role} | DYNAMIC / STATIC | `{propName}: String` /
|
|
389
|
+
| "{text}" | {role} | DYNAMIC / STATIC | `{propName}: String` / - | {rationale} |
|
|
359
390
|
|
|
360
|
-
OR: All layer text already captured as Figma TEXT properties or localization keys
|
|
391
|
+
OR: All layer text already captured as Figma TEXT properties or localization keys - no additional dynamic parameters.
|
|
361
392
|
|
|
362
393
|
## Image Asset Classification
|
|
363
394
|
|
|
@@ -374,14 +405,14 @@ OR: No images detected in component.
|
|
|
374
405
|
|
|
375
406
|
**This is the core analysis gate.** Using pattern data from GATE 1, determine the complete Swift API shape.
|
|
376
407
|
|
|
377
|
-
INPUT: GATE 1 output (in memory
|
|
408
|
+
INPUT: GATE 1 output (in memory - just computed)
|
|
378
409
|
INPUT: `{artifactPath}/pass1/design_context_response.json`
|
|
379
410
|
INPUT: `{artifactPath}/pass1/component_properties.json`
|
|
380
411
|
INPUT: `{artifactPath}/pass3/04c_variant_config_analysis.json` (from Phase 3H)
|
|
381
412
|
|
|
382
413
|
### 2.0 Consume Phase 3H Classifications
|
|
383
414
|
|
|
384
|
-
Read `04c_variant_config_analysis.json`. This contains typed recommendations for every boolean property. **Do NOT re-classify**
|
|
415
|
+
Read `04c_variant_config_analysis.json`. This contains typed recommendations for every boolean property. **Do NOT re-classify** - use 3H output directly.
|
|
385
416
|
|
|
386
417
|
For entries with `"deferredTo": "3D"` (UNCLASSIFIED booleans): analyze using `design_context_response.json` HTML structure to determine if the boolean is a section toggle (controls multiple children → `Bool`), decorative leaf (`Bool`), or behavioral bool (`Bool`).
|
|
387
418
|
|
|
@@ -439,19 +470,19 @@ public let sections: [CardSection]
|
|
|
439
470
|
|
|
440
471
|
### 2.2 Sub-Component Integration
|
|
441
472
|
|
|
442
|
-
**This section consumes Phase 3H output.** Do NOT re-detect sub-components
|
|
473
|
+
**This section consumes Phase 3H output.** Do NOT re-detect sub-components - 3H has already classified them.
|
|
443
474
|
|
|
444
475
|
Phase 3H provides `dynamicProps` and `staticProps` for each sub-component entry. Only dynamic props are exposed to the caller. Static props are hardcoded internally by the parent View (Phase 4B).
|
|
445
476
|
|
|
446
477
|
**For each `KNOWN_SUBCOMPONENT` entry:**
|
|
447
478
|
|
|
448
|
-
Use the `swiftType` from 3H directly
|
|
479
|
+
Use the `swiftType` from 3H directly - it's already resolved based on dynamic prop count:
|
|
449
480
|
|
|
450
481
|
| Dynamic Props | Result |
|
|
451
482
|
|---|---|
|
|
452
483
|
| 0 | Boolean presence only |
|
|
453
484
|
| 1 | Unwrapped to prop type (e.g., `String?`) |
|
|
454
|
-
| 2+ | Mini config struct (e.g., `PriceConfiguration?`)
|
|
485
|
+
| 2+ | Mini config struct (e.g., `PriceConfiguration?`) - define it in the parent's Configuration |
|
|
455
486
|
|
|
456
487
|
```swift
|
|
457
488
|
// 1 dynamic prop (title only): unwrapped to String?
|
|
@@ -463,7 +494,7 @@ public struct PriceConfiguration: Sendable {
|
|
|
463
494
|
public let currency: String
|
|
464
495
|
public let wholeAmount: String
|
|
465
496
|
public let decimalAmount: String
|
|
466
|
-
// textStyle is STATIC
|
|
497
|
+
// textStyle is STATIC - not exposed, hardcoded in View body
|
|
467
498
|
}
|
|
468
499
|
public let priceConfiguration: PriceConfiguration? // nil = hidden
|
|
469
500
|
```
|
|
@@ -492,7 +523,7 @@ Same prop filtering as KNOWN_SUBCOMPONENT, plus a paired closure. The data goes
|
|
|
492
523
|
- Use the `swiftType` from 3H (`Image?` or `Optional3<Image>`)
|
|
493
524
|
- Use the `swiftName` from 3H for naming
|
|
494
525
|
|
|
495
|
-
**For `UNCLASSIFIED` entries resolved in
|
|
526
|
+
**For `UNCLASSIFIED` entries resolved in section2.0:**
|
|
496
527
|
- Integrate the resolved type (`Bool` for section toggles, etc.)
|
|
497
528
|
|
|
498
529
|
### 2.3 Property Classification
|
|
@@ -502,18 +533,18 @@ For each property identified in GATE 1, classify into its final Swift form:
|
|
|
502
533
|
| Classification | When | Swift Pattern |
|
|
503
534
|
|----------------|------|---------------|
|
|
504
535
|
| Required parameter | Always visible, component meaningless without it | `init(title: String)` |
|
|
505
|
-
| Optional parameter | Sometimes hidden/absent | `subtitle: String? = nil`
|
|
506
|
-
| Merged optional | Boolean toggles ONE content element | `text: String?`
|
|
536
|
+
| Optional parameter | Sometimes hidden/absent | `subtitle: String? = nil` - chain modifier |
|
|
537
|
+
| Merged optional | Boolean toggles ONE content element | `text: String?` - boolean dropped, nil = hidden |
|
|
507
538
|
| Enum | Variant with named values | `enum State { case active, inactive }` |
|
|
508
539
|
| Bool toggle | Binary behavior OR toggles MULTIPLE elements | `isInteractive: Bool = true` |
|
|
509
540
|
| Array | Repeated homogeneous children | `items: [ItemRow]` |
|
|
510
541
|
| Enum array | Repeated heterogeneous children | `sections: [CardSection]` |
|
|
511
|
-
| Mini config (display) | Boolean-gated sub-component, 2+ dynamic props, no action | `priceConfiguration: PriceConfiguration?`
|
|
542
|
+
| Mini config (display) | Boolean-gated sub-component, 2+ dynamic props, no action | `priceConfiguration: PriceConfiguration?` - chain modifier |
|
|
512
543
|
| Mini config (paired) | Boolean-gated sub-component, 2+ dynamic props + action | Paired modifier: `.actionLink(config) { action }` |
|
|
513
544
|
| Paired single prop | Boolean-gated sub-component, 1 dynamic prop + action | Paired modifier: `.secondaryButton(title) { action }` |
|
|
514
545
|
| Paired closure-only | Boolean-gated sub-component, 0 dynamic props + action | Paired modifier: `.dismissButton { action }` |
|
|
515
546
|
| Closure | Interactive action (always present, not boolean-gated) | `onTap: (() -> Void)?` |
|
|
516
|
-
| Layer text (dynamic) | Sample/placeholder data in Figma layers (from
|
|
547
|
+
| Layer text (dynamic) | Sample/placeholder data in Figma layers (from section1.5 classification) | `{propName}: String` |
|
|
517
548
|
|
|
518
549
|
### 2.3.1 Coexistent Property Rule
|
|
519
550
|
|
|
@@ -528,7 +559,7 @@ When two properties are semantically meaningless without each other, they MUST b
|
|
|
528
559
|
|
|
529
560
|
**Resolution:** Coexistent pairs are expressed as **paired modifiers** on the View. The data prop goes in Configuration (for nil = hidden), the closure stays as a View dependency. The modifier sets both atomically.
|
|
530
561
|
|
|
531
|
-
This is NOT limited to sub-components
|
|
562
|
+
This is NOT limited to sub-components - any two semantically bound props follow this rule.
|
|
532
563
|
|
|
533
564
|
### 2.4 Configuration Hierarchy
|
|
534
565
|
|
|
@@ -660,11 +691,11 @@ OR: No sub-components detected. All properties are flat.
|
|
|
660
691
|
|
|
661
692
|
| Property | Classification | Swift Type | Default |
|
|
662
693
|
|----------|---------------|------------|---------|
|
|
663
|
-
| title | Required | `String` |
|
|
694
|
+
| title | Required | `String` | - |
|
|
664
695
|
| subtitle | Optional | `String?` | `nil` |
|
|
665
|
-
| state | Enum | `State` |
|
|
696
|
+
| state | Enum | `State` | - |
|
|
666
697
|
| showIcon | Bool toggle | `Bool` | `true` |
|
|
667
|
-
| passengers | Array | `[PassengerRow]` |
|
|
698
|
+
| passengers | Array | `[PassengerRow]` | - |
|
|
668
699
|
| onTap | Closure | `(() -> Void)?` | `nil` |
|
|
669
700
|
|
|
670
701
|
## Enum Definitions
|
|
@@ -725,7 +756,7 @@ Alongside the markdown, emit a structured JSON so Phase 3G (Property Coverage) c
|
|
|
725
756
|
"type": "{VARIANT|BOOLEAN|TEXT|INSTANCE_SWAP|LAYER_TEXT}",
|
|
726
757
|
"status": "{IMPLEMENT|SKIP}",
|
|
727
758
|
"swiftType": "{enum State | String? | Image? | Bool | ...}",
|
|
728
|
-
"reason": "{only for SKIP
|
|
759
|
+
"reason": "{only for SKIP - mandatory, e.g. 'Boolean merged into icon: Image? per Boolean Visibility Merge Rule'}"
|
|
729
760
|
}
|
|
730
761
|
],
|
|
731
762
|
"enums": [
|
|
@@ -741,7 +772,7 @@ Alongside the markdown, emit a structured JSON so Phase 3G (Property Coverage) c
|
|
|
741
772
|
|
|
742
773
|
**Rules:**
|
|
743
774
|
- Every key from `componentPropertyDefinitions` in `component_properties.json` MUST appear in `properties`
|
|
744
|
-
- DYNAMIC entries from Layer Text Classification (
|
|
775
|
+
- DYNAMIC entries from Layer Text Classification (section1.5) MUST also appear in `properties` with `"type": "LAYER_TEXT"` and `"figmaKey": null`
|
|
745
776
|
- IMPLEMENT properties MUST have `swiftType`
|
|
746
777
|
- SKIP properties MUST have `reason`
|
|
747
778
|
- `propertyCount` = count of IMPLEMENT properties (used by GATE 3 complexity check)
|
|
@@ -838,14 +869,14 @@ Before marking complete, verify:
|
|
|
838
869
|
[ ] component_properties.json fully analyzed for variant types
|
|
839
870
|
[ ] All repeating patterns identified and modeled as arrays
|
|
840
871
|
[ ] All variant properties classified (enum, bool, optional, array)
|
|
841
|
-
[ ] Layer text classification performed
|
|
842
|
-
[ ] Image asset classification performed
|
|
843
|
-
[ ] List inference performed
|
|
844
|
-
[ ] Sub-component detection performed
|
|
845
|
-
[ ] Configuration hierarchy decided
|
|
872
|
+
[ ] Layer text classification performed - all sample/placeholder data identified as DYNAMIC API parameters
|
|
873
|
+
[ ] Image asset classification performed - stock photos as DYNAMIC (remote URL), icons/logos as STATIC (bundled)
|
|
874
|
+
[ ] List inference performed - homogeneous vs heterogeneous determined
|
|
875
|
+
[ ] Sub-component detection performed - configurations created where needed
|
|
876
|
+
[ ] Configuration hierarchy decided - flat vs grouped
|
|
846
877
|
[ ] All enums defined with correct case names
|
|
847
878
|
[ ] Final API design is complete and compilable
|
|
848
|
-
[ ] NO protocols used
|
|
879
|
+
[ ] NO protocols used - all types are concrete structs/enums
|
|
849
880
|
[ ] All configurations are Sendable
|
|
850
881
|
[ ] Complexity evaluated using FINAL property count (not raw Figma count)
|
|
851
882
|
[ ] 04_patterns.md written to pass3/
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# PHASE 3E
|
|
1
|
+
# PHASE 3E - Asset Inventory
|
|
2
2
|
|
|
3
3
|
Inventory downloaded assets, cross-reference with existing token registry.
|
|
4
4
|
Determines which assets are new vs already exist in the project.
|
|
5
5
|
|
|
6
|
-
CONDITIONAL
|
|
6
|
+
CONDITIONAL - skip if no design_context_assets.txt exists or is empty.
|
|
7
7
|
PARALLEL WITH: Phase 3A, 3B, 3C, 3D, 3F (all read from pass1/ independently)
|
|
8
8
|
|
|
9
9
|
---
|
|
@@ -72,9 +72,9 @@ cd {repos.common.path} && .build/debug/FigmaRegistryUtility ui-token-lookup --na
|
|
|
72
72
|
|
|
73
73
|
| Result | Action |
|
|
74
74
|
|--------|--------|
|
|
75
|
-
| Found | Mark status: "Existing"
|
|
76
|
-
| Not found | Mark status: "New"
|
|
77
|
-
| Tool error | Mark status: "Unknown"
|
|
75
|
+
| Found | Mark status: "Existing" - already in project, no action needed |
|
|
76
|
+
| Not found | Mark status: "New" - needs to be added to asset catalog |
|
|
77
|
+
| Tool error | Mark status: "Unknown" - log warning, continue |
|
|
78
78
|
|
|
79
79
|
Also check if the asset exists in the UIComponents asset catalog directly:
|
|
80
80
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# PHASE 3F
|
|
1
|
+
# PHASE 3F - Utility Integration Summary
|
|
2
2
|
|
|
3
3
|
Consolidate Phase 2 utility artifacts and map utilities to design elements.
|
|
4
4
|
Cross-references testing identifiers, localization keys, accessibility keys, and analytics events
|
|
5
5
|
with the actual design elements from Phase 1.
|
|
6
6
|
|
|
7
|
-
required
|
|
7
|
+
required - always execute this phase.
|
|
8
8
|
PARALLEL WITH: Phase 3A, 3B, 3C, 3D, 3E (all read from pass1/pass2 independently)
|
|
9
9
|
|
|
10
10
|
---
|
|
@@ -100,10 +100,10 @@ Source: pass2/utility_identifiers.md, pass2/utility_localization.md, pass2/utili
|
|
|
100
100
|
|
|
101
101
|
| Element | Testing ID | Localization Key | Accessibility | Analytics |
|
|
102
102
|
|---------|------------|------------------|---------------|-----------|
|
|
103
|
-
| Title text | `.title` | `ComponentName.Title` |
|
|
103
|
+
| Title text | `.title` | `ComponentName.Title` | - | - |
|
|
104
104
|
| Action button | `.actionButton` | `ComponentName.Action` | `.actionButton` | `UIInteractionButtonTapped` |
|
|
105
|
-
| Card container | `.card` |
|
|
106
|
-
| Badge | `.badge` |
|
|
105
|
+
| Card container | `.card` | - | - | `UIInteractionCardTapped` |
|
|
106
|
+
| Badge | `.badge` | - | runtime label | - |
|
|
107
107
|
|
|
108
108
|
## Testing Identifiers
|
|
109
109
|
|
|
@@ -126,7 +126,7 @@ OR: No localization keys (dynamic text only).
|
|
|
126
126
|
|-----|---------|-------|
|
|
127
127
|
| ComponentName.ActionButton | VoiceOver label for action | `.accessibilityLabel(...)` |
|
|
128
128
|
|
|
129
|
-
OR: No dedicated keys
|
|
129
|
+
OR: No dedicated keys - using runtime accessibility patterns.
|
|
130
130
|
|
|
131
131
|
## Analytics Events
|
|
132
132
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# PHASE 3G
|
|
1
|
+
# PHASE 3G - Property Coverage Verification
|
|
2
2
|
|
|
3
3
|
Verify that every Figma component property gathered in Phase 1 has been explicitly addressed by Phase 3D's architecture design. Prevents silent property drops.
|
|
4
4
|
|
|
5
|
-
SEQUENTIAL
|
|
5
|
+
SEQUENTIAL - runs AFTER all parallel sub-phases (3A-3F) complete.
|
|
6
6
|
DEPENDS ON: Phase 3D output (`pass3/04b_component_architecture.md`)
|
|
7
7
|
|
|
8
8
|
---
|
|
@@ -41,11 +41,11 @@ USER_ACTION_REQUIRED: Run Phase 3D first.
|
|
|
41
41
|
Extract the complete list of Figma component properties:
|
|
42
42
|
|
|
43
43
|
For each property, record:
|
|
44
|
-
- `name`
|
|
45
|
-
- `type`
|
|
46
|
-
- `figmaKey`
|
|
47
|
-
- `values`
|
|
48
|
-
- `default`
|
|
44
|
+
- `name` - display name (e.g., "Size", "Loyalty Type", "Icon")
|
|
45
|
+
- `type` - VARIANT, BOOLEAN, TEXT, INSTANCE_SWAP
|
|
46
|
+
- `figmaKey` - exact key from componentPropertyDefinitions (e.g., "Icon#1634:1")
|
|
47
|
+
- `values` - possible values (for VARIANT/BOOLEAN)
|
|
48
|
+
- `default` - default value
|
|
49
49
|
|
|
50
50
|
**CRITICAL: Every property in componentPropertyDefinitions MUST appear in this list. No exceptions.**
|
|
51
51
|
|
|
@@ -84,8 +84,8 @@ For each property, assign exactly one status:
|
|
|
84
84
|
| `DEFER` | Deferred to future iteration | **Mandatory reason** |
|
|
85
85
|
|
|
86
86
|
**SKIP reasons (valid examples):**
|
|
87
|
-
- "Fixed to single value per design
|
|
88
|
-
- "Internal Figma layout property
|
|
87
|
+
- "Fixed to single value per design - not configurable by developers"
|
|
88
|
+
- "Internal Figma layout property - no user-facing impact"
|
|
89
89
|
- "Controlled by parent component via slot composition"
|
|
90
90
|
- "Boolean merged into optional per Boolean Visibility Merge Rule"
|
|
91
91
|
|
|
@@ -118,7 +118,7 @@ Write: {artifactPath}/pass3/00_property_coverage.json
|
|
|
118
118
|
"figmaKey": "{exact key}",
|
|
119
119
|
"status": "{IMPLEMENT|SKIP|DEFER}",
|
|
120
120
|
"swiftType": "{enum TypeName | Bool | String | Image? | ...}",
|
|
121
|
-
"reason": "{only for SKIP/DEFER
|
|
121
|
+
"reason": "{only for SKIP/DEFER - mandatory}"
|
|
122
122
|
}
|
|
123
123
|
],
|
|
124
124
|
"unmapped": []
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# PHASE 3H
|
|
1
|
+
# PHASE 3H - Variant Property Configuration Analysis
|
|
2
2
|
|
|
3
3
|
Analyze how Figma variant/state properties (booleans, instance swaps) map to Swift configuration types.
|
|
4
4
|
Detects when Figma's boolean-only exposure is insufficient for a sub-component's actual configuration needs.
|
|
5
5
|
|
|
6
|
-
required
|
|
6
|
+
required - always execute this phase.
|
|
7
7
|
PARALLEL WITH: Phase 3A, 3B, 3C, 3E, 3F (all read from pass1/ independently)
|
|
8
8
|
MUST COMPLETE BEFORE: Phase 3D (which consumes this output)
|
|
9
9
|
|
|
@@ -41,11 +41,11 @@ Parse `code_connect_map_response.json` and classify every entry:
|
|
|
41
41
|
|---|---|
|
|
42
42
|
| `label` = our platform (SwiftUI) AND no `componentName` AND `snippet` matches `Image.xxx` | `ICON` |
|
|
43
43
|
| `label` = our platform AND `componentName` present AND `source` URL present | `SUBCOMPONENT` |
|
|
44
|
-
| `label` ≠ our platform (e.g., Compose, React) | `CROSS_PLATFORM`
|
|
44
|
+
| `label` ≠ our platform (e.g., Compose, React) | `CROSS_PLATFORM` - ignore |
|
|
45
45
|
|
|
46
46
|
Build a lookup: `{ nodeId → { classification, componentName?, source?, snippet } }`
|
|
47
47
|
|
|
48
|
-
If code_connect_map is empty or missing → set `codeConnectAvailable = false`. Continue
|
|
48
|
+
If code_connect_map is empty or missing → set `codeConnectAvailable = false`. Continue - all booleans will be `UNCLASSIFIED` and 3D handles them.
|
|
49
49
|
|
|
50
50
|
---
|
|
51
51
|
|
|
@@ -71,7 +71,7 @@ Look up the instance swap's nodes in the code_connect_map index (GATE 1):
|
|
|
71
71
|
| Found as `SUBCOMPONENT` (`componentName` + `source`) | `KNOWN_SUBCOMPONENT` | Swift type resolved in GATE 3 |
|
|
72
72
|
| Not found in code_connect_map | `UNMAPPED_SUBCOMPONENT` | → **HALT** |
|
|
73
73
|
|
|
74
|
-
**Node matching**: The instance swap's `nodeId` from `nestedComponents` is the definition ID. Variant-specific instance IDs appear in code_connect_map. Match by searching for code_connect_map entries whose `data-name` (from surrounding context) corresponds to the instance swap name. If ambiguous, check ALL code_connect_map ICON/SUBCOMPONENT entries
|
|
74
|
+
**Node matching**: The instance swap's `nodeId` from `nestedComponents` is the definition ID. Variant-specific instance IDs appear in code_connect_map. Match by searching for code_connect_map entries whose `data-name` (from surrounding context) corresponds to the instance swap name. If ambiguous, check ALL code_connect_map ICON/SUBCOMPONENT entries - group by snippet pattern and correlate with the instance swap slot.
|
|
75
75
|
|
|
76
76
|
### Step 3: Resolve unpaired Boolean
|
|
77
77
|
|
|
@@ -113,7 +113,7 @@ If action pairing detected → reclassify as `PAIRED_ACTION_SUBCOMPONENT`.
|
|
|
113
113
|
|
|
114
114
|
This classification tells downstream phases that:
|
|
115
115
|
1. The sub-component needs both data (config props) and a closure (action)
|
|
116
|
-
2. These must be paired at the call site
|
|
116
|
+
2. These must be paired at the call site - one without the other is nonsensical
|
|
117
117
|
3. A paired modifier pattern is required (not separate config prop + closure)
|
|
118
118
|
|
|
119
119
|
---
|
|
@@ -145,7 +145,7 @@ Analyze whether the icon has a **computed default** that varies by component sta
|
|
|
145
145
|
- Icon is generic (e.g., `caretDown`, `chevronRight`) with no variant correlation
|
|
146
146
|
- Icon appears in ALL variants identically with no semantic relationship to variant values
|
|
147
147
|
|
|
148
|
-
**When uncertain:** Prefer `Optional3<Image>`
|
|
148
|
+
**When uncertain:** Prefer `Optional3<Image>` - it's strictly more expressive than `Image?` and never wrong. The consumer can always use `.default` instead of being forced to know the internal default.
|
|
149
149
|
|
|
150
150
|
### KNOWN_SUBCOMPONENT
|
|
151
151
|
|
|
@@ -154,11 +154,11 @@ Analyze whether the icon has a **computed default** that varies by component sta
|
|
|
154
154
|
```
|
|
155
155
|
Glob: Sources/UIComponents/**/{ComponentName}Configuration.swift
|
|
156
156
|
```
|
|
157
|
-
3. **Filter sub-component props
|
|
157
|
+
3. **Filter sub-component props - static vs dynamic:**
|
|
158
158
|
|
|
159
159
|
Read the sub-component's Configuration (or init for SIMPLE). For each property, determine:
|
|
160
160
|
- **Dynamic**: Content props that the caller controls (title, text, label, description, icon when context-dependent). These carry meaning unique to each usage.
|
|
161
|
-
- **Static**: Styling/layout props that the parent component dictates (style, size, colorTheme, iconPosition). These are internal design decisions
|
|
161
|
+
- **Static**: Styling/layout props that the parent component dictates (style, size, colorTheme, iconPosition). These are internal design decisions - same for every instance of this sub-component within the parent.
|
|
162
162
|
|
|
163
163
|
**Rule:** If a prop's value is fixed by the parent's design (e.g., secondary button always uses `style: .ghost, size: .default`) → static. If a prop carries caller-specific content → dynamic.
|
|
164
164
|
|
|
@@ -171,7 +171,7 @@ Analyze whether the icon has a **computed default** that varies by component sta
|
|
|
171
171
|
| 2+ | Mini config struct (e.g., `PriceConfiguration?`) | Multiple dynamic props grouped, nil = hidden |
|
|
172
172
|
| Component doesn't exist | **HALT** | Sub-component must be implemented first |
|
|
173
173
|
|
|
174
|
-
**Mini config structs** contain ONLY the dynamic props
|
|
174
|
+
**Mini config structs** contain ONLY the dynamic props - static props are NOT exposed:
|
|
175
175
|
```swift
|
|
176
176
|
// TurkishButton has 6 props, but in BottomActions context only title is dynamic:
|
|
177
177
|
// → secondaryButtonTitle: String? (not TurkishButtonConfiguration?)
|
|
@@ -181,7 +181,7 @@ Analyze whether the icon has a **computed default** that varies by component sta
|
|
|
181
181
|
// struct PriceConfiguration { label, currency, wholeAmount, decimalAmount }
|
|
182
182
|
```
|
|
183
183
|
|
|
184
|
-
Record the static props and their fixed values in the artifact
|
|
184
|
+
Record the static props and their fixed values in the artifact - Phase 4B needs them to hardcode internally.
|
|
185
185
|
|
|
186
186
|
### PAIRED_ACTION_SUBCOMPONENT
|
|
187
187
|
|
|
@@ -205,7 +205,7 @@ func dismissButton(action: @escaping () -> Void) -> Self
|
|
|
205
205
|
|
|
206
206
|
### CONTENT_LEAF
|
|
207
207
|
|
|
208
|
-
Swift type: `String?`
|
|
208
|
+
Swift type: `String?` - `nil` = hidden. The boolean is dropped (merged into the optional).
|
|
209
209
|
|
|
210
210
|
### REPEATING_PATTERN_MEMBER / REPEATING_PATTERN_CONTAINER
|
|
211
211
|
|
|
@@ -255,8 +255,8 @@ Swift type: deferred to Phase 3D. Output `"swiftType": null, "deferredTo": "3D"`
|
|
|
255
255
|
"swiftType": "Optional3<Image> | String? | PriceConfiguration? | Bool | null",
|
|
256
256
|
"swiftName": "{suggested Swift property name}",
|
|
257
257
|
"dynamicProps": ["{list of dynamic prop names and types, for KNOWN_SUBCOMPONENT / PAIRED_ACTION_SUBCOMPONENT}"],
|
|
258
|
-
"staticProps": ["{list of static prop names, values, and types
|
|
259
|
-
"pairedClosure": "(() -> Void)? | null
|
|
258
|
+
"staticProps": ["{list of static prop names, values, and types - parent hardcodes these}"],
|
|
259
|
+
"pairedClosure": "(() -> Void)? | null - only for PAIRED_ACTION_SUBCOMPONENT",
|
|
260
260
|
"rationale": "{why this classification and type were chosen, including static/dynamic reasoning}",
|
|
261
261
|
"halt": false,
|
|
262
262
|
"deferredTo": null
|
|
@@ -294,8 +294,8 @@ This output is consumed by:
|
|
|
294
294
|
|
|
295
295
|
| Phase | Artifact Read | Usage |
|
|
296
296
|
|---|---|---|
|
|
297
|
-
| **3D** (GATE 2: Architecture) | `04c_variant_config_analysis.json` | Uses classifications for
|
|
298
|
-
| **4A** (Configuration) | `04c_variant_config_analysis.json` | Uses `swiftType` for property declarations. Only `dynamicProps` go in config
|
|
297
|
+
| **3D** (GATE 2: Architecture) | `04c_variant_config_analysis.json` | Uses classifications for section2.2 Sub-Component Detection and section2.3 Property Classification. Does NOT re-classify - consumes directly. Resolves UNCLASSIFIED entries using design_context. |
|
|
298
|
+
| **4A** (Configuration) | `04c_variant_config_analysis.json` | Uses `swiftType` for property declarations. Only `dynamicProps` go in config - `staticProps` are omitted. Creates mini config structs for 2+ dynamic props. |
|
|
299
299
|
| **4B** (View) | `04c_variant_config_analysis.json` | For KNOWN_SUBCOMPONENT: instantiates sub-component internally with `staticProps` hardcoded. For PAIRED_ACTION_SUBCOMPONENT: generates paired modifier binding data+closure. For ICON with Optional3: switches on `.default`/`.none`/`.some`. |
|
|
300
300
|
| **6** (Code Connect) | `04c_variant_config_analysis.json` | For KNOWN_SUBCOMPONENT/PAIRED_ACTION_SUBCOMPONENT: `@FigmaBoolean` maps to `nil`/default-config. For ICON with Optional3: `@FigmaBoolean` maps to `.default`/`.none`. No ternary expressions. |
|
|
301
301
|
|