@mmerterden/multi-agent-pipeline 8.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2623 -0
- package/LICENSE +21 -0
- package/README.md +852 -0
- package/docs/FIGMA_PIPELINE.md +138 -0
- package/docs/GENERICITY-REVIEW.md +277 -0
- package/docs/STABILITY-FIX-PLAN.md +168 -0
- package/docs/adr/0001-three-model-triage.md +81 -0
- package/docs/adr/0002-instruction-driven-flag.md +62 -0
- package/docs/adr/0003-unified-shared-skills.md +55 -0
- package/docs/adr/0004-zero-dependency-philosophy.md +60 -0
- package/docs/adr/0005-lazy-phase-docs.md +68 -0
- package/docs/adr/0006-skills-core-external-split.md +52 -0
- package/docs/adr/0007-multi-tool-adapter-framework.md +110 -0
- package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +98 -0
- package/docs/adr/README.md +33 -0
- package/docs/architecture.md +181 -0
- package/docs/best-practices.md +93 -0
- package/docs/features.md +274 -0
- package/docs/performance.md +116 -0
- package/docs/recovery-guide.md +479 -0
- package/index.js +76 -0
- package/install/_adapters.mjs +69 -0
- package/install/_common.mjs +150 -0
- package/install/_copilot-instructions.mjs +32 -0
- package/install/_dev-only-files.mjs +23 -0
- package/install/_platform-filter.mjs +132 -0
- package/install/_telemetry.mjs +79 -0
- package/install/claude.mjs +332 -0
- package/install/copilot.mjs +254 -0
- package/install/index.mjs +179 -0
- package/install/templates/copilot-instructions.md +319 -0
- package/install.js +24 -0
- package/package.json +78 -0
- package/pipeline/adapters/_base.mjs +288 -0
- package/pipeline/adapters/copilot-chat.mjs +158 -0
- package/pipeline/adapters/cursor.mjs +187 -0
- package/pipeline/agents/android-architect.md +42 -0
- package/pipeline/agents/backend-architect.md +43 -0
- package/pipeline/agents/code-reviewer.md +57 -0
- package/pipeline/agents/dev-critic.md +148 -0
- package/pipeline/agents/explorer.md +34 -0
- package/pipeline/agents/ios-architect.md +41 -0
- package/pipeline/agents/security-auditor.md +98 -0
- package/pipeline/agents/task-clarifier.md +113 -0
- package/pipeline/claude-md-template.md +55 -0
- package/pipeline/commands/archive-guard.md +45 -0
- package/pipeline/commands/deploy.md +54 -0
- package/pipeline/commands/figma-to-swiftui.md +295 -0
- package/pipeline/commands/multi-agent/_account-picker.md +90 -0
- package/pipeline/commands/multi-agent/_dev-context.md +111 -0
- package/pipeline/commands/multi-agent/_input-parser.md +43 -0
- package/pipeline/commands/multi-agent/_repo-picker.md +76 -0
- package/pipeline/commands/multi-agent/autopilot.md +116 -0
- package/pipeline/commands/multi-agent/channels.md +465 -0
- package/pipeline/commands/multi-agent/delete.md +66 -0
- package/pipeline/commands/multi-agent/dev-autopilot.md +120 -0
- package/pipeline/commands/multi-agent/dev-local-autopilot.md +110 -0
- package/pipeline/commands/multi-agent/dev-local.md +105 -0
- package/pipeline/commands/multi-agent/dev.md +246 -0
- package/pipeline/commands/multi-agent/diff-explain.md +68 -0
- package/pipeline/commands/multi-agent/help.md +422 -0
- package/pipeline/commands/multi-agent/issue.md +79 -0
- package/pipeline/commands/multi-agent/jira.md +132 -0
- package/pipeline/commands/multi-agent/kill.md +38 -0
- package/pipeline/commands/multi-agent/language.md +94 -0
- package/pipeline/commands/multi-agent/local-autopilot.md +139 -0
- package/pipeline/commands/multi-agent/local.md +117 -0
- package/pipeline/commands/multi-agent/log.md +25 -0
- package/pipeline/commands/multi-agent/manual-test.md +43 -0
- package/pipeline/commands/multi-agent/purge.md +39 -0
- package/pipeline/commands/multi-agent/refactor.md +188 -0
- package/pipeline/commands/multi-agent/refs/android-guide.md +250 -0
- package/pipeline/commands/multi-agent/refs/audit-guide.md +240 -0
- package/pipeline/commands/multi-agent/refs/backend-guide.md +135 -0
- package/pipeline/commands/multi-agent/refs/channels/confluence.md +153 -0
- package/pipeline/commands/multi-agent/refs/channels/issue-comment.md +141 -0
- package/pipeline/commands/multi-agent/refs/channels/jira.md +127 -0
- package/pipeline/commands/multi-agent/refs/channels/pr-review-actions.md +135 -0
- package/pipeline/commands/multi-agent/refs/channels/pr.md +139 -0
- package/pipeline/commands/multi-agent/refs/channels/wiki.md +66 -0
- package/pipeline/commands/multi-agent/refs/component-dispatch.md +92 -0
- package/pipeline/commands/multi-agent/refs/cross-cli-contract.md +326 -0
- package/pipeline/commands/multi-agent/refs/frontend-guide.md +136 -0
- package/pipeline/commands/multi-agent/refs/issue-jira-triad.md +104 -0
- package/pipeline/commands/multi-agent/refs/keychain.md +80 -0
- package/pipeline/commands/multi-agent/refs/knowledge.md +112 -0
- package/pipeline/commands/multi-agent/refs/multi-repo-integration-build.md +207 -0
- package/pipeline/commands/multi-agent/refs/phases/log-format.md +89 -0
- package/pipeline/commands/multi-agent/refs/phases/modes.md +156 -0
- package/pipeline/commands/multi-agent/refs/phases/operations.md +91 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-0-init.md +481 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-1-analysis.md +264 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-2-planning.md +278 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-3-dev.md +364 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-4-review.md +378 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-5-test.md +129 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-6-commit.md +339 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-7-report.md +361 -0
- package/pipeline/commands/multi-agent/refs/phases.md +187 -0
- package/pipeline/commands/multi-agent/refs/progress-contract.md +155 -0
- package/pipeline/commands/multi-agent/refs/rules.md +189 -0
- package/pipeline/commands/multi-agent/refs/swiftui-guide.md +254 -0
- package/pipeline/commands/multi-agent/refs/tracker-contract.md +256 -0
- package/pipeline/commands/multi-agent/refs/wiki-capture.md +109 -0
- package/pipeline/commands/multi-agent/resume.md +28 -0
- package/pipeline/commands/multi-agent/review.md +228 -0
- package/pipeline/commands/multi-agent/scan.md +74 -0
- package/pipeline/commands/multi-agent/search.md +97 -0
- package/pipeline/commands/multi-agent/setup.md +767 -0
- package/pipeline/commands/multi-agent/stack.md +48 -0
- package/pipeline/commands/multi-agent/status.md +38 -0
- package/pipeline/commands/multi-agent/sync.md +319 -0
- package/pipeline/commands/multi-agent/test.md +39 -0
- package/pipeline/commands/multi-agent/update.md +88 -0
- package/pipeline/commands/multi-agent.md +293 -0
- package/pipeline/commands/security-review.md +6 -0
- package/pipeline/commands/sim-test.md +256 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-1-analysis.json +25 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-2-plan.json +30 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-review.json +20 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-triage.json +15 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/task.json +12 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-1-analysis.json +29 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-2-plan.json +43 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-review.json +35 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-triage.json +35 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/task.json +12 -0
- package/pipeline/eval/golden-tasks/README.md +65 -0
- package/pipeline/eval/triage/01-empty-findings/expected.json +6 -0
- package/pipeline/eval/triage/01-empty-findings/input.json +5 -0
- package/pipeline/eval/triage/01-empty-findings/notes.md +7 -0
- package/pipeline/eval/triage/02-real-blocker/expected.json +15 -0
- package/pipeline/eval/triage/02-real-blocker/input.json +14 -0
- package/pipeline/eval/triage/02-real-blocker/notes.md +7 -0
- package/pipeline/eval/triage/03-out-of-scope-defer/expected.json +18 -0
- package/pipeline/eval/triage/03-out-of-scope-defer/input.json +14 -0
- package/pipeline/eval/triage/03-out-of-scope-defer/notes.md +10 -0
- package/pipeline/eval/triage/04-false-positive-reject/expected.json +18 -0
- package/pipeline/eval/triage/04-false-positive-reject/input.json +14 -0
- package/pipeline/eval/triage/04-false-positive-reject/notes.md +10 -0
- package/pipeline/eval/triage/05-mixed-classification/expected.json +43 -0
- package/pipeline/eval/triage/05-mixed-classification/input.json +38 -0
- package/pipeline/eval/triage/05-mixed-classification/notes.md +17 -0
- package/pipeline/eval/triage/06-severity-mismatch/expected.json +15 -0
- package/pipeline/eval/triage/06-severity-mismatch/input.json +14 -0
- package/pipeline/eval/triage/06-severity-mismatch/notes.md +9 -0
- package/pipeline/eval/triage/07-duplicate-reviewers/expected.json +27 -0
- package/pipeline/eval/triage/07-duplicate-reviewers/input.json +22 -0
- package/pipeline/eval/triage/07-duplicate-reviewers/notes.md +9 -0
- package/pipeline/eval/triage/08-style-misclassified/expected.json +18 -0
- package/pipeline/eval/triage/08-style-misclassified/input.json +14 -0
- package/pipeline/eval/triage/08-style-misclassified/notes.md +9 -0
- package/pipeline/eval/triage/09-cascading-finding/expected.json +23 -0
- package/pipeline/eval/triage/09-cascading-finding/input.json +22 -0
- package/pipeline/eval/triage/09-cascading-finding/notes.md +9 -0
- package/pipeline/eval/triage/10-deferred-crossref/expected.json +18 -0
- package/pipeline/eval/triage/10-deferred-crossref/input.json +14 -0
- package/pipeline/eval/triage/10-deferred-crossref/notes.md +9 -0
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/expected.json +27 -0
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/input.json +22 -0
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/notes.md +14 -0
- package/pipeline/eval/triage/README.md +54 -0
- package/pipeline/lib/account-resolver.sh +204 -0
- package/pipeline/lib/channels-multi-repo.sh +218 -0
- package/pipeline/lib/context-link-extractor.sh +192 -0
- package/pipeline/lib/credential-store-resolver.sh +57 -0
- package/pipeline/lib/credential-store.sh +226 -0
- package/pipeline/lib/fetch-confluence.sh +358 -0
- package/pipeline/lib/fetch-crashlytics.sh +314 -0
- package/pipeline/lib/fetch-fortify.sh +321 -0
- package/pipeline/lib/fetch-swagger.sh +270 -0
- package/pipeline/lib/issue-fetcher.sh +333 -0
- package/pipeline/lib/multi-repo-pipeline.sh +252 -0
- package/pipeline/lib/plan-todos.sh +284 -0
- package/pipeline/lib/post-pr-review.sh +374 -0
- package/pipeline/lib/repo-cache.sh +231 -0
- package/pipeline/lib/review-watch.sh +244 -0
- package/pipeline/lib/shadow-git.sh +222 -0
- package/pipeline/lib/submodule-detector.sh +177 -0
- package/pipeline/lib/vercel-deploy.sh +170 -0
- package/pipeline/preferences-template.json +132 -0
- package/pipeline/rules/app-store-guidelines.md +59 -0
- package/pipeline/rules/code-review.md +27 -0
- package/pipeline/rules/code-style.md +37 -0
- package/pipeline/rules/debugging.md +24 -0
- package/pipeline/rules/figma-pipeline.md +190 -0
- package/pipeline/rules/git-conventions.md +29 -0
- package/pipeline/rules/kotlin-android.md +92 -0
- package/pipeline/rules/performance.md +23 -0
- package/pipeline/rules/security.md +39 -0
- package/pipeline/rules/swiftui-qa.md +32 -0
- package/pipeline/rules/tdd.md +25 -0
- package/pipeline/rules/testing.md +37 -0
- package/pipeline/schemas/agent-state.schema.json +273 -0
- package/pipeline/schemas/analysis-output.schema.json +59 -0
- package/pipeline/schemas/clarify-output.schema.json +74 -0
- package/pipeline/schemas/dev-critic-output.schema.json +104 -0
- package/pipeline/schemas/diff-risk.schema.json +78 -0
- package/pipeline/schemas/figma-project-config.schema.json +372 -0
- package/pipeline/schemas/migrations/README.md +73 -0
- package/pipeline/schemas/migrations/figma-config-1.0.0-to-2.0.0.mjs +112 -0
- package/pipeline/schemas/migrations/prefs-2.0.0-to-2.1.0.mjs +75 -0
- package/pipeline/schemas/migrations/prefs-2.1.0-to-2.2.0.mjs +64 -0
- package/pipeline/schemas/migrations/prefs-2.2.0-to-2.3.0.mjs +36 -0
- package/pipeline/schemas/migrations/state-2.0.0-to-2.1.0.mjs +34 -0
- package/pipeline/schemas/plan-todos.schema.json +62 -0
- package/pipeline/schemas/planning-output.schema.json +57 -0
- package/pipeline/schemas/prefs.schema.json +1137 -0
- package/pipeline/schemas/reviewer-output.schema.json +55 -0
- package/pipeline/schemas/test-gap.schema.json +64 -0
- package/pipeline/schemas/token-budget.json +17 -0
- package/pipeline/schemas/triage-corpus.schema.json +31 -0
- package/pipeline/schemas/triage-output.schema.json +115 -0
- package/pipeline/scripts/.last-figma-sync-plan.json +23 -0
- package/pipeline/scripts/README-figma-smokes.md +34 -0
- package/pipeline/scripts/README.md +104 -0
- package/pipeline/scripts/aggregate-metrics.mjs +310 -0
- package/pipeline/scripts/audit-log-rotate.sh +61 -0
- package/pipeline/scripts/audit-log.sh +69 -0
- package/pipeline/scripts/benchmark-phase-0.sh +128 -0
- package/pipeline/scripts/build-skills-index.mjs +139 -0
- package/pipeline/scripts/classify-plan-safety.mjs +177 -0
- package/pipeline/scripts/cost-table.json +27 -0
- package/pipeline/scripts/diff-explain.mjs +276 -0
- package/pipeline/scripts/diff-risk-score.mjs +328 -0
- package/pipeline/scripts/eval-golden-tasks-live.mjs +294 -0
- package/pipeline/scripts/eval-golden-tasks.mjs +223 -0
- package/pipeline/scripts/eval-triage.mjs +171 -0
- package/pipeline/scripts/figma-placeholder-map.json +191 -0
- package/pipeline/scripts/fixtures/diff-risk-android.diff +40 -0
- package/pipeline/scripts/fixtures/diff-risk-ios.diff +48 -0
- package/pipeline/scripts/fixtures/install-layout.tsv +16 -0
- package/pipeline/scripts/fixtures/test-gap-node.diff +30 -0
- package/pipeline/scripts/fixtures/test-gap-python.diff +32 -0
- package/pipeline/scripts/gen-mode-dispatch.mjs +170 -0
- package/pipeline/scripts/gen-skills-index.mjs +90 -0
- package/pipeline/scripts/github-ssh-setup.sh +103 -0
- package/pipeline/scripts/import-figma-skills.sh +253 -0
- package/pipeline/scripts/keychain-save.sh +74 -0
- package/pipeline/scripts/keychain.py +294 -0
- package/pipeline/scripts/log-metric.sh +98 -0
- package/pipeline/scripts/match-skills.mjs +167 -0
- package/pipeline/scripts/memory-load.sh +46 -0
- package/pipeline/scripts/memory-save.sh +76 -0
- package/pipeline/scripts/migrate-prefs.mjs +390 -0
- package/pipeline/scripts/migrate-state.mjs +215 -0
- package/pipeline/scripts/output-quality-check.sh +125 -0
- package/pipeline/scripts/phase-banner.sh +158 -0
- package/pipeline/scripts/phase-tracker.sh +548 -0
- package/pipeline/scripts/pre-commit-check.sh +69 -0
- package/pipeline/scripts/pre-push-check.sh +77 -0
- package/pipeline/scripts/render-agent-log-cost.sh +149 -0
- package/pipeline/scripts/render-cost-summary.sh +137 -0
- package/pipeline/scripts/render-work-summary.sh +195 -0
- package/pipeline/scripts/repo-map.mjs +367 -0
- package/pipeline/scripts/run-aggregator.mjs +298 -0
- package/pipeline/scripts/scan-skills.sh +332 -0
- package/pipeline/scripts/search-logs.sh +291 -0
- package/pipeline/scripts/sign-skills.sh +67 -0
- package/pipeline/scripts/smoke-adapters.sh +207 -0
- package/pipeline/scripts/smoke-add-detail.sh +137 -0
- package/pipeline/scripts/smoke-agent-log-cost.sh +183 -0
- package/pipeline/scripts/smoke-agent-model-routing.sh +87 -0
- package/pipeline/scripts/smoke-bitbucket-contract.sh +223 -0
- package/pipeline/scripts/smoke-channels-flow.sh +130 -0
- package/pipeline/scripts/smoke-ci-workflows.sh +88 -0
- package/pipeline/scripts/smoke-clarify.sh +148 -0
- package/pipeline/scripts/smoke-commands-skills-parity.sh +87 -0
- package/pipeline/scripts/smoke-compliance-skills.sh +119 -0
- package/pipeline/scripts/smoke-cost-summary.sh +139 -0
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +198 -0
- package/pipeline/scripts/smoke-cross-phase-cohesion.sh +128 -0
- package/pipeline/scripts/smoke-delete-flow.sh +151 -0
- package/pipeline/scripts/smoke-dev-critic.sh +144 -0
- package/pipeline/scripts/smoke-diff-explain.sh +128 -0
- package/pipeline/scripts/smoke-diff-risk.sh +161 -0
- package/pipeline/scripts/smoke-dynamic-skill-loading.sh +160 -0
- package/pipeline/scripts/smoke-eval-live.sh +136 -0
- package/pipeline/scripts/smoke-existing-discovery-gate.sh +71 -0
- package/pipeline/scripts/smoke-figma-android-parity.sh +148 -0
- package/pipeline/scripts/smoke-figma-config-schema.sh +144 -0
- package/pipeline/scripts/smoke-figma-credential-store.sh +105 -0
- package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +177 -0
- package/pipeline/scripts/smoke-figma-dispatch.sh +123 -0
- package/pipeline/scripts/smoke-figma-skill-import.sh +174 -0
- package/pipeline/scripts/smoke-figma-sync.sh +149 -0
- package/pipeline/scripts/smoke-identity-isolation.sh +70 -0
- package/pipeline/scripts/smoke-install-layout.sh +241 -0
- package/pipeline/scripts/smoke-install-leak-gate.sh +125 -0
- package/pipeline/scripts/smoke-issue-comment-template.sh +86 -0
- package/pipeline/scripts/smoke-issue-jira-triad.sh +120 -0
- package/pipeline/scripts/smoke-keychain.sh +158 -0
- package/pipeline/scripts/smoke-language-axis.sh +109 -0
- package/pipeline/scripts/smoke-lib-scripts.sh +395 -0
- package/pipeline/scripts/smoke-migrate-state.sh +102 -0
- package/pipeline/scripts/smoke-mode-dispatch-drift.sh +158 -0
- package/pipeline/scripts/smoke-multi-repo-integration.sh +116 -0
- package/pipeline/scripts/smoke-multi-repo-worktree.sh +61 -0
- package/pipeline/scripts/smoke-no-token-prompt.sh +69 -0
- package/pipeline/scripts/smoke-pat-audit.sh +107 -0
- package/pipeline/scripts/smoke-per-repo-memory.sh +156 -0
- package/pipeline/scripts/smoke-personal-data.sh +82 -0
- package/pipeline/scripts/smoke-phase-0-multi-repo.sh +170 -0
- package/pipeline/scripts/smoke-phase-6-multi.sh +79 -0
- package/pipeline/scripts/smoke-phase-banner.sh +101 -0
- package/pipeline/scripts/smoke-phase-tracker.sh +255 -0
- package/pipeline/scripts/smoke-phase0-bridge-contract.sh +241 -0
- package/pipeline/scripts/smoke-phase4-triage.sh +142 -0
- package/pipeline/scripts/smoke-plan-approval-gate.sh +71 -0
- package/pipeline/scripts/smoke-plan-safety.sh +139 -0
- package/pipeline/scripts/smoke-plan-todos.sh +193 -0
- package/pipeline/scripts/smoke-pr-review-actions.sh +152 -0
- package/pipeline/scripts/smoke-pre-commit.sh +138 -0
- package/pipeline/scripts/smoke-pref-migration.sh +224 -0
- package/pipeline/scripts/smoke-prefs-language.sh +134 -0
- package/pipeline/scripts/smoke-progress-contract.sh +118 -0
- package/pipeline/scripts/smoke-push-retry.sh +75 -0
- package/pipeline/scripts/smoke-readme-counts.sh +120 -0
- package/pipeline/scripts/smoke-repo-map.sh +300 -0
- package/pipeline/scripts/smoke-review-watch.sh +134 -0
- package/pipeline/scripts/smoke-run-aggregator.sh +216 -0
- package/pipeline/scripts/smoke-schema-validation.sh +173 -0
- package/pipeline/scripts/smoke-search.sh +187 -0
- package/pipeline/scripts/smoke-shadow-git.sh +175 -0
- package/pipeline/scripts/smoke-skill-authoring.sh +142 -0
- package/pipeline/scripts/smoke-skill-language.sh +83 -0
- package/pipeline/scripts/smoke-skill-manifest.sh +138 -0
- package/pipeline/scripts/smoke-skill-scan.sh +198 -0
- package/pipeline/scripts/smoke-stack-swap.sh +132 -0
- package/pipeline/scripts/smoke-subagent-validators.sh +105 -0
- package/pipeline/scripts/smoke-sync-delegation.sh +74 -0
- package/pipeline/scripts/smoke-sync-parity.sh +92 -0
- package/pipeline/scripts/smoke-tasklist-ordering.sh +111 -0
- package/pipeline/scripts/smoke-telemetry.sh +147 -0
- package/pipeline/scripts/smoke-test-gap.sh +183 -0
- package/pipeline/scripts/smoke-token-budget.sh +67 -0
- package/pipeline/scripts/smoke-tracker-contract.sh +129 -0
- package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +65 -0
- package/pipeline/scripts/smoke-triage-memory.sh +174 -0
- package/pipeline/scripts/smoke-url-enrichment.sh +70 -0
- package/pipeline/scripts/smoke-validator-contradiction.sh +67 -0
- package/pipeline/scripts/smoke-vercel-deploy-redact.sh +129 -0
- package/pipeline/scripts/smoke-wiki-integration.sh +146 -0
- package/pipeline/scripts/smoke-work-summary.sh +163 -0
- package/pipeline/scripts/smoke-worktree-path-convention.sh +86 -0
- package/pipeline/scripts/smoke-write-state.sh +115 -0
- package/pipeline/scripts/stack-swap.sh +182 -0
- package/pipeline/scripts/sync-figma-source.sh +228 -0
- package/pipeline/scripts/sync-parity-check.sh +135 -0
- package/pipeline/scripts/test-gap-rules/android.json +25 -0
- package/pipeline/scripts/test-gap-rules/ios.json +29 -0
- package/pipeline/scripts/test-gap-rules/node.json +17 -0
- package/pipeline/scripts/test-gap-rules/python.json +19 -0
- package/pipeline/scripts/test-gap-scan.mjs +343 -0
- package/pipeline/scripts/token-budget-report.mjs +145 -0
- package/pipeline/scripts/triage-memory.mjs +258 -0
- package/pipeline/scripts/ui-tree-dumper.swift +122 -0
- package/pipeline/scripts/uninstall.mjs +331 -0
- package/pipeline/scripts/update-issue-progress.sh +146 -0
- package/pipeline/scripts/validate-analysis.mjs +132 -0
- package/pipeline/scripts/validate-diff-risk.mjs +117 -0
- package/pipeline/scripts/validate-planning.mjs +180 -0
- package/pipeline/scripts/validate-reviewer.mjs +131 -0
- package/pipeline/scripts/validate-schemas.mjs +88 -0
- package/pipeline/scripts/validate-test-gap.mjs +90 -0
- package/pipeline/scripts/validate-triage.mjs +175 -0
- package/pipeline/scripts/verify-skills.sh +126 -0
- package/pipeline/scripts/write-state.mjs +175 -0
- package/pipeline/skills/.skill-manifest.json +779 -0
- package/pipeline/skills/.skills-index.json +1771 -0
- package/pipeline/skills/figma-android/README.md +36 -0
- package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +62 -0
- package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +158 -0
- package/pipeline/skills/figma-android/figma-component-test/SKILL.md +120 -0
- package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +35 -0
- package/pipeline/skills/figma-android/figma-to-component/SKILL.md +124 -0
- package/pipeline/skills/figma-common/README.md +57 -0
- package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +277 -0
- package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +498 -0
- package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +283 -0
- package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +362 -0
- package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +206 -0
- package/pipeline/skills/figma-common/figma-commit/REVIEW.md +337 -0
- package/pipeline/skills/figma-common/figma-commit/SKILL.md +211 -0
- package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +218 -0
- package/pipeline/skills/figma-common/figma-component-start/SKILL.md +246 -0
- package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +73 -0
- package/pipeline/skills/figma-common/figma-fix/SKILL.md +316 -0
- package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +542 -0
- package/pipeline/skills/figma-common/figma-issue/SKILL.md +745 -0
- package/pipeline/skills/figma-common/figma-iterate/SKILL.md +203 -0
- package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +1015 -0
- package/pipeline/skills/figma-common/figma-mend/SKILL.md +331 -0
- package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +398 -0
- package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +104 -0
- package/pipeline/skills/figma-common/figma-review/SKILL.md +395 -0
- package/pipeline/skills/figma-common/figma-setup/SKILL.md +514 -0
- package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +592 -0
- package/pipeline/skills/figma-common/figma-skip/SKILL.md +129 -0
- package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +104 -0
- package/pipeline/skills/figma-common/figma-utility/SKILL.md +274 -0
- package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +808 -0
- package/pipeline/skills/figma-common/figma-validate/SKILL.md +633 -0
- package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +711 -0
- package/pipeline/skills/figma-common/performance-review-next/SKILL.md +233 -0
- package/pipeline/skills/figma-common/performance-start/SKILL.md +425 -0
- package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +706 -0
- package/pipeline/skills/figma-common/performance-tour/SKILL.md +418 -0
- package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +67 -0
- package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +178 -0
- package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +184 -0
- package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +219 -0
- package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +274 -0
- package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +401 -0
- package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +57 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +307 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +119 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +174 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +333 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +368 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +393 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +617 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +352 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +337 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +206 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +235 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +214 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +871 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +156 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +175 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +176 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +333 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +412 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +336 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +695 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +332 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +380 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +262 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +482 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +274 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +636 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +142 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +547 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +39 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +659 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +580 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +51 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +129 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +64 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +531 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +89 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +155 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +196 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +57 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +89 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +227 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +157 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +90 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +116 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +153 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +130 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +218 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +188 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +93 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +98 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +261 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +147 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +182 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +185 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +609 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +332 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +261 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +184 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +188 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +768 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +191 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +420 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.json +94 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +336 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +391 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +292 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +1 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +93 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +299 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +343 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +206 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +149 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +281 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +332 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +176 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +98 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +298 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +195 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +1298 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +228 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +1089 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +141 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +106 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +162 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +105 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +179 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +260 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +260 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +86 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +321 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +1470 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +176 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +147 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +629 -0
- package/pipeline/skills/shared/README.md +212 -0
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +315 -0
- package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +348 -0
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +944 -0
- package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +51 -0
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +300 -0
- package/pipeline/skills/shared/core/multi-agent-delete/SKILL.md +63 -0
- package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +64 -0
- package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +56 -0
- package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +36 -0
- package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +42 -0
- package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +66 -0
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +292 -0
- package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +35 -0
- package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +38 -0
- package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +41 -0
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +87 -0
- package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +37 -0
- package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +53 -0
- package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +28 -0
- package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +47 -0
- package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +42 -0
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +191 -0
- package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +31 -0
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +61 -0
- package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +61 -0
- package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +62 -0
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +309 -0
- package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +55 -0
- package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +41 -0
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +184 -0
- package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +44 -0
- package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +34 -0
- package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +45 -0
- package/pipeline/skills/shared/external/agentflow/SKILL.md +199 -0
- package/pipeline/skills/shared/external/alarmkit/SKILL.md +438 -0
- package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +584 -0
- package/pipeline/skills/shared/external/android-architecture/SKILL.md +407 -0
- package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +153 -0
- package/pipeline/skills/shared/external/android-performance/SKILL.md +736 -0
- package/pipeline/skills/shared/external/android-security/SKILL.md +577 -0
- package/pipeline/skills/shared/external/android_ui_verification/SKILL.md +66 -0
- package/pipeline/skills/shared/external/api-patterns/SKILL.md +85 -0
- package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +910 -0
- package/pipeline/skills/shared/external/app-clips/SKILL.md +436 -0
- package/pipeline/skills/shared/external/app-intents/SKILL.md +489 -0
- package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +1076 -0
- package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +75 -0
- package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +409 -0
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +411 -0
- package/pipeline/skills/shared/external/app-store-review/references/code-signing.md +259 -0
- package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +90 -0
- package/pipeline/skills/shared/external/app-store-review/references/rejection-patterns.md +152 -0
- package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +118 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +500 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +425 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +344 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +508 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +285 -0
- package/pipeline/skills/shared/external/architecture/SKILL.md +60 -0
- package/pipeline/skills/shared/external/authentication/SKILL.md +496 -0
- package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +211 -0
- package/pipeline/skills/shared/external/background-processing/SKILL.md +499 -0
- package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +390 -0
- package/pipeline/skills/shared/external/callkit-voip/SKILL.md +461 -0
- package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +425 -0
- package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +462 -0
- package/pipeline/skills/shared/external/clean-code/SKILL.md +94 -0
- package/pipeline/skills/shared/external/closed-loop-delivery/SKILL.md +116 -0
- package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +492 -0
- package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +461 -0
- package/pipeline/skills/shared/external/compose-components/SKILL.md +441 -0
- package/pipeline/skills/shared/external/compose-navigation/SKILL.md +436 -0
- package/pipeline/skills/shared/external/compose-testing/SKILL.md +527 -0
- package/pipeline/skills/shared/external/contacts-framework/SKILL.md +425 -0
- package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +409 -0
- package/pipeline/skills/shared/external/context-compression/SKILL.md +266 -0
- package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +491 -0
- package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +435 -0
- package/pipeline/skills/shared/external/core-motion/SKILL.md +388 -0
- package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +405 -0
- package/pipeline/skills/shared/external/core-nfc/SKILL.md +495 -0
- package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +420 -0
- package/pipeline/skills/shared/external/coreml/SKILL.md +458 -0
- package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +765 -0
- package/pipeline/skills/shared/external/css-modern/SKILL.md +467 -0
- package/pipeline/skills/shared/external/database-patterns/SKILL.md +335 -0
- package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +422 -0
- package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +387 -0
- package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +298 -0
- package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +37 -0
- package/pipeline/skills/shared/external/device-integrity/SKILL.md +477 -0
- package/pipeline/skills/shared/external/docker-expert/SKILL.md +413 -0
- package/pipeline/skills/shared/external/energykit/SKILL.md +460 -0
- package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +541 -0
- package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +483 -0
- package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +326 -0
- package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +190 -0
- package/pipeline/skills/shared/external/firebase/SKILL.md +61 -0
- package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +348 -0
- package/pipeline/skills/shared/external/gradle-kotlin-dsl/SKILL.md +552 -0
- package/pipeline/skills/shared/external/healthkit/SKILL.md +498 -0
- package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +602 -0
- package/pipeline/skills/shared/external/help-skills/SKILL.md +166 -0
- package/pipeline/skills/shared/external/hig-components-content/SKILL.md +81 -0
- package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +95 -0
- package/pipeline/skills/shared/external/hig-components-status/SKILL.md +82 -0
- package/pipeline/skills/shared/external/hig-components-system/SKILL.md +101 -0
- package/pipeline/skills/shared/external/hig-foundations/SKILL.md +94 -0
- package/pipeline/skills/shared/external/hig-inputs/SKILL.md +110 -0
- package/pipeline/skills/shared/external/hig-patterns/SKILL.md +99 -0
- package/pipeline/skills/shared/external/hig-platforms/SKILL.md +81 -0
- package/pipeline/skills/shared/external/hig-technologies/SKILL.md +125 -0
- package/pipeline/skills/shared/external/homekit-matter/SKILL.md +496 -0
- package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +455 -0
- package/pipeline/skills/shared/external/html-semantic/SKILL.md +301 -0
- package/pipeline/skills/shared/external/humanizer/SKILL.md +118 -0
- package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +301 -0
- package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +140 -0
- package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +59 -0
- package/pipeline/skills/shared/external/ios-developer/SKILL.md +217 -0
- package/pipeline/skills/shared/external/ios-localization/SKILL.md +418 -0
- package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +627 -0
- package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +462 -0
- package/pipeline/skills/shared/external/ios-networking/SKILL.md +441 -0
- package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +862 -0
- package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -0
- package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +563 -0
- package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +1116 -0
- package/pipeline/skills/shared/external/ios-security/SKILL.md +496 -0
- package/pipeline/skills/shared/external/ios-security/references/app-review-guidelines.md +174 -0
- package/pipeline/skills/shared/external/ios-security/references/cryptokit-advanced.md +297 -0
- package/pipeline/skills/shared/external/ios-security/references/file-storage-patterns.md +354 -0
- package/pipeline/skills/shared/external/ios-security/references/privacy-manifest.md +117 -0
- package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +101 -0
- package/pipeline/skills/shared/external/live-activities/SKILL.md +500 -0
- package/pipeline/skills/shared/external/live-activities/references/live-activity-patterns.md +868 -0
- package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +109 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +110 -0
- package/pipeline/skills/shared/external/mapkit-location/SKILL.md +485 -0
- package/pipeline/skills/shared/external/mapkit-location/references/corelocation-patterns.md +730 -0
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +748 -0
- package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +479 -0
- package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +64 -0
- package/pipeline/skills/shared/external/musickit-audio/SKILL.md +395 -0
- package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +363 -0
- package/pipeline/skills/shared/external/natural-language/SKILL.md +412 -0
- package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +311 -0
- package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +418 -0
- package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +38 -0
- package/pipeline/skills/shared/external/observability-engineer/SKILL.md +235 -0
- package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +398 -0
- package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +254 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +387 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/references/paperkit-integration.md +376 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +302 -0
- package/pipeline/skills/shared/external/permissionkit/SKILL.md +446 -0
- package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +435 -0
- package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +501 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +701 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +774 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +869 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/photospicker-patterns.md +597 -0
- package/pipeline/skills/shared/external/play-store-review/SKILL.md +350 -0
- package/pipeline/skills/shared/external/push-notifications/SKILL.md +501 -0
- package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +677 -0
- package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +745 -0
- package/pipeline/skills/shared/external/python-patterns/SKILL.md +383 -0
- package/pipeline/skills/shared/external/react-best-practices/SKILL.md +290 -0
- package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +479 -0
- package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +480 -0
- package/pipeline/skills/shared/external/rest-api-design/SKILL.md +386 -0
- package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +506 -0
- package/pipeline/skills/shared/external/room-database/SKILL.md +564 -0
- package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +483 -0
- package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +544 -0
- package/pipeline/skills/shared/external/speech-recognition/SKILL.md +485 -0
- package/pipeline/skills/shared/external/storekit/SKILL.md +478 -0
- package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +58 -0
- package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +755 -0
- package/pipeline/skills/shared/external/swift-charts/SKILL.md +487 -0
- package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +895 -0
- package/pipeline/skills/shared/external/swift-codable/SKILL.md +467 -0
- package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +408 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +80 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/swift-6-2-concurrency.md +233 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +187 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +341 -0
- package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +113 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +124 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/actors.md +155 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/async-streams.md +67 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/bridging.md +52 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/bug-patterns.md +100 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/cancellation.md +107 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/diagnostics.md +70 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/hotspots.md +47 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/interop.md +129 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/new-features.md +224 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/structured.md +101 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/testing.md +218 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/unstructured.md +61 -0
- package/pipeline/skills/shared/external/swift-language/SKILL.md +498 -0
- package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +505 -0
- package/pipeline/skills/shared/external/swift-testing/SKILL.md +462 -0
- package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +504 -0
- package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +97 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/async-tests.md +252 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/core-rules.md +52 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/migrating-from-xctest.md +34 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +318 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/writing-better-tests.md +254 -0
- package/pipeline/skills/shared/external/swiftdata/SKILL.md +334 -0
- package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +504 -0
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +975 -0
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +675 -0
- package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +102 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/class-inheritance.md +104 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/cloudkit.md +10 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/core-rules.md +20 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/indexing.md +27 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/predicates.md +73 -0
- package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +503 -0
- package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +821 -0
- package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +553 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/SKILL.md +102 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/accessibility-patterns.md +215 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-advanced.md +403 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-basics.md +284 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-transitions.md +326 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts-accessibility.md +135 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts.md +602 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/image-optimization.md +203 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/latest-apis.md +464 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/layout-best-practices.md +266 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/liquid-glass.md +416 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/list-patterns.md +394 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-scenes.md +318 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-views.md +357 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-window-styling.md +303 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/performance-patterns.md +403 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/scroll-patterns.md +293 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/sheet-navigation-patterns.md +363 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/state-management.md +417 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/view-structure.md +389 -0
- package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +450 -0
- package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +425 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +336 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +97 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +69 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +99 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +147 -0
- package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +98 -0
- package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +262 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +207 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +177 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +169 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +178 -0
- package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +371 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +486 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +1097 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +780 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +696 -0
- package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +487 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +46 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +29 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +33 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +52 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +114 -0
- package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +108 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/accessibility.md +13 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/api.md +39 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/data.md +43 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/design.md +31 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/hygiene.md +9 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/navigation.md +14 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/performance.md +46 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/swift.md +56 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/views.md +35 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +103 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +428 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +534 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +948 -0
- package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +210 -0
- package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +273 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +151 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +95 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +51 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +111 -0
- package/pipeline/skills/shared/external/tailwind-css/SKILL.md +309 -0
- package/pipeline/skills/shared/external/testing-backend/SKILL.md +393 -0
- package/pipeline/skills/shared/external/tipkit/SKILL.md +494 -0
- package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +782 -0
- package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +336 -0
- package/pipeline/skills/shared/external/vision-framework/SKILL.md +475 -0
- package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +736 -0
- package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +738 -0
- package/pipeline/skills/shared/external/vue-composition/SKILL.md +371 -0
- package/pipeline/skills/shared/external/weatherkit/SKILL.md +410 -0
- package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +567 -0
- package/pipeline/skills/shared/external/web-accessibility/SKILL.md +373 -0
- package/pipeline/skills/shared/external/web-performance/SKILL.md +345 -0
- package/pipeline/skills/shared/external/web-testing/SKILL.md +385 -0
- package/pipeline/skills/shared/external/widgetkit/SKILL.md +497 -0
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +871 -0
- package/pipeline/skills/skills-index.md +205 -0
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
# PHASE 4C — FIGMA.md Documentation
|
|
2
|
+
|
|
3
|
+
Write the FIGMA.md file for the component.
|
|
4
|
+
This file is the bridge between Figma and code — used by other phases (Phase 3C nested lookup) and developers.
|
|
5
|
+
|
|
6
|
+
required — always execute this phase.
|
|
7
|
+
PARALLEL WITH: Phase 4A (Configuration), Phase 4B (View)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## CONTEXT VARIABLES
|
|
12
|
+
|
|
13
|
+
These are provided by the orchestrator in the dispatch prompt:
|
|
14
|
+
- `componentName` — e.g., "LabelBadge"
|
|
15
|
+
- `componentLocation` — e.g., "Sources/UIComponents/.../LabelBadge/"
|
|
16
|
+
- `artifactPath` — path to implementation artifacts
|
|
17
|
+
- `nodeId` — Figma node ID
|
|
18
|
+
- `fileKey` — Figma file key
|
|
19
|
+
- `complexity` — SIMPLE or COMPLEX
|
|
20
|
+
- `gitUser` — from `git config user.name`
|
|
21
|
+
- `date` — current date in DD.MM.YYYY format
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## PRE-CHECK
|
|
26
|
+
|
|
27
|
+
Read all required analysis files:
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
{artifactPath}/pass3/04b_component_architecture.md → API shape, enums, properties
|
|
31
|
+
{artifactPath}/pass3/04_patterns.md → Variant mapping table
|
|
32
|
+
{artifactPath}/pass3/03_nested_components.md → Child components
|
|
33
|
+
{artifactPath}/pass3/05_complexity.md → SIMPLE or COMPLEX
|
|
34
|
+
{artifactPath}/pass3/07_implementation_spec.md → Compiled blueprint
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
If any required file is missing:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
STATUS: HALT
|
|
41
|
+
PHASE: phase-4c
|
|
42
|
+
GATE: PRE_CHECK
|
|
43
|
+
REASON: Required artifacts missing.
|
|
44
|
+
COMPLETED_GATES: []
|
|
45
|
+
ARTIFACTS_CREATED: none
|
|
46
|
+
USER_ACTION_REQUIRED: Run Phase 3 first.
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## GATE 1: HEADER
|
|
52
|
+
|
|
53
|
+
Build the header metadata block.
|
|
54
|
+
|
|
55
|
+
### SIMPLE component
|
|
56
|
+
|
|
57
|
+
```markdown
|
|
58
|
+
# {ComponentName}
|
|
59
|
+
|
|
60
|
+
**Figma:** [{ComponentName}](https://www.figma.com/design/{fileKey}/?node-id={nodeId}) | **Node:** `{nodeId}`
|
|
61
|
+
**Path:** `UIComponents/Sources/UIComponents/Components/{relative path}/{ComponentName}.swift`
|
|
62
|
+
**Component:** `{ComponentName}({param1}:{param2}:)`
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### COMPLEX component
|
|
66
|
+
|
|
67
|
+
```markdown
|
|
68
|
+
# {ComponentName}
|
|
69
|
+
|
|
70
|
+
**Figma:** [{ComponentName}](https://www.figma.com/design/{fileKey}/?node-id={nodeId}) | **Node:** `{nodeId}`
|
|
71
|
+
**Path:** `UIComponents/Sources/UIComponents/Components/{relative path}/{ComponentName}.swift`
|
|
72
|
+
**Init:** `{ComponentName}({dependencies}).{modifier}({value})`
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Where the init shows required dynamic props + required closures:
|
|
76
|
+
- No required props → `{ComponentName}().modifier(value)` (unlikely — most have at least one required prop)
|
|
77
|
+
- Required prop + closure → `{ComponentName}(title: "value") { action() }.modifier(value)`
|
|
78
|
+
- With binding → `{ComponentName}(page: $page, title: "value").modifier(value)`
|
|
79
|
+
- With paired modifier → `{ComponentName}(title: "value") { action() }.secondaryButton("title") { action() }`
|
|
80
|
+
|
|
81
|
+
**Rules:**
|
|
82
|
+
- Path is relative from the package root (not absolute filesystem path)
|
|
83
|
+
- Node ID uses colon format (`6893:6879`), not dash format
|
|
84
|
+
- For SIMPLE: **Component** shows the init signature with parameter labels
|
|
85
|
+
- For COMPLEX: **Init** shows the custom init + chain modifier pattern (preferred usage)
|
|
86
|
+
- Trailing closure syntax ONLY when there is an actual closure dependency — NOT for configuration
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## GATE 2: CONFIGURATION_SECTION (COMPLEX only)
|
|
91
|
+
|
|
92
|
+
If SIMPLE → skip to GATE 3.
|
|
93
|
+
|
|
94
|
+
INPUT: `pass3/04b_component_architecture.md` → Final API Design
|
|
95
|
+
|
|
96
|
+
### 2.1 Configuration struct
|
|
97
|
+
|
|
98
|
+
```markdown
|
|
99
|
+
## Configuration
|
|
100
|
+
|
|
101
|
+
```swift
|
|
102
|
+
{ComponentName}Configuration(
|
|
103
|
+
{param1}: {Type},
|
|
104
|
+
{param2}: {Type}? = nil,
|
|
105
|
+
{param3}: {Type} = {default}
|
|
106
|
+
)
|
|
107
|
+
```
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Show ALL init parameters with their types and defaults. Match the exact init from the architecture spec.
|
|
111
|
+
|
|
112
|
+
### 2.2 Chainable modifiers
|
|
113
|
+
|
|
114
|
+
```markdown
|
|
115
|
+
## Chainable Modifiers
|
|
116
|
+
|
|
117
|
+
| Modifier | Type | Description |
|
|
118
|
+
|----------|------|-------------|
|
|
119
|
+
| `.{property1}(_:)` | `{Type}` | {Brief description} |
|
|
120
|
+
| `.{property1}(localized:)` | `LocalizedStringKey` | Localized variant |
|
|
121
|
+
| `.{property2}(_:)` | `{Type}?` | {Brief description} |
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Rules:**
|
|
125
|
+
- List every chainable property from the Configuration
|
|
126
|
+
- Skip properties marked `@IgnoreChainModifier` (UUIDs, IDs)
|
|
127
|
+
- Include `(localized:)` variant for String properties NOT marked `@IgnoreLocalization`
|
|
128
|
+
- These are auto-generated by `@GenerateChainModifiers` — document what the macro produces
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## GATE 3: VARIANT_MAPPING
|
|
133
|
+
|
|
134
|
+
INPUT: `pass3/04_patterns.md` → Variant Examples section
|
|
135
|
+
INPUT: `pass3/04b_component_architecture.md` → Variant-to-Enum Mapping
|
|
136
|
+
|
|
137
|
+
Build the Figma-to-Swift mapping table:
|
|
138
|
+
|
|
139
|
+
```markdown
|
|
140
|
+
## Variant Mapping
|
|
141
|
+
|
|
142
|
+
| Figma Property | Figma Value | Code |
|
|
143
|
+
|----------------|-------------|------|
|
|
144
|
+
| {Property1} | {Value1} | `{swiftParam}: .{enumCase}` |
|
|
145
|
+
| {Property1} | {Value2} | `{swiftParam}: .{enumCase}` |
|
|
146
|
+
| {BooleanProp} | true | `{param}: {value}` |
|
|
147
|
+
| {BooleanProp} | false | `{param}: nil` |
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Rules:**
|
|
151
|
+
- Map EVERY Figma variant property to its Swift equivalent
|
|
152
|
+
- For VARIANT type properties → show enum case
|
|
153
|
+
- For BOOLEAN type properties → show the Swift value for true and false
|
|
154
|
+
- For TEXT type properties → show parameter with example value
|
|
155
|
+
- For INSTANCE_SWAP → show the merged Image? property
|
|
156
|
+
- If a boolean + instance swap were merged into `Image?` → show:
|
|
157
|
+
- `true` → `{param}: Image.{name}`
|
|
158
|
+
- `false` → `{param}: nil`
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## GATE 4: PARAMETERS_SECTION (SIMPLE only)
|
|
163
|
+
|
|
164
|
+
If COMPLEX → skip to GATE 5.
|
|
165
|
+
|
|
166
|
+
INPUT: `pass3/04b_component_architecture.md` → Final API Design
|
|
167
|
+
|
|
168
|
+
```markdown
|
|
169
|
+
## Parameters
|
|
170
|
+
|
|
171
|
+
| Parameter | Type | Default | Description |
|
|
172
|
+
|-----------|------|---------|-------------|
|
|
173
|
+
| `{param1}` | `{Type}` | Required | {Brief description} |
|
|
174
|
+
| `{param2}` | `{Type}` | `.{default}` | {Brief description} |
|
|
175
|
+
| `{param3}` | `{Type}?` | `nil` | {Brief description} |
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Rules:**
|
|
179
|
+
- List ALL init parameters
|
|
180
|
+
- Mark required parameters (no default) as "Required"
|
|
181
|
+
- Show actual default values for optional parameters
|
|
182
|
+
- Descriptions should be concise (5-10 words)
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## GATE 5: NESTED_COMPONENTS
|
|
187
|
+
|
|
188
|
+
INPUT: `pass3/03_nested_components.md`
|
|
189
|
+
|
|
190
|
+
If no nested View components (only inline Text/Image) → skip.
|
|
191
|
+
|
|
192
|
+
```markdown
|
|
193
|
+
## Nested Components
|
|
194
|
+
|
|
195
|
+
- **{ChildComponent}** — [{ChildComponent} FIGMA.md](relative/path/to/FIGMA.md)
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**Rules:**
|
|
199
|
+
- Only list components that have their own FIGMA.md
|
|
200
|
+
- Use relative paths from current component directory
|
|
201
|
+
- Skip native SwiftUI views (Text, Image, HStack, etc.)
|
|
202
|
+
- Skip UIAssets image tokens (those are not View components)
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## GATE 6: USAGE
|
|
207
|
+
|
|
208
|
+
INPUT: `pass3/04b_component_architecture.md` → Final API Design
|
|
209
|
+
INPUT: `pass3/04_patterns.md` → Variant Examples
|
|
210
|
+
|
|
211
|
+
**CRITICAL:** The FIRST usage example is what AI reads during Phase 3C nested component lookup. It MUST show the recommended init pattern with clear parameter labels.
|
|
212
|
+
|
|
213
|
+
### SIMPLE component
|
|
214
|
+
|
|
215
|
+
```markdown
|
|
216
|
+
## Usage
|
|
217
|
+
|
|
218
|
+
```swift
|
|
219
|
+
// Recommended pattern
|
|
220
|
+
{ComponentName}({param1}: {value1}, {param2}: .{enumCase})
|
|
221
|
+
|
|
222
|
+
// Minimal (defaults only)
|
|
223
|
+
{ComponentName}({requiredParam}: {value})
|
|
224
|
+
|
|
225
|
+
// With optional parameters
|
|
226
|
+
{ComponentName}(
|
|
227
|
+
{param1}: {value1},
|
|
228
|
+
{param2}: .{enumCase},
|
|
229
|
+
{optionalParam}: {value}
|
|
230
|
+
)
|
|
231
|
+
```
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### COMPLEX component
|
|
235
|
+
|
|
236
|
+
COMPLEX components use a **custom init** with required dynamic props + required closures. Chain modifiers configure optional properties. Paired modifiers bind optional data+closure together.
|
|
237
|
+
|
|
238
|
+
```markdown
|
|
239
|
+
## Usage
|
|
240
|
+
|
|
241
|
+
```swift
|
|
242
|
+
// Required props in init, optional via chain modifiers
|
|
243
|
+
{ComponentName}({requiredProp}: "{value}", {requiredClosure}: { action() })
|
|
244
|
+
.{optionalProp}(.{enumCase})
|
|
245
|
+
|
|
246
|
+
// With paired modifier (optional sub-component with action)
|
|
247
|
+
{ComponentName}({requiredProp}: "{value}", {requiredClosure}: { action() })
|
|
248
|
+
.secondaryButton("{title}") { secondaryAction() }
|
|
249
|
+
.{optionalProp}(.{enumCase})
|
|
250
|
+
|
|
251
|
+
// Configuration init (programmatic/data-driven use)
|
|
252
|
+
{ComponentName}(configuration: .init({requiredProp}: "{value}"), {requiredClosure}: { action() })
|
|
253
|
+
```
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
**Rules:**
|
|
257
|
+
- Show ONLY the preferred pattern: required props in init + chain modifiers — FIGMA.md is consumed by AI (Phase 3C nesting), keep it compact
|
|
258
|
+
- Required dynamic props and required closures go in init
|
|
259
|
+
- Optional config props → chain modifiers
|
|
260
|
+
- Paired sub-components → paired modifiers (`.secondaryButton("title") { action }`)
|
|
261
|
+
- Show 1-2 examples covering major variant combinations
|
|
262
|
+
- Use realistic sample values from the Figma variant examples
|
|
263
|
+
- For COMPLEX: custom init + chain modifier pattern only
|
|
264
|
+
- For SIMPLE: direct init only
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## GATE 7: ALL_VARIANTS (optional)
|
|
269
|
+
|
|
270
|
+
INPUT: `pass3/04_patterns.md` → Variant Examples
|
|
271
|
+
|
|
272
|
+
If the variant matrix is small (≤ 10 combinations) AND the component has discrete visual states, include an exhaustive table:
|
|
273
|
+
|
|
274
|
+
```markdown
|
|
275
|
+
## All Variants
|
|
276
|
+
|
|
277
|
+
| {Property1} | {Property2} | Code |
|
|
278
|
+
|-------------|-------------|------|
|
|
279
|
+
| {Value1} | {Value2} | `{ComponentName}({p1}: .{v1}, {p2}: .{v2})` |
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
If the matrix is large (> 10 combinations) → skip this section. The Variant Mapping table is sufficient.
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## GATE 8: NOTES (optional)
|
|
287
|
+
|
|
288
|
+
Add notes ONLY if there are non-obvious behaviors:
|
|
289
|
+
|
|
290
|
+
```markdown
|
|
291
|
+
## Notes
|
|
292
|
+
|
|
293
|
+
- Default state is `.{defaultCase}`
|
|
294
|
+
- Icon is decorative and hidden from VoiceOver
|
|
295
|
+
- Component sizes to fit content (no fixed width)
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
Skip if there's nothing noteworthy beyond what's obvious from the API.
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## VALIDATION CHECKLIST
|
|
303
|
+
|
|
304
|
+
```
|
|
305
|
+
[ ] File exists at {componentLocation}/FIGMA.md
|
|
306
|
+
[ ] Figma URL is correct with proper node-id
|
|
307
|
+
[ ] Node ID uses colon format (not dash)
|
|
308
|
+
[ ] Path is relative from package root
|
|
309
|
+
[ ] Init signature matches the actual implementation
|
|
310
|
+
[ ] Variant Mapping covers ALL Figma properties
|
|
311
|
+
[ ] Configuration section present (if COMPLEX)
|
|
312
|
+
[ ] Chainable Modifiers listed (if COMPLEX)
|
|
313
|
+
[ ] Parameters table present (if SIMPLE)
|
|
314
|
+
[ ] Nested components listed with relative paths (if any)
|
|
315
|
+
[ ] First usage example is the recommended pattern
|
|
316
|
+
[ ] Usage shows 2-4 examples covering major variants
|
|
317
|
+
[ ] All Variants table (if ≤10 combinations)
|
|
318
|
+
[ ] No implementation details — only public API surface
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
## SUCCESS OUTPUT
|
|
324
|
+
|
|
325
|
+
```
|
|
326
|
+
STATUS: COMPLETE
|
|
327
|
+
PHASE: phase-4c
|
|
328
|
+
GATES_PASSED: [PRE_CHECK, HEADER, CONFIGURATION_SECTION, VARIANT_MAPPING, PARAMETERS_SECTION, NESTED_COMPONENTS, USAGE, ALL_VARIANTS, NOTES]
|
|
329
|
+
ARTIFACTS_CREATED:
|
|
330
|
+
- {componentLocation}/FIGMA.md
|
|
331
|
+
SUMMARY: FIGMA.md documentation complete. {COMPLEXITY} component. {VARIANT_COUNT} variant mappings. {USAGE_COUNT} usage examples.
|
|
332
|
+
```
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
# PHASE 4D — Preview (LTR + RTL)
|
|
2
|
+
|
|
3
|
+
Write two preview structs — `{ComponentName}Preview` (LTR) and `{ComponentName}RTLPreview` (RTL with Arabic text) — and their `#Preview` entry points at the bottom of `{ComponentName}.swift`.
|
|
4
|
+
|
|
5
|
+
required — always execute this phase.
|
|
6
|
+
SEQUENTIAL: Runs AFTER Phase 4A (Configuration) and Phase 4B (View) complete.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## CONTEXT VARIABLES
|
|
11
|
+
|
|
12
|
+
These are provided by the orchestrator in the dispatch prompt:
|
|
13
|
+
- `componentName` — e.g., "LabelBadge"
|
|
14
|
+
- `componentLocation` — e.g., "Sources/UIComponents/.../LabelBadge/"
|
|
15
|
+
- `artifactPath` — path to implementation artifacts
|
|
16
|
+
- `complexity` — SIMPLE or COMPLEX
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## PRE-CHECK
|
|
21
|
+
|
|
22
|
+
Verify the View file exists (Phase 4B must have completed):
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
{componentLocation}/{ComponentName}.swift must exist
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Read the variant analysis:
|
|
29
|
+
```
|
|
30
|
+
{artifactPath}/pass3/04_patterns.md → Variant Examples, Dimensions
|
|
31
|
+
{artifactPath}/pass3/04b_component_architecture.md → API shape, enums
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
If View file is missing:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
STATUS: HALT
|
|
38
|
+
PHASE: phase-4d
|
|
39
|
+
GATE: PRE_CHECK
|
|
40
|
+
REASON: {ComponentName}.swift not found. Phase 4B must complete first.
|
|
41
|
+
COMPLETED_GATES: []
|
|
42
|
+
ARTIFACTS_CREATED: none
|
|
43
|
+
USER_ACTION_REQUIRED: Run Phase 4B first.
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## WHY A SEPARATE PREVIEW STRUCT
|
|
49
|
+
|
|
50
|
+
`#Preview` is a freestanding macro. `@GenerateViewConfiguration` is a member macro that generates `configured()` and forwarding modifiers. When the component is placed directly inside `#Preview { ... }`, the freestanding macro expansion may not resolve members generated by the member macro — the compiler reports "no accessible initializers." This is a known Apple bug.
|
|
51
|
+
|
|
52
|
+
The workaround:
|
|
53
|
+
1. Create `{ComponentName}Preview: View` — a plain struct with NO macros, auto-synthesized `init()`
|
|
54
|
+
2. `#Preview` instantiates `{ComponentName}Preview()` — it only needs to see the plain `init()`, which has no macro dependency
|
|
55
|
+
3. Inside `{ComponentName}Preview.body`, the custom init and chain modifiers ARE visible because `body` is evaluated during normal type-checking, not during freestanding macro expansion
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## DUAL PREVIEW CONCEPT
|
|
60
|
+
|
|
61
|
+
Every component gets **two previews** to verify both layout directions:
|
|
62
|
+
|
|
63
|
+
| Preview | Struct | Purpose |
|
|
64
|
+
|---------|--------|---------|
|
|
65
|
+
| LTR (default) | `{ComponentName}Preview` | Standard left-to-right preview with English/default text |
|
|
66
|
+
| RTL | `{ComponentName}RTLPreview` | Right-to-left preview with Arabic text, verifies mirroring |
|
|
67
|
+
|
|
68
|
+
### Identical content exception
|
|
69
|
+
|
|
70
|
+
If **all** text properties are non-localized (codes, numbers, acronyms) and preview content would be identical between LTR and RTL, use a **single preview struct** with both `#Preview` entry points:
|
|
71
|
+
|
|
72
|
+
```swift
|
|
73
|
+
struct {ComponentName}Preview: View {
|
|
74
|
+
var layoutDirection: LayoutDirection = .leftToRight
|
|
75
|
+
|
|
76
|
+
var body: some View {
|
|
77
|
+
// ... preview content ...
|
|
78
|
+
.environment(\.layoutDirection, layoutDirection)
|
|
79
|
+
.environment(\.locale, layoutDirection == .rightToLeft ? Locale(identifier: "ar") : .current)
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
#Preview {
|
|
84
|
+
{ComponentName}Preview()
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
#Preview("RTL") {
|
|
88
|
+
{ComponentName}Preview(layoutDirection: .rightToLeft)
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
This avoids duplicating identical view trees. Only applicable when there is zero difference in text content between LTR and RTL.
|
|
93
|
+
|
|
94
|
+
### Text property rules for RTL preview
|
|
95
|
+
|
|
96
|
+
| Property type | LTR text | RTL text | Example |
|
|
97
|
+
|---------------|----------|----------|---------|
|
|
98
|
+
| Localized text props (component content) | English placeholder | Arabic placeholder | `"Lorem"` → `"نص تجريبي"` |
|
|
99
|
+
| Non-localized text props (codes, numbers, IDs) | Same as LTR | Same as LTR | `"TK1234"` → `"TK1234"` |
|
|
100
|
+
| Preview section labels (developer scaffolding) | English | English | `"With Icon"` stays `"With Icon"` |
|
|
101
|
+
|
|
102
|
+
### Common Arabic placeholder text
|
|
103
|
+
|
|
104
|
+
Use these contextually appropriate Arabic placeholders:
|
|
105
|
+
|
|
106
|
+
| English | Arabic | Use case |
|
|
107
|
+
|---------|--------|----------|
|
|
108
|
+
| `"Lorem"` / generic text | `"نص تجريبي"` | Default text content |
|
|
109
|
+
| `"Title"` | `"العنوان"` | Title fields |
|
|
110
|
+
| `"Subtitle"` / `"Description"` | `"الوصف"` | Subtitle/description fields |
|
|
111
|
+
| `"Label"` / `"Button"` | `"زر الإجراء"` | Button labels |
|
|
112
|
+
| `"Search"` | `"بحث"` | Search placeholders |
|
|
113
|
+
| `"Name"` | `"الاسم"` | Name fields |
|
|
114
|
+
| `"Message"` | `"رسالة"` | Message/notification text |
|
|
115
|
+
| Short status | `"نشط"` | Active/status indicators |
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## GATE 1: PREVIEW_STRUCT
|
|
120
|
+
|
|
121
|
+
Append to the bottom of `{componentLocation}/{ComponentName}.swift`:
|
|
122
|
+
|
|
123
|
+
### COMPLEX component (with Configuration + `+Modifiers`)
|
|
124
|
+
|
|
125
|
+
**Preferred style:** Use the custom init with required props + chain modifiers for optional props.
|
|
126
|
+
|
|
127
|
+
For components with required props + closure dependencies:
|
|
128
|
+
- `{ComponentName}(title: "Book Now") { /* action */ }` — required props + trailing closure in init
|
|
129
|
+
- `.style(.primary).size(.xlarge)` — optional config via chain modifiers
|
|
130
|
+
|
|
131
|
+
For components with paired modifiers:
|
|
132
|
+
- `{ComponentName}(title: "OK") { primaryAction() }` — required in init
|
|
133
|
+
- `.secondaryButton("Cancel") { cancel() }` — paired modifier
|
|
134
|
+
- `.state(.scroll)` — optional config via chain modifier
|
|
135
|
+
|
|
136
|
+
```swift
|
|
137
|
+
// MARK: - Preview
|
|
138
|
+
|
|
139
|
+
struct {ComponentName}Preview: View {
|
|
140
|
+
|
|
141
|
+
var body: some View {
|
|
142
|
+
ScrollView {
|
|
143
|
+
VStack(alignment: .leading, spacing: .Spacing.spacing16) {
|
|
144
|
+
Text("{ComponentName}")
|
|
145
|
+
.typographyStyle(.bodyBold)
|
|
146
|
+
.foregroundStyle(Color.Text.textPrimary)
|
|
147
|
+
.frame(maxWidth: .infinity, alignment: .leading)
|
|
148
|
+
|
|
149
|
+
// If main variant is CaseIterable enum, iterate:
|
|
150
|
+
ForEach({ComponentName}Configuration.{EnumType}.allCases, id: \.self) { variant in
|
|
151
|
+
VStack(alignment: .leading, spacing: .Spacing.spacing4) {
|
|
152
|
+
Text(variant.rawValue.capitalized)
|
|
153
|
+
.typographyStyle(.captionRegular)
|
|
154
|
+
.foregroundStyle(Color.Text.textGrey)
|
|
155
|
+
.frame(maxWidth: .infinity, alignment: .leading)
|
|
156
|
+
|
|
157
|
+
{ComponentName}({requiredProp}: {englishValue}) { /* action */ }
|
|
158
|
+
.{variantParam}(variant)
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
Divider()
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Additional combinations (boolean toggles, paired modifiers, etc.)
|
|
165
|
+
VStack(alignment: .leading, spacing: .Spacing.spacing4) {
|
|
166
|
+
Text("{VariantDescription}")
|
|
167
|
+
.typographyStyle(.captionRegular)
|
|
168
|
+
.foregroundStyle(Color.Text.textGrey)
|
|
169
|
+
.frame(maxWidth: .infinity, alignment: .leading)
|
|
170
|
+
|
|
171
|
+
{ComponentName}({requiredProp}: {englishValue}) { /* action */ }
|
|
172
|
+
.{optionalParam}({value})
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
.padding(.Spacing.spacing16)
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
struct {ComponentName}RTLPreview: View {
|
|
181
|
+
|
|
182
|
+
var body: some View {
|
|
183
|
+
ScrollView {
|
|
184
|
+
VStack(alignment: .leading, spacing: .Spacing.spacing16) {
|
|
185
|
+
Text("{ComponentName} — RTL")
|
|
186
|
+
.typographyStyle(.bodyBold)
|
|
187
|
+
.foregroundStyle(Color.Text.textPrimary)
|
|
188
|
+
.frame(maxWidth: .infinity, alignment: .leading)
|
|
189
|
+
|
|
190
|
+
ForEach({ComponentName}Configuration.{EnumType}.allCases, id: \.self) { variant in
|
|
191
|
+
VStack(alignment: .leading, spacing: .Spacing.spacing4) {
|
|
192
|
+
Text(variant.rawValue.capitalized)
|
|
193
|
+
.typographyStyle(.captionRegular)
|
|
194
|
+
.foregroundStyle(Color.Text.textGrey)
|
|
195
|
+
.frame(maxWidth: .infinity, alignment: .leading)
|
|
196
|
+
|
|
197
|
+
{ComponentName}({requiredProp}: {arabicValue}) { /* action */ }
|
|
198
|
+
.{variantParam}(variant)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
Divider()
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
VStack(alignment: .leading, spacing: .Spacing.spacing4) {
|
|
205
|
+
Text("{VariantDescription}")
|
|
206
|
+
.typographyStyle(.captionRegular)
|
|
207
|
+
.foregroundStyle(Color.Text.textGrey)
|
|
208
|
+
.frame(maxWidth: .infinity, alignment: .leading)
|
|
209
|
+
|
|
210
|
+
{ComponentName}({requiredProp}: {arabicValue}) { /* action */ }
|
|
211
|
+
.{optionalParam}({value})
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
.padding(.Spacing.spacing16)
|
|
215
|
+
}
|
|
216
|
+
.environment(\.layoutDirection, .rightToLeft)
|
|
217
|
+
.environment(\.locale, Locale(identifier: "ar"))
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
#Preview {
|
|
222
|
+
{ComponentName}Preview()
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
#Preview("RTL") {
|
|
226
|
+
{ComponentName}RTLPreview()
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### SIMPLE component
|
|
231
|
+
|
|
232
|
+
```swift
|
|
233
|
+
// MARK: - Preview
|
|
234
|
+
|
|
235
|
+
struct {ComponentName}Preview: View {
|
|
236
|
+
|
|
237
|
+
var body: some View {
|
|
238
|
+
ScrollView {
|
|
239
|
+
VStack(alignment: .leading, spacing: .Spacing.spacing16) {
|
|
240
|
+
Text("{ComponentName}")
|
|
241
|
+
.typographyStyle(.bodyBold)
|
|
242
|
+
.foregroundStyle(Color.Text.textPrimary)
|
|
243
|
+
.frame(maxWidth: .infinity, alignment: .leading)
|
|
244
|
+
|
|
245
|
+
VStack(alignment: .leading, spacing: .Spacing.spacing4) {
|
|
246
|
+
Text("{VariantName}")
|
|
247
|
+
.typographyStyle(.captionRegular)
|
|
248
|
+
.foregroundStyle(Color.Text.textGrey)
|
|
249
|
+
.frame(maxWidth: .infinity, alignment: .leading)
|
|
250
|
+
|
|
251
|
+
{ComponentName}(
|
|
252
|
+
{param1}: {englishValue},
|
|
253
|
+
{param2}: .{enumCase}
|
|
254
|
+
)
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
Divider()
|
|
258
|
+
|
|
259
|
+
// More variants...
|
|
260
|
+
}
|
|
261
|
+
.padding(.Spacing.spacing16)
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
struct {ComponentName}RTLPreview: View {
|
|
267
|
+
|
|
268
|
+
var body: some View {
|
|
269
|
+
ScrollView {
|
|
270
|
+
VStack(alignment: .leading, spacing: .Spacing.spacing16) {
|
|
271
|
+
Text("{ComponentName} — RTL")
|
|
272
|
+
.typographyStyle(.bodyBold)
|
|
273
|
+
.foregroundStyle(Color.Text.textPrimary)
|
|
274
|
+
.frame(maxWidth: .infinity, alignment: .leading)
|
|
275
|
+
|
|
276
|
+
VStack(alignment: .leading, spacing: .Spacing.spacing4) {
|
|
277
|
+
Text("{VariantName}")
|
|
278
|
+
.typographyStyle(.captionRegular)
|
|
279
|
+
.foregroundStyle(Color.Text.textGrey)
|
|
280
|
+
.frame(maxWidth: .infinity, alignment: .leading)
|
|
281
|
+
|
|
282
|
+
{ComponentName}(
|
|
283
|
+
{param1}: {arabicValue},
|
|
284
|
+
{param2}: .{enumCase}
|
|
285
|
+
)
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
Divider()
|
|
289
|
+
|
|
290
|
+
// More variants...
|
|
291
|
+
}
|
|
292
|
+
.padding(.Spacing.spacing16)
|
|
293
|
+
}
|
|
294
|
+
.environment(\.layoutDirection, .rightToLeft)
|
|
295
|
+
.environment(\.locale, Locale(identifier: "ar"))
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
#Preview {
|
|
300
|
+
{ComponentName}Preview()
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
#Preview("RTL") {
|
|
304
|
+
{ComponentName}RTLPreview()
|
|
305
|
+
}
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## GATE 2: VARIANT COVERAGE
|
|
311
|
+
|
|
312
|
+
Verify ALL variants from `pass3/04_patterns.md` → Variant Examples are rendered in **both** previews:
|
|
313
|
+
|
|
314
|
+
### Rules
|
|
315
|
+
|
|
316
|
+
- **Every variant** from the Figma component set must appear in both LTR and RTL previews
|
|
317
|
+
- LTR uses **English/default sample values** from the analysis
|
|
318
|
+
- RTL uses **Arabic placeholder text** for localized text props (see table above), same values for non-localized props
|
|
319
|
+
- If a variant property is an enum with `CaseIterable`, use `ForEach` to iterate all cases (in both previews)
|
|
320
|
+
- Boolean toggle combinations (with icon, without icon, icon-only) listed as separate sections after the enum loop
|
|
321
|
+
- Each variant section labeled with `.captionRegular` + `.textGrey`
|
|
322
|
+
- ALL explanatory texts (titles, labels) must be **leading aligned** (`.frame(maxWidth: .infinity, alignment: .leading)`)
|
|
323
|
+
- Sections separated by `Divider()`
|
|
324
|
+
- RTL preview has `.environment(\.layoutDirection, .rightToLeft)` and `.environment(\.locale, Locale(identifier: "ar"))` on the outermost container
|
|
325
|
+
- RTL preview title includes `" — RTL"` suffix for visual identification
|
|
326
|
+
|
|
327
|
+
### Width handling
|
|
328
|
+
|
|
329
|
+
- Component width < screen → natural width, no frame
|
|
330
|
+
- Component width = screen → `.frame(maxWidth: .infinity)`
|
|
331
|
+
- Component width > screen → horizontal ScrollView or fixed frame
|
|
332
|
+
|
|
333
|
+
### Contrasting background
|
|
334
|
+
|
|
335
|
+
**ALWAYS** apply `Color.Background.backgroundGrey` as the preview container background. This is the app's standard page background color, so previews show how the component looks in-app. It also makes white component edges, padding, and corner radius clearly visible.
|
|
336
|
+
|
|
337
|
+
```swift
|
|
338
|
+
.padding(.Spacing.spacing16)
|
|
339
|
+
.background(Color.Background.backgroundGrey)
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
Without this, white components are invisible on the white Xcode canvas.
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
## VALIDATION CHECKLIST
|
|
347
|
+
|
|
348
|
+
```
|
|
349
|
+
[ ] {ComponentName}Preview struct appended to {ComponentName}.swift (not a separate file)
|
|
350
|
+
[ ] {ComponentName}RTLPreview struct appended to {ComponentName}.swift (not a separate file)
|
|
351
|
+
[ ] Both preview structs have NO macros — plain structs
|
|
352
|
+
[ ] #Preview instantiates {ComponentName}Preview() (unnamed = LTR default)
|
|
353
|
+
[ ] #Preview("RTL") instantiates {ComponentName}RTLPreview()
|
|
354
|
+
[ ] Inside Preview body, COMPLEX uses custom init + chain modifiers: {ComponentName}(requiredProp: val) { action }.prop1(val)
|
|
355
|
+
[ ] Inside Preview body, SIMPLE uses direct init: {ComponentName}(param: value)
|
|
356
|
+
[ ] ALL variant examples from pass3/04_patterns.md are rendered in BOTH previews
|
|
357
|
+
[ ] LTR preview uses English/default text values
|
|
358
|
+
[ ] RTL preview uses Arabic placeholder text for localized text props
|
|
359
|
+
[ ] RTL preview keeps same values for non-localized props (codes, numbers, IDs)
|
|
360
|
+
[ ] RTL preview has .environment(\.layoutDirection, .rightToLeft) on outermost container
|
|
361
|
+
[ ] RTL preview has .environment(\.locale, Locale(identifier: "ar")) on outermost container
|
|
362
|
+
[ ] ForEach used for CaseIterable enum variants (in both previews)
|
|
363
|
+
[ ] Boolean toggle combinations shown as separate sections
|
|
364
|
+
[ ] All labels use .captionRegular + .textGrey, leading aligned
|
|
365
|
+
[ ] Sections separated by Divider()
|
|
366
|
+
[ ] ScrollView wraps content in both previews
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## SUCCESS OUTPUT
|
|
372
|
+
|
|
373
|
+
```
|
|
374
|
+
STATUS: COMPLETE
|
|
375
|
+
PHASE: phase-4d
|
|
376
|
+
GATES_PASSED: [PRE_CHECK, PREVIEW_STRUCT, VARIANT_COVERAGE]
|
|
377
|
+
ARTIFACTS_CREATED:
|
|
378
|
+
- {componentLocation}/{ComponentName}.swift (appended LTR + RTL Previews)
|
|
379
|
+
SUMMARY: Dual preview appended to {ComponentName}.swift. {VARIANT_COUNT} variants rendered in LTR + RTL. {ComponentName}Preview (LTR) + {ComponentName}RTLPreview (RTL/Arabic) with #Preview entry points.
|
|
380
|
+
```
|