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,495 @@
1
+ # Threading
2
+
3
+ Use this when:
4
+
5
+ - You need to understand the relationship between tasks and threads.
6
+ - You are debugging suspension points, actor reentrancy, or unexpected execution contexts.
7
+ - You need Swift 6.2 behavior guidance (`nonisolated async`, `@concurrent`, `nonisolated(nonsending)`).
8
+
9
+ Skip this file if:
10
+
11
+ - You mainly need to protect mutable state. Use `actors.md`.
12
+ - You need to make types safe to transfer. Use `sendable.md`.
13
+
14
+ Jump to:
15
+
16
+ - Core Concepts (Tasks vs Threads)
17
+ - Cooperative Thread Pool
18
+ - Suspension Points and Actor Reentrancy
19
+ - Swift 6.2 Changes (SE-461, SE-466)
20
+ - Default Isolation Domain
21
+ - Debugging Thread Execution
22
+ - Common Misconceptions
23
+ - Migration Strategy
24
+
25
+ ## Core Concepts
26
+
27
+ ### What is a Thread?
28
+
29
+ System-level resource that runs instructions. High overhead for creation and switching. Swift Concurrency abstracts thread management away.
30
+
31
+ ### Tasks vs Threads
32
+
33
+ **Tasks** are units of async work, not tied to specific threads. Swift dynamically schedules tasks on available threads from a cooperative pool.
34
+
35
+ **Key insight**: No direct relationship between one task and one thread.
36
+
37
+ > **Course Deep Dive**: This topic is covered in detail in [Lesson 7.1: How Threads relate to Tasks](https://www.swiftconcurrencycourse.com?utm_source=github&utm_medium=agent-skill&utm_campaign=lesson-reference)
38
+
39
+ **Important (Swift 6+)**: Avoid using `Thread.current` inside async contexts. In Swift 6 language mode, `Thread.current` is unavailable from asynchronous contexts and will fail to compile. Prefer reasoning in terms of isolation domains; use Instruments and the debugger to observe execution when needed.
40
+
41
+ ## Cooperative Thread Pool
42
+
43
+ Swift creates only as many threads as CPU cores. Tasks share these threads efficiently.
44
+
45
+ ### How it works
46
+
47
+ 1. **Limited threads**: Number matches CPU cores
48
+ 2. **Task scheduling**: Tasks scheduled onto available threads
49
+ 3. **Suspension**: At `await`, task suspends, thread freed for other work
50
+ 4. **Resumption**: Task resumes on any available thread (not necessarily the same one)
51
+
52
+ ```swift
53
+ func example() async {
54
+ print("Started on: \(Thread.current)")
55
+
56
+ try await Task.sleep(for: .seconds(1))
57
+
58
+ print("Resumed on: \(Thread.current)") // Likely different thread
59
+ }
60
+ ```
61
+
62
+ ### Benefits over GCD
63
+
64
+ **Prevents thread explosion**:
65
+ - No excessive thread creation
66
+ - No high memory overhead from idle threads
67
+ - No excessive context switching
68
+ - No priority inversion
69
+
70
+ **Better performance**:
71
+ - Fewer threads = less context switching
72
+ - Continuations instead of blocking
73
+ - CPU cores stay busy efficiently
74
+
75
+ ## Threading Mindset → Isolation Mindset
76
+
77
+ ### Old way (GCD)
78
+
79
+ ```swift
80
+ // Thinking about threads
81
+ DispatchQueue.main.async {
82
+ // Update UI on main thread
83
+ }
84
+
85
+ DispatchQueue.global(qos: .background).async {
86
+ // Heavy work on background thread
87
+ }
88
+ ```
89
+
90
+ ### New way (Swift Concurrency)
91
+
92
+ ```swift
93
+ // Thinking about isolation domains
94
+ @MainActor
95
+ func updateUI() {
96
+ // Runs on main actor (usually main thread)
97
+ }
98
+
99
+ func heavyWork() async {
100
+ // Runs on any available thread in pool
101
+ }
102
+ ```
103
+
104
+ ### Think in isolation domains
105
+
106
+ **Don't ask**: "What thread should this run on?"
107
+
108
+ **Ask**: "What isolation domain should own this work?"
109
+
110
+ - `@MainActor` for UI updates
111
+ - Custom actors for specific state
112
+ - Nonisolated for general async work
113
+
114
+ ### Provide hints, not commands
115
+
116
+ ```swift
117
+ Task(priority: .userInitiated) {
118
+ await doWork()
119
+ }
120
+ ```
121
+
122
+ You're describing the nature of work, not assigning threads. Swift optimizes execution.
123
+
124
+ > **Course Deep Dive**: This topic is covered in detail in [Lesson 7.2: Getting rid of the "Threading Mindset"](https://www.swiftconcurrencycourse.com?utm_source=github&utm_medium=agent-skill&utm_campaign=lesson-reference)
125
+
126
+ ## Suspension Points
127
+
128
+ ### What is a suspension point?
129
+
130
+ Moment where task **may** pause to allow other work. Marked by `await`.
131
+
132
+ ```swift
133
+ let data = await fetchData() // Potential suspension
134
+ ```
135
+
136
+ **Critical**: `await` marks *possible* suspension, not guaranteed. If operation completes synchronously, no suspension occurs.
137
+
138
+ ### Why suspension points matter
139
+
140
+ 1. **Code may pause unexpectedly** - resumes later, possibly different thread
141
+ 2. **State can change** - mutable state may be modified during suspension
142
+ 3. **Actor reentrancy** - other tasks can access actor during suspension
143
+
144
+ ### Actor reentrancy example
145
+
146
+ ```swift
147
+ actor BankAccount {
148
+ private var balance: Int = 0
149
+
150
+ func deposit(amount: Int) async {
151
+ balance += amount
152
+ print("Balance: \(balance)")
153
+
154
+ await logTransaction(amount) // ⚠️ Suspension point
155
+
156
+ balance += 10 // Bonus
157
+ print("After bonus: \(balance)")
158
+ }
159
+
160
+ func logTransaction(_ amount: Int) async {
161
+ try? await Task.sleep(for: .seconds(1))
162
+ }
163
+ }
164
+
165
+ // Two concurrent deposits
166
+ async let _ = account.deposit(amount: 100)
167
+ async let _ = account.deposit(amount: 100)
168
+
169
+ // Unexpected: 100 → 200 → 210 → 220
170
+ // Expected: 100 → 110 → 210 → 220
171
+ ```
172
+
173
+ **Why**: During `logTransaction`, second deposit runs, modifying balance before first completes.
174
+
175
+ ### Avoiding reentrancy bugs
176
+
177
+ **Complete actor work before suspending**:
178
+
179
+ ```swift
180
+ func deposit(amount: Int) async {
181
+ balance += amount
182
+ balance += 10 // Bonus applied first
183
+ print("Final balance: \(balance)")
184
+
185
+ await logTransaction(amount) // Suspend after state changes
186
+ }
187
+ ```
188
+
189
+ **Rule**: Don't mutate actor state after suspension points.
190
+
191
+ > **Course Deep Dive**: This topic is covered in detail in [Lesson 7.3: Understanding Task suspension points](https://www.swiftconcurrencycourse.com?utm_source=github&utm_medium=agent-skill&utm_campaign=lesson-reference)
192
+
193
+ ## Thread Execution Patterns
194
+
195
+ ### Default: Background threads
196
+
197
+ Tasks run on cooperative thread pool (background threads):
198
+
199
+ ```swift
200
+ Task {
201
+ print(Thread.current) // Background thread
202
+ }
203
+ ```
204
+
205
+ ### Main thread execution
206
+
207
+ Use `@MainActor` for main thread:
208
+
209
+ ```swift
210
+ @MainActor
211
+ func updateUI() {
212
+ Task {
213
+ print(Thread.current) // Main thread
214
+ }
215
+ }
216
+ ```
217
+
218
+ ### Inheritance example
219
+
220
+ ```swift
221
+ @MainActor
222
+ func updateUI() {
223
+ print("Main thread: \(Thread.current)")
224
+
225
+ await backgroundTask() // Switches to background
226
+
227
+ print("Back on main: \(Thread.current)") // Returns to main
228
+ }
229
+
230
+ func backgroundTask() async {
231
+ print("Background: \(Thread.current)")
232
+ }
233
+ ```
234
+
235
+ ## Swift 6.2 Changes
236
+
237
+ ### Nonisolated async functions (SE-461)
238
+
239
+ **Old behavior**: Nonisolated async functions always switch to background.
240
+
241
+ **New behavior**: Inherit caller's isolation by default.
242
+
243
+ ```swift
244
+ class NotSendable {
245
+ func performAsync() async {
246
+ print(Thread.current)
247
+ }
248
+ }
249
+
250
+ @MainActor
251
+ func caller() async {
252
+ let obj = NotSendable()
253
+ await obj.performAsync()
254
+ // Old: Background thread
255
+ // New: Main thread (inherits @MainActor)
256
+ }
257
+ ```
258
+
259
+ ### Enabling new behavior
260
+
261
+ In Xcode 16+:
262
+
263
+ ```swift
264
+ // Build setting or swift-settings
265
+ .enableUpcomingFeature("NonisolatedNonsendingByDefault")
266
+ ```
267
+
268
+ ### Opting out with @concurrent
269
+
270
+ Force function to switch away from caller's isolation:
271
+
272
+ ```swift
273
+ @concurrent
274
+ func performAsync() async {
275
+ print(Thread.current) // Always background
276
+ }
277
+ ```
278
+
279
+ ### nonisolated(nonsending)
280
+
281
+ Prevent sending non-Sendable values across isolation:
282
+
283
+ ```swift
284
+ nonisolated(nonsending) func storeTouch(...) async {
285
+ // Runs on caller's isolation, no value sending
286
+ }
287
+ ```
288
+
289
+ > **Course Deep Dive**: This topic is covered in detail in [Lesson 7.4: Dispatching to different threads using nonisolated(nonsending) and @concurrent (Updated for Swift 6.2)](https://www.swiftconcurrencycourse.com?utm_source=github&utm_medium=agent-skill&utm_campaign=lesson-reference)
290
+
291
+ **Use when**: Method doesn't need to switch isolation, avoiding Sendable requirements.
292
+
293
+ ## Default Isolation Domain (SE-466)
294
+
295
+ ### Configuring default isolation
296
+
297
+ **Build setting** (Xcode 16+):
298
+ - Default Actor Isolation: `MainActor` or `None`
299
+
300
+ **Swift Package**:
301
+
302
+ ```swift
303
+ .target(
304
+ name: "MyTarget",
305
+ swiftSettings: [
306
+ .defaultIsolation(MainActor.self)
307
+ ]
308
+ )
309
+ ```
310
+
311
+ ### Why change default?
312
+
313
+ Most app code runs on main thread. Setting `@MainActor` as default:
314
+ - Reduces false warnings
315
+ - Avoids "concurrency rabbit hole"
316
+ - Makes migration easier
317
+
318
+ ### Inference with @MainActor default
319
+
320
+ ```swift
321
+ // With @MainActor as default:
322
+
323
+ func f() {} // Inferred: @MainActor
324
+
325
+ class C {
326
+ init() {} // Inferred: @MainActor
327
+ static var value = 10 // Inferred: @MainActor
328
+ }
329
+
330
+ @MyActor
331
+ struct S {
332
+ func f() {} // Inferred: @MyActor (explicit override)
333
+ }
334
+
335
+ > **Course Deep Dive**: This topic is covered in detail in [Lesson 7.5: Controlling the default isolation domain (Updated for Swift 6.2)](https://www.swiftconcurrencycourse.com?utm_source=github&utm_medium=agent-skill&utm_campaign=lesson-reference)
336
+ ```
337
+
338
+ ### Per-module setting
339
+
340
+ Must opt in for each module/package. Not global across dependencies.
341
+
342
+ ### Backward compatibility
343
+
344
+ Opt-in only. Default remains `nonisolated` if not specified.
345
+
346
+ ## Debugging Thread Execution
347
+
348
+ ### Print current thread
349
+
350
+ **⚠️ Important**: `Thread.current` is unavailable in Swift 6 language mode from async contexts. The compiler error states: "Class property 'current' is unavailable from asynchronous contexts; Thread.current cannot be used from async contexts."
351
+
352
+ **Workaround** (Swift 6+ mode only):
353
+
354
+ ```swift
355
+ extension Thread {
356
+ public static var currentThread: Thread {
357
+ Thread.current
358
+ }
359
+ }
360
+
361
+ print("Thread: \(Thread.currentThread)")
362
+ ```
363
+
364
+ ### Debug navigator
365
+
366
+ 1. Set breakpoint in task
367
+ 2. Debug → Pause
368
+ 3. Check Debug Navigator for thread info
369
+
370
+ ### Verify main thread
371
+
372
+ ```swift
373
+ assert(Thread.isMainThread)
374
+ ```
375
+
376
+ ## Common Misconceptions
377
+
378
+ ### ❌ Each Task runs on new thread
379
+
380
+ **Wrong**. Tasks share limited thread pool, reuse threads.
381
+
382
+ ### ❌ await blocks the thread
383
+
384
+ **Wrong**. `await` suspends task without blocking thread. Other tasks can use the thread.
385
+
386
+ ### ❌ Task execution order is guaranteed
387
+
388
+ **Wrong**. Tasks execute based on system scheduling. Use `await` to enforce order.
389
+
390
+ ### ❌ Same task = same thread
391
+
392
+ **Wrong**. Task can resume on different thread after suspension.
393
+
394
+ ## Why Sendable Matters
395
+
396
+ Since tasks move between threads unpredictably:
397
+
398
+ ```swift
399
+ func example() async {
400
+ print("Thread 1: \(Thread.current)")
401
+
402
+ await someWork()
403
+
404
+ print("Thread 2: \(Thread.current)") // Different thread
405
+ }
406
+ ```
407
+
408
+ Values crossing suspension points may cross threads. **Sendable** ensures safety.
409
+
410
+ ## Best Practices
411
+
412
+ 1. **Stop thinking about threads** - think isolation domains
413
+ 2. **Trust the system** - Swift optimizes thread usage
414
+ 3. **Use @MainActor for UI** - clear, explicit main thread execution
415
+ 4. **Minimize suspension points in actors** - avoid reentrancy bugs
416
+ 5. **Complete state changes before suspending** - prevent inconsistent state
417
+ 6. **Use priorities as hints** - not guarantees
418
+ 7. **Make types Sendable** - safe across thread boundaries
419
+ 8. **Enable Swift 6.2 features** - easier migration, better defaults
420
+ 9. **Set default isolation for apps** - reduce false warnings
421
+ 10. **Don't force thread switching** - let Swift optimize
422
+
423
+ ## Migration Strategy
424
+
425
+ ### For new projects (Xcode 16+)
426
+
427
+ 1. Set default isolation to `@MainActor`
428
+ 2. Enable `NonisolatedNonsendingByDefault`
429
+ 3. Use `@concurrent` for explicit background work
430
+
431
+ ### For existing projects
432
+
433
+ 1. Gradually enable Swift 6 language mode
434
+ 2. Consider default isolation change
435
+ 3. Use `@concurrent` to maintain old behavior where needed
436
+ 4. Migrate module by module
437
+
438
+ ## Decision Tree
439
+
440
+ ```
441
+ Need to control execution?
442
+ ├─ UI updates? → @MainActor
443
+ ├─ Specific state isolation? → Custom actor
444
+ ├─ Background work? → Regular async (trust Swift)
445
+ └─ Need to force background? → @concurrent (Swift 6.2+)
446
+
447
+ Seeing Sendable warnings?
448
+ ├─ Can make type Sendable? → Add conformance
449
+ ├─ Same isolation OK? → nonisolated(nonsending)
450
+ └─ Need different isolation? → Make Sendable or refactor
451
+ ```
452
+
453
+ ## GCD to Isolation Domain Migration
454
+
455
+ Instead of asking "what thread should this run on?" ask "what isolation domain should own this work?"
456
+
457
+ - `DispatchQueue.main.async { }` → `@MainActor func updateUI()`
458
+ - `DispatchQueue.global().async { }` → `func work() async` (or `@concurrent` if it must leave caller isolation)
459
+ - `DispatchQueue(label:).sync { }` → `actor` or `Mutex` for protecting state
460
+ - Serial queue for ordering → `actor` (guarantees serial access)
461
+
462
+ ## Decision Rules
463
+
464
+ - UI state → usually `@MainActor`
465
+ - Mutable shared state → usually an `actor`
466
+ - Plain async work with no isolated state → `async` API with explicit ownership
467
+ - Work that must hop away from caller isolation under Swift 6.2-era behavior → consider `@concurrent`
468
+
469
+ ## Common Mistakes Agents Make
470
+
471
+ - Recommending GCD queue hopping when actor isolation already expresses the ownership model.
472
+ - Debugging correctness by thread ID instead of by isolation and ordering.
473
+ - Treating `await` as a blocking call — it suspends the task, freeing the thread.
474
+ - Mapping each `Task` to a conceptual thread.
475
+
476
+ ## Performance Insights
477
+
478
+ ### Why fewer threads = better performance
479
+
480
+ - **Less context switching**: CPU spends more time on actual work
481
+ - **Better cache utilization**: Threads stay on same cores longer
482
+ - **No thread explosion**: Predictable resource usage
483
+ - **Forward progress**: Threads never block, always productive
484
+
485
+ ### Cooperative pool advantages
486
+
487
+ - Matches hardware (one thread per core)
488
+ - Prevents oversubscription
489
+ - Efficient task scheduling
490
+ - Automatic load balancing
491
+
492
+ ## Further Learning
493
+
494
+ For migration strategies, real-world examples, and advanced threading patterns, see [Swift Concurrency Course](https://www.swiftconcurrencycourse.com).
495
+
@@ -0,0 +1,216 @@
1
+ ---
2
+ name: swift-concurrency-6-2
3
+ description: Swift 6.2 Approachable Concurrency — single-threaded by default, @concurrent for explicit background offloading, isolated conformances for main actor types.
4
+ ---
5
+
6
+ # Swift 6.2 Approachable Concurrency
7
+
8
+ Patterns for adopting Swift 6.2's concurrency model where code runs single-threaded by default and concurrency is introduced explicitly. Eliminates common data-race errors without sacrificing performance.
9
+
10
+ ## When to Activate
11
+
12
+ - Migrating Swift 5.x or 6.0/6.1 projects to Swift 6.2
13
+ - Resolving data-race safety compiler errors
14
+ - Designing MainActor-based app architecture
15
+ - Offloading CPU-intensive work to background threads
16
+ - Implementing protocol conformances on MainActor-isolated types
17
+ - Enabling Approachable Concurrency build settings in Xcode 26
18
+
19
+ ## Core Problem: Implicit Background Offloading
20
+
21
+ In Swift 6.1 and earlier, async functions could be implicitly offloaded to background threads, causing data-race errors even in seemingly safe code:
22
+
23
+ ```swift
24
+ // Swift 6.1: ERROR
25
+ @MainActor
26
+ final class StickerModel {
27
+ let photoProcessor = PhotoProcessor()
28
+
29
+ func extractSticker(_ item: PhotosPickerItem) async throws -> Sticker? {
30
+ guard let data = try await item.loadTransferable(type: Data.self) else { return nil }
31
+
32
+ // Error: Sending 'self.photoProcessor' risks causing data races
33
+ return await photoProcessor.extractSticker(data: data, with: item.itemIdentifier)
34
+ }
35
+ }
36
+ ```
37
+
38
+ Swift 6.2 fixes this: async functions stay on the calling actor by default.
39
+
40
+ ```swift
41
+ // Swift 6.2: OK — async stays on MainActor, no data race
42
+ @MainActor
43
+ final class StickerModel {
44
+ let photoProcessor = PhotoProcessor()
45
+
46
+ func extractSticker(_ item: PhotosPickerItem) async throws -> Sticker? {
47
+ guard let data = try await item.loadTransferable(type: Data.self) else { return nil }
48
+ return await photoProcessor.extractSticker(data: data, with: item.itemIdentifier)
49
+ }
50
+ }
51
+ ```
52
+
53
+ ## Core Pattern — Isolated Conformances
54
+
55
+ MainActor types can now conform to non-isolated protocols safely:
56
+
57
+ ```swift
58
+ protocol Exportable {
59
+ func export()
60
+ }
61
+
62
+ // Swift 6.1: ERROR — crosses into main actor-isolated code
63
+ // Swift 6.2: OK with isolated conformance
64
+ extension StickerModel: @MainActor Exportable {
65
+ func export() {
66
+ photoProcessor.exportAsPNG()
67
+ }
68
+ }
69
+ ```
70
+
71
+ The compiler ensures the conformance is only used on the main actor:
72
+
73
+ ```swift
74
+ // OK — ImageExporter is also @MainActor
75
+ @MainActor
76
+ struct ImageExporter {
77
+ var items: [any Exportable]
78
+
79
+ mutating func add(_ item: StickerModel) {
80
+ items.append(item) // Safe: same actor isolation
81
+ }
82
+ }
83
+
84
+ // ERROR — nonisolated context can't use MainActor conformance
85
+ nonisolated struct ImageExporter {
86
+ var items: [any Exportable]
87
+
88
+ mutating func add(_ item: StickerModel) {
89
+ items.append(item) // Error: Main actor-isolated conformance cannot be used here
90
+ }
91
+ }
92
+ ```
93
+
94
+ ## Core Pattern — Global and Static Variables
95
+
96
+ Protect global/static state with MainActor:
97
+
98
+ ```swift
99
+ // Swift 6.1: ERROR — non-Sendable type may have shared mutable state
100
+ final class StickerLibrary {
101
+ static let shared: StickerLibrary = .init() // Error
102
+ }
103
+
104
+ // Fix: Annotate with @MainActor
105
+ @MainActor
106
+ final class StickerLibrary {
107
+ static let shared: StickerLibrary = .init() // OK
108
+ }
109
+ ```
110
+
111
+ ### MainActor Default Inference Mode
112
+
113
+ Swift 6.2 introduces a mode where MainActor is inferred by default — no manual annotations needed:
114
+
115
+ ```swift
116
+ // With MainActor default inference enabled:
117
+ final class StickerLibrary {
118
+ static let shared: StickerLibrary = .init() // Implicitly @MainActor
119
+ }
120
+
121
+ final class StickerModel {
122
+ let photoProcessor: PhotoProcessor
123
+ var selection: [PhotosPickerItem] // Implicitly @MainActor
124
+ }
125
+
126
+ extension StickerModel: Exportable { // Implicitly @MainActor conformance
127
+ func export() {
128
+ photoProcessor.exportAsPNG()
129
+ }
130
+ }
131
+ ```
132
+
133
+ This mode is opt-in and recommended for apps, scripts, and other executable targets.
134
+
135
+ ## Core Pattern — @concurrent for Background Work
136
+
137
+ When you need actual parallelism, explicitly offload with `@concurrent`:
138
+
139
+ > **Important:** This example requires Approachable Concurrency build settings — SE-0466 (MainActor default isolation) and SE-0461 (NonisolatedNonsendingByDefault). With these enabled, `extractSticker` stays on the caller's actor, making mutable state access safe. **Without these settings, this code has a data race** — the compiler will flag it.
140
+
141
+ ```swift
142
+ nonisolated final class PhotoProcessor {
143
+ private var cachedStickers: [String: Sticker] = [:]
144
+
145
+ func extractSticker(data: Data, with id: String) async -> Sticker {
146
+ if let sticker = cachedStickers[id] {
147
+ return sticker
148
+ }
149
+
150
+ let sticker = await Self.extractSubject(from: data)
151
+ cachedStickers[id] = sticker
152
+ return sticker
153
+ }
154
+
155
+ // Offload expensive work to concurrent thread pool
156
+ @concurrent
157
+ static func extractSubject(from data: Data) async -> Sticker { /* ... */ }
158
+ }
159
+
160
+ // Callers must await
161
+ let processor = PhotoProcessor()
162
+ processedPhotos[item.id] = await processor.extractSticker(data: data, with: item.id)
163
+ ```
164
+
165
+ To use `@concurrent`:
166
+ 1. Mark the containing type as `nonisolated`
167
+ 2. Add `@concurrent` to the function
168
+ 3. Add `async` if not already asynchronous
169
+ 4. Add `await` at call sites
170
+
171
+ ## Key Design Decisions
172
+
173
+ | Decision | Rationale |
174
+ |----------|-----------|
175
+ | Single-threaded by default | Most natural code is data-race free; concurrency is opt-in |
176
+ | Async stays on calling actor | Eliminates implicit offloading that caused data-race errors |
177
+ | Isolated conformances | MainActor types can conform to protocols without unsafe workarounds |
178
+ | `@concurrent` explicit opt-in | Background execution is a deliberate performance choice, not accidental |
179
+ | MainActor default inference | Reduces boilerplate `@MainActor` annotations for app targets |
180
+ | Opt-in adoption | Non-breaking migration path — enable features incrementally |
181
+
182
+ ## Migration Steps
183
+
184
+ 1. **Enable in Xcode**: Swift Compiler > Concurrency section in Build Settings
185
+ 2. **Enable in SPM**: Use `SwiftSettings` API in package manifest
186
+ 3. **Use migration tooling**: Automatic code changes via swift.org/migration
187
+ 4. **Start with MainActor defaults**: Enable inference mode for app targets
188
+ 5. **Add `@concurrent` where needed**: Profile first, then offload hot paths
189
+ 6. **Test thoroughly**: Data-race issues become compile-time errors
190
+
191
+ ## Best Practices
192
+
193
+ - **Start on MainActor** — write single-threaded code first, optimize later
194
+ - **Use `@concurrent` only for CPU-intensive work** — image processing, compression, complex computation
195
+ - **Enable MainActor inference mode** for app targets that are mostly single-threaded
196
+ - **Profile before offloading** — use Instruments to find actual bottlenecks
197
+ - **Protect globals with MainActor** — global/static mutable state needs actor isolation
198
+ - **Use isolated conformances** instead of `nonisolated` workarounds or `@Sendable` wrappers
199
+ - **Migrate incrementally** — enable features one at a time in build settings
200
+
201
+ ## Anti-Patterns to Avoid
202
+
203
+ - Applying `@concurrent` to every async function (most don't need background execution)
204
+ - Using `nonisolated` to suppress compiler errors without understanding isolation
205
+ - Keeping legacy `DispatchQueue` patterns when actors provide the same safety
206
+ - Skipping `model.availability` checks in concurrency-related Foundation Models code
207
+ - Fighting the compiler — if it reports a data race, the code has a real concurrency issue
208
+ - Assuming all async code runs in the background (Swift 6.2 default: stays on calling actor)
209
+
210
+ ## When to Use
211
+
212
+ - All new Swift 6.2+ projects (Approachable Concurrency is the recommended default)
213
+ - Migrating existing apps from Swift 5.x or 6.0/6.1 concurrency
214
+ - Resolving data-race safety compiler errors during Xcode 26 adoption
215
+ - Building MainActor-centric app architectures (most UI apps)
216
+ - Performance optimization — offloading specific heavy computations to background