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