@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,74 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-sync-delegation.sh - WS-9b contract.
3
- #
4
- # Verifies /multi-agent:sync (sync.md) documents the Step 0 delegation
5
- # to sync-figma-source.sh when figmaSource is configured.
6
-
7
- set -euo pipefail
8
-
9
- HERE="$(cd "$(dirname "$0")" && pwd)"
10
- ROOT="$(cd "$HERE/../.." && pwd)"
11
- SYNC_DOC="$ROOT/pipeline/commands/multi-agent/sync.md"
12
- SYNC_SCRIPT="$ROOT/pipeline/scripts/sync-figma-source.sh"
13
-
14
- PASS=0
15
- FAIL=0
16
- pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
17
- fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
18
-
19
- [ -f "$SYNC_DOC" ] || { echo "error: sync.md missing" >&2; exit 1; }
20
- [ -x "$SYNC_SCRIPT" ] || { echo "error: sync-figma-source.sh missing or not executable" >&2; exit 1; }
21
-
22
- echo "→ 1. sync.md lists figma source as Step 0"
23
- if grep -Fq "Step 0: FIGMA_SYNC" "$SYNC_DOC" || grep -Fq "FIGMA_SYNC" "$SYNC_DOC"; then
24
- pass "Step 0 entry present"
25
- else
26
- fail "Step 0 FIGMA_SYNC entry missing"
27
- fi
28
-
29
- echo ""
30
- echo "→ 2. sync.md references sync-figma-source.sh by path"
31
- if grep -Fq "pipeline/scripts/sync-figma-source.sh" "$SYNC_DOC"; then
32
- pass "sync script path referenced"
33
- else
34
- fail "sync script path missing from sync.md"
35
- fi
36
-
37
- echo ""
38
- echo "→ 3. sync.md documents the figmaSource preference gate"
39
- if grep -Fq "figmaSource.path" "$SYNC_DOC" || grep -Fq "figmaSource" "$SYNC_DOC"; then
40
- pass "figmaSource pref gate documented"
41
- else
42
- fail "figmaSource pref gate missing"
43
- fi
44
-
45
- echo ""
46
- echo "→ 4. sync.md notes skip behavior when figmaSource unset"
47
- if grep -qi "skip" "$SYNC_DOC" && grep -Fq "figmaSource" "$SYNC_DOC"; then
48
- pass "skip-when-unset documented"
49
- else
50
- fail "skip behavior not documented"
51
- fi
52
-
53
- echo ""
54
- echo "→ 5. sync.md mentions local-overlay marker (preservation)"
55
- if grep -Fq "local-overlay" "$SYNC_DOC"; then
56
- pass "local-overlay preservation documented"
57
- else
58
- fail "local-overlay preservation missing"
59
- fi
60
-
61
- echo ""
62
- echo "→ 6. sync.md puts FIGMA_SYNC BEFORE Step 1 (DETECT)"
63
- # Regex: FIGMA_SYNC line must appear before DETECT line
64
- FIGMA_LINE=$(grep -n "FIGMA_SYNC" "$SYNC_DOC" | head -1 | cut -d: -f1)
65
- DETECT_LINE=$(grep -nE "Step 1(\.[0-9]+)?: DETECT" "$SYNC_DOC" | head -1 | cut -d: -f1)
66
- if [ -n "$FIGMA_LINE" ] && [ -n "$DETECT_LINE" ] && [ "$FIGMA_LINE" -lt "$DETECT_LINE" ]; then
67
- pass "FIGMA_SYNC precedes DETECT in step order"
68
- else
69
- fail "FIGMA_SYNC must precede DETECT (got FIGMA=$FIGMA_LINE DETECT=$DETECT_LINE)"
70
- fi
71
-
72
- echo ""
73
- echo "══ sync-delegation smoke: $PASS passed, $FAIL failed ══"
74
- [ "$FAIL" -eq 0 ]
@@ -1,38 +0,0 @@
1
- # figma-android - Android Platform Skills
2
-
3
- Platform peer to `pipeline/skills/figma-ios/`.
4
-
5
- ## What lives here
6
-
7
- Platform-specific skills for generating Jetpack Compose components from Figma designs:
8
-
9
- | Skill | Subphase | Sibling in figma-ios |
10
- |---|---|---|
11
- | `figma-to-component` | Orchestrator (3.0 - 3.8) | `figma-ios/figma-to-component` |
12
- | `figma-component-implement` | 3.4 (code gen: Compose) | `figma-ios/figma-component-implement` |
13
- | `figma-component-test` | 3.5 (Compose Testing + Paparazzi) | `figma-ios/figma-component-test` |
14
- | `figma-component-code-connect` | 3.6 (Code Connect for Compose) | `figma-ios/figma-component-code-connect` |
15
- | `figma-component-wiki` | 3.7 (wiki - platform-aware rendering) | `figma-ios/figma-component-wiki` |
16
-
17
- ## What's NOT here (yet)
18
-
19
- The platform-**agnostic** skills - `figma-commit`, `figma-iterate`, `figma-issue`, `figma-review`, `figma-setup`, `figma-validate`, `figma-utility`, `figma-fix`, `figma-mend`, `figma-evolve-component`, `figma-ui-patterns`, `figma-form-integration`, `figma-price-integration`, `figma-navigation`, `figma-overlays`, `figma-bottom-sheets`, `figma-remote-mcp-auth`, `figma-cli-*`, `performance-*`, etc. - live under [`pipeline/skills/figma-common/`](../figma-common/) (WS-7b ✓). Both iOS and Android orchestrators dispatch there without duplication.
20
-
21
- The cross-cutting **integration adapters** (`figma-form-integration`, `figma-price-integration`, `figma-navigation`, `figma-overlays`, `figma-bottom-sheets`) carry both an iOS (SwiftUI) and an Android (Jetpack Compose) section - the Android orchestrator uses the Compose section; the same emit-intent / caller-owns rules and the `figma-config` `ui.*` hooks apply on both platforms.
22
-
23
- ## Routing
24
-
25
- Multi-agent Phase 3 reads `figmaConfig.project.platform`:
26
-
27
- - `"ios"` → dispatches to `figma-ios/figma-to-component`
28
- - `"android"` → dispatches to `figma-android/figma-to-component` (this directory)
29
-
30
- See `pipeline/commands/multi-agent/refs/component-dispatch.md` for the full contract.
31
-
32
- ## Build target
33
-
34
- Android orchestrator expects `figmaConfig.build.gradleModule` to be set (e.g. `:components:button`). Missing → halt with a clear error. See `pipeline/schemas/figma-project-config.schema.json` v2.0.0 for the full `build` shape.
35
-
36
- ## Status
37
-
38
- All five skills stamped `status: wip-v5` - contracts + skeleton in place, not yet validated against a real Android project. Fill in the reference implementation detail as a downstream integration lands (follow-up issues will be opened per skill).
@@ -1,62 +0,0 @@
1
- ---
2
- name: figma-component-code-connect
3
- description: Generate Code Connect for Compose mappings - {Name}.figma.kt registers the composable with Figma's Code Connect so designers see live code snippets for each variant. Android peer to pipeline/skills/figma-ios/figma-component-code-connect.
4
- user-invocable: true
5
- argument-hint: <component-name>
6
- allowed-tools: Read, Write, Edit, Glob, Grep, Bash
7
- status: wip-v5
8
- sourced-from: derived-from/figma-ios/figma-component-code-connect
9
- platform: android
10
- ---
11
-
12
- # figma-component-code-connect - Code Connect for Compose
13
-
14
- > **WS-7 v5.0.0** - Subphase 3.6 for Android. Generates `{Name}.figma.kt` so Figma's Dev Mode shows Compose usage for every variant of the component, classified by the Figma variant properties read in subphase 3.1.
15
-
16
- ## Output
17
-
18
- `{Name}.figma.kt` beside the composable:
19
-
20
- ```kotlin
21
- @FigmaConnect("https://www.figma.com/design/abc/?node-id=123-456")
22
- class ButtonPrimaryFigmaConnect {
23
- @FigmaProperty.Boolean("Enabled") var enabled: Boolean = true
24
- @FigmaProperty.Enum("Style", mapping = [
25
- "Primary" to ButtonStyle.Primary,
26
- "Secondary" to ButtonStyle.Secondary,
27
- "Ghost" to ButtonStyle.Ghost,
28
- ])
29
- var style: ButtonStyle = ButtonStyle.Primary
30
-
31
- @FigmaProperty.Text("Title") var title: String = ""
32
-
33
- @Composable
34
- fun Example() {
35
- ButtonPrimary(
36
- ButtonPrimaryConfiguration()
37
- .title(title)
38
- .style(style)
39
- .enabled(enabled)
40
- )
41
- }
42
- }
43
- ```
44
-
45
- Variant property names come from the Figma node (fetched in 3.1). Mapping tables translate Figma's "Primary"/"Secondary" strings to the Compose `ButtonStyle` enum.
46
-
47
- ## Publish
48
-
49
- ```bash
50
- figma code-connect publish --type kotlin --dir ${module-path}
51
- ```
52
-
53
- Requires `figma-cli` with a valid PAT (resolved via `keychainMapping.figma`). Token missing → Token Save Flow. Publish failure → halt + error.
54
-
55
- ## Failure handling
56
-
57
- - Figma property does not map cleanly to an enum → halt with an actionable message listing the unmapped variants; no partial publish.
58
- - Composable signature changed between 3.4 and 3.6 → auto-fix the `Example()` body from the current Configuration.
59
-
60
- ## Cross-CLI parity
61
-
62
- iOS and Android Code Connect skills emit identical progress lines, publish via the same `figma code-connect publish` CLI, and halt on variant mapping ambiguity the same way. `smoke-figma-android-parity.sh` asserts skill inventory match.
@@ -1,158 +0,0 @@
1
- ---
2
- name: figma-component-implement
3
- description: Generate a Jetpack Compose component (Configuration data class + Composable + Modifier extensions + Preview + README) from gathered Figma data. Android peer to pipeline/skills/figma-ios/figma-component-implement.
4
- user-invocable: true
5
- argument-hint: <figma-url> | <component-name>
6
- allowed-tools: Read, Write, Edit, Glob, Grep, Bash
7
- status: wip-v5
8
- sourced-from: derived-from/figma-ios/figma-component-implement
9
- platform: android
10
- ---
11
-
12
- # figma-component-implement - Compose Code Generation
13
-
14
- > **WS-7 v5.0.0** - Called by the Android `figma-to-component` orchestrator during subphase 3.4. Reads `agent-state.json.phases["3"].subphases["3.1-gather"]` for the fetched Figma tree + token map and writes Kotlin + Compose artefacts.
15
-
16
- ## Inputs
17
-
18
- ```
19
- {
20
- componentName: "ButtonPrimary", // PascalCase from registry
21
- componentPath: "components/Button/ButtonPrimary",
22
- figmaTree: <node object>, // from 3.1-gather
23
- tokenMap: <Figma → token symbol map>, // from 3.3-token-mapping
24
- testingIds: <semantic IDs>, // from 3.2a
25
- localization: <strings map>, // from 3.2b
26
- accessibility: <a11y metadata>, // from 3.2c
27
- analytics: <events>, // from 3.2d
28
- figmaConfig: <figma-project-config v2.0.0>,
29
- agentState: <path>, // for progress emission + subphase record
30
- dev: boolean // --dev elides some steps (see below)
31
- }
32
- ```
33
-
34
- ## Outputs
35
-
36
- Four Kotlin files beside the component's package, plus a README:
37
-
38
- ### 1. `{Name}Configuration.kt`
39
-
40
- Pure data class. Every variable knob lives here - the composable itself holds no state beyond its `Configuration` parameter. Marked `@Immutable` so Compose can skip recomposition when the instance is `equals`:
41
-
42
- ```kotlin
43
- @Immutable
44
- data class ButtonPrimaryConfiguration(
45
- val title: String = "",
46
- val style: ButtonStyle = ButtonStyle.Primary,
47
- val isEnabled: Boolean = true,
48
- val onClick: () -> Unit = {}
49
- ) {
50
- enum class ButtonStyle { Primary, Secondary, Ghost }
51
- }
52
- ```
53
-
54
- Rules:
55
-
56
- - `@Immutable` OR `@Stable` - never raw. `@Immutable` when all properties are primitives / immutable; `@Stable` when you guarantee structural stability.
57
- - Default values for every property so call sites can use `copy()` idiomatically (fluent-API equivalent).
58
- - Callbacks typed as named function types (`val onClick: () -> Unit = {}`) - never `Any?`.
59
- - Enums inside the Configuration's companion or nested scope - mirrors SwiftUI Configuration style.
60
-
61
- ### 2. `{Name}.kt` (the composable)
62
-
63
- ```kotlin
64
- @Composable
65
- fun ButtonPrimary(
66
- configuration: ButtonPrimaryConfiguration,
67
- modifier: Modifier = Modifier,
68
- ) {
69
- val shape = MaterialTheme.customShapes.mediumRadius
70
- Surface(
71
- modifier = modifier.semantics {
72
- testTag = TestingIdentifiers.buttonPrimary
73
- contentDescription = stringResource(R.string.btn_primary_a11y)
74
- },
75
- shape = shape,
76
- color = MaterialTheme.colorScheme.primary,
77
- ) {
78
- // body uses ONLY configuration + MaterialTheme tokens
79
- }
80
- }
81
- ```
82
-
83
- Rules:
84
-
85
- - Signature is always `(configuration: XConfiguration, modifier: Modifier = Modifier)`. The `modifier` param is the caller's slot; nothing else.
86
- - `testTag` from `testingIds`; `contentDescription` from `accessibility.label` or `stringResource(R.string...)`.
87
- - No hardcoded `dp` / `Color(0xFF...)` / `TextStyle(...)` - every value reads from `MaterialTheme.*` or the project's theme extension.
88
- - No `LaunchedEffect` / `rememberCoroutineScope` for stateful behaviour - keep the composable pure. If async is needed, surface it via Configuration callbacks (the caller orchestrates).
89
-
90
- ### 3. `{Name}Modifiers.kt`
91
-
92
- Fluent modifier-style helpers. Android idiom: extension functions on the Configuration type:
93
-
94
- ```kotlin
95
- fun ButtonPrimaryConfiguration.title(value: String) = copy(title = value)
96
- fun ButtonPrimaryConfiguration.style(value: ButtonStyle) = copy(style = value)
97
- fun ButtonPrimaryConfiguration.enabled(value: Boolean = true) = copy(isEnabled = value)
98
- fun ButtonPrimaryConfiguration.onClick(block: () -> Unit) = copy(onClick = block)
99
- ```
100
-
101
- Call sites read fluently:
102
-
103
- ```kotlin
104
- ButtonPrimary(
105
- ButtonPrimaryConfiguration()
106
- .title("Save")
107
- .style(.Secondary)
108
- .onClick { viewModel.save() }
109
- )
110
- ```
111
-
112
- ### 4. `{Name}Preview.kt`
113
-
114
- `@Preview` covering meaningful variants. At minimum:
115
-
116
- ```kotlin
117
- @Preview(name = "default", showBackground = true)
118
- @Preview(name = "dark", showBackground = true, uiMode = UI_MODE_NIGHT_YES)
119
- @Preview(name = "rtl", showBackground = true, locale = "ar")
120
- @Preview(name = "fontScale",showBackground = true, fontScale = 1.5f)
121
- @Composable
122
- private fun ButtonPrimaryPreview() {
123
- AppTheme { ButtonPrimary(ButtonPrimaryConfiguration().title("Save")) }
124
- }
125
- ```
126
-
127
- `--dev` may emit only `default` + `dark` previews; full set lands in non-dev runs.
128
-
129
- ### 5. `README.md`
130
-
131
- Variant matrix + usage example. Format mirrors the iOS peer's `FIGMA.md` so wiki generators can read both without code branches.
132
-
133
- ## Progress emission
134
-
135
- Per the WS-11 contract, emit the following inline before each write:
136
-
137
- ```
138
- → writing Configuration {Name}Configuration.kt
139
- → writing Composable {Name}.kt
140
- → writing Modifiers {Name}Modifiers.kt
141
- → writing Preview {Name}Preview.kt
142
- → writing README.md
143
- → running gradle compileDebugKotlin (verification)
144
- ```
145
-
146
- ## Build verification
147
-
148
- After writing, run (with the build-queue lock from `refs/phases/operations.md`):
149
-
150
- ```bash
151
- ./gradlew :${module}:compileDebugKotlin --console=plain
152
- ```
153
-
154
- Compile errors → up to 3 auto-fix cycles via Sonnet (iOS peer allows the same). Still failing → halt and surface via `state.phases["3"].errors[]`.
155
-
156
- ## Cross-CLI parity
157
-
158
- The iOS and Android implement skills emit identical progress-line shapes and write the same 5-file set (Configuration + Component + Modifiers + Preview + README), just in the target language. `smoke-figma-android-parity.sh` asserts that every iOS implement output has an Android peer file name.
@@ -1,120 +0,0 @@
1
- ---
2
- name: figma-component-test
3
- description: Generate Compose Testing + Paparazzi/Roborazzi snapshot + unit tests for a Jetpack Compose component. Android peer to pipeline/skills/figma-ios/figma-component-test.
4
- user-invocable: true
5
- argument-hint: <component-name>
6
- allowed-tools: Read, Write, Edit, Glob, Grep, Bash
7
- status: wip-v5
8
- sourced-from: derived-from/figma-ios/figma-component-test
9
- platform: android
10
- ---
11
-
12
- # figma-component-test - Compose Test Suite
13
-
14
- > **WS-7 v5.0.0** - Subphase 3.5 for Android. Three-layer test strategy mirroring the iOS peer (ViewInspector → Compose Testing, Snapshot → Paparazzi/Roborazzi, Unit → JUnit).
15
-
16
- ## Three-layer strategy (Android)
17
-
18
- | Layer | Tool | What it verifies |
19
- |---|---|---|
20
- | **Structural** | Compose Testing (`createComposeRule()`) | Semantic tree, node existence, applied modifiers, click + input actions |
21
- | **Visual** | Paparazzi (JVM) or Roborazzi | Pixel-accurate render: light/dark, LTR/RTL, multi-density, multi-fontScale |
22
- | **Behavioural** | JUnit + Turbine | State changes, callback invocation, configuration copy semantics |
23
-
24
- The orchestrator picks Paparazzi by default (JVM-side, fast). Override by setting `figmaConfig.build.snapshotEngine = "roborazzi"` when the project already wires Robolectric.
25
-
26
- ## Generated files
27
-
28
- ### 1. `{Name}ComposeTest.kt` (structural)
29
-
30
- ```kotlin
31
- class ButtonPrimaryComposeTest {
32
- @get:Rule val composeRule = createComposeRule()
33
-
34
- @Test
35
- fun default_config_renders_title_and_is_clickable() {
36
- var clicked = false
37
- composeRule.setContent {
38
- AppTheme {
39
- ButtonPrimary(
40
- ButtonPrimaryConfiguration()
41
- .title("Save")
42
- .onClick { clicked = true }
43
- )
44
- }
45
- }
46
-
47
- composeRule.onNodeWithText("Save")
48
- .assertIsDisplayed()
49
- .assertHasClickAction()
50
- .performClick()
51
-
52
- assertThat(clicked).isTrue()
53
- }
54
-
55
- @Test
56
- fun disabled_state_is_not_clickable() {
57
- // ... covers isEnabled=false path
58
- }
59
- }
60
- ```
61
-
62
- Rules:
63
- - Prefer `onNodeWithTag(TestingIdentifiers.buttonPrimary)` over `onNodeWithText` when the text is localised.
64
- - Every interactive state (enabled, disabled, loading) gets a test.
65
- - No `Thread.sleep` - use `composeRule.waitUntil { ... }` or `runTest` for coroutine flows.
66
-
67
- ### 2. `{Name}SnapshotTest.kt` (visual)
68
-
69
- Paparazzi variant:
70
-
71
- ```kotlin
72
- class ButtonPrimarySnapshotTest {
73
- @get:Rule val paparazzi = Paparazzi(
74
- deviceConfig = DeviceConfig.PIXEL_6,
75
- theme = "AppTheme",
76
- renderingMode = SessionParams.RenderingMode.SHRINK
77
- )
78
-
79
- @Test fun primary_light() { paparazzi.snapshot { variant(ButtonStyle.Primary, dark = false) } }
80
- @Test fun primary_dark() { paparazzi.snapshot { variant(ButtonStyle.Primary, dark = true) } }
81
- @Test fun secondary_rtl() { paparazzi.snapshot { variant(ButtonStyle.Secondary, rtl = true) } }
82
- @Test fun fontScale_large() { paparazzi.snapshot { variant(ButtonStyle.Primary, fontScale = 1.5f) } }
83
- }
84
- ```
85
-
86
- Minimum matrix: primary × (light, dark) × (LTR, RTL) × (default, large fontScale) = 8 snapshots per component. `--dev` elides fontScale row.
87
-
88
- ### 3. `{Name}ConfigurationTest.kt` (unit)
89
-
90
- ```kotlin
91
- class ButtonPrimaryConfigurationTest {
92
- @Test fun copy_preserves_unchanged_fields() {
93
- val base = ButtonPrimaryConfiguration().title("A").style(ButtonStyle.Primary)
94
- val changed = base.title("B")
95
- assertThat(changed.title).isEqualTo("B")
96
- assertThat(changed.style).isEqualTo(base.style)
97
- }
98
- }
99
- ```
100
-
101
- Covers: fluent modifier semantics, default values, enum exhaustiveness.
102
-
103
- ## Build + run
104
-
105
- ```bash
106
- # JVM side (Paparazzi + Configuration unit tests)
107
- ./gradlew :${module}:testDebugUnitTest --console=plain
108
-
109
- # Instrumented side (Compose Testing)
110
- ./gradlew :${module}:connectedDebugAndroidTest --console=plain
111
-
112
- # Paparazzi record (only when snapshots are intentionally updated)
113
- ./gradlew :${module}:recordPaparazziDebug
114
- ```
115
-
116
- On failure - up to 3 auto-fix cycles, then halt.
117
-
118
- ## Cross-CLI parity
119
-
120
- Both CLIs emit identical progress lines, generate the same 3-file set (compose + snapshot + configuration), and honour `figmaConfig.build.snapshotEngine`. `smoke-figma-android-parity.sh` asserts the inventory match with the iOS peer.
@@ -1,35 +0,0 @@
1
- ---
2
- name: figma-component-wiki
3
- description: Component wiki generation for Android. Dispatches to the same 4-mode adapter set as the iOS peer (submodule / in-repo / github-wiki / separate-repo). Body rendering reads the Kotlin composable + sibling README.md instead of Swift + FIGMA.md.
4
- user-invocable: true
5
- argument-hint: <figma-url> | <component-name>
6
- allowed-tools: Read, Write, Glob, Grep, Bash
7
- status: wip-v5
8
- sourced-from: derived-from/figma-ios/figma-component-wiki
9
- platform: android
10
- ---
11
-
12
- # figma-component-wiki - Component Wiki (Android)
13
-
14
- > **WS-7 v5.0.0** - Android peer to `pipeline/skills/figma-ios/figma-component-wiki`. Identical dispatch contract (Phase 7 Report Step 2 → `{componentName, componentPath, figmaConfig, agentState}` → `{writtenPaths[], committedSha?, pushedRemote?}`). Identical 4-adapter matrix (submodule / in-repo / github-wiki / separate-repo). Only the markdown rendering differs: reads Kotlin composable signature + sibling `README.md` rather than SwiftUI `+Modifiers.swift` + `FIGMA.md`.
15
-
16
- See `pipeline/skills/figma-ios/figma-component-wiki/SKILL.md` for the full adapter table and dispatch contract - shared verbatim.
17
-
18
- ## Android-specific rendering notes
19
-
20
- - Parameter table reads the Composable signature AND the Configuration data class:
21
- ```kotlin
22
- @Composable fun ButtonPrimary(configuration: ButtonPrimaryConfiguration, modifier: Modifier = Modifier)
23
- ```
24
- Yields: `configuration: ButtonPrimaryConfiguration`, `modifier: Modifier`. Nested Configuration properties are rendered as a second table (one row per knob).
25
- - Code examples quote `@Preview` bodies rather than SwiftUI `#Preview` bodies.
26
- - Design tokens section reads `MaterialTheme.colorScheme.*` + `MaterialTheme.typography.*` references grepped from the composable.
27
- - Accessibility notes read `.semantics { ... }` blocks instead of `.accessibility*` modifiers.
28
-
29
- ## Python helpers
30
-
31
- Shared with the iOS peer - same `pipeline/scripts/wiki/sidebar-generator.py` and `pipeline/scripts/wiki/status-page.py` land in WS-5b. The helpers are platform-agnostic (they read component markdown files, not Swift or Kotlin sources).
32
-
33
- ## Cross-CLI parity
34
-
35
- Byte-identical progress lines, identical adapter dispatch, identical return schema. Wiki layout convergence across iOS and Android is an explicit goal - the same `/components/{Category}/{Name}.md` path structure on every project regardless of platform.
@@ -1,124 +0,0 @@
1
- ---
2
- name: figma-to-component
3
- description: Figma-to-Compose component implementation workflow for Android. Takes a Figma URL and produces a production-ready Jetpack Compose component through the same 8-phase pipeline shape as the iOS peer - data gathering, analysis, code generation, testing, Code Connect, documentation.
4
- user-invocable: true
5
- argument-hint: <figma-url> | phase-<N> | status
6
- allowed-tools: Task, Read, Glob, Grep, Bash, Write, Edit, AskUserQuestion
7
- status: wip-v5
8
- sourced-from: derived-from/figma-ios/figma-to-component
9
- platform: android
10
- ---
11
-
12
- # figma-to-component - Android Orchestrator
13
-
14
- > **WS-7 v5.0.0** - Platform peer to `pipeline/skills/figma-ios/figma-to-component`. Same 8-phase shape; platform-specific phases (3-Token Mapping, 4-Code Gen, 5-Tests, 6-Code Connect) target Kotlin / Jetpack Compose / Paparazzi / Code Connect for Compose. Common phases (0-Init, 1-Gather, 2A-2D utilities, 7-Wiki, 8-Cleanup) share logic with the iOS peer - implementations stay in this skill for now; a `figma-common/` refactor lands in WS-7b.
15
-
16
- ## Dispatch entry
17
-
18
- Called from multi-agent Phase 3 when `state.taskType === "component"` AND `figmaConfig.project.platform === "android"`. See `pipeline/commands/multi-agent/refs/component-dispatch.md` for the full dispatch contract shared with the iOS peer (same input/output schema, subphase state shape).
19
-
20
- ## Parameters
21
-
22
- | Parameter | Required | Description |
23
- |-----------|----------|-------------|
24
- | Figma URL | Yes | `https://www.figma.com/design/{fileKey}/...?node-id={nodeId}` |
25
- | `phase-<N>` | No | Resume a specific subphase instead of running the full chain |
26
- | `status` | No | Print subphase progress from `state.phases["3"].subphases[]` and exit |
27
-
28
- ```
29
- /figma-to-component https://www.figma.com/design/abc/?node-id=123-456
30
- /figma-to-component phase-4a # resume at Kotlin Configuration generation
31
- /figma-to-component status
32
- ```
33
-
34
- ## Phase order (Android-flavoured)
35
-
36
- | # | Phase | Platform-specific? | Notes |
37
- |---|---|---|---|
38
- | 3.0 | Init | no | Node-id parse, registry lookup, worktree confirm |
39
- | 3.1 | Gather | no | Figma API/MCP fetch, design tokens, properties |
40
- | 3.2a | Testing identifiers | no | Platform-agnostic semantic IDs (shared with iOS) |
41
- | 3.2b | Localization | no | Shared strings - lands in `{repos.common}` |
42
- | 3.2c | Accessibility | partial | `contentDescription` / `Role` / `semantics {}` vs SwiftUI's `.accessibility*` - the generator knows both |
43
- | 3.2d | Analytics | no | Shared analytics keys |
44
- | 3.3 | Token Mapping | **yes** | Maps Figma tokens → MaterialTheme dimensions / colorScheme / typography; outputs a per-project `DesignTokens.kt` if missing |
45
- | 3.4a | Configuration | **yes** | `{Name}Configuration.kt` - data class with all properties, marked `@Immutable`/`@Stable` for Compose skippability |
46
- | 3.4b | View | **yes** | `{Name}Screen.kt` or `{Name}.kt` - `@Composable fun {Name}(configuration: {Name}Configuration, modifier: Modifier = Modifier)` |
47
- | 3.4c | Docs | no | `README.md` next to the composable |
48
- | 3.4d | Preview | **yes** | `@Preview` functions covering variants (device, darkMode, RTL, fontScale) |
49
- | 3.4e | Modifiers | **yes** | Kotlin extension functions on `Modifier` or on the Configuration type - the fluent API the iOS peer expresses as `+Modifiers.swift` |
50
- | 3.5a | Structural tests | **yes** | `createComposeRule()` + semantic matchers (`onNodeWithText`, `onNodeWithTag`, `onNodeWithContentDescription`) |
51
- | 3.5b | Snapshot | **yes** | Paparazzi or Roborazzi snapshot tests covering light/dark, LTR/RTL, Dynamic Font Scale |
52
- | 3.5c | Unit | yes (opt) | Logic-only unit tests; `--dev` may elide |
53
- | 3.6 | Code Connect | **yes** | Code Connect for Compose - `{Name}.figma.kt` with `@FigmaConnect` variant mappings |
54
- | 3.7 | Wiki | no | Delegates to `figma-component-wiki` - same 4-mode adapter as iOS |
55
- | 3.8 | Cleanup | no | Artifact pruning, state finalize |
56
-
57
- ## Delegation graph
58
-
59
- ```
60
- figma-to-component (this skill)
61
- ├─ phase 3.4 (code gen) → figma-component-implement (Android peer)
62
- ├─ phase 3.5 (tests) → figma-component-test (Android peer)
63
- ├─ phase 3.6 (code connect) → figma-component-code-connect (Android peer)
64
- └─ phase 3.7 (wiki) → figma-component-wiki (Android peer - mode-aware adapter)
65
- ```
66
-
67
- The platform-agnostic subphases (3.0-3.3, 3.2a-d, 3.8) use the same logic as the iOS orchestrator - they read `figmaConfig` + Figma API results and write registry entries that don't care about language target. WS-7b extracts those to `pipeline/skills/figma-common/` so both platforms import rather than duplicate.
68
-
69
- ## Build target resolution
70
-
71
- Reads from `figmaConfig.build`:
72
-
73
- ```json
74
- {
75
- "gradleModule": ":components:button",
76
- "variant": "debug",
77
- "buildType": "release"
78
- }
79
- ```
80
-
81
- Invokes build via:
82
-
83
- ```bash
84
- ./gradlew :${build.gradleModule//:/}:assembleDebug
85
- ./gradlew :${build.gradleModule//:/}:testDebugUnitTest
86
- ```
87
-
88
- If `build.gradleModule` is missing, halt with a clear "configure `figmaConfig.build.gradleModule` for Android" message. Do not guess.
89
-
90
- ## Component output locations
91
-
92
- Default layout - override per project via `figmaConfig.repos` and `figmaConfig.artifactBasePath`:
93
-
94
- | Artifact | Path |
95
- |---|---|
96
- | Composable + Configuration | `{repos.components.path}/src/main/java/.../components/{Category}/{Name}/{Name}.kt` |
97
- | Modifiers extensions | Same directory as the composable |
98
- | Unit tests | `{repos.components.path}/src/test/java/.../components/{Category}/{Name}Test.kt` |
99
- | Instrumented/Compose tests | `{repos.components.path}/src/androidTest/java/.../components/{Category}/{Name}ComposeTest.kt` |
100
- | Snapshot tests | Beside Compose tests, using Paparazzi's `@get:Rule val paparazzi = Paparazzi(...)` |
101
- | Code Connect | `{repos.components.path}/src/main/java/.../components/{Category}/{Name}/{Name}.figma.kt` |
102
- | Component artifacts | `{artifactBasePath}/{Category}/{Name}/` (screenshots, specs - platform-agnostic) |
103
-
104
- ## Design token conventions
105
-
106
- Tokens for Compose land in `MaterialTheme`:
107
-
108
- - Spacing → `CustomSpacing` extension on `MaterialTheme` (or vanilla `dp` constants if the project has no theme wrapper)
109
- - Color → `MaterialTheme.colorScheme.{name}` or project's `CustomColorScheme`
110
- - Typography → `MaterialTheme.typography.{name}`
111
- - Radius → `CustomShapes` extension
112
-
113
- The generator reads `figmaConfig.tokens.*Path` to locate the theme file and resolves symbolic tokens (e.g. `Spacing.spacing16`) in the same way the iOS peer resolves `.Spacing.spacing16`. No magic numbers land in the composable.
114
-
115
- ## Cross-CLI parity
116
-
117
- Claude Code and Copilot CLI implementations MUST:
118
-
119
- - Accept identical arguments (`<figma-url>`, `phase-<N>`, `status`).
120
- - Emit byte-identical progress lines via the WS-11 contract.
121
- - Write the same `state.phases["3"].subphases[]` schema so multi-agent's phase-tracker renders identically.
122
- - Resolve `figmaConfig.build.gradleModule` the same way.
123
-
124
- `smoke-figma-android-parity.sh` asserts the platform-specific skill inventory matches the iOS peer (same skill names exist on both sides).