@mmerterden/multi-agent-pipeline 11.2.0 → 11.3.1

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 (335) hide show
  1. package/CHANGELOG.md +68 -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 +39 -17
  8. package/install/copilot.mjs +22 -16
  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/lib/credential-store.sh +8 -4
  33. package/pipeline/{commands/multi-agent → multi-agent-refs}/_account-picker.md +2 -2
  34. package/pipeline/{commands/multi-agent → multi-agent-refs}/_dev-context.md +2 -2
  35. package/pipeline/{commands/multi-agent → multi-agent-refs}/_repo-picker.md +2 -2
  36. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/android-guide.md +1 -1
  37. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/jira.md +1 -1
  38. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/wiki.md +7 -7
  39. package/pipeline/multi-agent-refs/component-dispatch.md +92 -0
  40. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/cross-cli-contract.md +10 -77
  41. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/verify-by-test.md +1 -1
  42. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/generate-issue.md +2 -2
  43. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/issue-jira-triad.md +1 -1
  44. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/keychain.md +1 -1
  45. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/log-format.md +1 -1
  46. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/modes.md +2 -2
  47. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/operations.md +1 -1
  48. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-0-init.md +10 -10
  49. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-1-analysis.md +6 -6
  50. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-2-planning.md +3 -3
  51. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-3-dev.md +10 -10
  52. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-4-review.md +8 -8
  53. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-5-test.md +3 -3
  54. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-6-commit.md +4 -4
  55. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-7-report.md +6 -6
  56. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases.md +12 -12
  57. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/progress-contract.md +4 -4
  58. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/swiftui-guide.md +1 -1
  59. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/tracker-contract.md +3 -3
  60. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/wiki-capture.md +4 -4
  61. package/pipeline/preferences-template.json +17 -1
  62. package/pipeline/rules/figma-pipeline.md +2 -2
  63. package/pipeline/schemas/prefs.schema.json +0 -34
  64. package/pipeline/scripts/README.md +1 -3
  65. package/pipeline/scripts/build-skills-index.mjs +3 -6
  66. package/pipeline/scripts/eval-mine-corpus.mjs +187 -0
  67. package/pipeline/scripts/fixtures/install-layout.tsv +6 -5
  68. package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
  69. package/pipeline/scripts/lint-skills.mjs +26 -1
  70. package/pipeline/scripts/phase-banner.sh +2 -2
  71. package/pipeline/scripts/review-scope.mjs +94 -0
  72. package/pipeline/scripts/scan-agent-config.sh +2 -2
  73. package/pipeline/scripts/smoke-agent-log-cost.sh +1 -1
  74. package/pipeline/scripts/smoke-agent-model-routing.sh +4 -4
  75. package/pipeline/scripts/smoke-autopilot-circuit-breaker.sh +2 -2
  76. package/pipeline/scripts/smoke-channels-approval-gate.sh +2 -2
  77. package/pipeline/scripts/smoke-channels-flow.sh +5 -5
  78. package/pipeline/scripts/smoke-clarify.sh +1 -1
  79. package/pipeline/scripts/smoke-commands-skills-parity.sh +3 -3
  80. package/pipeline/scripts/smoke-community-gates.sh +1 -1
  81. package/pipeline/scripts/smoke-compliance-skills.sh +2 -2
  82. package/pipeline/scripts/smoke-cost-summary.sh +1 -1
  83. package/pipeline/scripts/smoke-cross-cli-behavior.sh +17 -43
  84. package/pipeline/scripts/smoke-cross-phase-cohesion.sh +1 -1
  85. package/pipeline/scripts/smoke-dev-critic.sh +1 -1
  86. package/pipeline/scripts/smoke-diff-explain.sh +1 -1
  87. package/pipeline/scripts/smoke-diff-risk.sh +1 -1
  88. package/pipeline/scripts/smoke-evidence-gate.sh +1 -1
  89. package/pipeline/scripts/smoke-figma-dispatch.sh +46 -57
  90. package/pipeline/scripts/smoke-gate-hooks.sh +1 -1
  91. package/pipeline/scripts/smoke-generate-issue.sh +8 -8
  92. package/pipeline/scripts/smoke-handoff-contract.sh +3 -3
  93. package/pipeline/scripts/smoke-identity-isolation.sh +2 -2
  94. package/pipeline/scripts/smoke-intent-guard.sh +1 -1
  95. package/pipeline/scripts/smoke-issue-comment-template.sh +2 -2
  96. package/pipeline/scripts/smoke-issue-jira-triad.sh +4 -4
  97. package/pipeline/scripts/smoke-language-axis.sh +6 -6
  98. package/pipeline/scripts/smoke-learnings-ledger.sh +3 -3
  99. package/pipeline/scripts/smoke-mode-dispatch-drift.sh +16 -16
  100. package/pipeline/scripts/smoke-model-fallback.sh +3 -3
  101. package/pipeline/scripts/smoke-multi-repo-integration.sh +2 -2
  102. package/pipeline/scripts/smoke-multi-repo-worktree.sh +1 -1
  103. package/pipeline/scripts/smoke-no-token-prompt.sh +5 -5
  104. package/pipeline/scripts/smoke-phase-0-multi-repo.sh +1 -1
  105. package/pipeline/scripts/smoke-phase-6-multi.sh +1 -1
  106. package/pipeline/scripts/smoke-phase4-gates.sh +45 -0
  107. package/pipeline/scripts/smoke-plan-approval-gate.sh +5 -5
  108. package/pipeline/scripts/smoke-plan-todos.sh +3 -3
  109. package/pipeline/scripts/smoke-pr-review-actions.sh +3 -3
  110. package/pipeline/scripts/smoke-prefs-language.sh +1 -1
  111. package/pipeline/scripts/smoke-progress-contract.sh +2 -2
  112. package/pipeline/scripts/smoke-push-retry.sh +1 -1
  113. package/pipeline/scripts/smoke-repo-map.sh +2 -2
  114. package/pipeline/scripts/smoke-shadow-git.sh +1 -1
  115. package/pipeline/scripts/smoke-skill-authoring.sh +4 -9
  116. package/pipeline/scripts/smoke-tasklist-ordering.sh +10 -10
  117. package/pipeline/scripts/smoke-test-gap.sh +1 -1
  118. package/pipeline/scripts/smoke-token-budget.sh +1 -1
  119. package/pipeline/scripts/smoke-token-preflight.sh +2 -2
  120. package/pipeline/scripts/smoke-tracker-contract.sh +13 -13
  121. package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +5 -5
  122. package/pipeline/scripts/smoke-triage-memory.sh +2 -2
  123. package/pipeline/scripts/smoke-update-check.sh +1 -1
  124. package/pipeline/scripts/smoke-url-enrichment.sh +2 -2
  125. package/pipeline/scripts/smoke-validator-gates.sh +1 -1
  126. package/pipeline/scripts/smoke-verify-by-test.sh +3 -3
  127. package/pipeline/scripts/smoke-wiki-integration.sh +9 -33
  128. package/pipeline/scripts/smoke-work-summary.sh +1 -1
  129. package/pipeline/scripts/smoke-worktree-path-convention.sh +4 -4
  130. package/pipeline/scripts/test-integrity-gate.mjs +83 -0
  131. package/pipeline/scripts/uninstall.mjs +17 -6
  132. package/pipeline/skills/.skill-manifest.json +40 -160
  133. package/pipeline/skills/.skills-index.json +3 -373
  134. package/pipeline/skills/shared/README.md +1 -1
  135. package/pipeline/skills/shared/core/multi-agent/SKILL.md +1 -1
  136. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +2 -2
  137. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +3 -3
  138. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
  139. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +1 -1
  140. package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
  141. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +1 -1
  142. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +116 -51
  143. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +8 -30
  144. package/pipeline/skills/shared/external/compose-components/SKILL.md +14 -14
  145. package/pipeline/skills/skills-index.md +3 -44
  146. package/pipeline/commands/multi-agent/refactor.md +0 -188
  147. package/pipeline/commands/multi-agent/refs/component-dispatch.md +0 -92
  148. package/pipeline/scripts/smoke-existing-discovery-gate.sh +0 -71
  149. package/pipeline/scripts/smoke-figma-android-parity.sh +0 -148
  150. package/pipeline/scripts/smoke-figma-credential-store.sh +0 -105
  151. package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +0 -177
  152. package/pipeline/scripts/smoke-figma-sync.sh +0 -149
  153. package/pipeline/scripts/smoke-sync-delegation.sh +0 -74
  154. package/pipeline/skills/figma-android/README.md +0 -38
  155. package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +0 -62
  156. package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +0 -158
  157. package/pipeline/skills/figma-android/figma-component-test/SKILL.md +0 -120
  158. package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +0 -35
  159. package/pipeline/skills/figma-android/figma-to-component/SKILL.md +0 -124
  160. package/pipeline/skills/figma-common/README.md +0 -64
  161. package/pipeline/skills/figma-common/figma-bottom-sheets/SKILL.md +0 -152
  162. package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +0 -282
  163. package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +0 -503
  164. package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +0 -288
  165. package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +0 -362
  166. package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +0 -206
  167. package/pipeline/skills/figma-common/figma-commit/REVIEW.md +0 -337
  168. package/pipeline/skills/figma-common/figma-commit/SKILL.md +0 -216
  169. package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +0 -223
  170. package/pipeline/skills/figma-common/figma-component-start/SKILL.md +0 -251
  171. package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +0 -78
  172. package/pipeline/skills/figma-common/figma-evolve-component/SKILL.md +0 -61
  173. package/pipeline/skills/figma-common/figma-fix/SKILL.md +0 -321
  174. package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +0 -542
  175. package/pipeline/skills/figma-common/figma-issue/SKILL.md +0 -750
  176. package/pipeline/skills/figma-common/figma-iterate/SKILL.md +0 -208
  177. package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +0 -1020
  178. package/pipeline/skills/figma-common/figma-mend/SKILL.md +0 -331
  179. package/pipeline/skills/figma-common/figma-navigation/SKILL.md +0 -156
  180. package/pipeline/skills/figma-common/figma-overlays/SKILL.md +0 -142
  181. package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +0 -398
  182. package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +0 -104
  183. package/pipeline/skills/figma-common/figma-review/SKILL.md +0 -400
  184. package/pipeline/skills/figma-common/figma-setup/SKILL.md +0 -514
  185. package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +0 -592
  186. package/pipeline/skills/figma-common/figma-skip/SKILL.md +0 -129
  187. package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +0 -105
  188. package/pipeline/skills/figma-common/figma-ui-patterns/patterns/animated-gradient-border.md +0 -116
  189. package/pipeline/skills/figma-common/figma-utility/SKILL.md +0 -274
  190. package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +0 -808
  191. package/pipeline/skills/figma-common/figma-validate/SKILL.md +0 -633
  192. package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +0 -716
  193. package/pipeline/skills/figma-common/performance-review-next/SKILL.md +0 -238
  194. package/pipeline/skills/figma-common/performance-start/SKILL.md +0 -430
  195. package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +0 -706
  196. package/pipeline/skills/figma-common/performance-tour/SKILL.md +0 -423
  197. package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +0 -67
  198. package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +0 -178
  199. package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +0 -184
  200. package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +0 -219
  201. package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +0 -274
  202. package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +0 -416
  203. package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +0 -57
  204. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +0 -307
  205. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +0 -119
  206. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +0 -174
  207. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +0 -333
  208. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +0 -368
  209. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +0 -393
  210. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +0 -617
  211. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +0 -352
  212. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +0 -337
  213. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +0 -206
  214. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +0 -235
  215. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +0 -214
  216. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +0 -902
  217. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +0 -156
  218. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +0 -175
  219. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +0 -176
  220. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +0 -333
  221. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +0 -412
  222. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +0 -336
  223. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +0 -705
  224. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +0 -332
  225. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +0 -380
  226. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +0 -262
  227. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +0 -482
  228. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +0 -274
  229. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +0 -636
  230. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +0 -142
  231. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +0 -547
  232. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +0 -39
  233. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +0 -659
  234. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +0 -580
  235. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +0 -51
  236. package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +0 -183
  237. package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +0 -64
  238. package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +0 -531
  239. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +0 -89
  240. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +0 -155
  241. package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +0 -196
  242. package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +0 -57
  243. package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +0 -89
  244. package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +0 -227
  245. package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +0 -157
  246. package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +0 -90
  247. package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +0 -116
  248. package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +0 -153
  249. package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +0 -130
  250. package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +0 -218
  251. package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +0 -188
  252. package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +0 -93
  253. package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +0 -98
  254. package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +0 -261
  255. package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +0 -147
  256. package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +0 -182
  257. package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +0 -185
  258. package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +0 -609
  259. package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +0 -332
  260. package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +0 -261
  261. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +0 -184
  262. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +0 -188
  263. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +0 -768
  264. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +0 -191
  265. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +0 -420
  266. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.example.json +0 -9
  267. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +0 -336
  268. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +0 -391
  269. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +0 -292
  270. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +0 -1
  271. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +0 -93
  272. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +0 -299
  273. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +0 -343
  274. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +0 -206
  275. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +0 -149
  276. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +0 -281
  277. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +0 -332
  278. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +0 -176
  279. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +0 -98
  280. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +0 -298
  281. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +0 -195
  282. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +0 -1298
  283. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +0 -228
  284. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +0 -1089
  285. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +0 -141
  286. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +0 -106
  287. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +0 -162
  288. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +0 -105
  289. package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +0 -179
  290. package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +0 -260
  291. package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +0 -260
  292. package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +0 -86
  293. package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +0 -321
  294. package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +0 -1470
  295. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +0 -176
  296. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +0 -147
  297. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +0 -629
  298. /package/pipeline/commands/multi-agent/{delete.md → delete/SKILL.md} +0 -0
  299. /package/pipeline/commands/multi-agent/{diff-explain.md → diff-explain/SKILL.md} +0 -0
  300. /package/pipeline/commands/multi-agent/{garbage-collect.md → garbage-collect/SKILL.md} +0 -0
  301. /package/pipeline/commands/multi-agent/{issue.md → issue/SKILL.md} +0 -0
  302. /package/pipeline/commands/multi-agent/{jira.md → jira/SKILL.md} +0 -0
  303. /package/pipeline/commands/multi-agent/{kill.md → kill/SKILL.md} +0 -0
  304. /package/pipeline/commands/multi-agent/{language.md → language/SKILL.md} +0 -0
  305. /package/pipeline/commands/multi-agent/{log.md → log/SKILL.md} +0 -0
  306. /package/pipeline/commands/multi-agent/{prune-logs.md → prune-logs/SKILL.md} +0 -0
  307. /package/pipeline/commands/multi-agent/{purge.md → purge/SKILL.md} +0 -0
  308. /package/pipeline/commands/multi-agent/{scan.md → scan/SKILL.md} +0 -0
  309. /package/pipeline/commands/multi-agent/{search.md → search/SKILL.md} +0 -0
  310. /package/pipeline/commands/multi-agent/{stack.md → stack/SKILL.md} +0 -0
  311. /package/pipeline/commands/multi-agent/{status.md → status/SKILL.md} +0 -0
  312. /package/pipeline/commands/multi-agent/{test.md → test/SKILL.md} +0 -0
  313. /package/pipeline/commands/multi-agent/{update.md → update/SKILL.md} +0 -0
  314. /package/pipeline/{commands/multi-agent → multi-agent-refs}/_input-parser.md +0 -0
  315. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/analysis-template.md +0 -0
  316. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/audit-guide.md +0 -0
  317. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/backend-guide.md +0 -0
  318. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/confluence.md +0 -0
  319. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/issue-comment.md +0 -0
  320. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr-review-actions.md +0 -0
  321. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr.md +0 -0
  322. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/conventions-defaults.md +0 -0
  323. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/autopilot-circuit-breaker.md +0 -0
  324. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/dev-critic.md +0 -0
  325. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/external-context-injection.md +0 -0
  326. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/model-fallback.md +0 -0
  327. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/plan-todos.md +0 -0
  328. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/prior-fix-detection.md +0 -0
  329. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/repo-map.md +0 -0
  330. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/shadow-git.md +0 -0
  331. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/frontend-guide.md +0 -0
  332. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/knowledge.md +0 -0
  333. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/multi-repo-integration-build.md +0 -0
  334. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/picker-contract.md +0 -0
  335. /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)