@mmerterden/multi-agent-pipeline 8.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (817) hide show
  1. package/CHANGELOG.md +2623 -0
  2. package/LICENSE +21 -0
  3. package/README.md +852 -0
  4. package/docs/FIGMA_PIPELINE.md +138 -0
  5. package/docs/GENERICITY-REVIEW.md +277 -0
  6. package/docs/STABILITY-FIX-PLAN.md +168 -0
  7. package/docs/adr/0001-three-model-triage.md +81 -0
  8. package/docs/adr/0002-instruction-driven-flag.md +62 -0
  9. package/docs/adr/0003-unified-shared-skills.md +55 -0
  10. package/docs/adr/0004-zero-dependency-philosophy.md +60 -0
  11. package/docs/adr/0005-lazy-phase-docs.md +68 -0
  12. package/docs/adr/0006-skills-core-external-split.md +52 -0
  13. package/docs/adr/0007-multi-tool-adapter-framework.md +110 -0
  14. package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +98 -0
  15. package/docs/adr/README.md +33 -0
  16. package/docs/architecture.md +181 -0
  17. package/docs/best-practices.md +93 -0
  18. package/docs/features.md +274 -0
  19. package/docs/performance.md +116 -0
  20. package/docs/recovery-guide.md +479 -0
  21. package/index.js +76 -0
  22. package/install/_adapters.mjs +69 -0
  23. package/install/_common.mjs +150 -0
  24. package/install/_copilot-instructions.mjs +32 -0
  25. package/install/_dev-only-files.mjs +23 -0
  26. package/install/_platform-filter.mjs +132 -0
  27. package/install/_telemetry.mjs +79 -0
  28. package/install/claude.mjs +332 -0
  29. package/install/copilot.mjs +254 -0
  30. package/install/index.mjs +179 -0
  31. package/install/templates/copilot-instructions.md +319 -0
  32. package/install.js +24 -0
  33. package/package.json +78 -0
  34. package/pipeline/adapters/_base.mjs +288 -0
  35. package/pipeline/adapters/copilot-chat.mjs +158 -0
  36. package/pipeline/adapters/cursor.mjs +187 -0
  37. package/pipeline/agents/android-architect.md +42 -0
  38. package/pipeline/agents/backend-architect.md +43 -0
  39. package/pipeline/agents/code-reviewer.md +57 -0
  40. package/pipeline/agents/dev-critic.md +148 -0
  41. package/pipeline/agents/explorer.md +34 -0
  42. package/pipeline/agents/ios-architect.md +41 -0
  43. package/pipeline/agents/security-auditor.md +98 -0
  44. package/pipeline/agents/task-clarifier.md +113 -0
  45. package/pipeline/claude-md-template.md +55 -0
  46. package/pipeline/commands/archive-guard.md +45 -0
  47. package/pipeline/commands/deploy.md +54 -0
  48. package/pipeline/commands/figma-to-swiftui.md +295 -0
  49. package/pipeline/commands/multi-agent/_account-picker.md +90 -0
  50. package/pipeline/commands/multi-agent/_dev-context.md +111 -0
  51. package/pipeline/commands/multi-agent/_input-parser.md +43 -0
  52. package/pipeline/commands/multi-agent/_repo-picker.md +76 -0
  53. package/pipeline/commands/multi-agent/autopilot.md +116 -0
  54. package/pipeline/commands/multi-agent/channels.md +465 -0
  55. package/pipeline/commands/multi-agent/delete.md +66 -0
  56. package/pipeline/commands/multi-agent/dev-autopilot.md +120 -0
  57. package/pipeline/commands/multi-agent/dev-local-autopilot.md +110 -0
  58. package/pipeline/commands/multi-agent/dev-local.md +105 -0
  59. package/pipeline/commands/multi-agent/dev.md +246 -0
  60. package/pipeline/commands/multi-agent/diff-explain.md +68 -0
  61. package/pipeline/commands/multi-agent/help.md +422 -0
  62. package/pipeline/commands/multi-agent/issue.md +79 -0
  63. package/pipeline/commands/multi-agent/jira.md +132 -0
  64. package/pipeline/commands/multi-agent/kill.md +38 -0
  65. package/pipeline/commands/multi-agent/language.md +94 -0
  66. package/pipeline/commands/multi-agent/local-autopilot.md +139 -0
  67. package/pipeline/commands/multi-agent/local.md +117 -0
  68. package/pipeline/commands/multi-agent/log.md +25 -0
  69. package/pipeline/commands/multi-agent/manual-test.md +43 -0
  70. package/pipeline/commands/multi-agent/purge.md +39 -0
  71. package/pipeline/commands/multi-agent/refactor.md +188 -0
  72. package/pipeline/commands/multi-agent/refs/android-guide.md +250 -0
  73. package/pipeline/commands/multi-agent/refs/audit-guide.md +240 -0
  74. package/pipeline/commands/multi-agent/refs/backend-guide.md +135 -0
  75. package/pipeline/commands/multi-agent/refs/channels/confluence.md +153 -0
  76. package/pipeline/commands/multi-agent/refs/channels/issue-comment.md +141 -0
  77. package/pipeline/commands/multi-agent/refs/channels/jira.md +127 -0
  78. package/pipeline/commands/multi-agent/refs/channels/pr-review-actions.md +135 -0
  79. package/pipeline/commands/multi-agent/refs/channels/pr.md +139 -0
  80. package/pipeline/commands/multi-agent/refs/channels/wiki.md +66 -0
  81. package/pipeline/commands/multi-agent/refs/component-dispatch.md +92 -0
  82. package/pipeline/commands/multi-agent/refs/cross-cli-contract.md +326 -0
  83. package/pipeline/commands/multi-agent/refs/frontend-guide.md +136 -0
  84. package/pipeline/commands/multi-agent/refs/issue-jira-triad.md +104 -0
  85. package/pipeline/commands/multi-agent/refs/keychain.md +80 -0
  86. package/pipeline/commands/multi-agent/refs/knowledge.md +112 -0
  87. package/pipeline/commands/multi-agent/refs/multi-repo-integration-build.md +207 -0
  88. package/pipeline/commands/multi-agent/refs/phases/log-format.md +89 -0
  89. package/pipeline/commands/multi-agent/refs/phases/modes.md +156 -0
  90. package/pipeline/commands/multi-agent/refs/phases/operations.md +91 -0
  91. package/pipeline/commands/multi-agent/refs/phases/phase-0-init.md +481 -0
  92. package/pipeline/commands/multi-agent/refs/phases/phase-1-analysis.md +264 -0
  93. package/pipeline/commands/multi-agent/refs/phases/phase-2-planning.md +278 -0
  94. package/pipeline/commands/multi-agent/refs/phases/phase-3-dev.md +364 -0
  95. package/pipeline/commands/multi-agent/refs/phases/phase-4-review.md +378 -0
  96. package/pipeline/commands/multi-agent/refs/phases/phase-5-test.md +129 -0
  97. package/pipeline/commands/multi-agent/refs/phases/phase-6-commit.md +339 -0
  98. package/pipeline/commands/multi-agent/refs/phases/phase-7-report.md +361 -0
  99. package/pipeline/commands/multi-agent/refs/phases.md +187 -0
  100. package/pipeline/commands/multi-agent/refs/progress-contract.md +155 -0
  101. package/pipeline/commands/multi-agent/refs/rules.md +189 -0
  102. package/pipeline/commands/multi-agent/refs/swiftui-guide.md +254 -0
  103. package/pipeline/commands/multi-agent/refs/tracker-contract.md +256 -0
  104. package/pipeline/commands/multi-agent/refs/wiki-capture.md +109 -0
  105. package/pipeline/commands/multi-agent/resume.md +28 -0
  106. package/pipeline/commands/multi-agent/review.md +228 -0
  107. package/pipeline/commands/multi-agent/scan.md +74 -0
  108. package/pipeline/commands/multi-agent/search.md +97 -0
  109. package/pipeline/commands/multi-agent/setup.md +767 -0
  110. package/pipeline/commands/multi-agent/stack.md +48 -0
  111. package/pipeline/commands/multi-agent/status.md +38 -0
  112. package/pipeline/commands/multi-agent/sync.md +319 -0
  113. package/pipeline/commands/multi-agent/test.md +39 -0
  114. package/pipeline/commands/multi-agent/update.md +88 -0
  115. package/pipeline/commands/multi-agent.md +293 -0
  116. package/pipeline/commands/security-review.md +6 -0
  117. package/pipeline/commands/sim-test.md +256 -0
  118. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-1-analysis.json +25 -0
  119. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-2-plan.json +30 -0
  120. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-review.json +20 -0
  121. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-triage.json +15 -0
  122. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/metadata.json +14 -0
  123. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/task.json +12 -0
  124. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-1-analysis.json +29 -0
  125. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-2-plan.json +43 -0
  126. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-review.json +35 -0
  127. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-triage.json +35 -0
  128. package/pipeline/eval/golden-tasks/02-android-feature-compose/metadata.json +14 -0
  129. package/pipeline/eval/golden-tasks/02-android-feature-compose/task.json +12 -0
  130. package/pipeline/eval/golden-tasks/README.md +65 -0
  131. package/pipeline/eval/triage/01-empty-findings/expected.json +6 -0
  132. package/pipeline/eval/triage/01-empty-findings/input.json +5 -0
  133. package/pipeline/eval/triage/01-empty-findings/notes.md +7 -0
  134. package/pipeline/eval/triage/02-real-blocker/expected.json +15 -0
  135. package/pipeline/eval/triage/02-real-blocker/input.json +14 -0
  136. package/pipeline/eval/triage/02-real-blocker/notes.md +7 -0
  137. package/pipeline/eval/triage/03-out-of-scope-defer/expected.json +18 -0
  138. package/pipeline/eval/triage/03-out-of-scope-defer/input.json +14 -0
  139. package/pipeline/eval/triage/03-out-of-scope-defer/notes.md +10 -0
  140. package/pipeline/eval/triage/04-false-positive-reject/expected.json +18 -0
  141. package/pipeline/eval/triage/04-false-positive-reject/input.json +14 -0
  142. package/pipeline/eval/triage/04-false-positive-reject/notes.md +10 -0
  143. package/pipeline/eval/triage/05-mixed-classification/expected.json +43 -0
  144. package/pipeline/eval/triage/05-mixed-classification/input.json +38 -0
  145. package/pipeline/eval/triage/05-mixed-classification/notes.md +17 -0
  146. package/pipeline/eval/triage/06-severity-mismatch/expected.json +15 -0
  147. package/pipeline/eval/triage/06-severity-mismatch/input.json +14 -0
  148. package/pipeline/eval/triage/06-severity-mismatch/notes.md +9 -0
  149. package/pipeline/eval/triage/07-duplicate-reviewers/expected.json +27 -0
  150. package/pipeline/eval/triage/07-duplicate-reviewers/input.json +22 -0
  151. package/pipeline/eval/triage/07-duplicate-reviewers/notes.md +9 -0
  152. package/pipeline/eval/triage/08-style-misclassified/expected.json +18 -0
  153. package/pipeline/eval/triage/08-style-misclassified/input.json +14 -0
  154. package/pipeline/eval/triage/08-style-misclassified/notes.md +9 -0
  155. package/pipeline/eval/triage/09-cascading-finding/expected.json +23 -0
  156. package/pipeline/eval/triage/09-cascading-finding/input.json +22 -0
  157. package/pipeline/eval/triage/09-cascading-finding/notes.md +9 -0
  158. package/pipeline/eval/triage/10-deferred-crossref/expected.json +18 -0
  159. package/pipeline/eval/triage/10-deferred-crossref/input.json +14 -0
  160. package/pipeline/eval/triage/10-deferred-crossref/notes.md +9 -0
  161. package/pipeline/eval/triage/11-vercel-token-leak-blocker/expected.json +27 -0
  162. package/pipeline/eval/triage/11-vercel-token-leak-blocker/input.json +22 -0
  163. package/pipeline/eval/triage/11-vercel-token-leak-blocker/notes.md +14 -0
  164. package/pipeline/eval/triage/README.md +54 -0
  165. package/pipeline/lib/account-resolver.sh +204 -0
  166. package/pipeline/lib/channels-multi-repo.sh +218 -0
  167. package/pipeline/lib/context-link-extractor.sh +192 -0
  168. package/pipeline/lib/credential-store-resolver.sh +57 -0
  169. package/pipeline/lib/credential-store.sh +226 -0
  170. package/pipeline/lib/fetch-confluence.sh +358 -0
  171. package/pipeline/lib/fetch-crashlytics.sh +314 -0
  172. package/pipeline/lib/fetch-fortify.sh +321 -0
  173. package/pipeline/lib/fetch-swagger.sh +270 -0
  174. package/pipeline/lib/issue-fetcher.sh +333 -0
  175. package/pipeline/lib/multi-repo-pipeline.sh +252 -0
  176. package/pipeline/lib/plan-todos.sh +284 -0
  177. package/pipeline/lib/post-pr-review.sh +374 -0
  178. package/pipeline/lib/repo-cache.sh +231 -0
  179. package/pipeline/lib/review-watch.sh +244 -0
  180. package/pipeline/lib/shadow-git.sh +222 -0
  181. package/pipeline/lib/submodule-detector.sh +177 -0
  182. package/pipeline/lib/vercel-deploy.sh +170 -0
  183. package/pipeline/preferences-template.json +132 -0
  184. package/pipeline/rules/app-store-guidelines.md +59 -0
  185. package/pipeline/rules/code-review.md +27 -0
  186. package/pipeline/rules/code-style.md +37 -0
  187. package/pipeline/rules/debugging.md +24 -0
  188. package/pipeline/rules/figma-pipeline.md +190 -0
  189. package/pipeline/rules/git-conventions.md +29 -0
  190. package/pipeline/rules/kotlin-android.md +92 -0
  191. package/pipeline/rules/performance.md +23 -0
  192. package/pipeline/rules/security.md +39 -0
  193. package/pipeline/rules/swiftui-qa.md +32 -0
  194. package/pipeline/rules/tdd.md +25 -0
  195. package/pipeline/rules/testing.md +37 -0
  196. package/pipeline/schemas/agent-state.schema.json +273 -0
  197. package/pipeline/schemas/analysis-output.schema.json +59 -0
  198. package/pipeline/schemas/clarify-output.schema.json +74 -0
  199. package/pipeline/schemas/dev-critic-output.schema.json +104 -0
  200. package/pipeline/schemas/diff-risk.schema.json +78 -0
  201. package/pipeline/schemas/figma-project-config.schema.json +372 -0
  202. package/pipeline/schemas/migrations/README.md +73 -0
  203. package/pipeline/schemas/migrations/figma-config-1.0.0-to-2.0.0.mjs +112 -0
  204. package/pipeline/schemas/migrations/prefs-2.0.0-to-2.1.0.mjs +75 -0
  205. package/pipeline/schemas/migrations/prefs-2.1.0-to-2.2.0.mjs +64 -0
  206. package/pipeline/schemas/migrations/prefs-2.2.0-to-2.3.0.mjs +36 -0
  207. package/pipeline/schemas/migrations/state-2.0.0-to-2.1.0.mjs +34 -0
  208. package/pipeline/schemas/plan-todos.schema.json +62 -0
  209. package/pipeline/schemas/planning-output.schema.json +57 -0
  210. package/pipeline/schemas/prefs.schema.json +1137 -0
  211. package/pipeline/schemas/reviewer-output.schema.json +55 -0
  212. package/pipeline/schemas/test-gap.schema.json +64 -0
  213. package/pipeline/schemas/token-budget.json +17 -0
  214. package/pipeline/schemas/triage-corpus.schema.json +31 -0
  215. package/pipeline/schemas/triage-output.schema.json +115 -0
  216. package/pipeline/scripts/.last-figma-sync-plan.json +23 -0
  217. package/pipeline/scripts/README-figma-smokes.md +34 -0
  218. package/pipeline/scripts/README.md +104 -0
  219. package/pipeline/scripts/aggregate-metrics.mjs +310 -0
  220. package/pipeline/scripts/audit-log-rotate.sh +61 -0
  221. package/pipeline/scripts/audit-log.sh +69 -0
  222. package/pipeline/scripts/benchmark-phase-0.sh +128 -0
  223. package/pipeline/scripts/build-skills-index.mjs +139 -0
  224. package/pipeline/scripts/classify-plan-safety.mjs +177 -0
  225. package/pipeline/scripts/cost-table.json +27 -0
  226. package/pipeline/scripts/diff-explain.mjs +276 -0
  227. package/pipeline/scripts/diff-risk-score.mjs +328 -0
  228. package/pipeline/scripts/eval-golden-tasks-live.mjs +294 -0
  229. package/pipeline/scripts/eval-golden-tasks.mjs +223 -0
  230. package/pipeline/scripts/eval-triage.mjs +171 -0
  231. package/pipeline/scripts/figma-placeholder-map.json +191 -0
  232. package/pipeline/scripts/fixtures/diff-risk-android.diff +40 -0
  233. package/pipeline/scripts/fixtures/diff-risk-ios.diff +48 -0
  234. package/pipeline/scripts/fixtures/install-layout.tsv +16 -0
  235. package/pipeline/scripts/fixtures/test-gap-node.diff +30 -0
  236. package/pipeline/scripts/fixtures/test-gap-python.diff +32 -0
  237. package/pipeline/scripts/gen-mode-dispatch.mjs +170 -0
  238. package/pipeline/scripts/gen-skills-index.mjs +90 -0
  239. package/pipeline/scripts/github-ssh-setup.sh +103 -0
  240. package/pipeline/scripts/import-figma-skills.sh +253 -0
  241. package/pipeline/scripts/keychain-save.sh +74 -0
  242. package/pipeline/scripts/keychain.py +294 -0
  243. package/pipeline/scripts/log-metric.sh +98 -0
  244. package/pipeline/scripts/match-skills.mjs +167 -0
  245. package/pipeline/scripts/memory-load.sh +46 -0
  246. package/pipeline/scripts/memory-save.sh +76 -0
  247. package/pipeline/scripts/migrate-prefs.mjs +390 -0
  248. package/pipeline/scripts/migrate-state.mjs +215 -0
  249. package/pipeline/scripts/output-quality-check.sh +125 -0
  250. package/pipeline/scripts/phase-banner.sh +158 -0
  251. package/pipeline/scripts/phase-tracker.sh +548 -0
  252. package/pipeline/scripts/pre-commit-check.sh +69 -0
  253. package/pipeline/scripts/pre-push-check.sh +77 -0
  254. package/pipeline/scripts/render-agent-log-cost.sh +149 -0
  255. package/pipeline/scripts/render-cost-summary.sh +137 -0
  256. package/pipeline/scripts/render-work-summary.sh +195 -0
  257. package/pipeline/scripts/repo-map.mjs +367 -0
  258. package/pipeline/scripts/run-aggregator.mjs +298 -0
  259. package/pipeline/scripts/scan-skills.sh +332 -0
  260. package/pipeline/scripts/search-logs.sh +291 -0
  261. package/pipeline/scripts/sign-skills.sh +67 -0
  262. package/pipeline/scripts/smoke-adapters.sh +207 -0
  263. package/pipeline/scripts/smoke-add-detail.sh +137 -0
  264. package/pipeline/scripts/smoke-agent-log-cost.sh +183 -0
  265. package/pipeline/scripts/smoke-agent-model-routing.sh +87 -0
  266. package/pipeline/scripts/smoke-bitbucket-contract.sh +223 -0
  267. package/pipeline/scripts/smoke-channels-flow.sh +130 -0
  268. package/pipeline/scripts/smoke-ci-workflows.sh +88 -0
  269. package/pipeline/scripts/smoke-clarify.sh +148 -0
  270. package/pipeline/scripts/smoke-commands-skills-parity.sh +87 -0
  271. package/pipeline/scripts/smoke-compliance-skills.sh +119 -0
  272. package/pipeline/scripts/smoke-cost-summary.sh +139 -0
  273. package/pipeline/scripts/smoke-cross-cli-behavior.sh +198 -0
  274. package/pipeline/scripts/smoke-cross-phase-cohesion.sh +128 -0
  275. package/pipeline/scripts/smoke-delete-flow.sh +151 -0
  276. package/pipeline/scripts/smoke-dev-critic.sh +144 -0
  277. package/pipeline/scripts/smoke-diff-explain.sh +128 -0
  278. package/pipeline/scripts/smoke-diff-risk.sh +161 -0
  279. package/pipeline/scripts/smoke-dynamic-skill-loading.sh +160 -0
  280. package/pipeline/scripts/smoke-eval-live.sh +136 -0
  281. package/pipeline/scripts/smoke-existing-discovery-gate.sh +71 -0
  282. package/pipeline/scripts/smoke-figma-android-parity.sh +148 -0
  283. package/pipeline/scripts/smoke-figma-config-schema.sh +144 -0
  284. package/pipeline/scripts/smoke-figma-credential-store.sh +105 -0
  285. package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +177 -0
  286. package/pipeline/scripts/smoke-figma-dispatch.sh +123 -0
  287. package/pipeline/scripts/smoke-figma-skill-import.sh +174 -0
  288. package/pipeline/scripts/smoke-figma-sync.sh +149 -0
  289. package/pipeline/scripts/smoke-identity-isolation.sh +70 -0
  290. package/pipeline/scripts/smoke-install-layout.sh +241 -0
  291. package/pipeline/scripts/smoke-install-leak-gate.sh +125 -0
  292. package/pipeline/scripts/smoke-issue-comment-template.sh +86 -0
  293. package/pipeline/scripts/smoke-issue-jira-triad.sh +120 -0
  294. package/pipeline/scripts/smoke-keychain.sh +158 -0
  295. package/pipeline/scripts/smoke-language-axis.sh +109 -0
  296. package/pipeline/scripts/smoke-lib-scripts.sh +395 -0
  297. package/pipeline/scripts/smoke-migrate-state.sh +102 -0
  298. package/pipeline/scripts/smoke-mode-dispatch-drift.sh +158 -0
  299. package/pipeline/scripts/smoke-multi-repo-integration.sh +116 -0
  300. package/pipeline/scripts/smoke-multi-repo-worktree.sh +61 -0
  301. package/pipeline/scripts/smoke-no-token-prompt.sh +69 -0
  302. package/pipeline/scripts/smoke-pat-audit.sh +107 -0
  303. package/pipeline/scripts/smoke-per-repo-memory.sh +156 -0
  304. package/pipeline/scripts/smoke-personal-data.sh +82 -0
  305. package/pipeline/scripts/smoke-phase-0-multi-repo.sh +170 -0
  306. package/pipeline/scripts/smoke-phase-6-multi.sh +79 -0
  307. package/pipeline/scripts/smoke-phase-banner.sh +101 -0
  308. package/pipeline/scripts/smoke-phase-tracker.sh +255 -0
  309. package/pipeline/scripts/smoke-phase0-bridge-contract.sh +241 -0
  310. package/pipeline/scripts/smoke-phase4-triage.sh +142 -0
  311. package/pipeline/scripts/smoke-plan-approval-gate.sh +71 -0
  312. package/pipeline/scripts/smoke-plan-safety.sh +139 -0
  313. package/pipeline/scripts/smoke-plan-todos.sh +193 -0
  314. package/pipeline/scripts/smoke-pr-review-actions.sh +152 -0
  315. package/pipeline/scripts/smoke-pre-commit.sh +138 -0
  316. package/pipeline/scripts/smoke-pref-migration.sh +224 -0
  317. package/pipeline/scripts/smoke-prefs-language.sh +134 -0
  318. package/pipeline/scripts/smoke-progress-contract.sh +118 -0
  319. package/pipeline/scripts/smoke-push-retry.sh +75 -0
  320. package/pipeline/scripts/smoke-readme-counts.sh +120 -0
  321. package/pipeline/scripts/smoke-repo-map.sh +300 -0
  322. package/pipeline/scripts/smoke-review-watch.sh +134 -0
  323. package/pipeline/scripts/smoke-run-aggregator.sh +216 -0
  324. package/pipeline/scripts/smoke-schema-validation.sh +173 -0
  325. package/pipeline/scripts/smoke-search.sh +187 -0
  326. package/pipeline/scripts/smoke-shadow-git.sh +175 -0
  327. package/pipeline/scripts/smoke-skill-authoring.sh +142 -0
  328. package/pipeline/scripts/smoke-skill-language.sh +83 -0
  329. package/pipeline/scripts/smoke-skill-manifest.sh +138 -0
  330. package/pipeline/scripts/smoke-skill-scan.sh +198 -0
  331. package/pipeline/scripts/smoke-stack-swap.sh +132 -0
  332. package/pipeline/scripts/smoke-subagent-validators.sh +105 -0
  333. package/pipeline/scripts/smoke-sync-delegation.sh +74 -0
  334. package/pipeline/scripts/smoke-sync-parity.sh +92 -0
  335. package/pipeline/scripts/smoke-tasklist-ordering.sh +111 -0
  336. package/pipeline/scripts/smoke-telemetry.sh +147 -0
  337. package/pipeline/scripts/smoke-test-gap.sh +183 -0
  338. package/pipeline/scripts/smoke-token-budget.sh +67 -0
  339. package/pipeline/scripts/smoke-tracker-contract.sh +129 -0
  340. package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +65 -0
  341. package/pipeline/scripts/smoke-triage-memory.sh +174 -0
  342. package/pipeline/scripts/smoke-url-enrichment.sh +70 -0
  343. package/pipeline/scripts/smoke-validator-contradiction.sh +67 -0
  344. package/pipeline/scripts/smoke-vercel-deploy-redact.sh +129 -0
  345. package/pipeline/scripts/smoke-wiki-integration.sh +146 -0
  346. package/pipeline/scripts/smoke-work-summary.sh +163 -0
  347. package/pipeline/scripts/smoke-worktree-path-convention.sh +86 -0
  348. package/pipeline/scripts/smoke-write-state.sh +115 -0
  349. package/pipeline/scripts/stack-swap.sh +182 -0
  350. package/pipeline/scripts/sync-figma-source.sh +228 -0
  351. package/pipeline/scripts/sync-parity-check.sh +135 -0
  352. package/pipeline/scripts/test-gap-rules/android.json +25 -0
  353. package/pipeline/scripts/test-gap-rules/ios.json +29 -0
  354. package/pipeline/scripts/test-gap-rules/node.json +17 -0
  355. package/pipeline/scripts/test-gap-rules/python.json +19 -0
  356. package/pipeline/scripts/test-gap-scan.mjs +343 -0
  357. package/pipeline/scripts/token-budget-report.mjs +145 -0
  358. package/pipeline/scripts/triage-memory.mjs +258 -0
  359. package/pipeline/scripts/ui-tree-dumper.swift +122 -0
  360. package/pipeline/scripts/uninstall.mjs +331 -0
  361. package/pipeline/scripts/update-issue-progress.sh +146 -0
  362. package/pipeline/scripts/validate-analysis.mjs +132 -0
  363. package/pipeline/scripts/validate-diff-risk.mjs +117 -0
  364. package/pipeline/scripts/validate-planning.mjs +180 -0
  365. package/pipeline/scripts/validate-reviewer.mjs +131 -0
  366. package/pipeline/scripts/validate-schemas.mjs +88 -0
  367. package/pipeline/scripts/validate-test-gap.mjs +90 -0
  368. package/pipeline/scripts/validate-triage.mjs +175 -0
  369. package/pipeline/scripts/verify-skills.sh +126 -0
  370. package/pipeline/scripts/write-state.mjs +175 -0
  371. package/pipeline/skills/.skill-manifest.json +779 -0
  372. package/pipeline/skills/.skills-index.json +1771 -0
  373. package/pipeline/skills/figma-android/README.md +36 -0
  374. package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +62 -0
  375. package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +158 -0
  376. package/pipeline/skills/figma-android/figma-component-test/SKILL.md +120 -0
  377. package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +35 -0
  378. package/pipeline/skills/figma-android/figma-to-component/SKILL.md +124 -0
  379. package/pipeline/skills/figma-common/README.md +57 -0
  380. package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +277 -0
  381. package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +498 -0
  382. package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +283 -0
  383. package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +362 -0
  384. package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +206 -0
  385. package/pipeline/skills/figma-common/figma-commit/REVIEW.md +337 -0
  386. package/pipeline/skills/figma-common/figma-commit/SKILL.md +211 -0
  387. package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +218 -0
  388. package/pipeline/skills/figma-common/figma-component-start/SKILL.md +246 -0
  389. package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +73 -0
  390. package/pipeline/skills/figma-common/figma-fix/SKILL.md +316 -0
  391. package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +542 -0
  392. package/pipeline/skills/figma-common/figma-issue/SKILL.md +745 -0
  393. package/pipeline/skills/figma-common/figma-iterate/SKILL.md +203 -0
  394. package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +1015 -0
  395. package/pipeline/skills/figma-common/figma-mend/SKILL.md +331 -0
  396. package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +398 -0
  397. package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +104 -0
  398. package/pipeline/skills/figma-common/figma-review/SKILL.md +395 -0
  399. package/pipeline/skills/figma-common/figma-setup/SKILL.md +514 -0
  400. package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +592 -0
  401. package/pipeline/skills/figma-common/figma-skip/SKILL.md +129 -0
  402. package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +104 -0
  403. package/pipeline/skills/figma-common/figma-utility/SKILL.md +274 -0
  404. package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +808 -0
  405. package/pipeline/skills/figma-common/figma-validate/SKILL.md +633 -0
  406. package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +711 -0
  407. package/pipeline/skills/figma-common/performance-review-next/SKILL.md +233 -0
  408. package/pipeline/skills/figma-common/performance-start/SKILL.md +425 -0
  409. package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +706 -0
  410. package/pipeline/skills/figma-common/performance-tour/SKILL.md +418 -0
  411. package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +67 -0
  412. package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +178 -0
  413. package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +184 -0
  414. package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +219 -0
  415. package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +274 -0
  416. package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +401 -0
  417. package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +57 -0
  418. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +307 -0
  419. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +119 -0
  420. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +174 -0
  421. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +333 -0
  422. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +368 -0
  423. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +393 -0
  424. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +617 -0
  425. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +352 -0
  426. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +337 -0
  427. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +206 -0
  428. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +235 -0
  429. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +214 -0
  430. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +871 -0
  431. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +156 -0
  432. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +175 -0
  433. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +176 -0
  434. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +333 -0
  435. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +412 -0
  436. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +336 -0
  437. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +695 -0
  438. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +332 -0
  439. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +380 -0
  440. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +262 -0
  441. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +482 -0
  442. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +274 -0
  443. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +636 -0
  444. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +142 -0
  445. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +547 -0
  446. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +39 -0
  447. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +659 -0
  448. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +580 -0
  449. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +51 -0
  450. package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +129 -0
  451. package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +64 -0
  452. package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +531 -0
  453. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +89 -0
  454. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +155 -0
  455. package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +196 -0
  456. package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +57 -0
  457. package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +89 -0
  458. package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +227 -0
  459. package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +157 -0
  460. package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +90 -0
  461. package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +116 -0
  462. package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +153 -0
  463. package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +130 -0
  464. package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +218 -0
  465. package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +188 -0
  466. package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +93 -0
  467. package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +98 -0
  468. package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +261 -0
  469. package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +147 -0
  470. package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +182 -0
  471. package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +185 -0
  472. package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +609 -0
  473. package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +332 -0
  474. package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +261 -0
  475. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +184 -0
  476. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +188 -0
  477. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +768 -0
  478. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +191 -0
  479. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +420 -0
  480. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.json +94 -0
  481. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +336 -0
  482. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +391 -0
  483. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +292 -0
  484. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +1 -0
  485. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +93 -0
  486. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +299 -0
  487. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +343 -0
  488. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +206 -0
  489. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +149 -0
  490. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +281 -0
  491. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +332 -0
  492. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +176 -0
  493. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +98 -0
  494. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +298 -0
  495. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +195 -0
  496. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +1298 -0
  497. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +228 -0
  498. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +1089 -0
  499. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +141 -0
  500. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +106 -0
  501. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +162 -0
  502. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +105 -0
  503. package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +179 -0
  504. package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +260 -0
  505. package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +260 -0
  506. package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +86 -0
  507. package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +321 -0
  508. package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +1470 -0
  509. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +176 -0
  510. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +147 -0
  511. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +629 -0
  512. package/pipeline/skills/shared/README.md +212 -0
  513. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +315 -0
  514. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +348 -0
  515. package/pipeline/skills/shared/core/multi-agent/SKILL.md +944 -0
  516. package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +51 -0
  517. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +300 -0
  518. package/pipeline/skills/shared/core/multi-agent-delete/SKILL.md +63 -0
  519. package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +64 -0
  520. package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +56 -0
  521. package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +36 -0
  522. package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +42 -0
  523. package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +66 -0
  524. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +292 -0
  525. package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +35 -0
  526. package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +38 -0
  527. package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +41 -0
  528. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +87 -0
  529. package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +37 -0
  530. package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +53 -0
  531. package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +28 -0
  532. package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +47 -0
  533. package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +42 -0
  534. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +191 -0
  535. package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +31 -0
  536. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +61 -0
  537. package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +61 -0
  538. package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +62 -0
  539. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +309 -0
  540. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +55 -0
  541. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +41 -0
  542. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +184 -0
  543. package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +44 -0
  544. package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +34 -0
  545. package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +45 -0
  546. package/pipeline/skills/shared/external/agentflow/SKILL.md +199 -0
  547. package/pipeline/skills/shared/external/alarmkit/SKILL.md +438 -0
  548. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +584 -0
  549. package/pipeline/skills/shared/external/android-architecture/SKILL.md +407 -0
  550. package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +153 -0
  551. package/pipeline/skills/shared/external/android-performance/SKILL.md +736 -0
  552. package/pipeline/skills/shared/external/android-security/SKILL.md +577 -0
  553. package/pipeline/skills/shared/external/android_ui_verification/SKILL.md +66 -0
  554. package/pipeline/skills/shared/external/api-patterns/SKILL.md +85 -0
  555. package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +910 -0
  556. package/pipeline/skills/shared/external/app-clips/SKILL.md +436 -0
  557. package/pipeline/skills/shared/external/app-intents/SKILL.md +489 -0
  558. package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +1076 -0
  559. package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +75 -0
  560. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +409 -0
  561. package/pipeline/skills/shared/external/app-store-review/SKILL.md +411 -0
  562. package/pipeline/skills/shared/external/app-store-review/references/code-signing.md +259 -0
  563. package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +90 -0
  564. package/pipeline/skills/shared/external/app-store-review/references/rejection-patterns.md +152 -0
  565. package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +118 -0
  566. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +500 -0
  567. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +425 -0
  568. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +344 -0
  569. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +508 -0
  570. package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +285 -0
  571. package/pipeline/skills/shared/external/architecture/SKILL.md +60 -0
  572. package/pipeline/skills/shared/external/authentication/SKILL.md +496 -0
  573. package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +211 -0
  574. package/pipeline/skills/shared/external/background-processing/SKILL.md +499 -0
  575. package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +390 -0
  576. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +461 -0
  577. package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +425 -0
  578. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +462 -0
  579. package/pipeline/skills/shared/external/clean-code/SKILL.md +94 -0
  580. package/pipeline/skills/shared/external/closed-loop-delivery/SKILL.md +116 -0
  581. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +492 -0
  582. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +461 -0
  583. package/pipeline/skills/shared/external/compose-components/SKILL.md +441 -0
  584. package/pipeline/skills/shared/external/compose-navigation/SKILL.md +436 -0
  585. package/pipeline/skills/shared/external/compose-testing/SKILL.md +527 -0
  586. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +425 -0
  587. package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +409 -0
  588. package/pipeline/skills/shared/external/context-compression/SKILL.md +266 -0
  589. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +491 -0
  590. package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +435 -0
  591. package/pipeline/skills/shared/external/core-motion/SKILL.md +388 -0
  592. package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +405 -0
  593. package/pipeline/skills/shared/external/core-nfc/SKILL.md +495 -0
  594. package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +420 -0
  595. package/pipeline/skills/shared/external/coreml/SKILL.md +458 -0
  596. package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +765 -0
  597. package/pipeline/skills/shared/external/css-modern/SKILL.md +467 -0
  598. package/pipeline/skills/shared/external/database-patterns/SKILL.md +335 -0
  599. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +422 -0
  600. package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +387 -0
  601. package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +298 -0
  602. package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +37 -0
  603. package/pipeline/skills/shared/external/device-integrity/SKILL.md +477 -0
  604. package/pipeline/skills/shared/external/docker-expert/SKILL.md +413 -0
  605. package/pipeline/skills/shared/external/energykit/SKILL.md +460 -0
  606. package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +541 -0
  607. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +483 -0
  608. package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +326 -0
  609. package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +190 -0
  610. package/pipeline/skills/shared/external/firebase/SKILL.md +61 -0
  611. package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +348 -0
  612. package/pipeline/skills/shared/external/gradle-kotlin-dsl/SKILL.md +552 -0
  613. package/pipeline/skills/shared/external/healthkit/SKILL.md +498 -0
  614. package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +602 -0
  615. package/pipeline/skills/shared/external/help-skills/SKILL.md +166 -0
  616. package/pipeline/skills/shared/external/hig-components-content/SKILL.md +81 -0
  617. package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +95 -0
  618. package/pipeline/skills/shared/external/hig-components-status/SKILL.md +82 -0
  619. package/pipeline/skills/shared/external/hig-components-system/SKILL.md +101 -0
  620. package/pipeline/skills/shared/external/hig-foundations/SKILL.md +94 -0
  621. package/pipeline/skills/shared/external/hig-inputs/SKILL.md +110 -0
  622. package/pipeline/skills/shared/external/hig-patterns/SKILL.md +99 -0
  623. package/pipeline/skills/shared/external/hig-platforms/SKILL.md +81 -0
  624. package/pipeline/skills/shared/external/hig-technologies/SKILL.md +125 -0
  625. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +496 -0
  626. package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +455 -0
  627. package/pipeline/skills/shared/external/html-semantic/SKILL.md +301 -0
  628. package/pipeline/skills/shared/external/humanizer/SKILL.md +118 -0
  629. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +301 -0
  630. package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +140 -0
  631. package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +59 -0
  632. package/pipeline/skills/shared/external/ios-developer/SKILL.md +217 -0
  633. package/pipeline/skills/shared/external/ios-localization/SKILL.md +418 -0
  634. package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +627 -0
  635. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +462 -0
  636. package/pipeline/skills/shared/external/ios-networking/SKILL.md +441 -0
  637. package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +862 -0
  638. package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -0
  639. package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +563 -0
  640. package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +1116 -0
  641. package/pipeline/skills/shared/external/ios-security/SKILL.md +496 -0
  642. package/pipeline/skills/shared/external/ios-security/references/app-review-guidelines.md +174 -0
  643. package/pipeline/skills/shared/external/ios-security/references/cryptokit-advanced.md +297 -0
  644. package/pipeline/skills/shared/external/ios-security/references/file-storage-patterns.md +354 -0
  645. package/pipeline/skills/shared/external/ios-security/references/privacy-manifest.md +117 -0
  646. package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +101 -0
  647. package/pipeline/skills/shared/external/live-activities/SKILL.md +500 -0
  648. package/pipeline/skills/shared/external/live-activities/references/live-activity-patterns.md +868 -0
  649. package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +109 -0
  650. package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +110 -0
  651. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +485 -0
  652. package/pipeline/skills/shared/external/mapkit-location/references/corelocation-patterns.md +730 -0
  653. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +748 -0
  654. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +479 -0
  655. package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +64 -0
  656. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +395 -0
  657. package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +363 -0
  658. package/pipeline/skills/shared/external/natural-language/SKILL.md +412 -0
  659. package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +311 -0
  660. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +418 -0
  661. package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +38 -0
  662. package/pipeline/skills/shared/external/observability-engineer/SKILL.md +235 -0
  663. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +398 -0
  664. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +254 -0
  665. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +387 -0
  666. package/pipeline/skills/shared/external/pencilkit-drawing/references/paperkit-integration.md +376 -0
  667. package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +302 -0
  668. package/pipeline/skills/shared/external/permissionkit/SKILL.md +446 -0
  669. package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +435 -0
  670. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +501 -0
  671. package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +701 -0
  672. package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +774 -0
  673. package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +869 -0
  674. package/pipeline/skills/shared/external/photos-camera-media/references/photospicker-patterns.md +597 -0
  675. package/pipeline/skills/shared/external/play-store-review/SKILL.md +350 -0
  676. package/pipeline/skills/shared/external/push-notifications/SKILL.md +501 -0
  677. package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +677 -0
  678. package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +745 -0
  679. package/pipeline/skills/shared/external/python-patterns/SKILL.md +383 -0
  680. package/pipeline/skills/shared/external/react-best-practices/SKILL.md +290 -0
  681. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +479 -0
  682. package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +480 -0
  683. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +386 -0
  684. package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +506 -0
  685. package/pipeline/skills/shared/external/room-database/SKILL.md +564 -0
  686. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +483 -0
  687. package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +544 -0
  688. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +485 -0
  689. package/pipeline/skills/shared/external/storekit/SKILL.md +478 -0
  690. package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +58 -0
  691. package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +755 -0
  692. package/pipeline/skills/shared/external/swift-charts/SKILL.md +487 -0
  693. package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +895 -0
  694. package/pipeline/skills/shared/external/swift-codable/SKILL.md +467 -0
  695. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +408 -0
  696. package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +80 -0
  697. package/pipeline/skills/shared/external/swift-concurrency/references/swift-6-2-concurrency.md +233 -0
  698. package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +187 -0
  699. package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +341 -0
  700. package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +113 -0
  701. package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +124 -0
  702. package/pipeline/skills/shared/external/swift-concurrency-pro/references/actors.md +155 -0
  703. package/pipeline/skills/shared/external/swift-concurrency-pro/references/async-streams.md +67 -0
  704. package/pipeline/skills/shared/external/swift-concurrency-pro/references/bridging.md +52 -0
  705. package/pipeline/skills/shared/external/swift-concurrency-pro/references/bug-patterns.md +100 -0
  706. package/pipeline/skills/shared/external/swift-concurrency-pro/references/cancellation.md +107 -0
  707. package/pipeline/skills/shared/external/swift-concurrency-pro/references/diagnostics.md +70 -0
  708. package/pipeline/skills/shared/external/swift-concurrency-pro/references/hotspots.md +47 -0
  709. package/pipeline/skills/shared/external/swift-concurrency-pro/references/interop.md +129 -0
  710. package/pipeline/skills/shared/external/swift-concurrency-pro/references/new-features.md +224 -0
  711. package/pipeline/skills/shared/external/swift-concurrency-pro/references/structured.md +101 -0
  712. package/pipeline/skills/shared/external/swift-concurrency-pro/references/testing.md +218 -0
  713. package/pipeline/skills/shared/external/swift-concurrency-pro/references/unstructured.md +61 -0
  714. package/pipeline/skills/shared/external/swift-language/SKILL.md +498 -0
  715. package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +505 -0
  716. package/pipeline/skills/shared/external/swift-testing/SKILL.md +462 -0
  717. package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +504 -0
  718. package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +97 -0
  719. package/pipeline/skills/shared/external/swift-testing-pro/references/async-tests.md +252 -0
  720. package/pipeline/skills/shared/external/swift-testing-pro/references/core-rules.md +52 -0
  721. package/pipeline/skills/shared/external/swift-testing-pro/references/migrating-from-xctest.md +34 -0
  722. package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +318 -0
  723. package/pipeline/skills/shared/external/swift-testing-pro/references/writing-better-tests.md +254 -0
  724. package/pipeline/skills/shared/external/swiftdata/SKILL.md +334 -0
  725. package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +504 -0
  726. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +975 -0
  727. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +675 -0
  728. package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +102 -0
  729. package/pipeline/skills/shared/external/swiftdata-pro/references/class-inheritance.md +104 -0
  730. package/pipeline/skills/shared/external/swiftdata-pro/references/cloudkit.md +10 -0
  731. package/pipeline/skills/shared/external/swiftdata-pro/references/core-rules.md +20 -0
  732. package/pipeline/skills/shared/external/swiftdata-pro/references/indexing.md +27 -0
  733. package/pipeline/skills/shared/external/swiftdata-pro/references/predicates.md +73 -0
  734. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +503 -0
  735. package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +821 -0
  736. package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +553 -0
  737. package/pipeline/skills/shared/external/swiftui-expert-skill/SKILL.md +102 -0
  738. package/pipeline/skills/shared/external/swiftui-expert-skill/references/accessibility-patterns.md +215 -0
  739. package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-advanced.md +403 -0
  740. package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-basics.md +284 -0
  741. package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-transitions.md +326 -0
  742. package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts-accessibility.md +135 -0
  743. package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts.md +602 -0
  744. package/pipeline/skills/shared/external/swiftui-expert-skill/references/image-optimization.md +203 -0
  745. package/pipeline/skills/shared/external/swiftui-expert-skill/references/latest-apis.md +464 -0
  746. package/pipeline/skills/shared/external/swiftui-expert-skill/references/layout-best-practices.md +266 -0
  747. package/pipeline/skills/shared/external/swiftui-expert-skill/references/liquid-glass.md +416 -0
  748. package/pipeline/skills/shared/external/swiftui-expert-skill/references/list-patterns.md +394 -0
  749. package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-scenes.md +318 -0
  750. package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-views.md +357 -0
  751. package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-window-styling.md +303 -0
  752. package/pipeline/skills/shared/external/swiftui-expert-skill/references/performance-patterns.md +403 -0
  753. package/pipeline/skills/shared/external/swiftui-expert-skill/references/scroll-patterns.md +293 -0
  754. package/pipeline/skills/shared/external/swiftui-expert-skill/references/sheet-navigation-patterns.md +363 -0
  755. package/pipeline/skills/shared/external/swiftui-expert-skill/references/state-management.md +417 -0
  756. package/pipeline/skills/shared/external/swiftui-expert-skill/references/view-structure.md +389 -0
  757. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +450 -0
  758. package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +425 -0
  759. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +336 -0
  760. package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +97 -0
  761. package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +69 -0
  762. package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +99 -0
  763. package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +147 -0
  764. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +98 -0
  765. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +262 -0
  766. package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +207 -0
  767. package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +177 -0
  768. package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +169 -0
  769. package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +178 -0
  770. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +371 -0
  771. package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +486 -0
  772. package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +1097 -0
  773. package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +780 -0
  774. package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +696 -0
  775. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +487 -0
  776. package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +46 -0
  777. package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +29 -0
  778. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +33 -0
  779. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +52 -0
  780. package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +114 -0
  781. package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +108 -0
  782. package/pipeline/skills/shared/external/swiftui-pro/references/accessibility.md +13 -0
  783. package/pipeline/skills/shared/external/swiftui-pro/references/api.md +39 -0
  784. package/pipeline/skills/shared/external/swiftui-pro/references/data.md +43 -0
  785. package/pipeline/skills/shared/external/swiftui-pro/references/design.md +31 -0
  786. package/pipeline/skills/shared/external/swiftui-pro/references/hygiene.md +9 -0
  787. package/pipeline/skills/shared/external/swiftui-pro/references/navigation.md +14 -0
  788. package/pipeline/skills/shared/external/swiftui-pro/references/performance.md +46 -0
  789. package/pipeline/skills/shared/external/swiftui-pro/references/swift.md +56 -0
  790. package/pipeline/skills/shared/external/swiftui-pro/references/views.md +35 -0
  791. package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +103 -0
  792. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +428 -0
  793. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +534 -0
  794. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +948 -0
  795. package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +210 -0
  796. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +273 -0
  797. package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +151 -0
  798. package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +95 -0
  799. package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +51 -0
  800. package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +111 -0
  801. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +309 -0
  802. package/pipeline/skills/shared/external/testing-backend/SKILL.md +393 -0
  803. package/pipeline/skills/shared/external/tipkit/SKILL.md +494 -0
  804. package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +782 -0
  805. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +336 -0
  806. package/pipeline/skills/shared/external/vision-framework/SKILL.md +475 -0
  807. package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +736 -0
  808. package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +738 -0
  809. package/pipeline/skills/shared/external/vue-composition/SKILL.md +371 -0
  810. package/pipeline/skills/shared/external/weatherkit/SKILL.md +410 -0
  811. package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +567 -0
  812. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +373 -0
  813. package/pipeline/skills/shared/external/web-performance/SKILL.md +345 -0
  814. package/pipeline/skills/shared/external/web-testing/SKILL.md +385 -0
  815. package/pipeline/skills/shared/external/widgetkit/SKILL.md +497 -0
  816. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +871 -0
  817. package/pipeline/skills/skills-index.md +205 -0
