@mmerterden/multi-agent-pipeline 11.2.0 → 11.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +2 -2
  3. package/docs/FIGMA_PIPELINE.md +12 -25
  4. package/docs/architecture.md +3 -5
  5. package/docs/features.md +8 -8
  6. package/install/_dev-only-files.mjs +0 -6
  7. package/install/claude.mjs +33 -15
  8. package/install/copilot.mjs +16 -14
  9. package/install/templates/copilot-instructions.md +3 -3
  10. package/package.json +1 -1
  11. package/pipeline/commands/{multi-agent.md → multi-agent/SKILL.md} +39 -39
  12. package/pipeline/commands/multi-agent/{analysis.md → analysis/SKILL.md} +18 -18
  13. package/pipeline/commands/multi-agent/{analysis-resolve.md → analysis-resolve/SKILL.md} +4 -4
  14. package/pipeline/commands/multi-agent/{autopilot.md → autopilot/SKILL.md} +4 -4
  15. package/pipeline/commands/multi-agent/{build-optimize.md → build-optimize/SKILL.md} +1 -1
  16. package/pipeline/commands/multi-agent/{channels.md → channels/SKILL.md} +12 -12
  17. package/pipeline/commands/multi-agent/{dev.md → dev/SKILL.md} +4 -4
  18. package/pipeline/commands/multi-agent/{dev-autopilot.md → dev-autopilot/SKILL.md} +4 -4
  19. package/pipeline/commands/multi-agent/{dev-local.md → dev-local/SKILL.md} +5 -5
  20. package/pipeline/commands/multi-agent/{dev-local-autopilot.md → dev-local-autopilot/SKILL.md} +4 -4
  21. package/pipeline/commands/multi-agent/{finish.md → finish/SKILL.md} +6 -6
  22. package/pipeline/commands/multi-agent/{generate.md → generate/SKILL.md} +3 -3
  23. package/pipeline/commands/multi-agent/{help.md → help/SKILL.md} +4 -4
  24. package/pipeline/commands/multi-agent/{local.md → local/SKILL.md} +5 -5
  25. package/pipeline/commands/multi-agent/{local-autopilot.md → local-autopilot/SKILL.md} +5 -5
  26. package/pipeline/commands/multi-agent/{manual-test.md → manual-test/SKILL.md} +1 -1
  27. package/pipeline/commands/multi-agent/refactor/SKILL.md +257 -0
  28. package/pipeline/commands/multi-agent/{resume.md → resume/SKILL.md} +1 -1
  29. package/pipeline/commands/multi-agent/{review.md → review/SKILL.md} +5 -5
  30. package/pipeline/commands/multi-agent/{setup.md → setup/SKILL.md} +1 -1
  31. package/pipeline/commands/multi-agent/{sync.md → sync/SKILL.md} +20 -58
  32. package/pipeline/{commands/multi-agent → multi-agent-refs}/_account-picker.md +2 -2
  33. package/pipeline/{commands/multi-agent → multi-agent-refs}/_dev-context.md +2 -2
  34. package/pipeline/{commands/multi-agent → multi-agent-refs}/_repo-picker.md +2 -2
  35. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/android-guide.md +1 -1
  36. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/jira.md +1 -1
  37. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/wiki.md +7 -7
  38. package/pipeline/multi-agent-refs/component-dispatch.md +92 -0
  39. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/cross-cli-contract.md +10 -77
  40. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/verify-by-test.md +1 -1
  41. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/generate-issue.md +2 -2
  42. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/issue-jira-triad.md +1 -1
  43. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/keychain.md +1 -1
  44. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/log-format.md +1 -1
  45. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/modes.md +2 -2
  46. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/operations.md +1 -1
  47. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-0-init.md +10 -10
  48. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-1-analysis.md +6 -6
  49. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-2-planning.md +3 -3
  50. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-3-dev.md +10 -10
  51. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-4-review.md +8 -8
  52. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-5-test.md +3 -3
  53. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-6-commit.md +4 -4
  54. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-7-report.md +6 -6
  55. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases.md +12 -12
  56. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/progress-contract.md +4 -4
  57. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/swiftui-guide.md +1 -1
  58. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/tracker-contract.md +3 -3
  59. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/wiki-capture.md +4 -4
  60. package/pipeline/preferences-template.json +17 -1
  61. package/pipeline/rules/figma-pipeline.md +2 -2
  62. package/pipeline/schemas/prefs.schema.json +0 -34
  63. package/pipeline/scripts/README.md +1 -3
  64. package/pipeline/scripts/fixtures/install-layout.tsv +6 -5
  65. package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
  66. package/pipeline/scripts/phase-banner.sh +2 -2
  67. package/pipeline/scripts/review-scope.mjs +94 -0
  68. package/pipeline/scripts/scan-agent-config.sh +2 -2
  69. package/pipeline/scripts/smoke-agent-log-cost.sh +1 -1
  70. package/pipeline/scripts/smoke-agent-model-routing.sh +4 -4
  71. package/pipeline/scripts/smoke-autopilot-circuit-breaker.sh +2 -2
  72. package/pipeline/scripts/smoke-channels-approval-gate.sh +2 -2
  73. package/pipeline/scripts/smoke-channels-flow.sh +5 -5
  74. package/pipeline/scripts/smoke-clarify.sh +1 -1
  75. package/pipeline/scripts/smoke-commands-skills-parity.sh +3 -3
  76. package/pipeline/scripts/smoke-community-gates.sh +1 -1
  77. package/pipeline/scripts/smoke-compliance-skills.sh +2 -2
  78. package/pipeline/scripts/smoke-cost-summary.sh +1 -1
  79. package/pipeline/scripts/smoke-cross-cli-behavior.sh +17 -43
  80. package/pipeline/scripts/smoke-cross-phase-cohesion.sh +1 -1
  81. package/pipeline/scripts/smoke-dev-critic.sh +1 -1
  82. package/pipeline/scripts/smoke-diff-explain.sh +1 -1
  83. package/pipeline/scripts/smoke-diff-risk.sh +1 -1
  84. package/pipeline/scripts/smoke-evidence-gate.sh +1 -1
  85. package/pipeline/scripts/smoke-figma-dispatch.sh +46 -57
  86. package/pipeline/scripts/smoke-gate-hooks.sh +1 -1
  87. package/pipeline/scripts/smoke-generate-issue.sh +8 -8
  88. package/pipeline/scripts/smoke-handoff-contract.sh +3 -3
  89. package/pipeline/scripts/smoke-identity-isolation.sh +2 -2
  90. package/pipeline/scripts/smoke-intent-guard.sh +1 -1
  91. package/pipeline/scripts/smoke-issue-comment-template.sh +2 -2
  92. package/pipeline/scripts/smoke-issue-jira-triad.sh +4 -4
  93. package/pipeline/scripts/smoke-language-axis.sh +6 -6
  94. package/pipeline/scripts/smoke-learnings-ledger.sh +3 -3
  95. package/pipeline/scripts/smoke-mode-dispatch-drift.sh +16 -16
  96. package/pipeline/scripts/smoke-model-fallback.sh +3 -3
  97. package/pipeline/scripts/smoke-multi-repo-integration.sh +2 -2
  98. package/pipeline/scripts/smoke-multi-repo-worktree.sh +1 -1
  99. package/pipeline/scripts/smoke-no-token-prompt.sh +5 -5
  100. package/pipeline/scripts/smoke-phase-0-multi-repo.sh +1 -1
  101. package/pipeline/scripts/smoke-phase-6-multi.sh +1 -1
  102. package/pipeline/scripts/smoke-phase4-gates.sh +45 -0
  103. package/pipeline/scripts/smoke-plan-approval-gate.sh +5 -5
  104. package/pipeline/scripts/smoke-plan-todos.sh +3 -3
  105. package/pipeline/scripts/smoke-pr-review-actions.sh +3 -3
  106. package/pipeline/scripts/smoke-prefs-language.sh +1 -1
  107. package/pipeline/scripts/smoke-progress-contract.sh +2 -2
  108. package/pipeline/scripts/smoke-push-retry.sh +1 -1
  109. package/pipeline/scripts/smoke-repo-map.sh +2 -2
  110. package/pipeline/scripts/smoke-shadow-git.sh +1 -1
  111. package/pipeline/scripts/smoke-skill-authoring.sh +4 -9
  112. package/pipeline/scripts/smoke-tasklist-ordering.sh +10 -10
  113. package/pipeline/scripts/smoke-test-gap.sh +1 -1
  114. package/pipeline/scripts/smoke-token-budget.sh +1 -1
  115. package/pipeline/scripts/smoke-token-preflight.sh +2 -2
  116. package/pipeline/scripts/smoke-tracker-contract.sh +13 -13
  117. package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +5 -5
  118. package/pipeline/scripts/smoke-triage-memory.sh +2 -2
  119. package/pipeline/scripts/smoke-update-check.sh +1 -1
  120. package/pipeline/scripts/smoke-url-enrichment.sh +2 -2
  121. package/pipeline/scripts/smoke-validator-gates.sh +1 -1
  122. package/pipeline/scripts/smoke-verify-by-test.sh +3 -3
  123. package/pipeline/scripts/smoke-wiki-integration.sh +9 -33
  124. package/pipeline/scripts/smoke-work-summary.sh +1 -1
  125. package/pipeline/scripts/smoke-worktree-path-convention.sh +4 -4
  126. package/pipeline/scripts/test-integrity-gate.mjs +83 -0
  127. package/pipeline/scripts/uninstall.mjs +2 -2
  128. package/pipeline/skills/.skill-manifest.json +40 -160
  129. package/pipeline/skills/.skills-index.json +3 -372
  130. package/pipeline/skills/shared/README.md +1 -1
  131. package/pipeline/skills/shared/core/multi-agent/SKILL.md +1 -1
  132. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +2 -2
  133. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +3 -3
  134. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
  135. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +1 -1
  136. package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
  137. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +1 -1
  138. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +116 -51
  139. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +8 -30
  140. package/pipeline/skills/shared/external/compose-components/SKILL.md +14 -14
  141. package/pipeline/skills/skills-index.md +2 -43
  142. package/pipeline/commands/multi-agent/refactor.md +0 -188
  143. package/pipeline/commands/multi-agent/refs/component-dispatch.md +0 -92
  144. package/pipeline/scripts/smoke-existing-discovery-gate.sh +0 -71
  145. package/pipeline/scripts/smoke-figma-android-parity.sh +0 -148
  146. package/pipeline/scripts/smoke-figma-credential-store.sh +0 -105
  147. package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +0 -177
  148. package/pipeline/scripts/smoke-figma-sync.sh +0 -149
  149. package/pipeline/scripts/smoke-sync-delegation.sh +0 -74
  150. package/pipeline/skills/figma-android/README.md +0 -38
  151. package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +0 -62
  152. package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +0 -158
  153. package/pipeline/skills/figma-android/figma-component-test/SKILL.md +0 -120
  154. package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +0 -35
  155. package/pipeline/skills/figma-android/figma-to-component/SKILL.md +0 -124
  156. package/pipeline/skills/figma-common/README.md +0 -64
  157. package/pipeline/skills/figma-common/figma-bottom-sheets/SKILL.md +0 -152
  158. package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +0 -282
  159. package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +0 -503
  160. package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +0 -288
  161. package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +0 -362
  162. package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +0 -206
  163. package/pipeline/skills/figma-common/figma-commit/REVIEW.md +0 -337
  164. package/pipeline/skills/figma-common/figma-commit/SKILL.md +0 -216
  165. package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +0 -223
  166. package/pipeline/skills/figma-common/figma-component-start/SKILL.md +0 -251
  167. package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +0 -78
  168. package/pipeline/skills/figma-common/figma-evolve-component/SKILL.md +0 -61
  169. package/pipeline/skills/figma-common/figma-fix/SKILL.md +0 -321
  170. package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +0 -542
  171. package/pipeline/skills/figma-common/figma-issue/SKILL.md +0 -750
  172. package/pipeline/skills/figma-common/figma-iterate/SKILL.md +0 -208
  173. package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +0 -1020
  174. package/pipeline/skills/figma-common/figma-mend/SKILL.md +0 -331
  175. package/pipeline/skills/figma-common/figma-navigation/SKILL.md +0 -156
  176. package/pipeline/skills/figma-common/figma-overlays/SKILL.md +0 -142
  177. package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +0 -398
  178. package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +0 -104
  179. package/pipeline/skills/figma-common/figma-review/SKILL.md +0 -400
  180. package/pipeline/skills/figma-common/figma-setup/SKILL.md +0 -514
  181. package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +0 -592
  182. package/pipeline/skills/figma-common/figma-skip/SKILL.md +0 -129
  183. package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +0 -105
  184. package/pipeline/skills/figma-common/figma-ui-patterns/patterns/animated-gradient-border.md +0 -116
  185. package/pipeline/skills/figma-common/figma-utility/SKILL.md +0 -274
  186. package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +0 -808
  187. package/pipeline/skills/figma-common/figma-validate/SKILL.md +0 -633
  188. package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +0 -716
  189. package/pipeline/skills/figma-common/performance-review-next/SKILL.md +0 -238
  190. package/pipeline/skills/figma-common/performance-start/SKILL.md +0 -430
  191. package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +0 -706
  192. package/pipeline/skills/figma-common/performance-tour/SKILL.md +0 -423
  193. package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +0 -67
  194. package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +0 -178
  195. package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +0 -184
  196. package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +0 -219
  197. package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +0 -274
  198. package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +0 -416
  199. package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +0 -57
  200. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +0 -307
  201. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +0 -119
  202. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +0 -174
  203. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +0 -333
  204. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +0 -368
  205. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +0 -393
  206. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +0 -617
  207. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +0 -352
  208. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +0 -337
  209. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +0 -206
  210. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +0 -235
  211. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +0 -214
  212. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +0 -902
  213. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +0 -156
  214. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +0 -175
  215. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +0 -176
  216. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +0 -333
  217. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +0 -412
  218. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +0 -336
  219. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +0 -705
  220. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +0 -332
  221. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +0 -380
  222. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +0 -262
  223. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +0 -482
  224. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +0 -274
  225. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +0 -636
  226. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +0 -142
  227. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +0 -547
  228. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +0 -39
  229. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +0 -659
  230. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +0 -580
  231. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +0 -51
  232. package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +0 -183
  233. package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +0 -64
  234. package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +0 -531
  235. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +0 -89
  236. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +0 -155
  237. package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +0 -196
  238. package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +0 -57
  239. package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +0 -89
  240. package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +0 -227
  241. package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +0 -157
  242. package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +0 -90
  243. package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +0 -116
  244. package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +0 -153
  245. package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +0 -130
  246. package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +0 -218
  247. package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +0 -188
  248. package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +0 -93
  249. package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +0 -98
  250. package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +0 -261
  251. package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +0 -147
  252. package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +0 -182
  253. package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +0 -185
  254. package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +0 -609
  255. package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +0 -332
  256. package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +0 -261
  257. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +0 -184
  258. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +0 -188
  259. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +0 -768
  260. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +0 -191
  261. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +0 -420
  262. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.example.json +0 -9
  263. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +0 -336
  264. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +0 -391
  265. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +0 -292
  266. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +0 -1
  267. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +0 -93
  268. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +0 -299
  269. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +0 -343
  270. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +0 -206
  271. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +0 -149
  272. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +0 -281
  273. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +0 -332
  274. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +0 -176
  275. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +0 -98
  276. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +0 -298
  277. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +0 -195
  278. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +0 -1298
  279. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +0 -228
  280. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +0 -1089
  281. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +0 -141
  282. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +0 -106
  283. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +0 -162
  284. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +0 -105
  285. package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +0 -179
  286. package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +0 -260
  287. package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +0 -260
  288. package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +0 -86
  289. package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +0 -321
  290. package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +0 -1470
  291. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +0 -176
  292. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +0 -147
  293. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +0 -629
  294. /package/pipeline/commands/multi-agent/{delete.md → delete/SKILL.md} +0 -0
  295. /package/pipeline/commands/multi-agent/{diff-explain.md → diff-explain/SKILL.md} +0 -0
  296. /package/pipeline/commands/multi-agent/{garbage-collect.md → garbage-collect/SKILL.md} +0 -0
  297. /package/pipeline/commands/multi-agent/{issue.md → issue/SKILL.md} +0 -0
  298. /package/pipeline/commands/multi-agent/{jira.md → jira/SKILL.md} +0 -0
  299. /package/pipeline/commands/multi-agent/{kill.md → kill/SKILL.md} +0 -0
  300. /package/pipeline/commands/multi-agent/{language.md → language/SKILL.md} +0 -0
  301. /package/pipeline/commands/multi-agent/{log.md → log/SKILL.md} +0 -0
  302. /package/pipeline/commands/multi-agent/{prune-logs.md → prune-logs/SKILL.md} +0 -0
  303. /package/pipeline/commands/multi-agent/{purge.md → purge/SKILL.md} +0 -0
  304. /package/pipeline/commands/multi-agent/{scan.md → scan/SKILL.md} +0 -0
  305. /package/pipeline/commands/multi-agent/{search.md → search/SKILL.md} +0 -0
  306. /package/pipeline/commands/multi-agent/{stack.md → stack/SKILL.md} +0 -0
  307. /package/pipeline/commands/multi-agent/{status.md → status/SKILL.md} +0 -0
  308. /package/pipeline/commands/multi-agent/{test.md → test/SKILL.md} +0 -0
  309. /package/pipeline/commands/multi-agent/{update.md → update/SKILL.md} +0 -0
  310. /package/pipeline/{commands/multi-agent → multi-agent-refs}/_input-parser.md +0 -0
  311. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/analysis-template.md +0 -0
  312. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/audit-guide.md +0 -0
  313. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/backend-guide.md +0 -0
  314. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/confluence.md +0 -0
  315. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/issue-comment.md +0 -0
  316. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr-review-actions.md +0 -0
  317. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr.md +0 -0
  318. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/conventions-defaults.md +0 -0
  319. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/autopilot-circuit-breaker.md +0 -0
  320. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/dev-critic.md +0 -0
  321. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/external-context-injection.md +0 -0
  322. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/model-fallback.md +0 -0
  323. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/plan-todos.md +0 -0
  324. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/prior-fix-detection.md +0 -0
  325. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/repo-map.md +0 -0
  326. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/shadow-git.md +0 -0
  327. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/frontend-guide.md +0 -0
  328. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/knowledge.md +0 -0
  329. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/multi-repo-integration-build.md +0 -0
  330. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/picker-contract.md +0 -0
  331. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/rules.md +0 -0
