@mmerterden/multi-agent-pipeline 11.2.0 → 11.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +2 -2
  3. package/docs/FIGMA_PIPELINE.md +12 -25
  4. package/docs/architecture.md +3 -5
  5. package/docs/features.md +8 -8
  6. package/install/_dev-only-files.mjs +0 -6
  7. package/install/claude.mjs +39 -17
  8. package/install/copilot.mjs +22 -16
  9. package/install/templates/copilot-instructions.md +3 -3
  10. package/package.json +1 -1
  11. package/pipeline/commands/{multi-agent.md → multi-agent/SKILL.md} +39 -39
  12. package/pipeline/commands/multi-agent/{analysis.md → analysis/SKILL.md} +18 -18
  13. package/pipeline/commands/multi-agent/{analysis-resolve.md → analysis-resolve/SKILL.md} +4 -4
  14. package/pipeline/commands/multi-agent/{autopilot.md → autopilot/SKILL.md} +4 -4
  15. package/pipeline/commands/multi-agent/{build-optimize.md → build-optimize/SKILL.md} +1 -1
  16. package/pipeline/commands/multi-agent/{channels.md → channels/SKILL.md} +12 -12
  17. package/pipeline/commands/multi-agent/{dev.md → dev/SKILL.md} +4 -4
  18. package/pipeline/commands/multi-agent/{dev-autopilot.md → dev-autopilot/SKILL.md} +4 -4
  19. package/pipeline/commands/multi-agent/{dev-local.md → dev-local/SKILL.md} +5 -5
  20. package/pipeline/commands/multi-agent/{dev-local-autopilot.md → dev-local-autopilot/SKILL.md} +4 -4
  21. package/pipeline/commands/multi-agent/{finish.md → finish/SKILL.md} +6 -6
  22. package/pipeline/commands/multi-agent/{generate.md → generate/SKILL.md} +3 -3
  23. package/pipeline/commands/multi-agent/{help.md → help/SKILL.md} +4 -4
  24. package/pipeline/commands/multi-agent/{local.md → local/SKILL.md} +5 -5
  25. package/pipeline/commands/multi-agent/{local-autopilot.md → local-autopilot/SKILL.md} +5 -5
  26. package/pipeline/commands/multi-agent/{manual-test.md → manual-test/SKILL.md} +1 -1
  27. package/pipeline/commands/multi-agent/refactor/SKILL.md +257 -0
  28. package/pipeline/commands/multi-agent/{resume.md → resume/SKILL.md} +1 -1
  29. package/pipeline/commands/multi-agent/{review.md → review/SKILL.md} +5 -5
  30. package/pipeline/commands/multi-agent/{setup.md → setup/SKILL.md} +1 -1
  31. package/pipeline/commands/multi-agent/{sync.md → sync/SKILL.md} +20 -58
  32. package/pipeline/lib/credential-store.sh +8 -4
  33. package/pipeline/{commands/multi-agent → multi-agent-refs}/_account-picker.md +2 -2
  34. package/pipeline/{commands/multi-agent → multi-agent-refs}/_dev-context.md +2 -2
  35. package/pipeline/{commands/multi-agent → multi-agent-refs}/_repo-picker.md +2 -2
  36. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/android-guide.md +1 -1
  37. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/jira.md +1 -1
  38. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/wiki.md +7 -7
  39. package/pipeline/multi-agent-refs/component-dispatch.md +92 -0
  40. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/cross-cli-contract.md +10 -77
  41. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/verify-by-test.md +1 -1
  42. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/generate-issue.md +2 -2
  43. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/issue-jira-triad.md +1 -1
  44. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/keychain.md +1 -1
  45. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/log-format.md +1 -1
  46. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/modes.md +2 -2
  47. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/operations.md +1 -1
  48. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-0-init.md +10 -10
  49. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-1-analysis.md +6 -6
  50. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-2-planning.md +3 -3
  51. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-3-dev.md +10 -10
  52. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-4-review.md +8 -8
  53. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-5-test.md +3 -3
  54. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-6-commit.md +4 -4
  55. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-7-report.md +6 -6
  56. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases.md +12 -12
  57. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/progress-contract.md +4 -4
  58. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/swiftui-guide.md +1 -1
  59. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/tracker-contract.md +3 -3
  60. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/wiki-capture.md +4 -4
  61. package/pipeline/preferences-template.json +17 -1
  62. package/pipeline/rules/figma-pipeline.md +2 -2
  63. package/pipeline/schemas/prefs.schema.json +0 -34
  64. package/pipeline/scripts/README.md +1 -3
  65. package/pipeline/scripts/build-skills-index.mjs +3 -6
  66. package/pipeline/scripts/eval-mine-corpus.mjs +187 -0
  67. package/pipeline/scripts/fixtures/install-layout.tsv +6 -5
  68. package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
  69. package/pipeline/scripts/lint-skills.mjs +26 -1
  70. package/pipeline/scripts/phase-banner.sh +2 -2
  71. package/pipeline/scripts/review-scope.mjs +94 -0
  72. package/pipeline/scripts/scan-agent-config.sh +2 -2
  73. package/pipeline/scripts/smoke-agent-log-cost.sh +1 -1
  74. package/pipeline/scripts/smoke-agent-model-routing.sh +4 -4
  75. package/pipeline/scripts/smoke-autopilot-circuit-breaker.sh +2 -2
  76. package/pipeline/scripts/smoke-channels-approval-gate.sh +2 -2
  77. package/pipeline/scripts/smoke-channels-flow.sh +5 -5
  78. package/pipeline/scripts/smoke-clarify.sh +1 -1
  79. package/pipeline/scripts/smoke-commands-skills-parity.sh +3 -3
  80. package/pipeline/scripts/smoke-community-gates.sh +1 -1
  81. package/pipeline/scripts/smoke-compliance-skills.sh +2 -2
  82. package/pipeline/scripts/smoke-cost-summary.sh +1 -1
  83. package/pipeline/scripts/smoke-cross-cli-behavior.sh +17 -43
  84. package/pipeline/scripts/smoke-cross-phase-cohesion.sh +1 -1
  85. package/pipeline/scripts/smoke-dev-critic.sh +1 -1
  86. package/pipeline/scripts/smoke-diff-explain.sh +1 -1
  87. package/pipeline/scripts/smoke-diff-risk.sh +1 -1
  88. package/pipeline/scripts/smoke-evidence-gate.sh +1 -1
  89. package/pipeline/scripts/smoke-figma-dispatch.sh +46 -57
  90. package/pipeline/scripts/smoke-gate-hooks.sh +1 -1
  91. package/pipeline/scripts/smoke-generate-issue.sh +8 -8
  92. package/pipeline/scripts/smoke-handoff-contract.sh +3 -3
  93. package/pipeline/scripts/smoke-identity-isolation.sh +2 -2
  94. package/pipeline/scripts/smoke-intent-guard.sh +1 -1
  95. package/pipeline/scripts/smoke-issue-comment-template.sh +2 -2
  96. package/pipeline/scripts/smoke-issue-jira-triad.sh +4 -4
  97. package/pipeline/scripts/smoke-language-axis.sh +6 -6
  98. package/pipeline/scripts/smoke-learnings-ledger.sh +3 -3
  99. package/pipeline/scripts/smoke-mode-dispatch-drift.sh +16 -16
  100. package/pipeline/scripts/smoke-model-fallback.sh +3 -3
  101. package/pipeline/scripts/smoke-multi-repo-integration.sh +2 -2
  102. package/pipeline/scripts/smoke-multi-repo-worktree.sh +1 -1
  103. package/pipeline/scripts/smoke-no-token-prompt.sh +5 -5
  104. package/pipeline/scripts/smoke-phase-0-multi-repo.sh +1 -1
  105. package/pipeline/scripts/smoke-phase-6-multi.sh +1 -1
  106. package/pipeline/scripts/smoke-phase4-gates.sh +45 -0
  107. package/pipeline/scripts/smoke-plan-approval-gate.sh +5 -5
  108. package/pipeline/scripts/smoke-plan-todos.sh +3 -3
  109. package/pipeline/scripts/smoke-pr-review-actions.sh +3 -3
  110. package/pipeline/scripts/smoke-prefs-language.sh +1 -1
  111. package/pipeline/scripts/smoke-progress-contract.sh +2 -2
  112. package/pipeline/scripts/smoke-push-retry.sh +1 -1
  113. package/pipeline/scripts/smoke-repo-map.sh +2 -2
  114. package/pipeline/scripts/smoke-shadow-git.sh +1 -1
  115. package/pipeline/scripts/smoke-skill-authoring.sh +4 -9
  116. package/pipeline/scripts/smoke-tasklist-ordering.sh +10 -10
  117. package/pipeline/scripts/smoke-test-gap.sh +1 -1
  118. package/pipeline/scripts/smoke-token-budget.sh +1 -1
  119. package/pipeline/scripts/smoke-token-preflight.sh +2 -2
  120. package/pipeline/scripts/smoke-tracker-contract.sh +13 -13
  121. package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +5 -5
  122. package/pipeline/scripts/smoke-triage-memory.sh +2 -2
  123. package/pipeline/scripts/smoke-update-check.sh +1 -1
  124. package/pipeline/scripts/smoke-url-enrichment.sh +2 -2
  125. package/pipeline/scripts/smoke-validator-gates.sh +1 -1
  126. package/pipeline/scripts/smoke-verify-by-test.sh +3 -3
  127. package/pipeline/scripts/smoke-wiki-integration.sh +9 -33
  128. package/pipeline/scripts/smoke-work-summary.sh +1 -1
  129. package/pipeline/scripts/smoke-worktree-path-convention.sh +4 -4
  130. package/pipeline/scripts/test-integrity-gate.mjs +83 -0
  131. package/pipeline/scripts/uninstall.mjs +17 -6
  132. package/pipeline/skills/.skill-manifest.json +40 -160
  133. package/pipeline/skills/.skills-index.json +3 -373
  134. package/pipeline/skills/shared/README.md +1 -1
  135. package/pipeline/skills/shared/core/multi-agent/SKILL.md +1 -1
  136. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +2 -2
  137. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +3 -3
  138. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
  139. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +1 -1
  140. package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
  141. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +1 -1
  142. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +116 -51
  143. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +8 -30
  144. package/pipeline/skills/shared/external/compose-components/SKILL.md +14 -14
  145. package/pipeline/skills/skills-index.md +3 -44
  146. package/pipeline/commands/multi-agent/refactor.md +0 -188
  147. package/pipeline/commands/multi-agent/refs/component-dispatch.md +0 -92
  148. package/pipeline/scripts/smoke-existing-discovery-gate.sh +0 -71
  149. package/pipeline/scripts/smoke-figma-android-parity.sh +0 -148
  150. package/pipeline/scripts/smoke-figma-credential-store.sh +0 -105
  151. package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +0 -177
  152. package/pipeline/scripts/smoke-figma-sync.sh +0 -149
  153. package/pipeline/scripts/smoke-sync-delegation.sh +0 -74
  154. package/pipeline/skills/figma-android/README.md +0 -38
  155. package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +0 -62
  156. package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +0 -158
  157. package/pipeline/skills/figma-android/figma-component-test/SKILL.md +0 -120
  158. package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +0 -35
  159. package/pipeline/skills/figma-android/figma-to-component/SKILL.md +0 -124
  160. package/pipeline/skills/figma-common/README.md +0 -64
  161. package/pipeline/skills/figma-common/figma-bottom-sheets/SKILL.md +0 -152
  162. package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +0 -282
  163. package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +0 -503
  164. package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +0 -288
  165. package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +0 -362
  166. package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +0 -206
  167. package/pipeline/skills/figma-common/figma-commit/REVIEW.md +0 -337
  168. package/pipeline/skills/figma-common/figma-commit/SKILL.md +0 -216
  169. package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +0 -223
  170. package/pipeline/skills/figma-common/figma-component-start/SKILL.md +0 -251
  171. package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +0 -78
  172. package/pipeline/skills/figma-common/figma-evolve-component/SKILL.md +0 -61
  173. package/pipeline/skills/figma-common/figma-fix/SKILL.md +0 -321
  174. package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +0 -542
  175. package/pipeline/skills/figma-common/figma-issue/SKILL.md +0 -750
  176. package/pipeline/skills/figma-common/figma-iterate/SKILL.md +0 -208
  177. package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +0 -1020
  178. package/pipeline/skills/figma-common/figma-mend/SKILL.md +0 -331
  179. package/pipeline/skills/figma-common/figma-navigation/SKILL.md +0 -156
  180. package/pipeline/skills/figma-common/figma-overlays/SKILL.md +0 -142
  181. package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +0 -398
  182. package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +0 -104
  183. package/pipeline/skills/figma-common/figma-review/SKILL.md +0 -400
  184. package/pipeline/skills/figma-common/figma-setup/SKILL.md +0 -514
  185. package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +0 -592
  186. package/pipeline/skills/figma-common/figma-skip/SKILL.md +0 -129
  187. package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +0 -105
  188. package/pipeline/skills/figma-common/figma-ui-patterns/patterns/animated-gradient-border.md +0 -116
  189. package/pipeline/skills/figma-common/figma-utility/SKILL.md +0 -274
  190. package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +0 -808
  191. package/pipeline/skills/figma-common/figma-validate/SKILL.md +0 -633
  192. package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +0 -716
  193. package/pipeline/skills/figma-common/performance-review-next/SKILL.md +0 -238
  194. package/pipeline/skills/figma-common/performance-start/SKILL.md +0 -430
  195. package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +0 -706
  196. package/pipeline/skills/figma-common/performance-tour/SKILL.md +0 -423
  197. package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +0 -67
  198. package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +0 -178
  199. package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +0 -184
  200. package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +0 -219
  201. package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +0 -274
  202. package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +0 -416
  203. package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +0 -57
  204. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +0 -307
  205. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +0 -119
  206. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +0 -174
  207. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +0 -333
  208. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +0 -368
  209. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +0 -393
  210. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +0 -617
  211. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +0 -352
  212. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +0 -337
  213. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +0 -206
  214. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +0 -235
  215. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +0 -214
  216. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +0 -902
  217. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +0 -156
  218. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +0 -175
  219. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +0 -176
  220. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +0 -333
  221. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +0 -412
  222. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +0 -336
  223. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +0 -705
  224. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +0 -332
  225. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +0 -380
  226. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +0 -262
  227. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +0 -482
  228. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +0 -274
  229. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +0 -636
  230. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +0 -142
  231. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +0 -547
  232. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +0 -39
  233. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +0 -659
  234. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +0 -580
  235. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +0 -51
  236. package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +0 -183
  237. package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +0 -64
  238. package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +0 -531
  239. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +0 -89
  240. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +0 -155
  241. package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +0 -196
  242. package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +0 -57
  243. package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +0 -89
  244. package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +0 -227
  245. package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +0 -157
  246. package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +0 -90
  247. package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +0 -116
  248. package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +0 -153
  249. package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +0 -130
  250. package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +0 -218
  251. package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +0 -188
  252. package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +0 -93
  253. package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +0 -98
  254. package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +0 -261
  255. package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +0 -147
  256. package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +0 -182
  257. package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +0 -185
  258. package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +0 -609
  259. package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +0 -332
  260. package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +0 -261
  261. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +0 -184
  262. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +0 -188
  263. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +0 -768
  264. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +0 -191
  265. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +0 -420
  266. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.example.json +0 -9
  267. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +0 -336
  268. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +0 -391
  269. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +0 -292
  270. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +0 -1
  271. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +0 -93
  272. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +0 -299
  273. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +0 -343
  274. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +0 -206
  275. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +0 -149
  276. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +0 -281
  277. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +0 -332
  278. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +0 -176
  279. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +0 -98
  280. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +0 -298
  281. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +0 -195
  282. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +0 -1298
  283. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +0 -228
  284. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +0 -1089
  285. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +0 -141
  286. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +0 -106
  287. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +0 -162
  288. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +0 -105
  289. package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +0 -179
  290. package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +0 -260
  291. package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +0 -260
  292. package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +0 -86
  293. package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +0 -321
  294. package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +0 -1470
  295. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +0 -176
  296. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +0 -147
  297. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +0 -629
  298. /package/pipeline/commands/multi-agent/{delete.md → delete/SKILL.md} +0 -0
  299. /package/pipeline/commands/multi-agent/{diff-explain.md → diff-explain/SKILL.md} +0 -0
  300. /package/pipeline/commands/multi-agent/{garbage-collect.md → garbage-collect/SKILL.md} +0 -0
  301. /package/pipeline/commands/multi-agent/{issue.md → issue/SKILL.md} +0 -0
  302. /package/pipeline/commands/multi-agent/{jira.md → jira/SKILL.md} +0 -0
  303. /package/pipeline/commands/multi-agent/{kill.md → kill/SKILL.md} +0 -0
  304. /package/pipeline/commands/multi-agent/{language.md → language/SKILL.md} +0 -0
  305. /package/pipeline/commands/multi-agent/{log.md → log/SKILL.md} +0 -0
  306. /package/pipeline/commands/multi-agent/{prune-logs.md → prune-logs/SKILL.md} +0 -0
  307. /package/pipeline/commands/multi-agent/{purge.md → purge/SKILL.md} +0 -0
  308. /package/pipeline/commands/multi-agent/{scan.md → scan/SKILL.md} +0 -0
  309. /package/pipeline/commands/multi-agent/{search.md → search/SKILL.md} +0 -0
  310. /package/pipeline/commands/multi-agent/{stack.md → stack/SKILL.md} +0 -0
  311. /package/pipeline/commands/multi-agent/{status.md → status/SKILL.md} +0 -0
  312. /package/pipeline/commands/multi-agent/{test.md → test/SKILL.md} +0 -0
  313. /package/pipeline/commands/multi-agent/{update.md → update/SKILL.md} +0 -0
  314. /package/pipeline/{commands/multi-agent → multi-agent-refs}/_input-parser.md +0 -0
  315. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/analysis-template.md +0 -0
  316. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/audit-guide.md +0 -0
  317. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/backend-guide.md +0 -0
  318. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/confluence.md +0 -0
  319. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/issue-comment.md +0 -0
  320. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr-review-actions.md +0 -0
  321. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr.md +0 -0
  322. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/conventions-defaults.md +0 -0
  323. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/autopilot-circuit-breaker.md +0 -0
  324. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/dev-critic.md +0 -0
  325. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/external-context-injection.md +0 -0
  326. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/model-fallback.md +0 -0
  327. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/plan-todos.md +0 -0
  328. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/prior-fix-detection.md +0 -0
  329. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/repo-map.md +0 -0
  330. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/shadow-git.md +0 -0
  331. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/frontend-guide.md +0 -0
  332. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/knowledge.md +0 -0
  333. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/multi-repo-integration-build.md +0 -0
  334. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/picker-contract.md +0 -0
  335. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/rules.md +0 -0
