@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,716 +0,0 @@
1
- ---
2
- name: performance-iteration-commit-all
3
- description: Reads `_tour_tracker.json`, validates all reviewed components in a single build+test cycle, pushes all local commits in a single push per submodule, then handles issue.
4
- ---
5
-
6
- # /performance-iteration-commit-all - Batch Validate & Push All Tour Components
7
-
8
- > Reads `_tour_tracker.json`, validates all reviewed components in a single build+test
9
- > cycle, pushes all local commits in a single push per submodule, then handles issue
10
- > housekeeping for each component individually.
11
-
12
- ## Guardrails
13
-
14
- > **NEVER create branches on the main repo (REPO_ROOT).** Same guardrail as `figma-iteration-commit`.
15
-
16
- > **NEVER use `json.dumps()` default formatting on JSON files.** Preserve existing format.
17
- > `ui-testing-identifiers.json` uses `" : "` (space-colon-space).
18
-
19
- > **NEVER manually edit `ui-testing-identifiers.json` during rebase conflict resolution.**
20
- > Follow the conflict resolution protocol from `figma-iteration-commit`.
21
-
22
- ## Parameters
23
-
24
- No arguments - reads `_tour_tracker.json`.
25
-
26
- ```
27
- /performance-iteration-commit-all
28
- ```
29
-
30
- ---
31
-
32
- ## Constants
33
-
34
- ```
35
- REPO_ROOT = git repo root (auto-detect)
36
- GH_REPO = {github.componentsRepo}
37
- COMMON = ${REPO_ROOT}/{repos.common.path}
38
- UICOMPONENTS = ${REPO_ROOT}/{repos.components.path}
39
- WIKI = ${REPO_ROOT}/{repos.wiki.path}
40
- TRACKER_FILE = ${REPO_ROOT}/_tour_tracker.json
41
- ```
42
-
43
- ---
44
-
45
- ## STEP 0 - Read Tracker & Verify State
46
-
47
- Read `_tour_tracker.json`.
48
-
49
- Verify:
50
- - `current_step` is `"STEP_3"` - if not, HALT: "Review not complete. Run /performance-review-next first."
51
- - `reviewed_components` has at least 1 entry
52
- - All reviewed components have local commits (check with `git log`)
53
-
54
- Collect reviewed component data:
55
-
56
- ```python
57
- reviewed = [tracker["components"][str(issue)] for issue in tracker["reviewed_components"]]
58
- lean_mode = tracker.get("lean_mode", False)
59
- ```
60
-
61
- Print:
62
-
63
- ```
64
- ╔══════════════════════════════════════════════════════════════╗
65
- ║ BATCH COMMIT - PRE-FLIGHT ║
66
- ╠══════════════════════════════════════════════════════════════╣
67
- ║ ║
68
- ║ Components to commit: ║
69
- ║ 1. ComponentA (#1000) - reviewed ✅ ║
70
- ║ 2. ComponentC (#1002) - reviewed ✅ ║
71
- ║ ║
72
- ║ Dropped (will NOT be committed): ║
73
- ║ ❌ ComponentB (#1001) - halted, dropped ║
74
- ║ ║
75
- ╚══════════════════════════════════════════════════════════════╝
76
-
77
- Proceed with validation and push? (yes/no)
78
- ```
79
-
80
- Wait for user confirmation.
81
-
82
- ---
83
-
84
- ## STEP 1 - Validate (SINGLE PASS)
85
-
86
- ### 1a. Build
87
-
88
- ```bash
89
- xcodebuild build -project "${REPO_ROOT}/{build.xcodeproj}" \
90
- -scheme {build.scheme} -destination 'generic/platform=iOS' \
91
- CODE_SIGNING_ALLOWED=NO -quiet
92
- ```
93
-
94
- If build fails → HALT. Fix before committing.
95
-
96
- ### 1b. Tests (Combined)
97
-
98
- > **LEAN MODE:** If `lean_mode` is `true` in the tracker, **SKIP this entire substep.**
99
- > Tests were not generated during production. Print `Tests: ⏭️ skipped (lean mode)` and proceed to 1c.
100
-
101
- Run tests for ALL reviewed components in a single xcodebuild invocation:
102
-
103
- ```bash
104
- xcodebuild test -project "${REPO_ROOT}/{build.xcodeproj}" \
105
- -scheme {build.scheme} \
106
- -destination 'platform=iOS Simulator,name=iPhone 16 Pro' \
107
- -only-testing:"UIComponentsTests/ComponentAViewInspectorTests" \
108
- -only-testing:"UIComponentsTests/ComponentASnapshotTests" \
109
- -only-testing:"UIComponentsTests/ComponentCViewInspectorTests" \
110
- -only-testing:"UIComponentsTests/ComponentCSnapshotTests" \
111
- CODE_SIGNING_ALLOWED=NO -quiet
112
- ```
113
-
114
- Build the `-only-testing` flags dynamically from the reviewed components list.
115
-
116
- If tests fail → HALT. Identify failing component and fix.
117
-
118
- ### 1c. Key Sync Validation
119
-
120
- For each reviewed component:
121
-
122
- ```bash
123
- cd ${COMMON}
124
- python3 .instructions/figma/figma-to-swiftui/scripts/validate-localization-sync.py \
125
- --component "${COMPONENT_NAME}"
126
- ```
127
-
128
- If out of sync → regenerate:
129
- ```bash
130
- swift package plugin --allow-writing-to-package-directory update-localizations-dev
131
- swift package plugin --allow-writing-to-package-directory update-accessibility-dev
132
- swift run UITestingIdentifierTool generate
133
- ```
134
-
135
- If regeneration creates new changes → commit them:
136
- ```bash
137
- cd ${COMMON}
138
- git add -A
139
- git commit -m "fix(common): sync keys after tour validation
140
-
141
- Tour: performance-tour $(date +%Y%m%d)"
142
- ```
143
-
144
- ### 1d. Code Review (Lightweight)
145
-
146
- Read `.instructions/figma/figma-commit/REVIEW.md` and run the 13-point checklist
147
- across ALL reviewed components.
148
-
149
- - Auto-fix any fixable violations
150
- - If auto-fixes applied, commit:
151
- ```bash
152
- cd ${UICOMPONENTS}
153
- git add -A
154
- git commit -m "fix(uicomponents): auto-fix review violations
155
-
156
- Tour: performance-tour review fixes"
157
- ```
158
- - Re-run build (STEP 1a) to verify auto-fixes didn't break anything
159
- - If unfixable violations remain → print them, ask user to proceed or abort
160
-
161
- Print validation result:
162
-
163
- ```
164
- Validation Summary:
165
- Build: ✅
166
- Tests: ✅ (ComponentA: 12 passed, ComponentC: 8 passed) # or: ⏭️ skipped (lean mode)
167
- Key Sync: ✅
168
- Review: ✅ / ⚠️ (N warnings, M auto-fixed)
169
- ```
170
-
171
- ---
172
-
173
- ## STEP 2 - Push (SINGLE PUSH per submodule)
174
-
175
- ### 2a. Push with Rebase-Retry Loop
176
-
177
- For each submodule that has commits (common, uicomponents, wiki):
178
-
179
- ```bash
180
- cd ${SUBMODULE}
181
- PUSH_BRANCH="iteration/develop" # or "master" for wiki
182
-
183
- MAX_RETRIES=3
184
- for i in $(seq 1 $MAX_RETRIES); do
185
- git push origin ${PUSH_BRANCH} && break
186
-
187
- echo "Push rejected - remote updated. Rebasing (attempt $i)..."
188
- git fetch origin ${PUSH_BRANCH}
189
- git rebase origin/${PUSH_BRANCH}
190
-
191
- if [ $? -ne 0 ]; then
192
- # Rebase conflict - attempt auto-resolution for generated files
193
- # See "Generated File Conflict Resolution" below
194
- # If auto-resolution fails → HALT
195
- fi
196
-
197
- # Re-validate build after rebase
198
- xcodebuild build -project "${REPO_ROOT}/{build.xcodeproj}" \
199
- -scheme {build.scheme} -destination 'generic/platform=iOS' \
200
- CODE_SIGNING_ALLOWED=NO -quiet
201
-
202
- if [ $? -ne 0 ]; then
203
- echo "HALT: Build failed after rebase. Fix before pushing."
204
- exit 1
205
- fi
206
- done
207
- ```
208
-
209
- **Push order matters:** common → uicomponents → wiki (dependencies flow this direction).
210
- In **lean mode**, wiki submodule has no commits - skip the wiki push entirely.
211
-
212
- #### Generated File Conflict Resolution (common submodule)
213
-
214
- During rebase, conflicts in generated files are **expected** when others have pushed to
215
- `iteration/develop` concurrently. **NEVER resolve these by picking a side - always
216
- accept remote then regenerate.**
217
-
218
- **Conflict resolution table:**
219
-
220
- | File | Resolution |
221
- |------|-----------|
222
- | `ui-testing-identifiers.json` | 1. `git checkout --ours` (upstream=remote during rebase) 2. Re-add our keys from `Shared/Figma/Components/{nodeId}.json` using Python with `" : "` format 3. `git add` |
223
- | `LocalizationStringKeys.swift` | 1. `git checkout --ours` 2. Run `swift package plugin --allow-writing-to-package-directory update-localizations-dev` 3. `git add` |
224
- | `UIAssetsGeneratedTokens.swift` | 1. `git checkout --ours` (timestamp-only conflict) 2. `git add` |
225
- | `UITestingIdentifierKeys.swift` | 1. `git checkout --ours` 2. Run `swift run UITestingIdentifierTool generate` 3. `git add` |
226
- | `Localizable.xcstrings` | 1. `git checkout --ours` 2. Already regenerated by `update-localizations-dev` above 3. `git add` |
227
-
228
- **Procedure per conflicted commit during rebase:**
229
-
230
- ```
231
- 1. List conflicted files: git diff --name-only --diff-filter=U
232
- 2. For each conflicted file:
233
- a. If in table above → apply resolution (accept remote + regenerate)
234
- b. If NOT in table → HALT, ask user to resolve manually
235
- 3. git add <resolved files>
236
- 4. git rebase --continue
237
- 5. If next commit also conflicts → repeat from step 1
238
- ```
239
-
240
- **Post-rebase verification:** After all conflicts resolved and rebase completes,
241
- verify our keys survived:
242
- ```bash
243
- grep -c "ComponentName" iOS/Sources/LocalizationStringKeys/Generated/LocalizationStringKeys.swift
244
- grep -c "ComponentName" Shared/UITestingIdentifiers/ui-testing-identifiers.json
245
- ```
246
- If count is 0 for any component → regenerate again before pushing.
247
-
248
- #### Wiki Conflict Resolution
249
-
250
- Wiki status pages (`ComponentImplementationStatus*.md`) are auto-generated dashboards.
251
- When conflicts occur:
252
- 1. `git checkout --ours` (accept remote counts)
253
- 2. `git add` + `git rebase --continue`
254
- 3. Status dashboard will be regenerated in STEP 3e
255
-
256
- ### 2b. Record Push SHAs
257
-
258
- After successful push:
259
-
260
- ```bash
261
- COMMON_SHA=$(git -C ${COMMON} rev-parse --short HEAD)
262
- UICOMP_SHA=$(git -C ${UICOMPONENTS} rev-parse --short HEAD)
263
- WIKI_SHA=$(git -C ${WIKI} rev-parse --short HEAD) # only if not lean_mode
264
- ```
265
-
266
- Update tracker: record SHAs for each component.
267
-
268
- ### 2c. Fetch All Remotes
269
-
270
- ```bash
271
- cd ${COMMON} && git fetch origin iteration/develop
272
- cd ${UICOMPONENTS} && git fetch origin iteration/develop
273
- # Wiki fetch - skip in lean mode
274
- if [ "$LEAN_MODE" != "true" ]; then
275
- cd ${WIKI} && git fetch origin master
276
- fi
277
- ```
278
-
279
- ### 2d. Post-Push Build Verification
280
-
281
- After all submodules are pushed, verify that the **remote dependency chain** builds
282
- correctly. This catches issues where generated files lost entries during rebase
283
- conflict resolution (e.g., `LocalizationStringKeys.swift` missing component keys).
284
-
285
- 1. Ensure `Package.swift` in uicomponents points to **remote** common (not local path):
286
- ```
287
- .package(url: "...{project.slug}-common.git", branch: "iteration/develop")
288
- ```
289
- If it has a local `path:` override, revert it first.
290
-
291
- 2. Resolve packages to pick up the freshly pushed common:
292
- ```bash
293
- cd ${UICOMPONENTS}
294
- swift package resolve
295
- ```
296
-
297
- 3. Run a quick build:
298
- ```bash
299
- xcodebuild build -project "${REPO_ROOT}/{build.xcodeproj}" \
300
- -scheme {build.scheme} -destination 'generic/platform=iOS' \
301
- CODE_SIGNING_ALLOWED=NO -skipMacroValidation -quiet
302
- ```
303
-
304
- 4. If build fails:
305
- - Check for `has no member` errors → indicates generated file lost keys during rebase
306
- - For `LocalizationStringKeys`: `cd ${COMMON} && swift package plugin --allow-writing-to-package-directory update-localizations-dev`
307
- - For `UITestingIdentifierKeys`: `cd ${COMMON} && swift run UITestingIdentifierTool generate`
308
- - Commit fix: `git add -A && git commit -m "fix(common): regenerate keys after rebase"`
309
- - Push: `git push origin iteration/develop`
310
- - Re-run this step to confirm
311
-
312
- 5. If build succeeds → print `Post-Push Build: ✅`
313
-
314
- ---
315
-
316
- ## STEP 3 - Issue Housekeeping (Per Component)
317
-
318
- > **(strict) NONE of these substeps may be skipped.** Each substep prints a
319
- > status line (`✅` or `❌`). The Completion Gate at the end (3g) verifies ALL
320
- > substeps executed. If any critical substep is missing → HALT.
321
-
322
- Initialise a per-component result tracker:
323
-
324
- ```python
325
- housekeeping = {} # { issue_number: { "3a": bool, "3b": bool, "3c": bool, "3d": bool, "3e": bool, "3f": bool } }
326
- for comp in reviewed:
327
- housekeeping[comp["issue"]] = {k: False for k in ["3a","3b","3c","3d","3e","3f"]}
328
- ```
329
-
330
- For EACH reviewed component:
331
-
332
- ### 3a. Comment on Issue
333
-
334
- ```bash
335
- gh issue comment <N> --repo ${GH_REPO} --body "$(cat <<EOF
336
- Committed to iteration/develop (submodules) via performance-tour:
337
- - common: ${COMMON_SHA}
338
- - uicomponents: ${UICOMP_SHA}
339
- $(if [ "$LEAN_MODE" != "true" ]; then echo "- wiki: ${WIKI_SHA}"; fi)
340
- $(if [ "$LEAN_MODE" = "true" ]; then echo "\nMode: lean (tests & wiki skipped)"; fi)
341
-
342
- Tour batch: $(date +%Y-%m-%d)
343
- Ready for review.
344
- EOF
345
- )"
346
- ```
347
-
348
- Verify: `gh issue view <N> --repo ${GH_REPO} --json comments --jq '.comments[-1].body' | grep -q 'performance-tour'`
349
-
350
- Print: ` #<N> 3a Comment: ✅` or `❌`
351
-
352
- ### 3b. Update Issue Phase + Labels
353
-
354
- Determine completed phases from committed files:
355
- - Has Swift view file → phase:implementation done
356
- - Has test files → phase:testing done (**skip check in lean mode - always false**)
357
- - Has .figma.swift → phase:code-connect done
358
- - Has wiki markdown → phase:documentation done (**skip check in lean mode - always false**)
359
-
360
- **Add phase labels to issue (adjust for lean mode):**
361
-
362
- ```bash
363
- # Full mode: add all completed phase labels
364
- # Lean mode: only add phase:code-connect (no testing or documentation labels)
365
- if [ "$LEAN_MODE" = "true" ]; then
366
- gh issue edit <N> --repo ${GH_REPO} \
367
- --add-label "phase:code-connect"
368
- else
369
- gh issue edit <N> --repo ${GH_REPO} \
370
- --add-label "phase:testing" \
371
- --add-label "phase:code-connect" \
372
- --add-label "phase:documentation"
373
- fi
374
- ```
375
-
376
- **Update Phase field on Projects V2 board** to the LAST completed phase
377
- (same GraphQL mutations as `figma-iteration-commit` STEP 4b):
378
-
379
- ```bash
380
- # Phase option IDs:
381
- # Implementation = 0577dcda
382
- # Testing = 106b64ce
383
- # Code Connect = 5384b1e1
384
- # Documentation = 7307fb8f
385
- #
386
- # In lean mode, last phase = Code Connect (5384b1e1)
387
- # In full mode, last phase = Documentation (7307fb8f)
388
-
389
- ISSUE_NODE_ID=$(gh api graphql -f query='{ repository(owner: "{github.org}", name: "{project.slug}-components") { issue(number: <N>) { id } } }' --jq '.data.repository.issue.id')
390
-
391
- ITEM_ID=$(gh api graphql -f query='mutation { addProjectV2ItemById(input: { projectId: "{github.projectV2Id}", contentId: "'"$ISSUE_NODE_ID"'" }) { item { id } } }' --jq '.data.addProjectV2ItemById.item.id')
392
-
393
- # Set Phase = Documentation (last completed) - or Code Connect in lean mode
394
- LAST_PHASE_ID="7307fb8f" # Documentation
395
- if [ "$LEAN_MODE" = "true" ]; then
396
- LAST_PHASE_ID="5384b1e1" # Code Connect
397
- fi
398
- gh api graphql -f query='mutation { updateProjectV2ItemFieldValue(input: { projectId: "{github.projectV2Id}", itemId: "'"$ITEM_ID"'", fieldId: "{github.projectV2Fields.phase}", value: { singleSelectOptionId: "'"$LAST_PHASE_ID"'" } }) { projectV2Item { id } } }'
399
- ```
400
-
401
- Verify: `gh api graphql` query confirms Phase field updated.
402
-
403
- Print: ` #<N> 3b Phase: ✅ → Documentation` or ` #<N> 3b Phase: ✅ → Code Connect (lean)` or `❌`
404
-
405
- ### 3c. Link Wiki to Issue
406
-
407
- > **LEAN MODE:** If `lean_mode` is `true`, **SKIP this substep.** Wiki was not generated.
408
- > Print ` #<N> 3c Wiki Link: ⏭ (lean mode)` and proceed.
409
-
410
- If wiki was committed, add/update `### Wiki` section in issue body
411
- (same logic as `figma-iteration-commit` STEP 4c).
412
-
413
- ```bash
414
- # Get current body
415
- BODY=$(gh issue view <N> --repo ${GH_REPO} --json body --jq '.body')
416
-
417
- # Construct wiki URL
418
- WIKI_URL="https://github.com/${GH_REPO}/wiki/<WIKI_RELATIVE_PATH>/<COMPONENT_NAME>"
419
-
420
- # Append wiki section if not already present
421
- if ! echo "$BODY" | grep -q '### Wiki'; then
422
- NEW_BODY="${BODY}
423
-
424
- ### Wiki
425
-
426
- [${COMPONENT_NAME}](${WIKI_URL})"
427
- gh issue edit <N> --repo ${GH_REPO} --body "$NEW_BODY"
428
- fi
429
- ```
430
-
431
- Verify: `gh issue view <N> --repo ${GH_REPO} --json body --jq '.body' | grep -q 'Wiki'`
432
-
433
- Print: ` #<N> 3c Wiki Link: ✅` or `⏭ (no wiki)` or `❌`
434
-
435
- ### 3d. Auto-Unblock Dependents
436
-
437
- After ALL components are pushed, scan blocked issues:
438
-
439
- ```bash
440
- gh issue list --repo ${GH_REPO} --state open --label blocked --json number,title,body
441
- ```
442
-
443
- For each blocked issue, check if all blocking dependencies now have implementations.
444
- If yes → remove `blocked` label + comment.
445
-
446
- Print: ` 3d Unblock: ✅ (N unblocked)` or `⏭ (none blocked)`
447
-
448
- ### 3e. Regenerate Status Dashboard
449
-
450
- > **LEAN MODE:** If `lean_mode` is `true`, **SKIP this substep.** No wiki changes were made.
451
- > Print ` 3e Dashboard: ⏭ (lean mode)` and proceed.
452
-
453
- Wiki status pages (`ComponentImplementationStatus.md`, `-DSC.md`, `-MAC.md`) contain
454
- component counts that may have been lost during rebase conflict resolution. Regenerate
455
- them after all pushes are complete.
456
-
457
- ```bash
458
- # Run the status update skill logic:
459
- cd ${WIKI}
460
-
461
- # Option A: If figma-to-swift-ui-status-update is available as a command
462
- # /figma-to-swift-ui-status-update
463
-
464
- # Option B: Manual regeneration using the registry
465
- cd ${COMMON}
466
- python3 ${REPO_ROOT}/.instructions/figma/figma-to-swiftui/scripts/update-status-dashboard.py \
467
- --wiki-path "${WIKI}" \
468
- --common-path "${COMMON}" \
469
- --uicomponents-path "${UICOMPONENTS}"
470
- ```
471
-
472
- If the script is not available, skip with a warning:
473
- ```
474
- ⚠️ Status dashboard regeneration skipped - script not found.
475
- Run /figma-to-swift-ui-status-update manually to update counts.
476
- ```
477
-
478
- If regeneration produces changes:
479
- ```bash
480
- cd ${WIKI}
481
- git add ComponentImplementationStatus*.md
482
- git commit -m "docs(wiki): regenerate status dashboard after tour batch
483
-
484
- Tour: performance-tour $(date +%Y-%m-%d)"
485
- git push origin master
486
- ```
487
-
488
- Print: ` 3e Dashboard: ✅ regenerated` or `⏭ (no script)`
489
-
490
- ### 3f. Jira Assignment & Content Update
491
-
492
- > This step is a **safety net** for `performance-start` STEP 4. In tour mode,
493
- > `performance-start` should assign Jira issues, but subagents may skip it.
494
- > This step verifies and fixes any gaps.
495
-
496
- For EACH reviewed component that has a Jira key (from issue body, field `### Jira Issue`):
497
-
498
- ```bash
499
- # Extract Jira key from issue body
500
- JIRA_KEY=$(gh issue view <N> --repo ${GH_REPO} --json body --jq '.body' | grep -oE '{jira.projectKey}-[0-9]+')
501
- ```
502
-
503
- If `JIRA_KEY` is empty or `_No response_` → skip with `⏭ (no Jira)`.
504
-
505
- Otherwise, run the Jira update via **Python urllib** (same approach as `performance-start` STEP 4):
506
-
507
- ```python
508
- # /tmp/jira_housekeeping_<JIRA_KEY>.py
509
- import subprocess, urllib.request, json
510
-
511
- token = subprocess.check_output(
512
- ["security", "find-generic-password", "-a",
513
- subprocess.check_output(["whoami"]).decode().strip(),
514
- "-s", "JIRA_TOKEN", "-w"],
515
- stderr=subprocess.DEVNULL
516
- ).decode().strip()
517
-
518
- JIRA_KEY = "<JIRA_KEY>"
519
-
520
- # 1. Get current user
521
- req = urllib.request.Request(
522
- "{jira.baseUrl}/rest/api/2/myself",
523
- headers={"Authorization": f"Bearer {token}"}
524
- )
525
- resp = urllib.request.urlopen(req, timeout=15)
526
- username = json.loads(resp.read().decode())["name"]
527
-
528
- # 2. Check if already assigned
529
- req2 = urllib.request.Request(
530
- f"{jira.baseUrl}/rest/api/2/issue/{JIRA_KEY}?fields=assignee",
531
- headers={"Authorization": f"Bearer {token}"}
532
- )
533
- resp2 = urllib.request.urlopen(req2, timeout=15)
534
- assignee = json.loads(resp2.read().decode()).get("fields",{}).get("assignee")
535
-
536
- if assignee and assignee.get("name") == username:
537
- print(f"ALREADY_ASSIGNED {JIRA_KEY}")
538
- else:
539
- # 3. Assign
540
- data = json.dumps({"name": username}).encode()
541
- req3 = urllib.request.Request(
542
- f"{jira.baseUrl}/rest/api/2/issue/{JIRA_KEY}/assignee",
543
- data=data,
544
- headers={"Authorization": f"Bearer {token}", "Content-Type": "application/json"},
545
- method="PUT"
546
- )
547
- try:
548
- urllib.request.urlopen(req3, timeout=15)
549
- print(f"ASSIGNED {JIRA_KEY}")
550
- except urllib.error.HTTPError as e:
551
- print(f"ASSIGN_FAILED {JIRA_KEY} {e.code}")
552
-
553
- # 4. Update Jira content (summary, description, labels)
554
- description = (
555
- "h3. Figma\n"
556
- "[<COMPONENT>|<FIGMA_URL>]\n\n"
557
- "h3. GitHub Issue\n"
558
- "[#<N>|https://github.com/<GH_REPO>/issues/<N>]\n\n"
559
- "h3. Component\n"
560
- "* *Registry Name:* <REGISTRY>\n"
561
- "* *Component Name:* <COMPONENT>\n"
562
- "* *Page:* <PAGE>\n\n"
563
- "h3. Status\n"
564
- "* (/) Implementation\n"
565
- "* (/) Testing\n"
566
- "* (/) Code Connect\n"
567
- "* (/) Documentation"
568
- )
569
- summary = "Implement <COMPONENT> iOS UI Component"
570
- update_data = json.dumps({
571
- "fields": {
572
- "summary": summary,
573
- "description": description,
574
- "labels": ["redesign_ios_ui_component", "MobRedesign"],
575
- "components": [{"name": "TKMOB IOS"}],
576
- "fixVersions": [{"name": "no-version"}],
577
- "customfield_22025": {"value": "YOK"},
578
- "customfield_21400": ["no-version"]
579
- }
580
- }).encode()
581
- req4 = urllib.request.Request(
582
- f"{jira.baseUrl}/rest/api/2/issue/{JIRA_KEY}",
583
- data=update_data,
584
- headers={"Authorization": f"Bearer {token}", "Content-Type": "application/json"},
585
- method="PUT"
586
- )
587
- try:
588
- urllib.request.urlopen(req4, timeout=15)
589
- print(f"UPDATED {JIRA_KEY}")
590
- except urllib.error.HTTPError as e:
591
- print(f"UPDATE_FAILED {JIRA_KEY} {e.code}")
592
- ```
593
-
594
- Print: ` #<N> 3f Jira (<JIRA_KEY>): ✅ assigned + updated` or `⏭ (no Jira)` or `⚠️ (VPN/token issue)`
595
-
596
- ### 3g. Required Completion Gate
597
-
598
- > **This gate is NON-NEGOTIABLE. Do NOT proceed to STEP 4 without passing it.**
599
-
600
- Print the housekeeping checklist for ALL components:
601
-
602
- ```
603
- ╔══════════════════════════════════════════════════════════════╗
604
- ║ HOUSEKEEPING COMPLETION GATE ║
605
- ╠══════════════════════════════════════════════════════════════╣
606
- ║ ║
607
- ║ #308 FeatureXInviteList ║
608
- ║ 3a Comment: ✅ ║
609
- ║ 3b Phase: ✅ → Documentation ║
610
- ║ 3c Wiki Link: ✅ ║
611
- ║ 3d Unblock: ⏭ (none blocked) ║
612
- ║ 3e Dashboard: ✅ regenerated ║
613
- ║ 3f Jira: ✅ {jira.projectKey}-132507 ║
614
- ║ ║
615
- ║ #309 FeatureXVoucherGroup ║
616
- ║ 3a Comment: ✅ ║
617
- ║ 3b Phase: ✅ → Documentation ║
618
- ║ 3c Wiki Link: ✅ ║
619
- ║ 3d Unblock: ⏭ (none blocked) ║
620
- ║ 3e Dashboard: ⏭ (covered above) ║
621
- ║ 3f Jira: ✅ {jira.projectKey}-132508 ║
622
- ║ ║
623
- ║ CRITICAL CHECK: ║
624
- ║ 3a (Comment): ALL ✅ ║
625
- ║ 3b (Phase): ALL ✅ ← MUST pass ║
626
- ║ 3c (Wiki): ALL ✅ ← MUST pass (if wiki exists) ║
627
- ║ (or ⏭ lean for all in lean mode) ║
628
- ║ 3f (Jira): ALL ✅ ← MUST pass (if Jira exists) ║
629
- ║ ║
630
- ║ GATE: ✅ PASSED ║
631
- ╚══════════════════════════════════════════════════════════════╝
632
- ```
633
-
634
- **Critical substeps** (MUST pass or have valid skip reason):
635
- - **3a** - Comment on issue
636
- - **3b** - Phase + labels updated
637
- - **3c** - Wiki linked (if wiki committed)
638
- - **3f** - Jira assigned (if Jira key exists)
639
-
640
- **Non-critical substeps** (warn but continue):
641
- - **3d** - Auto-unblock (best effort)
642
- - **3e** - Status dashboard (best effort)
643
-
644
- If ANY critical substep shows `❌`:
645
- 1. Print which substeps failed and for which components
646
- 2. **Retry the failed substep** (1 retry per substep)
647
- 3. If retry also fails → HALT with: `"Housekeeping incomplete. Fix manually before marking tour done."`
648
-
649
- If gate passes → proceed to STEP 4.
650
-
651
- ---
652
-
653
- ## STEP 4 - Final Report
654
-
655
- ```
656
- ╔══════════════════════════════════════════════════════════════╗
657
- ║ TOUR COMPLETE - FINAL REPORT ║
658
- ╠══════════════════════════════════════════════════════════════╣
659
- ║ ║
660
- ║ ┌───┬────────┬──────────────┬──────────┬────────────────┐ ║
661
- ║ │ # │ Issue │ Component │ Status │ SHA │ ║
662
- ║ ├───┼────────┼──────────────┼──────────┼────────────────┤ ║
663
- ║ │ 1 │ #1000 │ ComponentA │ ✅ Pushed │ abc1234 │ ║
664
- ║ │ 2 │ #1002 │ ComponentC │ ✅ Pushed │ def5678 │ ║
665
- ║ │ 3 │ #1001 │ ComponentB │ ❌ Dropped│ - │ ║
666
- ║ └───┴────────┴──────────────┴──────────┴────────────────┘ ║
667
- ║ ║
668
- ║ Validation: ║
669
- ║ Build: ✅ ║
670
- ║ Tests: ✅ (20 passed) ║
671
- ║ Review: ✅ ║
672
- ║ Post-Push: ✅ (remote dep build verified) ║
673
- ║ ║
674
- ║ Push: ║
675
- ║ common: ✅ pushed (2 commits) ║
676
- ║ uicomponents: ✅ pushed (2 commits) ║
677
- ║ wiki: ✅ pushed (2 commits) / ⏭ lean ║
678
- ║ ║
679
- ║ Issues Updated: #1000, #1002 ║
680
- ║ Jira Updated: {jira.projectKey}-132507, {jira.projectKey}-132508 ║
681
- ║ Unblocked: #1050 (was blocked by ComponentA) ║
682
- ║ Dashboard: ✅ regenerated ║
683
- ║ Housekeeping: ✅ gate passed (all 6 substeps) ║
684
- ║ ║
685
- ║ Tour Duration: 1h 23m ║
686
- ║ Components: 2 committed, 1 dropped ║
687
- ╚══════════════════════════════════════════════════════════════╝
688
- ```
689
-
690
- ### Cleanup
691
-
692
- ```bash
693
- # Remove tour tracker (tour is complete)
694
- rm -f ${TRACKER_FILE}
695
- ```
696
-
697
- ---
698
-
699
- ## Error Handling
700
-
701
- | Error | Action |
702
- |-------|--------|
703
- | Tracker not found | HALT: "No tour in progress" |
704
- | current_step not STEP_3 | HALT: "Review not complete" |
705
- | No reviewed components | HALT: "Nothing to commit" |
706
- | Build fails | HALT - fix, then re-run |
707
- | Tests fail | HALT - fix failing component, then re-run |
708
- | Push rejected (after 3 retries) | HALT - manual conflict resolution needed |
709
- | Rebase conflict (generated file) | Auto-resolve: accept remote + regenerate (see 2a table) |
710
- | Rebase conflict (non-generated) | HALT - print conflict file, ask user to resolve |
711
- | Post-push build fails | Regenerate generated files in common, commit + push fix |
712
- | Status dashboard script missing | Warn + skip - not blocking |
713
- | Issue housekeeping fails (critical: 3a/3b/3c/3f) | Retry once → if still fails, HALT |
714
- | Issue housekeeping fails (non-critical: 3d/3e) | Warn but continue |
715
- | Jira unreachable | ⚠️ warn - mark 3f as skipped with reason, pass gate |
716
- | Completion gate fails | HALT: print failed substeps, retry once, then abort |