@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,750 +0,0 @@
1
- ---
2
- name: figma-issue
3
- description: Creates and manages GitHub Issues for Figma component implementations.
4
- ---
5
-
6
- # /figma-issue - GitHub Issue Manager for Figma Components
7
-
8
- ## Purpose
9
-
10
- Creates and manages GitHub Issues for Figma component implementations. Resolves component metadata from the registry, creates structured issues using the issue template format, adds them to the **Figma Components** Projects V2 board with custom fields, and provides sub-commands for ongoing issue management.
11
-
12
- ## Commands
13
-
14
- | Command | Description |
15
- |---------|-------------|
16
- | `/figma-issue open <url>[,<url>] [--team <team>]` | Create GitHub issue |
17
- | `/figma-issue assign <#N>` | Assign issue to current user (GitHub + Jira if linked) |
18
- | `/figma-issue bind-jira <#N> <{jira.projectKey}-XXXXX>` | Link an existing Jira task (both directions) |
19
- | `/figma-issue phase <#N> <phase>` | Update phase on project board |
20
- | `/figma-issue block <#N> by <#M>` | Mark issue #N as blocked by #M |
21
- | `/figma-issue unblock <#N>` | Remove blocked status |
22
- | `/figma-issue close <#N>` | Close the issue |
23
- | `/figma-issue status [#N]` | Show issue status or list all open |
24
-
25
- ---
26
-
27
- ## Constants
28
-
29
- ```
30
- REPO_ROOT = git repo root (auto-detect)
31
- REGISTRY_UTIL = ${REPO_ROOT}/{repos.common.path}/.build/debug/FigmaRegistryUtility
32
- GH_REPO = {github.componentsRepo}
33
- GH_ORG = {github.org}
34
- PROJECT_ID = {github.projectV2Id}
35
- JIRA_BASE_URL = {jira.baseUrl}
36
- JIRA_PROJECT = {jira.projectKey}
37
- JIRA_LABELS = ["redesign_ios_ui_component", "MobRedesign"]
38
- JIRA_ISSUE_TYPE = Task
39
- ```
40
-
41
- ### Jira Authentication
42
-
43
- Jira token is stored in macOS Keychain under service name `JIRA_TOKEN`:
44
-
45
- ```bash
46
- JIRA_TOKEN=$("$HOME/.claude/lib/credential-store.sh" get \1 2>/dev/null)
47
- ```
48
-
49
- If not found, prompt the user to add it:
50
- ```bash
51
- "$HOME/.claude/lib/credential-store.sh" set \1 \"\2\"
52
- ```
53
-
54
- ### Project Field IDs
55
-
56
- ```
57
- STATUS_FIELD = {github.projectV2Fields.status}
58
- Todo = 25f3e7a3
59
- In Develop = bc6c45f7
60
- In Review = bdb0d8ef
61
- Bugfix = e46fa72d
62
- Done = 6275b69e
63
- Blocked = 95949fd8
64
- Stale = 457a1e74
65
-
66
- PHASE_FIELD = {github.projectV2Fields.phase}
67
- Implementation = 0577dcda
68
- Testing = 106b64ce
69
- Code Connect = 5384b1e1
70
- Documentation = 7307fb8f
71
-
72
- FIGMA_PAGE_FIELD = {github.projectV2Fields.figmaPage}
73
- Home Screen = 72d24832
74
- Booker = a143357e
75
- Check-in = 5c204dd7
76
- Modals = 72983b95
77
- Cards = e8dedeee
78
- Buttons = f57b9f30
79
- Navigation Bar = 54bfd163
80
- Other = 62a5ecbe
81
-
82
- JIRA_FIELD = {github.projectV2Fields.jira}
83
- ```
84
-
85
- ### Figma Page Mapping
86
-
87
- Map the registry `pageName` to the project board's Figma Page option. Use substring matching:
88
-
89
- | pageName contains | Option ID |
90
- |---|---|
91
- | `Home` | `72d24832` |
92
- | `Booker` | `a143357e` |
93
- | `Check-in`, `Boarding Pass` | `5c204dd7` |
94
- | `Modal` | `72983b95` |
95
- | `Card` | `e8dedeee` |
96
- | `Button` | `f57b9f30` |
97
- | `Navigation` | `54bfd163` |
98
- | *(everything else)* | `62a5ecbe` (Other) |
99
-
100
- ---
101
-
102
- ## Command: `open <url>[,<url>,...]`
103
-
104
- ### STEP 0 - Parse Input
105
-
106
- 1. Extract all Figma URLs from `$ARGUMENTS` (comma-separated or space-separated).
107
- 2. For each URL, extract `node-id` query parameter. Keep as-is (e.g., `2251-15872`).
108
- 3. Deduplicate by `node-id` - if the same node-id appears multiple times, process it only once.
109
- 4. Print: "Found N unique Figma component(s) to process."
110
-
111
- **For each component, run STEPs 1-6 sequentially.** The specs prompt (STEP 2.5) is asked once per component.
112
-
113
- ### STEP 1 - Registry Lookup
114
-
115
- ```bash
116
- cd ${REPO_ROOT}/{repos.common.path}
117
- .build/debug/FigmaRegistryUtility lookup --node-id <NODE_ID>
118
- ```
119
-
120
- Collect from JSON output:
121
- - `name` → Registry name (e.g., `Modals/Title`)
122
- - `suggestedComponentName` → PascalCase name (e.g., `ModalsTitle`)
123
- - `pageName` → Figma page name (e.g., `❖ Modals`)
124
- - `suggestedArtifactPath` → Artifact path
125
- - `suggestedComponentLocation` → Component location
126
-
127
- If lookup fails, mark as **unregistered**.
128
-
129
- ### STEP 1.5 - Dependency Detection
130
-
131
- Uses the **exact same algorithm** as `confluence-component-status-upload.py` → `readiness()`:
132
- 1. Build unified `name → nodeId` lookup from catalog + registry + graph
133
- 2. Resolve sub-component names to nodeIds
134
- 3. Check each resolved nodeId for `codeConnect.ios` and `skip`
135
- 4. Unresolved names (nodeId = None) are NOT blockers (same as `all_comps.get(sub_nid)` returning None)
136
-
137
- ```bash
138
- COMMON_PATH="${REPO_ROOT}/{repos.common.path}"
139
- FIGMA_DIR="${COMMON_PATH}/Shared/Figma"
140
- ```
141
-
142
- #### 1.5a. Compute readiness (single Python script)
143
-
144
- Run the following as a single Python block. It replicates `build_component_index()` + `readiness()` from `confluence-component-status-upload.py`:
145
-
146
- ```bash
147
- cd ${REPO_ROOT}
148
- python3 -c "
149
- import json, os, glob
150
-
151
- FIGMA_DIR = '${FIGMA_DIR}'
152
- NODE_ID = '<NODE_ID>'
153
-
154
- # --- 1. Load all Components/*.json into dict keyed by nodeId ---
155
- components = {}
156
- comp_dir = os.path.join(FIGMA_DIR, 'Components')
157
- for f in glob.glob(os.path.join(comp_dir, '*.json')):
158
- with open(f) as fh:
159
- reg = json.load(fh)
160
- nid = reg.get('nodeId', os.path.basename(f)[:-5].replace('-', ':'))
161
- components[nid] = reg
162
-
163
- # --- 2. Build name → nodeId lookup (same as confluence-component-status-upload.py lines 143-164) ---
164
- name_to_nid = {}
165
- for nid, c in components.items():
166
- cn = c.get('componentName', {})
167
- ios_name = cn.get('ios', '') if isinstance(cn, dict) else cn or ''
168
- if ios_name:
169
- name_to_nid[ios_name] = nid
170
- # Strip Image. prefix for graph name matching: Image.caretRight → caretRight → CaretRight
171
- if '.' in ios_name:
172
- suffix = ios_name.split('.', 1)[1]
173
- if suffix not in name_to_nid:
174
- name_to_nid[suffix] = nid
175
- upper = suffix[0:1].upper() + suffix[1:]
176
- if upper not in name_to_nid:
177
- name_to_nid[upper] = nid
178
-
179
- # Also add catalog names from component-catalog.json if available
180
- cat_path = os.path.join(FIGMA_DIR, 'Generated', 'component-catalog.json')
181
- if os.path.isfile(cat_path):
182
- with open(cat_path) as f:
183
- catalog = json.load(f)
184
- for file_entry in catalog.get('files', []):
185
- for page in file_entry.get('pages', []):
186
- for comp in page.get('components', []):
187
- cn = comp.get('name', '')
188
- fn = comp.get('figmaName', '')
189
- cnid = comp.get('nodeId', '')
190
- if cn: name_to_nid[cn] = cnid
191
- if fn and fn not in name_to_nid: name_to_nid[fn] = cnid
192
-
193
- # --- 3. Load graph, get sub-components for this node ---
194
- graph_path = os.path.join(FIGMA_DIR, 'sub-component-graph.json')
195
- with open(graph_path) as f:
196
- graph = json.load(f).get('graph', {})
197
- entry = graph.get(NODE_ID, {})
198
- sub_names = entry.get('subComponents', [])
199
-
200
- if not sub_names:
201
- print(json.dumps({'status': 'no_deps', 'subComponents': []}))
202
- else:
203
- # --- 4. Resolve names → nodeIds, then compute readiness per sub-component ---
204
- results = []
205
- for sname in sub_names:
206
- sub_nid = name_to_nid.get(sname)
207
- if not sub_nid:
208
- # Unresolved - not in any registry/catalog (same as all_comps.get() → None → not a blocker)
209
- results.append({'name': sname, 'nodeId': None, 'status': 'unresolved'})
210
- continue
211
- sc = components.get(sub_nid)
212
- if not sc:
213
- results.append({'name': sname, 'nodeId': sub_nid, 'status': 'unresolved'})
214
- continue
215
- if sc.get('skip', False):
216
- results.append({'name': sname, 'nodeId': sub_nid, 'status': 'skipped'})
217
- continue
218
-
219
- # NEW: status.ios.implemented is the canonical source of truth after
220
- # the architecture-update migration. Fall back to legacy signals for
221
- # components that haven't been backfilled yet.
222
- ios_status = sc.get('status', {}).get('ios', {})
223
- impl_value = ios_status.get('implemented', {}).get('value', False)
224
-
225
- if impl_value:
226
- results.append({'name': sname, 'nodeId': sub_nid, 'status': 'implemented'})
227
- continue
228
-
229
- # Legacy fallback 1: top-level codeConnect.ios (pre-architecture-update)
230
- if sc.get('codeConnect', {}).get('ios', False):
231
- results.append({'name': sname, 'nodeId': sub_nid, 'status': 'implemented'})
232
- continue
233
-
234
- # Legacy fallback 2: does a Swift file with this component name exist?
235
- # Catches components implemented in code but never backfilled. Delete
236
- # this fallback after backfill-status.py has been run and the legacy
237
- # codeConnect field is no longer the primary source.
238
- comp_name = (sc.get('componentName') or {}).get('ios')
239
- sources_dir = os.environ.get('UICOMPONENTS_SOURCES', '')
240
- if comp_name and sources_dir and os.path.isdir(sources_dir):
241
- pattern = os.path.join(sources_dir, '**', comp_name + '.swift')
242
- if glob.glob(pattern, recursive=True):
243
- results.append({'name': sname, 'nodeId': sub_nid, 'status': 'implemented'})
244
- continue
245
-
246
- results.append({'name': sname, 'nodeId': sub_nid, 'status': 'not_implemented'})
247
- print(json.dumps({'status': 'checked', 'subComponents': results}))
248
- "
249
- ```
250
-
251
- Parse the JSON output. Only `not_implemented` entries are blockers - `implemented`, `skipped`, and `unresolved` (not in any registry) are NOT blockers.
252
-
253
- **Readiness precedence (architecture-update):**
254
- 1. `status.ios.implemented.value` (new canonical field, set by `phase4-finalize.py`)
255
- 2. Legacy `codeConnect.ios` (pre-architecture-update components)
256
- 3. Swift-file-exists check (final fallback for un-backfilled components;
257
- requires `UICOMPONENTS_SOURCES` env var or falls through as not_implemented)
258
-
259
- Delete fallbacks 2 and 3 after `backfill-status.py` has been run and all
260
- active components have been re-run through the pipeline at least once.
261
-
262
- #### 1.5b. Find existing issues for blockers
263
-
264
- For each `not_implemented` sub-component:
265
-
266
- ```bash
267
- gh issue list --repo ${GH_REPO} --state open --label component \
268
- --search "<SubComponentName>" --json number,title --jq '.[0]'
269
- ```
270
-
271
- Collect: `BLOCKING_DEPS` = list of `{name, nodeId, issueNumber (or null)}` - only `not_implemented` entries.
272
-
273
- #### 1.5c. Report
274
-
275
- ```
276
- Dependencies (from sub-component-graph.json):
277
- - <SubName> → ✅ implemented
278
- - <SubName> → ⏭️ skipped
279
- - <SubName> → unresolved (not in registry)
280
- - <SubName> → #N (not implemented)
281
- - <SubName> → ❌ not implemented, no issue
282
-
283
- This issue will be auto-blocked after creation.
284
- ```
285
-
286
- If zero `not_implemented` → **no blockers**, do NOT auto-block.
287
-
288
- Store `BLOCKING_DEPS` for use in STEP 3.5.
289
-
290
- ### STEP 2 - Duplicate Check
291
-
292
- ```bash
293
- gh issue list --repo ${GH_REPO} --state open --search "node-id=<NODE_ID>" --json number,title,url
294
- ```
295
-
296
- If a match is found, print warning and stop:
297
- "Issue already exists: #N - <title> (<url>)"
298
-
299
- ### STEP 2.5 - Specs & Acceptance Criteria
300
-
301
- Present the component info and **STOP. Do not proceed to STEP 3.** Wait for the user's next message.
302
-
303
- **Print exactly this and nothing else:**
304
-
305
- ```
306
- -------------------------------------------
307
- Component: <SuggestedComponentName>
308
- Registry: <RegistryName>
309
- Page: <PageName>
310
- Figma: <FIGMA_URL>
311
- -------------------------------------------
312
-
313
- Write your acceptance criteria and specs below.
314
- You can include:
315
- - Acceptance criteria (checkbox list)
316
- - Design specs (variants, states, animations)
317
- - Dependencies (nested components, tokens)
318
- - Edge cases or constraints
319
-
320
- Type "skip" to create without specs.
321
- ```
322
-
323
- **STOP HERE. The user's next message is the specs content.**
324
-
325
- When the user responds:
326
- - If the response is `skip` (case-insensitive): set `SPECS = ""`, proceed to STEP 3.
327
- - Otherwise: the user's message is the specs input. You MAY read referenced files to gather context and understand the user's intent better - this helps write clearer specs. Then rewrite the user's input into clean, actionable acceptance criteria (checkbox list) that another AI can easily follow when it fetches this issue for implementation. Do NOT implement anything - this skill only creates issues, not code. Then proceed to team selection / STEP 3.
328
-
329
- If `SPECS` is not empty, include it in the issue body under `### Acceptance Criteria` (see STEP 3 body template).
330
-
331
- ### STEP 3 - Create GitHub Issue
332
-
333
- **Title:**
334
- ```
335
- feat: <TEAM_SHORT> Implement <SuggestedComponentName>
336
- ```
337
-
338
- Where `<TEAM_SHORT>` is mapped from the team label:
339
-
340
- | Label | Short |
341
- |---|---|
342
- | `team:core` | `core` |
343
- | `team:shopping-and-payment` | `shopping` |
344
- | `team:add-services` | `add-services` |
345
- | `team:miles-and-smiles` | `miles` |
346
- | `team:post-ops-irrops` | `post-ops` |
347
-
348
- If unregistered: `feat: <TEAM_SHORT> Implement component (node-id: <NODE_ID>)`
349
-
350
- **Body** - must match the issue template field headers exactly:
351
-
352
- ```markdown
353
- ### Figma URL
354
-
355
- <FIGMA_URL>
356
-
357
- ### Node ID
358
-
359
- <NODE_ID>
360
-
361
- ### Registry Name
362
-
363
- <REGISTRY_NAME>
364
-
365
- ### Component Name (PascalCase)
366
-
367
- <SUGGESTED_COMPONENT_NAME>
368
-
369
- ### Figma Page
370
-
371
- <PAGE_NAME>
372
-
373
- ### Jira Issue
374
-
375
- _No response_
376
-
377
- ### Progress
378
-
379
- | Flag | State |
380
- |---|---|
381
- | Implementation | ⚪ |
382
- | Testing | ⚪ |
383
- | Code Connect | ⚪ |
384
- | Wiki | ⚪ |
385
-
386
- <!--
387
- State legend:
388
- 🟢 green - flag is set and validated against the current implementation version
389
- 🟡 yellow - flag was validated against an older impl version (or Figma moved ahead, for implemented)
390
- ⚪ gray - flag is not set
391
-
392
- The Progress table is rewritten automatically by update-issue-from-registry.py
393
- on every phase finalize. Do not hand-edit this section; edits will be
394
- overwritten on the next pipeline run.
395
- -->
396
-
397
-
398
- ### Acceptance Criteria
399
-
400
- <SPECS or "_No response_" if empty>
401
-
402
- ### Pull Requests
403
-
404
- - **common:**
405
- - **uicomponents:**
406
-
407
- ### Notes
408
-
409
- _No response_
410
- ```
411
-
412
- ### Team Label Mapping
413
-
414
- If `--team` was provided, map to a label:
415
-
416
- | Argument (case-insensitive) | Label |
417
- |---|---|
418
- | `core` | `team:core` |
419
- | `post-ops-irrops`, `post-ops`, `irrops` | `team:post-ops-irrops` |
420
- | `add-services`, `additional-services` | `team:add-services` |
421
- | `miles-and-smiles`, `miles`, `m&s` | `team:miles-and-smiles` |
422
- | `shopping-and-payment`, `shopping`, `payment` | `team:shopping-and-payment` |
423
-
424
- If `--team` was NOT provided, ask the user which team before creating the issue. Print and STOP:
425
-
426
- ```
427
- Which team?
428
- 1. Core
429
- 2. Post-Ops & Irrops
430
- 3. Additional Services
431
- 4. Miles & Smiles
432
- 5. Shopping & Payment
433
- ```
434
-
435
- Wait for the user's response (number or name), then map to the label.
436
-
437
- ```bash
438
- gh issue create \
439
- --repo ${GH_REPO} \
440
- --title "<TITLE>" \
441
- --label "component" \
442
- --label "redesign" \
443
- --label "<TEAM_LABEL>" \
444
- --body "<BODY>"
445
- ```
446
-
447
- **No `phase:*` label on creation.** The per-flag labels
448
- (`impl:green`, `impl:yellow`, `test:green`, etc.) are applied
449
- automatically by `update-issue-from-registry.py` once a phase finalize
450
- script has populated `status` in the registry. On creation the issue
451
- has zero flag labels (all gray) - that's the correct initial state for
452
- a component nobody has implemented yet.
453
-
454
- Legacy `phase:*` labels are stripped from existing issues on any sync;
455
- new issues never get them.
456
-
457
- Capture the issue number and URL from the output.
458
-
459
- ### STEP 3.5 - Auto-Block (if dependencies detected)
460
-
461
- If `BLOCKING_DEPS` from STEP 1.5 has any `not_implemented` sub-components:
462
-
463
- 1. Add `blocked` label:
464
- ```bash
465
- gh issue edit <N> --repo ${GH_REPO} --add-label "blocked"
466
- ```
467
-
468
- 2. Comment with blocking info:
469
- ```bash
470
- gh issue comment <N> --repo ${GH_REPO} --body "**Auto-blocked** - unimplemented sub-components (from sub-component-graph.json):
471
- - <SubName> → #M
472
- - <SubName> → no issue
473
-
474
- Will be auto-unblocked when all dependencies are implemented."
475
- ```
476
-
477
- The issue will be auto-unblocked by `/figma-iteration-commit` STEP 5 when blocking components get implemented.
478
-
479
- ### STEP 4 - Add to Project Board
480
-
481
- #### 4a. Add issue to project
482
-
483
- ```bash
484
- # Get issue node ID
485
- ISSUE_NODE_ID=$(gh api graphql -f query='{ repository(owner: "{github.org}", name: "{project.slug}-components") { issue(number: <ISSUE_NUMBER>) { id } } }' --jq '.data.repository.issue.id')
486
-
487
- # Add to project
488
- ITEM_ID=$(gh api graphql -f query='mutation { addProjectV2ItemById(input: { projectId: "{github.projectV2Id}", contentId: "'"$ISSUE_NODE_ID"'" }) { item { id } } }' --jq '.data.addProjectV2ItemById.item.id')
489
- ```
490
-
491
- #### 4b. Set Status = Todo
492
-
493
- ```bash
494
- gh api graphql -f query='mutation { updateProjectV2ItemFieldValue(input: { projectId: "{github.projectV2Id}", itemId: "'"$ITEM_ID"'", fieldId: "{github.projectV2Fields.status}", value: { singleSelectOptionId: "25f3e7a3" } }) { projectV2Item { id } } }'
495
- ```
496
-
497
- #### 4c. Set Phase = Implementation
498
-
499
- ```bash
500
- gh api graphql -f query='mutation { updateProjectV2ItemFieldValue(input: { projectId: "{github.projectV2Id}", itemId: "'"$ITEM_ID"'", fieldId: "{github.projectV2Fields.phase}", value: { singleSelectOptionId: "0577dcda" } }) { projectV2Item { id } } }'
501
- ```
502
-
503
- #### 4d. Set Figma Page
504
-
505
- Map `pageName` using the Figma Page Mapping table, then:
506
-
507
- ```bash
508
- gh api graphql -f query='mutation { updateProjectV2ItemFieldValue(input: { projectId: "{github.projectV2Id}", itemId: "'"$ITEM_ID"'", fieldId: "{github.projectV2Fields.figmaPage}", value: { singleSelectOptionId: "<MAPPED_PAGE_OPTION_ID>" } }) { projectV2Item { id } } }'
509
- ```
510
-
511
- ### STEP 5 - Summary
512
-
513
- Print:
514
-
515
- ```markdown
516
- Issue created:
517
-
518
- | Field | Value |
519
- |-------|-------|
520
- | Issue | [#N](url) |
521
- | Component | <SuggestedComponentName> |
522
- | Registry | <RegistryName> |
523
- | Page | <PageName> |
524
- | Phase | Implementation |
525
- | Status | Todo |
526
- | Assignee | unassigned |
527
- ```
528
-
529
- ---
530
-
531
- ## Command: `assign <#N>`
532
-
533
- Assign the issue to the current GitHub user. If a Jira task is linked, also assign it.
534
-
535
- ### STEP 1 - Assign GitHub Issue
536
-
537
- ```bash
538
- gh issue edit <N> --repo ${GH_REPO} --add-assignee @me
539
- ```
540
-
541
- ### STEP 2 - Assign Jira (if linked)
542
-
543
- Read the issue body and check the `### Jira Issue` section for a linked key.
544
-
545
- If a Jira key is found (not `_No response_`):
546
-
547
- ```bash
548
- JIRA_TOKEN=$("$HOME/.claude/lib/credential-store.sh" get \1 2>/dev/null)
549
- USERNAME=$(curl -s "${JIRA_BASE_URL}/rest/api/2/myself" \
550
- -H "Authorization: Bearer ${JIRA_TOKEN}" | python3 -c "import sys,json; print(json.load(sys.stdin)['name'])")
551
-
552
- curl -s -X PUT "${JIRA_BASE_URL}/rest/api/2/issue/<JIRA_KEY>/assignee" \
553
- -H "Authorization: Bearer ${JIRA_TOKEN}" \
554
- -H "Content-Type: application/json" \
555
- -d "{\"name\": \"${USERNAME}\"}"
556
- ```
557
-
558
- If Jira token not found or VPN unreachable, skip with warning.
559
-
560
- Print: "Issue #N assigned to you." (+ "Jira <KEY> assigned." if applicable)
561
-
562
- ---
563
-
564
- ## Command: `bind-jira <#N> <{jira.projectKey}-XXXXX>`
565
-
566
- Link an existing Jira task to the GitHub issue (both directions).
567
-
568
- ### STEP 1 - Update GitHub Issue Body
569
-
570
- 1. Read current issue body:
571
- ```bash
572
- BODY=$(gh issue view <N> --repo ${GH_REPO} --json body --jq '.body')
573
- ```
574
-
575
- 2. Replace the Jira section:
576
- - Find `### Jira Issue` section
577
- - Replace the line after it (`_No response_` or existing key) with:
578
- ```
579
- [<JIRA_KEY>]({jira.baseUrl}/browse/<JIRA_KEY>)
580
- ```
581
-
582
- 3. Update:
583
- ```bash
584
- gh issue edit <N> --repo ${GH_REPO} --body "<UPDATED_BODY>"
585
- ```
586
-
587
- ### STEP 2 - Update Project Board Jira Field
588
-
589
- ```bash
590
- # Get item ID from project
591
- ITEM_ID=$(gh api graphql -f query='{ node(id: "{github.projectV2Id}") { ... on ProjectV2 { items(first: 100) { nodes { id content { ... on Issue { number } } } } } } }' --jq '.data.node.items.nodes[] | select(.content.number == <N>) | .id')
592
-
593
- # Set Jira field
594
- gh api graphql -f query='mutation { updateProjectV2ItemFieldValue(input: { projectId: "{github.projectV2Id}", itemId: "'"$ITEM_ID"'", fieldId: "{github.projectV2Fields.jira}", value: { text: "<JIRA_KEY>" } }) { projectV2Item { id } } }'
595
- ```
596
-
597
- ### STEP 3 - Update Jira Description with GitHub Link
598
-
599
- ```bash
600
- JIRA_TOKEN=$("$HOME/.claude/lib/credential-store.sh" get \1 2>/dev/null)
601
-
602
- # Get current Jira description
603
- JIRA_DESC=$(curl -s "${JIRA_BASE_URL}/rest/api/2/issue/<JIRA_KEY>?fields=description" \
604
- -H "Authorization: Bearer ${JIRA_TOKEN}" | python3 -c "import sys,json; print(json.load(sys.stdin)['fields'].get('description','') or '')")
605
-
606
- # Append GitHub issue link if not already present
607
- GITHUB_URL=$(gh issue view <N> --repo ${GH_REPO} --json url --jq '.url')
608
-
609
- curl -s -X PUT "${JIRA_BASE_URL}/rest/api/2/issue/<JIRA_KEY>" \
610
- -H "Authorization: Bearer ${JIRA_TOKEN}" \
611
- -H "Content-Type: application/json" \
612
- -d "{\"fields\": {\"description\": \"${JIRA_DESC}\n\nh3. GitHub Issue\n${GITHUB_URL}\"}}"
613
- ```
614
-
615
- If Jira token is not found, skip this step with a warning.
616
-
617
- Print: "Issue #N linked to [JIRA_KEY]({jira.baseUrl}/browse/JIRA_KEY)"
618
-
619
- ---
620
-
621
- ## Command: `phase <#N> <phase>` - **DEPRECATED**
622
-
623
- This command is deprecated as of the architecture-update. Phase state
624
- is now tracked per-flag in the component registry
625
- (`status.ios.{implemented,tested,codeConnect,wiki}`), not as a single
626
- enum. The `phase:*` labels are no longer used - they're replaced by
627
- per-flag `impl:green`/`impl:yellow`/`test:green`/etc. labels, which are
628
- applied automatically by `update-issue-from-registry.py` after every
629
- phase finalize script writes the registry.
630
-
631
- If you run this command:
632
-
633
- ```
634
- /figma-issue phase 42 testing
635
- ```
636
-
637
- Print this message and stop (do NOT touch the issue):
638
-
639
- ```
640
- /figma-issue phase is deprecated. Phase state is now computed from the
641
- component registry (Shared/Figma/Components/{nodeId}.json → status.ios).
642
-
643
- To update an issue's labels and Progress table from the current
644
- registry state, run:
645
-
646
- python3 .instructions/figma/figma-to-swiftui/scripts/update-issue-from-registry.py \
647
- --node-id <NODE_ID>
648
-
649
- To bulk-sync all backfilled issues:
650
-
651
- python3 .instructions/figma/figma-to-swiftui/scripts/bulk-sync-issues.py
652
- ```
653
-
654
- Do not update the Projects V2 Phase field from this command anymore.
655
- If you need to change Projects V2 field state, do it manually via
656
- `gh api graphql` or the GitHub UI.
657
-
658
- ---
659
-
660
- ## Command: `block <#N> by <#M>`
661
-
662
- Mark issue #N as blocked by issue #M.
663
-
664
- ### Steps
665
-
666
- 1. Add `blocked` label to issue #N:
667
- ```bash
668
- gh issue edit <N> --repo ${GH_REPO} --add-label "blocked"
669
- ```
670
-
671
- 2. Add a comment to issue #N:
672
- ```bash
673
- gh issue comment <N> --repo ${GH_REPO} --body "Blocked by #<M>"
674
- ```
675
-
676
- 3. Set Status = "Todo" on project board (blocked issues shouldn't be "In Progress").
677
-
678
- Print: "Issue #N is now blocked by #M."
679
-
680
- ---
681
-
682
- ## Command: `unblock <#N>`
683
-
684
- Remove blocked status from issue #N.
685
-
686
- ### Steps
687
-
688
- 1. Remove `blocked` label:
689
- ```bash
690
- gh issue edit <N> --repo ${GH_REPO} --remove-label "blocked"
691
- ```
692
-
693
- 2. Add a comment:
694
- ```bash
695
- gh issue comment <N> --repo ${GH_REPO} --body "Unblocked."
696
- ```
697
-
698
- Print: "Issue #N unblocked."
699
-
700
- ---
701
-
702
- ## Command: `close <#N>`
703
-
704
- 1. Check all progress checkboxes in the issue body.
705
- 2. Set Status = Done on project board.
706
- 3. Close the issue:
707
- ```bash
708
- gh issue close <N> --repo ${GH_REPO}
709
- ```
710
-
711
- Print: "Issue #N closed."
712
-
713
- ---
714
-
715
- ## Command: `status [#N]`
716
-
717
- ### With issue number - show single issue
718
-
719
- ```bash
720
- gh issue view <N> --repo ${GH_REPO} --json number,title,state,assignees,labels,body
721
- ```
722
-
723
- Also fetch project fields:
724
- ```bash
725
- gh api graphql -f query='{ node(id: "{github.projectV2Id}") { ... on ProjectV2 { items(first: 100) { nodes { id fieldValues(first: 10) { nodes { ... on ProjectV2ItemFieldSingleSelectValue { field { ... on ProjectV2SingleSelectField { name } } name } ... on ProjectV2ItemFieldTextValue { field { ... on ProjectV2Field { name } } text } } } content { ... on Issue { number } } } } } } }' --jq '.data.node.items.nodes[] | select(.content.number == <N>)'
726
- ```
727
-
728
- Print a formatted summary with issue details + board fields.
729
-
730
- ### Without issue number - list all open
731
-
732
- ```bash
733
- gh issue list --repo ${GH_REPO} --state open --label component --json number,title,assignees --jq '.[] | "| #\(.number) | \(.title) | \(.assignees | map(.login) | join(", ")) |"'
734
- ```
735
-
736
- Print as a table.
737
-
738
- ---
739
-
740
- ## Error Handling
741
-
742
- - **FigmaRegistryUtility not built**: Run `cd ${REPO_ROOT}/{repos.common.path} && swift build --product FigmaRegistryUtility`.
743
- - **Issue not found**: Print error and stop.
744
- - **Invalid phase**: Print valid options: `implementation`, `testing`, `code-connect`, `documentation`.
745
- - **Duplicate issue**: Print existing issue link and stop - do not create.
746
- - **GraphQL errors**: Print the error message from the API response.
747
- - **Jira token not found**: Prompt user to add to keychain: `"$HOME/.claude/lib/credential-store.sh" set \1 \"\2\"`.
748
- - **Jira API error (401/403)**: Token expired or invalid - prompt user to update keychain.
749
- - **Jira API error (404)**: Wrong issue key - print error and continue.
750
- - **Jira VPN not reachable**: Print warning, skip Jira steps, continue with GitHub-only operations.