@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,176 +0,0 @@
1
- #!/bin/bash
2
- # validate-phase4.sh - Post-Phase 4 validation for Figma-to-SwiftUI components
3
- # Runs after Phase 4 COLLECT_RESULTS, before UPDATE_IMPLEMENTATION_HISTORY.
4
- #
5
- # Usage: validate-phase4.sh <component-location> <component-name> [coverage-json-path]
6
- #
7
- # Arguments:
8
- # component-location Path to component directory (e.g., Sources/UIComponents/.../LabelBadge/)
9
- # component-name PascalCase component name (e.g., LabelBadge)
10
- # coverage-json-path Optional path to pass3/00_property_coverage.json
11
- #
12
- # Exit codes:
13
- # 0 - All checks passed
14
- # 1 - One or more violations found
15
-
16
- set -euo pipefail
17
-
18
- COMPONENT_LOCATION="${1:?Usage: validate-phase4.sh <component-location> <component-name> [coverage-json-path]}"
19
- COMPONENT_NAME="${2:?Usage: validate-phase4.sh <component-location> <component-name> [coverage-json-path]}"
20
- COVERAGE_JSON="${3:-}"
21
-
22
- VIEW_FILE="${COMPONENT_LOCATION}/${COMPONENT_NAME}.swift"
23
- VIOLATIONS=()
24
-
25
- # --- Helper ---
26
- add_violation() {
27
- VIOLATIONS+=("$1")
28
- echo "FAIL: $1"
29
- }
30
-
31
- # --- Check 0: File exists ---
32
- if [[ ! -f "$VIEW_FILE" ]]; then
33
- echo "FAIL: View file not found: $VIEW_FILE"
34
- exit 1
35
- fi
36
-
37
- echo "Validating: $VIEW_FILE"
38
- echo "---"
39
-
40
- # --- Check 1: No top-level enums ---
41
- # Top-level enums are at zero indentation (no leading whitespace).
42
- # Allowed: extensions on nested types (extension ComponentName.TypeName)
43
- if grep -nE '^(public |internal |private |fileprivate )?enum ' "$VIEW_FILE" | grep -v '^ ' | head -20 > /tmp/validate_toplevel_enums.txt 2>/dev/null; then
44
- while IFS= read -r line; do
45
- # Skip if it's inside a struct (check indentation - truly zero-indent lines only)
46
- linenum=$(echo "$line" | cut -d: -f1)
47
- content=$(sed -n "${linenum}p" "$VIEW_FILE")
48
- # Check if line starts with no whitespace
49
- if [[ "$content" =~ ^[[:space:]] ]]; then
50
- continue # indented = inside struct, OK
51
- fi
52
- add_violation "Top-level enum at line $linenum: $content"
53
- done < /tmp/validate_toplevel_enums.txt
54
- fi
55
-
56
- # --- Check 2: No hardcoded accessibility strings ---
57
- # .accessibilityLabel("...") with literal English strings is forbidden.
58
- # Allowed: .accessibilityLabel(variable) or .accessibilityLabel(.Key.something)
59
- if grep -nE '\.accessibilityLabel\("[^"]+"\)' "$VIEW_FILE" > /tmp/validate_a11y.txt 2>/dev/null; then
60
- while IFS= read -r line; do
61
- add_violation "Hardcoded accessibility string at $line"
62
- done < /tmp/validate_a11y.txt
63
- fi
64
-
65
- # --- Check 3: No magic numbers in body ---
66
- # Scan the body section for bare numeric literals not inside Constants., .Spacing., .Radius., .Size., .Font.
67
- # We look for patterns like: width: 24, height: 16, spacing: 8, cornerRadius: 12
68
- # Excluding: line numbers, array indices, opacity values (0...1), and enum raw values
69
- BODY_START=$(grep -n 'var body: some View' "$VIEW_FILE" | head -1 | cut -d: -f1)
70
- if [[ -n "$BODY_START" ]]; then
71
- BODY_CONTENT=$(tail -n +"$BODY_START" "$VIEW_FILE")
72
- # Look for numeric CGFloat/dimension patterns in body
73
- echo "$BODY_CONTENT" | grep -nE '(width|height|spacing|cornerRadius|padding|size|offset|radius).*: [0-9]+(\.[0-9]+)?' | \
74
- grep -v 'Constants\.' | \
75
- grep -v '\.Spacing\.' | \
76
- grep -v '\.Radius\.' | \
77
- grep -v '\.Size\.' | \
78
- grep -v '\.Font\.' | \
79
- grep -v '//' > /tmp/validate_magic.txt 2>/dev/null || true
80
- while IFS= read -r line; do
81
- [[ -z "$line" ]] && continue
82
- adjusted_linenum=$((BODY_START + $(echo "$line" | cut -d: -f1) - 1))
83
- content=$(echo "$line" | cut -d: -f2-)
84
- add_violation "Possible magic number in body at line $adjusted_linenum:$content"
85
- done < /tmp/validate_magic.txt
86
- fi
87
-
88
- # --- Check 4: Constants placement ---
89
- # If enum Constants exists, it must be indented (inside the struct), not at file scope.
90
- if grep -n 'enum Constants' "$VIEW_FILE" > /dev/null 2>&1; then
91
- CONSTANTS_LINE=$(grep -n 'enum Constants' "$VIEW_FILE" | head -1)
92
- LINENUM=$(echo "$CONSTANTS_LINE" | cut -d: -f1)
93
- CONTENT=$(sed -n "${LINENUM}p" "$VIEW_FILE")
94
- # Check that it has leading whitespace (is indented = inside struct)
95
- if [[ ! "$CONTENT" =~ ^[[:space:]]+ ]]; then
96
- add_violation "Constants enum at file scope (line $LINENUM) - must be nested inside View struct"
97
- fi
98
- # Check it's private
99
- if ! echo "$CONTENT" | grep -q 'private'; then
100
- add_violation "Constants enum is not private (line $LINENUM) - must be 'private enum Constants'"
101
- fi
102
- fi
103
-
104
- # --- Check 5: Property coverage ---
105
- # If coverage JSON is provided, check each IMPLEMENT property has a corresponding Swift parameter.
106
- if [[ -n "$COVERAGE_JSON" && -f "$COVERAGE_JSON" ]]; then
107
- echo "Checking property coverage against: $COVERAGE_JSON"
108
- # Extract IMPLEMENT property names using python (available on macOS)
109
- IMPLEMENT_PROPS=$(python3 -c "
110
- import json, sys
111
- with open('$COVERAGE_JSON') as f:
112
- data = json.load(f)
113
- for p in data.get('properties', []):
114
- if p.get('status') == 'IMPLEMENT':
115
- # Convert display name to likely Swift parameter name (camelCase)
116
- name = p['name'].lstrip('\u21aa ').strip()
117
- # Simple conversion: lowercase first char, remove spaces
118
- words = name.split()
119
- if len(words) > 1:
120
- swift_name = words[0].lower() + ''.join(w.capitalize() for w in words[1:])
121
- else:
122
- swift_name = name[0].lower() + name[1:]
123
- print(f'{name}|{swift_name}|{p.get(\"swiftType\", \"unknown\")}')
124
- " 2>/dev/null || true)
125
-
126
- if [[ -n "$IMPLEMENT_PROPS" ]]; then
127
- while IFS='|' read -r display_name swift_name swift_type; do
128
- # Check if the swift name appears in the file (as parameter or property)
129
- if ! grep -qi "$swift_name" "$VIEW_FILE" 2>/dev/null; then
130
- # Also try the display name lowercased
131
- lower_display=$(echo "$display_name" | tr '[:upper:]' '[:lower:]')
132
- if ! grep -qi "$lower_display" "$VIEW_FILE" 2>/dev/null; then
133
- # Also try the enum/type name from swiftType (e.g., "enum IconPosition" -> "IconPosition")
134
- type_name=$(echo "$swift_type" | sed 's/^enum //' | sed 's/\?$//')
135
- if [[ -n "$type_name" ]] && grep -qi "$type_name" "$VIEW_FILE" 2>/dev/null; then
136
- : # Found via type name - property exists with a renamed parameter
137
- else
138
- add_violation "IMPLEMENT property '$display_name' (expected: $swift_name: $swift_type) not found in view"
139
- fi
140
- fi
141
- fi
142
- done <<< "$IMPLEMENT_PROPS"
143
- fi
144
- fi
145
-
146
- # --- Check 6: Preview struct pattern ---
147
- # Verify {ComponentName}Preview struct exists and dual #Preview blocks (LTR + RTL)
148
- PREVIEW_STRUCT="${COMPONENT_NAME}Preview"
149
- if ! grep -q "struct ${PREVIEW_STRUCT}" "$VIEW_FILE" 2>/dev/null; then
150
- add_violation "Preview struct '${PREVIEW_STRUCT}' not found in $VIEW_FILE"
151
- fi
152
-
153
- RTL_PREVIEW_STRUCT="${COMPONENT_NAME}RTLPreview"
154
- if ! grep -q "struct ${RTL_PREVIEW_STRUCT}" "$VIEW_FILE" 2>/dev/null; then
155
- add_violation "RTL Preview struct '${RTL_PREVIEW_STRUCT}' not found in $VIEW_FILE"
156
- fi
157
-
158
- PREVIEW_COUNT=$(grep -c '#Preview' "$VIEW_FILE" 2>/dev/null | tr -d '[:space:]' || echo "0")
159
- if [[ "$PREVIEW_COUNT" -eq 0 ]]; then
160
- add_violation "No #Preview block found in $VIEW_FILE"
161
- elif [[ "$PREVIEW_COUNT" -gt 2 ]]; then
162
- add_violation "Too many #Preview blocks found ($PREVIEW_COUNT) - expected 2 (LTR + RTL)"
163
- fi
164
-
165
- # --- Summary ---
166
- echo "---"
167
- if [[ ${#VIOLATIONS[@]} -eq 0 ]]; then
168
- echo "PASS: All Phase 4 validation checks passed."
169
- exit 0
170
- else
171
- echo "VIOLATIONS: ${#VIOLATIONS[@]} found"
172
- for v in "${VIOLATIONS[@]}"; do
173
- echo " - $v"
174
- done
175
- exit 1
176
- fi
@@ -1,147 +0,0 @@
1
- #!/bin/bash
2
- # validate-phase6.sh - Post-Phase 6 validation for Code Connect files
3
- # Runs after Phase 6 CREATE_FIGMA_SWIFT, before VALIDATE (figma connect parse).
4
- #
5
- # Usage: validate-phase6.sh <figma-swift-path> <component-name> [component-properties-json]
6
- #
7
- # Arguments:
8
- # figma-swift-path Path to .figma.swift file
9
- # component-name PascalCase component name (e.g., LabelBadge)
10
- # component-properties-json Optional path to pass1/component_properties.json
11
- #
12
- # Exit codes:
13
- # 0 - All checks passed
14
- # 1 - One or more violations found
15
-
16
- set -euo pipefail
17
-
18
- FIGMA_SWIFT="${1:?Usage: validate-phase6.sh <figma-swift-path> <component-name> [component-properties-json]}"
19
- COMPONENT_NAME="${2:?Usage: validate-phase6.sh <figma-swift-path> <component-name> [component-properties-json]}"
20
- PROPERTIES_JSON="${3:-}"
21
-
22
- VIOLATIONS=()
23
-
24
- # --- Helper ---
25
- add_violation() {
26
- VIOLATIONS+=("$1")
27
- echo "FAIL: $1"
28
- }
29
-
30
- # --- Check 0: File exists ---
31
- if [[ ! -f "$FIGMA_SWIFT" ]]; then
32
- echo "FAIL: Figma Swift file not found: $FIGMA_SWIFT"
33
- exit 1
34
- fi
35
-
36
- echo "Validating: $FIGMA_SWIFT"
37
- echo "---"
38
-
39
- # --- Check 1: Implicit enum shorthand ---
40
- # Code Connect MUST use implicit shorthand (.case) not fully-qualified (ComponentName.EnumType.case)
41
- # Look for patterns like: ComponentName.SomeType.someCase
42
- if grep -nE "${COMPONENT_NAME}\.[A-Z][a-zA-Z]+\.[a-z]" "$FIGMA_SWIFT" > /tmp/validate_enum_qualified.txt 2>/dev/null; then
43
- while IFS= read -r line; do
44
- # Exclude comments
45
- content=$(echo "$line" | cut -d: -f2-)
46
- if [[ "$content" =~ ^[[:space:]]*//.* ]]; then
47
- continue
48
- fi
49
- add_violation "Fully-qualified enum path at $line - use implicit shorthand (.case) instead"
50
- done < /tmp/validate_enum_qualified.txt
51
- fi
52
-
53
- # Also check for Configuration. prefix in enum values (another common pattern)
54
- if grep -nE 'Configuration\.[A-Z][a-zA-Z]+\.[a-z]' "$FIGMA_SWIFT" > /tmp/validate_config_qualified.txt 2>/dev/null; then
55
- while IFS= read -r line; do
56
- content=$(echo "$line" | cut -d: -f2-)
57
- if [[ "$content" =~ ^[[:space:]]*//.* ]]; then
58
- continue
59
- fi
60
- add_violation "Fully-qualified Configuration enum path at $line - use implicit shorthand (.case)"
61
- done < /tmp/validate_config_qualified.txt
62
- fi
63
-
64
- # --- Check 2: Property coverage ---
65
- # If component_properties.json is provided, verify @Figma annotations cover the properties.
66
- if [[ -n "$PROPERTIES_JSON" && -f "$PROPERTIES_JSON" ]]; then
67
- echo "Checking property coverage against: $PROPERTIES_JSON"
68
-
69
- # Extract property names from component_properties.json
70
- FIGMA_PROPS=$(python3 -c "
71
- import json, sys
72
- with open('$PROPERTIES_JSON') as f:
73
- data = json.load(f)
74
-
75
- # Navigate to componentPropertyDefinitions
76
- comp_defs = None
77
- if 'componentPropertyDefinitions' in data:
78
- comp_defs = data['componentPropertyDefinitions']
79
- elif 'nodes' in data:
80
- for node_id, node_data in data['nodes'].items():
81
- doc = node_data.get('document', {})
82
- if 'componentPropertyDefinitions' in doc:
83
- comp_defs = doc['componentPropertyDefinitions']
84
- break
85
-
86
- if comp_defs:
87
- for key, prop in comp_defs.items():
88
- prop_type = prop.get('type', 'UNKNOWN')
89
- # Extract display name (before #)
90
- name = key.split('#')[0]
91
- print(f'{name}|{prop_type}')
92
- " 2>/dev/null || true)
93
-
94
- if [[ -n "$FIGMA_PROPS" ]]; then
95
- TOTAL=0
96
- MAPPED=0
97
- UNMAPPED_LIST=""
98
-
99
- while IFS='|' read -r prop_name prop_type; do
100
- TOTAL=$((TOTAL + 1))
101
- # Check if this property is referenced in .figma.swift
102
- # Look for @FigmaEnum, @FigmaBoolean, @FigmaString, @FigmaInstance annotations
103
- # or the property name in mapping closures
104
- if grep -qi "$prop_name" "$FIGMA_SWIFT" 2>/dev/null; then
105
- MAPPED=$((MAPPED + 1))
106
- else
107
- UNMAPPED_LIST="${UNMAPPED_LIST} - $prop_name ($prop_type)\n"
108
- fi
109
- done <<< "$FIGMA_PROPS"
110
-
111
- if [[ -n "$UNMAPPED_LIST" ]]; then
112
- echo "WARNING: $((TOTAL - MAPPED))/$TOTAL properties not found in .figma.swift:"
113
- echo -e "$UNMAPPED_LIST"
114
- # This is a warning, not a hard failure - some properties may be intentionally skipped
115
- # Only fail if more than half are missing
116
- if [[ $((TOTAL - MAPPED)) -gt $((TOTAL / 2)) ]]; then
117
- add_violation "More than half of Figma properties ($((TOTAL - MAPPED))/$TOTAL) not mapped in Code Connect"
118
- fi
119
- else
120
- echo "OK: All $TOTAL Figma properties found in .figma.swift"
121
- fi
122
- fi
123
- fi
124
-
125
- # --- Check 3: Basic structure ---
126
- # Verify the file conforms to FigmaConnect protocol (": FigmaConnect")
127
- if ! grep -q ': FigmaConnect' "$FIGMA_SWIFT" 2>/dev/null; then
128
- add_violation "No FigmaConnect protocol conformance found (': FigmaConnect') - not a valid Code Connect file"
129
- fi
130
-
131
- # Verify the file references the component name
132
- if ! grep -q "$COMPONENT_NAME" "$FIGMA_SWIFT" 2>/dev/null; then
133
- add_violation "Component name '$COMPONENT_NAME' not found in .figma.swift"
134
- fi
135
-
136
- # --- Summary ---
137
- echo "---"
138
- if [[ ${#VIOLATIONS[@]} -eq 0 ]]; then
139
- echo "PASS: All Phase 6 validation checks passed."
140
- exit 0
141
- else
142
- echo "VIOLATIONS: ${#VIOLATIONS[@]} found"
143
- for v in "${VIOLATIONS[@]}"; do
144
- echo " - $v"
145
- done
146
- exit 1
147
- fi