@@ -1,177 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-figma-cross-cli-inventory.sh - enforces the cross-CLI parity
3
- # inventory for the v5.0.0 figma-to-component skill set.
4
- #
5
- # Source-tree assertions (does not require install.js to have deployed
6
- # the skills). Complements smoke-cross-cli-behavior.sh (installed-tree)
7
- # and smoke-commands-skills-parity.sh (multi-agent commands).
8
- #
9
- # Contract source of truth: refs/cross-cli-contract.md section1.1.
10
- #
11
- # Verifies:
12
- # 1. Every platform-specific figma-android skill exists in figma-ios too.
13
- # 2. Every required figma-* skill from the contract table exists in figma-ios.
14
- # 3. Every SKILL.md that claims "platform: android" lives under figma-android/.
15
- # 4. Every SKILL.md that claims "platform: ios" lives under figma-ios/.
16
- # 5. No orphaned figma skill directories (not in the contract).
17
- # 6. Contract doc references both figma-ios and figma-android paths.
18
-
19
- set -euo pipefail
20
-
21
- HERE="$(cd "$(dirname "$0")" && pwd)"
22
- ROOT="$(cd "$HERE/../.." && pwd)"
23
- IOS_DIR="$ROOT/pipeline/skills/figma-ios"
24
- ANDROID_DIR="$ROOT/pipeline/skills/figma-android"
25
- COMMON_DIR="$ROOT/pipeline/skills/figma-common"
26
- CONTRACT="$ROOT/pipeline/commands/multi-agent/refs/cross-cli-contract.md"
27
-
28
- PASS=0
29
- FAIL=0
30
- pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
31
- fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
32
-
33
- for d in "$IOS_DIR" "$ANDROID_DIR" "$COMMON_DIR"; do
34
- [ -d "$d" ] || { echo "error: $d missing" >&2; exit 1; }
35
- done
36
- [ -f "$CONTRACT" ] || { echo "error: $CONTRACT missing" >&2; exit 1; }
37
-
38
- # Platform-specific skills (required on BOTH sides per contract)
39
- PLATFORM_SPECIFIC=(
40
- figma-to-component
41
- figma-component-implement
42
- figma-component-test
43
- figma-component-code-connect
44
- figma-component-wiki
45
- )
46
-
47
- # Platform-agnostic (required on at least iOS side today - WS-7b moves to figma-common/)
48
- COMMON_REQUIRED=(
49
- figma-component-start
50
- figma-component-confluence-sync
51
- figma-component-status-update
52
- figma-commit
53
- figma-iteration-commit
54
- figma-issue
55
- figma-iterate
56
- figma-cli-iterate
57
- figma-cli-lean-iterate
58
- figma-cli-iterate-mend
59
- figma-cli-skip
60
- figma-fix
61
- figma-mend
62
- figma-review
63
- figma-validate
64
- figma-setup
65
- figma-remote-mcp-auth
66
- figma-ui-patterns
67
- figma-utility
68
- figma-skip
69
- figma-form-integration
70
- figma-price-integration
71
- )
72
-
73
- echo "→ 1. Platform-specific skills exist on BOTH figma-ios and figma-android"
74
- for skill in "${PLATFORM_SPECIFIC[@]}"; do
75
- ios_ok="false"
76
- and_ok="false"
77
- [ -f "$IOS_DIR/$skill/SKILL.md" ] && ios_ok="true"
78
- [ -f "$ANDROID_DIR/$skill/SKILL.md" ] && and_ok="true"
79
- if [ "$ios_ok" = "true" ] && [ "$and_ok" = "true" ]; then
80
- pass "$skill present on both platforms"
81
- else
82
- fail "$skill parity broken (ios=$ios_ok android=$and_ok)"
83
- fi
84
- done
85
-
86
- echo ""
87
- echo "→ 2. Platform-agnostic skills live in figma-common/ (WS-7b ✓)"
88
- for skill in "${COMMON_REQUIRED[@]}"; do
89
- if [ -f "$COMMON_DIR/$skill/SKILL.md" ]; then
90
- pass "$skill present in figma-common"
91
- else
92
- fail "$skill missing in figma-common"
93
- fi
94
- done
95
-
96
- echo ""
97
- echo "→ 2b. Platform-agnostic skills are NOT duplicated under figma-ios"
98
- DUPES=0
99
- for skill in "${COMMON_REQUIRED[@]}"; do
100
- if [ -d "$IOS_DIR/$skill" ]; then
101
- fail "duplication: $skill exists in BOTH figma-ios/ and figma-common/"
102
- DUPES=$((DUPES+1))
103
- fi
104
- done
105
- [ "$DUPES" -eq 0 ] && pass "no common-skill duplication in figma-ios"
106
-
107
- echo ""
108
- echo "→ 3. figma-android SKILL.md files stamp platform: android"
109
- while IFS= read -r -d '' f; do
110
- base=$(dirname "$f" | xargs basename)
111
- if head -n 1 "$f" | grep -Fxq -- "---"; then
112
- if awk '/^---$/{c++; next} c==1' "$f" | grep -Fq "platform: android"; then
113
- pass "$base stamps platform: android"
114
- else
115
- fail "$base missing 'platform: android' stamp"
116
- fi
117
- fi
118
- done < <(find "$ANDROID_DIR" -maxdepth 2 -name SKILL.md -print0)
119
-
120
- echo ""
121
- echo "→ 4. figma-ios SKILL.md files do NOT claim platform: android (only ios or none)"
122
- while IFS= read -r -d '' f; do
123
- if awk '/^---$/{c++; next} c==1' "$f" | grep -Fq "platform: android"; then
124
- fail "$(dirname "$f" | xargs basename) claims platform: android but lives under figma-ios/"
125
- fi
126
- done < <(find "$IOS_DIR" -maxdepth 2 -name SKILL.md -print0)
127
- pass "no cross-platform stamp leakage in figma-ios/"
128
-
129
- echo ""
130
- echo "→ 5. No orphaned figma-android directories (contract-table inventory)"
131
- EXPECTED_ANDROID=("${PLATFORM_SPECIFIC[@]}")
132
- ORPHANS=0
133
- for d in "$ANDROID_DIR"/*/; do
134
- [ -d "$d" ] || continue
135
- name=$(basename "$d")
136
- case " ${EXPECTED_ANDROID[*]} " in
137
- *" $name "*) ;;
138
- *) fail "unexpected dir: figma-android/$name (not in contract)"; ORPHANS=$((ORPHANS+1)) ;;
139
- esac
140
- done
141
- [ "$ORPHANS" -eq 0 ] && pass "no orphaned figma-android directories"
142
-
143
- echo ""
144
- echo "→ 6. cross-cli-contract.md references both platforms"
145
- if grep -Fq "pipeline/skills/figma-ios" "$CONTRACT" && grep -Fq "pipeline/skills/figma-android" "$CONTRACT"; then
146
- pass "contract references figma-ios + figma-android paths"
147
- else
148
- fail "contract missing one or both figma platform paths"
149
- fi
150
-
151
- echo ""
152
- echo "→ 7. Contract section 1.1 present (figma subphase skills section)"
153
- if grep -Fq "1.1 Figma component subphase skills" "$CONTRACT"; then
154
- pass "section 1.1 heading present"
155
- else
156
- fail "section 1.1 heading missing"
157
- fi
158
-
159
- echo ""
160
- echo "→ 8. Contract section 1.2 routing rules present"
161
- if grep -Fq "1.2 Figma-skill routing from multi-agent" "$CONTRACT"; then
162
- pass "section 1.2 heading present"
163
- else
164
- fail "section 1.2 heading missing"
165
- fi
166
-
167
- echo ""
168
- echo "→ 9. Contract section 1.3 frontmatter requirements present"
169
- if grep -Fq "1.3 Figma skill frontmatter" "$CONTRACT"; then
170
- pass "section 1.3 heading present"
171
- else
172
- fail "section 1.3 heading missing"
173
- fi
174
-
175
- echo ""
176
- echo "══ figma-cross-cli-inventory smoke: $PASS passed, $FAIL failed ══"
177
- [ "$FAIL" -eq 0 ]
@@ -1,149 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-figma-sync.sh - WS-9 contract for sync-figma-source.sh.
3
- #
4
- # Verifies:
5
- # 1. sync script exists + executable.
6
- # 2. prefs.schema.json declares global.figmaSource with correct shape.
7
- # 3. sync script handles missing figmaSource gracefully (exit 0 w/ message).
8
- # 4. sync script handles missing path file.
9
- # 5. dry-run mode writes nothing.
10
- # 6. CHANGELOG note format is correct (includes `### Sync YYYY-MM-DD`).
11
- # 7. Watermark update logic (lastCommit + lastSyncedAt) runs atomically.
12
-
13
- set -euo pipefail
14
-
15
- HERE="$(cd "$(dirname "$0")" && pwd)"
16
- ROOT="$(cd "$HERE/../.." && pwd)"
17
- SYNC="$ROOT/pipeline/scripts/sync-figma-source.sh"
18
- SCHEMA="$ROOT/pipeline/schemas/prefs.schema.json"
19
- TMP="$(mktemp -d -t figma-sync-smoke-XXXX)"
20
- trap 'rm -rf "$TMP"' EXIT
21
-
22
- PASS=0
23
- FAIL=0
24
- pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
25
- fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
26
-
27
- need() { command -v "$1" >/dev/null 2>&1 || { echo "error: $1 required" >&2; exit 127; }; }
28
- need jq
29
- need git
30
-
31
- [ -x "$SYNC" ] && pass "sync script exists and is executable" || fail "sync script not executable at $SYNC"
32
-
33
- echo ""
34
- echo "→ 2. prefs schema declares global.figmaSource with correct shape"
35
- for field in path branch lastSyncedAt lastCommit; do
36
- if jq -e ".properties.global.properties.figmaSource.properties.$field" "$SCHEMA" >/dev/null 2>&1; then
37
- pass "figmaSource.$field declared"
38
- else
39
- fail "figmaSource.$field missing from schema"
40
- fi
41
- done
42
-
43
- echo ""
44
- echo "→ 3. missing figmaSource → exit 0 with skip message"
45
- cat > "$TMP/prefs-no-source.json" <<'EOF'
46
- { "schemaVersion": "2.1.0", "global": {}, "projects": {} }
47
- EOF
48
- OUT=$(MULTI_AGENT_PREFS="$TMP/prefs-no-source.json" bash "$SYNC" 2>&1)
49
- RC=$?
50
- if [ "$RC" -eq 0 ] && echo "$OUT" | grep -Fq "figmaSource not configured"; then
51
- pass "gracefully handles missing figmaSource"
52
- else
53
- fail "did not skip cleanly (rc=$RC, out: $OUT)"
54
- fi
55
-
56
- echo ""
57
- echo "→ 4. figmaSource.path missing on disk → exit 1 with error"
58
- cat > "$TMP/prefs-bad-path.json" <<EOF
59
- { "schemaVersion": "2.1.0", "global": { "figmaSource": { "path": "$TMP/does-not-exist", "branch": "develop" } }, "projects": {} }
60
- EOF
61
- set +e
62
- OUT=$(MULTI_AGENT_PREFS="$TMP/prefs-bad-path.json" bash "$SYNC" 2>&1)
63
- RC=$?
64
- set -e
65
- if [ "$RC" -ne 0 ] && echo "$OUT" | grep -Fq "does not exist"; then
66
- pass "errors cleanly on missing path"
67
- else
68
- fail "did not error on missing path (rc=$RC)"
69
- fi
70
-
71
- echo ""
72
- echo "→ 5. dry-run mode does not mutate prefs"
73
- # Build a tiny fake source with .instructions/figma/sample/SKILL.md
74
- FAKE_SRC="$TMP/fake-src"
75
- mkdir -p "$FAKE_SRC/.instructions/figma/sample" "$FAKE_SRC/.claude/skills/sample"
76
- cat > "$FAKE_SRC/.instructions/figma/sample/SKILL.md" <<'EOF'
77
- ---
78
- name: sample
79
- description: smoke fixture
80
- ---
81
- # sample
82
- EOF
83
- cat > "$FAKE_SRC/.claude/skills/sample/SKILL.md" <<'EOF'
84
- ---
85
- name: sample
86
- description: smoke stub
87
- ---
88
- # sample stub
89
- EOF
90
- (cd "$FAKE_SRC" && git init -q && git -c user.email=t@t -c user.name=t add . && git -c user.email=t@t -c user.name=t commit -q -m init)
91
- PREFS_BEFORE="$TMP/prefs-dry.json"
92
- cat > "$PREFS_BEFORE" <<EOF
93
- { "schemaVersion": "2.1.0", "global": { "figmaSource": { "path": "$FAKE_SRC", "branch": "main" } }, "projects": {} }
94
- EOF
95
- CHECKSUM_BEFORE=$(jq -c '.' "$PREFS_BEFORE" | shasum | awk '{print $1}')
96
- MULTI_AGENT_PREFS="$PREFS_BEFORE" bash "$SYNC" --dry-run >/dev/null 2>&1 || true
97
- CHECKSUM_AFTER=$(jq -c '.' "$PREFS_BEFORE" | shasum | awk '{print $1}')
98
- [ "$CHECKSUM_BEFORE" = "$CHECKSUM_AFTER" ] && pass "dry-run leaves prefs untouched" || fail "dry-run mutated prefs"
99
-
100
- echo ""
101
- echo "→ 6. CHANGELOG heading pattern used by sync (grep shape)"
102
- if grep -Fq '### Sync $(date' "$SYNC" || grep -Eq '### Sync \$\(date' "$SYNC"; then
103
- pass "sync emits '### Sync YYYY-MM-DD' heading"
104
- else
105
- fail "sync script does not emit the canonical CHANGELOG heading"
106
- fi
107
-
108
- echo ""
109
- echo "→ 7. Watermark update uses atomic rename"
110
- if grep -Fq "mv \"\$TMP\" \"\$PREFS_FILE\"" "$SYNC"; then
111
- pass "atomic rename on prefs update"
112
- else
113
- fail "no atomic rename in sync script"
114
- fi
115
-
116
- echo ""
117
- echo "→ 8. --force-full flag is recognised"
118
- if grep -Fq -- "--force-full" "$SYNC"; then
119
- pass "force-full flag supported"
120
- else
121
- fail "force-full flag missing"
122
- fi
123
-
124
- echo ""
125
- echo "→ 9. --plan flag writes a structured JSON plan artifact"
126
- if grep -Fq -- "--plan" "$SYNC"; then
127
- pass "plan flag recognised"
128
- else
129
- fail "plan flag missing"
130
- fi
131
- if grep -Fq ".last-figma-sync-plan.json" "$SYNC"; then
132
- pass "plan writes to .last-figma-sync-plan.json"
133
- else
134
- fail "plan output path missing"
135
- fi
136
- if grep -Fq "overlaySkip" "$SYNC"; then
137
- pass "plan records overlay-skip per skill"
138
- else
139
- fail "plan does not record overlaySkip"
140
- fi
141
- if grep -Fq "tree" "$SYNC" && grep -Fq "figma-ios" "$SYNC" && grep -Fq "figma-common" "$SYNC"; then
142
- pass "plan records destination tree (figma-ios vs figma-common)"
143
- else
144
- fail "plan missing tree routing info"
145
- fi
146
-
147
- echo ""
148
- echo "══ figma-sync smoke: $PASS passed, $FAIL failed ══"
149
- [ "$FAIL" -eq 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.