buildanything 1.7.1 → 2.0.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 (633) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/.claude-plugin/plugin.json +9 -3
  3. package/CHANGELOG.md +112 -0
  4. package/README.md +2 -2
  5. package/agents/a11y-architect.md +166 -0
  6. package/agents/business-model.md +80 -29
  7. package/agents/code-architect.md +75 -0
  8. package/agents/code-reviewer.md +255 -0
  9. package/agents/code-simplifier.md +64 -0
  10. package/agents/design-brand-guardian.md +293 -53
  11. package/agents/design-critic.md +139 -0
  12. package/agents/design-inclusive-visuals-specialist.md +6 -19
  13. package/agents/design-ui-designer.md +335 -56
  14. package/agents/design-ux-architect.md +403 -55
  15. package/agents/design-ux-researcher.md +264 -49
  16. package/agents/engineering-ai-engineer.md +26 -36
  17. package/agents/engineering-backend-architect.md +185 -36
  18. package/agents/engineering-data-engineer.md +225 -43
  19. package/agents/engineering-devops-automator.md +227 -74
  20. package/agents/engineering-frontend-developer.md +210 -34
  21. package/agents/engineering-mobile-app-builder.md +6 -1
  22. package/agents/engineering-rapid-prototyper.md +30 -9
  23. package/agents/engineering-security-engineer.md +263 -61
  24. package/agents/engineering-senior-developer.md +128 -19
  25. package/agents/engineering-sre.md +84 -0
  26. package/agents/engineering-technical-writer.md +285 -41
  27. package/agents/feature-intel.md +110 -0
  28. package/agents/ios-app-review-guardian.md +66 -0
  29. package/agents/ios-foundation-models-specialist.md +64 -0
  30. package/agents/ios-storekit-specialist.md +59 -0
  31. package/agents/ios-swift-architect.md +129 -0
  32. package/agents/ios-swift-search.md +137 -0
  33. package/agents/ios-swift-ui-design.md +136 -0
  34. package/agents/marketing-app-store-optimizer.md +246 -64
  35. package/agents/planner.md +216 -0
  36. package/agents/pr-test-analyzer.md +63 -0
  37. package/agents/product-feedback-synthesizer.md +8 -2
  38. package/agents/refactor-cleaner.md +102 -0
  39. package/agents/security-reviewer.md +128 -0
  40. package/agents/silent-failure-hunter.md +54 -0
  41. package/agents/swift-build-resolver.md +119 -0
  42. package/agents/swift-reviewer.md +112 -0
  43. package/agents/tech-feasibility.md +21 -1
  44. package/agents/testing-api-tester.md +236 -59
  45. package/agents/testing-evidence-collector.md +26 -1
  46. package/agents/testing-performance-benchmarker.md +21 -1
  47. package/agents/testing-reality-checker.md +6 -1
  48. package/agents/visual-research.md +116 -0
  49. package/bin/adapters/cycle-counter-tool.ts +155 -0
  50. package/bin/adapters/scribe-tool.ts +71 -0
  51. package/bin/adapters/state-save-tool.ts +130 -0
  52. package/bin/adapters/write-lease-tool.ts +127 -0
  53. package/bin/buildanything-runtime.js +15 -0
  54. package/bin/buildanything-runtime.ts +328 -0
  55. package/bin/setup.js +83 -8
  56. package/commands/add-feature.md +2 -0
  57. package/commands/build.md +752 -332
  58. package/commands/fix.md +65 -0
  59. package/commands/self-check.md +121 -0
  60. package/commands/setup.md +114 -0
  61. package/commands/ux-review.md +63 -0
  62. package/commands/verify.md +69 -0
  63. package/docs/migration/agents.yaml +729 -0
  64. package/docs/migration/phase-graph.yaml +1088 -0
  65. package/docs/migration/sdk-host-compat.md +18 -0
  66. package/hooks/compile-writer-owner-cache.ts +171 -0
  67. package/hooks/hooks.json +36 -0
  68. package/hooks/pre-tool-use +19 -0
  69. package/hooks/pre-tool-use.ts +776 -0
  70. package/hooks/record-mode-transitions.ts +178 -0
  71. package/hooks/session-start +89 -2
  72. package/hooks/subagent-start +17 -0
  73. package/hooks/subagent-start.ts +471 -0
  74. package/hooks/subagent-stop +17 -0
  75. package/hooks/subagent-stop.ts +153 -0
  76. package/package.json +28 -5
  77. package/protocols/architecture-schema.md +171 -0
  78. package/protocols/build-fix.md +52 -0
  79. package/protocols/cleanup.md +54 -0
  80. package/protocols/decision-log.md +131 -0
  81. package/protocols/eval-harness.md +61 -0
  82. package/protocols/fake-data-detector.md +64 -0
  83. package/protocols/ios-context.md +234 -0
  84. package/protocols/ios-frameworks-map.md +323 -0
  85. package/protocols/ios-phase-branches.md +337 -0
  86. package/protocols/ios-preflight.md +27 -0
  87. package/protocols/launch-readiness.md +258 -0
  88. package/protocols/metric-loop.md +153 -0
  89. package/protocols/smoke-test.md +118 -0
  90. package/protocols/state-schema.json +388 -0
  91. package/protocols/state-schema.md +172 -0
  92. package/protocols/verify.md +127 -0
  93. package/protocols/visual-dna.md +185 -0
  94. package/protocols/web-phase-branches.md +351 -0
  95. package/skills/ios/_VENDORED.md +62 -0
  96. package/skills/ios/activitykit/LICENSE +131 -0
  97. package/skills/ios/activitykit/SKILL.md +505 -0
  98. package/skills/ios/activitykit/references/activitykit-patterns.md +868 -0
  99. package/skills/ios/app-intents/LICENSE +131 -0
  100. package/skills/ios/app-intents/SKILL.md +494 -0
  101. package/skills/ios/app-intents/references/appintents-advanced.md +1076 -0
  102. package/skills/ios/app-store-connect-metadata/SKILL.md +148 -0
  103. package/skills/ios/apple-on-device-ai/LICENSE +131 -0
  104. package/skills/ios/apple-on-device-ai/SKILL.md +505 -0
  105. package/skills/ios/apple-on-device-ai/references/coreml-conversion.md +425 -0
  106. package/skills/ios/apple-on-device-ai/references/coreml-optimization.md +344 -0
  107. package/skills/ios/apple-on-device-ai/references/foundation-models.md +508 -0
  108. package/skills/ios/apple-on-device-ai/references/mlx-swift.md +285 -0
  109. package/skills/ios/asc-privacy-manifest/SKILL.md +350 -0
  110. package/skills/ios/hig-components-content/SKILL.md +86 -0
  111. package/skills/ios/hig-components-content/references/activity-views.md +79 -0
  112. package/skills/ios/hig-components-content/references/charts.md +180 -0
  113. package/skills/ios/hig-components-content/references/collections.md +48 -0
  114. package/skills/ios/hig-components-content/references/color-wells.md +42 -0
  115. package/skills/ios/hig-components-content/references/image-views.md +82 -0
  116. package/skills/ios/hig-components-content/references/image-wells.md +34 -0
  117. package/skills/ios/hig-components-content/references/lockups.md +78 -0
  118. package/skills/ios/hig-components-content/references/web-views.md +36 -0
  119. package/skills/ios/hig-components-controls/SKILL.md +88 -0
  120. package/skills/ios/hig-components-controls/references/combo-boxes.md +40 -0
  121. package/skills/ios/hig-components-controls/references/controls.md +112 -0
  122. package/skills/ios/hig-components-controls/references/gauges.md +74 -0
  123. package/skills/ios/hig-components-controls/references/labels.md +92 -0
  124. package/skills/ios/hig-components-controls/references/pickers.md +128 -0
  125. package/skills/ios/hig-components-controls/references/rating-indicators.md +38 -0
  126. package/skills/ios/hig-components-controls/references/segmented-controls.md +94 -0
  127. package/skills/ios/hig-components-controls/references/sliders.md +92 -0
  128. package/skills/ios/hig-components-controls/references/steppers.md +40 -0
  129. package/skills/ios/hig-components-controls/references/text-fields.md +88 -0
  130. package/skills/ios/hig-components-controls/references/text-views.md +56 -0
  131. package/skills/ios/hig-components-controls/references/toggles.md +127 -0
  132. package/skills/ios/hig-components-controls/references/token-fields.md +48 -0
  133. package/skills/ios/hig-components-controls/references/virtual-keyboards.md +156 -0
  134. package/skills/ios/hig-components-dialogs/SKILL.md +76 -0
  135. package/skills/ios/hig-components-dialogs/references/action-sheets.md +74 -0
  136. package/skills/ios/hig-components-dialogs/references/alerts.md +158 -0
  137. package/skills/ios/hig-components-dialogs/references/digit-entry-views.md +32 -0
  138. package/skills/ios/hig-components-dialogs/references/popovers.md +81 -0
  139. package/skills/ios/hig-components-dialogs/references/sheets.md +157 -0
  140. package/skills/ios/hig-components-layout/SKILL.md +99 -0
  141. package/skills/ios/hig-components-layout/references/boxes.md +48 -0
  142. package/skills/ios/hig-components-layout/references/column-views.md +44 -0
  143. package/skills/ios/hig-components-layout/references/lists-and-tables.md +99 -0
  144. package/skills/ios/hig-components-layout/references/ornaments.md +56 -0
  145. package/skills/ios/hig-components-layout/references/outline-views.md +64 -0
  146. package/skills/ios/hig-components-layout/references/panels.md +75 -0
  147. package/skills/ios/hig-components-layout/references/scroll-views.md +123 -0
  148. package/skills/ios/hig-components-layout/references/sidebars.md +109 -0
  149. package/skills/ios/hig-components-layout/references/split-views.md +110 -0
  150. package/skills/ios/hig-components-layout/references/tab-bars.md +173 -0
  151. package/skills/ios/hig-components-layout/references/tab-views.md +68 -0
  152. package/skills/ios/hig-components-layout/references/windows.md +188 -0
  153. package/skills/ios/hig-components-menus/SKILL.md +81 -0
  154. package/skills/ios/hig-components-menus/references/action-button.md +61 -0
  155. package/skills/ios/hig-components-menus/references/buttons.md +261 -0
  156. package/skills/ios/hig-components-menus/references/context-menus.md +105 -0
  157. package/skills/ios/hig-components-menus/references/disclosure-controls.md +84 -0
  158. package/skills/ios/hig-components-menus/references/dock-menus.md +40 -0
  159. package/skills/ios/hig-components-menus/references/edit-menus.md +88 -0
  160. package/skills/ios/hig-components-menus/references/menus.md +171 -0
  161. package/skills/ios/hig-components-menus/references/pop-up-buttons.md +70 -0
  162. package/skills/ios/hig-components-menus/references/pull-down-buttons.md +77 -0
  163. package/skills/ios/hig-components-menus/references/the-menu-bar.md +303 -0
  164. package/skills/ios/hig-components-menus/references/toolbars.md +256 -0
  165. package/skills/ios/hig-components-search/SKILL.md +68 -0
  166. package/skills/ios/hig-components-search/references/page-controls.md +120 -0
  167. package/skills/ios/hig-components-search/references/path-controls.md +40 -0
  168. package/skills/ios/hig-components-search/references/search-fields.md +189 -0
  169. package/skills/ios/hig-components-status/SKILL.md +80 -0
  170. package/skills/ios/hig-components-status/references/activity-rings.md +105 -0
  171. package/skills/ios/hig-components-status/references/progress-indicators.md +116 -0
  172. package/skills/ios/hig-components-status/references/status-bars.md +38 -0
  173. package/skills/ios/hig-components-system/SKILL.md +88 -0
  174. package/skills/ios/hig-components-system/references/app-clips.md +387 -0
  175. package/skills/ios/hig-components-system/references/app-shortcuts.md +114 -0
  176. package/skills/ios/hig-components-system/references/complications.md +425 -0
  177. package/skills/ios/hig-components-system/references/home-screen-quick-actions.md +42 -0
  178. package/skills/ios/hig-components-system/references/live-activities.md +442 -0
  179. package/skills/ios/hig-components-system/references/notifications.md +153 -0
  180. package/skills/ios/hig-components-system/references/top-shelf.md +135 -0
  181. package/skills/ios/hig-components-system/references/watch-faces.md +40 -0
  182. package/skills/ios/hig-components-system/references/widgets.md +517 -0
  183. package/skills/ios/hig-foundations/SKILL.md +98 -0
  184. package/skills/ios/hig-foundations/references/accessibility.md +291 -0
  185. package/skills/ios/hig-foundations/references/app-icons.md +210 -0
  186. package/skills/ios/hig-foundations/references/branding.md +44 -0
  187. package/skills/ios/hig-foundations/references/color.md +274 -0
  188. package/skills/ios/hig-foundations/references/dark-mode.md +116 -0
  189. package/skills/ios/hig-foundations/references/icons.md +263 -0
  190. package/skills/ios/hig-foundations/references/images.md +176 -0
  191. package/skills/ios/hig-foundations/references/immersive-experiences.md +174 -0
  192. package/skills/ios/hig-foundations/references/inclusion.md +189 -0
  193. package/skills/ios/hig-foundations/references/layout.md +425 -0
  194. package/skills/ios/hig-foundations/references/materials.md +238 -0
  195. package/skills/ios/hig-foundations/references/motion.md +103 -0
  196. package/skills/ios/hig-foundations/references/privacy.md +231 -0
  197. package/skills/ios/hig-foundations/references/right-to-left.md +206 -0
  198. package/skills/ios/hig-foundations/references/sf-symbols.md +310 -0
  199. package/skills/ios/hig-foundations/references/spatial-layout.md +142 -0
  200. package/skills/ios/hig-foundations/references/typography.md +1146 -0
  201. package/skills/ios/hig-foundations/references/writing.md +91 -0
  202. package/skills/ios/hig-inputs/SKILL.md +94 -0
  203. package/skills/ios/hig-inputs/references/apple-pencil-and-scribble.md +148 -0
  204. package/skills/ios/hig-inputs/references/camera-control.md +107 -0
  205. package/skills/ios/hig-inputs/references/digital-crown.md +83 -0
  206. package/skills/ios/hig-inputs/references/eyes.md +120 -0
  207. package/skills/ios/hig-inputs/references/focus-and-selection.md +120 -0
  208. package/skills/ios/hig-inputs/references/game-controls.md +156 -0
  209. package/skills/ios/hig-inputs/references/gestures.md +208 -0
  210. package/skills/ios/hig-inputs/references/gyro-and-accelerometer.md +40 -0
  211. package/skills/ios/hig-inputs/references/keyboards.md +234 -0
  212. package/skills/ios/hig-inputs/references/nearby-interactions.md +70 -0
  213. package/skills/ios/hig-inputs/references/pointing-devices.md +237 -0
  214. package/skills/ios/hig-inputs/references/remotes.md +67 -0
  215. package/skills/ios/hig-inputs/references/spatial-interactions.md +70 -0
  216. package/skills/ios/hig-patterns/SKILL.md +104 -0
  217. package/skills/ios/hig-patterns/references/charting-data.md +81 -0
  218. package/skills/ios/hig-patterns/references/collaboration-and-sharing.md +86 -0
  219. package/skills/ios/hig-patterns/references/drag-and-drop.md +134 -0
  220. package/skills/ios/hig-patterns/references/entering-data.md +69 -0
  221. package/skills/ios/hig-patterns/references/feedback.md +67 -0
  222. package/skills/ios/hig-patterns/references/file-management.md +135 -0
  223. package/skills/ios/hig-patterns/references/going-full-screen.md +79 -0
  224. package/skills/ios/hig-patterns/references/launching.md +81 -0
  225. package/skills/ios/hig-patterns/references/live-viewing-apps.md +79 -0
  226. package/skills/ios/hig-patterns/references/loading.md +59 -0
  227. package/skills/ios/hig-patterns/references/managing-accounts.md +107 -0
  228. package/skills/ios/hig-patterns/references/managing-notifications.md +99 -0
  229. package/skills/ios/hig-patterns/references/modality.md +82 -0
  230. package/skills/ios/hig-patterns/references/multitasking.md +131 -0
  231. package/skills/ios/hig-patterns/references/offering-help.md +117 -0
  232. package/skills/ios/hig-patterns/references/onboarding.md +69 -0
  233. package/skills/ios/hig-patterns/references/playing-audio.md +124 -0
  234. package/skills/ios/hig-patterns/references/playing-haptics.md +280 -0
  235. package/skills/ios/hig-patterns/references/playing-video.md +180 -0
  236. package/skills/ios/hig-patterns/references/printing.md +50 -0
  237. package/skills/ios/hig-patterns/references/ratings-and-reviews.md +48 -0
  238. package/skills/ios/hig-patterns/references/searching.md +70 -0
  239. package/skills/ios/hig-patterns/references/settings.md +84 -0
  240. package/skills/ios/hig-patterns/references/undo-and-redo.md +58 -0
  241. package/skills/ios/hig-patterns/references/workouts.md +76 -0
  242. package/skills/ios/hig-platforms/SKILL.md +84 -0
  243. package/skills/ios/hig-platforms/references/designing-for-games.md +159 -0
  244. package/skills/ios/hig-platforms/references/designing-for-ios.md +66 -0
  245. package/skills/ios/hig-platforms/references/designing-for-ipados.md +64 -0
  246. package/skills/ios/hig-platforms/references/designing-for-macos.md +70 -0
  247. package/skills/ios/hig-platforms/references/designing-for-tvos.md +68 -0
  248. package/skills/ios/hig-platforms/references/designing-for-visionos.md +85 -0
  249. package/skills/ios/hig-platforms/references/designing-for-watchos.md +74 -0
  250. package/skills/ios/hig-project-context/SKILL.md +133 -0
  251. package/skills/ios/hig-technologies/SKILL.md +107 -0
  252. package/skills/ios/hig-technologies/references/airplay.md +125 -0
  253. package/skills/ios/hig-technologies/references/always-on.md +62 -0
  254. package/skills/ios/hig-technologies/references/apple-pay.md +441 -0
  255. package/skills/ios/hig-technologies/references/augmented-reality.md +247 -0
  256. package/skills/ios/hig-technologies/references/carekit.md +224 -0
  257. package/skills/ios/hig-technologies/references/carplay.md +119 -0
  258. package/skills/ios/hig-technologies/references/game-center.md +343 -0
  259. package/skills/ios/hig-technologies/references/generative-ai.md +110 -0
  260. package/skills/ios/hig-technologies/references/healthkit.md +120 -0
  261. package/skills/ios/hig-technologies/references/homekit.md +343 -0
  262. package/skills/ios/hig-technologies/references/icloud.md +52 -0
  263. package/skills/ios/hig-technologies/references/id-verifier.md +73 -0
  264. package/skills/ios/hig-technologies/references/imessage-apps-and-stickers.md +105 -0
  265. package/skills/ios/hig-technologies/references/in-app-purchase.md +263 -0
  266. package/skills/ios/hig-technologies/references/live-photos.md +54 -0
  267. package/skills/ios/hig-technologies/references/mac-catalyst.md +216 -0
  268. package/skills/ios/hig-technologies/references/machine-learning.md +394 -0
  269. package/skills/ios/hig-technologies/references/maps.md +221 -0
  270. package/skills/ios/hig-technologies/references/nfc.md +51 -0
  271. package/skills/ios/hig-technologies/references/photo-editing.md +40 -0
  272. package/skills/ios/hig-technologies/references/researchkit.md +134 -0
  273. package/skills/ios/hig-technologies/references/shareplay.md +142 -0
  274. package/skills/ios/hig-technologies/references/shazamkit.md +47 -0
  275. package/skills/ios/hig-technologies/references/sign-in-with-apple.md +288 -0
  276. package/skills/ios/hig-technologies/references/siri.md +523 -0
  277. package/skills/ios/hig-technologies/references/tap-to-pay-on-iphone.md +208 -0
  278. package/skills/ios/hig-technologies/references/voiceover.md +90 -0
  279. package/skills/ios/hig-technologies/references/wallet.md +420 -0
  280. package/skills/ios/ios-26-platform/SKILL.md +53 -0
  281. package/skills/ios/ios-26-platform/references/automatic-adoption.md +161 -0
  282. package/skills/ios/ios-26-platform/references/backward-compat.md +238 -0
  283. package/skills/ios/ios-26-platform/references/liquid-glass.md +255 -0
  284. package/skills/ios/ios-26-platform/references/swiftui-apis.md +277 -0
  285. package/skills/ios/ios-26-platform/references/toolbar-navigation.md +250 -0
  286. package/skills/ios/ios-bootstrap/SKILL.md +107 -0
  287. package/skills/ios/ios-bootstrap/references/apple-docs-mcp-config.md +28 -0
  288. package/skills/ios/ios-bootstrap/references/new-project-dialog.md +41 -0
  289. package/skills/ios/ios-bootstrap/references/xcode-mcp-config.md +29 -0
  290. package/skills/ios/ios-debugger-agent/LICENSE +21 -0
  291. package/skills/ios/ios-debugger-agent/SKILL.md +58 -0
  292. package/skills/ios/ios-debugger-agent/agents/openai.yaml +4 -0
  293. package/skills/ios/ios-entitlements-generator/SKILL.md +47 -0
  294. package/skills/ios/ios-info-plist-hardening/SKILL.md +130 -0
  295. package/skills/ios/ios-maestro-flow-author/SKILL.md +68 -0
  296. package/skills/ios/ios-maestro-flow-author/references/input-and-scroll.yaml +17 -0
  297. package/skills/ios/ios-maestro-flow-author/references/modal-and-dismiss.yaml +14 -0
  298. package/skills/ios/ios-maestro-flow-author/references/onboarding-flow.yaml +16 -0
  299. package/skills/ios/ios-maestro-flow-author/references/tab-navigation.yaml +13 -0
  300. package/skills/ios/ios-maestro-flow-author/references/tap-and-assert.yaml +9 -0
  301. package/skills/ios/swift-accessibility/LICENSE +21 -0
  302. package/skills/ios/swift-accessibility/SKILL.md +371 -0
  303. package/skills/ios/swift-accessibility/examples/before-after-appkit.md +446 -0
  304. package/skills/ios/swift-accessibility/examples/before-after-swiftui.md +441 -0
  305. package/skills/ios/swift-accessibility/examples/before-after-uikit.md +464 -0
  306. package/skills/ios/swift-accessibility/references/assistive-access.md +441 -0
  307. package/skills/ios/swift-accessibility/references/display-settings.md +491 -0
  308. package/skills/ios/swift-accessibility/references/dynamic-type.md +420 -0
  309. package/skills/ios/swift-accessibility/references/media-accessibility.md +421 -0
  310. package/skills/ios/swift-accessibility/references/motor-input.md +393 -0
  311. package/skills/ios/swift-accessibility/references/nutrition-labels.md +362 -0
  312. package/skills/ios/swift-accessibility/references/platform-specifics.md +515 -0
  313. package/skills/ios/swift-accessibility/references/semantic-structure.md +585 -0
  314. package/skills/ios/swift-accessibility/references/testing-auditing.md +507 -0
  315. package/skills/ios/swift-accessibility/references/voice-control.md +317 -0
  316. package/skills/ios/swift-accessibility/references/voiceover-swiftui.md +584 -0
  317. package/skills/ios/swift-accessibility/references/voiceover-uikit.md +519 -0
  318. package/skills/ios/swift-accessibility/references/wcag-mapping.md +167 -0
  319. package/skills/ios/swift-accessibility/resources/audit-template.swift +128 -0
  320. package/skills/ios/swift-accessibility/resources/qa-checklist.md +258 -0
  321. package/skills/ios/swift-actor-persistence/SKILL.md +143 -0
  322. package/skills/ios/swift-concurrency/LICENSE +21 -0
  323. package/skills/ios/swift-concurrency/SKILL.md +171 -0
  324. package/skills/ios/swift-concurrency/references/_index.md +50 -0
  325. package/skills/ios/swift-concurrency/references/actors.md +660 -0
  326. package/skills/ios/swift-concurrency/references/async-algorithms.md +847 -0
  327. package/skills/ios/swift-concurrency/references/async-await-basics.md +266 -0
  328. package/skills/ios/swift-concurrency/references/async-sequences.md +710 -0
  329. package/skills/ios/swift-concurrency/references/core-data.md +560 -0
  330. package/skills/ios/swift-concurrency/references/glossary.md +135 -0
  331. package/skills/ios/swift-concurrency/references/linting.md +155 -0
  332. package/skills/ios/swift-concurrency/references/memory-management.md +569 -0
  333. package/skills/ios/swift-concurrency/references/migration.md +1104 -0
  334. package/skills/ios/swift-concurrency/references/performance.md +593 -0
  335. package/skills/ios/swift-concurrency/references/sendable.md +598 -0
  336. package/skills/ios/swift-concurrency/references/tasks.md +636 -0
  337. package/skills/ios/swift-concurrency/references/testing.md +592 -0
  338. package/skills/ios/swift-concurrency/references/threading.md +495 -0
  339. package/skills/ios/swift-concurrency-6-2/SKILL.md +216 -0
  340. package/skills/ios/swift-protocol-di-testing/SKILL.md +190 -0
  341. package/skills/ios/swift-security-expert/LICENSE +21 -0
  342. package/skills/ios/swift-security-expert/SKILL.md +470 -0
  343. package/skills/ios/swift-security-expert/references/biometric-authentication.md +565 -0
  344. package/skills/ios/swift-security-expert/references/certificate-trust.md +592 -0
  345. package/skills/ios/swift-security-expert/references/common-anti-patterns.md +690 -0
  346. package/skills/ios/swift-security-expert/references/compliance-owasp-mapping.md +537 -0
  347. package/skills/ios/swift-security-expert/references/credential-storage-patterns.md +721 -0
  348. package/skills/ios/swift-security-expert/references/cryptokit-public-key.md +505 -0
  349. package/skills/ios/swift-security-expert/references/cryptokit-symmetric.md +497 -0
  350. package/skills/ios/swift-security-expert/references/keychain-access-control.md +508 -0
  351. package/skills/ios/swift-security-expert/references/keychain-fundamentals.md +596 -0
  352. package/skills/ios/swift-security-expert/references/keychain-item-classes.md +476 -0
  353. package/skills/ios/swift-security-expert/references/keychain-sharing.md +458 -0
  354. package/skills/ios/swift-security-expert/references/migration-legacy-stores.md +727 -0
  355. package/skills/ios/swift-security-expert/references/secure-enclave.md +539 -0
  356. package/skills/ios/swift-security-expert/references/testing-security-code.md +781 -0
  357. package/skills/ios/swift-testing-expert/LICENSE +21 -0
  358. package/skills/ios/swift-testing-expert/SKILL.md +79 -0
  359. package/skills/ios/swift-testing-expert/references/_index.md +12 -0
  360. package/skills/ios/swift-testing-expert/references/async-testing-and-waiting.md +127 -0
  361. package/skills/ios/swift-testing-expert/references/expectations.md +145 -0
  362. package/skills/ios/swift-testing-expert/references/fundamentals.md +141 -0
  363. package/skills/ios/swift-testing-expert/references/migration-from-xctest.md +127 -0
  364. package/skills/ios/swift-testing-expert/references/parallelization-and-isolation.md +95 -0
  365. package/skills/ios/swift-testing-expert/references/parameterized-testing.md +284 -0
  366. package/skills/ios/swift-testing-expert/references/performance-and-best-practices.md +187 -0
  367. package/skills/ios/swift-testing-expert/references/traits-and-tags.md +114 -0
  368. package/skills/ios/swift-testing-expert/references/xcode-workflows.md +70 -0
  369. package/skills/ios/swiftdata-pro/LICENSE +21 -0
  370. package/skills/ios/swiftdata-pro/SKILL.md +102 -0
  371. package/skills/ios/swiftdata-pro/agents/openai.yaml +10 -0
  372. package/skills/ios/swiftdata-pro/assets/swiftdata-pro-icon.png +0 -0
  373. package/skills/ios/swiftdata-pro/assets/swiftdata-pro-icon.svg +29 -0
  374. package/skills/ios/swiftdata-pro/references/class-inheritance.md +104 -0
  375. package/skills/ios/swiftdata-pro/references/cloudkit.md +10 -0
  376. package/skills/ios/swiftdata-pro/references/core-rules.md +20 -0
  377. package/skills/ios/swiftdata-pro/references/indexing.md +27 -0
  378. package/skills/ios/swiftdata-pro/references/predicates.md +73 -0
  379. package/skills/ios/swiftui-design-principles/AGENTS.md +21 -0
  380. package/skills/ios/swiftui-design-principles/LICENSE +21 -0
  381. package/skills/ios/swiftui-design-principles/README.md +41 -0
  382. package/skills/ios/swiftui-design-principles/SKILL.md +605 -0
  383. package/skills/ios/swiftui-design-principles/metadata.json +10 -0
  384. package/skills/ios/swiftui-design-tokens/SKILL.md +475 -0
  385. package/skills/ios/swiftui-liquid-glass/LICENSE +21 -0
  386. package/skills/ios/swiftui-liquid-glass/SKILL.md +95 -0
  387. package/skills/ios/swiftui-liquid-glass/agents/openai.yaml +4 -0
  388. package/skills/ios/swiftui-liquid-glass/references/liquid-glass.md +280 -0
  389. package/skills/ios/swiftui-performance-audit/LICENSE +21 -0
  390. package/skills/ios/swiftui-performance-audit/SKILL.md +111 -0
  391. package/skills/ios/swiftui-performance-audit/agents/openai.yaml +4 -0
  392. package/skills/ios/swiftui-performance-audit/references/code-smells.md +150 -0
  393. package/skills/ios/swiftui-performance-audit/references/demystify-swiftui-performance-wwdc23.md +46 -0
  394. package/skills/ios/swiftui-performance-audit/references/optimizing-swiftui-performance-instruments.md +29 -0
  395. package/skills/ios/swiftui-performance-audit/references/profiling-intake.md +44 -0
  396. package/skills/ios/swiftui-performance-audit/references/report-template.md +47 -0
  397. package/skills/ios/swiftui-performance-audit/references/understanding-hangs-in-your-app.md +33 -0
  398. package/skills/ios/swiftui-performance-audit/references/understanding-improving-swiftui-performance.md +52 -0
  399. package/skills/ios/swiftui-pro/LICENSE +21 -0
  400. package/skills/ios/swiftui-pro/SKILL.md +108 -0
  401. package/skills/ios/swiftui-pro/agents/openai.yaml +10 -0
  402. package/skills/ios/swiftui-pro/assets/swiftui-pro-icon.png +0 -0
  403. package/skills/ios/swiftui-pro/assets/swiftui-pro-icon.svg +29 -0
  404. package/skills/ios/swiftui-pro/references/accessibility.md +13 -0
  405. package/skills/ios/swiftui-pro/references/api.md +39 -0
  406. package/skills/ios/swiftui-pro/references/data.md +43 -0
  407. package/skills/ios/swiftui-pro/references/design.md +31 -0
  408. package/skills/ios/swiftui-pro/references/hygiene.md +9 -0
  409. package/skills/ios/swiftui-pro/references/navigation.md +14 -0
  410. package/skills/ios/swiftui-pro/references/performance.md +46 -0
  411. package/skills/ios/swiftui-pro/references/swift.md +56 -0
  412. package/skills/ios/swiftui-pro/references/views.md +35 -0
  413. package/skills/ios/swiftui-ui-patterns/LICENSE +21 -0
  414. package/skills/ios/swiftui-ui-patterns/SKILL.md +100 -0
  415. package/skills/ios/swiftui-ui-patterns/agents/openai.yaml +4 -0
  416. package/skills/ios/swiftui-ui-patterns/references/app-wiring.md +201 -0
  417. package/skills/ios/swiftui-ui-patterns/references/async-state.md +96 -0
  418. package/skills/ios/swiftui-ui-patterns/references/components-index.md +50 -0
  419. package/skills/ios/swiftui-ui-patterns/references/controls.md +57 -0
  420. package/skills/ios/swiftui-ui-patterns/references/deeplinks.md +66 -0
  421. package/skills/ios/swiftui-ui-patterns/references/focus.md +90 -0
  422. package/skills/ios/swiftui-ui-patterns/references/form.md +97 -0
  423. package/skills/ios/swiftui-ui-patterns/references/grids.md +71 -0
  424. package/skills/ios/swiftui-ui-patterns/references/haptics.md +71 -0
  425. package/skills/ios/swiftui-ui-patterns/references/input-toolbar.md +51 -0
  426. package/skills/ios/swiftui-ui-patterns/references/lightweight-clients.md +93 -0
  427. package/skills/ios/swiftui-ui-patterns/references/list.md +86 -0
  428. package/skills/ios/swiftui-ui-patterns/references/loading-placeholders.md +38 -0
  429. package/skills/ios/swiftui-ui-patterns/references/macos-settings.md +71 -0
  430. package/skills/ios/swiftui-ui-patterns/references/matched-transitions.md +59 -0
  431. package/skills/ios/swiftui-ui-patterns/references/media.md +73 -0
  432. package/skills/ios/swiftui-ui-patterns/references/menu-bar.md +101 -0
  433. package/skills/ios/swiftui-ui-patterns/references/navigationstack.md +159 -0
  434. package/skills/ios/swiftui-ui-patterns/references/overlay.md +45 -0
  435. package/skills/ios/swiftui-ui-patterns/references/performance.md +62 -0
  436. package/skills/ios/swiftui-ui-patterns/references/previews.md +48 -0
  437. package/skills/ios/swiftui-ui-patterns/references/scroll-reveal.md +133 -0
  438. package/skills/ios/swiftui-ui-patterns/references/scrollview.md +87 -0
  439. package/skills/ios/swiftui-ui-patterns/references/searchable.md +71 -0
  440. package/skills/ios/swiftui-ui-patterns/references/sheets.md +155 -0
  441. package/skills/ios/swiftui-ui-patterns/references/split-views.md +72 -0
  442. package/skills/ios/swiftui-ui-patterns/references/tabview.md +114 -0
  443. package/skills/ios/swiftui-ui-patterns/references/theming.md +71 -0
  444. package/skills/ios/swiftui-ui-patterns/references/title-menus.md +93 -0
  445. package/skills/ios/swiftui-ui-patterns/references/top-bar.md +49 -0
  446. package/skills/ios/swiftui-view-refactor/LICENSE +21 -0
  447. package/skills/ios/swiftui-view-refactor/SKILL.md +207 -0
  448. package/skills/ios/swiftui-view-refactor/agents/openai.yaml +4 -0
  449. package/skills/ios/swiftui-view-refactor/references/mv-patterns.md +161 -0
  450. package/skills/ios/widgetkit/LICENSE +131 -0
  451. package/skills/ios/widgetkit/SKILL.md +502 -0
  452. package/skills/ios/widgetkit/references/widgetkit-advanced.md +871 -0
  453. package/skills/ios/writing-for-interfaces/SKILL.md +75 -0
  454. package/skills/web/accessibility/SKILL.md +146 -0
  455. package/skills/web/aceternity-ui/SKILL.md +719 -0
  456. package/skills/web/aceternity-ui/metadata.json +10 -0
  457. package/skills/web/api-design/SKILL.md +523 -0
  458. package/skills/web/chart-accessibility/SKILL.md +332 -0
  459. package/skills/web/composition-patterns/AGENTS.md +946 -0
  460. package/skills/web/composition-patterns/README.md +60 -0
  461. package/skills/web/composition-patterns/SKILL.md +89 -0
  462. package/skills/web/composition-patterns/metadata.json +11 -0
  463. package/skills/web/composition-patterns/rules/_sections.md +29 -0
  464. package/skills/web/composition-patterns/rules/_template.md +24 -0
  465. package/skills/web/composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
  466. package/skills/web/composition-patterns/rules/architecture-compound-components.md +112 -0
  467. package/skills/web/composition-patterns/rules/patterns-children-over-render-props.md +87 -0
  468. package/skills/web/composition-patterns/rules/patterns-explicit-variants.md +100 -0
  469. package/skills/web/composition-patterns/rules/react19-no-forwardref.md +42 -0
  470. package/skills/web/composition-patterns/rules/state-context-interface.md +191 -0
  471. package/skills/web/composition-patterns/rules/state-decouple-implementation.md +113 -0
  472. package/skills/web/composition-patterns/rules/state-lift-state.md +125 -0
  473. package/skills/web/cost-aware-llm-pipeline/SKILL.md +183 -0
  474. package/skills/web/database-migrations/SKILL.md +429 -0
  475. package/skills/web/deployment-patterns/SKILL.md +427 -0
  476. package/skills/web/docker-patterns/SKILL.md +364 -0
  477. package/skills/web/e2e-testing/SKILL.md +326 -0
  478. package/skills/web/lighthouse-ci/SKILL.md +361 -0
  479. package/skills/web/mcp-server-patterns/SKILL.md +69 -0
  480. package/skills/web/next-best-practices/SKILL.md +153 -0
  481. package/skills/web/next-best-practices/async-patterns.md +87 -0
  482. package/skills/web/next-best-practices/bundling.md +180 -0
  483. package/skills/web/next-best-practices/data-patterns.md +297 -0
  484. package/skills/web/next-best-practices/debug-tricks.md +105 -0
  485. package/skills/web/next-best-practices/directives.md +73 -0
  486. package/skills/web/next-best-practices/error-handling.md +227 -0
  487. package/skills/web/next-best-practices/file-conventions.md +140 -0
  488. package/skills/web/next-best-practices/font.md +245 -0
  489. package/skills/web/next-best-practices/functions.md +108 -0
  490. package/skills/web/next-best-practices/hydration-error.md +91 -0
  491. package/skills/web/next-best-practices/image.md +173 -0
  492. package/skills/web/next-best-practices/metadata.md +301 -0
  493. package/skills/web/next-best-practices/parallel-routes.md +287 -0
  494. package/skills/web/next-best-practices/route-handlers.md +146 -0
  495. package/skills/web/next-best-practices/rsc-boundaries.md +159 -0
  496. package/skills/web/next-best-practices/runtime-selection.md +39 -0
  497. package/skills/web/next-best-practices/scripts.md +141 -0
  498. package/skills/web/next-best-practices/self-hosting.md +371 -0
  499. package/skills/web/next-best-practices/suspense-boundaries.md +67 -0
  500. package/skills/web/next-cache-components/SKILL.md +411 -0
  501. package/skills/web/postgres-best-practices/SKILL.md +14 -0
  502. package/skills/web/postgres-best-practices/references/schema-design.md +9 -0
  503. package/skills/web/react-best-practices/AGENTS.md +3810 -0
  504. package/skills/web/react-best-practices/README.md +123 -0
  505. package/skills/web/react-best-practices/SKILL.md +149 -0
  506. package/skills/web/react-best-practices/metadata.json +15 -0
  507. package/skills/web/react-best-practices/rules/_sections.md +46 -0
  508. package/skills/web/react-best-practices/rules/_template.md +28 -0
  509. package/skills/web/react-best-practices/rules/advanced-effect-event-deps.md +56 -0
  510. package/skills/web/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  511. package/skills/web/react-best-practices/rules/advanced-init-once.md +42 -0
  512. package/skills/web/react-best-practices/rules/advanced-use-latest.md +39 -0
  513. package/skills/web/react-best-practices/rules/async-api-routes.md +38 -0
  514. package/skills/web/react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  515. package/skills/web/react-best-practices/rules/async-defer-await.md +82 -0
  516. package/skills/web/react-best-practices/rules/async-dependencies.md +51 -0
  517. package/skills/web/react-best-practices/rules/async-parallel.md +28 -0
  518. package/skills/web/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  519. package/skills/web/react-best-practices/rules/bundle-analyzable-paths.md +63 -0
  520. package/skills/web/react-best-practices/rules/bundle-barrel-imports.md +60 -0
  521. package/skills/web/react-best-practices/rules/bundle-conditional.md +31 -0
  522. package/skills/web/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  523. package/skills/web/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  524. package/skills/web/react-best-practices/rules/bundle-preload.md +50 -0
  525. package/skills/web/react-best-practices/rules/client-event-listeners.md +74 -0
  526. package/skills/web/react-best-practices/rules/client-localstorage-schema.md +71 -0
  527. package/skills/web/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  528. package/skills/web/react-best-practices/rules/client-swr-dedup.md +56 -0
  529. package/skills/web/react-best-practices/rules/js-batch-dom-css.md +107 -0
  530. package/skills/web/react-best-practices/rules/js-cache-function-results.md +80 -0
  531. package/skills/web/react-best-practices/rules/js-cache-property-access.md +28 -0
  532. package/skills/web/react-best-practices/rules/js-cache-storage.md +70 -0
  533. package/skills/web/react-best-practices/rules/js-combine-iterations.md +32 -0
  534. package/skills/web/react-best-practices/rules/js-early-exit.md +50 -0
  535. package/skills/web/react-best-practices/rules/js-flatmap-filter.md +60 -0
  536. package/skills/web/react-best-practices/rules/js-hoist-regexp.md +45 -0
  537. package/skills/web/react-best-practices/rules/js-index-maps.md +37 -0
  538. package/skills/web/react-best-practices/rules/js-length-check-first.md +49 -0
  539. package/skills/web/react-best-practices/rules/js-min-max-loop.md +82 -0
  540. package/skills/web/react-best-practices/rules/js-request-idle-callback.md +105 -0
  541. package/skills/web/react-best-practices/rules/js-set-map-lookups.md +24 -0
  542. package/skills/web/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  543. package/skills/web/react-best-practices/rules/rendering-activity.md +26 -0
  544. package/skills/web/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  545. package/skills/web/react-best-practices/rules/rendering-conditional-render.md +40 -0
  546. package/skills/web/react-best-practices/rules/rendering-content-visibility.md +38 -0
  547. package/skills/web/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  548. package/skills/web/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  549. package/skills/web/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  550. package/skills/web/react-best-practices/rules/rendering-resource-hints.md +85 -0
  551. package/skills/web/react-best-practices/rules/rendering-script-defer-async.md +68 -0
  552. package/skills/web/react-best-practices/rules/rendering-svg-precision.md +28 -0
  553. package/skills/web/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  554. package/skills/web/react-best-practices/rules/rerender-defer-reads.md +39 -0
  555. package/skills/web/react-best-practices/rules/rerender-dependencies.md +45 -0
  556. package/skills/web/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  557. package/skills/web/react-best-practices/rules/rerender-derived-state.md +29 -0
  558. package/skills/web/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  559. package/skills/web/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  560. package/skills/web/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  561. package/skills/web/react-best-practices/rules/rerender-memo.md +44 -0
  562. package/skills/web/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  563. package/skills/web/react-best-practices/rules/rerender-no-inline-components.md +82 -0
  564. package/skills/web/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  565. package/skills/web/react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  566. package/skills/web/react-best-practices/rules/rerender-transitions.md +40 -0
  567. package/skills/web/react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  568. package/skills/web/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  569. package/skills/web/react-best-practices/rules/server-after-nonblocking.md +73 -0
  570. package/skills/web/react-best-practices/rules/server-auth-actions.md +96 -0
  571. package/skills/web/react-best-practices/rules/server-cache-lru.md +41 -0
  572. package/skills/web/react-best-practices/rules/server-cache-react.md +76 -0
  573. package/skills/web/react-best-practices/rules/server-dedup-props.md +65 -0
  574. package/skills/web/react-best-practices/rules/server-hoist-static-io.md +149 -0
  575. package/skills/web/react-best-practices/rules/server-no-shared-module-state.md +50 -0
  576. package/skills/web/react-best-practices/rules/server-parallel-fetching.md +83 -0
  577. package/skills/web/react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  578. package/skills/web/react-best-practices/rules/server-serialization.md +38 -0
  579. package/skills/web/seo/SKILL.md +154 -0
  580. package/skills/web/web-design-guidelines/SKILL.md +39 -0
  581. package/skills/web/zap-scan-config/SKILL.md +444 -0
  582. package/skills/web/zap-scan-config/assets/.gitkeep +9 -0
  583. package/skills/web/zap-scan-config/assets/github_action.yml +207 -0
  584. package/skills/web/zap-scan-config/assets/gitlab_ci.yml +226 -0
  585. package/skills/web/zap-scan-config/assets/zap_automation.yaml +196 -0
  586. package/skills/web/zap-scan-config/assets/zap_context.xml +192 -0
  587. package/skills/web/zap-scan-config/references/EXAMPLE.md +40 -0
  588. package/skills/web/zap-scan-config/references/api_testing_guide.md +475 -0
  589. package/skills/web/zap-scan-config/references/authentication_guide.md +431 -0
  590. package/skills/web/zap-scan-config/references/false_positive_handling.md +427 -0
  591. package/skills/web/zap-scan-config/references/owasp_mapping.md +255 -0
  592. package/src/lrr/aggregator.ts +80 -0
  593. package/src/orchestrator/hooks/context-header.ts +95 -0
  594. package/src/orchestrator/hooks/token-accounting-emitter.ts +77 -0
  595. package/src/orchestrator/hooks/token-accounting.ts +101 -0
  596. package/src/orchestrator/mcp/cycle-counter.ts +129 -0
  597. package/src/orchestrator/mcp/scribe.ts +283 -0
  598. package/src/orchestrator/mcp/state-save.ts +149 -0
  599. package/src/orchestrator/mcp/write-lease.ts +167 -0
  600. package/src/orchestrator/phase4-shared-context.ts +41 -0
  601. package/src/orchestrator/schemas/backward-edge.ts +46 -0
  602. package/agents/agentic-identity-trust.md +0 -121
  603. package/agents/data-consolidation-agent.md +0 -39
  604. package/agents/design-image-prompt-engineer.md +0 -105
  605. package/agents/design-visual-storyteller.md +0 -147
  606. package/agents/design-whimsy-injector.md +0 -89
  607. package/agents/engineering-autonomous-optimization-architect.md +0 -105
  608. package/agents/market-intel.md +0 -35
  609. package/agents/marketing-instagram-curator.md +0 -111
  610. package/agents/marketing-reddit-community-builder.md +0 -121
  611. package/agents/marketing-social-media-strategist.md +0 -74
  612. package/agents/marketing-tiktok-strategist.md +0 -123
  613. package/agents/marketing-twitter-engager.md +0 -124
  614. package/agents/marketing-wechat-official-account.md +0 -143
  615. package/agents/marketing-xiaohongshu-specialist.md +0 -136
  616. package/agents/marketing-zhihu-strategist.md +0 -160
  617. package/agents/product-behavioral-nudge-engine.md +0 -78
  618. package/agents/project-management-experiment-tracker.md +0 -102
  619. package/agents/report-distribution-agent.md +0 -43
  620. package/agents/risk-analysis.md +0 -45
  621. package/agents/sales-data-extraction-agent.md +0 -46
  622. package/agents/specialized-cultural-intelligence-strategist.md +0 -65
  623. package/agents/specialized-developer-advocate.md +0 -146
  624. package/agents/support-analytics-reporter.md +0 -133
  625. package/agents/support-executive-summary-generator.md +0 -64
  626. package/agents/support-finance-tracker.md +0 -145
  627. package/agents/support-legal-compliance-checker.md +0 -129
  628. package/agents/support-support-responder.md +0 -91
  629. package/agents/testing-accessibility-auditor.md +0 -110
  630. package/agents/testing-test-results-analyzer.md +0 -97
  631. package/agents/testing-tool-evaluator.md +0 -76
  632. package/agents/testing-workflow-optimizer.md +0 -99
  633. package/agents/user-research.md +0 -40
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Antoine van der Lee
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,79 @@
1
+ ---
2
+ name: swift-testing-expert
3
+ description: 'Expert guidance for Swift Testing: test structure, #expect/#require macros, traits and tags, parameterized tests, test plans, parallel execution, async waiting patterns, and XCTest migration. Use when writing new Swift tests, modernizing XCTest suites, debugging flaky tests, or improving test quality and maintainability in Apple-platform or Swift server projects.'
4
+ ---
5
+
6
+ # Swift Testing
7
+
8
+ ## Overview
9
+
10
+ Use this skill to write, review, migrate, and debug Swift tests with modern Swift Testing APIs. Prioritize readable tests, robust parallel execution, clear diagnostics, and incremental migration from XCTest where needed.
11
+
12
+ ## Agent behavior contract (follow these rules)
13
+
14
+ 1. Prefer Swift Testing for Swift unit and integration tests, but keep XCTest for UI automation (`XCUIApplication`), performance metrics (`XCTMetric`), and Objective-C-only test code.
15
+ 2. Treat `#expect` as the default assertion and use `#require` when subsequent lines depend on a prerequisite value.
16
+ 3. Default to parallel-safe guidance. If tests are not isolated, first propose fixing shared state before applying `.serialized`.
17
+ 4. Prefer traits for behavior and metadata (`.enabled`, `.disabled`, `.timeLimit`, `.bug`, tags) over naming conventions or ad-hoc comments.
18
+ 5. Recommend parameterized tests when multiple tests share logic and differ only in input values.
19
+ 6. Use `@available` on test functions for OS-gated behavior instead of runtime `#available` checks inside test bodies; never annotate suite types with `@available`.
20
+ 7. Keep migration advice incremental: convert assertions first, then organize suites, then introduce parameterization/traits.
21
+ 8. Only import `Testing` in test targets, never in app/library/binary targets.
22
+
23
+ ## First 60 seconds (triage template)
24
+
25
+ - Clarify the goal: new tests, migration, flaky failures, performance, CI filtering, or async waiting.
26
+ - Collect minimal facts:
27
+ - Xcode/Swift version and platform targets
28
+ - Whether tests currently use XCTest, Swift Testing, or both
29
+ - Whether failures are deterministic or flaky
30
+ - Whether tests access shared resources (database, files, network, global state)
31
+ - Branch quickly:
32
+ - repetitive tests -> parameterized tests
33
+ - noisy or flaky failures -> known issue handling and test isolation
34
+ - migration questions -> XCTest mapping and coexistence strategy
35
+ - async callback complexity -> continuation/await patterns
36
+
37
+ ## Routing map (read the right reference fast)
38
+
39
+ - Test building blocks and suite organization -> `references/fundamentals.md`
40
+ - `#expect`, `#require`, and throw expectations -> `references/expectations.md`
41
+ - Traits, tags, and Xcode test-plan filtering -> `references/traits-and-tags.md`
42
+ - Parameterized test design and combinatorics -> `references/parameterized-testing.md`
43
+ - Default parallel execution, `.serialized`, isolation strategy -> `references/parallelization-and-isolation.md`
44
+ - Test speed, determinism, and flakiness prevention -> `references/performance-and-best-practices.md`
45
+ - Async waiting and callback bridging -> `references/async-testing-and-waiting.md`
46
+ - XCTest coexistence and migration workflow -> `references/migration-from-xctest.md`
47
+ - Test navigator/report workflows and diagnostics -> `references/xcode-workflows.md`
48
+ - Index and quick navigation -> `references/_index.md`
49
+
50
+ ## Common pitfalls -> next best move
51
+
52
+ - Repetitive `testFooCaseA/testFooCaseB/...` methods -> replace with one parameterized `@Test(arguments:)`.
53
+ - Failing optional preconditions hidden in later assertions -> `try #require(...)` then assert on unwrapped value.
54
+ - Flaky integration tests on shared database -> isolate dependencies or in-memory repositories; use `.serialized` only as a transition step.
55
+ - Disabled tests that silently rot -> prefer `withKnownIssue` for temporary known failures to preserve signal.
56
+ - Unclear failure values for complex types -> conform type to `CustomTestStringConvertible` for focused test diagnostics.
57
+ - Test-plan include/exclude by names -> use tags and tag-based filters instead.
58
+
59
+ ## Verification checklist
60
+
61
+ - Confirm each test has a single clear behavior and expressive display name when needed.
62
+ - Confirm prerequisites use `#require` where failure should stop the test.
63
+ - Confirm repeated logic is parameterized instead of duplicated.
64
+ - Confirm tests are parallel-safe or intentionally serialized with rationale.
65
+ - Confirm async code is awaited and callback APIs are bridged safely.
66
+ - Confirm migration keeps unsupported XCTest-only scenarios on XCTest.
67
+
68
+ ## References
69
+
70
+ - `references/_index.md`
71
+ - `references/fundamentals.md`
72
+ - `references/expectations.md`
73
+ - `references/traits-and-tags.md`
74
+ - `references/parameterized-testing.md`
75
+ - `references/parallelization-and-isolation.md`
76
+ - `references/performance-and-best-practices.md`
77
+ - `references/async-testing-and-waiting.md`
78
+ - `references/migration-from-xctest.md`
79
+ - `references/xcode-workflows.md`
@@ -0,0 +1,12 @@
1
+ # Swift Testing Reference Index
2
+
3
+ - `fundamentals.md` - `@Test`, suites, structure, naming, and baseline patterns
4
+ - `expectations.md` - `#expect`, `#require`, throw validation, and failure readability
5
+ - `traits-and-tags.md` - traits, tags, bug linking, conditions, and test-plan filtering
6
+ - `parameterized-testing.md` - single/multi-argument parameterization, `zip`, and scaling strategy
7
+ - `parallelization-and-isolation.md` - default parallel execution, random order, `.serialized`, and isolation patterns
8
+ - `performance-and-best-practices.md` - test speed, determinism, flaky-test prevention, and parallel-safe defaults
9
+ - `async-testing-and-waiting.md` - async/await in tests, callback bridging, and event-stream verification
10
+ - `migration-from-xctest.md` - pragmatic XCTest -> Swift Testing migration workflow
11
+ - `xcode-workflows.md` - navigator/report workflows, insights, and diagnostics quality
12
+ - `README.md` resources section - Apple documentation links for defining, organizing, and migrating tests
@@ -0,0 +1,127 @@
1
+ # Async Testing and Waiting
2
+
3
+ ## When to use this reference
4
+
5
+ Use this file when tests involve async/await functions, completion handlers, streams/events, or timing-related flakiness.
6
+
7
+ ## Preferred approach
8
+
9
+ - Use async test functions and `await` naturally.
10
+ - Keep async test code close to production async patterns.
11
+ - Prefer structured concurrency patterns over ad-hoc synchronization.
12
+ - Prefer confirmations for async event-style tests that are not naturally awaitable.
13
+
14
+ ### Async function test example
15
+
16
+ ```swift
17
+ import Testing
18
+
19
+ struct APIClient {
20
+ func fetchName() async throws -> String { "Antoine" }
21
+ }
22
+
23
+ @Test func fetchNameReturnsValue() async throws {
24
+ let client = APIClient()
25
+ let value = try await client.fetchName()
26
+ #expect(value == "Antoine")
27
+ }
28
+ ```
29
+
30
+ ## Callback bridging
31
+
32
+ - For completion-handler APIs without async overloads, bridge with:
33
+ - `withCheckedContinuation`
34
+ - `withCheckedThrowingContinuation`
35
+ - Keep continuation wrappers minimal and test-focused.
36
+
37
+ ### Completion-handler to async bridge
38
+
39
+ ```swift
40
+ import Testing
41
+
42
+ func legacyLoad(_ completion: @escaping (Result<Int, Error>) -> Void) {
43
+ completion(.success(42))
44
+ }
45
+
46
+ @Test func legacyAPI() async throws {
47
+ let value = try await withCheckedThrowingContinuation { continuation in
48
+ legacyLoad { result in
49
+ continuation.resume(with: result)
50
+ }
51
+ }
52
+ #expect(value == 42)
53
+ }
54
+ ```
55
+
56
+ ## Confirmations for asynchronous events
57
+
58
+ - Use confirmations when validating event delivery/count semantics that do not map cleanly to direct `await`.
59
+ - Set expected counts explicitly:
60
+ - exact count for strict validation
61
+ - lower-bounded range for at-least semantics
62
+ - Keep confirmation scope small and ensure confirmations happen before the confirmation block returns.
63
+
64
+ ### Confirmation example
65
+
66
+ ```swift
67
+ import Testing
68
+
69
+ @Test func eventIsPublishedTwice() async {
70
+ await confirmation("Publishes two events", expectedCount: 2) { confirm in
71
+ confirm()
72
+ confirm()
73
+ }
74
+ }
75
+ ```
76
+
77
+ ## Event handlers and multi-fire callbacks
78
+
79
+ - Avoid unsafe mutable shared counters from callback closures in strict concurrency mode.
80
+ - Use isolation-safe patterns (actor state, AsyncSequence wrappers, or thread-safe containers).
81
+ - Verify callback counts and ordering explicitly when behavior depends on it.
82
+
83
+ ### Actor-isolated counting pattern
84
+
85
+ ```swift
86
+ import Testing
87
+
88
+ actor EventCounter {
89
+ private(set) var count = 0
90
+ func increment() { count += 1 }
91
+ }
92
+
93
+ @Test func countEventsSafely() async {
94
+ let counter = EventCounter()
95
+ await counter.increment()
96
+ await counter.increment()
97
+ #expect(await counter.count == 2)
98
+ }
99
+ ```
100
+
101
+ ## Avoid legacy waiting anti-patterns
102
+
103
+ - Do not return from test before async callback work completes.
104
+ - Avoid sleeping/time-based waits as primary synchronization.
105
+ - Replace brittle waiting with awaitable conditions and deterministic synchronization points.
106
+
107
+ ```swift
108
+ // Avoid this pattern:
109
+ // try await Task.sleep(nanoseconds: 500_000_000)
110
+ // #expect(flag == true)
111
+ ```
112
+
113
+ ## Actor isolation in tests
114
+
115
+ - Isolate tests to a global actor (e.g. `@MainActor`) only when behavior truly requires it.
116
+ - Keep non-UI tests off main actor to preserve realistic concurrency behavior.
117
+
118
+ ### Main-actor test only when required
119
+
120
+ ```swift
121
+ import Testing
122
+
123
+ @MainActor
124
+ @Test func uiModelMutation() {
125
+ #expect(true)
126
+ }
127
+ ```
@@ -0,0 +1,145 @@
1
+ # Expectations
2
+
3
+ ## When to use this reference
4
+
5
+ Use this file when writing assertions, migrating from `XCTAssert*`, testing thrown errors, or documenting known failures.
6
+
7
+ ## `#expect` as the default
8
+
9
+ - Use `#expect` for most assertions.
10
+ - Pass natural Swift expressions (`==`, `>`, `.contains`, `.isEmpty`, etc.).
11
+ - Rely on captured sub-expression values for rich diagnostics in Xcode.
12
+ - Avoid old XCTest assertion families in Swift Testing tests.
13
+
14
+ ### Example: expressive assertions
15
+
16
+ ```swift
17
+ import Testing
18
+
19
+ @Test func pricingRules() {
20
+ let subtotal = 25
21
+ let discount = 5
22
+ let total = subtotal - discount
23
+
24
+ #expect(total == 20)
25
+ #expect(total > 0)
26
+ #expect([10, 20, 30].contains(total))
27
+ }
28
+ ```
29
+
30
+ ## `#require` for prerequisites
31
+
32
+ - Use `try #require(...)` when later assertions depend on this condition.
33
+ - Treat `#require` as "guard + fail test early".
34
+ - Use return value to unwrap optionals safely and reduce noisy optional chaining.
35
+ - Prefer this pattern over manual optional checks when failure should halt test flow.
36
+
37
+ ### Example: optional precondition + unwrapped usage
38
+
39
+ ```swift
40
+ import Testing
41
+
42
+ @Test func parsedURLHasHTTPS() throws {
43
+ let value = "https://www.avanderlee.com"
44
+ let url = try #require(URL(string: value), "URL should parse")
45
+ #expect(url.scheme == "https")
46
+ }
47
+ ```
48
+
49
+ ## Throwing behavior checks
50
+
51
+ - For success-path calls to throwing functions, call directly and assert returned value.
52
+ - For expected failure, use throw-aware expectations to verify:
53
+ - any throw
54
+ - specific error type
55
+ - specific error case/value
56
+ - Avoid verbose hand-written `do/catch` unless custom branching is truly needed.
57
+
58
+ ### Example: expected throw and no-throw
59
+
60
+ ```swift
61
+ import Testing
62
+
63
+ enum BrewError: Error, Equatable {
64
+ case missingBeans
65
+ }
66
+
67
+ func brew(_ hasBeans: Bool) throws -> String {
68
+ guard hasBeans else { throw BrewError.missingBeans }
69
+ return "coffee"
70
+ }
71
+
72
+ @Test func expectedThrows() {
73
+ #expect(throws: BrewError.self) {
74
+ try brew(false)
75
+ }
76
+ }
77
+
78
+ @Test func expectedNoThrow() {
79
+ #expect(throws: Never.self) {
80
+ try brew(true)
81
+ }
82
+ }
83
+ ```
84
+
85
+ ## Known issue handling
86
+
87
+ - Use `withKnownIssue` for temporary expected failures you still want to compile/run.
88
+ - Prefer `withKnownIssue` over blanket disabling when you need ongoing visibility.
89
+ - Remove known-issue wrappers once failure condition is fixed.
90
+
91
+ ### Example: scope only failing section
92
+
93
+ ```swift
94
+ import Testing
95
+
96
+ @Test func checkoutFlow() {
97
+ #expect(true) // still validated
98
+
99
+ withKnownIssue("Checkout backend intermittently returns 503", isIntermittent: true) {
100
+ Issue.record("Known upstream issue")
101
+ }
102
+
103
+ #expect(2 + 2 == 4) // rest of test still executes
104
+ }
105
+ ```
106
+
107
+ ## Readability upgrade
108
+
109
+ - Conform complex domain types to `CustomTestStringConvertible` for concise test output.
110
+ - Keep production `CustomStringConvertible` separate from test-specific descriptions when needed.
111
+
112
+ ### Example: clean diagnostic descriptions
113
+
114
+ ```swift
115
+ import Testing
116
+
117
+ struct Receipt: CustomTestStringConvertible {
118
+ let id: UUID
119
+ let total: Decimal
120
+
121
+ var testDescription: String {
122
+ "Receipt(total: \(total))"
123
+ }
124
+ }
125
+ ```
126
+
127
+ ## XCTest mapping quick examples
128
+
129
+ ```swift
130
+ // XCTAssertEqual(total, 20)
131
+ #expect(total == 20)
132
+
133
+ // try XCTUnwrap(user)
134
+ let user = try #require(user)
135
+
136
+ // XCTFail("Unreachable")
137
+ Issue.record("Unreachable")
138
+ ```
139
+
140
+ ## Do / Don't
141
+
142
+ - Do use `#require` when later checks depend on a value.
143
+ - Do keep `withKnownIssue` scopes narrow.
144
+ - Don't use XCTest assertions in Swift Testing tests.
145
+ - Don't hide prerequisite failures inside later optional chaining.
@@ -0,0 +1,141 @@
1
+ # Fundamentals
2
+
3
+ ## When to use this reference
4
+
5
+ Use this file when creating new Swift Testing suites or refactoring test structure before deeper topics like traits, parameterization, or migration.
6
+
7
+ ## Building blocks
8
+
9
+ - Import `Testing` only in test targets.
10
+ - Use `@Test` to declare tests explicitly (global function or type method).
11
+ - Use suites (`struct`, `actor`, or `class`) to group related tests.
12
+ - Prefer `struct` suites for value semantics and accidental-state-sharing prevention.
13
+ - Use `@Suite` when adding suite-level traits or display names.
14
+ - Use nested suites to reflect feature grouping and improve discoverability.
15
+
16
+ ## Core examples
17
+
18
+ ### Global test function
19
+
20
+ ```swift
21
+ import Testing
22
+ @testable import FoodTruck
23
+
24
+ @Test("Food truck has a valid default name")
25
+ func defaultName() {
26
+ let truck = FoodTruck()
27
+ #expect(truck.name.isEmpty == false)
28
+ }
29
+ ```
30
+
31
+ ### Suite with instance tests
32
+
33
+ ```swift
34
+ import Testing
35
+ @testable import FoodTruck
36
+
37
+ @Suite("Menu tests")
38
+ struct MenuTests {
39
+ @Test("Returns no duplicates")
40
+ func uniqueItems() {
41
+ let items = Menu.default.items
42
+ #expect(Set(items).count == items.count)
43
+ }
44
+ }
45
+ ```
46
+
47
+ ### Nested suites for feature grouping
48
+
49
+ ```swift
50
+ import Testing
51
+ @testable import FoodTruck
52
+
53
+ struct CheckoutTests {
54
+ struct Taxes {
55
+ @Test func taxIsRoundedToTwoDigits() {
56
+ let total = Checkout.total(subtotal: 10.00, taxRate: 0.0825)
57
+ #expect(total == 10.83)
58
+ }
59
+ }
60
+
61
+ struct Discounts {
62
+ @Test func promoCodeAppliesFixedAmount() {
63
+ let total = Checkout.total(subtotal: 20.00, discount: .fixed(5))
64
+ #expect(total == 15.00)
65
+ }
66
+ }
67
+ }
68
+ ```
69
+
70
+ ## Recommended defaults
71
+
72
+ - Keep tests small and behavior-focused.
73
+ - Prefer descriptive names over boilerplate `test...` prefixes.
74
+ - Use display names where human-readable output helps triage.
75
+ - Keep setup local, or centralize in suite init when shared across tests.
76
+ - Avoid hidden global mutable state.
77
+ - Use `@MainActor` only when code under test requires main-thread isolation.
78
+ - Use `@available` on test functions when needed for platform/language gating.
79
+
80
+ ## Organization guidance
81
+
82
+ - Group by feature behavior, not by implementation class only.
83
+ - Promote shared traits (e.g. tags) to suite level when all tests inherit them.
84
+ - Use tags for cross-cutting grouping across files/targets.
85
+ - Keep unrelated tests in separate suites to preserve clear ownership.
86
+
87
+ ## Suite constraints to enforce
88
+
89
+ - If a suite has instance test methods, it must have a callable zero-argument initializer (implicit or explicit, sync/async, throwing or non-throwing).
90
+ - If initialization requirements cannot be met, convert tests to static/global functions or refactor suite state.
91
+ - Suite types (and containing types) must always be available; do not apply `@available` to suite declarations.
92
+
93
+ ### Zero-argument initializer requirement example
94
+
95
+ ```swift
96
+ import Testing
97
+
98
+ @Suite
99
+ struct SessionTests {
100
+ let config: URLSessionConfiguration
101
+
102
+ // Valid: callable with zero args due to default value.
103
+ init(config: URLSessionConfiguration = .ephemeral) {
104
+ self.config = config
105
+ }
106
+
107
+ @Test func usesEphemeralByDefault() {
108
+ #expect(config == .ephemeral)
109
+ }
110
+ }
111
+ ```
112
+
113
+ ### Invalid availability placement
114
+
115
+ ```swift
116
+ import Testing
117
+
118
+ // Do not do this on suite types:
119
+ // @available(iOS 18, *)
120
+ @Suite
121
+ struct PushTests {
122
+ @available(iOS 18, *)
123
+ @Test func supportsNewPushFormat() {
124
+ #expect(true)
125
+ }
126
+ }
127
+ ```
128
+
129
+ ## Do / Don't
130
+
131
+ - Do keep each test focused on one behavior.
132
+ - Do use display names where they improve failure readability.
133
+ - Don't rely on test execution order.
134
+ - Don't annotate suites with `@available`; annotate test functions instead.
135
+
136
+ ## Review checklist
137
+
138
+ - Test target imports `Testing`, app targets do not.
139
+ - Suite choice (`struct`/`actor`/`class`) matches setup and teardown needs.
140
+ - Instance tests have a callable zero-argument init path.
141
+ - Availability is applied to test functions, not suite types.
@@ -0,0 +1,127 @@
1
+ # Migration from XCTest
2
+
3
+ ## When to use this reference
4
+
5
+ Use this file for incremental migration of existing XCTest code to Swift Testing while preserving safety and CI signal.
6
+
7
+ ## Coexistence strategy
8
+
9
+ - Swift Testing and XCTest can coexist in the same target.
10
+ - Migrate incrementally; do not block migration on full rewrite.
11
+ - A single source file can import both `XCTest` and `Testing` during migration.
12
+ - Keep XCTest where Swift Testing does not apply:
13
+ - UI automation (`XCUIApplication`)
14
+ - performance APIs (`XCTMetric`)
15
+ - Objective-C-only tests
16
+
17
+ ### Mixed import file example
18
+
19
+ ```swift
20
+ import XCTest
21
+ import Testing
22
+ ```
23
+
24
+ ## Practical migration order
25
+
26
+ 1. Convert assertions to `#expect` / `#require`.
27
+ 2. Replace `test...` naming constraints with explicit `@Test`.
28
+ 3. Reorganize classes into suites where helpful.
29
+ 4. Collapse repetitive methods into parameterized tests.
30
+ 5. Add traits/tags for control and test-plan filtering.
31
+
32
+ ## Example conversion: class method -> Swift Testing function
33
+
34
+ ```swift
35
+ // Before (XCTest)
36
+ final class PriceTests: XCTestCase {
37
+ func testDiscountedTotal() {
38
+ XCTAssertEqual(Price.total(subtotal: 20, discount: 5), 15)
39
+ }
40
+ }
41
+
42
+ // After (Swift Testing)
43
+ import Testing
44
+
45
+ @Test func discountedTotal() {
46
+ #expect(Price.total(subtotal: 20, discount: 5) == 15)
47
+ }
48
+ ```
49
+
50
+ ## Assertion mapping highlights
51
+
52
+ - Most `XCTAssert*` variants -> `#expect(...)`.
53
+ - Optional unwrap checks -> `try #require(optionalValue)`.
54
+ - Early-stop semantics -> `#require` instead of global `continueAfterFailure = false`.
55
+ - `XCTFail("...")` -> `Issue.record("...")`.
56
+
57
+ ### Table-style quick mappings
58
+
59
+ ```swift
60
+ // XCTAssertTrue(isEnabled)
61
+ #expect(isEnabled)
62
+
63
+ // XCTAssertNil(error)
64
+ #expect(error == nil)
65
+
66
+ // XCTAssertThrowsError(try run())
67
+ #expect(throws: (any Error).self) { try run() }
68
+
69
+ // try XCTUnwrap(user)
70
+ let user = try #require(user)
71
+ ```
72
+
73
+ ## Suite model differences
74
+
75
+ - XCTest: class + `XCTestCase`.
76
+ - Swift Testing: struct/actor/class suites, explicit attributes, value-semantics-friendly defaults.
77
+ - Setup can move from `setUp` patterns to suite init when appropriate.
78
+ - Teardown can move to `deinit` when using class/actor suites.
79
+ - XCTest sync tests default to main actor behavior; Swift Testing runs tests on arbitrary tasks unless explicitly isolated (e.g. `@MainActor`).
80
+
81
+ ### Setup migration example
82
+
83
+ ```swift
84
+ import Testing
85
+
86
+ struct SessionTests {
87
+ let session: Session
88
+
89
+ init() {
90
+ self.session = Session(environment: .test)
91
+ }
92
+
93
+ @Test func startsDisconnected() {
94
+ #expect(session.isConnected == false)
95
+ }
96
+ }
97
+ ```
98
+
99
+ ## Async migration specifics
100
+
101
+ - Prefer `await` directly for async APIs.
102
+ - Convert completion-handler APIs with `withCheckedContinuation`/`withCheckedThrowingContinuation`.
103
+ - Replace `XCTestExpectation` patterns with confirmations when testing asynchronous event streams.
104
+
105
+ ### Expectation-style flow -> confirmation
106
+
107
+ ```swift
108
+ import Testing
109
+
110
+ @Test func receivesAtLeastOneEvent() async {
111
+ await confirmation("Receives event", expectedCount: 1...) { confirm in
112
+ confirm()
113
+ }
114
+ }
115
+ ```
116
+
117
+ ## Migration hygiene
118
+
119
+ - Prefer mechanical, reviewable commits.
120
+ - Use editor pattern-replace to accelerate common assertion conversions.
121
+ - Avoid mixing XCTest assertions in Swift Testing tests (and vice versa).
122
+
123
+ ## Common pitfalls
124
+
125
+ - Migrating all files at once instead of phased migration.
126
+ - Keeping `continueAfterFailure` patterns instead of targeted `#require`.
127
+ - Marking every migrated test `@MainActor` unnecessarily.