@mmerterden/multi-agent-pipeline 11.2.0 → 11.3.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.
Files changed (331) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +2 -2
  3. package/docs/FIGMA_PIPELINE.md +12 -25
  4. package/docs/architecture.md +3 -5
  5. package/docs/features.md +8 -8
  6. package/install/_dev-only-files.mjs +0 -6
  7. package/install/claude.mjs +33 -15
  8. package/install/copilot.mjs +16 -14
  9. package/install/templates/copilot-instructions.md +3 -3
  10. package/package.json +1 -1
  11. package/pipeline/commands/{multi-agent.md → multi-agent/SKILL.md} +39 -39
  12. package/pipeline/commands/multi-agent/{analysis.md → analysis/SKILL.md} +18 -18
  13. package/pipeline/commands/multi-agent/{analysis-resolve.md → analysis-resolve/SKILL.md} +4 -4
  14. package/pipeline/commands/multi-agent/{autopilot.md → autopilot/SKILL.md} +4 -4
  15. package/pipeline/commands/multi-agent/{build-optimize.md → build-optimize/SKILL.md} +1 -1
  16. package/pipeline/commands/multi-agent/{channels.md → channels/SKILL.md} +12 -12
  17. package/pipeline/commands/multi-agent/{dev.md → dev/SKILL.md} +4 -4
  18. package/pipeline/commands/multi-agent/{dev-autopilot.md → dev-autopilot/SKILL.md} +4 -4
  19. package/pipeline/commands/multi-agent/{dev-local.md → dev-local/SKILL.md} +5 -5
  20. package/pipeline/commands/multi-agent/{dev-local-autopilot.md → dev-local-autopilot/SKILL.md} +4 -4
  21. package/pipeline/commands/multi-agent/{finish.md → finish/SKILL.md} +6 -6
  22. package/pipeline/commands/multi-agent/{generate.md → generate/SKILL.md} +3 -3
  23. package/pipeline/commands/multi-agent/{help.md → help/SKILL.md} +4 -4
  24. package/pipeline/commands/multi-agent/{local.md → local/SKILL.md} +5 -5
  25. package/pipeline/commands/multi-agent/{local-autopilot.md → local-autopilot/SKILL.md} +5 -5
  26. package/pipeline/commands/multi-agent/{manual-test.md → manual-test/SKILL.md} +1 -1
  27. package/pipeline/commands/multi-agent/refactor/SKILL.md +257 -0
  28. package/pipeline/commands/multi-agent/{resume.md → resume/SKILL.md} +1 -1
  29. package/pipeline/commands/multi-agent/{review.md → review/SKILL.md} +5 -5
  30. package/pipeline/commands/multi-agent/{setup.md → setup/SKILL.md} +1 -1
  31. package/pipeline/commands/multi-agent/{sync.md → sync/SKILL.md} +20 -58
  32. package/pipeline/{commands/multi-agent → multi-agent-refs}/_account-picker.md +2 -2
  33. package/pipeline/{commands/multi-agent → multi-agent-refs}/_dev-context.md +2 -2
  34. package/pipeline/{commands/multi-agent → multi-agent-refs}/_repo-picker.md +2 -2
  35. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/android-guide.md +1 -1
  36. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/jira.md +1 -1
  37. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/wiki.md +7 -7
  38. package/pipeline/multi-agent-refs/component-dispatch.md +92 -0
  39. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/cross-cli-contract.md +10 -77
  40. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/verify-by-test.md +1 -1
  41. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/generate-issue.md +2 -2
  42. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/issue-jira-triad.md +1 -1
  43. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/keychain.md +1 -1
  44. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/log-format.md +1 -1
  45. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/modes.md +2 -2
  46. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/operations.md +1 -1
  47. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-0-init.md +10 -10
  48. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-1-analysis.md +6 -6
  49. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-2-planning.md +3 -3
  50. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-3-dev.md +10 -10
  51. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-4-review.md +8 -8
  52. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-5-test.md +3 -3
  53. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-6-commit.md +4 -4
  54. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-7-report.md +6 -6
  55. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases.md +12 -12
  56. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/progress-contract.md +4 -4
  57. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/swiftui-guide.md +1 -1
  58. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/tracker-contract.md +3 -3
  59. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/wiki-capture.md +4 -4
  60. package/pipeline/preferences-template.json +17 -1
  61. package/pipeline/rules/figma-pipeline.md +2 -2
  62. package/pipeline/schemas/prefs.schema.json +0 -34
  63. package/pipeline/scripts/README.md +1 -3
  64. package/pipeline/scripts/fixtures/install-layout.tsv +6 -5
  65. package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
  66. package/pipeline/scripts/phase-banner.sh +2 -2
  67. package/pipeline/scripts/review-scope.mjs +94 -0
  68. package/pipeline/scripts/scan-agent-config.sh +2 -2
  69. package/pipeline/scripts/smoke-agent-log-cost.sh +1 -1
  70. package/pipeline/scripts/smoke-agent-model-routing.sh +4 -4
  71. package/pipeline/scripts/smoke-autopilot-circuit-breaker.sh +2 -2
  72. package/pipeline/scripts/smoke-channels-approval-gate.sh +2 -2
  73. package/pipeline/scripts/smoke-channels-flow.sh +5 -5
  74. package/pipeline/scripts/smoke-clarify.sh +1 -1
  75. package/pipeline/scripts/smoke-commands-skills-parity.sh +3 -3
  76. package/pipeline/scripts/smoke-community-gates.sh +1 -1
  77. package/pipeline/scripts/smoke-compliance-skills.sh +2 -2
  78. package/pipeline/scripts/smoke-cost-summary.sh +1 -1
  79. package/pipeline/scripts/smoke-cross-cli-behavior.sh +17 -43
  80. package/pipeline/scripts/smoke-cross-phase-cohesion.sh +1 -1
  81. package/pipeline/scripts/smoke-dev-critic.sh +1 -1
  82. package/pipeline/scripts/smoke-diff-explain.sh +1 -1
  83. package/pipeline/scripts/smoke-diff-risk.sh +1 -1
  84. package/pipeline/scripts/smoke-evidence-gate.sh +1 -1
  85. package/pipeline/scripts/smoke-figma-dispatch.sh +46 -57
  86. package/pipeline/scripts/smoke-gate-hooks.sh +1 -1
  87. package/pipeline/scripts/smoke-generate-issue.sh +8 -8
  88. package/pipeline/scripts/smoke-handoff-contract.sh +3 -3
  89. package/pipeline/scripts/smoke-identity-isolation.sh +2 -2
  90. package/pipeline/scripts/smoke-intent-guard.sh +1 -1
  91. package/pipeline/scripts/smoke-issue-comment-template.sh +2 -2
  92. package/pipeline/scripts/smoke-issue-jira-triad.sh +4 -4
  93. package/pipeline/scripts/smoke-language-axis.sh +6 -6
  94. package/pipeline/scripts/smoke-learnings-ledger.sh +3 -3
  95. package/pipeline/scripts/smoke-mode-dispatch-drift.sh +16 -16
  96. package/pipeline/scripts/smoke-model-fallback.sh +3 -3
  97. package/pipeline/scripts/smoke-multi-repo-integration.sh +2 -2
  98. package/pipeline/scripts/smoke-multi-repo-worktree.sh +1 -1
  99. package/pipeline/scripts/smoke-no-token-prompt.sh +5 -5
  100. package/pipeline/scripts/smoke-phase-0-multi-repo.sh +1 -1
  101. package/pipeline/scripts/smoke-phase-6-multi.sh +1 -1
  102. package/pipeline/scripts/smoke-phase4-gates.sh +45 -0
  103. package/pipeline/scripts/smoke-plan-approval-gate.sh +5 -5
  104. package/pipeline/scripts/smoke-plan-todos.sh +3 -3
  105. package/pipeline/scripts/smoke-pr-review-actions.sh +3 -3
  106. package/pipeline/scripts/smoke-prefs-language.sh +1 -1
  107. package/pipeline/scripts/smoke-progress-contract.sh +2 -2
  108. package/pipeline/scripts/smoke-push-retry.sh +1 -1
  109. package/pipeline/scripts/smoke-repo-map.sh +2 -2
  110. package/pipeline/scripts/smoke-shadow-git.sh +1 -1
  111. package/pipeline/scripts/smoke-skill-authoring.sh +4 -9
  112. package/pipeline/scripts/smoke-tasklist-ordering.sh +10 -10
  113. package/pipeline/scripts/smoke-test-gap.sh +1 -1
  114. package/pipeline/scripts/smoke-token-budget.sh +1 -1
  115. package/pipeline/scripts/smoke-token-preflight.sh +2 -2
  116. package/pipeline/scripts/smoke-tracker-contract.sh +13 -13
  117. package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +5 -5
  118. package/pipeline/scripts/smoke-triage-memory.sh +2 -2
  119. package/pipeline/scripts/smoke-update-check.sh +1 -1
  120. package/pipeline/scripts/smoke-url-enrichment.sh +2 -2
  121. package/pipeline/scripts/smoke-validator-gates.sh +1 -1
  122. package/pipeline/scripts/smoke-verify-by-test.sh +3 -3
  123. package/pipeline/scripts/smoke-wiki-integration.sh +9 -33
  124. package/pipeline/scripts/smoke-work-summary.sh +1 -1
  125. package/pipeline/scripts/smoke-worktree-path-convention.sh +4 -4
  126. package/pipeline/scripts/test-integrity-gate.mjs +83 -0
  127. package/pipeline/scripts/uninstall.mjs +2 -2
  128. package/pipeline/skills/.skill-manifest.json +40 -160
  129. package/pipeline/skills/.skills-index.json +3 -372
  130. package/pipeline/skills/shared/README.md +1 -1
  131. package/pipeline/skills/shared/core/multi-agent/SKILL.md +1 -1
  132. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +2 -2
  133. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +3 -3
  134. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
  135. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +1 -1
  136. package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
  137. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +1 -1
  138. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +116 -51
  139. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +8 -30
  140. package/pipeline/skills/shared/external/compose-components/SKILL.md +14 -14
  141. package/pipeline/skills/skills-index.md +2 -43
  142. package/pipeline/commands/multi-agent/refactor.md +0 -188
  143. package/pipeline/commands/multi-agent/refs/component-dispatch.md +0 -92
  144. package/pipeline/scripts/smoke-existing-discovery-gate.sh +0 -71
  145. package/pipeline/scripts/smoke-figma-android-parity.sh +0 -148
  146. package/pipeline/scripts/smoke-figma-credential-store.sh +0 -105
  147. package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +0 -177
  148. package/pipeline/scripts/smoke-figma-sync.sh +0 -149
  149. package/pipeline/scripts/smoke-sync-delegation.sh +0 -74
  150. package/pipeline/skills/figma-android/README.md +0 -38
  151. package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +0 -62
  152. package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +0 -158
  153. package/pipeline/skills/figma-android/figma-component-test/SKILL.md +0 -120
  154. package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +0 -35
  155. package/pipeline/skills/figma-android/figma-to-component/SKILL.md +0 -124
  156. package/pipeline/skills/figma-common/README.md +0 -64
  157. package/pipeline/skills/figma-common/figma-bottom-sheets/SKILL.md +0 -152
  158. package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +0 -282
  159. package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +0 -503
  160. package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +0 -288
  161. package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +0 -362
  162. package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +0 -206
  163. package/pipeline/skills/figma-common/figma-commit/REVIEW.md +0 -337
  164. package/pipeline/skills/figma-common/figma-commit/SKILL.md +0 -216
  165. package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +0 -223
  166. package/pipeline/skills/figma-common/figma-component-start/SKILL.md +0 -251
  167. package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +0 -78
  168. package/pipeline/skills/figma-common/figma-evolve-component/SKILL.md +0 -61
  169. package/pipeline/skills/figma-common/figma-fix/SKILL.md +0 -321
  170. package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +0 -542
  171. package/pipeline/skills/figma-common/figma-issue/SKILL.md +0 -750
  172. package/pipeline/skills/figma-common/figma-iterate/SKILL.md +0 -208
  173. package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +0 -1020
  174. package/pipeline/skills/figma-common/figma-mend/SKILL.md +0 -331
  175. package/pipeline/skills/figma-common/figma-navigation/SKILL.md +0 -156
  176. package/pipeline/skills/figma-common/figma-overlays/SKILL.md +0 -142
  177. package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +0 -398
  178. package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +0 -104
  179. package/pipeline/skills/figma-common/figma-review/SKILL.md +0 -400
  180. package/pipeline/skills/figma-common/figma-setup/SKILL.md +0 -514
  181. package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +0 -592
  182. package/pipeline/skills/figma-common/figma-skip/SKILL.md +0 -129
  183. package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +0 -105
  184. package/pipeline/skills/figma-common/figma-ui-patterns/patterns/animated-gradient-border.md +0 -116
  185. package/pipeline/skills/figma-common/figma-utility/SKILL.md +0 -274
  186. package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +0 -808
  187. package/pipeline/skills/figma-common/figma-validate/SKILL.md +0 -633
  188. package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +0 -716
  189. package/pipeline/skills/figma-common/performance-review-next/SKILL.md +0 -238
  190. package/pipeline/skills/figma-common/performance-start/SKILL.md +0 -430
  191. package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +0 -706
  192. package/pipeline/skills/figma-common/performance-tour/SKILL.md +0 -423
  193. package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +0 -67
  194. package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +0 -178
  195. package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +0 -184
  196. package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +0 -219
  197. package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +0 -274
  198. package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +0 -416
  199. package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +0 -57
  200. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +0 -307
  201. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +0 -119
  202. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +0 -174
  203. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +0 -333
  204. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +0 -368
  205. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +0 -393
  206. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +0 -617
  207. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +0 -352
  208. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +0 -337
  209. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +0 -206
  210. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +0 -235
  211. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +0 -214
  212. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +0 -902
  213. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +0 -156
  214. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +0 -175
  215. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +0 -176
  216. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +0 -333
  217. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +0 -412
  218. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +0 -336
  219. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +0 -705
  220. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +0 -332
  221. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +0 -380
  222. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +0 -262
  223. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +0 -482
  224. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +0 -274
  225. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +0 -636
  226. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +0 -142
  227. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +0 -547
  228. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +0 -39
  229. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +0 -659
  230. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +0 -580
  231. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +0 -51
  232. package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +0 -183
  233. package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +0 -64
  234. package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +0 -531
  235. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +0 -89
  236. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +0 -155
  237. package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +0 -196
  238. package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +0 -57
  239. package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +0 -89
  240. package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +0 -227
  241. package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +0 -157
  242. package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +0 -90
  243. package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +0 -116
  244. package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +0 -153
  245. package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +0 -130
  246. package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +0 -218
  247. package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +0 -188
  248. package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +0 -93
  249. package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +0 -98
  250. package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +0 -261
  251. package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +0 -147
  252. package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +0 -182
  253. package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +0 -185
  254. package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +0 -609
  255. package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +0 -332
  256. package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +0 -261
  257. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +0 -184
  258. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +0 -188
  259. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +0 -768
  260. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +0 -191
  261. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +0 -420
  262. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.example.json +0 -9
  263. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +0 -336
  264. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +0 -391
  265. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +0 -292
  266. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +0 -1
  267. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +0 -93
  268. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +0 -299
  269. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +0 -343
  270. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +0 -206
  271. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +0 -149
  272. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +0 -281
  273. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +0 -332
  274. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +0 -176
  275. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +0 -98
  276. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +0 -298
  277. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +0 -195
  278. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +0 -1298
  279. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +0 -228
  280. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +0 -1089
  281. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +0 -141
  282. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +0 -106
  283. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +0 -162
  284. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +0 -105
  285. package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +0 -179
  286. package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +0 -260
  287. package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +0 -260
  288. package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +0 -86
  289. package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +0 -321
  290. package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +0 -1470
  291. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +0 -176
  292. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +0 -147
  293. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +0 -629
  294. /package/pipeline/commands/multi-agent/{delete.md → delete/SKILL.md} +0 -0
  295. /package/pipeline/commands/multi-agent/{diff-explain.md → diff-explain/SKILL.md} +0 -0
  296. /package/pipeline/commands/multi-agent/{garbage-collect.md → garbage-collect/SKILL.md} +0 -0
  297. /package/pipeline/commands/multi-agent/{issue.md → issue/SKILL.md} +0 -0
  298. /package/pipeline/commands/multi-agent/{jira.md → jira/SKILL.md} +0 -0
  299. /package/pipeline/commands/multi-agent/{kill.md → kill/SKILL.md} +0 -0
  300. /package/pipeline/commands/multi-agent/{language.md → language/SKILL.md} +0 -0
  301. /package/pipeline/commands/multi-agent/{log.md → log/SKILL.md} +0 -0
  302. /package/pipeline/commands/multi-agent/{prune-logs.md → prune-logs/SKILL.md} +0 -0
  303. /package/pipeline/commands/multi-agent/{purge.md → purge/SKILL.md} +0 -0
  304. /package/pipeline/commands/multi-agent/{scan.md → scan/SKILL.md} +0 -0
  305. /package/pipeline/commands/multi-agent/{search.md → search/SKILL.md} +0 -0
  306. /package/pipeline/commands/multi-agent/{stack.md → stack/SKILL.md} +0 -0
  307. /package/pipeline/commands/multi-agent/{status.md → status/SKILL.md} +0 -0
  308. /package/pipeline/commands/multi-agent/{test.md → test/SKILL.md} +0 -0
  309. /package/pipeline/commands/multi-agent/{update.md → update/SKILL.md} +0 -0
  310. /package/pipeline/{commands/multi-agent → multi-agent-refs}/_input-parser.md +0 -0
  311. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/analysis-template.md +0 -0
  312. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/audit-guide.md +0 -0
  313. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/backend-guide.md +0 -0
  314. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/confluence.md +0 -0
  315. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/issue-comment.md +0 -0
  316. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr-review-actions.md +0 -0
  317. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr.md +0 -0
  318. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/conventions-defaults.md +0 -0
  319. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/autopilot-circuit-breaker.md +0 -0
  320. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/dev-critic.md +0 -0
  321. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/external-context-injection.md +0 -0
  322. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/model-fallback.md +0 -0
  323. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/plan-todos.md +0 -0
  324. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/prior-fix-detection.md +0 -0
  325. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/repo-map.md +0 -0
  326. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/shadow-git.md +0 -0
  327. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/frontend-guide.md +0 -0
  328. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/knowledge.md +0 -0
  329. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/multi-repo-integration-build.md +0 -0
  330. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/picker-contract.md +0 -0
  331. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/rules.md +0 -0
