@mmerterden/multi-agent-pipeline 20.7.0 → 20.8.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 (264) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/LICENSE +0 -10
  3. package/docs/facts.json +1 -1
  4. package/manifest.json +266 -267
  5. package/package.json +2 -2
  6. package/pipeline/scripts/_notices.mjs +1 -1
  7. package/pipeline/skills/.skill-manifest.json +68 -68
  8. package/pipeline/skills/shared/README.md +70 -70
  9. package/pipeline/skills/shared/external/alarmkit/SKILL.md +373 -381
  10. package/pipeline/skills/shared/external/alarmkit/evals/evals.json +23 -18
  11. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +328 -378
  12. package/pipeline/skills/shared/external/app-clips/SKILL.md +260 -160
  13. package/pipeline/skills/shared/external/app-clips/evals/evals.json +27 -27
  14. package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +150 -83
  15. package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +135 -83
  16. package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +143 -85
  17. package/pipeline/skills/shared/external/app-intents/SKILL.md +302 -304
  18. package/pipeline/skills/shared/external/app-intents/evals/evals.json +21 -21
  19. package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +594 -894
  20. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +339 -277
  21. package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +27 -23
  22. package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +105 -122
  23. package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +143 -166
  24. package/pipeline/skills/shared/external/app-store-review/SKILL.md +307 -326
  25. package/pipeline/skills/shared/external/app-store-review/evals/evals.json +21 -21
  26. package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +105 -67
  27. package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +114 -101
  28. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +333 -360
  29. package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +24 -27
  30. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +215 -322
  31. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +161 -256
  32. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +277 -387
  33. package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +196 -210
  34. package/pipeline/skills/shared/external/authentication/SKILL.md +265 -381
  35. package/pipeline/skills/shared/external/authentication/evals/evals.json +25 -25
  36. package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +133 -178
  37. package/pipeline/skills/shared/external/authentication/references/passkeys.md +111 -147
  38. package/pipeline/skills/shared/external/avkit/SKILL.md +267 -364
  39. package/pipeline/skills/shared/external/avkit/evals/evals.json +26 -26
  40. package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +375 -493
  41. package/pipeline/skills/shared/external/background-processing/SKILL.md +270 -382
  42. package/pipeline/skills/shared/external/background-processing/evals/evals.json +22 -22
  43. package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +169 -317
  44. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +290 -371
  45. package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +24 -24
  46. package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +175 -343
  47. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +292 -381
  48. package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +33 -30
  49. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +227 -355
  50. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +197 -346
  51. package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +19 -21
  52. package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +169 -308
  53. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +226 -376
  54. package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +25 -22
  55. package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +257 -337
  56. package/pipeline/skills/shared/external/core-data/SKILL.md +292 -368
  57. package/pipeline/skills/shared/external/core-data/evals/evals.json +30 -27
  58. package/pipeline/skills/shared/external/core-motion/SKILL.md +235 -324
  59. package/pipeline/skills/shared/external/core-motion/evals/evals.json +31 -27
  60. package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +210 -310
  61. package/pipeline/skills/shared/external/core-nfc/SKILL.md +292 -366
  62. package/pipeline/skills/shared/external/core-nfc/evals/evals.json +22 -24
  63. package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +233 -329
  64. package/pipeline/skills/shared/external/coreml/SKILL.md +323 -367
  65. package/pipeline/skills/shared/external/coreml/evals/evals.json +24 -21
  66. package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +562 -565
  67. package/pipeline/skills/shared/external/cryptokit/SKILL.md +253 -394
  68. package/pipeline/skills/shared/external/cryptokit/evals/evals.json +20 -18
  69. package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +299 -488
  70. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +270 -323
  71. package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +27 -30
  72. package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +167 -315
  73. package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +140 -193
  74. package/pipeline/skills/shared/external/device-integrity/SKILL.md +230 -353
  75. package/pipeline/skills/shared/external/device-integrity/evals/evals.json +25 -21
  76. package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +159 -197
  77. package/pipeline/skills/shared/external/energykit/SKILL.md +225 -392
  78. package/pipeline/skills/shared/external/energykit/evals/evals.json +29 -28
  79. package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +174 -470
  80. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +261 -383
  81. package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +25 -22
  82. package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +165 -268
  83. package/pipeline/skills/shared/external/healthkit/SKILL.md +252 -303
  84. package/pipeline/skills/shared/external/healthkit/evals/evals.json +24 -23
  85. package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +369 -523
  86. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +233 -348
  87. package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +27 -22
  88. package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +199 -305
  89. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +368 -340
  90. package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +28 -27
  91. package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +314 -260
  92. package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +97 -67
  93. package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +165 -101
  94. package/pipeline/skills/shared/external/ios-localization/SKILL.md +258 -371
  95. package/pipeline/skills/shared/external/ios-localization/evals/evals.json +23 -23
  96. package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +283 -491
  97. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +313 -440
  98. package/pipeline/skills/shared/external/ios-networking/SKILL.md +265 -341
  99. package/pipeline/skills/shared/external/ios-networking/evals/evals.json +24 -24
  100. package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +425 -652
  101. package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +143 -285
  102. package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -53
  103. package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +231 -456
  104. package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +517 -784
  105. package/pipeline/skills/shared/external/ios-simulator/SKILL.md +265 -393
  106. package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +21 -21
  107. package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +177 -270
  108. package/pipeline/skills/shared/external/live-activities/SKILL.md +318 -360
  109. package/pipeline/skills/shared/external/live-activities/evals/evals.json +21 -21
  110. package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +478 -710
  111. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +295 -267
  112. package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +28 -24
  113. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +378 -532
  114. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +397 -499
  115. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +165 -348
  116. package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +26 -23
  117. package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +123 -130
  118. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +189 -315
  119. package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +22 -21
  120. package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +181 -270
  121. package/pipeline/skills/shared/external/natural-language/SKILL.md +188 -340
  122. package/pipeline/skills/shared/external/natural-language/evals/evals.json +21 -21
  123. package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +171 -225
  124. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +258 -392
  125. package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +30 -29
  126. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +164 -231
  127. package/pipeline/skills/shared/external/pdfkit/SKILL.md +312 -344
  128. package/pipeline/skills/shared/external/pdfkit/evals/evals.json +19 -19
  129. package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +413 -624
  130. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +242 -358
  131. package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +25 -21
  132. package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +161 -226
  133. package/pipeline/skills/shared/external/permissionkit/SKILL.md +282 -400
  134. package/pipeline/skills/shared/external/permissionkit/evals/evals.json +27 -30
  135. package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +237 -350
  136. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +276 -325
  137. package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +299 -545
  138. package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +344 -588
  139. package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +316 -660
  140. package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +270 -416
  141. package/pipeline/skills/shared/external/push-notifications/SKILL.md +312 -340
  142. package/pipeline/skills/shared/external/push-notifications/evals/evals.json +27 -26
  143. package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +328 -485
  144. package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +327 -560
  145. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +218 -410
  146. package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +24 -27
  147. package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +221 -348
  148. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +222 -393
  149. package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +23 -24
  150. package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +280 -420
  151. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +217 -421
  152. package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +23 -26
  153. package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +133 -125
  154. package/pipeline/skills/shared/external/storekit/SKILL.md +228 -204
  155. package/pipeline/skills/shared/external/storekit/evals/evals.json +27 -24
  156. package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +98 -109
  157. package/pipeline/skills/shared/external/storekit/references/core-patterns.md +298 -242
  158. package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +356 -649
  159. package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +274 -399
  160. package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +22 -24
  161. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +107 -108
  162. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +93 -165
  163. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +99 -137
  164. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +77 -120
  165. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +334 -350
  166. package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +22 -22
  167. package/pipeline/skills/shared/external/swift-charts/SKILL.md +208 -394
  168. package/pipeline/skills/shared/external/swift-charts/evals/evals.json +27 -30
  169. package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +351 -762
  170. package/pipeline/skills/shared/external/swift-codable/SKILL.md +339 -343
  171. package/pipeline/skills/shared/external/swift-codable/evals/evals.json +20 -20
  172. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +303 -351
  173. package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +27 -24
  174. package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +65 -80
  175. package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +48 -84
  176. package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +134 -79
  177. package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +145 -167
  178. package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +62 -50
  179. package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +92 -121
  180. package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +177 -241
  181. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +258 -234
  182. package/pipeline/skills/shared/external/swift-language/SKILL.md +342 -382
  183. package/pipeline/skills/shared/external/swift-language/evals/evals.json +24 -27
  184. package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +79 -56
  185. package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +297 -340
  186. package/pipeline/skills/shared/external/swift-security/SKILL.md +180 -161
  187. package/pipeline/skills/shared/external/swift-security/evals/evals.json +25 -25
  188. package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +314 -469
  189. package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +408 -476
  190. package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +260 -530
  191. package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +270 -477
  192. package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +573 -571
  193. package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +370 -441
  194. package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +332 -433
  195. package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +346 -468
  196. package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +352 -472
  197. package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +431 -432
  198. package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +328 -425
  199. package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +341 -579
  200. package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +396 -457
  201. package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +354 -614
  202. package/pipeline/skills/shared/external/swift-testing/SKILL.md +188 -175
  203. package/pipeline/skills/shared/external/swift-testing/evals/evals.json +26 -24
  204. package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +80 -84
  205. package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +317 -433
  206. package/pipeline/skills/shared/external/swiftdata/SKILL.md +392 -256
  207. package/pipeline/skills/shared/external/swiftdata/evals/evals.json +24 -24
  208. package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +206 -402
  209. package/pipeline/skills/shared/external/swiftdata/references/indexing.md +59 -52
  210. package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +57 -33
  211. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +354 -747
  212. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +300 -508
  213. package/pipeline/skills/shared/external/swiftlint/SKILL.md +175 -226
  214. package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +141 -208
  215. package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +100 -109
  216. package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +159 -179
  217. package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +383 -18
  218. package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +143 -229
  219. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +283 -366
  220. package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +396 -608
  221. package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +336 -385
  222. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +239 -349
  223. package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +228 -310
  224. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +260 -249
  225. package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +92 -74
  226. package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +112 -177
  227. package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +61 -64
  228. package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +94 -134
  229. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +193 -225
  230. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +173 -327
  231. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +193 -168
  232. package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +127 -150
  233. package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +132 -133
  234. package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +152 -117
  235. package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +106 -140
  236. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +316 -252
  237. package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +341 -332
  238. package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +547 -854
  239. package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +485 -537
  240. package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +417 -499
  241. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +213 -376
  242. package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +86 -175
  243. package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +89 -195
  244. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +95 -182
  245. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +71 -149
  246. package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +21 -27
  247. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +303 -295
  248. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +204 -387
  249. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +469 -683
  250. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +140 -186
  251. package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +75 -86
  252. package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +63 -60
  253. package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +69 -137
  254. package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +95 -67
  255. package/pipeline/skills/shared/external/tipkit/SKILL.md +220 -335
  256. package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +356 -494
  257. package/pipeline/skills/shared/external/vision-framework/SKILL.md +260 -375
  258. package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +393 -515
  259. package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +363 -539
  260. package/pipeline/skills/shared/external/weatherkit/SKILL.md +152 -310
  261. package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +288 -407
  262. package/pipeline/skills/shared/external/widgetkit/SKILL.md +216 -288
  263. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +414 -719
  264. package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +0 -39
