@mmerterden/multi-agent-pipeline 20.6.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 (326) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/LICENSE +0 -10
  3. package/docs/facts.json +1 -1
  4. package/manifest.json +328 -329
  5. package/package.json +2 -2
  6. package/pipeline/multi-agent-refs/features/design-conformance.md +62 -64
  7. package/pipeline/scripts/_notices.mjs +12 -1
  8. package/pipeline/scripts/gen-skills-index.mjs +1 -1
  9. package/pipeline/skills/.skill-manifest.json +106 -106
  10. package/pipeline/skills/shared/README.md +71 -71
  11. package/pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md +1 -0
  12. package/pipeline/skills/shared/external/alarmkit/SKILL.md +373 -381
  13. package/pipeline/skills/shared/external/alarmkit/evals/evals.json +23 -18
  14. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +328 -378
  15. package/pipeline/skills/shared/external/android-architecture/SKILL.md +2 -0
  16. package/pipeline/skills/shared/external/android-performance/SKILL.md +2 -0
  17. package/pipeline/skills/shared/external/android-security/SKILL.md +2 -0
  18. package/pipeline/skills/shared/external/app-clips/SKILL.md +260 -160
  19. package/pipeline/skills/shared/external/app-clips/evals/evals.json +27 -27
  20. package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +150 -83
  21. package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +135 -83
  22. package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +143 -85
  23. package/pipeline/skills/shared/external/app-intents/SKILL.md +302 -304
  24. package/pipeline/skills/shared/external/app-intents/evals/evals.json +21 -21
  25. package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +594 -894
  26. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +339 -277
  27. package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +27 -23
  28. package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +105 -122
  29. package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +143 -166
  30. package/pipeline/skills/shared/external/app-store-review/SKILL.md +307 -326
  31. package/pipeline/skills/shared/external/app-store-review/evals/evals.json +21 -21
  32. package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +105 -67
  33. package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +114 -101
  34. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +333 -360
  35. package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +24 -27
  36. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +215 -322
  37. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +161 -256
  38. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +277 -387
  39. package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +196 -210
  40. package/pipeline/skills/shared/external/authentication/SKILL.md +265 -381
  41. package/pipeline/skills/shared/external/authentication/evals/evals.json +25 -25
  42. package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +133 -178
  43. package/pipeline/skills/shared/external/authentication/references/passkeys.md +111 -147
  44. package/pipeline/skills/shared/external/avkit/SKILL.md +267 -364
  45. package/pipeline/skills/shared/external/avkit/evals/evals.json +26 -26
  46. package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +375 -493
  47. package/pipeline/skills/shared/external/background-processing/SKILL.md +270 -382
  48. package/pipeline/skills/shared/external/background-processing/evals/evals.json +22 -22
  49. package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +169 -317
  50. package/pipeline/skills/shared/external/backlog/BACKLOG.md +1 -1
  51. package/pipeline/skills/shared/external/backlog/SKILL.md +56 -33
  52. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +290 -371
  53. package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +24 -24
  54. package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +175 -343
  55. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +1 -0
  56. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +292 -381
  57. package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +33 -30
  58. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +227 -355
  59. package/pipeline/skills/shared/external/compose-components/SKILL.md +2 -0
  60. package/pipeline/skills/shared/external/compose-navigation/SKILL.md +3 -2
  61. package/pipeline/skills/shared/external/compose-testing/SKILL.md +2 -0
  62. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +197 -346
  63. package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +19 -21
  64. package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +169 -308
  65. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +226 -376
  66. package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +25 -22
  67. package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +257 -337
  68. package/pipeline/skills/shared/external/core-data/SKILL.md +292 -368
  69. package/pipeline/skills/shared/external/core-data/evals/evals.json +30 -27
  70. package/pipeline/skills/shared/external/core-motion/SKILL.md +235 -324
  71. package/pipeline/skills/shared/external/core-motion/evals/evals.json +31 -27
  72. package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +210 -310
  73. package/pipeline/skills/shared/external/core-nfc/SKILL.md +292 -366
  74. package/pipeline/skills/shared/external/core-nfc/evals/evals.json +22 -24
  75. package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +233 -329
  76. package/pipeline/skills/shared/external/coreml/SKILL.md +323 -367
  77. package/pipeline/skills/shared/external/coreml/evals/evals.json +24 -21
  78. package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +562 -565
  79. package/pipeline/skills/shared/external/council/SKILL.md +1 -0
  80. package/pipeline/skills/shared/external/cryptokit/SKILL.md +253 -394
  81. package/pipeline/skills/shared/external/cryptokit/evals/evals.json +20 -18
  82. package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +299 -488
  83. package/pipeline/skills/shared/external/css-modern/SKILL.md +1 -0
  84. package/pipeline/skills/shared/external/database-patterns/SKILL.md +1 -0
  85. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +270 -323
  86. package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +27 -30
  87. package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +167 -315
  88. package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +140 -193
  89. package/pipeline/skills/shared/external/device-integrity/SKILL.md +230 -353
  90. package/pipeline/skills/shared/external/device-integrity/evals/evals.json +25 -21
  91. package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +159 -197
  92. package/pipeline/skills/shared/external/energykit/SKILL.md +225 -392
  93. package/pipeline/skills/shared/external/energykit/evals/evals.json +29 -28
  94. package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +174 -470
  95. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +261 -383
  96. package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +25 -22
  97. package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +165 -268
  98. package/pipeline/skills/shared/external/evidence-github/SKILL.md +2 -0
  99. package/pipeline/skills/shared/external/evidence-registry/SKILL.md +2 -0
  100. package/pipeline/skills/shared/external/gradle-kotlin-dsl/SKILL.md +2 -0
  101. package/pipeline/skills/shared/external/healthkit/SKILL.md +252 -303
  102. package/pipeline/skills/shared/external/healthkit/evals/evals.json +24 -23
  103. package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +369 -523
  104. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +233 -348
  105. package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +27 -22
  106. package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +199 -305
  107. package/pipeline/skills/shared/external/html-semantic/SKILL.md +1 -0
  108. package/pipeline/skills/shared/external/humanizer/SKILL.md +1 -0
  109. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +368 -340
  110. package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +28 -27
  111. package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +314 -260
  112. package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +97 -67
  113. package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +165 -101
  114. package/pipeline/skills/shared/external/ios-coding-standard/SKILL.md +1 -0
  115. package/pipeline/skills/shared/external/ios-localization/SKILL.md +258 -371
  116. package/pipeline/skills/shared/external/ios-localization/evals/evals.json +23 -23
  117. package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +283 -491
  118. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +313 -440
  119. package/pipeline/skills/shared/external/ios-module-structure/SKILL.md +1 -0
  120. package/pipeline/skills/shared/external/ios-networking/SKILL.md +265 -341
  121. package/pipeline/skills/shared/external/ios-networking/evals/evals.json +24 -24
  122. package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +425 -652
  123. package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +143 -285
  124. package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -53
  125. package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +231 -456
  126. package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +517 -784
  127. package/pipeline/skills/shared/external/ios-security/SKILL.md +2 -0
  128. package/pipeline/skills/shared/external/ios-simulator/SKILL.md +265 -393
  129. package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +21 -21
  130. package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +177 -270
  131. package/pipeline/skills/shared/external/live-activities/SKILL.md +318 -360
  132. package/pipeline/skills/shared/external/live-activities/evals/evals.json +21 -21
  133. package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +478 -710
  134. package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +91 -283
  135. package/pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md +119 -151
  136. package/pipeline/skills/shared/external/localization-reuse-map/reference/publish-and-snapshot.md +60 -90
  137. package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +119 -156
  138. package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-artifact.py +726 -787
  139. package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-spreadsheet.py +253 -288
  140. package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-annotations.py +243 -304
  141. package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-legacy-labels.py +88 -104
  142. package/pipeline/skills/shared/external/localization-reuse-map/scripts/publish-confluence.py +181 -235
  143. package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-key-shots.py +198 -263
  144. package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-overlay.py +461 -466
  145. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-legacy-values.py +145 -151
  146. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +123 -141
  147. package/pipeline/skills/shared/external/localization-reuse-map/scripts/scan-screen-keys.py +146 -157
  148. package/pipeline/skills/shared/external/localization-reuse-map/scripts/snapshot-resources.sh +22 -19
  149. package/pipeline/skills/shared/external/localization-reuse-map/scripts/verify-map.py +156 -140
  150. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +295 -267
  151. package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +28 -24
  152. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +378 -532
  153. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +397 -499
  154. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +165 -348
  155. package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +26 -23
  156. package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +123 -130
  157. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +189 -315
  158. package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +22 -21
  159. package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +181 -270
  160. package/pipeline/skills/shared/external/natural-language/SKILL.md +188 -340
  161. package/pipeline/skills/shared/external/natural-language/evals/evals.json +21 -21
  162. package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +171 -225
  163. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +1 -0
  164. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +258 -392
  165. package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +30 -29
  166. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +164 -231
  167. package/pipeline/skills/shared/external/pdfkit/SKILL.md +312 -344
  168. package/pipeline/skills/shared/external/pdfkit/evals/evals.json +19 -19
  169. package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +413 -624
  170. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +242 -358
  171. package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +25 -21
  172. package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +161 -226
  173. package/pipeline/skills/shared/external/permissionkit/SKILL.md +282 -400
  174. package/pipeline/skills/shared/external/permissionkit/evals/evals.json +27 -30
  175. package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +237 -350
  176. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +276 -325
  177. package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +299 -545
  178. package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +344 -588
  179. package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +316 -660
  180. package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +270 -416
  181. package/pipeline/skills/shared/external/play-store-review/SKILL.md +2 -0
  182. package/pipeline/skills/shared/external/push-notifications/SKILL.md +312 -340
  183. package/pipeline/skills/shared/external/push-notifications/evals/evals.json +27 -26
  184. package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +328 -485
  185. package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +327 -560
  186. package/pipeline/skills/shared/external/python-patterns/SKILL.md +1 -0
  187. package/pipeline/skills/shared/external/react-best-practices/SKILL.md +1 -0
  188. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +218 -410
  189. package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +24 -27
  190. package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +221 -348
  191. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +1 -0
  192. package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +2 -0
  193. package/pipeline/skills/shared/external/room-database/SKILL.md +2 -0
  194. package/pipeline/skills/shared/external/search-first/SKILL.md +1 -0
  195. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +222 -393
  196. package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +23 -24
  197. package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +280 -420
  198. package/pipeline/skills/shared/external/signal-community/SKILL.md +2 -0
  199. package/pipeline/skills/shared/external/skill-creator/SKILL.md +80 -41
  200. package/pipeline/skills/shared/external/skill-creator/audit.md +63 -59
  201. package/pipeline/skills/shared/external/skill-creator/checklist.md +28 -20
  202. package/pipeline/skills/shared/external/skill-creator/examples.md +40 -40
  203. package/pipeline/skills/shared/external/skill-creator/label-check.md +48 -36
  204. package/pipeline/skills/shared/external/skill-creator/scripts/audit-panel.js +91 -100
  205. package/pipeline/skills/shared/external/skill-creator/template.md +51 -39
  206. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +217 -421
  207. package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +23 -26
  208. package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +133 -125
  209. package/pipeline/skills/shared/external/storekit/SKILL.md +228 -204
  210. package/pipeline/skills/shared/external/storekit/evals/evals.json +27 -24
  211. package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +98 -109
  212. package/pipeline/skills/shared/external/storekit/references/core-patterns.md +298 -242
  213. package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +356 -649
  214. package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +274 -399
  215. package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +22 -24
  216. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +107 -108
  217. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +93 -165
  218. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +99 -137
  219. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +77 -120
  220. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +334 -350
  221. package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +22 -22
  222. package/pipeline/skills/shared/external/swift-charts/SKILL.md +208 -394
  223. package/pipeline/skills/shared/external/swift-charts/evals/evals.json +27 -30
  224. package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +351 -762
  225. package/pipeline/skills/shared/external/swift-codable/SKILL.md +339 -343
  226. package/pipeline/skills/shared/external/swift-codable/evals/evals.json +20 -20
  227. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +303 -351
  228. package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +27 -24
  229. package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +65 -80
  230. package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +48 -84
  231. package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +134 -79
  232. package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +145 -167
  233. package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +62 -50
  234. package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +92 -121
  235. package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +177 -241
  236. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +258 -234
  237. package/pipeline/skills/shared/external/swift-language/SKILL.md +342 -382
  238. package/pipeline/skills/shared/external/swift-language/evals/evals.json +24 -27
  239. package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +79 -56
  240. package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +297 -340
  241. package/pipeline/skills/shared/external/swift-security/SKILL.md +180 -161
  242. package/pipeline/skills/shared/external/swift-security/evals/evals.json +25 -25
  243. package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +314 -469
  244. package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +408 -476
  245. package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +260 -530
  246. package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +270 -477
  247. package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +573 -571
  248. package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +370 -441
  249. package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +332 -433
  250. package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +346 -468
  251. package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +352 -472
  252. package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +431 -432
  253. package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +328 -425
  254. package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +341 -579
  255. package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +396 -457
  256. package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +354 -614
  257. package/pipeline/skills/shared/external/swift-testing/SKILL.md +188 -175
  258. package/pipeline/skills/shared/external/swift-testing/evals/evals.json +26 -24
  259. package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +80 -84
  260. package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +317 -433
  261. package/pipeline/skills/shared/external/swiftdata/SKILL.md +392 -256
  262. package/pipeline/skills/shared/external/swiftdata/evals/evals.json +24 -24
  263. package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +206 -402
  264. package/pipeline/skills/shared/external/swiftdata/references/indexing.md +59 -52
  265. package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +57 -33
  266. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +354 -747
  267. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +300 -508
  268. package/pipeline/skills/shared/external/swiftlint/SKILL.md +175 -226
  269. package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +141 -208
  270. package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +100 -109
  271. package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +159 -179
  272. package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +383 -18
  273. package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +143 -229
  274. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +283 -366
  275. package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +396 -608
  276. package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +336 -385
  277. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +239 -349
  278. package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +228 -310
  279. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +260 -249
  280. package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +92 -74
  281. package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +112 -177
  282. package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +61 -64
  283. package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +94 -134
  284. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +193 -225
  285. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +173 -327
  286. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +193 -168
  287. package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +127 -150
  288. package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +132 -133
  289. package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +152 -117
  290. package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +106 -140
  291. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +316 -252
  292. package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +341 -332
  293. package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +547 -854
  294. package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +485 -537
  295. package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +417 -499
  296. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +213 -376
  297. package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +86 -175
  298. package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +89 -195
  299. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +95 -182
  300. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +71 -149
  301. package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +21 -27
  302. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +303 -295
  303. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +204 -387
  304. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +469 -683
  305. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +140 -186
  306. package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +75 -86
  307. package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +63 -60
  308. package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +69 -137
  309. package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +95 -67
  310. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +1 -0
  311. package/pipeline/skills/shared/external/testing-backend/SKILL.md +1 -0
  312. package/pipeline/skills/shared/external/tipkit/SKILL.md +220 -335
  313. package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +356 -494
  314. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +1 -0
  315. package/pipeline/skills/shared/external/vision-framework/SKILL.md +260 -375
  316. package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +393 -515
  317. package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +363 -539
  318. package/pipeline/skills/shared/external/vue-composition/SKILL.md +1 -0
  319. package/pipeline/skills/shared/external/weatherkit/SKILL.md +152 -310
  320. package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +288 -407
  321. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +1 -0
  322. package/pipeline/skills/shared/external/web-performance/SKILL.md +1 -0
  323. package/pipeline/skills/shared/external/web-testing/SKILL.md +1 -0
  324. package/pipeline/skills/shared/external/widgetkit/SKILL.md +216 -288
  325. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +414 -719
  326. 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
  ]