@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,223 @@
1
+ #!/usr/bin/env bash
2
+ # smoke-bitbucket-contract.sh — offline contract test for repo-cache.sh
3
+ # Bitbucket Server backend.
4
+ #
5
+ # Replaces curl with a stub that serves a fixture JSON, then verifies the
6
+ # python parser shape-converts the BB Server `/rest/api/1.0/projects/.../repos`
7
+ # response into the canonical {fullName, name, owner, cloneUrl, provider}
8
+ # schema that the picker consumes.
9
+ #
10
+ # Why offline: live Bitbucket Server REST requires a corporate host + project
11
+ # key + valid token. Without those, contract drift would only surface in
12
+ # production. This smoke pins the request URL, the response parsing, and the
13
+ # auth header construction so changes that break either fail in CI.
14
+
15
+ set -uo pipefail
16
+
17
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
18
+ REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
19
+ LIB_DIR="$REPO_ROOT/pipeline/lib"
20
+
21
+ PASS=0; FAIL=0
22
+ ok() { echo " ✓ $1"; PASS=$((PASS+1)); }
23
+ fail() { echo " ✗ $1" >&2; FAIL=$((FAIL+1)); }
24
+
25
+ REPO_CACHE="$LIB_DIR/repo-cache.sh"
26
+ [ -x "$REPO_CACHE" ] || { fail "repo-cache.sh missing/not executable"; exit 1; }
27
+
28
+ # --- Stub setup -------------------------------------------------------------
29
+ TMP=$(mktemp -d)
30
+ trap 'rm -rf "$TMP"' EXIT
31
+
32
+ # Fixture: minimal but realistic BB Server response shape (as documented at
33
+ # https://docs.atlassian.com/bitbucket-server/rest/7.21.0/bitbucket-rest.html)
34
+ cat > "$TMP/fixture.json" <<'EOF'
35
+ {
36
+ "size": 2,
37
+ "limit": 200,
38
+ "isLastPage": true,
39
+ "values": [
40
+ {
41
+ "slug": "my-ios-app",
42
+ "name": "my-ios-app",
43
+ "project": {"key": "MOBILE", "name": "Mobile Team"},
44
+ "description": "iOS application",
45
+ "links": {
46
+ "clone": [
47
+ {"href": "https://bitbucket.example.com/scm/mobile/my-ios-app.git", "name": "http"},
48
+ {"href": "ssh://git@bitbucket.example.com/mobile/my-ios-app.git", "name": "ssh"}
49
+ ]
50
+ }
51
+ },
52
+ {
53
+ "slug": "common-ui-kit",
54
+ "name": "common-ui-kit",
55
+ "project": {"key": "MOBILE", "name": "Mobile Team"},
56
+ "description": "Shared UI components",
57
+ "links": {
58
+ "clone": [
59
+ {"href": "https://bitbucket.example.com/scm/mobile/common-ui-kit.git", "name": "http"},
60
+ {"href": "ssh://git@bitbucket.example.com/mobile/common-ui-kit.git", "name": "ssh"}
61
+ ]
62
+ }
63
+ }
64
+ ]
65
+ }
66
+ EOF
67
+
68
+ # Stub curl that captures invocation and returns the fixture. PATH-shadows the
69
+ # real curl for this smoke only.
70
+ cat > "$TMP/curl" <<EOF
71
+ #!/usr/bin/env bash
72
+ # Capture every invocation so we can assert the URL + auth header shape.
73
+ echo "INVOCATION:" "\$@" >> "$TMP/curl-calls.log"
74
+ # Echo the fixture body (BB Server response) to stdout — same as real curl -sf.
75
+ cat "$TMP/fixture.json"
76
+ exit 0
77
+ EOF
78
+ chmod +x "$TMP/curl"
79
+
80
+ # Stub `security` so credential-store.sh `get` returns deterministic test values.
81
+ # We do this rather than touching the real Keychain.
82
+ cat > "$TMP/security" <<EOF
83
+ #!/usr/bin/env bash
84
+ # Mimic the relevant security subcommands used by credential-store.sh.
85
+ case "\$1" in
86
+ find-generic-password)
87
+ # macOS path. Args: -s NAME -w
88
+ while [ \$# -gt 0 ]; do
89
+ case "\$1" in
90
+ -s) shift; SVC="\$1" ;;
91
+ esac
92
+ shift || break
93
+ done
94
+ case "\$SVC" in
95
+ mock_BB_Token) echo "test-bb-token" ;;
96
+ mock_BB_User) echo "test-bb-user" ;;
97
+ *) exit 44 ;;
98
+ esac
99
+ ;;
100
+ dump-keychain) ;; # noop for list
101
+ esac
102
+ EOF
103
+ chmod +x "$TMP/security"
104
+
105
+ # Override repo-cache TTL and stub PATH so curl + security come from $TMP.
106
+ export PATH="$TMP:$PATH"
107
+ export REPO_CACHE_TTL=0 # skip cache, force fetch
108
+ export BB_TOKEN_KEY="mock_BB_Token"
109
+ export BB_USER_KEY="mock_BB_User"
110
+ export BB_HOST="bitbucket.example.com"
111
+
112
+ # Run with a sandboxed cache dir so we don't pollute the real one
113
+ export HOME="$TMP/fakehome"
114
+ mkdir -p "$HOME/.claude/cache/repos" "$HOME/.claude/lib"
115
+ ln -sf "$LIB_DIR/credential-store.sh" "$HOME/.claude/lib/credential-store.sh"
116
+
117
+ # --- Run the call -----------------------------------------------------------
118
+ echo "→ 1. repo-cache.sh bitbucket MOBILE — invoke + parse"
119
+ out=$("$REPO_CACHE" bitbucket MOBILE --refresh 2>&1)
120
+ if [ $? -eq 0 ]; then
121
+ ok "exit 0 with valid fixture"
122
+ else
123
+ fail "exit non-zero on valid fixture: $out"
124
+ fi
125
+
126
+ # --- Assert: curl called with correct URL + auth ----------------------------
127
+ echo "→ 2. curl invocation captured the right URL"
128
+ if grep -q "https://bitbucket.example.com/rest/api/1.0/projects/MOBILE/repos" "$TMP/curl-calls.log"; then
129
+ ok "URL matches BB Server REST contract (/rest/api/1.0/projects/{key}/repos)"
130
+ else
131
+ fail "URL wrong; captured: $(cat "$TMP/curl-calls.log")"
132
+ fi
133
+
134
+ if grep -q "limit=200" "$TMP/curl-calls.log"; then
135
+ ok "page limit=200 (the BB Server max)"
136
+ else
137
+ fail "limit param missing"
138
+ fi
139
+
140
+ if grep -q "test-bb-user:test-bb-token" "$TMP/curl-calls.log"; then
141
+ ok "Basic auth uses {user}:{token} from credential store"
142
+ else
143
+ fail "auth header wrong; expected user:token, got: $(grep -o '\-u [^ ]*' "$TMP/curl-calls.log" || echo none)"
144
+ fi
145
+
146
+ # --- Assert: shape conversion produced canonical schema ---------------------
147
+ echo "→ 3. parser converts BB shape → canonical schema"
148
+ canonical=$(printf '%s' "$out" | python3 -c '
149
+ import json, sys
150
+ data = json.load(sys.stdin)
151
+ required = {"fullName","name","owner","description","isFork","updatedAt","cloneUrl","provider"}
152
+ for r in data:
153
+ miss = required - set(r.keys())
154
+ if miss:
155
+ sys.stderr.write("MISS:" + str(sorted(miss)) + "\n")
156
+ sys.exit(1)
157
+ if r["provider"] != "bitbucket":
158
+ sys.stderr.write("BAD_PROVIDER:" + r["provider"] + "\n")
159
+ sys.exit(1)
160
+ print(json.dumps(data))
161
+ ')
162
+ if [ -n "$canonical" ]; then
163
+ ok "every output entry has the canonical fields + provider=bitbucket"
164
+ else
165
+ fail "shape conversion failed"
166
+ fi
167
+
168
+ count=$(printf '%s' "$canonical" | python3 -c 'import json,sys; print(len(json.load(sys.stdin)))')
169
+ if [ "$count" = "2" ]; then
170
+ ok "all values[] entries surfaced (count matches fixture)"
171
+ else
172
+ fail "count $count != 2"
173
+ fi
174
+
175
+ # Specific field plumbing
176
+ first_full=$(printf '%s' "$canonical" | python3 -c 'import json,sys; print(json.load(sys.stdin)[0]["fullName"])')
177
+ if [ "$first_full" = "MOBILE/my-ios-app" ]; then
178
+ ok "fullName format: <projectKey>/<slug>"
179
+ else
180
+ fail "fullName wrong: $first_full"
181
+ fi
182
+
183
+ first_clone=$(printf '%s' "$canonical" | python3 -c 'import json,sys; print(json.load(sys.stdin)[0]["cloneUrl"])')
184
+ if printf '%s' "$first_clone" | grep -q "^ssh://"; then
185
+ ok "cloneUrl prefers ssh link when both available"
186
+ else
187
+ fail "cloneUrl should prefer ssh, got: $first_clone"
188
+ fi
189
+
190
+ # --- Assert: empty values[] handled cleanly ---------------------------------
191
+ echo "→ 4. empty BB project (no repos) returns empty array"
192
+ cat > "$TMP/fixture.json" <<'EOF'
193
+ {"size": 0, "limit": 200, "isLastPage": true, "values": []}
194
+ EOF
195
+ out=$("$REPO_CACHE" bitbucket EMPTY --refresh 2>&1)
196
+ parsed=$(printf '%s' "$out" | python3 -c 'import json,sys; print(len(json.load(sys.stdin)))' 2>/dev/null || echo "ERR")
197
+ if [ "$parsed" = "0" ]; then
198
+ ok "empty project → []"
199
+ else
200
+ fail "empty project parse failed (got: $parsed)"
201
+ fi
202
+
203
+ # --- Assert: missing token exits with diagnostic ----------------------------
204
+ echo "→ 5. missing BB token → exit 3 with hint"
205
+ unset BB_TOKEN_KEY
206
+ err=$("$REPO_CACHE" bitbucket MOBILE --refresh 2>&1 >/dev/null) || true
207
+ # repo-cache.sh fails with `BB_TOKEN_KEY required` from `: "${BB_TOKEN_KEY:?...}"`
208
+ if printf '%s' "$err" | grep -q "BB_TOKEN_KEY"; then
209
+ ok "missing BB_TOKEN_KEY produces a diagnostic"
210
+ else
211
+ fail "no diagnostic on missing token (got: $err)"
212
+ fi
213
+
214
+ # --- Summary ----------------------------------------------------------------
215
+ echo ""
216
+ TOTAL=$((PASS+FAIL))
217
+ if [ $FAIL -eq 0 ]; then
218
+ echo "══ bitbucket-contract smoke: $PASS passed, 0 failed ══"
219
+ exit 0
220
+ else
221
+ echo "══ bitbucket-contract smoke: $PASS passed, $FAIL failed (of $TOTAL) ══" >&2
222
+ exit 1
223
+ fi
@@ -0,0 +1,130 @@
1
+ #!/usr/bin/env bash
2
+ # smoke-channels-flow.sh — asserts the v5.7+ /multi-agent:channels contract:
3
+ # 1. channels.md exists (Claude) + multi-agent-channels SKILL.md exists (Copilot)
4
+ # 2. enrich.md is GONE (Claude) + multi-agent-enrich skill is GONE (Copilot)
5
+ # 3. channels.md declares the 4 channels (pr, jira, confluence, wiki)
6
+ # 4. channels.md declares the 4 content sources (normalAnalysis, testScenarios, auto-diff, manual-note)
7
+ # 5. Reviewer-preserving Bitbucket PUT payload is present (title+description+reviewers+fromRef+toRef+version)
8
+ # 6. 30-min timeout contract referenced in channels.md + phase-7-report.md + modes.md
9
+ # 7. Phase 7 autopilot always-pause rule documented in modes.md
10
+ # 8. Phase 7 report delegates to channels (does NOT inline Jira/Confluence/Wiki logic)
11
+ # 9. schema has reportChannels, reportContent, autopilotReportTimeoutSeconds, wikiScope
12
+ # 10. legacy jiraCommentDefault/confluenceDefault/wikiDefault REMOVED from schema
13
+ # 11. migrate-prefs.mjs has migrateReportChannels() sub-migration
14
+ # 12. preferences-template.json uses new fields (not legacy)
15
+ #
16
+ # Fails loudly on any violation. Intended to run as part of the full smoke suite.
17
+
18
+ set -uo pipefail
19
+
20
+ ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
21
+ CLAUDE_CMD="$ROOT/pipeline/commands/multi-agent/channels.md"
22
+ COPILOT_SKILL="$ROOT/pipeline/skills/shared/core/multi-agent-channels/SKILL.md"
23
+ ENRICH_CMD="$ROOT/pipeline/commands/multi-agent/enrich.md"
24
+ ENRICH_SKILL_DIR="$ROOT/pipeline/skills/shared/core/multi-agent-enrich"
25
+ PHASE7="$ROOT/pipeline/commands/multi-agent/refs/phases/phase-7-report.md"
26
+ MODES="$ROOT/pipeline/commands/multi-agent/refs/phases/modes.md"
27
+ WIKI_CAPTURE="$ROOT/pipeline/commands/multi-agent/refs/wiki-capture.md"
28
+ SCHEMA="$ROOT/pipeline/schemas/prefs.schema.json"
29
+ MIGRATE="$ROOT/pipeline/scripts/migrate-prefs.mjs"
30
+ TEMPLATE="$ROOT/pipeline/preferences-template.json"
31
+
32
+ PASS=0
33
+ FAIL=0
34
+ pass() { PASS=$((PASS + 1)); echo " ✓ $1"; }
35
+ fail() { FAIL=$((FAIL + 1)); echo " ✗ $1"; }
36
+
37
+ check() {
38
+ local label="$1" cmd="$2"
39
+ if eval "$cmd" > /dev/null 2>&1; then pass "$label"; else fail "$label"; fi
40
+ }
41
+
42
+ echo "→ 1. channels command exists (both CLIs)"
43
+ check "Claude channels.md present" "[ -f '$CLAUDE_CMD' ]"
44
+ check "Copilot multi-agent-channels SKILL.md" "[ -f '$COPILOT_SKILL' ]"
45
+
46
+ echo ""
47
+ echo "→ 2. enrich command + skill REMOVED"
48
+ check "Claude enrich.md absent" "[ ! -f '$ENRICH_CMD' ]"
49
+ check "Copilot multi-agent-enrich dir absent" "[ ! -d '$ENRICH_SKILL_DIR' ]"
50
+
51
+ echo ""
52
+ echo "→ 3. channels.md declares 4 kanals"
53
+ check "mentions PR description" "grep -Fq 'PR description' '$CLAUDE_CMD'"
54
+ check "mentions Jira comment" "grep -Fq 'Jira comment' '$CLAUDE_CMD'"
55
+ check "mentions Confluence page" "grep -Fq 'Confluence' '$CLAUDE_CMD'"
56
+ check "mentions Wiki (component-only)" "grep -Fq 'Wiki' '$CLAUDE_CMD'"
57
+
58
+ echo ""
59
+ echo "→ 4. channels.md declares 5 content sources (v5.7.3+ adds teknik analiz)"
60
+ check "Normal analiz content option" "grep -Fq 'Normal analiz' '$CLAUDE_CMD'"
61
+ check "Teknik analiz content option" "grep -Fq 'Teknik analiz' '$CLAUDE_CMD'"
62
+ check "Test senaryoları content option" "grep -Fq 'Test senaryoları' '$CLAUDE_CMD'"
63
+ check "Auto-diff content option" "grep -Fq 'Auto-diff' '$CLAUDE_CMD'"
64
+ check "Manuel not content option" "grep -Fq 'Manuel not' '$CLAUDE_CMD'"
65
+
66
+ echo ""
67
+ echo "→ 5. Reviewer-preserving Bitbucket PUT payload"
68
+ check "mentions reviewers field mandatory" "grep -Fq 'reviewers' '$CLAUDE_CMD'"
69
+ check "mentions fromRef field mandatory" "grep -Fq 'fromRef' '$CLAUDE_CMD'"
70
+ check "mentions toRef field mandatory" "grep -Fq 'toRef' '$CLAUDE_CMD'"
71
+ check "mentions version field mandatory" "grep -Fq 'version' '$CLAUDE_CMD'"
72
+ check "jq --rawfile pattern (real newlines)" "grep -Eq 'jq --rawfile|jq -n' '$CLAUDE_CMD'"
73
+
74
+ echo ""
75
+ echo "→ 6. 30-min timeout contract"
76
+ check "channels.md mentions 30-min timeout" "grep -Eq '30.min|30-min|30 min' '$CLAUDE_CMD'"
77
+ check "phase-7-report.md mentions timeout" "grep -Eq '30.min|30-min|30 min|channelsTimeout' '$PHASE7'"
78
+ check "modes.md mentions timeout" "grep -Eq '30.min|30-min|30 min|timeout' '$MODES'"
79
+
80
+ echo ""
81
+ echo "→ 7. Phase 7 autopilot always-pause rule"
82
+ check "modes.md: Phase 7 autopilot exception" "grep -Fq 'Phase 7 autopilot exception' '$MODES'"
83
+ check "modes.md: STILL PAUSES" "grep -Fq 'STILL PAUSES' '$MODES'"
84
+ check "phase-7-report.md: always pauses" "grep -Eq 'ALWAYS pauses|always pauses' '$PHASE7'"
85
+
86
+ echo ""
87
+ echo "→ 8. Phase 7 delegates to channels (no inline adapters)"
88
+ check "phase-7-report.md invokes channels" "grep -Eq 'multi-agent:channels|multi-agent-channels' '$PHASE7'"
89
+ check "phase-7-report.md has state bundle" "grep -Fq 'state bundle' '$PHASE7'"
90
+ # Old inline per-channel sub-step list (Jira-Comment/Wiki+Figma/Confluence) should be gone
91
+ if grep -Fq 'Jira-Comment' "$PHASE7" && grep -Fq 'Wiki+Figma' "$PHASE7" && grep -Fq 'Confluence' "$PHASE7"; then
92
+ # All three together = old 5-sub-step inline layout
93
+ fail "phase-7-report.md still has old inline 5-sub-step layout (Jira-Comment/Wiki+Figma/Confluence all three)"
94
+ else
95
+ pass "phase-7-report.md no longer inlines old 5-sub-step layout"
96
+ fi
97
+
98
+ echo ""
99
+ echo "→ 9. schema has new v5.7+ fields"
100
+ check "schema has reportChannels" "grep -Fq 'reportChannels' '$SCHEMA'"
101
+ check "schema has reportContent" "grep -Fq 'reportContent' '$SCHEMA'"
102
+ check "schema has autopilotReportTimeoutSeconds" "grep -Fq 'autopilotReportTimeoutSeconds' '$SCHEMA'"
103
+ check "schema has wikiScope" "grep -Fq 'wikiScope' '$SCHEMA'"
104
+
105
+ echo ""
106
+ echo "→ 10. schema PURGED of legacy fields"
107
+ check "schema has NO jiraCommentDefault property" "! grep -Eq '\"jiraCommentDefault\"\\s*:' '$SCHEMA'"
108
+ check "schema has NO confluenceDefault property" "! grep -Eq '\"confluenceDefault\"\\s*:' '$SCHEMA'"
109
+ check "schema has NO wikiDefault property" "! grep -Eq '\"wikiDefault\"\\s*:' '$SCHEMA'"
110
+
111
+ echo ""
112
+ echo "→ 11. migrate-prefs.mjs handles v5.7 migration"
113
+ check "migrate-prefs has migrateReportChannels()" "grep -Fq 'migrateReportChannels' '$MIGRATE'"
114
+ check "migrate-prefs prunes jiraCommentDefault" "grep -Fq 'jiraCommentDefault' '$MIGRATE'"
115
+ check "migrate-prefs prunes confluenceDefault" "grep -Fq 'confluenceDefault' '$MIGRATE'"
116
+ check "migrate-prefs prunes wikiDefault" "grep -Fq 'wikiDefault' '$MIGRATE'"
117
+
118
+ echo ""
119
+ echo "→ 12. template uses new fields (not legacy)"
120
+ check "template has reportChannels" "grep -Fq 'reportChannels' '$TEMPLATE'"
121
+ check "template has reportContent" "grep -Fq 'reportContent' '$TEMPLATE'"
122
+ check "template has wikiScope" "grep -Fq 'wikiScope' '$TEMPLATE'"
123
+ check "template NO jiraCommentDefault" "! grep -Eq '\"jiraCommentDefault\"\\s*:' '$TEMPLATE'"
124
+ check "template NO confluenceDefault" "! grep -Eq '\"confluenceDefault\"\\s*:' '$TEMPLATE'"
125
+ check "template NO wikiDefault" "! grep -Eq '\"wikiDefault\"\\s*:' '$TEMPLATE'"
126
+
127
+ echo ""
128
+ echo "══ channels-flow smoke: $PASS passed, $FAIL failed ══"
129
+ if [ "$FAIL" -gt 0 ]; then exit 1; fi
130
+ exit 0
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # smoke-ci-workflows.sh — structural validator for `.github/workflows/*.yml`.
4
+ #
5
+ # We don't have `act` (or PyYAML) as a hard dependency, and we don't run
6
+ # workflows on GitHub during this smoke (billing-friendly stance). This
7
+ # smoke catches the obvious classes of breakage:
8
+ #
9
+ # - Missing `on:` block / no triggers
10
+ # - Missing `jobs:` block
11
+ # - At least one `steps:` block per job
12
+ # - workflow_dispatch trigger present (project policy: every workflow
13
+ # must be runnable on demand while billing is paused)
14
+ # - Each `uses:` references a pinned major version (no @main / @master)
15
+ # - No `--token=` argv pattern in shell steps (Vercel leak shape)
16
+ #
17
+ # The full job semantics (Docker image resolution, secret resolution,
18
+ # matrix expansion) are NOT checked — install `act` and run
19
+ # `act -W .github/workflows/<file> --list` for that.
20
+ #
21
+ # Exit codes: 0=pass, 1=structural break
22
+
23
+ set -euo pipefail
24
+
25
+ REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
26
+ WF_DIR="$REPO_ROOT/.github/workflows"
27
+
28
+ [ -d "$WF_DIR" ] || { echo "FAIL: .github/workflows/ missing"; exit 2; }
29
+
30
+ PASS=0
31
+ FAIL=0
32
+ pass() { echo " ✓ $*"; PASS=$((PASS + 1)); }
33
+ fail() { echo " ✗ $*"; FAIL=$((FAIL + 1)); }
34
+
35
+ WORKFLOWS=$(find "$WF_DIR" -maxdepth 1 -type f \( -name "*.yml" -o -name "*.yaml" \) | sort)
36
+ [ -n "$WORKFLOWS" ] || { echo "FAIL: no workflows in $WF_DIR"; exit 1; }
37
+
38
+ for wf in $WORKFLOWS; do
39
+ name=$(basename "$wf")
40
+ echo ""
41
+ echo "→ $name"
42
+
43
+ if grep -Eq '^on:' "$wf"; then
44
+ pass "$name has on: trigger block"
45
+ else
46
+ fail "$name missing 'on:' block"
47
+ fi
48
+
49
+ if grep -Eq '^jobs:' "$wf"; then
50
+ pass "$name declares jobs:"
51
+ else
52
+ fail "$name missing 'jobs:' block"
53
+ fi
54
+
55
+ if grep -Eq '^[[:space:]]+steps:' "$wf"; then
56
+ pass "$name has at least one steps: block"
57
+ else
58
+ fail "$name has no steps: block"
59
+ fi
60
+
61
+ if grep -q 'workflow_dispatch' "$wf"; then
62
+ pass "$name supports workflow_dispatch (manual run)"
63
+ else
64
+ fail "$name missing workflow_dispatch — won't be runnable while billing is paused"
65
+ fi
66
+
67
+ # Pin check: `uses: foo/bar@vN` good; `uses: foo/bar@main` bad
68
+ if grep -E '^[[:space:]]+- uses: [^@]+@(main|master)[^[:alnum:]]?' "$wf" >/dev/null 2>&1; then
69
+ fail "$name has uses: pinned to a moving branch (main/master) — pin to a version"
70
+ else
71
+ pass "$name uses: lines are not pinned to main/master"
72
+ fi
73
+
74
+ # Vercel leak shape: `--token=` or `--token ` in a `run:` block
75
+ if grep -E "vercel.*--token[ =]" "$wf" >/dev/null 2>&1; then
76
+ fail "$name contains 'vercel --token=…' — must use VERCEL_TOKEN env + wrapper instead"
77
+ else
78
+ pass "$name does not pass --token= to vercel"
79
+ fi
80
+ done
81
+
82
+ echo ""
83
+ echo "→ workflow inventory"
84
+ echo "$WORKFLOWS" | sed 's|.*/| - |'
85
+
86
+ echo ""
87
+ echo "══ smoke-ci-workflows: $PASS passed, $FAIL failed ══"
88
+ [ "$FAIL" -gt 0 ] && exit 1 || exit 0
@@ -0,0 +1,148 @@
1
+ #!/usr/bin/env bash
2
+ # smoke-clarify.sh
3
+ #
4
+ # Verifies the Phase 0 Step 8 clarifying-question loop:
5
+ # 1. pipeline/agents/task-clarifier.md exists with required frontmatter
6
+ # 2. Agent default model is haiku (cost-driven choice)
7
+ # 3. clarify-output schema is valid JSON
8
+ # 4. Schema enforces clarityScore range (0-10)
9
+ # 5. Schema enforces options minItems 2 / maxItems 4
10
+ # 6. Schema declares stopAndAsk + questions + userAnswers
11
+ # 7. prefs schema exposes clarifyAmbiguous.{enabled, model, minScoreToProceed, maxQuestions, autopilotMode}
12
+ # 8. clarifyAmbiguous.enabled defaults to false (opt-in)
13
+ # 9. autopilotMode default is "log" (preserve autopilot signal without blocking)
14
+ # 10. minScoreToProceed default is 6 (borderline-clear threshold)
15
+ # 11. phase-0-init.md documents Step 8 (Clarification)
16
+ # 12. phase-0-init.md cites task-clarifier.md
17
+ # 13. phase-0-init.md documents all 3 autopilot modes (skip/log/abort)
18
+ #
19
+ # Exit 0 = all pass, 1 = any failure.
20
+
21
+ set -uo pipefail
22
+
23
+ ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
24
+ AGENT="$ROOT/pipeline/agents/task-clarifier.md"
25
+ SCHEMA="$ROOT/pipeline/schemas/clarify-output.schema.json"
26
+ PREFS_SCHEMA="$ROOT/pipeline/schemas/prefs.schema.json"
27
+ PHASE_DOC="$ROOT/pipeline/commands/multi-agent/refs/phases/phase-0-init.md"
28
+
29
+ pass=0
30
+ fail=0
31
+ failures=()
32
+ record_pass() { pass=$((pass + 1)); printf ' \033[0;32mPASS\033[0m %s\n' "$1"; }
33
+ record_fail() { fail=$((fail + 1)); failures+=("$1"); printf ' \033[0;31mFAIL\033[0m %s\n' "$1"; }
34
+
35
+ printf '→ smoke-clarify: Phase 0 Step 8 clarifying-question loop contract\n'
36
+
37
+ # 1-2. Agent file + frontmatter + model
38
+ if [ ! -f "$AGENT" ]; then
39
+ record_fail "pipeline/agents/task-clarifier.md missing"
40
+ else
41
+ fm=$(awk '/^---$/{n++; if(n==2) exit; if(n==1) next} n==1{print}' "$AGENT")
42
+ for key in description model preferredModel; do
43
+ if grep -qE "^${key}:" <<<"$fm"; then
44
+ record_pass "agent frontmatter has '${key}'"
45
+ else
46
+ record_fail "agent frontmatter missing '${key}'"
47
+ fi
48
+ done
49
+ if grep -qE "^model: haiku" <<<"$fm"; then
50
+ record_pass "agent default model is haiku (cost-driven choice)"
51
+ else
52
+ record_fail "agent model default should be haiku"
53
+ fi
54
+ fi
55
+
56
+ # 3-6. Output schema shape
57
+ if [ ! -f "$SCHEMA" ]; then
58
+ record_fail "clarify-output.schema.json missing"
59
+ elif ! jq empty "$SCHEMA" 2>/dev/null; then
60
+ record_fail "clarify-output.schema.json is not valid JSON"
61
+ else
62
+ record_pass "clarify-output.schema.json parses"
63
+ if jq -e '.properties.clarityScore | (.minimum == 0 and .maximum == 10)' "$SCHEMA" >/dev/null 2>&1; then
64
+ record_pass "schema enforces clarityScore range 0-10"
65
+ else
66
+ record_fail "schema clarityScore range incorrect"
67
+ fi
68
+ if jq -e '.properties.questions.items.properties.options | (.minItems == 2 and .maxItems == 4)' "$SCHEMA" >/dev/null 2>&1; then
69
+ record_pass "schema enforces options minItems 2 / maxItems 4"
70
+ else
71
+ record_fail "schema options bounds missing"
72
+ fi
73
+ for prop in stopAndAsk questions userAnswers; do
74
+ if jq -e ".properties.${prop}" "$SCHEMA" >/dev/null 2>&1; then
75
+ record_pass "schema exposes '${prop}'"
76
+ else
77
+ record_fail "schema missing '${prop}'"
78
+ fi
79
+ done
80
+ fi
81
+
82
+ # 7. Prefs schema toggle exposure
83
+ for prop in enabled model minScoreToProceed maxQuestions autopilotMode; do
84
+ if jq -e ".properties.global.properties.clarifyAmbiguous.properties.${prop}" "$PREFS_SCHEMA" >/dev/null 2>&1; then
85
+ record_pass "prefs schema exposes clarifyAmbiguous.${prop}"
86
+ else
87
+ record_fail "prefs schema missing clarifyAmbiguous.${prop}"
88
+ fi
89
+ done
90
+
91
+ # 8. Off by default
92
+ if jq -e '.properties.global.properties.clarifyAmbiguous.properties.enabled
93
+ | has("default") and .default == false' "$PREFS_SCHEMA" >/dev/null 2>&1; then
94
+ record_pass "clarifyAmbiguous.enabled defaults to false (opt-in)"
95
+ else
96
+ record_fail "clarifyAmbiguous.enabled should default to false"
97
+ fi
98
+
99
+ # 9. autopilotMode default = "log"
100
+ ap_default=$(jq -r '.properties.global.properties.clarifyAmbiguous.properties.autopilotMode.default // empty' "$PREFS_SCHEMA")
101
+ if [ "$ap_default" = "log" ]; then
102
+ record_pass "autopilotMode defaults to log"
103
+ else
104
+ record_fail "autopilotMode default should be 'log' (got: ${ap_default:-missing})"
105
+ fi
106
+
107
+ # 10. minScoreToProceed default = 6
108
+ ms_default=$(jq -r '.properties.global.properties.clarifyAmbiguous.properties.minScoreToProceed.default // empty' "$PREFS_SCHEMA")
109
+ if [ "$ms_default" = "6" ]; then
110
+ record_pass "minScoreToProceed defaults to 6"
111
+ else
112
+ record_fail "minScoreToProceed default should be 6 (got: ${ms_default:-missing})"
113
+ fi
114
+
115
+ # 11. Phase doc documents Step 8
116
+ if [ ! -f "$PHASE_DOC" ]; then
117
+ record_fail "phase-0-init.md missing"
118
+ else
119
+ if grep -qE 'Step 8 — Clarification' "$PHASE_DOC"; then
120
+ record_pass "phase-0-init.md documents Step 8 — Clarification"
121
+ else
122
+ record_fail "phase-0-init.md missing Step 8 — Clarification section"
123
+ fi
124
+ # 12. cites task-clarifier
125
+ if grep -qF "task-clarifier.md" "$PHASE_DOC"; then
126
+ record_pass "phase doc cites agents/task-clarifier.md"
127
+ else
128
+ record_fail "phase doc must reference agents/task-clarifier.md"
129
+ fi
130
+ # 13. all 3 autopilot modes named in the doc
131
+ has_skip=0; has_log=0; has_abort=0
132
+ grep -q "\`skip\`" "$PHASE_DOC" && has_skip=1
133
+ grep -q "\`log\`" "$PHASE_DOC" && has_log=1
134
+ grep -q "\`abort\`" "$PHASE_DOC" && has_abort=1
135
+ if [ "$has_skip" = "1" ] && [ "$has_log" = "1" ] && [ "$has_abort" = "1" ]; then
136
+ record_pass "phase doc documents all 3 autopilot modes (skip/log/abort)"
137
+ else
138
+ record_fail "phase doc missing one of skip/log/abort autopilot modes"
139
+ fi
140
+ fi
141
+
142
+ printf '\n══ clarify smoke: %d passed, %d failed ══\n' "$pass" "$fail"
143
+ if [ "$fail" -gt 0 ]; then
144
+ printf '\nFailures:\n'
145
+ for msg in "${failures[@]}"; do printf ' - %s\n' "$msg"; done
146
+ exit 1
147
+ fi
148
+ exit 0
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env bash
2
+ # smoke-commands-skills-parity.sh — catch drift between the dual source of
3
+ # truth for pipeline sub-commands.
4
+ #
5
+ # Current state: pipeline/commands/multi-agent/{cmd}.md (Claude slash
6
+ # commands) and pipeline/skills/shared/multi-agent-{cmd}/SKILL.md (Copilot
7
+ # skills) describe the same behaviors in parallel. ROADMAP 4.0 will collapse
8
+ # them to a single source. Until then, any command that exists in one but
9
+ # not the other is a bug — users will see feature mismatch between CLIs.
10
+ #
11
+ # This smoke enforces structural parity (every command has a matching skill).
12
+ # Content drift is a separate problem — sync-parity-check.sh is the manual
13
+ # watchdog for that.
14
+
15
+ set -uo pipefail
16
+
17
+ REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
18
+ CMDS_DIR="$REPO_ROOT/pipeline/commands/multi-agent"
19
+ SKILLS_DIR="$REPO_ROOT/pipeline/skills/shared/core"
20
+
21
+ if [ ! -d "$CMDS_DIR" ]; then
22
+ echo "FAIL: $CMDS_DIR missing" >&2
23
+ exit 1
24
+ fi
25
+ if [ ! -d "$SKILLS_DIR" ]; then
26
+ echo "FAIL: $SKILLS_DIR missing" >&2
27
+ exit 1
28
+ fi
29
+
30
+ PASS=0
31
+ FAIL=0
32
+ pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
33
+ fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
34
+
35
+ # Commands to check — top-level *.md files under commands/multi-agent/.
36
+ # Underscore-prefixed files (e.g. _account-picker.md) are internal fragments
37
+ # loaded by other commands via Read; they're not invocable slash commands and
38
+ # intentionally have no matching skill.
39
+ CMDS=$(find "$CMDS_DIR" -maxdepth 1 -name "*.md" ! -name "_*" -exec basename {} .md \; | sort)
40
+
41
+ # help.md in commands maps to multi-agent-help skill; the main "multi-agent"
42
+ # skill covers the behavior documented across multiple command files, so we
43
+ # allow the orchestrator skill to stand in.
44
+ ORCHESTRATOR_COVERS=("help" "setup" "status" "log" "resume" "kill" "purge")
45
+
46
+ orchestrator_covers() {
47
+ for name in "${ORCHESTRATOR_COVERS[@]}"; do
48
+ [ "$name" = "$1" ] && return 0
49
+ done
50
+ return 1
51
+ }
52
+
53
+ echo "→ Checking that every command has a corresponding skill"
54
+ for cmd in $CMDS; do
55
+ skill_dir="$SKILLS_DIR/multi-agent-$cmd"
56
+ if [ -d "$skill_dir" ] && [ -f "$skill_dir/SKILL.md" ]; then
57
+ pass "commands/multi-agent/$cmd.md ↔ skills/shared/multi-agent-$cmd/"
58
+ elif orchestrator_covers "$cmd" && [ -f "$SKILLS_DIR/multi-agent/SKILL.md" ]; then
59
+ pass "commands/multi-agent/$cmd.md covered by orchestrator skill (skills/shared/multi-agent/)"
60
+ else
61
+ fail "commands/multi-agent/$cmd.md has no matching skill"
62
+ fi
63
+ done
64
+
65
+ echo ""
66
+ echo "→ Checking that every multi-agent-* skill has a corresponding command"
67
+ SKILLS=$(find "$SKILLS_DIR" -maxdepth 1 -type d -name "multi-agent-*" -exec basename {} \; | sed 's/^multi-agent-//' | sort)
68
+
69
+ for skill in $SKILLS; do
70
+ cmd_file="$CMDS_DIR/$skill.md"
71
+ # A few skills are Copilot-CLI-style conveniences without a Claude slash equivalent:
72
+ case "$skill" in
73
+ autopilot | dev-autopilot) # dash-style shortcut skills, the flags are documented in help.md
74
+ pass "skills/shared/multi-agent-$skill/ is a Copilot flag shortcut (documented in help)"
75
+ continue
76
+ ;;
77
+ esac
78
+ if [ -f "$cmd_file" ]; then
79
+ pass "skills/shared/multi-agent-$skill/ ↔ commands/multi-agent/$skill.md"
80
+ else
81
+ fail "skills/shared/multi-agent-$skill/ has no matching command"
82
+ fi
83
+ done
84
+
85
+ echo ""
86
+ echo "══ commands-skills-parity smoke: $PASS passed, $FAIL failed ══"
87
+ [ "$FAIL" -eq 0 ] || exit 1