@@ -1,196 +1,215 @@
1
1
  ---
2
2
  name: swift-security
3
- description: Use when working with iOS/macOS Keychain Services (SecItem queries, kSecClass, OSStatus errors), biometric authentication (LAContext, Face ID, Touch ID), CryptoKit (AES-GCM, ChaChaPoly, ECDSA, ECDH, HPKE, ML-KEM), Secure Enclave, secure credential storage (OAuth tokens, API keys), certificate pinning (SecTrust, SPKI), keychain sharing across apps/extensions, migrating secrets from UserDefaults or plists, or OWASP MASVS/MASTG mobile compliance on Apple platforms.
3
+ description: "Apple client security: Keychain (SecItem, kSecClass, OSStatus, iOS and macOS), Face ID/Touch ID (LAContext), CryptoKit (AES-GCM, ChaChaPoly, ECDSA, ECDH, HPKE, ML-KEM), Secure Enclave, OAuth token and API key storage, SecTrust/SPKI pinning, keychain sharing, moving secrets out of UserDefaults or plists, OWASP MASVS/MASTG. Use when writing, reviewing or migrating code that stores secrets, holds keys or evaluates trust. Not for passkeys, App Attest or App Review."
4
4
  metadata:
5
- source: "dpearson2699/swift-ios-skills (PolyForm Perimeter 1.0.0)"
5
+ source: multi-agent-pipeline
6
6
  ---
