@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,331 +0,0 @@
1
- ---
2
- name: figma-mend
3
- description: Re-implements discarded components from scratch using the figma-to-swiftui workflow, preserving old implementation as complementary reference for animations, domain logic, and UI refinements. Cleans up old files after completion.
4
- user-invocable: true
5
- argument-hint: <figma-url> [--name ComponentName] | cleanup | status
6
- allowed-tools: Task, Read, Glob, Grep, Bash, Write, Edit, AskUserQuestion
7
- status: wip-v5
8
- sourced-from: upstream/figma-mend
9
- ---
10
-
11
- # /figma-mend - Re-implement Discarded Components
12
-
13
- This skill wraps the full `figma-to-swiftui` workflow (Phases 0-8) with two additions:
14
- 1. **Pre-flight**: Locates old component in `Discarded/`, catalogs all its files
15
- 2. **Cleanup**: Deletes old files after successful re-implementation
16
-
17
- All phase instructions, scripts, and references come from `.instructions/figma/figma-to-swiftui/`. Nothing is duplicated.
18
-
19
- ---
20
-
21
- ## Parse Arguments
22
-
23
- `$ARGUMENTS` determines the mode:
24
-
25
- | Input | Mode | Action |
26
- |-------|------|--------|
27
- | `https://www.figma.com/design/...` | **Start** | Pre-flight → Phase 0-8 → Cleanup |
28
- | URL + `--name ComponentName` | **Start** | Same, with explicit name override |
29
- | `phase-0` through `phase-8` | **Resume** | Read mend-context.json, dispatch with old file injection |
30
- | `cleanup` | **Cleanup** | Delete old files only (manual invocation) |
31
- | `status` | **Status** | Read IMPLEMENTATION_HISTORY.md + mend-context.json |
32
-
33
- ### URL Parsing
34
-
35
- Same as figma-to-swiftui: extract `fileKey` and `nodeId`, convert `-` to `:` in node-id.
36
-
37
- ---
38
-
39
- ## Pre-Flight Phase (orchestrator-level - no subagent)
40
-
41
- Run BEFORE Phase 0. Uses Grep/Glob/Bash directly in the main orchestrator.
42
-
43
- ### PRE-1: LOCATE_OLD_COMPONENT
44
-
45
- Search for the old component in `Discarded/` using these strategies in order:
46
-
47
- ```bash
48
- UICOMP="{repos.components.path}/Sources/UIComponents"
49
-
50
- # 1. By node ID in FIGMA.md
51
- grep -rl "{nodeId}" --include="FIGMA.md" "$UICOMP/Discarded/"
52
-
53
- # 2. By node ID (dash format) in FIGMA.md
54
- grep -rl "{nodeIdDash}" --include="FIGMA.md" "$UICOMP/Discarded/"
55
-
56
- # 3. By node ID in .figma.swift
57
- grep -rl "{nodeId}" --include="*.figma.swift" "$UICOMP/Discarded/"
58
-
59
- # 4. By --name argument (directory match)
60
- find "$UICOMP/Discarded/" -type d -name "{nameOverride}"
61
- ```
62
-
63
- If no match → HALT:
64
- ```
65
- STATUS: HALT | GATE: LOCATE_OLD_COMPONENT
66
- REASON: No discarded component found for node {nodeId}.
67
- USER_ACTION_REQUIRED: Verify this component exists in Discarded/ or use /figma-to-swiftui instead.
68
- ```
69
-
70
- Extract `oldComponentPath` (directory) and `oldComponentName` (directory name).
71
-
72
- ### PRE-2: CATALOG_OLD_FILES
73
-
74
- Catalog ALL files related to the old component:
75
-
76
- ```bash
77
- TESTS="{repos.components.path}/Tests/UIComponentsTests"
78
- ARTIFACTS="{repos.artifactsRepo}/ImplementationArtifacts"
79
-
80
- # Sources (all .swift in old directory)
81
- find "{oldComponentPath}" -name "*.swift" -type f
82
-
83
- # Tests (search by old component name)
84
- find "$TESTS/Snapshot" -type d -name "{OldComponentName}"
85
- find "$TESTS/ViewInspector" -type d -name "{OldComponentName}"
86
- find "$TESTS/Components" -path "*{OldComponentName}*" -name "*.swift"
87
-
88
- # Artifacts
89
- find "$ARTIFACTS/Figma/Components" -type d -name "{OldComponentName}"
90
- find "$ARTIFACTS/Confluence" -type d -name "{OldComponentName}"
91
- ```
92
-
93
- Store as `oldFilesCatalog`:
94
- - `sources`: list of .swift file paths
95
- - `codeConnect`: list of .figma.swift paths
96
- - `documentation`: FIGMA.md path (if exists)
97
- - `tests.snapshot`: snapshot test directory (if exists)
98
- - `tests.viewInspector`: viewInspector test directory (if exists)
99
- - `tests.unit`: unit test files (if exist)
100
- - `artifacts`: old artifact directory (if exists)
101
- - `confluence`: old confluence directory (if exists)
102
-
103
- ### PRE-3: NAME_RESOLUTION
104
-
105
- - `oldComponentName` = directory name from PRE-1
106
- - `newComponentName` = `--name` override if provided, else will be resolved by Phase 0 registry lookup
107
- - If names differ, record: `"nameChanged": true`
108
-
109
- ### PRE-4: STORE CONTEXT (deferred)
110
-
111
- Hold the catalog in memory. Write `mend-context.json` to `{artifactPath}/` immediately AFTER Phase 0 creates the artifact directory.
112
-
113
- ---
114
-
115
- ## Phase Execution
116
-
117
- Follow the EXACT same execution order as `.instructions/figma/figma-to-swiftui/SKILL.md`:
118
-
119
- ```
120
- 0 (Init) → 1 (Gather) → 2A → 2B → 2C → 2D → 3 (Analysis) → 4 (Implementation) → 5A → 5B → 5C → 6 (Code Connect) → 7A → 7B → 8 → Cleanup
121
- ```
122
-
123
- ### Dispatch Table
124
-
125
- Use the SAME dispatch table from `.instructions/figma/figma-to-swiftui/SKILL.md` - same phases, same models, same turn limits, same tool restrictions, same phase instruction paths. Do NOT read that file - the table is reproduced here for reference:
126
-
127
- | Phase | Instruction (under figma-to-swiftui/) | Model | Max Turns | Tool Restrictions |
128
- |-------|---------------------------------------|-------|-----------|-------------------|
129
- | 0 | `phases/phase-0-init.md` | opus | 30 | No Edit |
130
- | 1 | `phases/phase-1-gathering.md` + `scripts/phase1-gather.py` | N/A | N/A | Bash only |
131
- | 2A | `phases/phase-2a-testing-identifiers.md` | opus | 25 | No Edit |
132
- | 2B | `phases/phase-2b-localization.md` | sonnet | 25 | No Edit |
133
- | 2C | `phases/phase-2c-accessibility.md` | opus | 25 | No Edit |
134
- | 2D | `phases/phase-2d-analytics.md` | sonnet | 20 | No Edit, No Bash |
135
- | 3A | `phases/phase-3a-location.md` | sonnet | 20 | No Edit |
136
- | 3C | `phases/phase-3c-nested.md` | sonnet | 20 | No Edit |
137
- | 3D | `phases/phase-3d-patterns.md` | opus | 30 | No Edit |
138
- | 4A | `phases/phase-4a-configuration.md` | opus | 30 | ALL allowed |
139
- | 4B | `phases/phase-4b-view.md` | opus | 40 | ALL allowed |
140
- | 4C | `phases/phase-4c-documentation.md` | sonnet | 20 | ALL allowed |
141
- | 4D | `phases/phase-4d-preview.md` | sonnet | 20 | ALL allowed |
142
- | 4E | `phases/phase-4e-modifiers.md` | sonnet | 20 | ALL allowed |
143
- | 5A | `phases/phase-5a-viewinspector.md` | sonnet | 40 | ALL allowed |
144
- | 5B | `phases/phase-5b-snapshot.md` | sonnet | 40 | ALL allowed |
145
- | 5C | `phases/phase-5c-unit.md` | sonnet | 30 | ALL allowed |
146
- | 6 | `phases/phase-6-code-connect.md` | sonnet | 30 | No Edit |
147
- | 7A | `phases/phase-7a-confluence-generate.md` | sonnet | 30 | No Edit |
148
- | 7B | `phases/phase-7b-confluence-upload.md` | sonnet | 15 | No Edit |
149
- | 8 | `phases/phase-8-cleanup.md` | haiku | 10 | ALL allowed |
150
-
151
- ### Phase Routing
152
-
153
- Use the SAME routing logic from figma-to-swiftui SKILL.md for Phase 2, Phase 3, Phase 4, Phase 5, Phase 6, and Phase 7. Read that file's routing sections when dispatching.
154
-
155
- ### Dispatch Prompt Modification
156
-
157
- The ONLY change from figma-to-swiftui: append this section to every AI subagent dispatch prompt (NOT to scripts):
158
-
159
- ```
160
- ## Complementary Reference (Old Implementation)
161
-
162
- This component is being RE-IMPLEMENTED from Discarded/.
163
- Old source files (read as reference - do NOT copy verbatim):
164
- {list of relevant old file paths from oldFilesCatalog - see injection table below}
165
-
166
- Preserve domain-specific patterns if architecturally sound:
167
- - Animations, transitions, gesture handling
168
- - UI refinements (feathered edges, gradients, shadows)
169
- - Domain logic (list handling, data transformation)
170
- - State management patterns
171
- - Variant mappings that were manually refined
172
-
173
- IMPORTANT: New implementation MUST follow current workflow standards
174
- (macros, Configuration pattern, design tokens). Use old code ONLY as reference
175
- for domain logic - not as a template for architecture.
176
- ```
177
-
178
- ### Selective File Injection Table
179
-
180
- Each phase receives ONLY the relevant old files to prevent context bloat:
181
-
182
- | Phase | Old files to inject |
183
- |-------|--------------------|
184
- | 0 | None (standard init) |
185
- | 1 | None (automated script) |
186
- | 2A | Old FIGMA.md, old source files |
187
- | 2B | Old FIGMA.md |
188
- | 2C | Old FIGMA.md, old source files |
189
- | 2D | Old FIGMA.md |
190
- | 3A | None |
191
- | 3C | Old source files |
192
- | 3D | Old source files, old modifier files |
193
- | 3B/3E/3F/3G | None (automated scripts) |
194
- | 4A | Old Configuration + Model files |
195
- | 4B | ALL old source files (primary reference phase) |
196
- | 4C | Old FIGMA.md |
197
- | 4D | Old source files |
198
- | 4E | Old modifier files |
199
- | 5A | Old ViewInspector test files (if exist) |
200
- | 5B | Old Snapshot test files (if exist) |
201
- | 5C | Old unit test files (if exist) |
202
- | 6 | Old .figma.swift file |
203
- | 7A, 7B | None |
204
- | 8 | None |
205
-
206
- ### After Phase 0 Completes
207
-
208
- Write `mend-context.json` to `{artifactPath}/`:
209
-
210
- ```json
211
- {
212
- "mode": "mend",
213
- "oldComponentName": "{oldComponentName}",
214
- "oldComponentPath": "{oldComponentPath}",
215
- "oldFiles": {
216
- "sources": ["{path1}", "{path2}"],
217
- "codeConnect": ["{path}"],
218
- "documentation": "{path}",
219
- "tests": {
220
- "snapshot": "{dirPath or null}",
221
- "viewInspector": "{dirPath or null}",
222
- "unit": "{filePath or null}"
223
- },
224
- "artifacts": "{dirPath or null}",
225
- "confluence": "{dirPath or null}"
226
- },
227
- "nameChanged": false,
228
- "newComponentName": "{newComponentName}"
229
- }
230
- ```
231
-
232
- ---
233
-
234
- ## Cleanup Phase
235
-
236
- Runs automatically after Phase 8, or manually via `/figma-mend cleanup`.
237
-
238
- ### CLEANUP-1: VERIFY_NEW_IMPLEMENTATION
239
-
240
- ```bash
241
- # Check new component exists
242
- ls {componentLocation}/{ComponentName}.swift
243
-
244
- # Check it builds
245
- xcodebuild build -project {build.xcodeproj} -scheme UIComponents \
246
- -destination 'generic/platform=iOS' CODE_SIGNING_ALLOWED=NO -quiet
247
- ```
248
-
249
- If new component missing or build fails → HALT. Do NOT delete old files.
250
-
251
- ### CLEANUP-2: DELETE_OLD_SOURCE
252
-
253
- ```bash
254
- rm -rf {oldComponentPath}
255
- ```
256
-
257
- Walk up parent directories (max 3 levels) and remove if empty.
258
-
259
- ### CLEANUP-3: DELETE_OLD_TESTS
260
-
261
- For each test directory in `oldFilesCatalog.tests`:
262
- ```bash
263
- rm -rf {testDir} # snapshot, viewInspector, unit test directories
264
- ```
265
-
266
- Walk up parent directories and remove if empty.
267
-
268
- ### CLEANUP-4: DELETE_OLD_ARTIFACTS
269
-
270
- ```bash
271
- # Old Figma artifacts
272
- rm -rf {oldFilesCatalog.artifacts}
273
-
274
- # Old Confluence artifacts
275
- rm -rf {oldFilesCatalog.confluence}
276
- ```
277
-
278
- ### CLEANUP-5: VERIFY_BUILD
279
-
280
- ```bash
281
- xcodebuild build -project {build.xcodeproj} -scheme UIComponents \
282
- -destination 'generic/platform=iOS' CODE_SIGNING_ALLOWED=NO -quiet
283
- ```
284
-
285
- Report result. Old files were in `Discarded/` (excluded from compilation) so deletion should not break anything.
286
-
287
- ### CLEANUP-6: UPDATE_HISTORY
288
-
289
- Append to `{artifactPath}/IMPLEMENTATION_HISTORY.md`:
290
-
291
- ```markdown
292
- ## Mend Cleanup
293
- - Old component: {oldComponentName} at {oldComponentPath}
294
- - Sources deleted: {count} files
295
- - Tests deleted: {count} files/directories
296
- - Artifacts deleted: {count} directories
297
- - Build verified: yes/no
298
- - Date: {DD.MM.YYYY}
299
- ```
300
-
301
- ---
302
-
303
- ## Resume Mode
304
-
305
- When `$ARGUMENTS` is `phase-N`:
306
-
307
- 1. Search for `mend-context.json` in `ImplementationArtifacts/Figma/Components/`
308
- 2. Read it + IMPLEMENTATION_HISTORY.md to restore: oldComponentPath, oldFiles, componentName, fileKey, nodeId, artifactPath, componentLocation
309
- 3. Dispatch the requested phase with old file injection from the catalog
310
-
311
- If `mend-context.json` not found → HALT. Run the full workflow from a Figma URL instead.
312
-
313
- ---
314
-
315
- ## Cleanup Mode
316
-
317
- When `$ARGUMENTS` is `cleanup`:
318
-
319
- 1. Search for `mend-context.json` in `ImplementationArtifacts/Figma/Components/`
320
- 2. Read it to get old file catalog
321
- 3. Read IMPLEMENTATION_HISTORY.md to get componentLocation and componentName
322
- 4. Execute Cleanup Phase (CLEANUP-1 through CLEANUP-6)
323
-
324
- ---
325
-
326
- ## Status Mode
327
-
328
- When `$ARGUMENTS` is `status`:
329
-
330
- 1. Search for all `mend-context.json` files in `ImplementationArtifacts/Figma/Components/`
331
- 2. For each, display: component name, old → new name, current phase, cleanup status
@@ -1,156 +0,0 @@
1
- ---
2
- name: figma-navigation
3
- description: "Navigation pattern integration for Figma-to-UI components (iOS SwiftUI + Android Jetpack Compose). Guides how a component reaches other screens, tabs, or deep links without coupling to a router — headless screens that emit a typed Output/event, native NavigationStack (iOS) / Navigation Compose (Android) by default, an optional project-supplied navigation system when figma-config declares one. Reach for this when a design embeds a tab bar, nav bar / back button, a push/detail affordance, or a deep-link entry point."
4
- user-invocable: true
5
- allowed-tools: Read, Glob, Grep
6
- status: wip-v5
7
- sourced-from: upstream/figma-navigation
8
- ---
9
-
10
- # /figma-navigation - Navigation Pattern Integration
11
-
12
- ## Purpose
13
-
14
- Consumed by the figma-to-swiftui pipeline (Phase 3D pattern detection, Phase 4B view implementation) and available for ad-hoc/vibe-coding, this skill defines how a component participates in navigation **without owning routing**. It is the navigation counterpart of `/figma-form-integration` and `/figma-price-integration`: a cross-cutting integration with a **native-SwiftUI default** and a **config-driven hook** for projects that ship their own navigation system.
15
-
16
- **Generic by design.** Nothing here assumes a specific app. The default is stock SwiftUI (`NavigationStack`, `navigationDestination`, `.toolbar`, `.sheet`). If the target project declares a custom navigation system in its `figma-config.json` (`ui.navigationSystem`), this skill routes to that system's types by name instead — same rules, project-specific vocabulary.
17
-
18
- ---
19
-
20
- ## Strict Rules (non-negotiable)
21
-
22
- 1. **A component never names a route, a sibling screen, or a router.** A component/screen takes its arrival data as init params and emits intent through a typed **`Output`** closure (`onSelect`, `onSubmit`, `output:`). The *caller* (scene/coordinator/parent) maps each output to a navigation edge. This keeps the component reusable and testable in isolation.
23
- 2. **No navigation side effects inside a component body.** No `NavigationLink(destination:)` hardcoding a concrete next screen, no router calls, no global singletons touched from `body`. Navigation is a caller concern expressed via the emitted output.
24
- 3. **Selection/tab state is observable data, not an imperative bridge.** A selected tab/section is a bound value (`@Binding`/observable), written by the caller; the component reflects it. A selection set before the container mounts is simply rendered on appear - no cold-start race.
25
- 4. **Deep links reduce to state and never crash.** A URL parses to a plan/value; malformed input is dropped (logged, no trap). The component is never the deep-link parser - it only exposes the entry state the parser can set.
26
- 5. **Native SwiftUI is the default; a custom system is opt-in via config.** Do NOT invent a bespoke router for a project that hasn't asked for one. Only use custom navigation types when `ui.navigationSystem.mode == "custom"` is set in `figma-config.json`.
27
-
28
- ---
29
-
30
- ## When to Invoke This Skill
31
-
32
- Invoke when ANY of these are detected in the design or task:
33
-
34
- 1. **Phase 3D - navigation sub-component / affordance:** a nested instance of a navigation-capable design element:
35
- - Tab bar / segmented section switcher that changes the top-level view
36
- - Navigation bar / header with a **back button** or close affordance
37
- - A row/card whose variant implies a **push/detail** affordance (chevron, "Detaylar", disclosure)
38
- - A link/button whose label implies leaving the screen ("Devam", "Tümünü gör")
39
- - A deep-link entry point (the design is a landing surface reached by URL)
40
- 2. **Phase 4B - View:** the view renders a back button, tab strip, or a control that should navigate.
41
- 3. **Ad-hoc:** wiring a screen's push/pop/tab/deep-link flow outside the full pipeline.
42
-
43
- **Not navigation (false-positive guards):**
44
- - A segmented control that filters in-place (no screen change) → plain `Binding<Enum>`, not navigation.
45
- - A button that submits a form → that's `/figma-form-integration`; the *result* may navigate, but the control is a form action.
46
- - A modal card of data / a toast / a loading HUD → `/figma-overlays`. A bottom sheet surface → `/figma-bottom-sheets`.
47
-
48
- ---
49
-
50
- ## Native-first architecture (default)
51
-
52
- ```
53
- Parent / Scene (caller)
54
- | owns NavigationStack(path:) or tab Binding, maps Output → edge
55
- v
56
- ComponentView
57
- | init(arrivalData…, output: @escaping (Output) -> Void)
58
- | emits .selected(id) / .continue / .back - never routes
59
- v
60
- (caller) path.append(route) | selectedTab = .x | present(.sheet)
61
- ```
62
-
63
- - **Push/pop within a flow:** caller owns `NavigationStack(path:)`; component emits `Output`; caller appends a `Hashable` route; `navigationDestination(for:)` renders it.
64
- - **Back button:** prefer the system back button. A custom header back affordance emits `.back` (or calls `dismiss`); it renders only when there is something to pop (depth > 0 / `isPresented`).
65
- - **Tabs:** `TabView(selection:)` bound to an observable selection the caller owns; the component reads/writes the binding, never a global.
66
- - **Deep links:** caller parses URL → a `Hashable` route / tab selection and applies it to the same path/selection state the UI already uses. Component only exposes the entry state.
67
- - **Modal presentation of another screen:** `.sheet(item:)` / `.fullScreenCover(item:)` driven by caller state (data-driven, no `AnyView`). A *bottom sheet surface* is `/figma-bottom-sheets`; an *alert/data modal card* is `/figma-overlays`.
68
-
69
- Design tokens (spacing, colors, typography) follow `reference/ui` + the project's figma-config token patterns - never raw literals.
70
-
71
- ## Config hook - project-supplied navigation system
72
-
73
- When `figma-config.json` declares:
74
- ```jsonc
75
- "ui": { "navigationSystem": {
76
- "mode": "custom",
77
- "router": "AppRouter", // type that dispatches routes
78
- "routeEnum": "AppRoute", // exhaustive cross-surface route enum
79
- "sceneType": "SceneContent", // headless screen container (optional)
80
- "navigatorProtocol": "NavigatorProtocol" // DI'd selection/present API (optional)
81
- }}
82
- ```
83
- then apply the SAME rules, but express them in the project's vocabulary resolved from config (do NOT hardcode the names below - read them from `ui.navigationSystem`):
84
-
85
- - Wrap screen content in `{sceneType}` (headless container) instead of a bare `NavigationStack` child, when provided.
86
- - Screens still emit a typed `Output`; the domain coordinator maps outputs to the project's route type (`{routeEnum}`) and the `{router}` dispatches.
87
- - Cross-surface jumps go through the DI'd `{navigatorProtocol}` (`selectTab`, `present`), never by importing a sibling domain.
88
- - Deep links build the project's `{routeEnum}` case and hand it to the router's deep-link entry.
89
-
90
- If `mode` is absent or `native`, use the native-first section above. Resolve types via `tools/resource-utility` / repo grep only when the config points at real files.
91
-
92
- ## Android (Jetpack Compose)
93
-
94
- Same rules, Compose vocabulary. Default is stock **Navigation Compose**; a project system is used only when `ui.navigationSystem.mode == "custom"`.
95
-
96
- - **Push/pop within a flow:** caller owns `NavHostController` + `NavHost`; the composable emits events via lambdas (`onSelect: (Id) -> Unit`), never calls `navController.navigate(...)` itself. Prefer type-safe routes (`@Serializable` route objects, `navigation-compose` 2.8+).
97
- - **Back:** system back / `navController.popBackStack()`; intercept only with `BackHandler { }` when the screen owns the gesture. A custom top-bar back emits `onBack` / calls the caller's pop.
98
- - **Tabs:** state-hoisted selection (`var selected by rememberSaveable`) bound to a `NavigationBar`; the composable reads/writes the hoisted state, never a global.
99
- - **Deep links:** `navDeepLink { uriPattern = ... }` on the destination, or the caller parses the URI → route and applies it to the same `NavController`. The composable never parses URIs.
100
- - **Present another screen modally:** caller-owned `var showX by remember` → `Dialog`/`ModalBottomSheet` (see `/figma-bottom-sheets`).
101
-
102
- **Config hook:** `ui.navigationSystem.mode == "custom"` → use the project's `{router}` / `{routeEnum}` (and a screen container if `{sceneType}` is set) resolved from config; cross-graph jumps go through the DI'd `{navigatorProtocol}`.
103
-
104
- Tokens/theme via `MaterialTheme` + the project's figma-config token patterns.
105
-
106
- ---
107
-
108
- ## Integration with Phase 3D
109
-
110
- When Phase 3D detects a navigation affordance, record it in `04b_component_architecture.md` and classify it as an **Output**, not a route:
111
-
112
- ```markdown
113
- ## Navigation
114
- | Affordance | Emits | Caller maps to |
115
- |---|---|---|
116
- | Back button (header) | `.back` closure / dismiss | pop current stack |
117
- | Row chevron ("Detaylar") | `.selected(id)` | push detail route |
118
- | Tab strip | `selection: Binding<Tab>` | caller-owned tab state |
119
- | Deep-link landing | entry `route`/`tab` param | parser sets caller state |
120
- ```
121
-
122
- Property classification addition:
123
-
124
- | Classification | When | Swift Pattern |
125
- |---|---|---|
126
- | Navigation output | Component has a push/select/back affordance | `output: (Output) -> Void` / `onSelect: (ID) -> Void` closure on the View |
127
- | Tab/selection binding | Component switches top-level content | `selection: Binding<SomeTab>` |
128
- | Deep-link entry | Component is a URL landing surface | plain entry `route`/`tab` param on the View/Configuration |
129
-
130
- The affordance's **label/icon copy is static Configuration content** (localized), exactly like other copy - only the *intent* is an Output closure.
131
-
132
- ## Integration with Phase 4B
133
-
134
- - Never hardcode `NavigationLink(destination: ConcreteScreen())` inside a reusable component - emit the Output.
135
- - Prefer the system back button; a custom back affordance calls `@Environment(\.dismiss)` or emits `.back`.
136
- - Bind tab/selection via the caller-owned binding; never a global.
137
- - If `ui.navigationSystem.mode == custom`, wrap in `{sceneType}` and route via `{router}`/`{routeEnum}` per config.
138
- - Verify by building + running on the simulator (`reference/build-and-test` / `figma-to-component` Phase 5): the transition happens, the back button appears only after a push, deep links land on the right surface.
139
-
140
- ---
141
-
142
- ## When NOT to Use Navigation Integration
143
- - In-place filters/segmented state that never changes screen → `Binding<Enum>`.
144
- - Form submission → `/figma-form-integration` (the *result* may navigate; the control is a form action).
145
- - Toast / loading / alert / data modal → `/figma-overlays`. Bottom-sheet surface → `/figma-bottom-sheets`.
146
-
147
- ## Checklist - Before Leaving the Skill
148
- ```
149
- [ ] Component emits a typed Output for every navigation affordance - no hardcoded routes
150
- [ ] Back uses system back / dismiss / .back output; renders only when poppable
151
- [ ] Tab/selection is a caller-owned binding, not a global
152
- [ ] Deep-link entry is plain state the caller's parser can set (component never parses URLs)
153
- [ ] Default is native SwiftUI (NavigationStack/navigationDestination/TabView/.sheet(item:))
154
- [ ] Custom system used ONLY when figma-config ui.navigationSystem.mode == custom (names from config)
155
- [ ] Labels/icons are localized Configuration copy; only intent is a closure
156
- ```
@@ -1,142 +0,0 @@
1
- ---
2
- name: figma-overlays
3
- description: "Overlay pattern integration for Figma-to-UI components (iOS SwiftUI + Android Jetpack Compose) — toasts/snackbars, blocking loading HUDs, alert dialogs, and data-driven modal cards presented from anywhere without the component owning presentation. Native by default (SwiftUI .alert/.confirmationDialog/.overlay + ref-counted loading + .sheet; Compose Snackbar/AlertDialog/Dialog + state-driven loading); an optional project-supplied overlay center when figma-config declares one. Reach for this when a design shows a toast/snackbar, a spinner/HUD, an alert, or a modal card, or when giving post-action feedback (saved/deleted/error) from a view model."
4
- user-invocable: true
5
- allowed-tools: Read, Glob, Grep
6
- status: wip-v5
7
- sourced-from: upstream/figma-overlays
8
- ---
9
-
10
- # /figma-overlays - Overlay Pattern Integration
11
-
12
- ## Purpose
13
-
14
- Consumed by the figma-to-swiftui pipeline (Phase 3D detection, Phase 4B view) and available ad-hoc, this skill defines how transient/blocking UI is presented **without a component owning the presentation surface**. Overlays counterpart of `/figma-form-integration` / `/figma-price-integration`: native-SwiftUI default + a config-driven hook for projects that ship an overlay center.
15
-
16
- Four channels: **toast** (transient, non-blocking), **loading** (blocking HUD), **alert** (blocking dialog), **modal** (data-driven card). Rich/interactive content is a local view-modifier, never routed as an erased view.
17
-
18
- **Generic by design.** Default is stock SwiftUI. If `figma-config.json` declares `ui.overlaySystem`, route through that DI'd center by name instead - same rules, project vocabulary.
19
-
20
- ---
21
-
22
- ## Strict Rules (non-negotiable)
23
-
24
- 1. **A component does not present its own app-level overlays.** A reusable component emits an intent (`onSaved`, `output: .removed`) or exposes state; the **caller** (scene/VM/coordinator) shows the toast/alert/modal. A component owning a global toast/alert makes it un-reusable and double-fires when composed.
25
- 2. **Overlay requests are pure data, not erased views.** Toast/alert/modal content is a value (title, style, actions), mapped to a design-system view at the host. **Never** pass `AnyView` through an overlay center. Rich/interactive content uses a **local** `.modal/.sheet { }` view modifier declared at the owning view.
26
- 3. **Loading is ref-counted with a min-show.** Pair every begin with an end (or use a `withLoading { }` wrapper); enforce a ~300ms minimum visible so it doesn't flash. Never leave a HUD un-ended on an error path.
27
- 4. **Presentable from non-view code.** Post-action feedback originates in a VM/coordinator; the overlay API must be callable there (a DI'd center or a bound state), not only from SwiftUI `body`.
28
- 5. **Native SwiftUI is the default; a custom center is opt-in via config.** Only use a project overlay center when `ui.overlaySystem.mode == "custom"`.
29
-
30
- ---
31
-
32
- ## When to Invoke This Skill
33
-
34
- 1. **Phase 3D - overlay affordance/pattern:** the design shows a toast/snackbar, a spinner/HUD or blocking dim, an alert dialog (1-3 buttons), or a data-driven modal card; or a component action needs post-action feedback.
35
- 2. **Phase 4B - View:** the view triggers feedback after an action, or renders a dim/HUD/alert/modal.
36
- 3. **Ad-hoc:** "show a confirmation", "flash a message", "block the screen while loading", "pop a dialog", "feedback after save".
37
-
38
- **Not an overlay (guards):**
39
- - A bottom sheet / half-sheet / drawer *surface* → `/figma-bottom-sheets`.
40
- - Screen-to-screen routing / tabs / deep links → `/figma-navigation`.
41
- - An inline banner that is part of the component's own layout (not app-level, not dismissible-over-content) → plain component content.
42
-
43
- ---
44
-
45
- ## Native-first architecture (default)
46
-
47
- ```
48
- Scene / VM (caller)
49
- | owns overlay state, calls after an action
50
- v
51
- SwiftUI presentation modifiers on the scene root:
52
- toast → .overlay(alignment:) of a transient message view + auto-dismiss task
53
- loading → a ref-counted @Observable LoadingState → dim + ProgressView, min-show
54
- alert → .alert(_:isPresented:) / .confirmationDialog (roles: cancel/destructive/default)
55
- modal → .sheet(item:) driven by an Identifiable data value → host maps data → card
56
- rich → local .sheet/.fullScreenCover { InteractiveContent() } at the owning view
57
- ```
58
-
59
- - **Toast:** newest-replaces (single visible), `hug`≈2s / `fill`≈5s auto-dismiss; anchor above any bottom bar. Model as a small value + an `.overlay`.
60
- - **Loading:** an observable counter (`begin`/`end`, `withLoading`) with min-show; dim + `ProgressView`.
61
- - **Alert:** native `.alert` / `.confirmationDialog` with proper button roles; data-driven.
62
- - **Modal card:** `.sheet(item:)` with an `Identifiable` request value; the host builds the design-system card from data (no `AnyView`).
63
- - **Over a bottom sheet:** mount the toast/HUD host on the sheet's own content (a root-level host sits *behind* a presented sheet).
64
-
65
- Tokens per `reference/ui` + figma-config token patterns; no literals.
66
-
67
- ## Config hook - project-supplied overlay center
68
-
69
- When `figma-config.json` declares:
70
- ```jsonc
71
- "ui": { "overlaySystem": {
72
- "mode": "custom",
73
- "center": "OverlayCenter", // DI'd protocol callable from VM/coordinator
74
- "surfaces": ["root", "currentScene"] // independent render surfaces (optional)
75
- }}
76
- ```
77
- apply the SAME rules via the project's center (names from config, do NOT hardcode):
78
- - Inject `any {center}` (with a Noop default for previews/tests); call `.toast/.withLoading/.alert/.modal` from the VM.
79
- - Keep the center **UI-framework-free**: it stores data; a host maps data → design-system component. If you reach for `AnyView`, use a local `.modal { }` view modifier instead.
80
- - Choose the surface from the caller's context (`root` vs `currentScene`); over-a-sheet fires on `currentScene`.
81
-
82
- If `mode` is absent or `native`, use the native-first section.
83
-
84
- ## Android (Jetpack Compose)
85
-
86
- Same rules, Compose vocabulary. Default is stock Compose/Material3; a project overlay system is used only when `ui.overlaySystem.mode == "custom"`.
87
-
88
- - **Toast/snackbar:** `SnackbarHostState` hoisted at a `Scaffold(snackbarHost = { SnackbarHost(state) })`; the composable emits an intent and the caller calls `snackbarHostState.showSnackbar(...)` from a coroutine. (Prefer an in-app `Snackbar` over the platform `android.widget.Toast`.)
89
- - **Loading:** a state-driven overlay — `if (uiState.isLoading) Box(Modifier.fillMaxSize()) { CircularProgressIndicator() }`; back the flag with a ref-count in the ViewModel + a min-show so it doesn't flash.
90
- - **Alert:** `AlertDialog(onDismissRequest, confirmButton, dismissButton)` — data-driven from state, proper confirm/dismiss roles.
91
- - **Modal card:** data-driven `Dialog { }` / `ModalBottomSheet { }` where a host maps the request value → a Material component (no arbitrary erased content passed through a "center").
92
- - **From a ViewModel:** expose events (`SharedFlow`/`Channel`) or state; the composable collects and shows the overlay. Keep the VM UI-framework-free.
93
-
94
- **Config hook:** `ui.overlaySystem.mode == "custom"` → inject/collect the project's `{center}` and render its Material host; keep it data-only.
95
-
96
- Rich/interactive content stays a local composable (`Dialog`/`ModalBottomSheet` declared at the owning composable), not routed through a center.
97
-
98
- ---
99
-
100
- ## Integration with Phase 3D
101
-
102
- Record overlays in `04b_component_architecture.md` as **caller intents**, not component-owned UI:
103
-
104
- ```markdown
105
- ## Overlays
106
- | Trigger | Channel | Owner | Note |
107
- |---|---|---|---|
108
- | Row "Sil" tapped | alert (confirm) | caller | component emits .removeRequested(id) |
109
- | Save succeeded | toast (success) | caller VM | component emits .saved |
110
- | Async fetch | loading HUD | caller VM | withLoading around the call |
111
- ```
112
-
113
- Property classification addition:
114
-
115
- | Classification | When | Swift Pattern |
116
- |---|---|---|
117
- | Overlay intent | Component action needs app-level feedback/confirm | `output`/`onX` closure on the View (caller shows the overlay) |
118
- | Local rich modal | Interactive content owned by this view | local `.sheet/.modal { }` at the owning view, caller state |
119
-
120
- ## Integration with Phase 4B
121
- - Never present an app-level toast/alert/modal from inside a reusable component - emit the intent.
122
- - Use native `.alert`/`.confirmationDialog` for 1-3 button dialogs; `.sheet(item:)` for data modal cards.
123
- - Ref-count loading; guarantee `end` on all paths; min-show to avoid flash.
124
- - If `ui.overlaySystem.mode == custom`, inject and call `{center}`; keep it data-only.
125
- - Verify on the simulator: toast above the bottom bar, HUD min-show, alert roles, data modal, overlays over a sheet.
126
-
127
- ---
128
-
129
- ## When NOT to Use Overlay Integration
130
- - Bottom-sheet surface → `/figma-bottom-sheets`. Routing/tabs/deep links → `/figma-navigation`.
131
- - A static inline banner that is part of the component layout → plain content.
132
- - Form validation error shown inline on a field → `/figma-form-integration` (field state), not an overlay.
133
-
134
- ## Checklist - Before Leaving the Skill
135
- ```
136
- [ ] Reusable component emits intent/state; caller owns the overlay (no self-presentation)
137
- [ ] Overlay content is data, not AnyView; rich content uses a local .sheet/.modal { }
138
- [ ] Loading is ref-counted with min-show; end guaranteed on error paths
139
- [ ] Alerts use native roles (cancel/destructive/default) unless a design card is required
140
- [ ] Default native SwiftUI; custom center only when figma-config ui.overlaySystem.mode == custom
141
- [ ] Over-a-sheet feedback mounts on the sheet's content surface, not the root
142
- ```