@mmerterden/multi-agent-pipeline 11.2.0 → 11.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +2 -2
  3. package/docs/FIGMA_PIPELINE.md +12 -25
  4. package/docs/architecture.md +3 -5
  5. package/docs/features.md +8 -8
  6. package/install/_dev-only-files.mjs +0 -6
  7. package/install/claude.mjs +39 -17
  8. package/install/copilot.mjs +22 -16
  9. package/install/templates/copilot-instructions.md +3 -3
  10. package/package.json +1 -1
  11. package/pipeline/commands/{multi-agent.md → multi-agent/SKILL.md} +39 -39
  12. package/pipeline/commands/multi-agent/{analysis.md → analysis/SKILL.md} +18 -18
  13. package/pipeline/commands/multi-agent/{analysis-resolve.md → analysis-resolve/SKILL.md} +4 -4
  14. package/pipeline/commands/multi-agent/{autopilot.md → autopilot/SKILL.md} +4 -4
  15. package/pipeline/commands/multi-agent/{build-optimize.md → build-optimize/SKILL.md} +1 -1
  16. package/pipeline/commands/multi-agent/{channels.md → channels/SKILL.md} +12 -12
  17. package/pipeline/commands/multi-agent/{dev.md → dev/SKILL.md} +4 -4
  18. package/pipeline/commands/multi-agent/{dev-autopilot.md → dev-autopilot/SKILL.md} +4 -4
  19. package/pipeline/commands/multi-agent/{dev-local.md → dev-local/SKILL.md} +5 -5
  20. package/pipeline/commands/multi-agent/{dev-local-autopilot.md → dev-local-autopilot/SKILL.md} +4 -4
  21. package/pipeline/commands/multi-agent/{finish.md → finish/SKILL.md} +6 -6
  22. package/pipeline/commands/multi-agent/{generate.md → generate/SKILL.md} +3 -3
  23. package/pipeline/commands/multi-agent/{help.md → help/SKILL.md} +4 -4
  24. package/pipeline/commands/multi-agent/{local.md → local/SKILL.md} +5 -5
  25. package/pipeline/commands/multi-agent/{local-autopilot.md → local-autopilot/SKILL.md} +5 -5
  26. package/pipeline/commands/multi-agent/{manual-test.md → manual-test/SKILL.md} +1 -1
  27. package/pipeline/commands/multi-agent/refactor/SKILL.md +257 -0
  28. package/pipeline/commands/multi-agent/{resume.md → resume/SKILL.md} +1 -1
  29. package/pipeline/commands/multi-agent/{review.md → review/SKILL.md} +5 -5
  30. package/pipeline/commands/multi-agent/{setup.md → setup/SKILL.md} +1 -1
  31. package/pipeline/commands/multi-agent/{sync.md → sync/SKILL.md} +20 -58
  32. package/pipeline/lib/credential-store.sh +8 -4
  33. package/pipeline/{commands/multi-agent → multi-agent-refs}/_account-picker.md +2 -2
  34. package/pipeline/{commands/multi-agent → multi-agent-refs}/_dev-context.md +2 -2
  35. package/pipeline/{commands/multi-agent → multi-agent-refs}/_repo-picker.md +2 -2
  36. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/android-guide.md +1 -1
  37. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/jira.md +1 -1
  38. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/wiki.md +7 -7
  39. package/pipeline/multi-agent-refs/component-dispatch.md +92 -0
  40. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/cross-cli-contract.md +10 -77
  41. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/verify-by-test.md +1 -1
  42. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/generate-issue.md +2 -2
  43. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/issue-jira-triad.md +1 -1
  44. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/keychain.md +1 -1
  45. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/log-format.md +1 -1
  46. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/modes.md +2 -2
  47. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/operations.md +1 -1
  48. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-0-init.md +10 -10
  49. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-1-analysis.md +6 -6
  50. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-2-planning.md +3 -3
  51. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-3-dev.md +10 -10
  52. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-4-review.md +8 -8
  53. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-5-test.md +3 -3
  54. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-6-commit.md +4 -4
  55. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-7-report.md +6 -6
  56. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases.md +12 -12
  57. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/progress-contract.md +4 -4
  58. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/swiftui-guide.md +1 -1
  59. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/tracker-contract.md +3 -3
  60. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/wiki-capture.md +4 -4
  61. package/pipeline/preferences-template.json +17 -1
  62. package/pipeline/rules/figma-pipeline.md +2 -2
  63. package/pipeline/schemas/prefs.schema.json +0 -34
  64. package/pipeline/scripts/README.md +1 -3
  65. package/pipeline/scripts/build-skills-index.mjs +3 -6
  66. package/pipeline/scripts/eval-mine-corpus.mjs +187 -0
  67. package/pipeline/scripts/fixtures/install-layout.tsv +6 -5
  68. package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
  69. package/pipeline/scripts/lint-skills.mjs +26 -1
  70. package/pipeline/scripts/phase-banner.sh +2 -2
  71. package/pipeline/scripts/review-scope.mjs +94 -0
  72. package/pipeline/scripts/scan-agent-config.sh +2 -2
  73. package/pipeline/scripts/smoke-agent-log-cost.sh +1 -1
  74. package/pipeline/scripts/smoke-agent-model-routing.sh +4 -4
  75. package/pipeline/scripts/smoke-autopilot-circuit-breaker.sh +2 -2
  76. package/pipeline/scripts/smoke-channels-approval-gate.sh +2 -2
  77. package/pipeline/scripts/smoke-channels-flow.sh +5 -5
  78. package/pipeline/scripts/smoke-clarify.sh +1 -1
  79. package/pipeline/scripts/smoke-commands-skills-parity.sh +3 -3
  80. package/pipeline/scripts/smoke-community-gates.sh +1 -1
  81. package/pipeline/scripts/smoke-compliance-skills.sh +2 -2
  82. package/pipeline/scripts/smoke-cost-summary.sh +1 -1
  83. package/pipeline/scripts/smoke-cross-cli-behavior.sh +17 -43
  84. package/pipeline/scripts/smoke-cross-phase-cohesion.sh +1 -1
  85. package/pipeline/scripts/smoke-dev-critic.sh +1 -1
  86. package/pipeline/scripts/smoke-diff-explain.sh +1 -1
  87. package/pipeline/scripts/smoke-diff-risk.sh +1 -1
  88. package/pipeline/scripts/smoke-evidence-gate.sh +1 -1
  89. package/pipeline/scripts/smoke-figma-dispatch.sh +46 -57
  90. package/pipeline/scripts/smoke-gate-hooks.sh +1 -1
  91. package/pipeline/scripts/smoke-generate-issue.sh +8 -8
  92. package/pipeline/scripts/smoke-handoff-contract.sh +3 -3
  93. package/pipeline/scripts/smoke-identity-isolation.sh +2 -2
  94. package/pipeline/scripts/smoke-intent-guard.sh +1 -1
  95. package/pipeline/scripts/smoke-issue-comment-template.sh +2 -2
  96. package/pipeline/scripts/smoke-issue-jira-triad.sh +4 -4
  97. package/pipeline/scripts/smoke-language-axis.sh +6 -6
  98. package/pipeline/scripts/smoke-learnings-ledger.sh +3 -3
  99. package/pipeline/scripts/smoke-mode-dispatch-drift.sh +16 -16
  100. package/pipeline/scripts/smoke-model-fallback.sh +3 -3
  101. package/pipeline/scripts/smoke-multi-repo-integration.sh +2 -2
  102. package/pipeline/scripts/smoke-multi-repo-worktree.sh +1 -1
  103. package/pipeline/scripts/smoke-no-token-prompt.sh +5 -5
  104. package/pipeline/scripts/smoke-phase-0-multi-repo.sh +1 -1
  105. package/pipeline/scripts/smoke-phase-6-multi.sh +1 -1
  106. package/pipeline/scripts/smoke-phase4-gates.sh +45 -0
  107. package/pipeline/scripts/smoke-plan-approval-gate.sh +5 -5
  108. package/pipeline/scripts/smoke-plan-todos.sh +3 -3
  109. package/pipeline/scripts/smoke-pr-review-actions.sh +3 -3
  110. package/pipeline/scripts/smoke-prefs-language.sh +1 -1
  111. package/pipeline/scripts/smoke-progress-contract.sh +2 -2
  112. package/pipeline/scripts/smoke-push-retry.sh +1 -1
  113. package/pipeline/scripts/smoke-repo-map.sh +2 -2
  114. package/pipeline/scripts/smoke-shadow-git.sh +1 -1
  115. package/pipeline/scripts/smoke-skill-authoring.sh +4 -9
  116. package/pipeline/scripts/smoke-tasklist-ordering.sh +10 -10
  117. package/pipeline/scripts/smoke-test-gap.sh +1 -1
  118. package/pipeline/scripts/smoke-token-budget.sh +1 -1
  119. package/pipeline/scripts/smoke-token-preflight.sh +2 -2
  120. package/pipeline/scripts/smoke-tracker-contract.sh +13 -13
  121. package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +5 -5
  122. package/pipeline/scripts/smoke-triage-memory.sh +2 -2
  123. package/pipeline/scripts/smoke-update-check.sh +1 -1
  124. package/pipeline/scripts/smoke-url-enrichment.sh +2 -2
  125. package/pipeline/scripts/smoke-validator-gates.sh +1 -1
  126. package/pipeline/scripts/smoke-verify-by-test.sh +3 -3
  127. package/pipeline/scripts/smoke-wiki-integration.sh +9 -33
  128. package/pipeline/scripts/smoke-work-summary.sh +1 -1
  129. package/pipeline/scripts/smoke-worktree-path-convention.sh +4 -4
  130. package/pipeline/scripts/test-integrity-gate.mjs +83 -0
  131. package/pipeline/scripts/uninstall.mjs +17 -6
  132. package/pipeline/skills/.skill-manifest.json +40 -160
  133. package/pipeline/skills/.skills-index.json +3 -373
  134. package/pipeline/skills/shared/README.md +1 -1
  135. package/pipeline/skills/shared/core/multi-agent/SKILL.md +1 -1
  136. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +2 -2
  137. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +3 -3
  138. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
  139. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +1 -1
  140. package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
  141. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +1 -1
  142. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +116 -51
  143. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +8 -30
  144. package/pipeline/skills/shared/external/compose-components/SKILL.md +14 -14
  145. package/pipeline/skills/skills-index.md +3 -44
  146. package/pipeline/commands/multi-agent/refactor.md +0 -188
  147. package/pipeline/commands/multi-agent/refs/component-dispatch.md +0 -92
  148. package/pipeline/scripts/smoke-existing-discovery-gate.sh +0 -71
  149. package/pipeline/scripts/smoke-figma-android-parity.sh +0 -148
  150. package/pipeline/scripts/smoke-figma-credential-store.sh +0 -105
  151. package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +0 -177
  152. package/pipeline/scripts/smoke-figma-sync.sh +0 -149
  153. package/pipeline/scripts/smoke-sync-delegation.sh +0 -74
  154. package/pipeline/skills/figma-android/README.md +0 -38
  155. package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +0 -62
  156. package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +0 -158
  157. package/pipeline/skills/figma-android/figma-component-test/SKILL.md +0 -120
  158. package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +0 -35
  159. package/pipeline/skills/figma-android/figma-to-component/SKILL.md +0 -124
  160. package/pipeline/skills/figma-common/README.md +0 -64
  161. package/pipeline/skills/figma-common/figma-bottom-sheets/SKILL.md +0 -152
  162. package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +0 -282
  163. package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +0 -503
  164. package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +0 -288
  165. package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +0 -362
  166. package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +0 -206
  167. package/pipeline/skills/figma-common/figma-commit/REVIEW.md +0 -337
  168. package/pipeline/skills/figma-common/figma-commit/SKILL.md +0 -216
  169. package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +0 -223
  170. package/pipeline/skills/figma-common/figma-component-start/SKILL.md +0 -251
  171. package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +0 -78
  172. package/pipeline/skills/figma-common/figma-evolve-component/SKILL.md +0 -61
  173. package/pipeline/skills/figma-common/figma-fix/SKILL.md +0 -321
  174. package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +0 -542
  175. package/pipeline/skills/figma-common/figma-issue/SKILL.md +0 -750
  176. package/pipeline/skills/figma-common/figma-iterate/SKILL.md +0 -208
  177. package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +0 -1020
  178. package/pipeline/skills/figma-common/figma-mend/SKILL.md +0 -331
  179. package/pipeline/skills/figma-common/figma-navigation/SKILL.md +0 -156
  180. package/pipeline/skills/figma-common/figma-overlays/SKILL.md +0 -142
  181. package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +0 -398
  182. package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +0 -104
  183. package/pipeline/skills/figma-common/figma-review/SKILL.md +0 -400
  184. package/pipeline/skills/figma-common/figma-setup/SKILL.md +0 -514
  185. package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +0 -592
  186. package/pipeline/skills/figma-common/figma-skip/SKILL.md +0 -129
  187. package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +0 -105
  188. package/pipeline/skills/figma-common/figma-ui-patterns/patterns/animated-gradient-border.md +0 -116
  189. package/pipeline/skills/figma-common/figma-utility/SKILL.md +0 -274
  190. package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +0 -808
  191. package/pipeline/skills/figma-common/figma-validate/SKILL.md +0 -633
  192. package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +0 -716
  193. package/pipeline/skills/figma-common/performance-review-next/SKILL.md +0 -238
  194. package/pipeline/skills/figma-common/performance-start/SKILL.md +0 -430
  195. package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +0 -706
  196. package/pipeline/skills/figma-common/performance-tour/SKILL.md +0 -423
  197. package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +0 -67
  198. package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +0 -178
  199. package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +0 -184
  200. package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +0 -219
  201. package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +0 -274
  202. package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +0 -416
  203. package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +0 -57
  204. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +0 -307
  205. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +0 -119
  206. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +0 -174
  207. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +0 -333
  208. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +0 -368
  209. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +0 -393
  210. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +0 -617
  211. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +0 -352
  212. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +0 -337
  213. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +0 -206
  214. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +0 -235
  215. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +0 -214
  216. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +0 -902
  217. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +0 -156
  218. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +0 -175
  219. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +0 -176
  220. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +0 -333
  221. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +0 -412
  222. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +0 -336
  223. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +0 -705
  224. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +0 -332
  225. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +0 -380
  226. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +0 -262
  227. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +0 -482
  228. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +0 -274
  229. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +0 -636
  230. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +0 -142
  231. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +0 -547
  232. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +0 -39
  233. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +0 -659
  234. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +0 -580
  235. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +0 -51
  236. package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +0 -183
  237. package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +0 -64
  238. package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +0 -531
  239. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +0 -89
  240. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +0 -155
  241. package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +0 -196
  242. package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +0 -57
  243. package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +0 -89
  244. package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +0 -227
  245. package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +0 -157
  246. package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +0 -90
  247. package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +0 -116
  248. package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +0 -153
  249. package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +0 -130
  250. package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +0 -218
  251. package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +0 -188
  252. package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +0 -93
  253. package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +0 -98
  254. package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +0 -261
  255. package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +0 -147
  256. package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +0 -182
  257. package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +0 -185
  258. package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +0 -609
  259. package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +0 -332
  260. package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +0 -261
  261. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +0 -184
  262. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +0 -188
  263. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +0 -768
  264. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +0 -191
  265. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +0 -420
  266. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.example.json +0 -9
  267. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +0 -336
  268. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +0 -391
  269. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +0 -292
  270. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +0 -1
  271. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +0 -93
  272. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +0 -299
  273. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +0 -343
  274. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +0 -206
  275. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +0 -149
  276. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +0 -281
  277. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +0 -332
  278. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +0 -176
  279. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +0 -98
  280. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +0 -298
  281. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +0 -195
  282. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +0 -1298
  283. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +0 -228
  284. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +0 -1089
  285. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +0 -141
  286. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +0 -106
  287. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +0 -162
  288. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +0 -105
  289. package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +0 -179
  290. package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +0 -260
  291. package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +0 -260
  292. package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +0 -86
  293. package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +0 -321
  294. package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +0 -1470
  295. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +0 -176
  296. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +0 -147
  297. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +0 -629
  298. /package/pipeline/commands/multi-agent/{delete.md → delete/SKILL.md} +0 -0
  299. /package/pipeline/commands/multi-agent/{diff-explain.md → diff-explain/SKILL.md} +0 -0
  300. /package/pipeline/commands/multi-agent/{garbage-collect.md → garbage-collect/SKILL.md} +0 -0
  301. /package/pipeline/commands/multi-agent/{issue.md → issue/SKILL.md} +0 -0
  302. /package/pipeline/commands/multi-agent/{jira.md → jira/SKILL.md} +0 -0
  303. /package/pipeline/commands/multi-agent/{kill.md → kill/SKILL.md} +0 -0
  304. /package/pipeline/commands/multi-agent/{language.md → language/SKILL.md} +0 -0
  305. /package/pipeline/commands/multi-agent/{log.md → log/SKILL.md} +0 -0
  306. /package/pipeline/commands/multi-agent/{prune-logs.md → prune-logs/SKILL.md} +0 -0
  307. /package/pipeline/commands/multi-agent/{purge.md → purge/SKILL.md} +0 -0
  308. /package/pipeline/commands/multi-agent/{scan.md → scan/SKILL.md} +0 -0
  309. /package/pipeline/commands/multi-agent/{search.md → search/SKILL.md} +0 -0
  310. /package/pipeline/commands/multi-agent/{stack.md → stack/SKILL.md} +0 -0
  311. /package/pipeline/commands/multi-agent/{status.md → status/SKILL.md} +0 -0
  312. /package/pipeline/commands/multi-agent/{test.md → test/SKILL.md} +0 -0
  313. /package/pipeline/commands/multi-agent/{update.md → update/SKILL.md} +0 -0
  314. /package/pipeline/{commands/multi-agent → multi-agent-refs}/_input-parser.md +0 -0
  315. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/analysis-template.md +0 -0
  316. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/audit-guide.md +0 -0
  317. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/backend-guide.md +0 -0
  318. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/confluence.md +0 -0
  319. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/issue-comment.md +0 -0
  320. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr-review-actions.md +0 -0
  321. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr.md +0 -0
  322. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/conventions-defaults.md +0 -0
  323. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/autopilot-circuit-breaker.md +0 -0
  324. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/dev-critic.md +0 -0
  325. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/external-context-injection.md +0 -0
  326. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/model-fallback.md +0 -0
  327. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/plan-todos.md +0 -0
  328. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/prior-fix-detection.md +0 -0
  329. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/repo-map.md +0 -0
  330. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/shadow-git.md +0 -0
  331. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/frontend-guide.md +0 -0
  332. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/knowledge.md +0 -0
  333. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/multi-repo-integration-build.md +0 -0
  334. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/picker-contract.md +0 -0
  335. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/rules.md +0 -0