7
7
 
8
8
  # Swift Security
9
9
 
10
- Use this skill for client-side Apple platform security work: Keychain Services,
11
- access control, biometric-gated secrets, CryptoKit, Secure Enclave keys,
12
- credential storage, certificate trust, keychain sharing, legacy secret
13
- migration, security testing, and OWASP mobile compliance mapping.
10
+ This skill covers the parts of an Apple-platform app that hold secrets on the
11
+ device: the keychain, biometric gates, CryptoKit primitives, Secure Enclave keys,
12
+ server trust, and the audit vocabulary around them.
14
13
 
15
- Default to iOS 17+ and Swift concurrency examples when the deployment target is
16
- unknown. Keep iOS 13+ compatibility notes when the user asks for older targets.
17
- Treat iOS 26 CryptoKit post-quantum APIs as availability-gated.
18
-
19
- ## Contents
20
-
21
- - [Workflow](#workflow)
22
- - [Reference Loading](#reference-loading)
23
- - [Security Invariants](#security-invariants)
24
- - [Sibling Boundaries](#sibling-boundaries)
25
- - [Review Checklist](#review-checklist)
26
- - [Common Mistakes](#common-mistakes)
27
- - [Output Rules](#output-rules)
28
- - [References](#references)
14
+ If nobody states a deployment target, write examples for iOS 17 and later with
15
+ Swift concurrency (actors, `async`/`await`). If the user names an older target,
16
+ keep an iOS 13 compatible path alongside (serial queue, completion handlers).
17
+ Everything CryptoKit shipped for post-quantum work in iOS 26 (SHA-3, ML-KEM,
18
+ ML-DSA, X-Wing, the Secure Enclave lattice types) sits behind an availability
19
+ check; never present it as usable on earlier systems.
29
20
 
30
21
  ## Workflow
31
22
 
32
- Classify the request before loading references.
23
+ Decide which of three jobs the request is before opening any reference file.
33
24
 
34
- 1. Review existing code: run the [Review Checklist](#review-checklist), then
35
- load [common-anti-patterns.md](references/common-anti-patterns.md) plus the
36
- domain reference for each failing area. Report severity, evidence, and the
37
- corrected pattern.
38
- 2. Improve or migrate code: identify the migration type, load the migration
39
- and target-domain references, preserve existing data, verify the new item,
40
- then remove legacy storage only after success.
41
- 3. Implement new security code: load the minimum domain references, use the
42
- provided correct patterns, include OSStatus handling and tests, then run the
43
- relevant checklist.
25
+ 1. **Review of existing code.** Walk the Review Checklist below. For every row
26
+ that fails, open [Anti-pattern catalog](references/common-anti-patterns.md)
27
+ and the domain file for that row. Report each finding with a severity, the
28
+ offending code as evidence, and the corrected pattern.
29
+ 2. **Improvement or migration.** Name the kind of migration (plaintext to
30
+ keychain, class change, accessibility change, sharing, macOS backend). Open
31
+ [Legacy migration](references/migration-legacy-stores.md) and the
32
+ file for the target domain. Keep the user's existing data readable, read the
33
+ new item back to prove the write, and remove the old copy only after that
34
+ check passes.
35
+ 3. **New implementation.** Open the fewest domain files that answer the
36
+ question and follow what they show. Handle every OSStatus, add tests, and
37
+ finish by running the matching part of the checklist.
44
38
 
45
- Do not load every reference file by default. This skill is intentionally split
46
- for progressive disclosure; load only the files needed by the user's task.
39
+ Load references on demand. Opening all of them for every question wastes
40
+ context and blurs the answer.
47
41
 
48
- ## Reference Loading
42
+ ## Which Reference to Open
49
43
 
50
- | If the task involves | Load |
44
+ | The task involves | Open |
51
45
  | --- | --- |
52
- | General keychain CRUD or OSStatus handling | [keychain-fundamentals.md](references/keychain-fundamentals.md) |
53
- | Choosing `kSecClass` or item identity | [keychain-item-classes.md](references/keychain-item-classes.md) |
54
- | Accessibility classes or `SecAccessControl` | [keychain-access-control.md](references/keychain-access-control.md) |
55
- | Face ID, Touch ID, or biometric-gated secrets | [biometric-authentication.md](references/biometric-authentication.md) |
56
- | Secure Enclave keys | [secure-enclave.md](references/secure-enclave.md) |
57
- | Hashing, HMAC, AES-GCM, ChaChaPoly, HKDF, PBKDF2 | [cryptokit-symmetric.md](references/cryptokit-symmetric.md) |
58
- | Signing, ECDH, HPKE, ML-KEM, ML-DSA | [cryptokit-public-key.md](references/cryptokit-public-key.md) |
59
- | OAuth tokens, API keys, logout, refresh rotation | [credential-storage-patterns.md](references/credential-storage-patterns.md) |
60
- | App/extension keychain sharing | [keychain-sharing.md](references/keychain-sharing.md) |
61
- | Certificate trust, SPKI pinning, mTLS | [certificate-trust.md](references/certificate-trust.md) |
62
- | UserDefaults/plist/NSCoding migration | [migration-legacy-stores.md](references/migration-legacy-stores.md) |
63
- | Unit, integration, simulator, device, or CI tests | [testing-security-code.md](references/testing-security-code.md) |
64
- | OWASP MASVS/MASTG or enterprise audit mapping | [compliance-owasp-mapping.md](references/compliance-owasp-mapping.md) |
65
- | Full security review | [common-anti-patterns.md](references/common-anti-patterns.md), then each touched domain reference |
46
+ | Keychain CRUD, return types, OSStatus codes | [Keychain basics](references/keychain-fundamentals.md) |
47
+ | Picking a `kSecClass`, primary keys, item identity | [Item classes](references/keychain-item-classes.md) |
48
+ | `kSecAttrAccessible` values, `SecAccessControl` flags | [Access control](references/keychain-access-control.md) |
49
+ | Face ID, Touch ID, secrets released by biometrics | [Biometrics](references/biometric-authentication.md) |
50
+ | Keys generated in the Secure Enclave | [Enclave keys](references/secure-enclave.md) |
51
+ | SHA-2/SHA-3, HMAC, AES-GCM, ChaChaPoly, HKDF, PBKDF2 | [Symmetric crypto](references/cryptokit-symmetric.md) |
52
+ | Signatures, ECDH, HPKE, ML-KEM, ML-DSA | [Public-key crypto](references/cryptokit-public-key.md) |
53
+ | OAuth tokens, API keys, refresh rotation, logout | [Credential lifecycles](references/credential-storage-patterns.md) |
54
+ | Sharing items between an app and its extensions or sibling apps | [Sharing](references/keychain-sharing.md) |
55
+ | `SecTrust`, SPKI pinning, client certificates (mTLS) | [Trust and pinning](references/certificate-trust.md) |
56
+ | Moving data out of UserDefaults, plists, NSCoding archives | [Legacy migration](references/migration-legacy-stores.md) |
57
+ | Unit, integration, Simulator, device and CI testing | [Testing](references/testing-security-code.md) |
58
+ | OWASP MASVS, MASTG, audit evidence | [OWASP mapping](references/compliance-owasp-mapping.md) |
59
+ | A full security review | [Anti-pattern catalog](references/common-anti-patterns.md) first, then each domain the code touches |
66
60
 
67
61
  ## Security Invariants
68
62
 
69
- Use directive language only for these security invariants and the matching
70
- anti-patterns in [common-anti-patterns.md](references/common-anti-patterns.md).
71
- For architecture choices outside this list, use advisory language.
72
-
73
- - Never store tokens, passwords, API keys, signing keys, or refresh tokens in
74
- `UserDefaults`, `Info.plist`, `.xcconfig`, source code, logs, files, or
75
- `NSCoding` archives. Use Keychain or fetch secrets at runtime.
76
- - Never ignore `OSStatus`. Every `SecItemAdd`, `SecItemCopyMatching`,
77
- `SecItemUpdate`, and `SecItemDelete` path must handle success and expected
78
- failures such as `errSecDuplicateItem`, `errSecItemNotFound`, and
79
- `errSecInteractionNotAllowed`.
80
- - Never use `LAContext.evaluatePolicy()` as the only gate for a secret. Bind
81
- protected secrets to keychain items with `SecAccessControl`, then let
82
- keychain access trigger LocalAuthentication.
83
- - Always set `kSecAttrAccessible` or `kSecAttrAccessControl` explicitly when
84
- adding keychain items.
85
- - Always use add-or-update for persistent keychain writes. Do not delete-then-add
86
- as a normal update path.
87
- - Keep `SecItem*` work off the main actor. Use an actor or serial queue for
88
- keychain access.
89
- - On macOS AppKit targets, target the data protection keychain with
90
- `kSecUseDataProtectionKeychain: true` unless deliberately working with
91
- legacy file-based keychain items.
92
- - Never reuse an AES-GCM nonce with the same key.
93
- - Never use raw ECDH `SharedSecret` bytes as a symmetric key. Derive with HKDF
94
- or X9.63 derivation.
95
- - Never use `Insecure.MD5` or `Insecure.SHA1` for security purposes.
63
+ Only these rules, and the anti-patterns that break them, are phrased as "must"
64
+ or "never". Everything else in this skill is a recommendation with trade-offs
65
+ and should be worded that way.
66
+
67
+ 1. Never place refresh tokens, signing keys, API keys, passwords or tokens in
68
+ `UserDefaults`, `Info.plist`, `.xcconfig` values, source literals, log
69
+ output, plain files or `NSCoding` archives. Use the keychain, or fetch the
70
+ value from a server at runtime.
71
+ 2. Never discard an `OSStatus`. Every path through `SecItemAdd`,
72
+ `SecItemCopyMatching`, `SecItemUpdate` and `SecItemDelete` handles success
73
+ and the expected failures `errSecDuplicateItem`, `errSecItemNotFound` and
74
+ `errSecInteractionNotAllowed`.
75
+ 3. Never let the `Bool` from `LAContext.evaluatePolicy()` be the only thing
76
+ standing between a user and a secret. Put the secret in a keychain item
77
+ protected by `SecAccessControl`; reading the item makes the system run the
78
+ biometric check.
79
+ 4. Set `kSecAttrAccessible` or `kSecAttrAccessControl` explicitly on every add.
80
+ 5. Save with add-or-update: call `SecItemAdd`, and when it returns
81
+ `errSecDuplicateItem`, call `SecItemUpdate`. Deleting and re-adding is
82
+ reserved for changing an item's access control, which `SecItemUpdate`
83
+ cannot do.
84
+ 6. `SecItem*` calls must not run on the main actor. Isolate them in an actor on
85
+ iOS 17 and later,
86
+ or a private serial queue for older targets.
87
+ 7. On macOS, pass `kSecUseDataProtectionKeychain: true` unless the code is
88
+ deliberately working with the legacy file-based keychain.
89
+ 8. Never encrypt twice with the same AES-GCM nonce under one key.
90
+ 9. Never use the bytes of an ECDH `SharedSecret` as a key. Derive one with
91
+ HKDF or X9.63 first.
92
+ 10. Never let `Insecure.SHA1` or `Insecure.MD5` protect anything; they exist
93
+ for legacy interoperability only.
94
+
95
+ ## Settled Facts
96
+
97
+ These answers apply across every reference file in this skill.
98
+
99
+ - `errSecUserCanceled` is `-128` (the user dismissed the prompt).
100
+ `errSecAuthFailed` is `-25293` (authentication failed or the protected item is
101
+ no longer usable).
102
+ - An item cannot be both synchronizable and `...ThisDeviceOnly`. Apple's
103
+ `kSecAttrSynchronizable` documentation forbids pairing it with an
104
+ accessibility value that ends in `ThisDeviceOnly`; the add is rejected with
105
+ `errSecParam` (-50) rather than quietly staying local.
106
+ - The Simulator has no Secure Enclave. Branch on
107
+ `#if targetEnvironment(simulator)` at compile time and use
108
+ `SecureEnclave.isAvailable` as the runtime check on real hardware; do not base
109
+ Simulator behaviour on what the flag reports there.
110
+ - Secure Enclave private keys that carry an access control always include
111
+ `.privateKeyUsage` in its flags, for example
112
+ `[.privateKeyUsage, .biometryCurrentSet]`.
113
+ - Any code path that shows Face ID needs `NSFaceIDUsageDescription` in
114
+ `Info.plist`. Apple's LocalAuthentication documentation warns that requests
115
+ can fail without it, and that applies to keychain reads that trigger Face ID
116
+ as much as to `evaluatePolicy`.
117
+ - `arc4random` on Apple platforms is backed by a cryptographically secure
118
+ generator, not RC4. Its limits are a 32-bit result and the bias of `% n`. For
119
+ keys, nonces, salts and tokens, use `SecRandomCopyBytes`,
120
+ `SymmetricKey(size:)` or `SystemRandomNumberGenerator` so the size and the
121
+ failure path are explicit.
122
+ - After migrating a secret, remove the plaintext copy as soon as the keychain
123
+ read-back succeeds. A rollback window that keeps plaintext on disk defeats the
124
+ migration; keep any rollback state in the keychain instead.
96
125
 
97
126
  ## Sibling Boundaries
98
127
 
99
- This skill owns client-side storage, cryptographic primitives, hardware-backed
100
- keys, and trust evaluation. Route adjacent work deliberately:
101
-
102
- - Use `authentication` for Sign in with Apple, passkeys, OAuth UI flows,
103
- `ASAuthorizationController`, credential state, and account sign-in UX.
104
- - Use `cryptokit` for general CryptoKit API usage when storage, keychain,
105
- Secure Enclave policy, certificate trust, or compliance review is not part of
106
- the task.
107
- - Use `device-integrity` for DeviceCheck and App Attest attestation/assertion
108
- flows.
109
- - Use `ios-networking` for URLSession, request pipelines, ATS configuration,
110
- retries, caching, reachability, and transport architecture.
111
- - Use `app-store-review` for privacy manifests, ATT, App Review guideline
112
- compliance, and submission readiness.
128
+ This skill owns on-device secret storage, cryptographic primitives, keys held
129
+ in hardware, and checks of server trust. Adjacent topics appear here only to
130
+ point at the right skill:
113
131
 
114
- This skill may mention those areas only to identify a security handoff.
132
+ - `authentication`: passkeys, Sign in with Apple, OAuth sign-in flows,
133
+ `ASAuthorizationController`, credential state, sign-in UX.
134
+ - `cryptokit`: CryptoKit questions with no storage, keychain, Secure Enclave,
135
+ trust or compliance angle.
136
+ - `device-integrity`: DeviceCheck and App Attest attestations and assertions.
137
+ - `ios-networking`: URLSession, request pipelines, ATS settings, retries,
138
+ caching, reachability and transport design.
139
+ - `app-store-review`: privacy manifests, ATT, App Review guidelines and
140
+ submission readiness.
115
141
 
116
142
  ## Review Checklist
117
143
 
118
- Use this checklist for code reviews and migration plans. Mark each item pass,
119
- fail, or not applicable; for each failure, cite the reference file and severity.
120
-
121
- - Secrets are not stored in `UserDefaults`, plists, source, logs, files, or
122
- archives.
123
- - Every `SecItem*` call checks `OSStatus` and handles common recoverable errors.
124
- - Biometric access to secrets is keychain-bound with `SecAccessControl`, not a
125
- standalone `Bool` from `LAContext.evaluatePolicy()`.
126
- - Keychain add dictionaries set an explicit accessibility policy.
127
- - Keychain writes use add-or-update rather than delete-then-add.
128
- - Keychain work is isolated from UI/main-actor code.
129
- - The selected `kSecClass` matches the item type and primary-key attributes.
130
- - CryptoKit code avoids nonce reuse, raw shared-secret use, weak hashes, and
131
- hardcoded keys.
132
- - Secure Enclave code checks availability, handles simulator/device differences,
133
- persists only `dataRepresentation`, and designs for device-bound keys.
134
- - App/extension sharing uses full Team ID access groups and matching
135
- entitlements on every target.
136
- - Certificate trust uses current `SecTrust` APIs, validates hostname/policy, and
137
- uses SPKI or CA pinning when pinning is required.
138
- - macOS keychain code intentionally chooses data protection or file-based
139
- keychain behavior.
140
- - Tests cover success, duplicate, missing item, locked-device, simulator/device,
141
- and migration paths where applicable.
142
- - OWASP MASVS/MASTG mappings are included when compliance is requested.
144
+ Mark each row pass, fail or n/a. A fail names the reference file and a severity.
145
+
146
+ - [ ] No secret sits in source code, `UserDefaults`, a plist, a log line, a plain file or an archive.
147
+ - [ ] Each `SecItem*` call inspects its `OSStatus` and handles the recoverable cases.
148
+ - [ ] Biometric access to a secret goes through a `SecAccessControl` keychain item, not an `evaluatePolicy()` Bool.
149
+ - [ ] Add dictionaries carry an explicit accessibility value.
150
+ - [ ] Saves are add-or-update; delete-then-add appears only for access-control changes.
151
+ - [ ] Keychain calls run away from the UI and the main actor.
152
+ - [ ] The `kSecClass` fits the item and its primary-key attributes are all set.
153
+ - [ ] CryptoKit use avoids nonce reuse, raw shared secrets, weak hashes and embedded keys.
154
+ - [ ] Secure Enclave code checks availability, separates Simulator from device, stores only `dataRepresentation`, and assumes keys never leave the device.
155
+ - [ ] App and extension sharing uses Team ID prefixed access groups with matching entitlements on every target.
156
+ - [ ] Trust evaluation uses current `SecTrust` APIs, checks the host name and policy, and pins SPKI or a CA when pinning is required.
157
+ - [ ] On macOS, the choice between the file-based keychain and the data protection keychain is deliberate.
158
+ - [ ] Tests exercise the happy path, a duplicate add, an absent item, a locked device, Simulator against hardware, and migration where it applies.
159
+ - [ ] A MASVS/MASTG mapping is included when compliance was asked for.
143
160
 
144
161
  ## Common Mistakes
145
162
 
146
- - Generating partial keychain examples without duplicate handling or
147
- `errSecItemNotFound` handling.
148
- - Adding biometric UI but leaving the secret readable without keychain access
149
- control.
150
- - Choosing `kSecAttrAccessibleWhenUnlocked` implicitly by omitting the attribute.
151
- - Using `kSecAttrAccessibleAlways` or
152
- `kSecAttrAccessibleAlwaysThisDeviceOnly`, both deprecated.
153
- - Mixing `kSecAttrAccessible` and `kSecAttrAccessControl` on the same add query.
154
- - Treating Secure Enclave keys as importable, exportable, syncable, or suitable
155
- for symmetric encryption.
156
- - Claiming SHA-3, ML-KEM, ML-DSA, or X-Wing CryptoKit APIs are available before
157
- iOS 26.
158
- - Treating HPKE as available before iOS 17.
159
- - Implementing certificate pinning by hashing only raw key bytes instead of the
160
- correct SPKI representation.
161
- - Expanding this skill into account-login, networking, App Attest, or App Store
162
- review guidance instead of handing off to sibling skills.
163
+ - Keychain snippets that stop at `SecItemAdd` with no duplicate branch or no
164
+ `errSecItemNotFound` branch.
165
+ - A Face ID prompt bolted onto the UI while the secret itself remains readable
166
+ without any keychain access control.
167
+ - Leaving out `kSecAttrAccessible`, which silently means
168
+ `kSecAttrAccessibleWhenUnlocked`.
169
+ - Using `kSecAttrAccessibleAlways` or `kSecAttrAccessibleAlwaysThisDeviceOnly`;
170
+ both are deprecated.
171
+ - One add dictionary that carries both `kSecAttrAccessControl` and
172
+ `kSecAttrAccessible`.
173
+ - Expecting to import, export or sync an enclave key, or asking the enclave to
174
+ perform symmetric encryption.
175
+ - Offering the CryptoKit ML-KEM, ML-DSA, X-Wing or SHA-3 types on systems older
176
+ than iOS 26.
177
+ - Offering HPKE on systems older than iOS 17.
178
+ - Computing a pin over bare public-key bytes instead of the DER-encoded
179
+ SubjectPublicKeyInfo.
180
+ - Wandering into sign-in flows, networking stacks, App Attest or App Review
181
+ instead of handing those parts to the sibling skill.
163
182
 
164
183
  ## Output Rules
165
184
 
166
- - For security findings, state severity: CRITICAL for exploitable secret or
167
- cryptography failures, HIGH for silent security boundary/data-loss issues, and
168
- MEDIUM for brittle or incomplete hardening.
169
- - Include wrong and corrected code examples for implementation reviews when a
170
- concrete anti-pattern is present.
171
- - Include minimum iOS/macOS availability when recommending versioned APIs.
172
- - Cite the reference file that supports each substantive security pattern.
173
- - For keychain code, include `OSStatus` handling and explicit accessibility in
174
- examples.
175
- - For implementation or migration answers, end with `## Reference Files` and
176
- list the loaded references with a one-line purpose.
177
- - Do not invent WWDC session numbers or source citations. If a claim is not
178
- present in the loaded references or official Apple documentation, say it needs
179
- verification.
185
+ - Severity: **CRITICAL** is an exploitable secret exposure or broken crypto;
186
+ **HIGH** is a silent break in a security boundary or a data-loss path;
187
+ **MEDIUM** is hardening that is brittle or incomplete.
188
+ - When reviewing code with a concrete anti-pattern, show the wrong code and the
189
+ corrected code.
190
+ - State the minimum iOS and macOS version whenever you recommend an API that is
191
+ versioned.
192
+ - Name the reference file that backs each substantive security pattern.
193
+ - Keychain samples always show `OSStatus` handling and an explicit
194
+ accessibility value.
195
+ - Close implementation and migration answers with a `## Reference Files`
196
+ section: each reference you loaded plus one line on why.
197
+ - Do not make up WWDC session numbers or citations. When a claim has no source
198
+ at hand, say it needs verification.
180
199
 
181
200
  ## References
182
201
 
183
- - [keychain-fundamentals.md](references/keychain-fundamentals.md) - SecItem CRUD, OSStatus handling, add-or-update, macOS data protection keychain.
184
- - [keychain-item-classes.md](references/keychain-item-classes.md) - `kSecClass` selection, primary keys, certificates, identities.
185
- - [keychain-access-control.md](references/keychain-access-control.md) - Accessibility constants, `SecAccessControl`, background access, data protection.
186
- - [biometric-authentication.md](references/biometric-authentication.md) - Keychain-bound biometrics, `LAContext`, enrollment-change handling.
187
- - [secure-enclave.md](references/secure-enclave.md) - Secure Enclave constraints, persistence, biometric keys, iOS 26 PQ APIs.
188
- - [cryptokit-symmetric.md](references/cryptokit-symmetric.md) - SHA, HMAC, AES-GCM, ChaChaPoly, HKDF, PBKDF2.
189
- - [cryptokit-public-key.md](references/cryptokit-public-key.md) - Signing, key agreement, HPKE, ML-KEM, ML-DSA, key formats.
190
- - [credential-storage-patterns.md](references/credential-storage-patterns.md) - OAuth tokens, API keys, rotation, logout cleanup.
191
- - [keychain-sharing.md](references/keychain-sharing.md) - Access groups, extensions, iCloud sync, macOS access groups.
192
- - [certificate-trust.md](references/certificate-trust.md) - SecTrust, SPKI/CA pinning, `NSPinnedDomains`, client certificates.
193
- - [migration-legacy-stores.md](references/migration-legacy-stores.md) - UserDefaults/plist/NSCoding migration and cleanup.
194
- - [common-anti-patterns.md](references/common-anti-patterns.md) - Review backbone for insecure generated code.
195
- - [testing-security-code.md](references/testing-security-code.md) - Protocol mocks, real keychain tests, CI/device split.
196
- - [compliance-owasp-mapping.md](references/compliance-owasp-mapping.md) - OWASP Mobile Top 10, MASVS, MASTG evidence mapping.
202
+ - [Keychain basics](references/keychain-fundamentals.md): the four SecItem calls, return types, OSStatus handling, actor wrapper, macOS backends.
203
+ - [Item classes](references/keychain-item-classes.md): the five item classes, their primary keys, keys, certificates and identities.
204
+ - [Access control](references/keychain-access-control.md): accessibility constants, `SecAccessControl` flags, background access, file protection.
205
+ - [Biometrics](references/biometric-authentication.md): keychain-bound biometrics, `LAContext`, enrollment changes.
206
+ - [Enclave keys](references/secure-enclave.md): enclave limits, CryptoKit `SecureEnclave`, key persistence, iOS 26 post-quantum types.
207
+ - [Symmetric crypto](references/cryptokit-symmetric.md): hashing, HMAC, AES-GCM, ChaChaPoly, HKDF, PBKDF2.
208
+ - [Public-key crypto](references/cryptokit-public-key.md): ECDSA, ECDH, HPKE, ML-KEM, ML-DSA, key formats, moving off RSA.
209
+ - [Credential lifecycles](references/credential-storage-patterns.md): OAuth tokens, API keys, refresh rotation, logout cleanup.
210
+ - [Sharing](references/keychain-sharing.md): access groups, entitlements, extensions, iCloud Keychain, macOS groups.
211
+ - [Trust and pinning](references/certificate-trust.md): `SecTrust`, SPKI and CA pinning, `NSPinnedDomains`, client certificates.
212
+ - [Legacy migration](references/migration-legacy-stores.md): moving secrets out of UserDefaults, plists and archives, then cleaning up.
213
+ - [Anti-pattern catalog](references/common-anti-patterns.md): the catalog of insecure patterns that drives a review.
214
+ - [Testing](references/testing-security-code.md): protocol mocks, real keychain tests, the CI and device split.
215
+ - [OWASP mapping](references/compliance-owasp-mapping.md): OWASP Mobile Top 10, MASVS and MASTG evidence.
@@ -4,44 +4,44 @@
4
4
  {
5
5
  "id": 0,
6
6
  "name": "keychain-token-review",
7
- "prompt": "Review this iOS token storage helper before we ship it. It saves an OAuth refresh token with `UserDefaults.standard.set(refreshToken, forKey: \"refresh\")`, writes access tokens with `SecItemAdd(query as CFDictionary, nil)` but ignores the returned OSStatus, omits `kSecAttrAccessible`, and calls `SecItemDelete` before every save to avoid duplicates. What is wrong, what severity would you assign, and what should the corrected Keychain pattern require?",
8
- "expected_output": "A security review that flags plaintext token storage, ignored OSStatus, missing accessibility, and delete-then-add as findings; assigns severity; and requires Keychain add-or-update with explicit accessibility and recoverable error handling.",
7
+ "prompt": "Review this helper from our fitness app. `SessionVault.save(refresh:)` keeps a fallback copy via `UserDefaults.standard.set(token, forKey: \"rt\")`, then calls `SecItemDelete` on the same service and account followed by `SecItemAdd` with class, service, account and value data. The return value of `SecItemAdd` is ignored and no accessibility attribute is passed. Tell us what is wrong and how to fix it.",
8
+ "expected_output": "Flags the UserDefaults copy of the refresh token as CRITICAL or HIGH and says it must be removed. Points out the ignored OSStatus and shows handling for errSecDuplicateItem, errSecItemNotFound and errSecInteractionNotAllowed. Adds an explicit kSecAttrAccessible value (or a SecAccessControl) to the add dictionary. Replaces delete-then-add with add, then SecItemUpdate when the add reports a duplicate. Shows wrong and corrected code and names the reference files used.",
9
9
  "files": [],
10
- "assertions": [
11
- "Flags the refresh token in UserDefaults as a critical or high-severity insecure secret storage finding.",
12
- "Requires checking OSStatus for SecItem calls and specifically handling errSecDuplicateItem, errSecItemNotFound, and errSecInteractionNotAllowed where relevant.",
13
- "Requires an explicit kSecAttrAccessible or SecAccessControl policy for added items.",
14
- "Rejects delete-then-add as the normal update strategy and recommends add-or-update with SecItemUpdate on errSecDuplicateItem.",
15
- "Cites or names the relevant swift-security reference files for Keychain fundamentals, credential storage, access control, or common anti-patterns."
10
+ "expectations": [
11
+ "Rates the refresh token stored in UserDefaults as critical or high severity",
12
+ "Adds OSStatus checks that cover errSecDuplicateItem, errSecItemNotFound and errSecInteractionNotAllowed",
13
+ "Sets kSecAttrAccessible explicitly, or uses a SecAccessControl, on the add",
14
+ "Rejects the delete-then-add save and calls SecItemUpdate when SecItemAdd returns a duplicate",
15
+ "Cites the reference files that support the fixes"
16
16
  ]
17
17
  },
18
18
  {
19
19
  "id": 1,
20
20
  "name": "biometric-secret-boundary",
21
- "prompt": "A banking app wants Face ID before showing an account number. The current plan is to call `LAContext.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: ...)`, check the returned Bool, then read the account number from UserDefaults. They also forgot `NSFaceIDUsageDescription`. Write the correction plan and include the important iOS API constraints.",
22
- "expected_output": "A correction plan that rejects the standalone LAContext Bool gate, moves the secret into a Keychain item protected by SecAccessControl, mentions Face ID usage description, handles enrollment changes, and states availability constraints for the biometric APIs.",
21
+ "prompt": "Our banking app shows the full card number after `LAContext().evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason:)` returns true. The number itself lives in UserDefaults and Info.plist has no Face ID entry. Is this acceptable, and what should we change?",
22
+ "expected_output": "Says a Bool from evaluatePolicy is not a security boundary and can be forced true at runtime. Moves the card number into the keychain, guarded by a SecAccessControl using .biometryCurrentSet (or .userPresence where passcode fallback is wanted) so the read itself triggers the prompt. Adds NSFaceIDUsageDescription to Info.plist. Explains that .biometryCurrentSet makes the item unreadable after an enrollment change, how evaluatedPolicyDomainState detects that, and the recovery path. Cites biometric-authentication.md and keychain-access-control.md.",
23
23
  "files": [],
24
- "assertions": [
25
- "States that LAContext.evaluatePolicy alone must not release or protect the stored secret.",
26
- "Requires storing the account number or token in Keychain behind SecAccessControl with an appropriate flag such as .biometryCurrentSet or .userPresence.",
27
- "Mentions NSFaceIDUsageDescription as required for Face ID use.",
28
- "Explains the enrollment-change effect of .biometryCurrentSet or evaluatedPolicyDomainState and the need for recovery/re-enrollment handling.",
29
- "Cites or names biometric-authentication and keychain-access-control references."
24
+ "expectations": [
25
+ "Rejects the evaluatePolicy Bool as the only gate",
26
+ "Stores the secret in the keychain behind SecAccessControl using .biometryCurrentSet or .userPresence",
27
+ "Mentions adding NSFaceIDUsageDescription to Info.plist",
28
+ "Says what an enrollment change does to a .biometryCurrentSet item, covers detection through evaluatedPolicyDomainState, and a recovery flow",
29
+ "Cites biometric-authentication.md and keychain-access-control.md"
30
30
  ]
31
31
  },
32
32
  {
33
33
  "id": 2,
34
34
  "name": "security-sibling-boundary",
35
- "prompt": "A team asks for one security checklist covering Sign in with Apple, passkey server verification, App Attest assertions, URLSession quantum-secure TLS, custom end-to-end document encryption on iOS 26, Keychain refresh-token storage, Secure Enclave keys, and App Store privacy manifests. Give a concise scope review for what swift-security should answer directly and what should be handed to sibling skills.",
36
- "expected_output": "A boundary-aware scope review that keeps Keychain, CryptoKit, Secure Enclave, credential storage, and certificate trust in swift-security; routes auth UI/server passkeys, App Attest, URLSession/TLS transport, and App Store privacy manifests to sibling skills; and names iOS 26 CryptoKit availability for custom quantum-secure workflows.",
35
+ "prompt": "Give us a security checklist for our next release. It covers: refresh-token storage in the keychain, the access policy for a Secure Enclave signing key, pinning our API certificate, end-to-end encrypting chat messages with CryptoKit, adding Sign in with Apple and passkeys, verifying OAuth tokens on the relying party, App Attest, URLSession TLS settings, and our privacy manifest. We also want to try ML-KEM.",
36
+ "expected_output": "Treats four items as in scope here: keychain refresh-token storage, the access policy of the enclave key, certificate trust, and CryptoKit encryption on the client. Hands passkeys, Sign in with Apple, OAuth and relying-party verification to authentication, App Attest and DeviceCheck to device-integrity, URLSession and TLS configuration to ios-networking (the custom CryptoKit end-to-end layer stays here), and the privacy manifest to app-store-review. Notes that X-Wing, ML-DSA, ML-KEM, SHA-3 and the Secure Enclave post-quantum types need iOS 26.",
37
37
  "files": [],
38
- "assertions": [
39
- "Keeps Keychain refresh-token storage, Secure Enclave key policy, certificate trust, and client-side CryptoKit guidance in swift-security scope.",
40
- "Routes Sign in with Apple, passkey registration/assertion UI, OAuth account flows, and passkey relying-party verification to authentication rather than expanding swift-security.",
41
- "Routes App Attest and DeviceCheck assertions to device-integrity.",
42
- "Routes URLSession transport architecture or TLS configuration to ios-networking while noting swift-security can discuss custom CryptoKit end-to-end encryption.",
43
- "Routes App Store privacy manifests and submission compliance to app-store-review.",
44
- "Mentions iOS 26 availability for ML-KEM, ML-DSA, X-Wing, SHA-3, or SecureEnclave post-quantum APIs when discussing custom document encryption."
38
+ "expectations": [
39
+ "Treats keychain token storage, the enclave key policy, certificate trust and client-side CryptoKit as in scope",
40
+ "Routes passkeys, Sign in with Apple, OAuth and relying-party verification to authentication",
41
+ "Routes App Attest and DeviceCheck to device-integrity",
42
+ "Sends URLSession and TLS settings to ios-networking and keeps the app's own end-to-end CryptoKit layer here",
43
+ "Routes privacy manifests to app-store-review",
44
+ "Says X-Wing, ML-DSA, ML-KEM, SHA-3 and the enclave post-quantum APIs require iOS 26"
45
45
  ]
46
46
  }
47
47
  ]