@@ -0,0 +1,149 @@
1
+ #!/usr/bin/env bash
2
+ # smoke-figma-sync.sh — WS-9 contract for sync-figma-source.sh.
3
+ #
4
+ # Verifies:
5
+ # 1. sync script exists + executable.
6
+ # 2. prefs.schema.json declares global.figmaSource with correct shape.
7
+ # 3. sync script handles missing figmaSource gracefully (exit 0 w/ message).
8
+ # 4. sync script handles missing path file.
9
+ # 5. dry-run mode writes nothing.
10
+ # 6. CHANGELOG note format is correct (includes `### Sync YYYY-MM-DD`).
11
+ # 7. Watermark update logic (lastCommit + lastSyncedAt) runs atomically.
12
+
13
+ set -euo pipefail
14
+
15
+ HERE="$(cd "$(dirname "$0")" && pwd)"
16
+ ROOT="$(cd "$HERE/../.." && pwd)"
17
+ SYNC="$ROOT/pipeline/scripts/sync-figma-source.sh"
18
+ SCHEMA="$ROOT/pipeline/schemas/prefs.schema.json"
19
+ TMP="$(mktemp -d -t figma-sync-smoke-XXXX)"
20
+ trap 'rm -rf "$TMP"' EXIT
21
+
22
+ PASS=0
23
+ FAIL=0
24
+ pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
25
+ fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
26
+
27
+ need() { command -v "$1" >/dev/null 2>&1 || { echo "error: $1 required" >&2; exit 127; }; }
28
+ need jq
29
+ need git
30
+
31
+ [ -x "$SYNC" ] && pass "sync script exists and is executable" || fail "sync script not executable at $SYNC"
32
+
33
+ echo ""
34
+ echo "→ 2. prefs schema declares global.figmaSource with correct shape"
35
+ for field in path branch lastSyncedAt lastCommit; do
36
+ if jq -e ".properties.global.properties.figmaSource.properties.$field" "$SCHEMA" >/dev/null 2>&1; then
37
+ pass "figmaSource.$field declared"
38
+ else
39
+ fail "figmaSource.$field missing from schema"
40
+ fi
41
+ done
42
+
43
+ echo ""
44
+ echo "→ 3. missing figmaSource → exit 0 with skip message"
45
+ cat > "$TMP/prefs-no-source.json" <<'EOF'
46
+ { "schemaVersion": "2.1.0", "global": {}, "projects": {} }
47
+ EOF
48
+ OUT=$(MULTI_AGENT_PREFS="$TMP/prefs-no-source.json" bash "$SYNC" 2>&1)
49
+ RC=$?
50
+ if [ "$RC" -eq 0 ] && echo "$OUT" | grep -Fq "figmaSource not configured"; then
51
+ pass "gracefully handles missing figmaSource"
52
+ else
53
+ fail "did not skip cleanly (rc=$RC, out: $OUT)"
54
+ fi
55
+
56
+ echo ""
57
+ echo "→ 4. figmaSource.path missing on disk → exit 1 with error"
58
+ cat > "$TMP/prefs-bad-path.json" <<EOF
59
+ { "schemaVersion": "2.1.0", "global": { "figmaSource": { "path": "$TMP/does-not-exist", "branch": "develop" } }, "projects": {} }
60
+ EOF
61
+ set +e
62
+ OUT=$(MULTI_AGENT_PREFS="$TMP/prefs-bad-path.json" bash "$SYNC" 2>&1)
63
+ RC=$?
64
+ set -e
65
+ if [ "$RC" -ne 0 ] && echo "$OUT" | grep -Fq "does not exist"; then
66
+ pass "errors cleanly on missing path"
67
+ else
68
+ fail "did not error on missing path (rc=$RC)"
69
+ fi
70
+
71
+ echo ""
72
+ echo "→ 5. dry-run mode does not mutate prefs"
73
+ # Build a tiny fake source with .instructions/figma/sample/SKILL.md
74
+ FAKE_SRC="$TMP/fake-src"
75
+ mkdir -p "$FAKE_SRC/.instructions/figma/sample" "$FAKE_SRC/.claude/skills/sample"
76
+ cat > "$FAKE_SRC/.instructions/figma/sample/SKILL.md" <<'EOF'
77
+ ---
78
+ name: sample
79
+ description: smoke fixture
80
+ ---
81
+ # sample
82
+ EOF
83
+ cat > "$FAKE_SRC/.claude/skills/sample/SKILL.md" <<'EOF'
84
+ ---
85
+ name: sample
86
+ description: smoke stub
87
+ ---
88
+ # sample stub
89
+ EOF
90
+ (cd "$FAKE_SRC" && git init -q && git -c user.email=t@t -c user.name=t add . && git -c user.email=t@t -c user.name=t commit -q -m init)
91
+ PREFS_BEFORE="$TMP/prefs-dry.json"
92
+ cat > "$PREFS_BEFORE" <<EOF
93
+ { "schemaVersion": "2.1.0", "global": { "figmaSource": { "path": "$FAKE_SRC", "branch": "main" } }, "projects": {} }
94
+ EOF
95
+ CHECKSUM_BEFORE=$(jq -c '.' "$PREFS_BEFORE" | shasum | awk '{print $1}')
96
+ MULTI_AGENT_PREFS="$PREFS_BEFORE" bash "$SYNC" --dry-run >/dev/null 2>&1 || true
97
+ CHECKSUM_AFTER=$(jq -c '.' "$PREFS_BEFORE" | shasum | awk '{print $1}')
98
+ [ "$CHECKSUM_BEFORE" = "$CHECKSUM_AFTER" ] && pass "dry-run leaves prefs untouched" || fail "dry-run mutated prefs"
99
+
100
+ echo ""
101
+ echo "→ 6. CHANGELOG heading pattern used by sync (grep shape)"
102
+ if grep -Fq '### Sync $(date' "$SYNC" || grep -Eq '### Sync \$\(date' "$SYNC"; then
103
+ pass "sync emits '### Sync YYYY-MM-DD' heading"
104
+ else
105
+ fail "sync script does not emit the canonical CHANGELOG heading"
106
+ fi
107
+
108
+ echo ""
109
+ echo "→ 7. Watermark update uses atomic rename"
110
+ if grep -Fq "mv \"\$TMP\" \"\$PREFS_FILE\"" "$SYNC"; then
111
+ pass "atomic rename on prefs update"
112
+ else
113
+ fail "no atomic rename in sync script"
114
+ fi
115
+
116
+ echo ""
117
+ echo "→ 8. --force-full flag is recognised"
118
+ if grep -Fq -- "--force-full" "$SYNC"; then
119
+ pass "force-full flag supported"
120
+ else
121
+ fail "force-full flag missing"
122
+ fi
123
+
124
+ echo ""
125
+ echo "→ 9. --plan flag writes a structured JSON plan artifact"
126
+ if grep -Fq -- "--plan" "$SYNC"; then
127
+ pass "plan flag recognised"
128
+ else
129
+ fail "plan flag missing"
130
+ fi
131
+ if grep -Fq ".last-figma-sync-plan.json" "$SYNC"; then
132
+ pass "plan writes to .last-figma-sync-plan.json"
133
+ else
134
+ fail "plan output path missing"
135
+ fi
136
+ if grep -Fq "overlaySkip" "$SYNC"; then
137
+ pass "plan records overlay-skip per skill"
138
+ else
139
+ fail "plan does not record overlaySkip"
140
+ fi
141
+ if grep -Fq "tree" "$SYNC" && grep -Fq "figma-ios" "$SYNC" && grep -Fq "figma-common" "$SYNC"; then
142
+ pass "plan records destination tree (figma-ios vs figma-common)"
143
+ else
144
+ fail "plan missing tree routing info"
145
+ fi
146
+
147
+ echo ""
148
+ echo "══ figma-sync smoke: $PASS passed, $FAIL failed ══"
149
+ [ "$FAIL" -eq 0 ]
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env bash
2
+ # smoke-identity-isolation.sh — asserts identity isolation rules from §18.3
3
+ # of REFACTOR_PLAN_v3.7.md are documented & wired:
4
+ #
5
+ # • Identity lookup happens via platformIdentityRouting only — NEVER fall
6
+ # back to "try all PATs"
7
+ # • If no routing match, prompt user — do not guess
8
+ # • servicePatMap is checked per-identity — corp identity cannot accidentally
9
+ # use personal identity's PAT even if the keychain name is discoverable
10
+ #
11
+ # Doc-shape smoke (no fake keychain entries; pure spec assertion).
12
+
13
+ set -uo pipefail
14
+
15
+ # Read from source (authoritative) — installed tree may lag behind on
16
+ # machines that haven't re-run install.js after a pipeline update.
17
+ HERE="$(cd "$(dirname "$0")" && pwd)"
18
+ ROOT="$(cd "$HERE/../.." && pwd)"
19
+ PHASE0="$ROOT/pipeline/commands/multi-agent/refs/phases/phase-0-init.md"
20
+ SETUP="$ROOT/pipeline/commands/multi-agent/setup.md"
21
+ PREFS_SCHEMA="$ROOT/pipeline/schemas/prefs.schema.json"
22
+
23
+ PASS=0; FAIL=0
24
+ pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
25
+ fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
26
+
27
+ echo "→ 1. servicePatMap is per-identity (schema)"
28
+ grep -q "servicePatMap" "$PREFS_SCHEMA" \
29
+ && pass "Schema declares identities[].servicePatMap" \
30
+ || fail "Schema missing servicePatMap on identities"
31
+ grep -q "Enables cross-identity isolation\|cross-identity isolation" "$PREFS_SCHEMA" \
32
+ && pass "Schema description articulates cross-identity isolation invariant" \
33
+ || fail "Schema description missing isolation invariant"
34
+
35
+ echo ""
36
+ echo "→ 2. Phase 0 routing — no silent fallback to 'try all PATs'"
37
+ grep -q "platformIdentityRouting" "$PHASE0" \
38
+ && pass "Phase 0 Step 6 references platformIdentityRouting" \
39
+ || fail "Phase 0 missing platformIdentityRouting reference"
40
+ # Post-10caff1 wording: the resolution order ends with an explicit "ask once"
41
+ # clause for the multi-identity case — same invariant as the older
42
+ # "multi-identity picker" text.
43
+ grep -q "Multiple identities, no routing rule" "$PHASE0" \
44
+ && pass "Phase 0 handles 'no routing match, multiple identities' branch" \
45
+ || fail "Phase 0 missing no-match + multi-identity handling"
46
+ grep -q "No identities" "$PHASE0" \
47
+ && pass "Phase 0 handles 'no identities ever' branch (Token Save Flow)" \
48
+ || fail "Phase 0 missing 'no identities' branch"
49
+ grep -qE "save routing rule so it never asks again" "$PHASE0" \
50
+ && pass "Phase 0 persists routing on first ask (no silent guess)" \
51
+ || fail "Phase 0 missing routing-persistence guarantee"
52
+
53
+ echo ""
54
+ echo "→ 3. Setup Step 4 wires per-identity service ownership"
55
+ grep -q "servicePatMap" "$SETUP" \
56
+ && pass "Setup Step 4 documents servicePatMap" \
57
+ || fail "Setup Step 4 missing servicePatMap"
58
+ grep -qE "own tokens for|owns.*jira|per-identity" "$SETUP" \
59
+ && pass "Setup Step 4 describes per-identity ownership" \
60
+ || fail "Setup Step 4 missing per-identity ownership description"
61
+
62
+ echo ""
63
+ echo "→ 4. Multi-repo: identity routed per-repo (not shared)"
64
+ grep -qE "per repo( independently)?|routed per-repo" "$PHASE0" \
65
+ && pass "Multi-repo Step 6 routes identity per-repo" \
66
+ || fail "Multi-repo per-repo identity routing missing"
67
+
68
+ echo ""
69
+ echo "══ identity-isolation smoke: $PASS passed, $FAIL failed ══"
70
+ [ "$FAIL" -eq 0 ]
@@ -0,0 +1,241 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # smoke-install-layout.sh — verify install.js shim + install/* modules produce
4
+ # the same on-disk output as the pre-v8.0.0 monolithic installer.
5
+ #
6
+ # v8.0.0 split install.js (1246 LOC) into ./install/{index,claude,copilot,
7
+ # _common,_platform-filter,_telemetry,_adapters,_dev-only-files,
8
+ # _copilot-instructions}.mjs. The legacy install.js stayed as a thin shim
9
+ # that imports install/index.mjs and calls runInstall(process.argv).
10
+ #
11
+ # This smoke runs the live installer into a temp HOME and asserts:
12
+ # 1. install runs without error for --claude, --copilot, and --all
13
+ # 2. expected directory structure under ~/.claude and ~/.copilot is present
14
+ # 3. core file counts match what the source ships
15
+ # 4. settings.json hook + env are written
16
+ # 5. CLAUDE.md / preferences template are written when missing
17
+ # 6. copilot-instructions.md contains the pipeline marker block
18
+ #
19
+ # Failure here means the modular installer drifted from the legacy contract.
20
+ # Fix by aligning install/*.mjs with the source tree, never by relaxing this
21
+ # gate.
22
+ #
23
+ # Exit codes: 0=pass, 1=structural drift, 2=installer crash
24
+
25
+ set -euo pipefail
26
+
27
+ REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
28
+ INSTALL_JS="$REPO_ROOT/install.js"
29
+ INSTALL_DIR="$REPO_ROOT/install"
30
+
31
+ [ -f "$INSTALL_JS" ] || { echo "FAIL: install.js missing"; exit 2; }
32
+ [ -d "$INSTALL_DIR" ] || { echo "FAIL: install/ directory missing"; exit 2; }
33
+
34
+ PASS=0
35
+ FAIL=0
36
+ note() { echo " → $*"; }
37
+ pass() { echo " ✓ $*"; PASS=$((PASS + 1)); }
38
+ fail() { echo " ✗ $*"; FAIL=$((FAIL + 1)); }
39
+
40
+ assert_file() {
41
+ local path="$1" label="$2"
42
+ if [ -f "$path" ]; then pass "$label exists"; else fail "$label missing ($path)"; fi
43
+ }
44
+
45
+ assert_dir() {
46
+ local path="$1" label="$2"
47
+ if [ -d "$path" ]; then pass "$label exists"; else fail "$label missing ($path)"; fi
48
+ }
49
+
50
+ assert_dir_nonempty() {
51
+ local path="$1" label="$2"
52
+ if [ -d "$path" ] && [ "$(find "$path" -mindepth 1 -print -quit 2>/dev/null)" ]; then
53
+ pass "$label populated"
54
+ else
55
+ fail "$label empty or missing ($path)"
56
+ fi
57
+ }
58
+
59
+ # -----------------------------------------------------------------------------
60
+ note "1. install/ module layout matches v8.0.0 split"
61
+ # -----------------------------------------------------------------------------
62
+ expected_modules=(
63
+ "index.mjs"
64
+ "claude.mjs"
65
+ "copilot.mjs"
66
+ "_common.mjs"
67
+ "_platform-filter.mjs"
68
+ "_telemetry.mjs"
69
+ "_adapters.mjs"
70
+ "_copilot-instructions.mjs"
71
+ "_dev-only-files.mjs"
72
+ )
73
+ for mod in "${expected_modules[@]}"; do
74
+ assert_file "$INSTALL_DIR/$mod" "install/$mod"
75
+ done
76
+
77
+ # -----------------------------------------------------------------------------
78
+ note "2. install.js is a thin shim that imports install/index.mjs"
79
+ # -----------------------------------------------------------------------------
80
+ shim_lines=$(wc -l < "$INSTALL_JS" | tr -d ' ')
81
+ if [ "$shim_lines" -lt 50 ]; then
82
+ pass "install.js is $shim_lines lines (shim, <50)"
83
+ else
84
+ fail "install.js is $shim_lines lines — expected shim under 50"
85
+ fi
86
+ if grep -q "from \"./install/index.mjs\"" "$INSTALL_JS"; then
87
+ pass "install.js delegates to install/index.mjs"
88
+ else
89
+ fail "install.js does not import install/index.mjs"
90
+ fi
91
+
92
+ # -----------------------------------------------------------------------------
93
+ note "3. Live install --claude into temp HOME"
94
+ # -----------------------------------------------------------------------------
95
+ TMP_CLAUDE=$(mktemp -d)
96
+ trap 'rm -rf "$TMP_CLAUDE" "$TMP_COPILOT" "$TMP_ALL" 2>/dev/null || true' EXIT
97
+
98
+ if HOME="$TMP_CLAUDE" node "$INSTALL_JS" --claude > /tmp/smoke-install-layout-claude.log 2>&1; then
99
+ pass "node install.js --claude exited 0"
100
+ else
101
+ fail "install --claude crashed — see /tmp/smoke-install-layout-claude.log"
102
+ exit 2
103
+ fi
104
+
105
+ assert_dir_nonempty "$TMP_CLAUDE/.claude/commands/multi-agent" "~/.claude/commands/multi-agent"
106
+ assert_dir_nonempty "$TMP_CLAUDE/.claude/scripts" "~/.claude/scripts"
107
+ assert_dir_nonempty "$TMP_CLAUDE/.claude/agents" "~/.claude/agents"
108
+ assert_dir_nonempty "$TMP_CLAUDE/.claude/rules" "~/.claude/rules"
109
+ assert_dir_nonempty "$TMP_CLAUDE/.claude/skills" "~/.claude/skills"
110
+ assert_file "$TMP_CLAUDE/.claude/CLAUDE.md" "~/.claude/CLAUDE.md"
111
+ assert_file "$TMP_CLAUDE/.claude/multi-agent-preferences.json" "~/.claude/multi-agent-preferences.json"
112
+ assert_file "$TMP_CLAUDE/.claude/settings.json" "~/.claude/settings.json"
113
+
114
+ # settings.json must have the secret-detection hook
115
+ if grep -q "Bash(git commit:\*)" "$TMP_CLAUDE/.claude/settings.json"; then
116
+ pass "settings.json registers PreToolUse git-commit hook"
117
+ else
118
+ fail "settings.json missing PreToolUse git-commit hook"
119
+ fi
120
+ if grep -q "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE" "$TMP_CLAUDE/.claude/settings.json"; then
121
+ pass "settings.json sets CLAUDE_AUTOCOMPACT_PCT_OVERRIDE"
122
+ else
123
+ fail "settings.json missing CLAUDE_AUTOCOMPACT_PCT_OVERRIDE env"
124
+ fi
125
+
126
+ # Claude side must have the multi-agent skill dirs pruned (slash commands cover
127
+ # them). Confirm by absence of any `multi-agent` directory under skills/.
128
+ if find "$TMP_CLAUDE/.claude/skills" -maxdepth 1 -type d -name 'multi-agent*' | grep -q .; then
129
+ fail "~/.claude/skills/ still contains multi-agent-* dirs (should be pruned)"
130
+ else
131
+ pass "~/.claude/skills/ has multi-agent-* skill dirs pruned"
132
+ fi
133
+
134
+ # -----------------------------------------------------------------------------
135
+ note "4. Live install --copilot into a fresh temp HOME"
136
+ # -----------------------------------------------------------------------------
137
+ TMP_COPILOT=$(mktemp -d)
138
+ if HOME="$TMP_COPILOT" node "$INSTALL_JS" --copilot > /tmp/smoke-install-layout-copilot.log 2>&1; then
139
+ pass "node install.js --copilot exited 0"
140
+ else
141
+ fail "install --copilot crashed — see /tmp/smoke-install-layout-copilot.log"
142
+ exit 2
143
+ fi
144
+
145
+ assert_file "$TMP_COPILOT/.copilot/copilot-instructions.md" "~/.copilot/copilot-instructions.md"
146
+ assert_dir_nonempty "$TMP_COPILOT/.copilot/scripts" "~/.copilot/scripts"
147
+ assert_dir_nonempty "$TMP_COPILOT/.copilot/agents" "~/.copilot/agents"
148
+ assert_dir_nonempty "$TMP_COPILOT/.copilot/skills" "~/.copilot/skills"
149
+
150
+ if grep -q "^# Multi-Agent Development Pipeline" "$TMP_COPILOT/.copilot/copilot-instructions.md"; then
151
+ pass "copilot-instructions.md has pipeline marker"
152
+ else
153
+ fail "copilot-instructions.md missing pipeline marker"
154
+ fi
155
+
156
+ # Copilot side keeps multi-agent-* skill dirs (no slash commands there)
157
+ if find "$TMP_COPILOT/.copilot/skills" -maxdepth 1 -type d -name 'multi-agent*' | grep -q .; then
158
+ pass "~/.copilot/skills/ retains multi-agent-* dirs (Copilot uses skills as commands)"
159
+ else
160
+ fail "~/.copilot/skills/ missing multi-agent-* dirs (Copilot needs them)"
161
+ fi
162
+
163
+ # -----------------------------------------------------------------------------
164
+ note "5. Live install --all writes both targets in one pass"
165
+ # -----------------------------------------------------------------------------
166
+ TMP_ALL=$(mktemp -d)
167
+ if HOME="$TMP_ALL" node "$INSTALL_JS" --all > /tmp/smoke-install-layout-all.log 2>&1; then
168
+ pass "node install.js --all exited 0"
169
+ else
170
+ fail "install --all crashed — see /tmp/smoke-install-layout-all.log"
171
+ exit 2
172
+ fi
173
+ assert_dir_nonempty "$TMP_ALL/.claude" "~/.claude (--all)"
174
+ assert_dir_nonempty "$TMP_ALL/.copilot" "~/.copilot (--all)"
175
+
176
+ # -----------------------------------------------------------------------------
177
+ note "6. Cross-target file-count parity for shared scripts"
178
+ # -----------------------------------------------------------------------------
179
+ claude_scripts=$(find "$TMP_ALL/.claude/scripts" -type f 2>/dev/null | wc -l | tr -d ' ')
180
+ copilot_scripts=$(find "$TMP_ALL/.copilot/scripts" -type f 2>/dev/null | wc -l | tr -d ' ')
181
+ if [ "$claude_scripts" = "$copilot_scripts" ] && [ "$claude_scripts" -gt 0 ]; then
182
+ pass "scripts file count parity ($claude_scripts files in both)"
183
+ else
184
+ fail "scripts file count drift: claude=$claude_scripts copilot=$copilot_scripts"
185
+ fi
186
+
187
+ claude_agents=$(find "$TMP_ALL/.claude/agents" -type f 2>/dev/null | wc -l | tr -d ' ')
188
+ copilot_agents=$(find "$TMP_ALL/.copilot/agents" -type f 2>/dev/null | wc -l | tr -d ' ')
189
+ if [ "$claude_agents" = "$copilot_agents" ] && [ "$claude_agents" -gt 0 ]; then
190
+ pass "agents file count parity ($claude_agents files in both)"
191
+ else
192
+ fail "agents file count drift: claude=$claude_agents copilot=$copilot_agents"
193
+ fi
194
+
195
+ # -----------------------------------------------------------------------------
196
+ echo ""
197
+ echo "→ 7. v8.0.0 layout fingerprint matches the fixture"
198
+ # -----------------------------------------------------------------------------
199
+ # Compare a path → file-count fingerprint against pipeline/scripts/fixtures/
200
+ # install-layout.tsv. This catches structural drift (a directory renamed,
201
+ # a file moved out of the install tree, the skills tree losing a category)
202
+ # while staying robust to legitimate skill content edits.
203
+ #
204
+ # To regenerate the fixture after an intentional layout change:
205
+ # tmp=$(mktemp -d) && HOME="$tmp" node install.js --all >/dev/null 2>&1
206
+ # ( cd "$tmp" && find . -type f | awk -F/ '{ print $2"/"$3 }' \
207
+ # | sort -u | while read d; do
208
+ # c=$(find "$d" -type f 2>/dev/null | wc -l | tr -d ' ')
209
+ # printf '%s\t%s\n' "$d" "$c"
210
+ # done ) > pipeline/scripts/fixtures/install-layout.tsv
211
+ FIXTURE="$REPO_ROOT/pipeline/scripts/fixtures/install-layout.tsv"
212
+ if [ ! -f "$FIXTURE" ]; then
213
+ fail "install-layout.tsv fixture missing — see header for regeneration recipe"
214
+ else
215
+ ACTUAL_FP=$(
216
+ cd "$TMP_ALL" && find . -type f \
217
+ | awk -F/ '{ print $2"/"$3 }' \
218
+ | sort -u \
219
+ | while read d; do
220
+ c=$(find "$d" -type f 2>/dev/null | wc -l | tr -d ' ')
221
+ printf '%s\t%s\n' "$d" "$c"
222
+ done
223
+ )
224
+ # Normalize both sides to a trailing newline before hashing — the fixture
225
+ # is committed with one, the in-shell capture lacks one. Without this, the
226
+ # smoke would always fail on the byte-level diff.
227
+ if [ "$(printf '%s\n' "$ACTUAL_FP" | shasum -a 256 | cut -d' ' -f1)" = \
228
+ "$(shasum -a 256 < "$FIXTURE" | cut -d' ' -f1)" ]; then
229
+ pass "install layout fingerprint matches fixture"
230
+ else
231
+ fail "install layout drift — fingerprint changed"
232
+ diff <(printf '%s\n' "$ACTUAL_FP") "$FIXTURE" | head -20 | sed 's/^/ /'
233
+ fi
234
+ fi
235
+
236
+ # -----------------------------------------------------------------------------
237
+ echo ""
238
+ echo "══ smoke-install-layout: $PASS passed, $FAIL failed ══"
239
+
240
+ if [ "$FAIL" -gt 0 ]; then exit 1; fi
241
+ exit 0
@@ -0,0 +1,125 @@
1
+ #!/usr/bin/env bash
2
+ # smoke-install-leak-gate.sh — runs the actual install.js into a temp HOME,
3
+ # then sweeps the installed tree for personal-data references that must never
4
+ # reach end-user machines.
5
+ #
6
+ # Why this exists: install.js excludes 7 maintainer-only files from the copied
7
+ # scripts/ directory (figma-placeholder-map.json, sync-figma-source.sh,
8
+ # import-figma-skills.sh, smoke-figma-skill-import.sh, smoke-figma-config-schema.sh,
9
+ # smoke-personal-data.sh, README-figma-smokes.md). If anyone accidentally
10
+ # removes that exclude block — or adds a new dev-only file without listing it —
11
+ # the maintainer's private upstream references would ship to end users. This
12
+ # smoke is the regression lock.
13
+
14
+ set -uo pipefail
15
+
16
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
17
+ REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
18
+
19
+ PASS=0; FAIL=0
20
+ ok() { echo " ✓ $1"; PASS=$((PASS+1)); }
21
+ fail() { echo " ✗ $1" >&2; FAIL=$((FAIL+1)); }
22
+
23
+ INSTALL_JS="$REPO_ROOT/install.js"
24
+ [ -f "$INSTALL_JS" ] || { fail "install.js missing"; exit 2; }
25
+
26
+ TMP=$(mktemp -d)
27
+ trap 'rm -rf "$TMP"' EXIT
28
+ mkdir -p "$TMP/.claude" "$TMP/.copilot"
29
+
30
+ echo "→ 1. install.js --all completes without error"
31
+ if HOME="$TMP" node "$INSTALL_JS" --all >/dev/null 2>&1; then
32
+ ok "install completes (exit 0)"
33
+ else
34
+ fail "install exited non-zero"
35
+ echo "══ aborted — install crashed ══"; exit 1
36
+ fi
37
+
38
+ echo "→ 2. Excluded dev-only files MUST NOT appear in installed scripts dir"
39
+ EXCLUDED=(
40
+ "figma-placeholder-map.json"
41
+ "sync-figma-source.sh"
42
+ "import-figma-skills.sh"
43
+ "smoke-figma-skill-import.sh"
44
+ "smoke-figma-config-schema.sh"
45
+ "smoke-personal-data.sh"
46
+ "README-figma-smokes.md"
47
+ )
48
+ leaked=()
49
+ for f in "${EXCLUDED[@]}"; do
50
+ if [ -e "$TMP/.claude/scripts/$f" ] || [ -e "$TMP/.copilot/scripts/$f" ]; then
51
+ leaked+=("$f")
52
+ fi
53
+ done
54
+ if [ ${#leaked[@]} -eq 0 ]; then
55
+ ok "all 7 dev-only files excluded from both Claude + Copilot trees"
56
+ else
57
+ fail "leaked files: ${leaked[*]}"
58
+ fi
59
+
60
+ echo "→ 3. Installed tree is free of personal/corporate identifiers"
61
+ # Patterns mirror smoke-personal-data.sh but applied to the INSTALLED output —
62
+ # the surface end users see after running install.js.
63
+ PATTERNS=(
64
+ '\bDIJITAL\b'
65
+ '\bM_ERDEN3_'
66
+ '\bjira\.thy\.com\b'
67
+ '\bbitbucket\.thy\.com\b'
68
+ '\bconfluence\.thy\.com\b'
69
+ '@thy\.com'
70
+ 'mustafaerden@'
71
+ '\bDIJITAL-KANAL-COZUMLERI-DR-IOS\b'
72
+ '\bturkish-airlines'
73
+ )
74
+ hits=0
75
+ for p in "${PATTERNS[@]}"; do
76
+ match=$(grep -rIE "$p" "$TMP/.claude/" "$TMP/.copilot/" 2>/dev/null | head -3 || true)
77
+ if [ -n "$match" ]; then
78
+ hits=$((hits+1))
79
+ echo " ✗ pattern '$p' leaked:"
80
+ echo "$match" | sed 's/^/ /'
81
+ fi
82
+ done
83
+ if [ $hits -eq 0 ]; then
84
+ ok "${#PATTERNS[@]} sensitive patterns clean across the installed tree"
85
+ else
86
+ fail "$hits / ${#PATTERNS[@]} patterns leaked into installed tree"
87
+ fi
88
+
89
+ echo "→ 4. Smoke files in install ARE invocable (don't break end-user testing)"
90
+ # At minimum, smoke-schema-validation.sh and smoke-lib-scripts.sh should
91
+ # install — they're the contract end users can run locally to verify their
92
+ # own setup.
93
+ ESSENTIAL=(
94
+ "smoke-schema-validation.sh"
95
+ "smoke-lib-scripts.sh"
96
+ "smoke-pref-migration.sh"
97
+ )
98
+ for s in "${ESSENTIAL[@]}"; do
99
+ if [ -x "$TMP/.claude/scripts/$s" ]; then
100
+ ok "$s installed + executable"
101
+ else
102
+ fail "$s missing or not executable in installed tree"
103
+ fi
104
+ done
105
+
106
+ echo "→ 5. End-user smokes run cleanly off the installed tree"
107
+ # Pick a network-free smoke and run it pointing at the installed pipeline.
108
+ # This catches regressions where install copies but breaks paths.
109
+ HOME="$TMP" cd "$TMP" && bash "$TMP/.claude/scripts/smoke-schema-validation.sh" >/dev/null 2>&1
110
+ if [ $? -eq 0 ]; then
111
+ ok "smoke-schema-validation passes against installed schemas"
112
+ else
113
+ fail "smoke-schema-validation failed against installed tree"
114
+ fi
115
+
116
+ # --- Summary ----------------------------------------------------------------
117
+ echo ""
118
+ TOTAL=$((PASS+FAIL))
119
+ if [ $FAIL -eq 0 ]; then
120
+ echo "══ install-leak-gate smoke: $PASS passed, 0 failed ══"
121
+ exit 0
122
+ else
123
+ echo "══ install-leak-gate smoke: $PASS passed, $FAIL failed (of $TOTAL) ══" >&2
124
+ exit 1
125
+ fi
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # smoke-issue-comment-template.sh
4
+ #
5
+ # Asserts the canonical issue comment template (refs/channels/issue-comment.md)
6
+ # is wired into Phase 7 and that the template file itself contains the required
7
+ # section anchors.
8
+ #
9
+ # This is a lint, not a behavioural test — it does NOT post a real comment.
10
+ # A behavioural drift check (regex against the most recent 5 issue comments by
11
+ # the configured Git identity) lives in the e2e suite.
12
+
13
+ set -euo pipefail
14
+
15
+ SELF_DIR=$(cd "$(dirname "$0")" && pwd)
16
+ PIPELINE_ROOT=$(cd "$SELF_DIR/.." && pwd)
17
+
18
+ cd "$PIPELINE_ROOT"
19
+
20
+ FAIL=0
21
+
22
+ TEMPLATE="commands/multi-agent/refs/channels/issue-comment.md"
23
+ PHASE7="commands/multi-agent/refs/phases/phase-7-report.md"
24
+
25
+ # 1. Template file exists.
26
+ if [ ! -f "$TEMPLATE" ]; then
27
+ echo "FAIL [smoke-issue-comment-template]: $TEMPLATE missing"
28
+ exit 1
29
+ fi
30
+
31
+ # 2. Template contains all canonical section anchors (English versions; the TR
32
+ # headers map 1:1 via the template's bilingual contract).
33
+ declare -a REQUIRED_ANCHORS=(
34
+ "Geliştirme Detayı"
35
+ "Pull Requests / Branches"
36
+ "Acceptance Criteria"
37
+ "Build & Test"
38
+ "Sonraki adımlar"
39
+ "Ref: #"
40
+ )
41
+
42
+ for anchor in "${REQUIRED_ANCHORS[@]}"; do
43
+ if ! grep -qF "$anchor" "$TEMPLATE"; then
44
+ echo "FAIL [smoke-issue-comment-template]: template missing required anchor: $anchor"
45
+ FAIL=$((FAIL + 1))
46
+ fi
47
+ done
48
+
49
+ # 3. Phase 7 wires the issue channel — must reference both the template and
50
+ # the progress sync script in the same step.
51
+ if ! grep -qF "refs/channels/issue-comment.md" "$PHASE7"; then
52
+ echo "FAIL [smoke-issue-comment-template]: $PHASE7 must reference refs/channels/issue-comment.md"
53
+ FAIL=$((FAIL + 1))
54
+ fi
55
+
56
+ if ! grep -qF "update-issue-progress.sh" "$PHASE7"; then
57
+ echo "FAIL [smoke-issue-comment-template]: $PHASE7 must wire update-issue-progress.sh"
58
+ FAIL=$((FAIL + 1))
59
+ fi
60
+
61
+ # 4. The two paired actions (comment + flag sync) must appear in the same step
62
+ # block — comment FIRST, flags SECOND.
63
+ COMMENT_LINE=$(grep -n "gh issue comment" "$PHASE7" | head -1 | cut -d: -f1 || echo "")
64
+ SYNC_LINE=$(grep -n "update-issue-progress.sh" "$PHASE7" | head -1 | cut -d: -f1 || echo "")
65
+
66
+ if [ -n "$COMMENT_LINE" ] && [ -n "$SYNC_LINE" ]; then
67
+ if [ "$COMMENT_LINE" -gt "$SYNC_LINE" ]; then
68
+ echo "FAIL [smoke-issue-comment-template]: comment must precede progress sync in $PHASE7 (comment line $COMMENT_LINE > sync line $SYNC_LINE)"
69
+ FAIL=$((FAIL + 1))
70
+ fi
71
+ fi
72
+
73
+ # 5. update-issue-progress.sh exists and is executable.
74
+ PROGRESS_SCRIPT="scripts/update-issue-progress.sh"
75
+ if [ ! -x "$PROGRESS_SCRIPT" ]; then
76
+ echo "FAIL [smoke-issue-comment-template]: $PROGRESS_SCRIPT missing or not executable"
77
+ FAIL=$((FAIL + 1))
78
+ fi
79
+
80
+ if [ "$FAIL" -gt 0 ]; then
81
+ echo ""
82
+ echo "smoke-issue-comment-template: $FAIL violation(s)."
83
+ exit 1
84
+ fi
85
+
86
+ echo "smoke-issue-comment-template: ok"