@mmerterden/multi-agent-pipeline 11.1.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 (342) hide show
  1. package/CHANGELOG.md +58 -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/_common.mjs +9 -1
  7. package/install/_dev-only-files.mjs +0 -6
  8. package/install/claude.mjs +45 -18
  9. package/install/copilot.mjs +16 -14
  10. package/install/templates/copilot-instructions.md +3 -3
  11. package/package.json +1 -1
  12. package/pipeline/commands/{multi-agent.md → multi-agent/SKILL.md} +39 -39
  13. package/pipeline/commands/multi-agent/{analysis.md → analysis/SKILL.md} +18 -18
  14. package/pipeline/commands/multi-agent/{analysis-resolve.md → analysis-resolve/SKILL.md} +4 -4
  15. package/pipeline/commands/multi-agent/{autopilot.md → autopilot/SKILL.md} +4 -4
  16. package/pipeline/commands/multi-agent/{build-optimize.md → build-optimize/SKILL.md} +1 -1
  17. package/pipeline/commands/multi-agent/{channels.md → channels/SKILL.md} +12 -12
  18. package/pipeline/commands/multi-agent/{dev.md → dev/SKILL.md} +4 -4
  19. package/pipeline/commands/multi-agent/{dev-autopilot.md → dev-autopilot/SKILL.md} +4 -4
  20. package/pipeline/commands/multi-agent/{dev-local.md → dev-local/SKILL.md} +5 -5
  21. package/pipeline/commands/multi-agent/{dev-local-autopilot.md → dev-local-autopilot/SKILL.md} +4 -4
  22. package/pipeline/commands/multi-agent/{finish.md → finish/SKILL.md} +6 -6
  23. package/pipeline/commands/multi-agent/{generate.md → generate/SKILL.md} +3 -3
  24. package/pipeline/commands/multi-agent/{help.md → help/SKILL.md} +4 -4
  25. package/pipeline/commands/multi-agent/{local.md → local/SKILL.md} +5 -5
  26. package/pipeline/commands/multi-agent/{local-autopilot.md → local-autopilot/SKILL.md} +5 -5
  27. package/pipeline/commands/multi-agent/{manual-test.md → manual-test/SKILL.md} +1 -1
  28. package/pipeline/commands/multi-agent/refactor/SKILL.md +257 -0
  29. package/pipeline/commands/multi-agent/{resume.md → resume/SKILL.md} +1 -1
  30. package/pipeline/commands/multi-agent/{review.md → review/SKILL.md} +5 -5
  31. package/pipeline/commands/multi-agent/{setup.md → setup/SKILL.md} +1 -1
  32. package/pipeline/commands/multi-agent/{sync.md → sync/SKILL.md} +20 -58
  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-stack-plugins.mjs +1 -1
  66. package/pipeline/scripts/fixtures/install-layout.tsv +6 -5
  67. package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
  68. package/pipeline/scripts/phase-banner.sh +2 -2
  69. package/pipeline/scripts/review-scope.mjs +94 -0
  70. package/pipeline/scripts/scan-agent-config.sh +2 -2
  71. package/pipeline/scripts/smoke-agent-log-cost.sh +1 -1
  72. package/pipeline/scripts/smoke-agent-model-routing.sh +4 -4
  73. package/pipeline/scripts/smoke-autopilot-circuit-breaker.sh +2 -2
  74. package/pipeline/scripts/smoke-channels-approval-gate.sh +2 -2
  75. package/pipeline/scripts/smoke-channels-flow.sh +5 -5
  76. package/pipeline/scripts/smoke-clarify.sh +1 -1
  77. package/pipeline/scripts/smoke-commands-skills-parity.sh +3 -3
  78. package/pipeline/scripts/smoke-community-gates.sh +1 -1
  79. package/pipeline/scripts/smoke-compliance-skills.sh +2 -2
  80. package/pipeline/scripts/smoke-cost-summary.sh +1 -1
  81. package/pipeline/scripts/smoke-cross-cli-behavior.sh +17 -43
  82. package/pipeline/scripts/smoke-cross-phase-cohesion.sh +1 -1
  83. package/pipeline/scripts/smoke-dev-critic.sh +1 -1
  84. package/pipeline/scripts/smoke-diff-explain.sh +1 -1
  85. package/pipeline/scripts/smoke-diff-risk.sh +1 -1
  86. package/pipeline/scripts/smoke-evidence-gate.sh +1 -1
  87. package/pipeline/scripts/smoke-figma-dispatch.sh +46 -57
  88. package/pipeline/scripts/smoke-gate-hooks.sh +1 -1
  89. package/pipeline/scripts/smoke-generate-issue.sh +8 -8
  90. package/pipeline/scripts/smoke-handoff-contract.sh +3 -3
  91. package/pipeline/scripts/smoke-identity-isolation.sh +2 -2
  92. package/pipeline/scripts/smoke-intent-guard.sh +1 -1
  93. package/pipeline/scripts/smoke-issue-comment-template.sh +2 -2
  94. package/pipeline/scripts/smoke-issue-jira-triad.sh +4 -4
  95. package/pipeline/scripts/smoke-language-axis.sh +6 -6
  96. package/pipeline/scripts/smoke-learnings-ledger.sh +3 -3
  97. package/pipeline/scripts/smoke-mode-dispatch-drift.sh +16 -16
  98. package/pipeline/scripts/smoke-model-fallback.sh +3 -3
  99. package/pipeline/scripts/smoke-multi-repo-integration.sh +2 -2
  100. package/pipeline/scripts/smoke-multi-repo-worktree.sh +1 -1
  101. package/pipeline/scripts/smoke-no-token-prompt.sh +5 -5
  102. package/pipeline/scripts/smoke-phase-0-multi-repo.sh +1 -1
  103. package/pipeline/scripts/smoke-phase-6-multi.sh +1 -1
  104. package/pipeline/scripts/smoke-phase4-gates.sh +45 -0
  105. package/pipeline/scripts/smoke-plan-approval-gate.sh +5 -5
  106. package/pipeline/scripts/smoke-plan-todos.sh +3 -3
  107. package/pipeline/scripts/smoke-pr-review-actions.sh +3 -3
  108. package/pipeline/scripts/smoke-prefs-language.sh +1 -1
  109. package/pipeline/scripts/smoke-progress-contract.sh +2 -2
  110. package/pipeline/scripts/smoke-push-retry.sh +1 -1
  111. package/pipeline/scripts/smoke-repo-map.sh +2 -2
  112. package/pipeline/scripts/smoke-shadow-git.sh +1 -1
  113. package/pipeline/scripts/smoke-skill-authoring.sh +4 -9
  114. package/pipeline/scripts/smoke-tasklist-ordering.sh +10 -10
  115. package/pipeline/scripts/smoke-test-gap.sh +1 -1
  116. package/pipeline/scripts/smoke-token-budget.sh +1 -1
  117. package/pipeline/scripts/smoke-token-preflight.sh +2 -2
  118. package/pipeline/scripts/smoke-tracker-contract.sh +13 -13
  119. package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +5 -5
  120. package/pipeline/scripts/smoke-triage-memory.sh +2 -2
  121. package/pipeline/scripts/smoke-update-check.sh +1 -1
  122. package/pipeline/scripts/smoke-url-enrichment.sh +2 -2
  123. package/pipeline/scripts/smoke-validator-gates.sh +1 -1
  124. package/pipeline/scripts/smoke-verify-by-test.sh +3 -3
  125. package/pipeline/scripts/smoke-wiki-integration.sh +9 -33
  126. package/pipeline/scripts/smoke-work-summary.sh +1 -1
  127. package/pipeline/scripts/smoke-worktree-path-convention.sh +4 -4
  128. package/pipeline/scripts/test-integrity-gate.mjs +83 -0
  129. package/pipeline/scripts/uninstall.mjs +2 -2
  130. package/pipeline/skills/.skill-manifest.json +40 -160
  131. package/pipeline/skills/.skills-index.json +21 -372
  132. package/pipeline/skills/shared/README.md +1 -1
  133. package/pipeline/skills/shared/core/multi-agent/SKILL.md +1 -1
  134. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +2 -2
  135. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +3 -3
  136. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
  137. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +1 -1
  138. package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
  139. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +1 -1
  140. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +116 -51
  141. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +8 -30
  142. package/pipeline/skills/shared/external/backlog/BACKLOG.md +32 -0
  143. package/pipeline/skills/shared/external/backlog/SKILL.md +49 -0
  144. package/pipeline/skills/shared/external/compose-components/SKILL.md +14 -14
  145. package/pipeline/skills/shared/external/skill-creator/SKILL.md +48 -0
  146. package/pipeline/skills/shared/external/skill-creator/audit.md +59 -0
  147. package/pipeline/skills/shared/external/skill-creator/checklist.md +32 -0
  148. package/pipeline/skills/shared/external/skill-creator/examples.md +65 -0
  149. package/pipeline/skills/shared/external/skill-creator/label-check.md +43 -0
  150. package/pipeline/skills/shared/external/skill-creator/scripts/audit-panel.js +83 -0
  151. package/pipeline/skills/shared/external/skill-creator/template.md +67 -0
  152. package/pipeline/skills/skills-index.md +4 -43
  153. package/pipeline/commands/multi-agent/refactor.md +0 -188
  154. package/pipeline/commands/multi-agent/refs/component-dispatch.md +0 -92
  155. package/pipeline/scripts/smoke-existing-discovery-gate.sh +0 -71
  156. package/pipeline/scripts/smoke-figma-android-parity.sh +0 -148
  157. package/pipeline/scripts/smoke-figma-credential-store.sh +0 -105
  158. package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +0 -177
  159. package/pipeline/scripts/smoke-figma-sync.sh +0 -149
  160. package/pipeline/scripts/smoke-sync-delegation.sh +0 -74
  161. package/pipeline/skills/figma-android/README.md +0 -38
  162. package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +0 -62
  163. package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +0 -158
  164. package/pipeline/skills/figma-android/figma-component-test/SKILL.md +0 -120
  165. package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +0 -35
  166. package/pipeline/skills/figma-android/figma-to-component/SKILL.md +0 -124
  167. package/pipeline/skills/figma-common/README.md +0 -64
  168. package/pipeline/skills/figma-common/figma-bottom-sheets/SKILL.md +0 -152
  169. package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +0 -282
  170. package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +0 -503
  171. package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +0 -288
  172. package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +0 -362
  173. package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +0 -206
  174. package/pipeline/skills/figma-common/figma-commit/REVIEW.md +0 -337
  175. package/pipeline/skills/figma-common/figma-commit/SKILL.md +0 -216
  176. package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +0 -223
  177. package/pipeline/skills/figma-common/figma-component-start/SKILL.md +0 -251
  178. package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +0 -78
  179. package/pipeline/skills/figma-common/figma-evolve-component/SKILL.md +0 -61
  180. package/pipeline/skills/figma-common/figma-fix/SKILL.md +0 -321
  181. package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +0 -542
  182. package/pipeline/skills/figma-common/figma-issue/SKILL.md +0 -750
  183. package/pipeline/skills/figma-common/figma-iterate/SKILL.md +0 -208
  184. package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +0 -1020
  185. package/pipeline/skills/figma-common/figma-mend/SKILL.md +0 -331
  186. package/pipeline/skills/figma-common/figma-navigation/SKILL.md +0 -156
  187. package/pipeline/skills/figma-common/figma-overlays/SKILL.md +0 -142
  188. package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +0 -398
  189. package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +0 -104
  190. package/pipeline/skills/figma-common/figma-review/SKILL.md +0 -400
  191. package/pipeline/skills/figma-common/figma-setup/SKILL.md +0 -514
  192. package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +0 -592
  193. package/pipeline/skills/figma-common/figma-skip/SKILL.md +0 -129
  194. package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +0 -105
  195. package/pipeline/skills/figma-common/figma-ui-patterns/patterns/animated-gradient-border.md +0 -116
  196. package/pipeline/skills/figma-common/figma-utility/SKILL.md +0 -274
  197. package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +0 -808
  198. package/pipeline/skills/figma-common/figma-validate/SKILL.md +0 -633
  199. package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +0 -716
  200. package/pipeline/skills/figma-common/performance-review-next/SKILL.md +0 -238
  201. package/pipeline/skills/figma-common/performance-start/SKILL.md +0 -430
  202. package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +0 -706
  203. package/pipeline/skills/figma-common/performance-tour/SKILL.md +0 -423
  204. package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +0 -67
  205. package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +0 -178
  206. package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +0 -184
  207. package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +0 -219
  208. package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +0 -274
  209. package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +0 -416
  210. package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +0 -57
  211. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +0 -307
  212. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +0 -119
  213. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +0 -174
  214. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +0 -333
  215. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +0 -368
  216. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +0 -393
  217. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +0 -617
  218. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +0 -352
  219. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +0 -337
  220. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +0 -206
  221. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +0 -235
  222. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +0 -214
  223. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +0 -902
  224. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +0 -156
  225. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +0 -175
  226. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +0 -176
  227. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +0 -333
  228. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +0 -412
  229. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +0 -336
  230. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +0 -705
  231. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +0 -332
  232. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +0 -380
  233. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +0 -262
  234. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +0 -482
  235. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +0 -274
  236. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +0 -636
  237. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +0 -142
  238. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +0 -547
  239. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +0 -39
  240. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +0 -659
  241. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +0 -580
  242. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +0 -51
  243. package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +0 -183
  244. package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +0 -64
  245. package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +0 -531
  246. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +0 -89
  247. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +0 -155
  248. package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +0 -196
  249. package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +0 -57
  250. package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +0 -89
  251. package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +0 -227
  252. package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +0 -157
  253. package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +0 -90
  254. package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +0 -116
  255. package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +0 -153
  256. package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +0 -130
  257. package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +0 -218
  258. package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +0 -188
  259. package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +0 -93
  260. package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +0 -98
  261. package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +0 -261
  262. package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +0 -147
  263. package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +0 -182
  264. package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +0 -185
  265. package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +0 -609
  266. package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +0 -332
  267. package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +0 -261
  268. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +0 -184
  269. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +0 -188
  270. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +0 -768
  271. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +0 -191
  272. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +0 -420
  273. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.example.json +0 -9
  274. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +0 -336
  275. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +0 -391
  276. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +0 -292
  277. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +0 -1
  278. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +0 -93
  279. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +0 -299
  280. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +0 -343
  281. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +0 -206
  282. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +0 -149
  283. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +0 -281
  284. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +0 -332
  285. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +0 -176
  286. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +0 -98
  287. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +0 -298
  288. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +0 -195
  289. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +0 -1298
  290. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +0 -228
  291. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +0 -1089
  292. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +0 -141
  293. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +0 -106
  294. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +0 -162
  295. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +0 -105
  296. package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +0 -179
  297. package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +0 -260
  298. package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +0 -260
  299. package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +0 -86
  300. package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +0 -321
  301. package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +0 -1470
  302. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +0 -176
  303. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +0 -147
  304. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +0 -629
  305. /package/pipeline/commands/multi-agent/{delete.md → delete/SKILL.md} +0 -0
  306. /package/pipeline/commands/multi-agent/{diff-explain.md → diff-explain/SKILL.md} +0 -0
  307. /package/pipeline/commands/multi-agent/{garbage-collect.md → garbage-collect/SKILL.md} +0 -0
  308. /package/pipeline/commands/multi-agent/{issue.md → issue/SKILL.md} +0 -0
  309. /package/pipeline/commands/multi-agent/{jira.md → jira/SKILL.md} +0 -0
  310. /package/pipeline/commands/multi-agent/{kill.md → kill/SKILL.md} +0 -0
  311. /package/pipeline/commands/multi-agent/{language.md → language/SKILL.md} +0 -0
  312. /package/pipeline/commands/multi-agent/{log.md → log/SKILL.md} +0 -0
  313. /package/pipeline/commands/multi-agent/{prune-logs.md → prune-logs/SKILL.md} +0 -0
  314. /package/pipeline/commands/multi-agent/{purge.md → purge/SKILL.md} +0 -0
  315. /package/pipeline/commands/multi-agent/{scan.md → scan/SKILL.md} +0 -0
  316. /package/pipeline/commands/multi-agent/{search.md → search/SKILL.md} +0 -0
  317. /package/pipeline/commands/multi-agent/{stack.md → stack/SKILL.md} +0 -0
  318. /package/pipeline/commands/multi-agent/{status.md → status/SKILL.md} +0 -0
  319. /package/pipeline/commands/multi-agent/{test.md → test/SKILL.md} +0 -0
  320. /package/pipeline/commands/multi-agent/{update.md → update/SKILL.md} +0 -0
  321. /package/pipeline/{commands/multi-agent → multi-agent-refs}/_input-parser.md +0 -0
  322. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/analysis-template.md +0 -0
  323. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/audit-guide.md +0 -0
  324. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/backend-guide.md +0 -0
  325. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/confluence.md +0 -0
  326. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/issue-comment.md +0 -0
  327. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr-review-actions.md +0 -0
  328. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr.md +0 -0
  329. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/conventions-defaults.md +0 -0
  330. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/autopilot-circuit-breaker.md +0 -0
  331. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/dev-critic.md +0 -0
  332. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/external-context-injection.md +0 -0
  333. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/model-fallback.md +0 -0
  334. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/plan-todos.md +0 -0
  335. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/prior-fix-detection.md +0 -0
  336. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/repo-map.md +0 -0
  337. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/shadow-git.md +0 -0
  338. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/frontend-guide.md +0 -0
  339. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/knowledge.md +0 -0
  340. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/multi-repo-integration-build.md +0 -0
  341. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/picker-contract.md +0 -0
  342. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/rules.md +0 -0