@@ -1,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).
@@ -1,64 +0,0 @@
1
- # figma-common - Platform-agnostic figma-to-component skills
2
-
3
- Shared skills that both `pipeline/skills/figma-ios/` (SwiftUI) and `pipeline/skills/figma-android/` (Jetpack Compose) dispatch. Moved here by WS-7b of the v5.0.0 rebuild so the platform trees stay lean and there's no duplication.
4
-
5
- ## What lives here (31 skills)
6
-
7
- **Workflow orchestration:**
8
-
9
- - `figma-component-start` - Issue → branches, check out worktree
10
- - `figma-component-confluence-sync` - Phase 7b: wiki markdown → Confluence XHTML
11
- - `figma-component-status-update` - Refresh Confluence dashboard
12
- - `figma-commit` - 14-item review + PR creation
13
- - `figma-iteration-commit` - Commit to iteration/develop + PR
14
-
15
- **Batch + iterate:**
16
-
17
- - `figma-iterate` - Auto loop: pick → implement → commit
18
- - `figma-cli-iterate` - Full CLI iterate (all phases)
19
- - `figma-cli-lean-iterate` - Iterate skipping test + wiki
20
- - `figma-cli-iterate-mend` - Re-implement discarded components
21
- - `figma-cli-skip` - Mark component as skipped
22
- - `figma-skip` - Skip + update Confluence dashboard
23
-
24
- **Issue + review:**
25
-
26
- - `figma-issue` - Create GitHub issue + optional Jira (feeds WS-6 triad)
27
- - `figma-review` - Interactive review gate (approve / bug / skip)
28
- - `figma-validate` - Pre-implementation validation
29
- - `figma-fix` - Targeted bug fix from review findings
30
- - `figma-mend` - Re-implement component from scratch
31
- - `figma-evolve-component` - Reconcile drift + additively extend an existing component (human-gated)
32
-
33
- **Setup + utility:**
34
-
35
- - `figma-setup` - Environment setup wizard (MCP, tokens, Code Connect CLI)
36
- - `figma-remote-mcp-auth` - Figma MCP OAuth flow
37
- - `figma-utility` - Figma data fetch (screenshots, metadata)
38
- - `figma-ui-patterns` - UI pattern library index
39
- - `figma-form-integration` - Form protocol adapter (shared UX)
40
- - `figma-price-integration` - Price protocol adapter (shared UX)
41
-
42
- **Cross-cutting interaction adapters (dual-platform: iOS SwiftUI + Android Jetpack Compose; native-first; project system via `figma-config` `ui.*`):**
43
-
44
- - `figma-navigation` - Navigation pattern: headless Output vs self-route; native `NavigationStack` or `ui.navigationSystem`
45
- - `figma-overlays` - Overlay pattern: toast/HUD/alert/data-modal; native `.alert`/`.sheet(item:)` or `ui.overlaySystem`
46
- - `figma-bottom-sheets` - Bottom-sheet/detent pattern: native `.presentationDetents` or `ui.sheetSystem`
47
-
48
- **Performance batch:**
49
-
50
- - `performance-start`, `performance-swiftui`, `performance-tour`, `performance-review-next`, `performance-iteration-commit-all`
51
-
52
- ## What does NOT live here
53
-
54
- Platform-specific skills stay under `figma-ios/` or `figma-android/`:
55
-
56
- - `figma-to-component` - orchestrator (platform-specific build command)
57
- - `figma-component-implement` - Swift / Kotlin code generator
58
- - `figma-component-test` - SwiftUI ViewInspector / Compose Testing
59
- - `figma-component-code-connect` - Swift / Kotlin Code Connect
60
- - `figma-component-wiki` - same 4-adapter contract, but platform-aware rendering
61
-
62
- ## Invocation
63
-
64
- Both platforms' orchestrators call the same common skill paths - no CLI or platform routing needed. The cross-CLI contract (`refs/cross-cli-contract.md` section 1.1) enforces the inventory.
@@ -1,152 +0,0 @@
1
- ---
2
- name: figma-bottom-sheets
3
- description: "Bottom-sheet / detent pattern integration for Figma-to-UI components (iOS SwiftUI + Android Jetpack Compose) — half-sheets, drawers, pinned bottom CTAs, resizable pull-up panels, content-sized sheets, and multi-step in-sheet flows. Native by default (SwiftUI .sheet+presentationDetents; Compose ModalBottomSheet + rememberModalBottomSheetState); an optional project-supplied detent-sheet system when figma-config declares one. Reach for this when a design shows a bottom sheet, half-sheet, bottom drawer, snap points, a sticky footer button, or a wizard-in-a-sheet."
4
- user-invocable: true
5
- allowed-tools: Read, Glob, Grep
6
- status: wip-v5
7
- sourced-from: upstream/figma-bottom-sheets
8
- ---
9
-
10
- # /figma-bottom-sheets - Bottom-Sheet / Detent Pattern Integration
11
-
12
- ## Purpose
13
-
14
- Consumed by the figma-to-swiftui pipeline (Phase 3D detection, Phase 4B view) and available ad-hoc, this skill defines how **bottom-anchored, detent-based surfaces** are presented. Sibling of `/figma-overlays` (transient/blocking overlays) and `/figma-navigation` (routing): native-SwiftUI default + a config-driven hook for projects that ship a custom detent-sheet engine.
15
-
16
- **Generic by design.** Default is stock SwiftUI `.sheet` + `.presentationDetents`. If `figma-config.json` declares `ui.sheetSystem`, route through that engine by name - same rules, project vocabulary. (Some apps replace system sheets because iOS 26 forces a Liquid-Glass floating inset on partial detents with no removal API; that replacement is the custom-system case, not the default.)
17
-
18
- ---
19
-
20
- ## Strict Rules (non-negotiable)
21
-
22
- 1. **The sheet surface is a caller concern; the component is the content.** A reusable component authored from Figma is the sheet's **content**, not the presenter. The caller owns the `isPresented`/`item` binding and the detents. A component that presents itself can't be reused elsewhere.
23
- 2. **No magic numbers.** Detents, corner radius, grabber size, insets come from tokens / figma-config token patterns, never hard-coded literals.
24
- 3. **Detents ascend, max 3.** Pass `[detent]` lowest→highest; the sheet opens at the lowest. Prefer semantic detents (`.medium`, `.large`, `.fraction`, content-height) over pixel heights where possible.
25
- 4. **A bottom sheet is not a modal card and not a navigation push.** Data alert/modal card → `/figma-overlays`; screen routing → `/figma-navigation` (a routed modal may still *render* as a sheet, but navigation owns the routing).
26
- 5. **Native SwiftUI is the default; a custom sheet engine is opt-in via config.** Only use a project detent-sheet system when `ui.sheetSystem.mode == "custom"`.
27
-
28
- ---
29
-
30
- ## When to Invoke This Skill
31
-
32
- 1. **Phase 3D - sheet affordance/pattern:** the design is (or contains) a bottom sheet / half-sheet / drawer, a **pinned bottom CTA** bar, a resizable pull-up panel, a **content-sized** sheet, or a **multi-step** in-sheet flow (in-sheet back/next that resizes per step).
33
- 2. **Phase 4B - View:** the view is authored as sheet content, or presents a child as a sheet.
34
- 3. **Ad-hoc:** "half sheet", "bottom drawer", "pull-up panel", "snap points", "sticky footer button", "multi-step sheet", "sheet sized to its content".
35
-
36
- **Not a bottom sheet (guards):**
37
- - Toast / HUD / alert / data modal card → `/figma-overlays`.
38
- - Full screen navigation / tab / deep link → `/figma-navigation`.
39
- - An inline expandable section within the page flow (not an anchored surface) → plain component content.
40
-
41
- ---
42
-
43
- ## Native-first architecture (default)
44
-
45
- ```
46
- Caller
47
- | owns isPresented / item + detents; presents the component as content
48
- v
49
- .sheet(item:/isPresented:) {
50
- ComponentContent() // the Figma-authored component
51
- .presentationDetents([.medium, .large])
52
- .presentationDragIndicator(.visible)
53
- .presentationBackgroundInteraction(.enabled(upThrough: .medium)) // passthrough-ish
54
- .presentationCornerRadius(<token>)
55
- }
56
- ```
57
-
58
- - **Half / expandable:** `.presentationDetents([.medium, .large])` or `[.fraction(0.25), .fraction(0.6), .large]`.
59
- - **Content-sized:** `.presentationDetents([.height(measuredHeight)])` using a height read via a preference key (a `sizeThatFits`/`GeometryReader` measured content height), then scroll past the cap.
60
- - **Pinned bottom CTA (part of the screen, not a modal):** `.safeAreaInset(edge: .bottom) { CTA() }` - reserves space, screen stays interactive. This is NOT a presented sheet.
61
- - **Backdrop behavior:** dim+block is the `.sheet` default; passthrough/interactive-behind uses `.presentationBackgroundInteraction(.enabled(...))`.
62
- - **Multi-step in-sheet flow:** drive a `NavigationStack(path:)` *inside* the sheet content for push/pop, resizing detents per step; each step is a headless view emitting `Output` (see `/figma-navigation`). If the target project's custom engine forbids a nested `NavigationStack`, use its engine (config hook).
63
- - **Overlays over a sheet:** mount the toast/HUD host on the sheet content (`/figma-overlays`), not the root.
64
-
65
- Tokens per `reference/ui` + figma-config token patterns.
66
-
67
- ## Config hook - project-supplied detent-sheet engine
68
-
69
- When `figma-config.json` declares:
70
- ```jsonc
71
- "ui": { "sheetSystem": {
72
- "mode": "custom",
73
- "brandedModifier": "bottomSheet", // .bottomSheet(isPresented:title:) branded entry
74
- "headlessModifiers": ["modalSheet", "dockedSheet", "expandableSheet", "detentNavigationSheet"],
75
- "detentType": "SheetDetentType", // detent enum
76
- "backdropType": "Backdrop", // backdrop enum
77
- "cornerRadiusToken": ".CornerRadius.radius12" // example: your branded top-corner radius token
78
- }}
79
- ```
80
- apply the SAME rules via the project's engine (names from config, do NOT hardcode):
81
- - Use `.{brandedModifier}` for product sheets needing brand chrome; the headless modifiers for unbranded surfaces / CTAs / resizable panels / multi-step flows.
82
- - Detents/backdrops use `{detentType}`/`{backdropType}` values; corner radius from `{cornerRadiusToken}`.
83
- - Multi-step flows use the engine's navigation sheet (e.g. `detentNavigationSheet` with a `Navigator<Route>`) rather than a raw nested `NavigationStack`.
84
- - One container-owned grabber (pass custom headers grabberless if the engine draws the grabber).
85
- - Present only from the surface's own host - never walk the scene/window hierarchy for a "top" controller.
86
-
87
- If `mode` is absent or `native`, use the native-first section.
88
-
89
- ## Android (Jetpack Compose)
90
-
91
- Same rules, Compose vocabulary. Default is Material3; a project sheet engine is used only when `ui.sheetSystem.mode == "custom"`.
92
-
93
- - **Half / expandable / drawer:** `ModalBottomSheet(onDismissRequest = { showSheet = false }, sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = false)) { Content() }`. The caller owns `var showSheet by remember` and the `SheetState`; the Figma-authored composable is the **content**.
94
- - **Detents / snap points:** Material3 exposes partial + expanded (`skipPartiallyExpanded`, `SheetValue`); for finer snap points use an `AnchoredDraggable`-based sheet. Don't hard-code pixel heights - derive from content / fractions.
95
- - **Content-sized:** let the content wrap-height; the sheet grows to content then scrolls (inner `Column`/`LazyColumn` with `verticalScroll`).
96
- - **Pinned bottom CTA (part of the screen, not a sheet):** `Scaffold(bottomBar = { CTA() })` - reserves space, screen stays interactive. Not a `ModalBottomSheet`.
97
- - **Multi-step in-sheet flow:** host a nested `NavHost` (or step state) inside the sheet content, resizing per step; each step is a headless composable emitting events (see `/figma-navigation`).
98
- - **Overlays over the sheet:** show `Snackbar`/`AlertDialog` scoped to the sheet content (`/figma-overlays`), not the root.
99
-
100
- **Config hook:** `ui.sheetSystem.mode == "custom"` → use the project's `{brandedModifier}` / headless composables + `{detentType}` / `{backdropType}` and radius from `{cornerRadiusToken}`, resolved from config.
101
-
102
- Corner radius / grabber / insets from tokens (`MaterialTheme.shapes` / figma-config), not literals.
103
-
104
- ---
105
-
106
- ## Integration with Phase 3D
107
-
108
- Record in `04b_component_architecture.md`:
109
-
110
- ```markdown
111
- ## Bottom Sheet
112
- | Signal | Surface | Detents | Owner |
113
- |---|---|---|---|
114
- | Half-sheet picker | presented sheet | [.medium, .large] | caller owns isPresented |
115
- | Sticky "Devam Et" bar | pinned bottom CTA | n/a (safeAreaInset) | part of screen |
116
- | 3-step add flow | multi-step in-sheet | per-step (content height) | caller drives path |
117
- ```
118
-
119
- Property classification addition:
120
-
121
- | Classification | When | Swift Pattern |
122
- |---|---|---|
123
- | Sheet content | Component is authored to live inside a sheet | plain component; caller adds `.presentationDetents(...)` |
124
- | Present-child-as-sheet | Component reveals a child surface | caller-owned `isPresented`/`item` + `.sheet` (component emits the trigger intent) |
125
- | Pinned CTA | Sticky bottom action bar | `.safeAreaInset(edge:.bottom)` at the screen, not a modal |
126
-
127
- ## Integration with Phase 4B
128
- - Author the component as sheet **content**; let the caller own presentation + detents.
129
- - Prefer semantic detents; content-sized sheets measure height via a preference key.
130
- - Pinned CTA = `.safeAreaInset(edge:.bottom)`, not a presented sheet.
131
- - Multi-step flow = `NavigationStack` inside the sheet (native) or the engine's nav sheet (custom).
132
- - If `ui.sheetSystem.mode == custom`, use `{brandedModifier}`/headless modifiers + `{detentType}`/`{backdropType}` per config.
133
- - Verify on the simulator across detents, backdrop, and drag/dismiss on the project's min + current iOS.
134
-
135
- ---
136
-
137
- ## When NOT to Use Bottom-Sheet Integration
138
- - Toast/HUD/alert/data modal card → `/figma-overlays`.
139
- - Screen routing/tabs/deep links → `/figma-navigation`.
140
- - An inline expandable/disclosure within page flow → plain component content.
141
-
142
- ## Checklist - Before Leaving the Skill
143
- ```
144
- [ ] Component is sheet CONTENT; caller owns isPresented/item + detents
145
- [ ] Detents ascend, max 3; semantic detents preferred; no magic-number heights
146
- [ ] Pinned CTA uses safeAreaInset(edge:.bottom), not a presented sheet
147
- [ ] Content-sized sheet measures height via preference key, then scrolls
148
- [ ] Multi-step flow uses NavigationStack-in-sheet (native) or engine nav sheet (custom)
149
- [ ] Corner radius / grabber / insets from tokens, not literals
150
- [ ] Default native SwiftUI; custom engine only when figma-config ui.sheetSystem.mode == custom
151
- [ ] Overlays over the sheet mount on the sheet content surface
152
- ```