@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,633 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: figma-validate
|
|
3
|
+
description: "Pre-implementation validation for Figma components. Checks 7 criteria: (1) Registry presence, (2) Code Connect strategy, (3) Design token compliance, (4) Dependency readiness, (5) Atomic scope, (6) iOS applicability, (7) Already-implemented check. Plus Implementation Intel: complexity score, text node count, image detection, discarded version, wiki status, sibling progress. Target: ≤10s."
|
|
4
|
+
user-invocable: true
|
|
5
|
+
argument-hint: <figma-url> | <github-issue> | batch [--verbose]
|
|
6
|
+
allowed-tools: Bash, Read, Glob, Grep, AskUserQuestion
|
|
7
|
+
status: wip-v5
|
|
8
|
+
sourced-from: upstream/figma-validate
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# /figma-validate — Pre-Implementation Component Validation
|
|
12
|
+
|
|
13
|
+
## Purpose
|
|
14
|
+
|
|
15
|
+
Validates whether a Figma component is ready for the figma-to-swiftui implementation pipeline.
|
|
16
|
+
Runs 6 criteria checks and returns a verdict: **VALID**, **CONDITIONAL**, or **INVALID**.
|
|
17
|
+
|
|
18
|
+
This is a **read-only diagnostic skill** — it does NOT modify any files.
|
|
19
|
+
|
|
20
|
+
## Parameters
|
|
21
|
+
|
|
22
|
+
| Parameter | Required | Description |
|
|
23
|
+
|-----------|----------|-------------|
|
|
24
|
+
| Figma URL | Yes (single mode) | `https://www.figma.com/design/{fileKey}/...?node-id={nodeId}` |
|
|
25
|
+
| GitHub Issue | Yes (single mode) | Issue number from uicomponents repo (e.g., `#260`, `260`) |
|
|
26
|
+
| `batch` | No | Validate all unimplemented components in registry |
|
|
27
|
+
| `--verbose` | No | Show detailed property analysis per criterion |
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
/figma-validate https://www.figma.com/design/ps4xrJzhn7WNbfkZs895Bi/?node-id=11400-406
|
|
31
|
+
/figma-validate #260
|
|
32
|
+
/figma-validate 260
|
|
33
|
+
/figma-validate batch
|
|
34
|
+
/figma-validate batch --verbose
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Constants
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
REPO_ROOT="$(git rev-parse --show-toplevel)"
|
|
43
|
+
COMMON_PATH="${REPO_ROOT}/{repos.common.path}"
|
|
44
|
+
UICOMPONENTS_PATH="${REPO_ROOT}/{repos.components.path}"
|
|
45
|
+
REGISTRY="${COMMON_PATH}/Shared/Figma/Generated/component-registry.json"
|
|
46
|
+
REGISTRY_CONFIG="${COMMON_PATH}/Shared/Figma/figma-components-registry-config.json"
|
|
47
|
+
GH_REPO="{github.componentsRepo}"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Parse Arguments
|
|
53
|
+
|
|
54
|
+
| Input Pattern | Mode | Action |
|
|
55
|
+
|---------------|------|--------|
|
|
56
|
+
| `https://www.figma.com/...` | **Single (URL)** | Extract fileKey + nodeId from URL |
|
|
57
|
+
| `#N` or bare number | **Single (Issue)** | Fetch Figma URL from GitHub issue body |
|
|
58
|
+
| `batch` | **Batch** | Validate all unimplemented registry components |
|
|
59
|
+
| `batch --verbose` | **Batch Verbose** | Batch with full per-criterion details |
|
|
60
|
+
|
|
61
|
+
### Input Detection
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
if input matches /^https:\/\/www\.figma\.com/ → URL mode
|
|
65
|
+
if input matches /^#?\d+$/ → GitHub Issue mode
|
|
66
|
+
if input == "batch" → Batch mode
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### URL Parsing (URL mode)
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
https://www.figma.com/design/{fileKey}/{fileName}?node-id={nodeId}
|
|
73
|
+
```
|
|
74
|
+
Convert `-` to `:` in node-id (e.g., `11400-406` → `11400:406`).
|
|
75
|
+
|
|
76
|
+
### GitHub Issue Resolution (Issue mode)
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
gh issue view <N> --repo ${GH_REPO} --json number,title,body
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Extract from the issue body:
|
|
83
|
+
- **Figma URL** — from the line after `### Figma URL` heading
|
|
84
|
+
- **Component Name** — from `### Component Name (PascalCase)` section (informational)
|
|
85
|
+
|
|
86
|
+
```python
|
|
87
|
+
import json, re
|
|
88
|
+
body = issue_data['body']
|
|
89
|
+
# Extract Figma URL
|
|
90
|
+
figma_match = re.search(r'### Figma URL\s+\n(https://www\.figma\.com/design/[^\s]+)', body)
|
|
91
|
+
if figma_match:
|
|
92
|
+
figma_url = figma_match.group(1)
|
|
93
|
+
# Parse fileKey and nodeId from URL
|
|
94
|
+
url_match = re.match(r'https://www\.figma\.com/design/([^/]+)/.*\?node-id=([^&\s]+)', figma_url)
|
|
95
|
+
file_key = url_match.group(1)
|
|
96
|
+
node_id = url_match.group(2).replace('-', ':')
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
If Figma URL is not found or is `_No response_` → ask user for URL via AskUserQuestion.
|
|
100
|
+
|
|
101
|
+
Print resolved info before proceeding to validation:
|
|
102
|
+
```
|
|
103
|
+
───────────────────────────────────────────
|
|
104
|
+
Source: GitHub Issue #<N>
|
|
105
|
+
Title: <issue_title>
|
|
106
|
+
Figma URL: <extracted_url>
|
|
107
|
+
File Key: <fileKey>
|
|
108
|
+
Node ID: <nodeId>
|
|
109
|
+
───────────────────────────────────────────
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Validation Criteria
|
|
115
|
+
|
|
116
|
+
Seven criteria are checked. Each returns ✅ (pass) or ❌ (fail) with a reason.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
### Criterion 1 — Component Registry Presence
|
|
121
|
+
|
|
122
|
+
**Question:** Component registry'de (`component-registry.json`) yer alıyor mu?
|
|
123
|
+
|
|
124
|
+
**Check:**
|
|
125
|
+
|
|
126
|
+
1. Read `$REGISTRY` and search for an entry whose `nodeId` matches the parsed node ID.
|
|
127
|
+
2. If found → ✅ PASS. Record `name`, `fileName`, `pageName`, `parentPage`, `basePath`.
|
|
128
|
+
3. If not found → ❌ FAIL. Reason: "Component not found in registry. Run `FigmaRegistryUtility update` or verify the Figma URL."
|
|
129
|
+
|
|
130
|
+
Also check `excludePatterns` in `$REGISTRY_CONFIG`:
|
|
131
|
+
- If the component's `pageName` or `sectionName` matches an exclude pattern → ❌ FAIL. Reason: "Component is in an excluded page: {pageName}."
|
|
132
|
+
|
|
133
|
+
**Known valid file keys** (from registry config):
|
|
134
|
+
- `ps4xrJzhn7WNbfkZs895Bi` — Design System Core
|
|
135
|
+
- `9ipBvrtsq9HlQ175B9k0wx` — Mobile App Components
|
|
136
|
+
- `YSs4g0EeGAW53haB0zz5sa` — Visual Assets
|
|
137
|
+
|
|
138
|
+
If the URL's `fileKey` does not match any of these → ❌ FAIL. Reason: "Unknown Figma file. Only Design System Core, Mobile App Components, and Visual Assets are supported."
|
|
139
|
+
|
|
140
|
+
**Pass Condition:** Component exists in registry, is NOT in an excluded page, and belongs to a known Figma file.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
### Criterion 2 — Figma Property Structure & Code Connect Strategy
|
|
145
|
+
|
|
146
|
+
**Question:** Uygulanabilir bir Code Connect stratejisi var mı?
|
|
147
|
+
|
|
148
|
+
**Check:**
|
|
149
|
+
|
|
150
|
+
1. Fetch component data via Figma REST API:
|
|
151
|
+
```python
|
|
152
|
+
# Use python3 urllib.request — curl may be blocked by policy
|
|
153
|
+
import subprocess, urllib.request, json
|
|
154
|
+
token = subprocess.check_output(
|
|
155
|
+
["security", "find-generic-password", "-s", "FIGMA_ACCESS_TOKEN", "-w"],
|
|
156
|
+
text=True
|
|
157
|
+
).strip()
|
|
158
|
+
req = urllib.request.Request(
|
|
159
|
+
f"https://api.figma.com/v1/files/{fileKey}/nodes?ids={nodeId}",
|
|
160
|
+
headers={"X-Figma-Token": token}
|
|
161
|
+
)
|
|
162
|
+
data = json.loads(urllib.request.urlopen(req).read())
|
|
163
|
+
```
|
|
164
|
+
2. Determine the component type from the response:
|
|
165
|
+
- **`COMPONENT_SET`** → has variants → classify properties:
|
|
166
|
+
- Variant properties → `@FigmaEnum`
|
|
167
|
+
- Text properties → `@FigmaString`
|
|
168
|
+
- Boolean properties → `@FigmaBoolean`
|
|
169
|
+
- Instance swap properties → `@FigmaInstance`
|
|
170
|
+
- **`COMPONENT`** (plain, no variants) → uses **STATIC_VALUES** strategy
|
|
171
|
+
3. Determine Code Connect strategy:
|
|
172
|
+
|
|
173
|
+
| Figma Type | Properties | Strategy | C2 Result |
|
|
174
|
+
|------------|-----------|----------|-----------|
|
|
175
|
+
| `COMPONENT_SET` | ≥1 property | Property Mapping | ✅ PASS |
|
|
176
|
+
| `COMPONENT_SET` | 0 properties | Unexpected | ❌ FAIL |
|
|
177
|
+
| `COMPONENT` | 0 properties | STATIC_VALUES | ✅ PASS |
|
|
178
|
+
| `COMPONENT` | N/A | STATIC_VALUES | ✅ PASS |
|
|
179
|
+
|
|
180
|
+
**Pass Condition:** Component has a valid Code Connect strategy — either property mapping (for COMPONENT_SET with ≥1 property) or STATIC_VALUES (for plain COMPONENT).
|
|
181
|
+
|
|
182
|
+
**Output:** Always report the detected strategy in the result:
|
|
183
|
+
- `✅ STATIC_VALUES — plain COMPONENT, no variant properties (uses static preview in .figma.swift)`
|
|
184
|
+
- `✅ Property Mapping — 3 enum, 1 string, 2 bool`
|
|
185
|
+
- `❌ COMPONENT_SET with 0 properties — unexpected, needs design review`
|
|
186
|
+
|
|
187
|
+
**Warning Flags** (informational, not failures):
|
|
188
|
+
- Property named `"Property 1"` → flag as `UNNAMED_PROPERTY`: "Unnamed property detected — design team should rename."
|
|
189
|
+
- Property values with likely typos (e.g., `"Standart"`, `"Clasic Plus"`) → flag as `TYPO_DETECTED`.
|
|
190
|
+
|
|
191
|
+
**Fallback:** If Figma API is unreachable, mark criterion as ⚠️ SKIPPED. Do NOT fail the entire validation.
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
### Criterion 3 — Design Token Compliance
|
|
196
|
+
|
|
197
|
+
**Question:** Renkler/spacing/typography design token kullanıyor mu?
|
|
198
|
+
|
|
199
|
+
**Check:**
|
|
200
|
+
|
|
201
|
+
1. From Figma node data, extract:
|
|
202
|
+
- **Fill colors** — check if they correspond to known design token hex values
|
|
203
|
+
- **Text styles** — check if they match `UIAssetTokens` typography styles
|
|
204
|
+
- **Spacing values** — check if padding/gap values are standard multiples: 2, 4, 8, 12, 16, 24, 32, 48
|
|
205
|
+
- **Corner radius** — check if values match known radius tokens: 4, 8, 12, 16, 24
|
|
206
|
+
2. Optionally cross-reference with the token index:
|
|
207
|
+
```bash
|
|
208
|
+
cd "${COMMON_PATH}" && .build/debug/FigmaRegistryUtility uitoken-index 2>/dev/null
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**Pass Condition:** No hardcoded hex colors outside the design token palette. Spacing uses standard increments.
|
|
212
|
+
|
|
213
|
+
**Soft Pass:** If token verification is not possible from the API response, mark as ⚠️ ASSUMED PASS with note: "Token compliance could not be fully verified from API — manual visual check recommended."
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
### Criterion 4 — Nested Dependency Readiness
|
|
218
|
+
|
|
219
|
+
**Question:** Bağımlı olduğu alt bileşenler zaten implemente mi?
|
|
220
|
+
|
|
221
|
+
**Check:**
|
|
222
|
+
|
|
223
|
+
1. From Figma node data, inspect child nodes for component instances (type `INSTANCE`).
|
|
224
|
+
2. For each child instance, extract its `componentId`.
|
|
225
|
+
3. **Resolve the componentId** to a searchable ID using the `components` metadata from the API response.
|
|
226
|
+
4. **Search for implementation** using the decision tree below.
|
|
227
|
+
|
|
228
|
+
#### Step 3 — ComponentId Resolution (CRITICAL)
|
|
229
|
+
|
|
230
|
+
Figma INSTANCE nodes reference a **variant's node ID** (`componentId`), NOT the COMPONENT_SET's node ID. The API response includes a `components` metadata map at `data.nodes[nodeId].components` that provides the `componentSetId` for each variant.
|
|
231
|
+
|
|
232
|
+
```python
|
|
233
|
+
# API response structure
|
|
234
|
+
api_components = data['nodes'][node_id].get('components', {})
|
|
235
|
+
|
|
236
|
+
for component_id, name in unique_instances.items():
|
|
237
|
+
meta = api_components.get(component_id, {})
|
|
238
|
+
component_set_id = meta.get('componentSetId', '')
|
|
239
|
+
|
|
240
|
+
# Resolution order:
|
|
241
|
+
# 1. Try componentId directly in registry
|
|
242
|
+
# 2. If not found AND componentSetId exists → try componentSetId in registry
|
|
243
|
+
# 3. If still not found → try componentId in COMMON Components/{id}.json
|
|
244
|
+
# 4. If still not found → search by component name in registry and COMMON
|
|
245
|
+
# 5. If still not found → search Regroup/ by name
|
|
246
|
+
|
|
247
|
+
search_ids = [component_id]
|
|
248
|
+
if component_set_id:
|
|
249
|
+
search_ids.append(component_set_id)
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
**Why this matters:** A Logo component set registered as `nodeId=14:619` in the registry may be referenced via its variant `componentId=1338:1632` (e.g., `Color=White`). Without resolving through `componentSetId`, the lookup fails with a false "unknown" result.
|
|
253
|
+
|
|
254
|
+
#### Dependency Resolution Decision Tree
|
|
255
|
+
|
|
256
|
+
For each child `componentId`, look it up in the component registry (`component-registry.json`) by `nodeId`. Then apply this decision tree:
|
|
257
|
+
|
|
258
|
+
```
|
|
259
|
+
┌──────────────────────┐
|
|
260
|
+
│ Found in registry? │
|
|
261
|
+
└──────┬───────────────┘
|
|
262
|
+
yes │ no
|
|
263
|
+
┌────────────┴──┐ ┌──────────────────────────────┐
|
|
264
|
+
│ Check fileKey │ │ Check Components/{nodeId}.json│
|
|
265
|
+
└──┬────────────┘ │ in COMMON_PATH │
|
|
266
|
+
│ └──────────┬───────────────────┘
|
|
267
|
+
┌────────────┼────────────┐ found │ not found
|
|
268
|
+
│ │ │ │ │
|
|
269
|
+
VA (Y…sa) DSC (p…Bi) MAC (9…wx) ┌─────┴──────┐ UNKNOWN
|
|
270
|
+
│ │ │ │status.ios. │ (warn)
|
|
271
|
+
▼ ▼ ▼ │implemented │
|
|
272
|
+
COMMON UICOMP UICOMP │.value=true?│
|
|
273
|
+
└──┬──────┬──┘
|
|
274
|
+
yes│ no│
|
|
275
|
+
COMMON UICOMP
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**File key mapping:**
|
|
279
|
+
|
|
280
|
+
| File Key | File Name | Primary Location | Content Type |
|
|
281
|
+
|----------|-----------|-----------------|--------------|
|
|
282
|
+
| `YSs4g0EeGAW53haB0zz5sa` | Visual Assets | **COMMON** | Icons, Logos, Other Visual Assets |
|
|
283
|
+
| `ps4xrJzhn7WNbfkZs895Bi` | Design System Core | **UICOMP** | Core UI components |
|
|
284
|
+
| `9ipBvrtsq9HlQ175B9k0wx` | Mobile App Components | **UICOMP** | Flow-based / app-specific components |
|
|
285
|
+
|
|
286
|
+
**Registry-based shortcuts** (parentPage check — no filesystem search needed):
|
|
287
|
+
|
|
288
|
+
| `parentPage` value | Location | Verification |
|
|
289
|
+
|--------------------|----------|-------------|
|
|
290
|
+
| `"Icons"` | COMMON | ✅ Auto-pass (registered icon) |
|
|
291
|
+
| `"Logos"` | COMMON | Check `Components/{nodeId}.json` or `Regroup/` |
|
|
292
|
+
| `"Other Visual Assets"` | COMMON | Check `Components/{nodeId}.json` |
|
|
293
|
+
| `"Components"`, `"-"`, `""` | UICOMP | Search `.figma.swift` on `iteration/develop` |
|
|
294
|
+
| `"Flow Based Components"` | UICOMP | Search `.figma.swift` on `iteration/develop` |
|
|
295
|
+
|
|
296
|
+
#### Verification per location
|
|
297
|
+
|
|
298
|
+
**COMMON path** (`${COMMON_PATH}/Shared/Figma/`):
|
|
299
|
+
```bash
|
|
300
|
+
# IMPORTANT: Search on iteration/develop, not current HEAD
|
|
301
|
+
cd "${COMMON_PATH}"
|
|
302
|
+
NODE_DASH="${nodeId//:/-}"
|
|
303
|
+
# 1. Check Components/{nodeId}.json — new status.ios.implemented.value (architecture-update)
|
|
304
|
+
# with legacy codeConnect.ios fallback for pre-backfill entries
|
|
305
|
+
git show iteration/develop:Shared/Figma/Components/${NODE_DASH}.json 2>/dev/null | \
|
|
306
|
+
python3 -c "
|
|
307
|
+
import json,sys
|
|
308
|
+
d = json.load(sys.stdin)
|
|
309
|
+
# preferred: new status block
|
|
310
|
+
ios = (d.get('status') or {}).get('ios') or {}
|
|
311
|
+
impl = (ios.get('implemented') or {}).get('value')
|
|
312
|
+
# fallback: legacy codeConnect.ios flag (kept in sync by registry_writer)
|
|
313
|
+
if impl is None:
|
|
314
|
+
impl = (d.get('codeConnect') or {}).get('ios', False)
|
|
315
|
+
print('implemented:', bool(impl), 'skip:', d.get('skip', False))
|
|
316
|
+
"
|
|
317
|
+
# 2. Also search registry and component-catalog on iteration/develop
|
|
318
|
+
git grep -l "${nodeId}" iteration/develop -- 'Shared/Figma/Generated/*.json' 2>/dev/null
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
**UICOMP path** (`${UICOMPONENTS_PATH}/Sources/`):
|
|
322
|
+
```bash
|
|
323
|
+
# IMPORTANT: Search on iteration/develop, not current HEAD
|
|
324
|
+
cd "${UICOMPONENTS_PATH}"
|
|
325
|
+
# 1. Search .figma.swift files for nodeId on iteration/develop
|
|
326
|
+
git grep -l "${nodeId}" iteration/develop -- '*.figma.swift' 2>/dev/null
|
|
327
|
+
# 2. Also check Regroup/ folder (logos that live in uicomponents)
|
|
328
|
+
git ls-tree -r --name-only iteration/develop -- Sources/UIComponents/Regroup/ 2>/dev/null
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
**Name-based fallback** (when ID lookups fail):
|
|
332
|
+
```bash
|
|
333
|
+
# Use the component name from API metadata to search
|
|
334
|
+
# Convert name: "Logo - Miles and Smiles" → "MilesAndSmilesLogo" or similar
|
|
335
|
+
cd "${COMMON_PATH}"
|
|
336
|
+
git grep -rl "${component_name}" iteration/develop -- 'Shared/Figma/Components/*.json' 2>/dev/null
|
|
337
|
+
cd "${UICOMPONENTS_PATH}"
|
|
338
|
+
git grep -rl "${component_name}" iteration/develop -- 'Sources/UIComponents/Regroup/' 2>/dev/null
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
> **⚠️ IMPORTANT:** Both submodule pointers in the main repo's `develop` may lag behind their respective `iteration/develop` branches. Always search on `iteration/develop` using `git grep` / `git show` to avoid false negatives. This applies to **both** `{project.slug}-common` and `{project.slug}-components`.
|
|
342
|
+
|
|
343
|
+
**Pass Condition:** ALL child component instances are either:
|
|
344
|
+
- Already implemented (have a matching `.figma.swift` on `iteration/develop`), OR
|
|
345
|
+
- Have `status.ios.implemented.value = true` in individual `Components/{nodeId}.json` (architecture-update model — with legacy `codeConnect.ios = true` as fallback for pre-backfill entries), OR
|
|
346
|
+
- Listed under `parentPage: "Icons"` or `"Logos"` in the component registry, OR
|
|
347
|
+
- Found in `Regroup/` folder (cross-file logos like `MilesAndSmilesLogo`), OR
|
|
348
|
+
- Marked as skipped in registry (`skip: true`), OR
|
|
349
|
+
- Built-in SwiftUI primitives (Text, Image, Shape, etc.)
|
|
350
|
+
|
|
351
|
+
**Fail Condition:** One or more child components are unimplemented AND not skipped.
|
|
352
|
+
List the missing dependencies with their Figma names and node IDs.
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
### Criterion 5 — Atomic Component Scope
|
|
357
|
+
|
|
358
|
+
**Question:** Atomic (tek başına anlamlı) bir UI parçası mı?
|
|
359
|
+
|
|
360
|
+
**Check:**
|
|
361
|
+
|
|
362
|
+
1. From registry data, check `parentPage`:
|
|
363
|
+
- `"Components"` or empty → likely atomic ✅
|
|
364
|
+
- `"Flow Based Components"` → check further (could be a section of a screen)
|
|
365
|
+
2. From Figma node data, check dimensions:
|
|
366
|
+
- Width > 500 AND height > 800 → likely a full screen ❌
|
|
367
|
+
3. Check variant count from component properties:
|
|
368
|
+
- 2–50 variant combinations → reasonable ✅
|
|
369
|
+
- 0–1 variants → acceptable for STATIC_VALUES components — ⚠️ warn but pass
|
|
370
|
+
- 500+ variants → likely needs splitting ❌
|
|
371
|
+
4. Check component name depth:
|
|
372
|
+
- Name contains `/` separators with 4+ levels (e.g., `A/B/C/D/E`) → ⚠️ warn, may be deeply nested subcomponent
|
|
373
|
+
|
|
374
|
+
**Pass Condition:** Not a full screen, has reasonable variant count, represents a reusable UI piece.
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
### Criterion 6 — iOS Platform Applicability
|
|
379
|
+
|
|
380
|
+
**Question:** iOS platformu için geçerli mi (Hover-only değil)?
|
|
381
|
+
|
|
382
|
+
**Check:**
|
|
383
|
+
|
|
384
|
+
1. From component properties, check if ALL variant values are hover/desktop-only:
|
|
385
|
+
- If the ONLY states available are `Hover` → ❌ FAIL (iOS doesn't have hover)
|
|
386
|
+
- If a `Channel` property exists and has ONLY `Desktop` or `Web` values → ❌ FAIL
|
|
387
|
+
2. Check page mapping:
|
|
388
|
+
- Component on a page containing `"iOS"` in registry `pageIdMappings` → ✅ platform-specific, OK
|
|
389
|
+
- No platform indicator → ✅ assumed cross-platform
|
|
390
|
+
3. Check for web-only component patterns in the name:
|
|
391
|
+
- `"Breadcrumb"`, `"Sidebar"`, `"Tooltip/Hover"` → ⚠️ flag for review but don't auto-fail
|
|
392
|
+
|
|
393
|
+
**Pass Condition:** Component is usable on iOS — has non-hover states and is not desktop-only.
|
|
394
|
+
|
|
395
|
+
---
|
|
396
|
+
|
|
397
|
+
### Criterion 7 — Already Implemented Check
|
|
398
|
+
|
|
399
|
+
**Question:** Bu component zaten implemente edilmiş mi?
|
|
400
|
+
|
|
401
|
+
**Check:**
|
|
402
|
+
|
|
403
|
+
1. During the `os.walk` in C4, also search for files matching the component name or nodeId in `${UICOMPONENTS_PATH}/Sources/` (excluding `Discarded/`).
|
|
404
|
+
2. Match criteria:
|
|
405
|
+
- A `.figma.swift` file containing the component's `nodeId`
|
|
406
|
+
- A `.swift` file whose name matches the component's last path segment (e.g., `MilesDestination.swift` for `Explore/ProgramWorld/MilesDestination`)
|
|
407
|
+
3. If found → ❌ FAIL. Reason: "Component is already implemented at {path}. Use `/figma-mend` to re-implement or skip."
|
|
408
|
+
4. If not found → ✅ PASS.
|
|
409
|
+
|
|
410
|
+
**Pass Condition:** No existing Swift implementation found for this component (excluding `Discarded/`).
|
|
411
|
+
|
|
412
|
+
**Note:** This criterion prevents double-implementation. If the component exists in `Discarded/`, C7 still passes but an `MEND_CANDIDATE` info flag is raised in Implementation Intel.
|
|
413
|
+
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
## Implementation Intel (Non-Blocking Info Section)
|
|
417
|
+
|
|
418
|
+
These are computed from data already in memory (registry, API response, filesystem walk) with **zero additional cost**. They appear below the verdict box as `📊 Implementation Intel`.
|
|
419
|
+
|
|
420
|
+
### Complexity Score
|
|
421
|
+
|
|
422
|
+
Recursive node count + max depth from the API node tree:
|
|
423
|
+
```python
|
|
424
|
+
def complexity(n, depth=0):
|
|
425
|
+
children = n.get('children', [])
|
|
426
|
+
count = len(children)
|
|
427
|
+
max_d = depth
|
|
428
|
+
for c in children:
|
|
429
|
+
cc, cd = complexity(c, depth + 1)
|
|
430
|
+
count += cc
|
|
431
|
+
max_d = max(max_d, cd)
|
|
432
|
+
return count, max_d
|
|
433
|
+
|
|
434
|
+
total_nodes, max_depth = complexity(node)
|
|
435
|
+
# S: <15 nodes | M: 15-40 | L: 40-100 | XL: >100
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### Text Node Count (Localization Estimate)
|
|
439
|
+
|
|
440
|
+
Count nodes with `type == 'TEXT'` in the tree → approximate localization key count.
|
|
441
|
+
|
|
442
|
+
### Image/Asset Detection
|
|
443
|
+
|
|
444
|
+
Check for `IMAGE` fill types or image-related children → signals need for `AsyncImage`/Kingfisher.
|
|
445
|
+
|
|
446
|
+
### Discarded Version Check
|
|
447
|
+
|
|
448
|
+
During C4/C7 filesystem walk, if a match is found under `Discarded/` → flag as `MEND_CANDIDATE` with the path. Signals `/figma-mend` should be used instead of `/figma-to-swiftui`.
|
|
449
|
+
|
|
450
|
+
### Wiki Documentation Status
|
|
451
|
+
|
|
452
|
+
Check if a wiki markdown file exists at:
|
|
453
|
+
```
|
|
454
|
+
${REPO_ROOT}/{repos.wiki.path}/FigmaComponents/
|
|
455
|
+
```
|
|
456
|
+
Matching the component name pattern.
|
|
457
|
+
|
|
458
|
+
### Sibling Page Progress
|
|
459
|
+
|
|
460
|
+
From registry, count how many components on the same `pageName` are implemented vs total. Useful for batch planning.
|
|
461
|
+
|
|
462
|
+
---
|
|
463
|
+
|
|
464
|
+
## Scoring & Verdict
|
|
465
|
+
|
|
466
|
+
| Score | Verdict | Meaning |
|
|
467
|
+
|-------|---------|---------|
|
|
468
|
+
| 7/7 ✅ | **VALID** | Ready for `/figma-to-swiftui` implementation pipeline |
|
|
469
|
+
| 6/7 ✅ | **CONDITIONAL** | One criterion failed — may be resolvable |
|
|
470
|
+
| 5/7 or below | **INVALID** | Not ready — requires design-side changes or scope adjustment |
|
|
471
|
+
|
|
472
|
+
**Note on ⚠️ SKIPPED criteria:** A skipped criterion (e.g., Figma API unreachable) counts as a pass for scoring purposes but is noted in the output.
|
|
473
|
+
|
|
474
|
+
---
|
|
475
|
+
|
|
476
|
+
## Output Format
|
|
477
|
+
|
|
478
|
+
### Single Mode
|
|
479
|
+
|
|
480
|
+
```
|
|
481
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
482
|
+
║ FIGMA COMPONENT VALIDATION ║
|
|
483
|
+
╠══════════════════════════════════════════════════════════════╣
|
|
484
|
+
║ Component: {componentName} ║
|
|
485
|
+
║ Node ID: {nodeId} ║
|
|
486
|
+
║ File: {fileName} ║
|
|
487
|
+
║ Page: {pageName} ║
|
|
488
|
+
╠══════════════════════════════════════════════════════════════╣
|
|
489
|
+
║ ║
|
|
490
|
+
║ 1. Registry Presence ✅ Found in Design System Core║
|
|
491
|
+
║ 2. Code Connect Strategy ✅ Property Mapping (3e,1s,2b)║
|
|
492
|
+
║ 3. Design Token Compliance ⚠️ Assumed (API limit) ║
|
|
493
|
+
║ 4. Dependency Readiness ✅ All 2 deps implemented ║
|
|
494
|
+
║ 5. Atomic Scope ✅ 12 variants, 354×265 ║
|
|
495
|
+
║ 6. iOS Applicability ✅ Has mobile states ║
|
|
496
|
+
║ 7. Already Implemented ✅ No existing implementation ║
|
|
497
|
+
║ ║
|
|
498
|
+
║ ────────────────────────────────────────────────────────── ║
|
|
499
|
+
║ VERDICT: ✅ VALID (7/7) ║
|
|
500
|
+
║ Ready for /figma-to-swiftui ║
|
|
501
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
502
|
+
|
|
503
|
+
📊 Implementation Intel:
|
|
504
|
+
- Complexity: M (28 nodes, depth 4)
|
|
505
|
+
- Text nodes: 5 → ~5 localization keys
|
|
506
|
+
- Images: 1 image fill → needs AsyncImage
|
|
507
|
+
- Discarded: No previous version
|
|
508
|
+
- Wiki: ✅ Documentation exists
|
|
509
|
+
- Page progress: Explore 12/18 (67%)
|
|
510
|
+
|
|
511
|
+
⚠️ Warnings:
|
|
512
|
+
- UNNAMED_PROPERTY: "Property 1" detected — design team should rename
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
If `--verbose`, expand each criterion with detailed findings.
|
|
516
|
+
|
|
517
|
+
### Batch Mode
|
|
518
|
+
|
|
519
|
+
```
|
|
520
|
+
## Batch Validation Results
|
|
521
|
+
|
|
522
|
+
| # | Component | File | C1 | C2 | C3 | C4 | C5 | C6 | C7 | Score | Verdict |
|
|
523
|
+
|---|-----------|------|----|----|----|----|----|----|----|-------|---------|
|
|
524
|
+
| 1 | TextBadge | DSC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 7/7 | VALID |
|
|
525
|
+
| 2 | FooBar | MAC | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | 6/7 | COND. |
|
|
526
|
+
...
|
|
527
|
+
|
|
528
|
+
### Summary
|
|
529
|
+
- VALID: X components
|
|
530
|
+
- CONDITIONAL: Y components
|
|
531
|
+
- INVALID: Z components
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
---
|
|
535
|
+
|
|
536
|
+
## Warning Flags (Informational, Non-Blocking)
|
|
537
|
+
|
|
538
|
+
These are logged but do NOT affect the VALID/INVALID verdict:
|
|
539
|
+
|
|
540
|
+
| Flag | Description |
|
|
541
|
+
|------|-------------|
|
|
542
|
+
| `UNNAMED_PROPERTY` | Figma property named "Property 1" — tasarımcı rename etmeli |
|
|
543
|
+
| `TYPO_DETECTED` | Variant value appears misspelled (e.g., "Standart", "Clasic Plus") |
|
|
544
|
+
| `DESKTOP_CHANNEL` | Component has Desktop/Web channel mapping — iOS'ta kullanılmaz |
|
|
545
|
+
| `MEND_CANDIDATE` | A previous implementation exists in `Discarded/` — use `/figma-mend` instead |
|
|
546
|
+
| `URL_FORMAT_INCONSISTENT` | Node URL uses non-standard format (www vs non-www, `:` vs `-`) |
|
|
547
|
+
| `LOW_VARIANT_COUNT` | 0–1 variants — uses STATIC_VALUES Code Connect strategy |
|
|
548
|
+
| `DEEP_NESTING` | Component name has 4+ path levels — may be a deeply nested subcomponent |
|
|
549
|
+
|
|
550
|
+
---
|
|
551
|
+
|
|
552
|
+
## Error Handling
|
|
553
|
+
|
|
554
|
+
| Error | Action |
|
|
555
|
+
|-------|--------|
|
|
556
|
+
| Figma API unreachable | Skip Criteria 2, 3, 4, 6 — mark as ⚠️ SKIPPED, continue with Criteria 1, 5, 7 |
|
|
557
|
+
| Registry file not found | Show command: `cd ${COMMON_PATH} && swift build --product FigmaRegistryUtility && .build/debug/FigmaRegistryUtility update` |
|
|
558
|
+
| FigmaRegistryUtility not built | Show: `cd ${COMMON_PATH} && swift build --product FigmaRegistryUtility` |
|
|
559
|
+
| Invalid URL format | Ask user for correct URL via AskUserQuestion |
|
|
560
|
+
| Figma token not found | Show: `security add-generic-password -s "FIGMA_ACCESS_TOKEN" -w "<YOUR_TOKEN>"` |
|
|
561
|
+
|
|
562
|
+
---
|
|
563
|
+
|
|
564
|
+
## Execution Sequence
|
|
565
|
+
|
|
566
|
+
```
|
|
567
|
+
1. PARSE_URL → Extract fileKey, nodeId from arguments
|
|
568
|
+
2. RUN_SCRIPT → python3 ${REPO_ROOT}/.instructions/figma/figma-validate/figma_validate.py <fileKey> <nodeId>
|
|
569
|
+
3. PARSE_JSON → Read JSON output from script
|
|
570
|
+
4. FORMAT_OUTPUT → Display formatted verdict box with intel + warnings
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
## Performance Requirements
|
|
574
|
+
|
|
575
|
+
**Target:** ≤ 10 seconds for single-component validation.
|
|
576
|
+
|
|
577
|
+
A permanent Python script at `.instructions/figma/figma-validate/figma_validate.py` handles all criteria + intel in one invocation.
|
|
578
|
+
|
|
579
|
+
**How to run:**
|
|
580
|
+
|
|
581
|
+
```bash
|
|
582
|
+
python3 "${REPO_ROOT}/.instructions/figma/figma-validate/figma_validate.py" <fileKey> <nodeId>
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
Example:
|
|
586
|
+
```bash
|
|
587
|
+
python3 .instructions/figma/figma-validate/figma_validate.py 9ipBvrtsq9HlQ175B9k0wx 11797:6100
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
The script:
|
|
591
|
+
- Auto-detects `REPO_ROOT` via `git rev-parse --show-toplevel`
|
|
592
|
+
- Reads the Figma token from macOS Keychain (`FIGMA_ACCESS_TOKEN`)
|
|
593
|
+
- Outputs a single JSON object with `results`, `intel`, `warnings`, `score`, `total`, `elapsed_ms`
|
|
594
|
+
- Agent parses the JSON and formats the verdict box
|
|
595
|
+
|
|
596
|
+
**IMPORTANT — Do NOT create temporary `.py` or `.json` files.** Always use the permanent script above. If for any reason temporary files were created during execution, clean them up before returning the result:
|
|
597
|
+
|
|
598
|
+
```bash
|
|
599
|
+
rm -f /tmp/figma_validate*.py /tmp/figma_validate*.json /tmp/figma_qr*.py /tmp/figma_analyze*.py /tmp/figma_lookup*.py
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
**No-temp-file principle:** This skill is read-only and must leave zero artifacts. All computation must happen either:
|
|
603
|
+
1. Via the permanent `figma_validate.py` script, OR
|
|
604
|
+
2. Via inline `python3 -c "..."` one-liners piped through shell, OR
|
|
605
|
+
3. Via `git grep` / `git show` commands
|
|
606
|
+
|
|
607
|
+
Never write intermediate results to disk.
|
|
608
|
+
|
|
609
|
+
**Key rules for speed:**
|
|
610
|
+
- ONE terminal command total (the python3 script) — no sequential shell calls
|
|
611
|
+
- Use `urllib.request` — never `curl` (may be blocked by auto-approval policy)
|
|
612
|
+
- Use `os.walk` / `glob.glob` for file searches — never shell `grep`/`find`
|
|
613
|
+
- Never put `#` comments in shell compound commands — causes `zsh` parse errors
|
|
614
|
+
|
|
615
|
+
---
|
|
616
|
+
|
|
617
|
+
## Future Extensibility
|
|
618
|
+
|
|
619
|
+
Each criterion is self-contained with:
|
|
620
|
+
- A **question** (what it checks — displayed in Turkish for team context)
|
|
621
|
+
- A **check** procedure (how to verify)
|
|
622
|
+
- A **pass condition** (what constitutes success)
|
|
623
|
+
|
|
624
|
+
To add a new criterion:
|
|
625
|
+
1. Add a new `### Criterion N` section following the same structure
|
|
626
|
+
2. Update the scoring thresholds in the "Scoring & Verdict" table
|
|
627
|
+
3. Update the output format to include the new column
|
|
628
|
+
4. Update the description in both SKILL.md files (entry point + instructions)
|
|
629
|
+
|
|
630
|
+
To remove a criterion:
|
|
631
|
+
1. Delete the `### Criterion N` section
|
|
632
|
+
2. Adjust scoring thresholds accordingly
|
|
633
|
+
3. Update descriptions
|