@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,93 +0,0 @@
1
- """Post-finalize propagation: invoke update-issue-from-registry.py for one node.
2
-
3
- Called at the end of each phase{4,5,6,7}-finalize.py so that completing a
4
- phase flips the matching Projects V2 Status column immediately, instead of
5
- waiting for the next figma-iteration-commit. Failures here are *logged
6
- but not fatal* - the registry write is the single source of truth; the
7
- issue sync is propagation, not a prerequisite.
8
- """
9
-
10
- from __future__ import annotations
11
-
12
- import json
13
- import os
14
- import subprocess
15
- import sys
16
- from pathlib import Path
17
- from typing import Optional
18
-
19
- SYNC_TIMEOUT_SECONDS = 120 # per-node upper bound on the full sync (4 flag + status + review writes)
20
-
21
-
22
- def _script_path() -> Path:
23
- here = Path(__file__).resolve().parent
24
- return here.parent / "update-issue-from-registry.py"
25
-
26
-
27
- def propagate_to_issue(
28
- node_id: str,
29
- platform: str = "ios",
30
- registry_dir: Optional[Path] = None,
31
- dry_run: bool = False,
32
- timeout: int = SYNC_TIMEOUT_SECONDS,
33
- ) -> dict:
34
- """Run update-issue-from-registry.py for a single node.
35
-
36
- Returns:
37
- {"status": "ok", "result": <parsed json>} on success
38
- {"status": "skip", "reason": <str>} on skip_marked_skip / skip_icon
39
- {"status": "error", "reason": <str>, "stderr": <str>} on failure
40
-
41
- The finalize caller should include the returned dict in its own JSON
42
- output under a key like "issue_sync" for visibility but should NOT
43
- change its own exit code based on this result.
44
- """
45
- script = _script_path()
46
- if not script.exists():
47
- return {"status": "error", "reason": f"script not found: {script}"}
48
-
49
- cmd = [sys.executable, str(script), "--node-id", node_id, "--platform", platform]
50
- if registry_dir is not None:
51
- cmd.extend(["--registry-dir", str(registry_dir)])
52
- if dry_run:
53
- cmd.append("--dry-run")
54
-
55
- try:
56
- proc = subprocess.run(
57
- cmd,
58
- capture_output=True,
59
- text=True,
60
- timeout=timeout,
61
- )
62
- except subprocess.TimeoutExpired:
63
- return {"status": "error", "reason": f"timeout after {timeout}s"}
64
- except OSError as e:
65
- return {"status": "error", "reason": f"{type(e).__name__}: {e}"}
66
-
67
- if proc.returncode != 0:
68
- return {
69
- "status": "error",
70
- "reason": f"exit {proc.returncode}",
71
- "stderr": (proc.stderr or "")[:400],
72
- }
73
-
74
- # Parse the JSON the sync script prints so the caller can see what happened.
75
- stdout = proc.stdout.strip()
76
- try:
77
- result = json.loads(stdout)
78
- except json.JSONDecodeError:
79
- return {"status": "error", "reason": "non-json stdout", "stderr": stdout[:400]}
80
-
81
- action = result.get("action") if isinstance(result, dict) else None
82
- if action in ("skip_marked_skip", "skip_icon"):
83
- return {"status": "skip", "reason": action}
84
- return {"status": "ok", "result": result}
85
-
86
-
87
- def should_skip_sync(env_override: Optional[str] = None) -> bool:
88
- """Check the FIGMA_SKIP_ISSUE_SYNC env var (for CI / tests).
89
-
90
- Returns True if the env var is set to a truthy value ("1", "true", "yes").
91
- """
92
- val = env_override if env_override is not None else os.environ.get("FIGMA_SKIP_ISSUE_SYNC", "")
93
- return val.strip().lower() in ("1", "true", "yes", "on")
@@ -1,299 +0,0 @@
1
- """registry_writer.py - single writer for component registry JSON files.
2
-
3
- All phase finalize scripts (phase4/5/6/7) and the figma-update script MUST go
4
- through this module. No script writes to registry JSONs directly.
5
-
6
- Schema extension (additive, does not touch existing fields):
7
-
8
- "figmaUpdatedAt": "2026-04-08T09:12:00Z",
9
- "status": {
10
- "ios": {
11
- "stale": false,
12
- "implemented": { "value": true, "version": 3, "hash": "sha256:...", "at": "..." },
13
- "tested": { "value": true, "against": 3, "at": "..." },
14
- "codeConnect": { "value": true, "against": 3, "at": "..." },
15
- "wiki": { "value": true, "against": 3, "at": "..." }
16
- },
17
- "android": { ...same shape... }
18
- }
19
-
20
- Yellow rule (enforced in get_flag_state):
21
- A flag is YELLOW when its `against` value is less than
22
- `implemented.version`. That means the implementation changed after this
23
- flag was last validated, so the flag needs re-validation.
24
-
25
- Version bump rule (enforced in set_implemented):
26
- - If source_file is provided, the file is hashed and compared to the
27
- stored hash. Byte-identical content does NOT bump the version.
28
- - If source_file is omitted, version always bumps on each call (caller
29
- explicitly wants to record a change).
30
-
31
- Legacy compatibility:
32
- The top-level `codeConnect: { ios, android }` field is mirrored whenever
33
- set_flag(flag="codeConnect") is called, so existing readers
34
- (register-icons-codeconnect.py, confluence-component-status.py) keep
35
- working unchanged during the transition.
36
- """
37
-
38
- import hashlib
39
- import json
40
- from datetime import datetime, timezone
41
- from pathlib import Path
42
- from typing import Optional
43
-
44
- FLAGS = ("tested", "codeConnect", "wiki")
45
- PLATFORMS = ("ios", "android")
46
-
47
-
48
- def now_iso() -> str:
49
- """ISO 8601 UTC timestamp with Z suffix."""
50
- return datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
51
-
52
-
53
- def _hash_file(path: Path) -> str:
54
- """SHA-256 hex digest of a file, truncated to 16 chars for readability."""
55
- h = hashlib.sha256()
56
- h.update(path.read_bytes())
57
- return "sha256:" + h.hexdigest()[:16]
58
-
59
-
60
- def _blank_platform_status() -> dict:
61
- return {
62
- "stale": False,
63
- "implemented": {"value": False, "version": 0, "hash": None, "at": None},
64
- "tested": {"value": False, "against": 0, "at": None},
65
- "codeConnect": {"value": False, "against": 0, "at": None},
66
- "wiki": {"value": False, "against": 0, "at": None},
67
- }
68
-
69
-
70
- def _registry_file(registry_dir: Path, node_id: str) -> Path:
71
- return Path(registry_dir) / f"{node_id.replace(':', '-')}.json"
72
-
73
-
74
- def _load(path: Path) -> dict:
75
- if path.exists():
76
- return json.loads(path.read_text(encoding="utf-8"))
77
- return {}
78
-
79
-
80
- def _save(path: Path, data: dict) -> None:
81
- path.parent.mkdir(parents=True, exist_ok=True)
82
- path.write_text(
83
- json.dumps(data, indent=2, ensure_ascii=False) + "\n",
84
- encoding="utf-8",
85
- )
86
-
87
-
88
- def _ensure_status_block(data: dict, platform: str) -> dict:
89
- if platform not in PLATFORMS:
90
- raise ValueError(f"platform must be one of {PLATFORMS}, got {platform!r}")
91
- status = data.setdefault("status", {})
92
- for p in PLATFORMS:
93
- if p not in status:
94
- status[p] = _blank_platform_status()
95
- return status[platform]
96
-
97
-
98
- def set_implemented(
99
- registry_dir: Path,
100
- node_id: str,
101
- platform: str,
102
- updater: str = "phase-4-view",
103
- source_file: Optional[Path] = None,
104
- ) -> dict:
105
- """Phase 4 finalize entry point. Bumps implemented.version iff content changed.
106
-
107
- Returns the updated `implemented` block so the caller can log the new version.
108
-
109
- Side effects:
110
- - Creates the registry file if missing (with nodeId set).
111
- - Adds a `status` block if missing (both ios + android blank).
112
- - Clears `status.<platform>.stale` (re-impl acknowledges Figma update).
113
- - Updates `lastUpdated` and `updatedBy` top-level fields.
114
- """
115
- path = _registry_file(registry_dir, node_id)
116
- data = _load(path)
117
- data.setdefault("nodeId", node_id)
118
-
119
- ps = _ensure_status_block(data, platform)
120
- current = ps["implemented"]
121
- current_version = current.get("version", 0)
122
- current_hash = current.get("hash")
123
-
124
- new_hash = _hash_file(source_file) if source_file else None
125
-
126
- # Byte-identical re-run with prior recording: no-op
127
- if source_file and new_hash == current_hash and current.get("value"):
128
- return current
129
-
130
- # Bump: version increments by 1, or starts at 1 if first time
131
- new_version = current_version + 1 if current.get("value") else max(current_version, 0) + 1
132
-
133
- ps["implemented"] = {
134
- "value": True,
135
- "version": new_version,
136
- "hash": new_hash,
137
- "at": now_iso(),
138
- }
139
- ps["stale"] = False # re-impl clears stale on this platform
140
-
141
- data["lastUpdated"] = now_iso()
142
- data["updatedBy"] = updater
143
- _save(path, data)
144
-
145
- return ps["implemented"]
146
-
147
-
148
- def set_flag(
149
- registry_dir: Path,
150
- node_id: str,
151
- platform: str,
152
- flag: str,
153
- updater: str,
154
- ) -> dict:
155
- """Phase 5/6/7 finalize entry point. Records flag as validated against current impl.version.
156
-
157
- flag must be one of: tested | codeConnect | wiki
158
-
159
- Side effects:
160
- - Writes `status.<platform>.<flag> = { value: true, against: <impl.version>, at }`
161
- - For flag='codeConnect', mirrors to legacy `codeConnect.<platform> = true`
162
- - Updates `lastUpdated` and `updatedBy`
163
-
164
- Returns the updated flag block.
165
- """
166
- if flag not in FLAGS:
167
- raise ValueError(f"flag must be one of {FLAGS}, got {flag!r}")
168
-
169
- path = _registry_file(registry_dir, node_id)
170
- data = _load(path)
171
- data.setdefault("nodeId", node_id)
172
-
173
- ps = _ensure_status_block(data, platform)
174
- impl_version = ps["implemented"].get("version", 0)
175
-
176
- ps[flag] = {
177
- "value": True,
178
- "against": impl_version,
179
- "at": now_iso(),
180
- }
181
-
182
- # Legacy mirror for codeConnect
183
- if flag == "codeConnect":
184
- data.setdefault("codeConnect", {"ios": False, "android": False})
185
- data["codeConnect"][platform] = True
186
-
187
- data["lastUpdated"] = now_iso()
188
- data["updatedBy"] = updater
189
- _save(path, data)
190
-
191
- return ps[flag]
192
-
193
-
194
- def set_implemented_by(
195
- registry_dir: Path,
196
- node_id: str,
197
- platform: str,
198
- author: str,
199
- updater: str = "backfill-status",
200
- ) -> None:
201
- """Record who implemented a component (git author, most-commits-wins).
202
-
203
- Writes `status.<platform>.implementedBy = <author_name>`. This is
204
- metadata for issue assignment - does NOT affect any version or
205
- flag-state computation.
206
- """
207
- if not isinstance(platform, str) or platform not in PLATFORMS:
208
- raise ValueError(f"platform must be one of {PLATFORMS}, got {platform!r}")
209
- if not author or not isinstance(author, str):
210
- return
211
-
212
- path = _registry_file(registry_dir, node_id)
213
- data = _load(path)
214
- data.setdefault("nodeId", node_id)
215
-
216
- ps = _ensure_status_block(data, platform)
217
- ps["implementedBy"] = author
218
-
219
- data["lastUpdated"] = now_iso()
220
- data["updatedBy"] = updater
221
- _save(path, data)
222
-
223
-
224
- def mark_stale(
225
- registry_dir: Path,
226
- node_id: str,
227
- figma_updated_at: str,
228
- ) -> bool:
229
- """figma-update script entry point.
230
-
231
- If `figma_updated_at` is newer than the stored `figmaUpdatedAt`, sets
232
- `status.<platform>.stale=true` for any platform that has been implemented.
233
-
234
- Does NOT create new registry files - only updates existing ones.
235
-
236
- Returns True if the registry was modified, False otherwise.
237
- """
238
- path = _registry_file(registry_dir, node_id)
239
- if not path.exists():
240
- return False
241
-
242
- data = _load(path)
243
-
244
- prev = data.get("figmaUpdatedAt")
245
- if prev and prev >= figma_updated_at:
246
- return False
247
-
248
- data["figmaUpdatedAt"] = figma_updated_at
249
- for platform in PLATFORMS:
250
- ps = _ensure_status_block(data, platform)
251
- # Only mark a platform stale if something was actually implemented there
252
- if ps["implemented"].get("value"):
253
- ps["stale"] = True
254
-
255
- data["lastUpdated"] = now_iso()
256
- data["updatedBy"] = "figma-update-script"
257
- _save(path, data)
258
- return True
259
-
260
-
261
- def get_flag_state(
262
- registry_dir: Path,
263
- node_id: str,
264
- platform: str,
265
- flag: str,
266
- ) -> str:
267
- """Returns 'gray' | 'yellow' | 'green' for dashboard/reader consumption.
268
-
269
- Rules:
270
- implemented:
271
- value == False → 'gray'
272
- value == True → 'green' (baseline, never yellow)
273
-
274
- tested | codeConnect | wiki:
275
- value == False → 'gray'
276
- value == True, against < impl.ver → 'yellow'
277
- value == True, against >= impl.ver → 'green'
278
-
279
- The `stale` flag is intentionally orthogonal - it signals "Figma changed"
280
- and is surfaced separately to dashboards, not folded into the flag state.
281
- """
282
- path = _registry_file(registry_dir, node_id)
283
- if not path.exists():
284
- return "gray"
285
-
286
- data = _load(path)
287
- status = data.get("status", {}).get(platform, {})
288
- f = status.get(flag, {"value": False})
289
-
290
- if not f.get("value"):
291
- return "gray"
292
-
293
- if flag == "implemented":
294
- return "green"
295
-
296
- impl_version = status.get("implemented", {}).get("version", 0)
297
- if f.get("against", 0) < impl_version:
298
- return "yellow"
299
- return "green"