@@ -1,333 +0,0 @@
1
- # PHASE 2 - Utility Integration Orchestrator
2
-
3
- Orchestrates Phase 2 sub-phases: dispatches sub-agents, collects results, writes pass2/_index.md.
4
- PREV: Phase 1.5 (Existing Component Discovery)
5
- NEXT: Phase 3 (Data Analysis)
6
-
7
- ---
8
-
9
- ## ENTRY GATE - discovery status
10
-
11
- Phase 2 reads `agent-state.discovery.status` written by Phase 1.5:
12
-
13
- | `discovery.status` | Phase 2 action |
14
- |---|---|
15
- | `GREENFIELD_OK` (or absent for backward compat) | EXECUTE - run all sub-phases below |
16
- | `GAP_ANALYSIS` | SKIP - Phase 2 outputs are not needed; jump to Phase 4 (only run Documentation / Code Connect / tests / wiki sub-phases that target the gap list) |
17
- | `ALREADY_MAPPED` (no user override) | SKIP - same as `GAP_ANALYSIS` |
18
- | `EXISTING_SOURCE_NO_CC` (publish-only path picked) | SKIP - jump to Phase 6 |
19
- | `CANCELLED` | HALT |
20
- | Any other value | HALT - unknown discovery state, refuse to proceed |
21
-
22
- If `discovery` field is absent on `agent-state.json`, log a one-line warning ("phase-1.5 not run; assuming GREENFIELD_OK") and proceed. This preserves backward compatibility with runs started before the discovery gate existed.
23
-
24
- ---
25
-
26
- ## IMPLEMENTATION_MODULE
27
-
28
- All utilities from this phase are consumed via `UIComponentUtilities`:
29
-
30
- ```swift
31
- import UIComponentUtilities
32
- ```
33
-
34
- | Category | Extension | Usage |
35
- |----------|-----------|-------|
36
- | Testing | `View.accessibilityIdentifier(_ key: UITestingIdentifierKey)` | `.accessibilityIdentifier(.ComponentName.element)` |
37
- | Localization | `Text(_ key: LocalizationStringKey)` | `Text(.ComponentName.title)` |
38
- | Accessibility | `View.accessibilityLabel(_ key: LocalizedAccessibilityStringKey)` | Only when SwiftUI can't read visible text - many components need NO accessibility modifiers |
39
- | Analytics | `View.analyticsButton(id:label:type:)` | `.analyticsButton(id: "id", label: "Submit", type: .primary)` |
40
-
41
- SOURCE: `Sources/UIComponentUtilities/`
42
-
43
- ---
44
-
45
- ## PRE-CHECK: Phase 1 Complete
46
-
47
- ```
48
- Read: {artifactPath}/IMPLEMENTATION_HISTORY.md
49
- Read: {artifactPath}/pass1/_index.md
50
- ```
51
-
52
- EXTRACT:
53
- - `componentName`
54
- - `artifactPath`
55
- - `nodeId`
56
- - `fileKey`
57
-
58
- | Result | Action |
59
- |--------|--------|
60
- | Both files exist | Proceed to REGISTRY_LOOKUP |
61
- | Either missing | HALT |
62
-
63
- FAIL →
64
- ```
65
- STATUS: HALT
66
- PHASE: phase-2
67
- GATE: PRE_CHECK
68
- REASON: IMPLEMENTATION_HISTORY.md or pass1/_index.md not found. Phase 1 must complete first.
69
- COMPLETED_GATES: []
70
- ARTIFACTS_CREATED: none
71
- USER_ACTION_REQUIRED: Run Phase 1 first.
72
- ```
73
-
74
- Verify `pass2/` directory exists. If not:
75
-
76
- ```bash
77
- mkdir -p {artifactPath}/pass2
78
- ```
79
-
80
- ---
81
-
82
- ## NORMALIZE_DESIGN_CONTEXT: Handle Sublayer Format
83
-
84
- Phase 1 script may produce a sublayer format for large components. Normalize it before dispatching sub-phases so they always see a single `response` field.
85
-
86
- ```
87
- Read: {artifactPath}/pass1/design_context_response.json
88
- ```
89
-
90
- Check the JSON structure:
91
-
92
- | Format | Detection | Action |
93
- |--------|-----------|--------|
94
- | Normal | `sublayers` is `false` or absent | No action needed - `response` field exists |
95
- | Sublayer | `sublayers` is `true` | Concatenate all `responses` values (see below) |
96
-
97
- ### Sublayer normalization
98
-
99
- If `sublayers: true`:
100
-
101
- 1. Read all values from the `responses` object (keyed by node ID, e.g. `"123:456": "...code..."`)
102
- 2. Concatenate them into a single string, separated by `\n\n// --- Sublayer: {nodeId} ---\n\n`
103
- 3. Add a `response` field to the JSON with the concatenated string
104
- 4. Keep the original `sublayers`, `sublayerNodeIds`, and `responses` fields intact (for traceability)
105
- 5. Write the updated JSON back to `{artifactPath}/pass1/design_context_response.json`
106
-
107
- After normalization, all sub-phases read the `response` field as usual - no sublayer awareness needed.
108
-
109
- ```json
110
- {
111
- "sublayers": true,
112
- "sublayerNodeIds": ["123:456", "789:012"],
113
- "responses": { "123:456": "...code...", "789:012": "...code..." },
114
- "response": "...concatenated code from all sublayers..."
115
- }
116
- ```
117
-
118
- ---
119
-
120
- ## REGISTRY_LOOKUP: Check Pre-existing Keys
121
-
122
- Lookup whether this component already has utility keys registered (e.g., by Android or a previous iOS run).
123
-
124
- ```bash
125
- cd {repos.common.path} && .build/debug/FigmaRegistryUtility utility-lookup --node-id '{nodeId}'
126
- ```
127
-
128
- > **If binary not found:** `swift build --package-path {repos.common.path} --product FigmaRegistryUtility`
129
-
130
- | Result | Action |
131
- |--------|--------|
132
- | Returns JSON with keys | Pass pre-existing keys to each sub-phase as `registryData` input |
133
- | Returns `{}` (empty) | Proceed normally (fresh generation) |
134
- | Tool error | Log warning, proceed without registry data (non-blocking) |
135
-
136
- The `registryData` is passed to sub-phases so they can:
137
- - Skip CLI check calls for keys already in the registry AND in the data files
138
- - Merge new keys with existing ones instead of duplicating
139
-
140
- ---
141
-
142
- ## ROUTING
143
-
144
- ### Sub-phase inventory
145
-
146
- | Sub-phase | Skill Doc | Purpose | Required | Depends On |
147
- |-----------|-----------|---------|----------|------------|
148
- | 2A | `phase-2a-testing-identifiers.md` | UI testing identifiers | **ALWAYS** | Phase 1 |
149
- | 2B | `phase-2b-localization.md` | Localized display text | If visible text exists | Phase 1 |
150
- | 2C | `phase-2c-accessibility.md` | VoiceOver labels/hints | **ALWAYS** | Phase 1 |
151
- | 2D | `phase-2d-analytics.md` | Event tracking | If interactive elements exist | Phase 1 + **2A** |
152
-
153
- ### Execution flow
154
-
155
- ```
156
- PRE-CHECK
157
-
158
- NORMALIZE_DESIGN_CONTEXT
159
-
160
- REGISTRY_LOOKUP
161
-
162
- ┌───────────────────────────────────┐
163
- │ PARALLEL DISPATCH (sub-agents) │
164
- │ │
165
- │ 2A - Testing Identifiers │ ← required
166
- │ 2B - Localization Keys │ ← if visible text
167
- │ 2C - Accessibility Keys │ ← required
168
- │ │
169
- └───────────────────────────────────┘
170
- ↓ wait for all to complete
171
-
172
- 2D - Analytics Events ← if interactive elements (depends on 2A output)
173
-
174
- COLLECT RESULTS
175
-
176
- UPDATE_IMPLEMENTATION_HISTORY
177
-
178
- WRITE_PASS2_INDEX
179
-
180
- PHASE OUTPUT
181
- ```
182
-
183
- ### Dispatch instructions
184
-
185
- **Wave 1 (parallel):** Launch 2A, 2B, 2C as sub-agents simultaneously.
186
- - Each reads `pass1/_index.md` independently.
187
- - Each writes its own artifact to `pass2/`.
188
- - Wait for ALL to complete before proceeding.
189
-
190
- **Wave 2 (sequential):** Launch 2D after Wave 1 completes.
191
- - 2D requires `pass2/utility_identifiers.md` from 2A (uses testing identifiers as analytics event IDs).
192
- - Skip 2D if no interactive elements found in `pass1/design_context_response.json`.
193
-
194
- ### Skip conditions
195
-
196
- | Sub-phase | Skip when |
197
- |-----------|-----------|
198
- | 2B | No visible text in design_context_response.json |
199
- | 2D | No interactive elements (buttons, links, toggles, cards) in design_context_response.json |
200
-
201
- If skipped, write a placeholder artifact:
202
-
203
- ```markdown
204
- # {Category}: {componentName}
205
-
206
- No {category} required for this component.
207
- Generated: {ISO_DATE}
208
- Reason: No {condition} found in design context.
209
- ```
210
-
211
- ---
212
-
213
- ## GATE 1: COLLECT_RESULTS
214
-
215
- After all sub-phases complete, verify each produced its artifacts (both JSON sidecar and markdown):
216
-
217
- ```
218
- [ ] pass2/utility_identifiers.md exists (Phase 2A)
219
- [ ] pass2/utility_identifiers.json exists (Phase 2A - JSON sidecar)
220
- [ ] pass2/utility_localization.md exists (Phase 2B - or skipped placeholder)
221
- [ ] pass2/utility_localization.json exists (Phase 2B - JSON sidecar)
222
- [ ] pass2/utility_accessibility.md exists (Phase 2C)
223
- [ ] pass2/utility_accessibility.json exists (Phase 2C - JSON sidecar)
224
- [ ] pass2/utility_analytics.md exists (Phase 2D - or skipped placeholder)
225
- [ ] pass2/utility_analytics.json exists (Phase 2D - JSON sidecar)
226
- ```
227
-
228
- ANY markdown missing →
229
- ```
230
- STATUS: HALT
231
- PHASE: phase-2
232
- GATE: COLLECT_RESULTS
233
- REASON: Sub-phase artifact missing.
234
- MISSING: [list missing files]
235
- USER_ACTION_REQUIRED: Re-run the failed sub-phase.
236
- ```
237
-
238
- If a JSON sidecar is missing but the markdown exists, the finalize script will log a warning and use empty arrays - this is non-blocking.
239
-
240
- ---
241
-
242
- ## GATE 2: FINALIZE (script)
243
-
244
- **IMPORTANT:** Do NOT read sub-phase markdown files in the main orchestrator context. The finalize script handles everything: building component-utilities.json, registering, and writing _index.md.
245
-
246
- ```bash
247
- python3 {skillPath}/scripts/phase2-finalize.py \
248
- --artifact-path '{artifactPath}' \
249
- --node-id '{nodeId}' \
250
- --file-key '{fileKey}' \
251
- --component-name '{componentName}'
252
- ```
253
-
254
- The script:
255
- 1. Reads the 4 JSON sidecar files (NOT the markdowns)
256
- 2. Builds `pass2/component-utilities.json`
257
- 3. Registers via `FigmaRegistryUtility utility-register`
258
- 4. Writes `pass2/_index.md`
259
- 5. Outputs a JSON summary to stdout
260
-
261
- Parse the stdout JSON:
262
- ```json
263
- {"status": "ok", "testing": 5, "localization": 0, "accessibility": 0, "analytics": 0, "registry": true}
264
- ```
265
-
266
- | Result | Action |
267
- |--------|--------|
268
- | `status: "ok"` | Use counts for IMPLEMENTATION_HISTORY.md update |
269
- | `status: "error"` | HALT with error message |
270
-
271
- ---
272
-
273
- ## GATE 3: UPDATE_IMPLEMENTATION_HISTORY
274
-
275
- Using the counts from the finalize script output, append to `{artifactPath}/IMPLEMENTATION_HISTORY.md`:
276
-
277
- ```markdown
278
- ## Phase 2: Utility Integration
279
- - Testing Identifiers: ✅ pass2/utility_identifiers.md ({testing} added)
280
- - Localization Keys: ✅ pass2/utility_localization.md ({localization} keys) | ⏭️ Skipped (no visible text)
281
- - Accessibility Keys: ✅ pass2/utility_accessibility.md ({accessibility} keys)
282
- - Analytics Events: ✅ pass2/utility_analytics.md ({analytics} events) | ⏭️ Skipped (no interactive elements)
283
- - Registry: ✅ {repos.common.path}/Shared/Figma/Components/{nodeId}.json updated | ⚠️ Registry update failed (non-blocking)
284
- - Completed: {DATE}
285
- ```
286
-
287
- ---
288
-
289
- ## VALIDATION CHECKLIST
290
-
291
- ```
292
- [ ] IMPLEMENTATION_HISTORY.md loaded from Phase 1
293
- [ ] design_context_response.json normalized (sublayer → flat response field)
294
- [ ] Registry lookup performed (utility-lookup)
295
- [ ] Pre-existing keys passed to sub-phases (if registry data found)
296
- [ ] Phase 2A completed - utility_identifiers.md + .json exists (required)
297
- [ ] Phase 2B completed - utility_localization.md + .json exists (or skipped with placeholder)
298
- [ ] Phase 2C completed - utility_accessibility.md + .json exists (required)
299
- [ ] Phase 2D completed - utility_analytics.md + .json exists (or skipped with placeholder)
300
- [ ] phase2-finalize.py ran successfully (builds component-utilities.json, registers, writes _index.md)
301
- [ ] IMPLEMENTATION_HISTORY.md updated with Phase 2 summary (using script output counts)
302
- ```
303
-
304
- ---
305
-
306
- ## SUCCESS OUTPUT
307
-
308
- ```
309
- STATUS: COMPLETE
310
- PHASE: phase-2
311
- GATES_PASSED: [PRE_CHECK, NORMALIZE_DESIGN_CONTEXT, REGISTRY_LOOKUP, DISPATCH_WAVE_1, DISPATCH_WAVE_2, COLLECT_RESULTS, FINALIZE, UPDATE_IMPLEMENTATION_HISTORY]
312
- ARTIFACTS_CREATED:
313
- - {artifactPath}/pass2/utility_identifiers.json + .md (via Phase 2A)
314
- - {artifactPath}/pass2/utility_localization.json + .md (via Phase 2B)
315
- - {artifactPath}/pass2/utility_accessibility.json + .md (via Phase 2C)
316
- - {artifactPath}/pass2/utility_analytics.json + .md (via Phase 2D)
317
- - {artifactPath}/pass2/component-utilities.json (via finalize script)
318
- - {artifactPath}/pass2/_index.md (via finalize script)
319
- - {repos.common.path}/Shared/Figma/Components/{nodeId}.json (via finalize script registry)
320
- SUMMARY: Utility integration complete. {testing} testing, {localization} loc, {accessibility} a11y, {analytics} analytics. Registry updated.
321
- ```
322
-
323
- ---
324
-
325
- ## REFERENCES
326
-
327
- | Topic | File |
328
- |-------|------|
329
- | Phase 2A | `phases/phase-2a-testing-identifiers.md` |
330
- | Phase 2B | `phases/phase-2b-localization.md` |
331
- | Phase 2C | `phases/phase-2c-accessibility.md` |
332
- | Phase 2D | `phases/phase-2d-analytics.md` |
333
- | UIComponentUtilities | `Sources/UIComponentUtilities/` |
@@ -1,368 +0,0 @@
1
- # PHASE 2A - Testing Identifiers
2
-
3
- UI testing identifier integration.
4
- REF: `reference/testing-identifiers-naming.md`
5
-
6
- required - always execute this phase.
7
- PARALLEL WITH: Phase 2B, Phase 2C (all read from pass1/_index.md independently)
8
- NEXT: Phase 2D (depends on this phase's output)
9
-
10
- ---
11
-
12
- ## IMPLEMENTATION_PATTERN
13
-
14
- Extension: `Sources/UIComponentUtilities/TestingIdentifiers/View+UITestingIdentifierKey.swift`
15
-
16
- ```swift
17
- import UIComponentUtilities
18
-
19
- // Static identifier
20
- Button("Submit") { }
21
- .accessibilityIdentifier(.ComponentName.submitButton)
22
-
23
- // Dynamic identifier (list items)
24
- ForEach(items.indices, id: \.self) { index in
25
- ItemRow(item: items[index])
26
- .accessibilityIdentifier(.ComponentName.Item.row.with(index))
27
- }
28
- ```
29
-
30
- ---
31
-
32
- ## PRE-CHECK: Phase 1 Complete
33
-
34
- ```
35
- Read: {artifactPath}/pass1/_index.md
36
- ```
37
-
38
- Verify this file exists and lists the expected Phase 1 output files.
39
-
40
- Then read the files needed for this phase:
41
- - `{artifactPath}/pass1/design_context_response.json`
42
- - `{artifactPath}/pass1/component_properties.json`
43
-
44
- Also read:
45
- - `{artifactPath}/IMPLEMENTATION_HISTORY.md`
46
-
47
- Extract: `componentName`, `artifactPath`, `nodeId`, `fileKey`.
48
-
49
- ### Registry Input (optional)
50
-
51
- The orchestrator may pass `registryData` containing pre-existing keys from `{repos.common.path}/Shared/Figma/Components/{nodeId}.json`.
52
- If `registryData.testingIdentifiers` exists and is non-empty, use it to pre-populate the identifiers list.
53
- Keys found in both registry AND the data files can be marked "Existing" immediately (skip CLI check in GATE 4).
54
-
55
- If any required file is missing:
56
-
57
- ```
58
- STATUS: HALT
59
- PHASE: phase-2a
60
- GATE: PRE_CHECK
61
- REASON: Required Phase 1 artifacts missing. Pass1/_index.md or referenced files not found.
62
- COMPLETED_GATES: []
63
- ARTIFACTS_CREATED: none
64
- USER_ACTION_REQUIRED: Run Phase 1 first to gather Figma data.
65
- ```
66
-
67
- ---
68
-
69
- ## CONTEXT-AWARE IDENTIFIERS
70
-
71
- Components are reusable - the same `TurkishButton` appears in many screens.
72
- Testing identifiers cascade via `UIIdentifierContext` (SwiftUI EnvironmentKey).
73
-
74
- ### How It Works
75
-
76
- Parent views set context using `UITestingIdentifierKey` or raw strings:
77
-
78
- ```swift
79
- // Type-safe (recommended) - uses key's identifier string as segment
80
- PassengerListView()
81
- .identifierContext(.PassengerList.screen)
82
-
83
- // Raw string (fallback)
84
- SearchSection()
85
- .identifierContext("search")
86
- ```
87
-
88
- Child components use standard `.accessibilityIdentifier(.Component.element)` -
89
- the context is prepended automatically:
90
-
91
- ```
92
- context = ["passenger_list", "search"]
93
- .accessibilityIdentifier(.TurkishButton.button)
94
- → "passenger_list_search_turkishbutton_button"
95
- ```
96
-
97
- ### What Phase 2A Generates
98
-
99
- Phase 2A generates **component-level** identifiers only (e.g., `TurkishButton.button`).
100
- Context prefixes are NOT baked into component identifiers - they come from the
101
- parent view hierarchy at runtime via `.identifierContext()`.
102
-
103
- ### Artifact Guidance
104
-
105
- In the Implementation section of `utility_identifiers.md`, include a note:
106
-
107
- > **Context**: These identifiers support hierarchical context via `.identifierContext()`.
108
- > Parent screens should set `.identifierContext(.ScreenKey.name)` to disambiguate
109
- > reusable components. The component itself does NOT need modification.
110
- > Use `.testIdentifier()` as an alias for `.accessibilityIdentifier()`.
111
-
112
- ---
113
-
114
- ## GATE 1: COLLECT_REQUIREMENTS
115
-
116
- | Priority | Source | Check |
117
- |----------|--------|-------|
118
- | 1 | User prompt | Explicit identifier requests |
119
- | 2 | Attached file | README.md, Confluence export, screenshot |
120
- | 3 | Generated | From design_context_response.json |
121
-
122
- USE: Merge all sources. User input overrides generated.
123
-
124
- ---
125
-
126
- ## GATE 2: GENERATE_FROM_DESIGN_CONTEXT
127
-
128
- INPUT: `{artifactPath}/pass1/design_context_response.json`
129
- INPUT: `{artifactPath}/pass1/component_properties.json`
130
-
131
- SCAN for:
132
-
133
- | Node Pattern | Identifier Type | Key Suffix |
134
- |--------------|-----------------|------------|
135
- | Root text element | Static | `.title` |
136
- | Button/link element | Static | `.submitButton`, `.link` |
137
- | Repeated sibling structure | Dynamic | `.Item.row` |
138
- | Input field | Static | `.input` |
139
- | Card container | Static | `.card` |
140
- | Image element | Static | `.image` |
141
- | Close/dismiss button | Static | `.closeButton` |
142
- | Header text | Static | `.header` |
143
- | Badge/tag | Static | `.badge` |
144
-
145
- Also use `component_properties.json` to identify:
146
- - Variant properties → identifier per variant state
147
- - Boolean properties → identifiers for togglable elements
148
- - Text slots → identifiers for text elements
149
- - Nested components → identifiers for sub-component containers
150
-
151
- OUTPUT: List of `{ key, value, usage }`.
152
-
153
- ---
154
-
155
- ## GATE 3: VALIDATE_NAMING
156
-
157
- REF: `reference/testing-identifiers-naming.md`
158
-
159
- | Pattern | Key Format (PascalCase.Dot) | Value Format (snake_case) |
160
- |---------|------------|--------------|
161
- | Static | `<ComponentName>.<Element>` | `<componentname>_<element>` |
162
- | List Item | `<ComponentName>.Item.<Element>` | `<componentname>_item_<element>_%@` |
163
- | Variant | `<ComponentName>.Item.<Variant>` | `<componentname>_item_<variant>_%@` |
164
-
165
- VALIDATE each identifier:
166
- - Key follows PascalCase.Dot.Notation
167
- - Value is snake_case
168
- - Value length ≤ 100 characters
169
- - No spaces or special characters in value
170
- - Unique within component scope
171
- - Max 5 levels in key hierarchy
172
-
173
- If any identifier fails validation, fix it before proceeding.
174
-
175
- ---
176
-
177
- ## GATE 4: CHECK_EXISTING_IDENTIFIERS
178
-
179
- ### Registry fast-path
180
-
181
- If `registryData.testingIdentifiers` contains this key, run the CLI check to confirm it still exists in the data file.
182
- If both registry AND CLI confirm → mark "Existing" immediately.
183
- If registry has it but CLI says not found → mark "To Add" (re-add it).
184
-
185
- ### CLI check
186
-
187
- For each identifier in the list, check if it already exists:
188
-
189
- ```bash
190
- {repos.common.path}/.build/debug/UITestingIdentifierTool check --key '<KEY>'
191
- ```
192
-
193
- > **If binary not found:** `swift build --package-path {repos.common.path} --product UITestingIdentifierTool`
194
-
195
- OUTPUT:
196
- ```
197
- ✅ Key exists: <KEY>
198
- Value: <VALUE>
199
- ```
200
- or
201
- ```
202
- ❌ Key not found: <KEY>
203
- ```
204
-
205
- | Result | Action |
206
- |--------|--------|
207
- | `✅ Key exists` | Mark status: "Existing" |
208
- | `❌ Key not found` | Mark status: "To Add" |
209
-
210
- FAIL (tool error) →
211
- ```
212
- STATUS: HALT
213
- PHASE: phase-2a
214
- GATE: CHECK_EXISTING_IDENTIFIERS
215
- REASON: UITestingIdentifierTool failed.
216
- COMPLETED_GATES: [PRE_CHECK, COLLECT_REQUIREMENTS, GENERATE_FROM_DESIGN_CONTEXT, VALIDATE_NAMING]
217
- ARTIFACTS_CREATED: none
218
- USER_ACTION_REQUIRED: Options:
219
- 1) Retry command
220
- 2) Build tool first: swift build --package-path {repos.common.path} --product UITestingIdentifierTool
221
- 3) Skip identifier integration
222
- ```
223
-
224
- ---
225
-
226
- ## GATE 5: ADD_MISSING_IDENTIFIERS
227
-
228
- For each identifier with status "To Add":
229
-
230
- ```bash
231
- {repos.common.path}/.build/debug/UITestingIdentifierTool add --key '<KEY>' --value '<VALUE>'
232
- ```
233
-
234
- OUTPUT:
235
- ```
236
- ✅ Added: <KEY> = <VALUE>
237
- ```
238
-
239
- After all additions, generate Swift code:
240
-
241
- ```bash
242
- {repos.common.path}/.build/debug/UITestingIdentifierTool generate
243
- ```
244
-
245
- OUTPUT:
246
- ```
247
- ✅ Generated iOS code: iOS/Sources/UITestingIdentifiers/Generated/UITestingIdentifierKeys.swift
248
- ```
249
-
250
- | Result | Action |
251
- |--------|--------|
252
- | All succeeded | Proceed to GATE 6 |
253
- | Any failed | HALT |
254
-
255
- FAIL →
256
- ```
257
- STATUS: HALT
258
- PHASE: phase-2a
259
- GATE: ADD_MISSING_IDENTIFIERS
260
- REASON: Failed to add identifier or generate code.
261
- COMPLETED_GATES: [PRE_CHECK, COLLECT_REQUIREMENTS, GENERATE_FROM_DESIGN_CONTEXT, VALIDATE_NAMING, CHECK_EXISTING_IDENTIFIERS]
262
- ARTIFACTS_CREATED: none
263
- USER_ACTION_REQUIRED: Options:
264
- 1) Retry failed command
265
- 2) Skip this identifier and continue
266
- 3) Skip identifier integration entirely
267
- ```
268
-
269
- ---
270
-
271
- ## GATE 6: WRITE_ARTIFACT
272
-
273
- ### JSON Sidecar (machine-readable)
274
-
275
- Write `{artifactPath}/pass2/utility_identifiers.json`:
276
-
277
- ```json
278
- {
279
- "testingIdentifiers": [
280
- { "key": "ComponentName.element", "value": "componentname_element", "usage": "Element description" }
281
- ]
282
- }
283
- ```
284
-
285
- This JSON is consumed by `phase2-finalize.py` to build `component-utilities.json`. The orchestrator reads ONLY this JSON - never the markdown.
286
-
287
- ### Markdown Artifact (human-readable)
288
-
289
- Write `{artifactPath}/pass2/utility_identifiers.md`:
290
-
291
- ```markdown
292
- # Testing Identifiers
293
-
294
- Component: {componentName}
295
- Generated: {ISO_DATE}
296
- Source: pass1/design_context_response.json, pass1/component_properties.json
297
-
298
- ## Identifiers
299
-
300
- | Key | Value | Status | Usage |
301
- |-----|-------|--------|-------|
302
- | {ComponentName}.title | {componentname}_title | Added | Title label |
303
- | {ComponentName}.submitButton | {componentname}_submit_button | Added | Submit button |
304
- | {ComponentName}.closeButton | {componentname}_close_button | Existing | Close button |
305
- | {ComponentName}.Item.row | {componentname}_item_row_%@ | Added | Row (dynamic) |
306
-
307
- ## Implementation
308
-
309
- ```swift
310
- import UIComponentUtilities
311
-
312
- // Static identifier
313
- Text(title)
314
- .accessibilityIdentifier(.{ComponentName}.title)
315
-
316
- Button("Submit") { }
317
- .accessibilityIdentifier(.{ComponentName}.submitButton)
318
-
319
- // Dynamic identifier (list items)
320
- ForEach(items.indices, id: \.self) { index in
321
- ItemRow(item: items[index])
322
- .accessibilityIdentifier(.{ComponentName}.Item.row.with(index))
323
- }
324
-
325
- // With analytics (identifiers used as analytics IDs)
326
- Button("Submit") { }
327
- .accessibilityIdentifier(.{ComponentName}.submitButton)
328
- .analyticsButton(
329
- id: UITestingIdentifierKey.{ComponentName}.submitButton.description,
330
- label: "Submit",
331
- type: .primary
332
- )
333
- ```
334
- ```
335
-
336
- ---
337
-
338
- ## VALIDATION CHECKLIST
339
-
340
- Before marking complete, verify:
341
-
342
- ```
343
- [ ] All text elements in design_context have identifiers
344
- [ ] All interactive elements have identifiers
345
- [ ] All list/repeated structures have dynamic identifiers with %@
346
- [ ] Key format: PascalCase.Dot.Notation
347
- [ ] Value format: snake_case, ≤100 chars
348
- [ ] No duplicate keys within component scope
349
- [ ] UITestingIdentifierTool check passes for all added keys
350
- [ ] UITestingIdentifierTool generate completed successfully
351
- [ ] utility_identifiers.json written to pass2/ (JSON sidecar for finalize script)
352
- [ ] utility_identifiers.md written to pass2/
353
- [ ] Implementation section shows correct import and usage patterns
354
- ```
355
-
356
- ---
357
-
358
- ## SUCCESS OUTPUT
359
-
360
- ```
361
- STATUS: COMPLETE
362
- PHASE: phase-2a
363
- GATES_PASSED: [PRE_CHECK, COLLECT_REQUIREMENTS, GENERATE_FROM_DESIGN_CONTEXT, VALIDATE_NAMING, CHECK_EXISTING_IDENTIFIERS, ADD_MISSING_IDENTIFIERS, WRITE_ARTIFACT]
364
- ARTIFACTS_CREATED:
365
- - {artifactPath}/pass2/utility_identifiers.json
366
- - {artifactPath}/pass2/utility_identifiers.md
367
- SUMMARY: Testing identifiers: {ADDED} added, {EXISTING} existing.
368
- ```