@@ -1,659 +0,0 @@
1
- # PHASE 7A - Confluence Documentation: Generate XHTML
2
-
3
- Generate platform-agnostic main page + iOS sub-page as XHTML artifacts.
4
- No network access required. Upload is handled by Phase 7B.
5
- REF: `reference/confluence-xhtml.md`, `reference/confluence-api.md`
6
-
7
- PREV: Phase 6 (Code Connect)
8
- NEXT: Phase 7B (Upload to Confluence, VPN required)
9
- TOOL RESTRICTIONS: No Edit
10
-
11
- > **VPN Note:** This phase generates XHTML locally - no VPN needed. Colleagues
12
- > without VPN access can run this phase and commit the Confluence documentation directory.
13
- > A colleague with VPN then runs Phase 7B to upload.
14
- >
15
- > The global Component Implementation Status dashboard
16
- > (`.instructions/figma/figma-to-swiftui/scripts/confluence-component-status.py`) also requires
17
- > VPN. Run it separately after uploading component pages.
18
-
19
- ---
20
-
21
- ## PRE_CHECK
22
-
23
- ```
24
- Read: {artifactPath}/IMPLEMENTATION_HISTORY.md
25
- Read: {componentLocation}/{componentName}.swift
26
- Read: {componentLocation}/FIGMA.md
27
- Read: {artifactPath}/pass1/screenshot.png (verify exists)
28
- Read: {artifactPath}/pass1/screenshots/variants.md (if exists - variant property values)
29
- Read: {artifactPath}/pass3/07_implementation_spec.md
30
- Read: {artifactPath}/pass3/08_utility_integration.md
31
- Read: {artifactPath}/pass3/03_nested_components.md
32
- Read: {artifactPath}/pass2/utility_analytics.md (if exists)
33
- ```
34
-
35
- Also find iOS snapshot tests and reference images:
36
-
37
- ```
38
- Glob: Tests/UIComponentsTests/Snapshot/**/{componentName}SnapshotTests.swift
39
- Glob: Tests/UIComponentsTests/Snapshot/**/{componentName}/__Snapshots__/{componentName}SnapshotTests/*.png
40
- ```
41
-
42
- Read the snapshot test file to extract test names and the Swift code each test uses.
43
-
44
- Also read the per-component registry:
45
-
46
- ```bash
47
- $REGISTRY utility-lookup --node-id '{nodeId}'
48
- ```
49
-
50
- Run from repo root: `cd {repos.common.path} && .build/debug/FigmaRegistryUtility`
51
-
52
- EXTRACT:
53
- - `componentName`, `nodeId`, `fileKey`
54
- - `componentLocation`, `artifactPath`, `confluencePath`
55
- - `complexity` (SIMPLE/COMPLEX from pass3/07)
56
- - `registryData` (testingIdentifiers, localizationKeys, accessibilityKeys, analyticsEvents)
57
- - `confluenceStatus` - from registry `confluence` field: `{ page, ios, android }` (null = not yet created)
58
- - Initializer signature (from FIGMA.md)
59
- - Usage examples (from FIGMA.md)
60
- - Nested components (from FIGMA.md / pass3/03)
61
- - Code Connect status (from FIGMA.md Code Connect section, if exists)
62
- - Description, screen, section, size (from pass3/07)
63
-
64
- If `confluence.page` is non-null, this is an **update** - note existing URLs in the output.
65
- If `confluence.page` is null, this is a **first-time creation**.
66
-
67
- If IMPLEMENTATION_HISTORY.md, the Swift file, or FIGMA.md is missing:
68
-
69
- ```
70
- STATUS: HALT
71
- PHASE: phase-7a
72
- GATE: PRE_CHECK
73
- REASON: Required artifacts not found.
74
- COMPLETED_GATES: []
75
- ARTIFACTS_CREATED: none
76
- USER_ACTION_REQUIRED: Ensure Phase 4 completed. Required: IMPLEMENTATION_HISTORY.md, {componentName}.swift, FIGMA.md
77
- ```
78
-
79
- ---
80
-
81
- ## GATE 1: CREATE_STRUCTURE
82
-
83
- Create output directory and copy screenshots.
84
-
85
- ```bash
86
- mkdir -p {confluencePath}/assets
87
- cp {artifactPath}/pass1/screenshot.png {confluencePath}/assets/screenshot.png
88
- ```
89
-
90
- If variant screenshots exist:
91
-
92
- ```bash
93
- if [ -d "{artifactPath}/pass1/screenshots" ]; then
94
- cp {artifactPath}/pass1/screenshots/*.png {confluencePath}/assets/
95
- fi
96
- ```
97
-
98
- If iOS snapshot test reference images exist, copy with `ios_` prefix:
99
-
100
- ```bash
101
- # Snapshot image filenames are: test_snapshot_{mode}_{variant}.{mode}_{variant}.png
102
- # Extract the named part (after the dot) and prefix with ios_
103
- # e.g. test_snapshot_light_success.light_success.png → ios_light_success.png
104
- for f in __Snapshots__/{ComponentName}SnapshotTests/*.png; do
105
- named=$(echo "$(basename "$f")" | sed 's/.*\.\(.*\)\.png/\1/')
106
- cp "$f" {confluencePath}/assets/ios_${named}.png
107
- done
108
- ```
109
-
110
- List all copied assets for the ARTIFACTS_CREATED output.
111
-
112
- ---
113
-
114
- ## GATE 2: GENERATE_MAIN_XHTML
115
-
116
- Write `{confluencePath}/main.html` using the template below.
117
-
118
- ### Data Mapping
119
-
120
- | Template Variable | Source |
121
- |-------------------|--------|
122
- | `{DESCRIPTION}` | Synthesize 1-line from pass3/07 overview |
123
- | `{FILE_KEY}`, `{NODE_ID}` | From context |
124
- | `{SCREEN}`, `{SECTION}`, `{SIZE}` | From pass3/07 metadata |
125
- | `{OVERVIEW_TEXT}` | 2-3 sentence description from pass3/07 |
126
- | Testing Identifiers table | `registryData.testingIdentifiers` - columns: Element (usage), Key, Value |
127
- | Localization Keys table | `registryData.localizationKeys` - columns: Element, Key, Default |
128
- | Accessibility tables | `registryData.accessibilityKeys` - Labels + Hints |
129
- | Analytics Events | `registryData.analyticsEvents` - element + event (markdown text) |
130
- | Sub-Components | From FIGMA.md nested components / pass3/03 |
131
- | Platform links | `{ComponentName} - iOS`, `{ComponentName} - Android` |
132
- | Changelog | Current date + "Initial documentation" |
133
-
134
- ### Empty Section Handling
135
-
136
- - If `testingIdentifiers` is empty: `<p>No testing identifiers registered.</p>`
137
- - If `localizationKeys` is empty: `<p>No localization keys. Text content is dynamic.</p>`
138
- - If `accessibilityKeys` is empty: `<p>No dedicated accessibility keys.</p>`
139
- - If `analyticsEvents` is empty: `<p>No analytics events. No interactive elements.</p>`
140
- - If no nested components: `<p>No nested View components.</p>`
141
- - If no variant screenshots: show only main screenshot, skip Light/Dark table
142
-
143
- ### Main Page Template
144
-
145
- ```xml
146
- <p><em>{DESCRIPTION}</em></p>
147
-
148
- <p><ac:image ac:width="375"><ri:attachment ri:filename="screenshot.png"/></ac:image></p>
149
-
150
- <p><a href="https://www.figma.com/design/{FILE_KEY}/?node-id={NODE_ID_DASH}">View in Figma</a></p>
151
-
152
- <p><strong>Screen:</strong> {SCREEN}<br/>
153
- <strong>Section:</strong> {SECTION}<br/>
154
- <strong>Size:</strong> {SIZE}</p>
155
-
156
- <hr/>
157
-
158
- <ac:structured-macro ac:name="toc">
159
- <ac:parameter ac:name="printable">true</ac:parameter>
160
- <ac:parameter ac:name="style">disc</ac:parameter>
161
- <ac:parameter ac:name="maxLevel">2</ac:parameter>
162
- <ac:parameter ac:name="minLevel">2</ac:parameter>
163
- </ac:structured-macro>
164
-
165
- <hr/>
166
-
167
- <h2>Variants</h2>
168
- <!-- IF variant screenshots exist (pass1/screenshots/): -->
169
- <table><tbody>
170
- <tr><th>Variant</th><th>Properties</th><th>Figma Screenshot</th></tr>
171
- <tr><td>{VariantName}</td><td><code>{FigmaPropertyName}={Value}</code></td><td><ac:image ac:width="100"><ri:attachment ri:filename="{VariantName}.png"/></ac:image></td></tr>
172
- </tbody></table>
173
- <!-- Use pass1/screenshots/variants.md for variant names + property values -->
174
- <!-- ELSE just show the main screenshot (already in header). Skip this section. -->
175
-
176
- <hr/>
177
-
178
- <h2>Overview</h2>
179
- <p>{OVERVIEW_TEXT}</p>
180
-
181
- <hr/>
182
-
183
- <h2>Testing Identifiers</h2>
184
- <p><em>Shared across platforms</em></p>
185
- <table><tbody>
186
- <tr><th>Element</th><th>Key</th><th>Value</th></tr>
187
- <tr><td>{usage}</td><td><code>{key}</code></td><td><code>{value}</code></td></tr>
188
- </tbody></table>
189
-
190
- <hr/>
191
-
192
- <h2>Localization Keys</h2>
193
- <p><em>Shared across platforms</em></p>
194
- <table><tbody>
195
- <tr><th>Element</th><th>Key</th><th>Default (EN)</th></tr>
196
- <tr><td>{element}</td><td><code>{key}</code></td><td>{default}</td></tr>
197
- </tbody></table>
198
-
199
- <hr/>
200
-
201
- <h2>Accessibility</h2>
202
- <p><em>Shared across platforms</em></p>
203
-
204
- <h3>Labels</h3>
205
- <table><tbody>
206
- <tr><th>Element</th><th>Key</th></tr>
207
- <tr><td>{element}</td><td><code>{key}</code></td></tr>
208
- </tbody></table>
209
-
210
- <h3>Hints</h3>
211
- <table><tbody>
212
- <tr><th>Element</th><th>Key</th></tr>
213
- <tr><td>{element}</td><td><code>{key}</code></td></tr>
214
- </tbody></table>
215
-
216
- <hr/>
217
-
218
- <h2>Analytics Events</h2>
219
- <p><em>Shared across platforms</em></p>
220
-
221
- <h3>{event_element}</h3>
222
- <p>{event_description_from_registry_event_field}</p>
223
- <table><tbody>
224
- <tr><th>Property</th><th>Value</th></tr>
225
- <tr><td>Element</td><td>{element}</td></tr>
226
- <tr><td>Identifier Key</td><td><code>{identifierKey}</code></td></tr>
227
- </tbody></table>
228
-
229
- <hr/>
230
-
231
- <h2>Sub-Components</h2>
232
- <table><tbody>
233
- <tr><th>Component</th><th>Description</th></tr>
234
- <tr>
235
- <td><ac:link><ri:page ri:content-title="{SubComponentName}"/><ac:plain-text-link-body><![CDATA[{SubComponentName}]]></ac:plain-text-link-body></ac:link></td>
236
- <td>{description}</td>
237
- </tr>
238
- </tbody></table>
239
-
240
- <hr/>
241
-
242
- <h2>Platform Implementations</h2>
243
- <table><tbody>
244
- <tr><th>Platform</th><th>Status</th><th>Documentation</th></tr>
245
- <tr>
246
- <td>iOS</td>
247
- <td>Implemented</td>
248
- <td><ac:link><ri:page ri:content-title="{ComponentName} - iOS"/><ac:plain-text-link-body><![CDATA[{ComponentName} - iOS]]></ac:plain-text-link-body></ac:link></td>
249
- </tr>
250
- <tr>
251
- <td>Android</td>
252
- <td>Pending</td>
253
- <td><ac:link><ri:page ri:content-title="{ComponentName} - Android"/><ac:plain-text-link-body><![CDATA[{ComponentName} - Android]]></ac:plain-text-link-body></ac:link></td>
254
- </tr>
255
- </tbody></table>
256
-
257
- <hr/>
258
-
259
- <h2>Changelog</h2>
260
- <table><tbody>
261
- <tr><th>Date</th><th>Change</th></tr>
262
- <tr><td>{DATE}</td><td>Initial documentation</td></tr>
263
- </tbody></table>
264
- ```
265
-
266
- **IMPORTANT:** Replace all template variables with actual data. Remove HTML comments. The output must be valid XHTML.
267
-
268
- **XHTML Attribute Escaping:** All dynamic text inserted into XML attribute values (`ri:filename`, `ri:content-title`) MUST have these characters escaped:
269
- - `&` → `&amp;` (e.g., `R&D Center` → `R&amp;D Center`)
270
- - `"` → `&quot;`
271
- - `<` → `&lt;`, `>` → `&gt;`
272
-
273
- Text inside `<![CDATA[...]]>` blocks does NOT need escaping. Text inside element content (between tags) needs `&` and `<` escaped. Filenames on disk keep the original characters - the XML parser decodes `&amp;` back to `&` when resolving attachment references.
274
-
275
- ---
276
-
277
- ## GATE 3: GENERATE_IOS_XHTML
278
-
279
- Write `{confluencePath}/ios.html` using the template below.
280
-
281
- ### Data Mapping
282
-
283
- | Template Variable | Source |
284
- |-------------------|--------|
285
- | Back-link | `{ComponentName}` (main page title) |
286
- | Initializer | From FIGMA.md header section |
287
- | Parameters | From FIGMA.md API/Parameters section |
288
- | Usage | From FIGMA.md Usage section (first example) |
289
- | Configuration | From FIGMA.md Configuration section (COMPLEX only) |
290
- | Testing iOS Usage | From pass3/08 Testing Identifiers section |
291
- | Localization iOS Usage | From pass3/08 Localization section |
292
- | Accessibility iOS | From pass3/08 Accessibility section |
293
- | Analytics iOS | From pass2/utility_analytics.md Implementation section |
294
- | Code Connect | From FIGMA.md Code Connect section (if exists) |
295
-
296
- ### iOS Sub-Page Template
297
-
298
- ```xml
299
- <p><ac:link><ri:page ri:content-title="{ComponentName}"/><ac:plain-text-link-body><![CDATA[&larr; Back to {ComponentName}]]></ac:plain-text-link-body></ac:link></p>
300
-
301
- <hr/>
302
-
303
- <ac:structured-macro ac:name="toc">
304
- <ac:parameter ac:name="printable">true</ac:parameter>
305
- <ac:parameter ac:name="style">disc</ac:parameter>
306
- <ac:parameter ac:name="maxLevel">2</ac:parameter>
307
- <ac:parameter ac:name="minLevel">2</ac:parameter>
308
- </ac:structured-macro>
309
-
310
- <hr/>
311
-
312
- <h2>Initializer</h2>
313
-
314
- <!-- IF SIMPLE: -->
315
- <ac:structured-macro ac:name="code">
316
- <ac:parameter ac:name="language">java</ac:parameter>
317
- <ac:plain-text-body><![CDATA[{INIT_SIGNATURE}]]></ac:plain-text-body>
318
- </ac:structured-macro>
319
-
320
- <h3>Parameters</h3>
321
- <table><tbody>
322
- <tr><th>Parameter</th><th>Type</th><th>Default</th><th>Description</th></tr>
323
- <tr><td><code>{param}</code></td><td><code>{Type}</code></td><td>{default}</td><td>{description}</td></tr>
324
- </tbody></table>
325
-
326
- <!-- IF COMPLEX: -->
327
- <ac:structured-macro ac:name="code">
328
- <ac:parameter ac:name="language">java</ac:parameter>
329
- <ac:plain-text-body><![CDATA[// Chain modifiers (recommended)
330
- {ComponentName} { /* dependency closure */ }
331
- .{modifier}({value})
332
-
333
- // Configuration closure
334
- {ComponentName} { config in
335
- config
336
- .{modifier}({value})
337
- }
338
-
339
- // Direct configuration
340
- {ComponentName}(configuration: {ComponentName}Configuration(
341
- {param}: {value}
342
- ))]]></ac:plain-text-body>
343
- </ac:structured-macro>
344
-
345
- <h3>Configuration Properties</h3>
346
- <table><tbody>
347
- <tr><th>Property</th><th>Type</th><th>Default</th><th>Description</th></tr>
348
- <tr><td><code>{param}</code></td><td><code>{Type}</code></td><td>{default}</td><td>{description}</td></tr>
349
- </tbody></table>
350
-
351
- <h3>Chain Modifiers</h3>
352
- <p>Auto-generated by <code>@GenerateChainModifiers</code>.</p>
353
- <table><tbody>
354
- <tr><th>Modifier</th><th>Type</th><th>Description</th></tr>
355
- <tr><td><code>.{property}(_:)</code></td><td><code>{Type}</code></td><td>{description}</td></tr>
356
- </tbody></table>
357
- <!-- END complexity branching -->
358
-
359
- <hr/>
360
-
361
- <h2>Usage</h2>
362
- <ac:structured-macro ac:name="code">
363
- <ac:parameter ac:name="language">java</ac:parameter>
364
- <ac:plain-text-body><![CDATA[import UIComponents
365
-
366
- {USAGE_CODE}]]></ac:plain-text-body>
367
- </ac:structured-macro>
368
-
369
- <hr/>
370
-
371
- <!-- IF testing identifiers exist: -->
372
- <h2>Testing Identifiers - iOS</h2>
373
- <table><tbody>
374
- <tr><th>Element</th><th>iOS Usage</th></tr>
375
- <tr><td>{element}</td><td><code>.accessibilityIdentifier(.{ComponentName}.{element})</code></td></tr>
376
- </tbody></table>
377
-
378
- <hr/>
379
- <!-- END IF -->
380
-
381
- <!-- IF localization keys exist: -->
382
- <h2>Localization - iOS</h2>
383
- <table><tbody>
384
- <tr><th>Element</th><th>iOS Usage</th></tr>
385
- <tr><td>{element}</td><td><code>Text(.{ComponentName}.{element})</code></td></tr>
386
- </tbody></table>
387
-
388
- <hr/>
389
- <!-- END IF -->
390
-
391
- <!-- IF accessibility keys exist: -->
392
- <h2>Accessibility - iOS</h2>
393
- <table><tbody>
394
- <tr><th>Element</th><th>iOS Usage</th></tr>
395
- <tr><td>{element}</td><td><code>.accessibilityLabel(.{ComponentName}.{element})</code></td></tr>
396
- </tbody></table>
397
-
398
- <hr/>
399
- <!-- END IF -->
400
-
401
- <!-- IF analytics events exist: -->
402
- <h2>Analytics - iOS</h2>
403
-
404
- <h3>{event_element}</h3>
405
- <p><strong>Modifier:</strong></p>
406
- <ac:structured-macro ac:name="code">
407
- <ac:parameter ac:name="language">java</ac:parameter>
408
- <ac:plain-text-body><![CDATA[{ANALYTICS_MODIFIER_CODE_FROM_PASS2}]]></ac:plain-text-body>
409
- </ac:structured-macro>
410
-
411
- <p><strong>Firebase Schema:</strong></p>
412
- <ac:structured-macro ac:name="code">
413
- <ac:parameter ac:name="language">java</ac:parameter>
414
- <ac:plain-text-body><![CDATA[{FIREBASE_SCHEMA_JSON}]]></ac:plain-text-body>
415
- </ac:structured-macro>
416
-
417
- <hr/>
418
- <!-- END IF analytics -->
419
-
420
- <!-- Code Connect section: SKIP - decoupled from Confluence. Lives in Figma Dev Mode. -->
421
- <!-- If a .figma.swift file exists, optionally show a one-line "Code Connect: Published" badge. -->
422
- <!-- Otherwise omit entirely. -->
423
-
424
- <hr/>
425
-
426
- <h2>Snapshot Tests</h2>
427
- <p><em>Reference snapshots generated by <code>{ComponentName}SnapshotTests</code>.</em></p>
428
- <!-- Find snapshot test file: Tests/UIComponentsTests/Snapshot/.../{ComponentName}SnapshotTests.swift -->
429
- <!-- Find reference images: __Snapshots__/{ComponentName}SnapshotTests/*.png -->
430
- <!-- Copy snapshot PNGs to {confluencePath}/assets/ with ios_ prefix (e.g. ios_light_success.png) -->
431
- <!-- Group by test category (State Variants, Optional Variants, etc.) -->
432
-
433
- <h3>{Category}</h3>
434
- <table><tbody>
435
- <tr><th>Variant</th><th>Code</th><th>Light</th><th>Dark</th></tr>
436
- <!-- Repeat <tr> for each variant in this category -->
437
-
438
- <!-- IF SIMPLE component (direct init): -->
439
- <tr>
440
- <td><strong>{VariantName}</strong></td>
441
- <td><pre style="background:#f4f5f7; border:1px solid #dfe1e6; border-radius:3px; padding:8px; font-family:SFMono-Regular,Menlo,Monaco,monospace; font-size:12px; margin:0; white-space:pre">{ComponentName}({param}: .{value}, {param}: .{value})</pre></td>
442
- <td><ac:image ac:width="{SNAPSHOT_WIDTH}"><ri:attachment ri:filename="ios_light_{variant}.png"/></ac:image></td>
443
- <td><ac:image ac:width="{SNAPSHOT_WIDTH}"><ri:attachment ri:filename="ios_dark_{variant}.png"/></ac:image></td>
444
- </tr>
445
-
446
- <!-- IF COMPLEX component - check dependencies from component's init: -->
447
- <!-- No closure deps: ComponentName().modifier(value) -->
448
- <!-- With closure dep (trailing): ComponentName { action() }.modifier(value) -->
449
- <!-- With non-closure dep: ComponentName(dep: value).modifier(value) -->
450
- <!-- With both: ComponentName(dep: value) { action() }.modifier(value) -->
451
- <!-- Trailing closure is ONLY for closure dependencies, NOT for configuration. -->
452
-
453
- <!-- COMPLEX, no closure dependencies: -->
454
- <tr>
455
- <td><strong>{VariantName}</strong></td>
456
- <td><pre style="background:#f4f5f7; border:1px solid #dfe1e6; border-radius:3px; padding:8px; font-family:SFMono-Regular,Menlo,Monaco,monospace; font-size:12px; margin:0; white-space:pre">{ComponentName}({deps})
457
- .{modifier}({value})</pre></td>
458
- <td><ac:image ac:width="{SNAPSHOT_WIDTH}"><ri:attachment ri:filename="ios_light_{variant}.png"/></ac:image></td>
459
- <td><ac:image ac:width="{SNAPSHOT_WIDTH}"><ri:attachment ri:filename="ios_dark_{variant}.png"/></ac:image></td>
460
- </tr>
461
-
462
- <!-- COMPLEX, with closure dependency (trailing): -->
463
- <tr>
464
- <td><strong>{VariantName}</strong></td>
465
- <td><pre style="background:#f4f5f7; border:1px solid #dfe1e6; border-radius:3px; padding:8px; font-family:SFMono-Regular,Menlo,Monaco,monospace; font-size:12px; margin:0; white-space:pre">{ComponentName}({non-closure deps}) {
466
- // closure dependency
467
- }
468
- .{modifier}({value})</pre></td>
469
- <td><ac:image ac:width="{SNAPSHOT_WIDTH}"><ri:attachment ri:filename="ios_light_{variant}.png"/></ac:image></td>
470
- <td><ac:image ac:width="{SNAPSHOT_WIDTH}"><ri:attachment ri:filename="ios_dark_{variant}.png"/></ac:image></td>
471
- </tr>
472
- <!-- END complexity branching -->
473
-
474
- </tbody></table>
475
- <!-- Code: full component init from test file using default init + chain modifier style. -->
476
- <!-- {deps}: empty () if no dependencies, or (param: value) for non-closure deps. -->
477
- <!-- Trailing closure ONLY if component has a closure dependency property. -->
478
- <!-- {SNAPSHOT_WIDTH}: read from test file's frame width (e.g. width=60 → ac:width="60", width=375 → ac:width="375"). -->
479
- <!-- Pair light/dark for same variant side by side. -->
480
- <!-- Group by test category from MARK comments in snapshot test file (e.g. "Loyalty Type Variants", "Size Variants"). -->
481
- <!-- Skip this section if no snapshot tests exist. -->
482
-
483
- <!-- RTL section: always include if RTL snapshot tests exist -->
484
- <h3>RTL Variants (Arabic)</h3>
485
- <table><tbody>
486
- <tr><th>Variant</th><th>Code</th><th>Light</th><th>Dark</th></tr>
487
- <!-- Repeat <tr> for each RTL variant -->
488
-
489
- <!-- IF SIMPLE component: -->
490
- <tr>
491
- <td><strong>{VariantName}</strong></td>
492
- <td><pre style="background:#f4f5f7; border:1px solid #dfe1e6; border-radius:3px; padding:8px; font-family:SFMono-Regular,Menlo,Monaco,monospace; font-size:12px; margin:0; white-space:pre">{ComponentName}({param}: "{arabicText}", {param}: .{value})</pre></td>
493
- <td><ac:image ac:width="{SNAPSHOT_WIDTH}"><ri:attachment ri:filename="ios_rtl_light_{variant}.png"/></ac:image></td>
494
- <td><ac:image ac:width="{SNAPSHOT_WIDTH}"><ri:attachment ri:filename="ios_rtl_dark_{variant}.png"/></ac:image></td>
495
- </tr>
496
-
497
- <!-- IF COMPLEX, no closure dependencies: -->
498
- <tr>
499
- <td><strong>{VariantName}</strong></td>
500
- <td><pre style="background:#f4f5f7; border:1px solid #dfe1e6; border-radius:3px; padding:8px; font-family:SFMono-Regular,Menlo,Monaco,monospace; font-size:12px; margin:0; white-space:pre">{ComponentName}({deps})
501
- .text("{arabicText}")
502
- .{modifier}({value})</pre></td>
503
- <td><ac:image ac:width="{SNAPSHOT_WIDTH}"><ri:attachment ri:filename="ios_rtl_light_{variant}.png"/></ac:image></td>
504
- <td><ac:image ac:width="{SNAPSHOT_WIDTH}"><ri:attachment ri:filename="ios_rtl_dark_{variant}.png"/></ac:image></td>
505
- </tr>
506
-
507
- <!-- IF COMPLEX, with closure dependency: -->
508
- <tr>
509
- <td><strong>{VariantName}</strong></td>
510
- <td><pre style="background:#f4f5f7; border:1px solid #dfe1e6; border-radius:3px; padding:8px; font-family:SFMono-Regular,Menlo,Monaco,monospace; font-size:12px; margin:0; white-space:pre">{ComponentName}({non-closure deps}) {
511
- // closure dependency
512
- }
513
- .text("{arabicText}")
514
- .{modifier}({value})</pre></td>
515
- <td><ac:image ac:width="{SNAPSHOT_WIDTH}"><ri:attachment ri:filename="ios_rtl_light_{variant}.png"/></ac:image></td>
516
- <td><ac:image ac:width="{SNAPSHOT_WIDTH}"><ri:attachment ri:filename="ios_rtl_dark_{variant}.png"/></ac:image></td>
517
- </tr>
518
- <!-- END complexity branching -->
519
-
520
- </tbody></table>
521
- <!-- RTL snapshots use ios_rtl_ prefix. Arabic text from phase-5b Arabic Sample Text table. -->
522
-
523
- <hr/>
524
-
525
- <h2>Changelog</h2>
526
- <table><tbody>
527
- <tr><th>Date</th><th>Change</th></tr>
528
- <tr><td>{DATE}</td><td>Initial iOS documentation</td></tr>
529
- </tbody></table>
530
- ```
531
-
532
- **IMPORTANT:** Replace all template variables. Remove HTML comments. Output valid XHTML. Include only sections that have data - skip empty sections entirely (don't show "No X" on the iOS page, just omit the section).
533
-
534
- ---
535
-
536
- ## GATE 4: VALIDATE_GENERATED_XHTML
537
-
538
- Run the validation script to programmatically check both XHTML files, asset integrity, and snapshot coverage.
539
-
540
- ```bash
541
- python3 .instructions/figma/figma-to-swiftui/scripts/validate-phase7a.py \
542
- --confluence-path "{confluencePath}" \
543
- --component-name "{ComponentName}"
544
- ```
545
-
546
- The script outputs JSON with `status`, `violations`, `warnings`, and `stats`.
547
-
548
- ### What the script checks
549
-
550
- **main.html - Structure:**
551
- - Required sections: Variants, Overview, Testing Identifiers, Localization Keys, Accessibility, Analytics Events, Sub-Components, Platform Implementations, Changelog
552
- - Placeholder text accepted for empty sections (e.g., "No testing identifiers")
553
-
554
- **ios.html - Structure:**
555
- - Required sections: Initializer, Usage, Changelog
556
- - Back-link to main page present
557
- - Snapshot Tests section present if snapshot assets exist
558
-
559
- **Both files - Integrity:**
560
- - No unreplaced template variables (`{ComponentName}`, `{DESCRIPTION}`, etc.)
561
- - No remaining template comments (`<!-- IF`, `<!-- END`, `<!-- ELSE`)
562
- - No unescaped `&` in XML attributes (`ri:filename`, `ri:content-title`)
563
- - main.html does NOT contain Swift code patterns (`import UIComponents`, `.accessibilityIdentifier(`, `func test_`)
564
-
565
- **Asset Reference Integrity:**
566
- - Every `ri:filename` reference in XHTML has a matching file in `{confluencePath}/assets/`
567
- - Orphan detection: files in `assets/` not referenced by any XHTML (warning, not failure)
568
- - `screenshot.png` exists
569
-
570
- **Snapshot Coverage (the critical check):**
571
- - Every snapshot variant has both `ios_light_{variant}.png` AND `ios_dark_{variant}.png` in assets
572
- - Every snapshot asset file is referenced by an `<ac:image>` tag in ios.html
573
- - RTL variants: same bidirectional check for `ios_rtl_light_` / `ios_rtl_dark_` pairs
574
- - Reports: total variants, missing assets, missing references, orphan ios_ assets
575
-
576
- ### Interpreting results
577
-
578
- | `status` | Action |
579
- |----------|--------|
580
- | `PASS` | Proceed to GATE 5 |
581
- | `FAIL` | Fix violations, re-generate XHTML, re-run validation |
582
-
583
- `warnings` are informational (orphan assets, unreferenced variant screenshots) - do NOT block.
584
- `violations` are failures that MUST be fixed before proceeding.
585
-
586
- ### On failure
587
-
588
- Fix each violation in the generated XHTML or asset copy step, then re-run the script. Common fixes:
589
- - Missing section → add it to the template output
590
- - Template variable remaining → replace with actual data
591
- - Snapshot asset missing → re-copy from `__Snapshots__/` directory
592
- - Snapshot not referenced → add `<ac:image>` row to ios.html Snapshot Tests table
593
-
594
- ```
595
- STATUS: HALT
596
- PHASE: phase-7a
597
- GATE: VALIDATE_GENERATED_XHTML
598
- REASON: Generated XHTML validation failed.
599
- VIOLATIONS: {violations from script JSON}
600
- WARNINGS: {warnings from script JSON}
601
- STATS: {stats from script JSON}
602
- COMPLETED_GATES: [PRE_CHECK, CREATE_STRUCTURE, GENERATE_MAIN_XHTML, GENERATE_IOS_XHTML]
603
- USER_ACTION_REQUIRED: Fix the violations listed above and re-generate the XHTML.
604
- ```
605
-
606
- ---
607
-
608
- ## GATE 5: UPDATE_HISTORY
609
-
610
- Append to `{artifactPath}/IMPLEMENTATION_HISTORY.md`:
611
-
612
- ```markdown
613
- ## Phase 7A: Confluence XHTML Generation
614
- - Status: Complete
615
- - Main Page: {confluencePath}/main.html
616
- - iOS Sub-page: {confluencePath}/ios.html
617
- - Assets: {COUNT} screenshots
618
- - Validation: Passed (main.html + ios.html structure verified, no template variables remaining)
619
- - Upload: Pending (run phase-7b or .instructions/figma/figma-to-swiftui/scripts/confluence-publish.py)
620
- ```
621
-
622
- ---
623
-
624
- ## VALIDATION CHECKLIST
625
-
626
- ```
627
- [ ] {confluencePath}/main.html exists and is valid XHTML
628
- [ ] {confluencePath}/ios.html exists and is valid XHTML
629
- [ ] {confluencePath}/assets/screenshot.png exists
630
- [ ] main.html sections: description, TOC, variants (with property values), overview, testing IDs, localization, accessibility, analytics, sub-components, platform implementations, changelog
631
- [ ] main.html "Variants" section has variant property values (e.g. State=Success) and Figma screenshots
632
- [ ] main.html does NOT contain: Swift code, .accessibilityIdentifier patterns, import UIComponents
633
- [ ] ios.html sections: back-link, initializer, usage, iOS utility patterns, code connect, snapshot tests, changelog
634
- [ ] ios.html "Snapshot Tests" section has light/dark pairs with code from test file
635
- [ ] ios.html "Snapshot Tests" section uses preferred style (SIMPLE: direct init, COMPLEX: chain modifiers)
636
- [ ] ios.html "Snapshot Tests" ac:width matches snapshot dimensions from test file
637
- [ ] ios.html "Snapshot Tests" section includes RTL Variants (Arabic) subsection if RTL tests exist
638
- [ ] ios.html does NOT contain: testing ID definitions (those are on main page)
639
- [ ] All template variables replaced with actual data
640
- [ ] No HTML comments remaining in output
641
- [ ] All referenced image filenames exist in {confluencePath}/assets/
642
- [ ] IMPLEMENTATION_HISTORY.md updated with Phase 7A entry
643
- ```
644
-
645
- ---
646
-
647
- ## SUCCESS OUTPUT
648
-
649
- ```
650
- STATUS: COMPLETE
651
- PHASE: phase-7a
652
- GATES_PASSED: [PRE_CHECK, CREATE_STRUCTURE, GENERATE_MAIN_XHTML, GENERATE_IOS_XHTML, VALIDATE_GENERATED_XHTML, UPDATE_HISTORY]
653
- ARTIFACTS_CREATED:
654
- - {confluencePath}/main.html (validated)
655
- - {confluencePath}/ios.html (validated)
656
- - {confluencePath}/assets/ ({COUNT} screenshots)
657
- - {artifactPath}/IMPLEMENTATION_HISTORY.md (updated)
658
- SUMMARY: Confluence XHTML generated and validated. Main page: {SECTION_COUNT} sections. iOS sub-page: {SECTION_COUNT} sections. {SCREENSHOT_COUNT} assets. Ready for phase-7b upload (requires VPN).
659
- ```