@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,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.