@@ -1,206 +0,0 @@
1
- # Common Submodule - Rebase, Resolve, Validate & Push
2
-
3
- Handles `{project.slug}-common` branch creation, conflict resolution, regeneration, validation, and PR flow.
4
-
5
- Called from `/figma-commit` SKILL.md after code review passes.
6
-
7
- ---
8
-
9
- ## Inputs (from parent skill)
10
-
11
- | Variable | Source |
12
- |----------|--------|
13
- | `REPO_ROOT` | git repo root |
14
- | `COMMON_PATH` | `${REPO_ROOT}/{repos.common.path}` |
15
- | `BRANCH_NAME` | `feature/${JIRA_ISSUE}-${COMPONENT_KEBAB}-implementation` |
16
- | `JIRA_ISSUE` | Jira ticket |
17
- | `COMPONENT_PASCAL` | Component name |
18
-
19
- ---
20
-
21
- ## STEP 1 - Stash
22
-
23
- ```bash
24
- cd "${COMMON_PATH}"
25
- git stash push -u -m "figma-commit: ${COMPONENT_PASCAL} pre-branch stash"
26
- ```
27
-
28
- Skip if `git status --porcelain` is empty.
29
-
30
- ## STEP 2 - Fetch & Branch from develop
31
-
32
- ```bash
33
- cd "${COMMON_PATH}"
34
- git fetch origin develop
35
- git checkout develop
36
- git pull origin develop
37
- git checkout -b "${BRANCH_NAME}"
38
- ```
39
-
40
- If branch already exists → append `-v2`, `-v3`, etc.
41
-
42
- ## STEP 3 - Pop Stash
43
-
44
- ```bash
45
- cd "${COMMON_PATH}"
46
- git stash pop
47
- ```
48
-
49
- If pop succeeds cleanly → skip to STEP 5.
50
- If pop fails with conflicts → proceed to STEP 4.
51
-
52
- ## STEP 4 - Conflict Resolution
53
-
54
- ### 4A - Classify conflicted files
55
-
56
- | File Pattern | Strategy |
57
- |-------------|----------|
58
- | `iOS/Sources/*/Generated/*` | Accept either side (will regenerate) |
59
- | `Shared/Figma/Generated/*` | Accept either side (gitignored, will regenerate) |
60
- | `iOS/Sources/LocalizationAssets/Resources/*.xcstrings` | Accept either side (will regenerate) |
61
- | `iOS/Sources/AccessibilityAssets/Resources/*.xcstrings` | Accept either side (will regenerate) |
62
- | `Shared/Localization/*/Metadata/*` | Accept either side (gitignored, will regenerate) |
63
- | `Shared/UITestingIdentifiers/Metadata/*` | Accept either side (gitignored, will regenerate) |
64
- | `Sources/Suggested/*.json` | Our version wins (per-key files, we created them) |
65
- | Source JSONs (see below) | **Union merge** |
66
- | `Shared/Figma/Components/*.json` | Our version wins (we created/modified it) |
67
-
68
- ### 4B - Union merge for source JSONs
69
-
70
- For each conflicted source JSON:
71
-
72
- ```
73
- a. Accept OURS (develop) version: git checkout --ours <file> && git add <file>
74
- b. Manually insert only the NEW keys from the branch (use Edit tool, match existing format exactly)
75
- c. NEVER use Python json.dump or any JSON serializer - it reformats the entire file
76
- d. After manual edits, normalize with the Swift tool:
77
- .build/debug/UITestingIdentifierTool format
78
- e. Verify: key count >= develop's count - no key lost
79
- ```
80
-
81
- **Source files requiring union merge:**
82
-
83
- | File | Resolution | Format Tool |
84
- |------|-----------|-------------|
85
- | `Shared/UITestingIdentifiers/ui-testing-identifiers.json` | Accept ours + insert new keys | `UITestingIdentifierTool format` |
86
- | `Shared/UIAssets/Colors/*.json` | Accept ours + insert new entries | (manual - match existing format) |
87
-
88
- **Files that NO LONGER need union merge** (per-key files or gitignored):
89
- - `*-data-suggested.json` → replaced by `Sources/Suggested/*.json` (per-key files, never conflict)
90
- - `*-data-merged.json` → gitignored (derived artifact, regenerated in section5)
91
- - `*-metadata.json` → gitignored (derived artifact, regenerated in section5)
92
- - `Metadata/identifier-keys.json` → gitignored (derived artifact, regenerated in section5)
93
-
94
- ### 4C - Text file union merge
95
-
96
- **No longer needed.** `localization-keys.txt` and `accessibility-keys.txt` are gitignored (regenerated in section5).
97
-
98
- ### 4D - Verify no conflict markers remain
99
-
100
- ```bash
101
- grep -r "<<<<<<" . --include="*.json" --include="*.swift" --include="*.txt" | head -5
102
- ```
103
-
104
- ## STEP 5 - Rebuild Derived Artifacts
105
-
106
- All derived artifacts (merged data, metadata, keys.txt, registries, catalogs) are gitignored. Always rebuild them after conflict resolution to guarantee fresh data.
107
-
108
- ```bash
109
- bash "${REPO_ROOT}/.instructions/common/scripts/common-rebuild-derived-artifacts.sh"
110
- ```
111
-
112
- This script rebuilds everything: merge translations from per-key `Sources/Suggested/` files, regenerate metadata, keys indexes, UI assets, token registries, and Figma catalogs.
113
-
114
- If the script fails → source JSON likely has invalid syntax from merge. Fix and retry.
115
-
116
- ## STEP 6 - Validate Integrity
117
-
118
- Always fetch develop first so the non-destruction check compares against the latest:
119
-
120
- ```bash
121
- cd "${COMMON_PATH}"
122
- git fetch origin develop
123
-
124
- python3 "${REPO_ROOT}/.instructions/figma/figma-commit/validate-localization-sync.py" \
125
- --common-path "${COMMON_PATH}"
126
- ```
127
-
128
- **Must exit 0.** Validates:
129
- 1. Suggested covers merged - every merged key has a corresponding per-key file in `Sources/Suggested/`
130
- 2. All 8 languages present per key - no missing translations
131
- 3. No empty suggested values
132
- 4. keys.txt and metadata in sync with merged
133
- 5. Key count non-decreasing vs develop
134
- 6. Non-destruction - no key removed vs develop
135
- 7. Testing identifiers JSON ↔ keys JSON match
136
-
137
- If validation fails → fix before committing. Common fixes:
138
- - **Keys in merged not in suggested**: Add missing per-key file via `TranslationManagerTool add`
139
- - **Key count decreased**: Key lost during merge - find and restore the per-key file
140
- - **Empty values**: Translation added without content - provide it
141
- - **Non-destruction violation**: Intentional rename → re-add old key as alias
142
-
143
- ## STEP 7 - Commit
144
-
145
- ```bash
146
- cd "${COMMON_PATH}"
147
- git add -A
148
- git commit -m "$(cat <<'EOF'
149
- feat(common): [${JIRA_ISSUE}] add ${COMPONENT_PASCAL} tokens and keys
150
-
151
- - Add testing identifiers, localization, and accessibility keys
152
- - Add design tokens and component registry entry
153
- - Regenerate all platform code and catalogs
154
-
155
- Refs: ${JIRA_ISSUE}
156
- EOF
157
- )"
158
- ```
159
-
160
- ## STEP 8 - Push
161
-
162
- ```bash
163
- cd "${COMMON_PATH}"
164
- git push -u origin "${BRANCH_NAME}"
165
- ```
166
-
167
- ## STEP 9 - Create PR (do NOT merge)
168
-
169
- ```bash
170
- cd "${COMMON_PATH}"
171
- gh pr create --base develop \
172
- --title "feat(common): [${JIRA_ISSUE}] add ${COMPONENT_PASCAL} tokens" \
173
- --body "$(cat <<'EOF'
174
- ## Summary
175
- - Add testing identifiers, localization, and accessibility keys
176
- - Add design tokens and component registry entry
177
- - Regenerate all platform code and catalogs
178
-
179
- ## Visual Reference
180
- - **Figma:** ${FIGMA_URL}
181
- - **Confluence iOS:** ${CONFLUENCE_IOS_URL}
182
-
183
- ## Validation
184
- - [ ] validate-localization-sync.py passes
185
- - [ ] No key count decrease vs develop
186
- - [ ] All 8 languages present
187
-
188
- Refs: ${JIRA_ISSUE}
189
- EOF
190
- )"
191
- ```
192
-
193
- **Do NOT merge** - PR is created for review. Merging is a separate manual action.
194
-
195
- ---
196
-
197
- ## Error Handling
198
-
199
- - **Stash conflict on pop**: Follow section4 conflict resolution
200
- - **Branch already exists**: Append `-v2`, `-v3`
201
- - **Push rejected**: Report error, do NOT force-push
202
- - **Not on develop**: Warn user, ask confirmation
203
- - **Rebuild script fails**: Source JSON likely invalid from merge - fix and retry
204
- - **Validation fails**: Fix before committing - NEVER skip validation
205
- - **Key count decreased**: STOP - per-key file was lost, check `Sources/Suggested/` for missing files
206
- - **Same-key conflict in union merge**: Ask user which version to keep - do NOT silently overwrite (only applies to UIAssets Colors and UITestingIdentifiers now)
@@ -1,337 +0,0 @@
1
- # Figma Component Code Review
2
-
3
- Pre-commit review checklist for components implemented via the `/figma` workflow.
4
- Run this review after all phases complete, before committing.
5
-
6
- **Input:** Component name and source location from `IMPLEMENTATION_HISTORY.md`.
7
-
8
- ---
9
-
10
- ## How To Use
11
-
12
- ```
13
- Review the {ComponentName} component at {componentLocation} using the checklist in .instructions/figma/figma-commit/REVIEW.md
14
- ```
15
-
16
- ---
17
-
18
- ## 1. File Completeness
19
-
20
- Verify all expected files exist at `{componentLocation}/`:
21
-
22
- | File | Required | Condition |
23
- |------|----------|-----------|
24
- | `{ComponentName}.swift` | Always | Main View |
25
- | `{ComponentName}Configuration.swift` | COMPLEX only | Configuration struct |
26
- | `{ComponentName}+Modifiers.swift` | COMPLEX only | View-level chain modifiers |
27
- | `{ComponentName}.figma.swift` | Always | Code Connect |
28
- | `FIGMA.md` | Always | Component documentation |
29
-
30
- Verify test files exist:
31
-
32
- | File | Required | Location |
33
- |------|----------|----------|
34
- | `{ComponentName}ViewInspectorTests.swift` | Always | `Tests/UIComponentsTests/ViewInspector/Components/.../` |
35
- | `{ComponentName}SnapshotTests.swift` | Always | `Tests/UIComponentsTests/Snapshot/Components/.../` |
36
- | Snapshot reference images | Never committed | `__Snapshots__/` is gitignored - generated on-demand via `record: .missing` |
37
-
38
- **FAIL if:** ViewInspector or Snapshot test file is missing. **FAIL if:** `__Snapshots__/` directory is tracked by git (should be gitignored).
39
-
40
- ---
41
-
42
- ## 2. No Magic Numbers
43
-
44
- Scan ALL production Swift files (NOT test files) for hardcoded values.
45
-
46
- ### 2.1 Dimensions - Must Use Tokens or Named Constants
47
-
48
- Every numeric `CGFloat` in production code must come from a design token OR a named constant in a `private enum Constants`. Component-specific sizes that don't map to an existing design token (e.g., icon sizes from Figma specs) are valid in `Constants`:
49
-
50
- | Bad (magic number) | Good (token) |
51
- |--------------------|--------------|
52
- | `frame(height: 56)` | `frame(minHeight: .Size.size56)` |
53
- | `padding(20)` | `padding(.horizontal, .Spacing.spacing20)` |
54
- | `cornerRadius(8)` | `cornerRadius: .Radius.radius8` |
55
- | `lineWidth: 1` | `lineWidth: .BorderWidth.borderWidth1` |
56
- | `spacing: 4` | `spacing: .Spacing.spacing4` |
57
- | `width: 24, height: 24` | `width: .Size.size24, height: .Size.size24` |
58
-
59
- **How to check:**
60
- ```
61
- Grep for raw numeric CGFloat values in {ComponentName}.swift and {ComponentName}+Modifiers.swift:
62
- - Pattern: \b\d+\.?\d*\b in frame/padding/spacing/cornerRadius/lineWidth/width/height contexts
63
- - Exclude: 0, 1 (only if used as multiplier/boolean, NOT as dimension)
64
- - Exclude: .infinity (SwiftUI constant)
65
- - Exclude: Values referenced via Constants.propertyName (named constants are NOT magic numbers)
66
- ```
67
-
68
- **FAIL if:** Any raw inline dimension value found (e.g., `frame(height: 56)`). Named constants in `Constants` enum are PASS.
69
-
70
- ### 2.2 Colors - Must Use Semantic Tokens
71
-
72
- Prefer design tokens. No `Color(red:green:blue:)`, no `UIColor` literals, no SwiftUI named colors (`.red`, `.white`).
73
-
74
- | Bad | Good |
75
- |-----|------|
76
- | `Color(red: 0.9, green: 0, blue: 0)` | `Color.Primary.primary` |
77
- | `Color.red` | `Color.Primary.primary` |
78
- | `Color.white` | `Color.Text.textWhite` or `Color.Button.buttonPrimaryWhite` |
79
- | `Color.clear` | `Color.clear` is ALLOWED (SwiftUI built-in, not a design token gap) |
80
-
81
- When a color has no matching design token and must be hardcoded in `Constants`, use the `Color(hex:)` initializer from UIExtensions (NOT `Color(red:green:blue:)`):
82
-
83
- | Bad (raw RGB) | Good (hex constant) |
84
- |---------------|---------------------|
85
- | `Color(red: 0.9, green: 0, blue: 0)` | `Color(hex: "#E50914")` |
86
- | `Color(.sRGB, red: 0.15, green: 0.68, blue: 0.38)` | `Color(hex: "#25AD61")` |
87
-
88
- **FAIL if:** `Color(red:green:blue:)`, `Color(.sRGB, ...)`, or SwiftUI named colors (`.red`, `.blue`, `.white`, etc.) found in production code.
89
-
90
- ### 2.3 Typography - Must Use TypographyStyle
91
-
92
- No raw `.font()` calls. All text styling via `.typographyStyle()`.
93
-
94
- | Bad | Good |
95
- |-----|------|
96
- | `.font(.system(size: 18, weight: .bold))` | `.typographyStyle(.h6)` |
97
- | `.font(.headline)` | `.typographyStyle(.bodyBold)` |
98
-
99
- **FAIL if:** Any `.font()` call found in production code.
100
-
101
- ### 2.4 Allowed Exceptions
102
-
103
- These raw values are acceptable and should NOT be flagged:
104
-
105
- - `0` as zero padding/offset
106
- - `.infinity` in `frame(maxWidth: .infinity)`
107
- - Named constants in `private enum Constants` - these are NOT magic numbers
108
- - Numeric values in test files (snapshot frame sizes, assertion values)
109
- - Numeric values in `#Preview` section labels (e.g., section divider count)
110
- - Opacity values (`0.0` to `1.0`) - no token system for opacity
111
- - `lineLimit(1)` - SwiftUI view modifier, not a dimension
112
-
113
- ---
114
-
115
- ## 3. Configuration Purity (COMPLEX only)
116
-
117
- Read `{ComponentName}Configuration.swift` and verify:
118
-
119
- | Rule | Check |
120
- |------|-------|
121
- | No closures | No `() -> Void`, `(T) -> Void`, `@escaping` in Configuration properties |
122
- | No bindings | No `Binding<T>`, `@Binding` in Configuration properties |
123
- | No state | No `@State`, `@ObservedObject`, `@StateObject`, `@EnvironmentObject` |
124
- | No view builders | No `AnyView`, `@ViewBuilder`, `some View` as properties |
125
- | Value types only | All properties should be `let` with value/enum/optional types |
126
- | `@GenerateChainModifiers` | Macro is applied to the struct |
127
- | `Sendable` conformance | Struct conforms to `Sendable` |
128
-
129
- **FAIL if:** Any non-value-type property found in Configuration.
130
-
131
- ---
132
-
133
- ## 4. +Modifiers Correctness (COMPLEX only)
134
-
135
- Read `{ComponentName}+Modifiers.swift` and verify:
136
-
137
- | Rule | Check |
138
- |------|-------|
139
- | One method per Configuration property | Count matches (excluding `@IgnoreChainModifier` properties) |
140
- | Localized overloads for String props | `func title(localized value: LocalizationStringKey)` exists for each String property |
141
- | Delegates to `configured { }` | Every method body is `configured { $0.propertyName(value) }` |
142
- | Return type is concrete | Returns `{ComponentName}`, not `Self` or `some View` |
143
- | Correct nested type paths | Enum parameters use `{ComponentName}Configuration.EnumType` |
144
- | `import CoreLocalization` | Present if any localized overload exists |
145
-
146
- **FAIL if:** Method count mismatch or incorrect delegation pattern.
147
-
148
- ---
149
-
150
- ## 5. Accessibility
151
-
152
- Read `{ComponentName}.swift` and verify:
153
-
154
- | Rule | Check |
155
- |------|-------|
156
- | Interactive elements have identifiers | `.accessibilityIdentifier(.{ComponentName}.elementName)` on buttons, taps |
157
- | Uses type-safe keys | `.accessibilityIdentifier(.ComponentName.key)` NOT `.accessibilityIdentifier("raw_string")` |
158
- | Container combining | `.accessibilityElement(children: .combine)` on composite interactive elements |
159
- | Icons are decorative | `.accessibilityHidden(true)` on decorative icons within labeled buttons |
160
- | No redundant labels | Don't add `.accessibilityLabel` if SwiftUI `Button` + `Text` already provides it |
161
-
162
- **FAIL if:** Interactive elements lack identifiers, or raw strings used instead of type-safe keys.
163
-
164
- ---
165
-
166
- ## 6. Analytics
167
-
168
- Read `{ComponentName}.swift` and verify:
169
-
170
- | Rule | Check |
171
- |------|-------|
172
- | Tappable elements tracked | `.analyticsButton(id:label:type:)` on buttons |
173
- | ID uses testing identifier | `id: UITestingIdentifierKey.{ComponentName}.element.identifier` |
174
- | Type mapping correct | Style/variant maps to correct `ButtonType` (primary/secondary/ghost/tertiary) |
175
- | No duplicate tracking | One analytics modifier per user action, not per sub-view |
176
-
177
- **WARN if:** Missing analytics on tappable elements. Not always a hard fail (some components are purely presentational).
178
-
179
- ---
180
-
181
- ## 7. Testing Identifiers
182
-
183
- Verify the identifier pipeline is complete:
184
-
185
- | Step | Check |
186
- |------|-------|
187
- | Registered | `UITestingIdentifierTool check --key '{ComponentName}.element'` returns `✅ Key exists` for all identifiers |
188
- | Generated keys | `UITestingIdentifierKeys.swift` has `enum {ComponentName}` with static keys |
189
- | View usage | `{ComponentName}.swift` uses `.accessibilityIdentifier(.{ComponentName}.key)` |
190
- | Test assertions | ViewInspector tests assert identifier presence |
191
-
192
- **FAIL if:** Any step in the pipeline is missing or inconsistent.
193
-
194
- ---
195
-
196
- ## 8. Preview Quality
197
-
198
- Read the Preview section at the bottom of `{ComponentName}.swift`:
199
-
200
- | Rule | Check |
201
- |------|-------|
202
- | LTR preview exists | `{ComponentName}Preview: View` struct + `#Preview` |
203
- | RTL preview exists | `{ComponentName}RTLPreview: View` struct + `#Preview("RTL")` |
204
- | +Modifiers style | Uses `{ComponentName} { }.prop(val)` NOT `{ config in config.prop(val) }` |
205
- | All variants shown | Every enum `allCases` iterated via `ForEach` |
206
- | RTL has Arabic text | Localized text props use Arabic placeholders |
207
- | RTL environment set | `.environment(\.layoutDirection, .rightToLeft)` + `.environment(\.locale, Locale(identifier: "ar"))` |
208
- | Preview structs are plain | No macros on preview structs (workaround for `#Preview` + macro conflict) |
209
- | Disabled state shown | If component supports disabled, shown with `.disabled(true)` |
210
-
211
- **FAIL if:** Missing LTR or RTL preview, or using old configure-closure style.
212
-
213
- ---
214
-
215
- ## 9. Code Connect
216
-
217
- Read `{ComponentName}.figma.swift`:
218
-
219
- | Rule | Check |
220
- |------|-------|
221
- | `import Figma` | Present |
222
- | Correct `figmaNodeUrl` | Contains correct fileKey and nodeId |
223
- | +Modifiers style | Body uses `.prop(val)` chain, NOT `{ config in ... }` |
224
- | All variant groups covered | Separate `FigmaConnect` struct per variant group |
225
- | `@FigmaEnum` uses shorthand | `.enumCase` NOT `Type.enumCase` |
226
- | `#Preview` at bottom | At least one preview for compile validation |
227
-
228
- **FAIL if:** Wrong node URL, missing variant coverage, or old closure style.
229
-
230
- ---
231
-
232
- ## 10. View Implementation Quality
233
-
234
- Read `{ComponentName}.swift` (the View, excluding Preview section):
235
-
236
- | Rule | Check |
237
- |------|-------|
238
- | `@GenerateConfiguredInit` | Applied to the View struct |
239
- | `public struct` | View is public |
240
- | `public let configuration` | Configuration property is public let |
241
- | `@Environment(\.isEnabled)` | Used for disabled state (NOT a config boolean) |
242
- | No force unwraps | No `!` on optionals in production code |
243
- | No `print`/`debugPrint` | No debug logging in production code |
244
- | Correct MARK sections | `// MARK: - Properties`, `// MARK: - Body`, `// MARK: - Subviews`, `// MARK: - Computed Properties` |
245
- | `@ViewBuilder` on conditional views | Optional subviews use `@ViewBuilder` |
246
- | No unused imports | Every `import` is actually used |
247
-
248
- **FAIL if:** Missing macro annotation, force unwraps, or debug logging.
249
-
250
- ---
251
-
252
- ## 11. FIGMA.md Documentation
253
-
254
- Read `{componentLocation}/FIGMA.md`:
255
-
256
- | Rule | Check |
257
- |------|-------|
258
- | Figma link present | Contains `https://www.figma.com/design/{fileKey}/?node-id={nodeId}` |
259
- | Variant mapping table | Maps Figma property values to Swift enum cases |
260
- | Usage example | Shows basic instantiation |
261
- | Code Connect section | Lists strategy and property mappings |
262
-
263
- **FAIL if:** Missing Figma link or variant mapping table.
264
-
265
- ---
266
-
267
- ## 12. Build Verification
268
-
269
- ```bash
270
- xcodebuild build -project {build.xcodeproj} -scheme {build.scheme} \
271
- -destination 'generic/platform=iOS' CODE_SIGNING_ALLOWED=NO -quiet
272
- ```
273
-
274
- **FAIL if:** Build errors. Warnings on component files should be investigated.
275
-
276
- ---
277
-
278
- ## 13. Test Verification
279
-
280
- ```bash
281
- REPO_ROOT=$(git rev-parse --show-toplevel)
282
- bash "${REPO_ROOT}/.instructions/figma/figma-to-swiftui/scripts/run-uicomponents-tests.sh" --filter "{ComponentName}ViewInspectorTests"
283
- bash "${REPO_ROOT}/.instructions/figma/figma-to-swiftui/scripts/run-uicomponents-tests.sh" --filter "{ComponentName}SnapshotTests"
284
- ```
285
-
286
- **FAIL if:** Any test fails or test count is zero.
287
-
288
- ---
289
-
290
- ## Review Output Format
291
-
292
- ```
293
- ## Code Review: {ComponentName}
294
-
295
- ### Status: PASS / FAIL / WARN
296
-
297
- ### Checklist
298
-
299
- | # | Check | Status | Notes |
300
- |---|-------|--------|-------|
301
- | 1 | File completeness | PASS/FAIL | {missing files if any} |
302
- | 2 | No magic numbers | PASS/FAIL | {violations if any} |
303
- | 3 | Configuration purity | PASS/FAIL/N/A | {violations if any} |
304
- | 4 | +Modifiers correctness | PASS/FAIL/N/A | {violations if any} |
305
- | 5 | Accessibility | PASS/FAIL | {missing identifiers if any} |
306
- | 6 | Analytics | PASS/WARN | {missing tracking if any} |
307
- | 7 | Testing identifiers | PASS/FAIL | {pipeline gaps if any} |
308
- | 8 | Preview quality | PASS/FAIL | {issues if any} |
309
- | 9 | Code Connect | PASS/FAIL | {issues if any} |
310
- | 10 | View implementation | PASS/FAIL | {issues if any} |
311
- | 11 | FIGMA.md docs | PASS/FAIL | {issues if any} |
312
- | 12 | Build | PASS/FAIL | {errors if any} |
313
- | 13 | Tests | PASS/FAIL | {failures if any} |
314
-
315
- ### Violations (if any)
316
-
317
- {Detailed list of each violation with file:line, what's wrong, and suggested fix}
318
-
319
- ### Summary
320
-
321
- {One paragraph: overall assessment, blocking issues, suggestions}
322
- ```
323
-
324
- ---
325
-
326
- ## Severity Levels
327
-
328
- | Level | Meaning | Action |
329
- |-------|---------|--------|
330
- | **FAIL** | Blocking - must fix before commit | Fix all FAIL items |
331
- | **WARN** | Non-blocking - should fix but can commit | Document in PR description |
332
- | **PASS** | Compliant | No action needed |
333
- | **N/A** | Not applicable | SIMPLE components skip Configuration/+Modifiers checks |
334
-
335
- **Overall status:**
336
- - Any FAIL → overall FAIL (do not commit)
337
- - All PASS/WARN/N/A → overall PASS (safe to commit)