@mmerterden/multi-agent-pipeline 20.33.0 → 20.35.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 (390) hide show
  1. package/CHANGELOG.md +98 -1
  2. package/README.md +3 -1
  3. package/README.tr.md +2 -1
  4. package/docs/adr/0018-cross-repo-links-not-a-global-graph.md +43 -0
  5. package/docs/adr/README.md +2 -1
  6. package/docs/facts.json +5 -4
  7. package/docs/features.md +1 -1
  8. package/install/_dev-only-files.mjs +1 -0
  9. package/install/catalog-history.json +1 -1
  10. package/install/claude.mjs +24 -2
  11. package/install/templates/claude-hooks.json +34 -1
  12. package/manifest.json +393 -339
  13. package/package.json +3 -1
  14. package/pipeline/agents/bulk-reader.md +3 -0
  15. package/pipeline/agents/code-reviewer.md +9 -0
  16. package/pipeline/agents/explorer.md +4 -0
  17. package/pipeline/agents/plan-critic.md +4 -2
  18. package/pipeline/commands/multi-agent/SKILL.md +17 -136
  19. package/pipeline/commands/multi-agent/channels/SKILL.md +16 -298
  20. package/pipeline/commands/multi-agent/graph/SKILL.md +5 -2
  21. package/pipeline/commands/multi-agent/language/SKILL.md +3 -3
  22. package/pipeline/commands/multi-agent/office-on/SKILL.md +7 -3
  23. package/pipeline/commands/multi-agent/office-status/SKILL.md +3 -2
  24. package/pipeline/commands/multi-agent/resume/SKILL.md +8 -22
  25. package/pipeline/commands/multi-agent/review/SKILL.md +7 -131
  26. package/pipeline/commands/multi-agent/setup/SKILL.md +19 -224
  27. package/pipeline/contract/CHANGELOG.md +9 -0
  28. package/pipeline/contract/README.md +6 -2
  29. package/pipeline/contract/fixtures/error-invalid-request.json +1 -1
  30. package/pipeline/contract/fixtures/error-unauthorized.json +1 -1
  31. package/pipeline/contract/fixtures/error-unsigned.json +1 -1
  32. package/pipeline/contract/manifest.json +14 -1
  33. package/pipeline/contract/types/index.d.ts +24 -2
  34. package/pipeline/lib/json-file-lock.mjs +61 -15
  35. package/pipeline/lib/office-remote.mjs +228 -0
  36. package/pipeline/lib/qr-code.mjs +360 -0
  37. package/pipeline/lib/repo-hygiene.sh +1 -0
  38. package/pipeline/lib/run-completion.mjs +17 -0
  39. package/pipeline/multi-agent-refs/channels/generator.md +146 -0
  40. package/pipeline/multi-agent-refs/channels/issue-comment.md +1 -1
  41. package/pipeline/multi-agent-refs/channels/menu.md +55 -0
  42. package/pipeline/multi-agent-refs/channels/multi-repo.md +6 -0
  43. package/pipeline/multi-agent-refs/channels/preview.md +25 -0
  44. package/pipeline/multi-agent-refs/channels/reference.md +98 -0
  45. package/pipeline/multi-agent-refs/features/autopilot-circuit-breaker.md +1 -1
  46. package/pipeline/multi-agent-refs/features/code-graph.md +27 -0
  47. package/pipeline/multi-agent-refs/features/office-remote-protocol.md +166 -0
  48. package/pipeline/multi-agent-refs/features/office-threat-model.md +2 -2
  49. package/pipeline/multi-agent-refs/features/plan-critic.md +5 -2
  50. package/pipeline/multi-agent-refs/features/review-delta.md +4 -1
  51. package/pipeline/multi-agent-refs/features/scope-check.md +25 -1
  52. package/pipeline/multi-agent-refs/features/verify-by-test.md +10 -0
  53. package/pipeline/multi-agent-refs/keychain.md +7 -0
  54. package/pipeline/multi-agent-refs/knowledge.md +9 -0
  55. package/pipeline/multi-agent-refs/orchestrator/dispatcher.md +163 -0
  56. package/pipeline/multi-agent-refs/phases/phase-0-init.md +6 -2
  57. package/pipeline/multi-agent-refs/phases/phase-1-plan.md +8 -10
  58. package/pipeline/multi-agent-refs/phases/phase-2-dev.md +18 -20
  59. package/pipeline/multi-agent-refs/phases/phase-3-review.md +20 -14
  60. package/pipeline/multi-agent-refs/phases/phase-4-commit.md +8 -7
  61. package/pipeline/multi-agent-refs/phases/phase-5-report.md +6 -3
  62. package/pipeline/multi-agent-refs/picker-contract.md +1 -1
  63. package/pipeline/multi-agent-refs/resume/details.md +35 -0
  64. package/pipeline/multi-agent-refs/review/inputs.md +87 -0
  65. package/pipeline/multi-agent-refs/review/module-guides.md +25 -0
  66. package/pipeline/multi-agent-refs/review/valven.md +42 -0
  67. package/pipeline/multi-agent-refs/rules.md +3 -2
  68. package/pipeline/multi-agent-refs/setup/accounts.md +27 -0
  69. package/pipeline/multi-agent-refs/setup/app-store-connect.md +5 -0
  70. package/pipeline/multi-agent-refs/setup/firebase.md +5 -0
  71. package/pipeline/multi-agent-refs/setup/google-play.md +4 -0
  72. package/pipeline/multi-agent-refs/setup/hooks-and-plugins.md +21 -0
  73. package/pipeline/multi-agent-refs/setup/language.md +46 -0
  74. package/pipeline/multi-agent-refs/setup/multi-repo-group.md +51 -0
  75. package/pipeline/multi-agent-refs/setup/summaries.md +63 -0
  76. package/pipeline/multi-agent-refs/setup/token-save-flow.md +51 -0
  77. package/pipeline/multi-agent-refs/tracker-contract.md +1 -1
  78. package/pipeline/office/NOTICE.md +4 -1
  79. package/pipeline/office/assets/char_12.png +0 -0
  80. package/pipeline/office/assets/char_13.png +0 -0
  81. package/pipeline/office/assets/char_14.png +0 -0
  82. package/pipeline/office/assets/char_15.png +0 -0
  83. package/pipeline/office/assets/char_16.png +0 -0
  84. package/pipeline/office/assets/char_17.png +0 -0
  85. package/pipeline/office/assets/char_18.png +0 -0
  86. package/pipeline/office/assets/char_19.png +0 -0
  87. package/pipeline/office/assets/char_20.png +0 -0
  88. package/pipeline/office/assets/char_21.png +0 -0
  89. package/pipeline/office/assets/char_22.png +0 -0
  90. package/pipeline/office/assets/char_23.png +0 -0
  91. package/pipeline/office/assets/char_24.png +0 -0
  92. package/pipeline/office/assets/char_25.png +0 -0
  93. package/pipeline/office/assets/char_26.png +0 -0
  94. package/pipeline/office/assets/char_27.png +0 -0
  95. package/pipeline/office/assets/char_28.png +0 -0
  96. package/pipeline/office/assets/char_29.png +0 -0
  97. package/pipeline/office/assets/char_30.png +0 -0
  98. package/pipeline/office/index.html +304 -55
  99. package/pipeline/office/toolkit.json +1 -1
  100. package/pipeline/rules/response-shape.md +6 -7
  101. package/pipeline/schemas/agent-state.schema.json +36 -0
  102. package/pipeline/schemas/phases.json +4 -4
  103. package/pipeline/schemas/plan-critique.schema.json +9 -2
  104. package/pipeline/schemas/planning-output.schema.json +43 -2
  105. package/pipeline/schemas/pr-reach.schema.json +55 -0
  106. package/pipeline/schemas/prefs.schema.json +37 -8
  107. package/pipeline/schemas/reviewer-output.schema.json +20 -2
  108. package/pipeline/schemas/token-budget.json +4 -4
  109. package/pipeline/schemas/triage-output.schema.json +32 -3
  110. package/pipeline/schemas/unattended-policy.json +2 -1
  111. package/pipeline/scripts/_graph-analysis.mjs +270 -0
  112. package/pipeline/scripts/_guard_rules.py +449 -1
  113. package/pipeline/scripts/_memory-policy.mjs +165 -0
  114. package/pipeline/scripts/_secret-scan.mjs +105 -0
  115. package/pipeline/scripts/_test-gaming.mjs +36 -0
  116. package/pipeline/scripts/_unified-diff.mjs +2 -2
  117. package/pipeline/scripts/agent-guard.py +79 -19
  118. package/pipeline/scripts/anonymize-findings.mjs +99 -0
  119. package/pipeline/scripts/answer-check.mjs +113 -0
  120. package/pipeline/scripts/answer-check.sh +20 -0
  121. package/pipeline/scripts/autopilot-publish.mjs +9 -2
  122. package/pipeline/scripts/capture-flush.sh +12 -2
  123. package/pipeline/scripts/check-read-size.sh +9 -0
  124. package/pipeline/scripts/code-graph-rules/android.json +8 -3
  125. package/pipeline/scripts/contract-server.mjs +71 -16
  126. package/pipeline/scripts/debt-ledger.mjs +323 -0
  127. package/pipeline/scripts/file-context.mjs +261 -0
  128. package/pipeline/scripts/file-context.sh +20 -0
  129. package/pipeline/scripts/gate-ledger.mjs +144 -21
  130. package/pipeline/scripts/graph-links.mjs +230 -0
  131. package/pipeline/scripts/graph-query.mjs +133 -1
  132. package/pipeline/scripts/graph-report.mjs +65 -0
  133. package/pipeline/scripts/learn-from-transcripts.mjs +12 -48
  134. package/pipeline/scripts/learnings-ledger.mjs +143 -24
  135. package/pipeline/scripts/office-build.mjs +276 -5
  136. package/pipeline/scripts/office-control.mjs +70 -10
  137. package/pipeline/scripts/office-pair.mjs +407 -0
  138. package/pipeline/scripts/office-remote-client.mjs +463 -0
  139. package/pipeline/scripts/phase-tracker.sh +8 -0
  140. package/pipeline/scripts/phase0-exit-gate.mjs +40 -37
  141. package/pipeline/scripts/phone-devices.mjs +9 -1
  142. package/pipeline/scripts/plan-critique-gate.mjs +11 -2
  143. package/pipeline/scripts/pre-commit-check.sh +28 -2
  144. package/pipeline/scripts/pre-push-check.sh +6 -12
  145. package/pipeline/scripts/rework-base.mjs +87 -0
  146. package/pipeline/scripts/rework-rulings.mjs +106 -0
  147. package/pipeline/scripts/run-commit-check.mjs +104 -0
  148. package/pipeline/scripts/run-scope-guard.mjs +58 -3
  149. package/pipeline/scripts/run-scope-guard.sh +13 -1
  150. package/pipeline/scripts/scope-check-gate.mjs +213 -2
  151. package/pipeline/scripts/task-mirror.mjs +106 -15
  152. package/pipeline/scripts/task-mirror.sh +3 -2
  153. package/pipeline/scripts/test-stability-gate.mjs +112 -0
  154. package/pipeline/scripts/triage-memory.mjs +64 -37
  155. package/pipeline/scripts/update-check.sh +7 -1
  156. package/pipeline/scripts/update-issue-progress.sh +73 -8
  157. package/pipeline/scripts/validate-planning.mjs +172 -4
  158. package/pipeline/scripts/validate-reviewer.mjs +20 -0
  159. package/pipeline/scripts/validate-triage.mjs +149 -4
  160. package/pipeline/scripts/work-items.mjs +119 -1
  161. package/pipeline/scripts/worktree-prepare-all.mjs +200 -0
  162. package/pipeline/scripts/worktree-prepare.sh +40 -4
  163. package/pipeline/scripts/write-state.mjs +67 -24
  164. package/pipeline/skills/.skill-manifest.json +9 -9
  165. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +5 -5
  166. package/pipeline/skills/shared/core/google-play-compliance/references/rules.yml +1 -1
  167. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +1 -1
  168. package/pipeline/skills/shared/core/multi-agent-graph/SKILL.md +5 -2
  169. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +4 -4
  170. package/pipeline/skills/shared/core/multi-agent-office-status/SKILL.md +2 -2
  171. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +2 -0
  172. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +4 -4
  173. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +14 -0
  174. package/pipeline/skills/shared/external/android-architecture/references/patterns.md +6 -0
  175. package/pipeline/skills/shared/external/android-build-quality-gates/references/patterns.md +10 -0
  176. package/pipeline/skills/shared/external/android-datastore/references/patterns.md +11 -0
  177. package/pipeline/skills/shared/external/android-design-tokens-codegen/references/patterns.md +8 -0
  178. package/pipeline/skills/shared/external/android-jetpack-compose-expert/references/patterns.md +6 -0
  179. package/pipeline/skills/shared/external/android-mvi-viewmodel/references/patterns.md +10 -0
  180. package/pipeline/skills/shared/external/android-performance/references/patterns.md +13 -0
  181. package/pipeline/skills/shared/external/android-security/references/patterns.md +16 -0
  182. package/pipeline/skills/shared/external/api-patterns/references/contract-details.md +9 -0
  183. package/pipeline/skills/shared/external/api-security-best-practices/references/abuse-controls.md +12 -0
  184. package/pipeline/skills/shared/external/api-security-best-practices/references/identity-and-access.md +13 -0
  185. package/pipeline/skills/shared/external/api-security-best-practices/references/request-handling.md +12 -0
  186. package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +9 -0
  187. package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +8 -0
  188. package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +10 -0
  189. package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +21 -0
  190. package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +9 -0
  191. package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +7 -0
  192. package/pipeline/skills/shared/external/app-store-review/SKILL.md +2 -2
  193. package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +10 -0
  194. package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +10 -1
  195. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +22 -0
  196. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +17 -0
  197. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +22 -0
  198. package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +17 -0
  199. package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +9 -0
  200. package/pipeline/skills/shared/external/authentication/references/passkeys.md +11 -0
  201. package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +13 -0
  202. package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +9 -0
  203. package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +10 -0
  204. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +15 -0
  205. package/pipeline/skills/shared/external/compose-components/references/patterns.md +7 -0
  206. package/pipeline/skills/shared/external/compose-navigation/references/patterns.md +7 -0
  207. package/pipeline/skills/shared/external/compose-testing/references/patterns.md +15 -0
  208. package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +9 -0
  209. package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +11 -0
  210. package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +10 -0
  211. package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +13 -0
  212. package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +20 -0
  213. package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +16 -0
  214. package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +16 -0
  215. package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +14 -0
  216. package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +13 -0
  217. package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +10 -0
  218. package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +10 -0
  219. package/pipeline/skills/shared/external/fastapi-pro/references/app-structure.md +10 -0
  220. package/pipeline/skills/shared/external/gradle-kotlin-dsl/references/patterns.md +17 -0
  221. package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +12 -0
  222. package/pipeline/skills/shared/external/hig-app-icons/references/icon-workflow.md +10 -0
  223. package/pipeline/skills/shared/external/hig-components-content/references/content-views.md +10 -0
  224. package/pipeline/skills/shared/external/hig-components-layout/references/bars-and-tabs.md +11 -0
  225. package/pipeline/skills/shared/external/hig-foundations/references/foundations-detail.md +13 -0
  226. package/pipeline/skills/shared/external/hig-foundations/references/type-color-spacing.md +13 -0
  227. package/pipeline/skills/shared/external/hig-patterns/references/onboarding-and-states.md +11 -0
  228. package/pipeline/skills/shared/external/hig-platforms/references/ipad-layout.md +12 -0
  229. package/pipeline/skills/shared/external/hig-technologies/references/technologies.md +16 -0
  230. package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +9 -0
  231. package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +18 -0
  232. package/pipeline/skills/shared/external/ios-accessibility/references/large-content-and-appearance.md +9 -0
  233. package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +9 -0
  234. package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +7 -0
  235. package/pipeline/skills/shared/external/ios-coding-standard/references/STANDARD.md +13 -0
  236. package/pipeline/skills/shared/external/ios-design-review/references/appearance-matrix.md +9 -0
  237. package/pipeline/skills/shared/external/ios-design-review/references/checklist.md +15 -0
  238. package/pipeline/skills/shared/external/ios-haptics/references/core-haptics.md +11 -0
  239. package/pipeline/skills/shared/external/ios-iphone-duo/references/api-map.md +11 -0
  240. package/pipeline/skills/shared/external/ios-iphone-duo/references/fixed-assumptions.md +15 -0
  241. package/pipeline/skills/shared/external/ios-iphone-duo/references/poses-and-panes.md +11 -0
  242. package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +18 -0
  243. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +19 -0
  244. package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +15 -0
  245. package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +7 -0
  246. package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +8 -0
  247. package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +12 -0
  248. package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +17 -0
  249. package/pipeline/skills/shared/external/ios-security/references/app-review-guidelines.md +8 -0
  250. package/pipeline/skills/shared/external/ios-security/references/cryptokit-advanced.md +14 -0
  251. package/pipeline/skills/shared/external/ios-security/references/file-storage-patterns.md +8 -0
  252. package/pipeline/skills/shared/external/ios-security/references/privacy-manifest.md +9 -0
  253. package/pipeline/skills/shared/external/ios-sf-symbols/references/effects-and-custom-symbols.md +9 -0
  254. package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +13 -0
  255. package/pipeline/skills/shared/external/kotlin-coroutines-expert/references/patterns.md +8 -0
  256. package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +21 -0
  257. package/pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md +9 -0
  258. package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +12 -0
  259. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +16 -0
  260. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +21 -0
  261. package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +10 -0
  262. package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +9 -0
  263. package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +12 -0
  264. package/pipeline/skills/shared/external/nodejs-backend-patterns/references/runtime-patterns.md +11 -0
  265. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +11 -0
  266. package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +18 -0
  267. package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +11 -0
  268. package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +11 -0
  269. package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +15 -0
  270. package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +14 -0
  271. package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +14 -0
  272. package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +14 -0
  273. package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +14 -0
  274. package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +10 -0
  275. package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +12 -0
  276. package/pipeline/skills/shared/external/retrofit-networking/references/patterns.md +14 -0
  277. package/pipeline/skills/shared/external/room-database/references/patterns.md +16 -0
  278. package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +10 -0
  279. package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +10 -0
  280. package/pipeline/skills/shared/external/spm-build-analysis/references/build-optimization-sources.md +14 -0
  281. package/pipeline/skills/shared/external/spm-build-analysis/references/spm-analysis-checks.md +19 -0
  282. package/pipeline/skills/shared/external/storekit/references/core-patterns.md +13 -0
  283. package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +31 -0
  284. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +8 -0
  285. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +9 -0
  286. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +10 -0
  287. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +8 -0
  288. package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +24 -0
  289. package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +8 -0
  290. package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +14 -0
  291. package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +12 -0
  292. package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +10 -0
  293. package/pipeline/skills/shared/external/swift-concurrency-expert/references/swift-6-2-concurrency.md +8 -0
  294. package/pipeline/skills/shared/external/swift-concurrency-pro/references/actors.md +10 -0
  295. package/pipeline/skills/shared/external/swift-concurrency-pro/references/cancellation.md +7 -0
  296. package/pipeline/skills/shared/external/swift-concurrency-pro/references/interop.md +10 -0
  297. package/pipeline/skills/shared/external/swift-concurrency-pro/references/new-features.md +11 -0
  298. package/pipeline/skills/shared/external/swift-concurrency-pro/references/structured.md +9 -0
  299. package/pipeline/skills/shared/external/swift-concurrency-pro/references/testing.md +13 -0
  300. package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +7 -0
  301. package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +14 -0
  302. package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +16 -0
  303. package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +17 -0
  304. package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +19 -0
  305. package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +16 -0
  306. package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +19 -0
  307. package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +18 -0
  308. package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +16 -0
  309. package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +17 -0
  310. package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +17 -0
  311. package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +17 -0
  312. package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +18 -0
  313. package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +21 -0
  314. package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +16 -0
  315. package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +16 -0
  316. package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +9 -0
  317. package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +24 -0
  318. package/pipeline/skills/shared/external/swift-testing-pro/references/async-tests.md +9 -0
  319. package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +11 -0
  320. package/pipeline/skills/shared/external/swift-testing-pro/references/writing-better-tests.md +13 -0
  321. package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +8 -0
  322. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +17 -0
  323. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +12 -0
  324. package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +11 -0
  325. package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +7 -0
  326. package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +13 -0
  327. package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +24 -0
  328. package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +12 -0
  329. package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +15 -0
  330. package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +15 -0
  331. package/pipeline/skills/shared/external/swiftui-animation/references/scroll-effects.md +12 -0
  332. package/pipeline/skills/shared/external/swiftui-expert-skill/references/accessibility-patterns.md +11 -0
  333. package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-advanced.md +7 -0
  334. package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-basics.md +13 -0
  335. package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-transitions.md +9 -0
  336. package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts-accessibility.md +9 -0
  337. package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts.md +17 -0
  338. package/pipeline/skills/shared/external/swiftui-expert-skill/references/image-optimization.md +9 -0
  339. package/pipeline/skills/shared/external/swiftui-expert-skill/references/latest-apis.md +10 -0
  340. package/pipeline/skills/shared/external/swiftui-expert-skill/references/layout-best-practices.md +12 -0
  341. package/pipeline/skills/shared/external/swiftui-expert-skill/references/list-patterns.md +12 -0
  342. package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-scenes.md +13 -0
  343. package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-views.md +12 -0
  344. package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-window-styling.md +12 -0
  345. package/pipeline/skills/shared/external/swiftui-expert-skill/references/performance-patterns.md +7 -0
  346. package/pipeline/skills/shared/external/swiftui-expert-skill/references/scroll-patterns.md +9 -0
  347. package/pipeline/skills/shared/external/swiftui-expert-skill/references/sheet-navigation-patterns.md +10 -0
  348. package/pipeline/skills/shared/external/swiftui-expert-skill/references/state-management.md +18 -0
  349. package/pipeline/skills/shared/external/swiftui-expert-skill/references/view-structure.md +16 -0
  350. package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +11 -0
  351. package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +8 -0
  352. package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +14 -0
  353. package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +9 -0
  354. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +22 -0
  355. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/uikit-glass.md +14 -0
  356. package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +10 -0
  357. package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +10 -0
  358. package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +13 -0
  359. package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +10 -0
  360. package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +14 -0
  361. package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +30 -0
  362. package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +16 -0
  363. package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +11 -0
  364. package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +11 -0
  365. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +10 -0
  366. package/pipeline/skills/shared/external/swiftui-performance-audit/references/code-smells.md +8 -0
  367. package/pipeline/skills/shared/external/swiftui-ui-patterns/references/app-wiring.md +12 -0
  368. package/pipeline/skills/shared/external/swiftui-ui-patterns/references/menu-bar.md +10 -0
  369. package/pipeline/skills/shared/external/swiftui-ui-patterns/references/navigationstack.md +11 -0
  370. package/pipeline/skills/shared/external/swiftui-ui-patterns/references/scroll-reveal.md +12 -0
  371. package/pipeline/skills/shared/external/swiftui-ui-patterns/references/sheets.md +14 -0
  372. package/pipeline/skills/shared/external/swiftui-ui-patterns/references/tabview.md +10 -0
  373. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +10 -0
  374. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +13 -0
  375. package/pipeline/skills/shared/external/swiftui-view-refactor/references/mv-patterns.md +12 -0
  376. package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +8 -0
  377. package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +8 -0
  378. package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +14 -0
  379. package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +17 -0
  380. package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +11 -0
  381. package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +11 -0
  382. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +27 -0
  383. package/pipeline/skills/shared/external/xcode-build-fixer/references/build-settings-best-practices.md +9 -0
  384. package/pipeline/skills/shared/external/xcode-build-fixer/references/fix-patterns.md +7 -0
  385. package/pipeline/skills/shared/external/xcode-build-orchestrator/references/build-settings-best-practices.md +9 -0
  386. package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/build-optimization-sources.md +14 -0
  387. package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/code-compilation-checks.md +8 -0
  388. package/pipeline/skills/shared/external/xcode-project-analyzer/references/build-optimization-sources.md +14 -0
  389. package/pipeline/skills/shared/external/xcode-project-analyzer/references/build-settings-best-practices.md +9 -0
  390. package/pipeline/skills/shared/external/xcode-project-analyzer/references/project-audit-checks.md +13 -0
@@ -1,5 +1,29 @@
1
1
  # Swift Charts Patterns
2
2
 
3
+ <!-- toc -->
4
+ - [Contents](#contents)
5
+ - [Modelling the Data](#modelling-the-data)
6
+ - [Bars](#bars)
7
+ - [Lines](#lines)
8
+ - [Pies and Donuts](#pies-and-donuts)
9
+ - [Combining Marks](#combining-marks)
10
+ - [A Tooltip on Selection](#a-tooltip-on-selection)
11
+ - [Scrolling with a Bound Position](#scrolling-with-a-bound-position)
12
+ - [Function Plots (iOS 18)](#function-plots-ios-18)
13
+ - [3D Charts and Surfaces (iOS 26)](#3d-charts-and-surfaces-ios-26)
14
+ - [Accessibility](#accessibility)
15
+ - [Dynamic Type and Colour](#dynamic-type-and-colour)
16
+ - [Performance: When to Vectorize](#performance-when-to-vectorize)
17
+ - [Dark Mode and Theming](#dark-mode-and-theming)
18
+ - [Heat Map](#heat-map)
19
+ - [Stacking](#stacking)
20
+ - [`MarkDimension`](#markdimension)
21
+ - [Symbols](#symbols)
22
+ - [`ChartProxy` and Coordinates](#chartproxy-and-coordinates)
23
+ - [Modifier Quick Reference](#modifier-quick-reference)
24
+ - [Apple Documentation](#apple-documentation)
25
+ <!-- /toc -->
26
+
3
27
  Companion to the `swift-charts` skill. Any source file touching these types
4
28
  imports `Charts` next to `SwiftUI`.
5
29
 
@@ -1,5 +1,13 @@
1
1
  # Bridging Callbacks, Delegates and GCD
2
2
 
3
+ <!-- toc -->
4
+ - [Checked continuations](#checked-continuations)
5
+ - [Bridging a delegate](#bridging-a-delegate)
6
+ - [Passing cancellation through](#passing-cancellation-through)
7
+ - [Streams from repeating callbacks](#streams-from-repeating-callbacks)
8
+ - [Replacing GCD](#replacing-gcd)
9
+ <!-- /toc -->
10
+
3
11
  ## Checked continuations
4
12
 
5
13
  `withCheckedContinuation` (non-throwing) and `withCheckedThrowingContinuation`
@@ -1,5 +1,19 @@
1
1
  # Approachable Concurrency Patterns
2
2
 
3
+ <!-- toc -->
4
+ - [What problem 6.2 fixed](#what-problem-62-fixed)
5
+ - [Default MainActor isolation (SE-0466)](#default-mainactor-isolation-se-0466)
6
+ - [Async functions run on the caller (SE-0461)](#async-functions-run-on-the-caller-se-0461)
7
+ - [Leaving the caller with `@concurrent`](#leaving-the-caller-with-concurrent)
8
+ - [Starting without a queue hop (SE-0472)](#starting-without-a-queue-hop-se-0472)
9
+ - [Isolated conformances](#isolated-conformances)
10
+ - [Immutable weak references (SE-0481)](#immutable-weak-references-se-0481)
11
+ - [Transactional observation (SE-0475)](#transactional-observation-se-0475)
12
+ - [Global and static state](#global-and-static-state)
13
+ - [Build settings and migration](#build-settings-and-migration)
14
+ - [The progression](#the-progression)
15
+ <!-- /toc -->
16
+
3
17
  Swift 6.2 lets a target start out effectively single-threaded: with both
4
18
  Default Actor Isolation set to `MainActor` and Approachable Concurrency turned
5
19
  on, code runs on the main actor until you introduce parallelism deliberately.
@@ -1,5 +1,17 @@
1
1
  # SwiftUI and Concurrency
2
2
 
3
+ <!-- toc -->
4
+ - [Views live on the main actor](#views-live-on-the-main-actor)
5
+ - [Callbacks SwiftUI may run off the main thread](#callbacks-swiftui-may-run-off-the-main-thread)
6
+ - [Reading state inside a Sendable closure](#reading-state-inside-a-sendable-closure)
7
+ - [Structuring async work](#structuring-async-work)
8
+ - [The `.task` modifier](#the-task-modifier)
9
+ - [Observable view models](#observable-view-models)
10
+ - [Reacting to model changes with Observations](#reacting-to-model-changes-with-observations)
11
+ - [Concurrency for performance](#concurrency-for-performance)
12
+ - [Mistakes](#mistakes)
13
+ <!-- /toc -->
14
+
3
15
  ## Views live on the main actor
4
16
 
5
17
  The `View` protocol is isolated to `@MainActor` (from the iOS 18 SDK on; older
@@ -1,5 +1,15 @@
1
1
  # Synchronization Primitives
2
2
 
3
+ <!-- toc -->
4
+ - [Mutex](#mutex)
5
+ - [OSAllocatedUnfairLock](#osallocatedunfairlock)
6
+ - [Mutex or OSAllocatedUnfairLock](#mutex-or-osallocatedunfairlock)
7
+ - [Atomic](#atomic)
8
+ - [Locks or actors](#locks-or-actors)
9
+ - [Decision guide](#decision-guide)
10
+ - [Anti-patterns](#anti-patterns)
11
+ <!-- /toc -->
12
+
3
13
  When an actor is the wrong shape for some shared mutable state, these types
4
14
  protect it instead. Each one is `Sendable` and safe to use from any thread.
5
15
 
@@ -1,5 +1,13 @@
1
1
  ## Concurrent programming updates in Swift 6.2
2
2
 
3
+ <!-- toc -->
4
+ - [Concurrent programming updates in Swift 6.2](#concurrent-programming-updates-in-swift-62)
5
+ - [Data-race safety](#data-race-safety)
6
+ - [Global State](#global-state)
7
+ - [Offloading work to the background](#offloading-work-to-the-background)
8
+ - [Summary](#summary)
9
+ <!-- /toc -->
10
+
3
11
  Concurrent programming is hard because sharing memory between multiple tasks is prone to mistakes that lead to unpredictable behavior.
4
12
 
5
13
  ## Data-race safety
@@ -1,5 +1,15 @@
1
1
  # Actors
2
2
 
3
+ <!-- toc -->
4
+ - [Reentrancy](#reentrancy)
5
+ - [Protecting global and static state](#protecting-global-and-static-state)
6
+ - [Global actor inference rules](#global-actor-inference-rules)
7
+ - [`isolated` parameters](#isolated-parameters)
8
+ - [`isolated deinit`](#isolated-deinit)
9
+ - [What a custom actor changes](#what-a-custom-actor-changes)
10
+ - [Making assertions](#making-assertions)
11
+ <!-- /toc -->
12
+
3
13
  ## Reentrancy
4
14
 
5
15
  **Important:** This is the most common concurrency bug LLMs produce: after every `await` inside an actor, all assumptions about the actor's state are invalidated because other calls may have run in the meantime.
@@ -1,5 +1,12 @@
1
1
  # Cancellation
2
2
 
3
+ <!-- toc -->
4
+ - [How cancellation propagates](#how-cancellation-propagates)
5
+ - [Checking for cancellation](#checking-for-cancellation)
6
+ - [`withTaskCancellationHandler`](#withtaskcancellationhandler)
7
+ - [Broken cancellation patterns](#broken-cancellation-patterns)
8
+ <!-- /toc -->
9
+
3
10
  Cancellation in Swift concurrency is cooperative. Setting the cancelled flag does nothing unless the running code checks it.
4
11
 
5
12
  ## How cancellation propagates
@@ -1,5 +1,15 @@
1
1
  # Interop and migration
2
2
 
3
+ <!-- toc -->
4
+ - [Completion handlers → `async`/`await`](#completion-handlers-asyncawait)
5
+ - [Delegates → `AsyncStream`](#delegates-asyncstream)
6
+ - [`DispatchQueue.main.async` → `@MainActor`](#dispatchqueuemainasync-mainactor)
7
+ - [`DispatchQueue.global().async` → `@concurrent` or Task Group](#dispatchqueueglobalasync-concurrent-or-task-group)
8
+ - [Serial `DispatchQueue` → `actor`](#serial-dispatchqueue-actor)
9
+ - [Locks and checked sendability](#locks-and-checked-sendability)
10
+ - [Moving from Combine to `AsyncSequence`](#moving-from-combine-to-asyncsequence)
11
+ <!-- /toc -->
12
+
3
13
  Approved patterns for migrating legacy concurrency mechanisms to Swift concurrency.
4
14
 
5
15
  ## Completion handlers → `async`/`await`
@@ -1,5 +1,16 @@
1
1
  # Swift 6.2 concurrency
2
2
 
3
+ <!-- toc -->
4
+ - [Control default actor isolation inference](#control-default-actor-isolation-inference)
5
+ - [Global-actor isolated conformances](#global-actor-isolated-conformances)
6
+ - [Run `nonisolated` async functions on the caller's actor by default](#run-nonisolated-async-functions-on-the-callers-actor-by-default)
7
+ - [Offloading work with `@concurrent`](#offloading-work-with-concurrent)
8
+ - [Starting tasks synchronously from caller context](#starting-tasks-synchronously-from-caller-context)
9
+ - [Isolated deinit](#isolated-deinit)
10
+ - [Task priority escalation APIs](#task-priority-escalation-apis)
11
+ - [Task naming](#task-naming)
12
+ <!-- /toc -->
13
+
3
14
  Use this file for recent concurrency changes that materially affect review advice.
4
15
 
5
16
  ## Control default actor isolation inference
@@ -1,5 +1,14 @@
1
1
  # Structured concurrency
2
2
 
3
+ <!-- toc -->
4
+ - [`async let` vs task groups](#async-let-vs-task-groups)
5
+ - [Task groups over loops](#task-groups-over-loops)
6
+ - [`withDiscardingTaskGroup` (Swift 5.9+)](#withdiscardingtaskgroup-swift-59)
7
+ - [Limiting concurrency](#limiting-concurrency)
8
+ - [Error handling with partial results](#error-handling-with-partial-results)
9
+ - [Inferring the type of task groups](#inferring-the-type-of-task-groups)
10
+ <!-- /toc -->
11
+
3
12
  ## `async let` vs task groups
4
13
 
5
14
  Use `async let` when you have a fixed number of independent operations that return different types, e.g. fetching the news, the weather, and an app update at the same time. Use task groups when you have a dynamic number of operations of the same type, e.g. downloading all images in an array of URLs.
@@ -1,5 +1,18 @@
1
1
  # Testing concurrent code
2
2
 
3
+ <!-- toc -->
4
+ - [Async tests with Swift Testing](#async-tests-with-swift-testing)
5
+ - [Testing actor state](#testing-actor-state)
6
+ - [The `.serialized` trait and concurrent tests](#the-serialized-trait-and-concurrent-tests)
7
+ - [Confirmation for async events](#confirmation-for-async-events)
8
+ - [Actor isolation in tests](#actor-isolation-in-tests)
9
+ - [Test scoping traits with `@TaskLocal`](#test-scoping-traits-with-tasklocal)
10
+ - [Avoid timing-based tests](#avoid-timing-based-tests)
11
+ - [Testing cancellation](#testing-cancellation)
12
+ - [Race detection](#race-detection)
13
+ - [Swift Testing + Swift concurrency](#swift-testing-swift-concurrency)
14
+ <!-- /toc -->
15
+
3
16
  ## Async tests with Swift Testing
4
17
 
5
18
  Swift Testing supports async test functions natively. No special setup required:
@@ -1,5 +1,12 @@
1
1
  # Swift 6.3 attributes for interop, performance and layout
2
2
 
3
+ <!-- toc -->
4
+ - [@c](#c)
5
+ - [Module selectors](#module-selectors)
6
+ - [Performance annotations](#performance-annotations)
7
+ - [Symbol visibility and layout](#symbol-visibility-and-layout)
8
+ <!-- /toc -->
9
+
3
10
  Attributes that became official in Swift 6.3. Each section names the Swift
4
11
  Evolution proposal so the exact rules can be checked there.
5
12
 
@@ -1,5 +1,19 @@
1
1
  # Extended Swift patterns
2
2
 
3
+ <!-- toc -->
4
+ - [Contents](#contents)
5
+ - [Codable](#codable)
6
+ - [Result builders](#result-builders)
7
+ - [Property wrappers](#property-wrappers)
8
+ - [Advanced Regex](#advanced-regex)
9
+ - [Custom FormatStyle](#custom-formatstyle)
10
+ - [Collection patterns](#collection-patterns)
11
+ - [guard: complex pattern matching](#guard-complex-pattern-matching)
12
+ - [Typed throws in protocols](#typed-throws-in-protocols)
13
+ - [String interpolation](#string-interpolation)
14
+ - [Never: advanced usage](#never-advanced-usage)
15
+ <!-- /toc -->
16
+
3
17
  Longer examples behind the main skill. Deep Codable work still belongs to
4
18
  `swift-codable`, and format styles beyond a custom style to `swift-formatstyle`.
5
19
 
@@ -1,5 +1,21 @@
1
1
  # Biometric Authentication
2
2
 
3
+ <!-- toc -->
4
+ - [Contents](#contents)
5
+ - [Why a Boolean Gate Fails](#why-a-boolean-gate-fails)
6
+ - [The Secure Pattern: Let the Keychain Ask](#the-secure-pattern-let-the-keychain-ask)
7
+ - [evaluatePolicy and evaluateAccessControl](#evaluatepolicy-and-evaluateaccesscontrol)
8
+ - [Which Flag](#which-flag)
9
+ - [Availability and Degradation](#availability-and-degradation)
10
+ - [Detecting Enrollment Changes](#detecting-enrollment-changes)
11
+ - [Threads and async/await](#threads-and-asyncawait)
12
+ - [Secure Enclave Keys Behind Biometrics](#secure-enclave-keys-behind-biometrics)
13
+ - [Controls in the Development Process](#controls-in-the-development-process)
14
+ - [Verifying at Runtime](#verifying-at-runtime)
15
+ - [Checklist](#checklist)
16
+ - [Sources and Related Files](#sources-and-related-files)
17
+ <!-- /toc -->
18
+
3
19
  Severity when violated: **CRITICAL.** Of all the insecure patterns that code
4
20
  generators produce, a lone `LAContext.evaluatePolicy()` call guarding sensitive
5
21
  content is the most dangerous, because it can be defeated at runtime without
@@ -1,5 +1,22 @@
1
1
  # Certificate Trust, Pinning and Client Certificates
2
2
 
3
+ <!-- toc -->
4
+ - [Contents](#contents)
5
+ - [The four types](#the-four-types)
6
+ - [Evaluating trust](#evaluating-trust)
7
+ - [Custom policies and anchors](#custom-policies-and-anchors)
8
+ - [Four ways to pin](#four-ways-to-pin)
9
+ - [Certificates and identities](#certificates-and-identities)
10
+ - [Mistakes to reject in review](#mistakes-to-reject-in-review)
11
+ - [Backup pins and rotation](#backup-pins-and-rotation)
12
+ - [Where ATS meets trust](#where-ats-meets-trust)
13
+ - [API timeline](#api-timeline)
14
+ - [Threads and performance](#threads-and-performance)
15
+ - [CI guardrails](#ci-guardrails)
16
+ - [Related and sources](#related-and-sources)
17
+ - [Checklist](#checklist)
18
+ <!-- /toc -->
19
+
3
20
  What is here: the Security types for certificates, trust, identities and policies;
4
21
  pinning, whether by leaf, by issuing CA, by public-key digest or declaratively through
5
22
  `NSPinnedDomains`; building your own trust policy; mutual TLS; the points where App
@@ -1,5 +1,24 @@
1
1
  # Insecure Patterns in Generated iOS Code
2
2
 
3
+ <!-- toc -->
4
+ - [Contents](#contents)
5
+ - [Why generated code drifts toward insecure defaults](#why-generated-code-drifts-toward-insecure-defaults)
6
+ - [1. Secrets in UserDefaults](#1-secrets-in-userdefaults)
7
+ - [2. Hardcoded API keys](#2-hardcoded-api-keys)
8
+ - [3. Biometric check that only returns a Boolean](#3-biometric-check-that-only-returns-a-boolean)
9
+ - [4. Ignoring SecItem status codes](#4-ignoring-secitem-status-codes)
10
+ - [5. Missing or weak data protection class](#5-missing-or-weak-data-protection-class)
11
+ - [6. Reusing an AES-GCM nonce](#6-reusing-an-aes-gcm-nonce)
12
+ - [7. MD5 or SHA-1 where security matters](#7-md5-or-sha-1-where-security-matters)
13
+ - [8. Secrets in logs](#8-secrets-in-logs)
14
+ - [9. No keychain cleanup after reinstall](#9-no-keychain-cleanup-after-reinstall)
15
+ - [10. Weak randomness for security values](#10-weak-randomness-for-security-values)
16
+ - [Quick reference](#quick-reference)
17
+ - [Automating detection in CI](#automating-detection-in-ci)
18
+ - [What iOS 26 changes](#what-ios-26-changes)
19
+ - [Checklist](#checklist)
20
+ <!-- /toc -->
21
+
3
22
  This is the review backbone of the skill. It lists the ten security mistakes that code generators produce most often on Apple platforms. Every entry gives the reason it is dangerous, an insecure sample, a corrected sample, a way to detect it, and its OWASP mapping.
4
23
 
5
24
  Deeper material per entry: [credential-storage-patterns.md](credential-storage-patterns.md) (1 and 2), [biometric-authentication.md](biometric-authentication.md) (3), [keychain-fundamentals.md](keychain-fundamentals.md) (4), [keychain-access-control.md](keychain-access-control.md) (5), [cryptokit-symmetric.md](cryptokit-symmetric.md) (6 and 7), [migration-legacy-stores.md](migration-legacy-stores.md) (9), and [compliance-owasp-mapping.md](compliance-owasp-mapping.md) for the complete standards mapping.
@@ -1,5 +1,21 @@
1
1
  # OWASP Mobile Compliance for Apple Platforms
2
2
 
3
+ <!-- toc -->
4
+ - [Contents](#contents)
5
+ - [2016 to 2024: what moved](#2016-to-2024-what-moved)
6
+ - [Traceability matrix](#traceability-matrix)
7
+ - [M1 Improper Credential Usage](#m1-improper-credential-usage)
8
+ - [M3 Insecure Authentication/Authorization](#m3-insecure-authenticationauthorization)
9
+ - [M9 Insecure Data Storage](#m9-insecure-data-storage)
10
+ - [M10 Insufficient Cryptography](#m10-insufficient-cryptography)
11
+ - [Choosing kSecAttrAccessible](#choosing-ksecattraccessible)
12
+ - [Running an enterprise audit](#running-an-enterprise-audit)
13
+ - [Post-quantum roadmap](#post-quantum-roadmap)
14
+ - [Cross-reference index](#cross-reference-index)
15
+ - [Takeaways](#takeaways)
16
+ - [Checklist](#checklist)
17
+ <!-- /toc -->
18
+
3
19
  This file connects everyday iOS security code with three OWASP documents as they stand for 2024 to 2026: the 2024 Mobile Top 10, the MASVS at version 2.1.0, and the MASTG. It concentrates on the four categories this skill owns: M1, M3, M9 and M10.
4
20
 
5
21
  Generated code and older audit templates still quote the 2016 list, for example calling data storage "M2" or cryptography "M5". The 2024 list replaced that numbering completely.
@@ -1,5 +1,24 @@
1
1
  # Credential Storage Patterns
2
2
 
3
+ <!-- toc -->
4
+ - [Contents](#contents)
5
+ - [Six ways credentials leak](#six-ways-credentials-leak)
6
+ - [Choosing the protection class](#choosing-the-protection-class)
7
+ - [One actor in front of the Keychain](#one-actor-in-front-of-the-keychain)
8
+ - [OAuth tokens: from sign-in to Keychain](#oauth-tokens-from-sign-in-to-keychain)
9
+ - [Refresh that survives crashes and races](#refresh-that-survives-crashes-and-races)
10
+ - [API keys fetched at runtime](#api-keys-fetched-at-runtime)
11
+ - [Logout clears everything](#logout-clears-everything)
12
+ - [Rotation and versioned storage](#rotation-and-versioned-storage)
13
+ - [Device binding and restores](#device-binding-and-restores)
14
+ - [Biometrics on high-value credentials](#biometrics-on-high-value-credentials)
15
+ - [What iOS 17 and 18 changed](#what-ios-17-and-18-changed)
16
+ - [Guardrails in CI](#guardrails-in-ci)
17
+ - [OWASP mapping](#owasp-mapping)
18
+ - [The three decisions that matter](#the-three-decisions-that-matter)
19
+ - [Checklist](#checklist)
20
+ <!-- /toc -->
21
+
3
22
  OAuth tokens, API keys and passwords have exactly one place Apple sanctions for
4
23
  them on the device: the Keychain. When a 2025 study pulled apart App Store
5
24
  binaries, 71% of the iOS apps it examined exposed one or more embedded secrets, most
@@ -1,5 +1,23 @@
1
1
  # CryptoKit: Signatures, Key Agreement, HPKE and Post-Quantum
2
2
 
3
+ <!-- toc -->
4
+ - [Contents](#contents)
5
+ - [Picking a curve or algorithm](#picking-a-curve-or-algorithm)
6
+ - [Signing and key agreement are different types](#signing-and-key-agreement-are-different-types)
7
+ - [Key agreement always goes through a KDF](#key-agreement-always-goes-through-a-kdf)
8
+ - [HPKE (iOS 17+)](#hpke-ios-17)
9
+ - [Post-quantum cryptography (iOS 26+)](#post-quantum-cryptography-ios-26)
10
+ - [PEM and DER (iOS 14+)](#pem-and-der-ios-14)
11
+ - [The Secure Enclave, briefly](#the-secure-enclave-briefly)
12
+ - [RSA](#rsa)
13
+ - [Frequent mistakes](#frequent-mistakes)
14
+ - [Availability](#availability)
15
+ - [Performance and threads](#performance-and-threads)
16
+ - [Sources](#sources)
17
+ - [Summary](#summary)
18
+ - [Checklist](#checklist)
19
+ <!-- /toc -->
20
+
3
21
  Topics: digital signatures (ECDSA, EdDSA), Diffie-Hellman over elliptic curves,
4
22
  hybrid public-key encryption from iOS 17,
5
23
  ML-KEM and ML-DSA with hybrid migration (iOS 26+), key serialization, and where the
@@ -1,5 +1,21 @@
1
1
  # CryptoKit: Hashing, MACs and Symmetric Encryption
2
2
 
3
+ <!-- toc -->
4
+ - [Contents](#contents)
5
+ - [Digests](#digests)
6
+ - [HMAC](#hmac)
7
+ - [AES-GCM](#aes-gcm)
8
+ - [ChaChaPoly](#chachapoly)
9
+ - [SymmetricKey](#symmetrickey)
10
+ - [Moving off CommonCrypto](#moving-off-commoncrypto)
11
+ - [Frequent mistakes](#frequent-mistakes)
12
+ - [Post-quantum outlook](#post-quantum-outlook)
13
+ - [OWASP mapping](#owasp-mapping)
14
+ - [Tests worth writing](#tests-worth-writing)
15
+ - [Sources](#sources)
16
+ - [Checklist](#checklist)
17
+ <!-- /toc -->
18
+
3
19
  This file covers the symmetric half of CryptoKit: digests (SHA-2 and SHA-3), HMAC,
4
20
  the two AEAD ciphers (AES-GCM and ChaChaPoly), `SymmetricKey`, nonce handling, key
5
21
  derivation with HKDF and PBKDF2, and moving old CommonCrypto code over. The baseline
@@ -1,5 +1,22 @@
1
1
  # Keychain Access Control
2
2
 
3
+ <!-- toc -->
4
+ - [Contents](#contents)
5
+ - [When: The Accessibility Constants](#when-the-accessibility-constants)
6
+ - [How: SecAccessControl Flags](#how-secaccesscontrol-flags)
7
+ - [Accessibility and Access Control Are Exclusive](#accessibility-and-access-control-are-exclusive)
8
+ - [Choosing a Combination](#choosing-a-combination)
9
+ - [Mistakes in Generated Code](#mistakes-in-generated-code)
10
+ - [Code Patterns](#code-patterns)
11
+ - [macOS: kSecUseDataProtectionKeychain](#macos-ksecusedataprotectionkeychain)
12
+ - [File Protection Sidebar](#file-protection-sidebar)
13
+ - [Error Codes](#error-codes)
14
+ - [Version Timeline](#version-timeline)
15
+ - [Testing](#testing)
16
+ - [Checklist](#checklist)
17
+ - [Related Files](#related-files)
18
+ <!-- /toc -->
19
+
3
20
  Two independent settings decide whether a read succeeds:
4
21
 
5
22
  - **When** the item can be decrypted: `kSecAttrAccessible` picks the data
@@ -1,5 +1,22 @@
1
1
  # Keychain Fundamentals
2
2
 
3
+ <!-- toc -->
4
+ - [Contents](#contents)
5
+ - [How the Keychain Is Built](#how-the-keychain-is-built)
6
+ - [Dictionary Contracts](#dictionary-contracts)
7
+ - [Uniqueness](#uniqueness)
8
+ - [Saving: Add, Then Update on Duplicate](#saving-add-then-update-on-duplicate)
9
+ - [Reading](#reading)
10
+ - [One Place That Builds Queries](#one-place-that-builds-queries)
11
+ - [OSStatus Codes](#osstatus-codes)
12
+ - [An Actor Around the Keychain (iOS 13+ / macOS 10.15+)](#an-actor-around-the-keychain-ios-13-macos-1015)
13
+ - [Performance](#performance)
14
+ - [macOS: Two Keychains (TN3137)](#macos-two-keychains-tn3137)
15
+ - [Accessibility at a Glance](#accessibility-at-a-glance)
16
+ - [Checklist](#checklist)
17
+ - [Related Files](#related-files)
18
+ <!-- /toc -->
19
+
3
20
  Every other reference in this skill builds on the material here: how the four
4
21
  `SecItem` functions behave, what their dictionaries may contain, how to read
5
22
  their status codes, and how to keep them away from the main thread.
@@ -1,5 +1,22 @@
1
1
  # Keychain Item Classes
2
2
 
3
+ <!-- toc -->
4
+ - [Contents](#contents)
5
+ - [Primary Keys per Class](#primary-keys-per-class)
6
+ - [Generic Password](#generic-password)
7
+ - [Internet Password](#internet-password)
8
+ - [Key](#key)
9
+ - [Certificate](#certificate)
10
+ - [Identity](#identity)
11
+ - [Mistakes Generated Code Makes](#mistakes-generated-code-makes)
12
+ - [Platform Differences](#platform-differences)
13
+ - [Size and When to Use a File](#size-and-when-to-use-a-file)
14
+ - [Tests That Prove the Class Is Right](#tests-that-prove-the-class-is-right)
15
+ - [Moving Web Logins to Internet Passwords](#moving-web-logins-to-internet-passwords)
16
+ - [Checklist](#checklist)
17
+ - [Related Files](#related-files)
18
+ <!-- /toc -->
19
+
3
20
  The keychain stores five kinds of item: `kSecClassGenericPassword`,
4
21
  `kSecClassInternetPassword`, `kSecClassKey`, `kSecClassCertificate` and
5
22
  `kSecClassIdentity`. Choosing the wrong one does not crash anything. It shows up
@@ -1,5 +1,23 @@
1
1
  # Keychain Sharing Across Apps and Extensions
2
2
 
3
+ <!-- toc -->
4
+ - [Contents](#contents)
5
+ - [How access groups work](#how-access-groups-work)
6
+ - [Two entitlements with two formats](#two-entitlements-with-two-formats)
7
+ - [Code](#code)
8
+ - [Setting up every target](#setting-up-every-target)
9
+ - [macOS has two keychains](#macos-has-two-keychains)
10
+ - [Moving an item to another group](#moving-an-item-to-another-group)
11
+ - [Lifecycle surprises](#lifecycle-surprises)
12
+ - [Platform notes](#platform-notes)
13
+ - [Signing and distribution](#signing-and-distribution)
14
+ - [When sharing breaks](#when-sharing-breaks)
15
+ - [Threat model](#threat-model)
16
+ - [2024 to 2026](#2024-to-2026)
17
+ - [Related](#related)
18
+ - [Checklist](#checklist)
19
+ <!-- /toc -->
20
+
3
21
  Access groups are the one mechanism for letting several apps and extensions read the
4
22
  same Keychain items. Getting them right takes three things together: the exact Team ID
5
23
  prefix, an entitlement on every target that participates, and an explicit
@@ -1,5 +1,26 @@
1
1
  # Migrating Secrets Out of Legacy Stores
2
2
 
3
+ <!-- toc -->
4
+ - [Contents](#contents)
5
+ - [Why the old stores are not acceptable](#why-the-old-stores-are-not-acceptable)
6
+ - [Five traps to avoid](#five-traps-to-avoid)
7
+ - [Cleaning up after a reinstall](#cleaning-up-after-a-reinstall)
8
+ - [Atomic migration: read, write, verify, delete](#atomic-migration-read-write-verify-delete)
9
+ - [Versioned migration with a schema number](#versioned-migration-with-a-schema-number)
10
+ - [Orphaned items after a rename](#orphaned-items-after-a-rename)
11
+ - [Locked devices and background launches](#locked-devices-and-background-launches)
12
+ - [The phantom mismatch](#the-phantom-mismatch)
13
+ - [Team ID change after an app transfer](#team-id-change-after-an-app-transfer)
14
+ - [Cleaning up legacy artefacts](#cleaning-up-legacy-artefacts)
15
+ - [Launch order](#launch-order)
16
+ - [Concurrency](#concurrency)
17
+ - [Testing migrations](#testing-migrations)
18
+ - [Very old versions](#very-old-versions)
19
+ - [Deleting files](#deleting-files)
20
+ - [Key decisions](#key-decisions)
21
+ - [Checklist](#checklist)
22
+ <!-- /toc -->
23
+
3
24
  Scope: moving credentials that an older release kept in `UserDefaults`, property lists or `NSCoding` archives into the keychain, deleting the old copies safely, wiping keychain leftovers after a reinstall, running migrations by schema version, and surviving a Team ID change after an app transfer.
4
25
 
5
26
  Availability: the patterns rely on actors and on iOS 15 pre-warming behaviour, so they apply from iOS 15. Write new code against iOS 17 or later where you can.
@@ -1,5 +1,21 @@
1
1
  # Secure Enclave
2
2
 
3
+ <!-- toc -->
4
+ - [Contents](#contents)
5
+ - [What It Is](#what-it-is)
6
+ - [What It Cannot Do](#what-it-cannot-do)
7
+ - [CryptoKit SecureEnclave (iOS 13+)](#cryptokit-secureenclave-ios-13)
8
+ - [Keeping a Key Across Launches](#keeping-a-key-across-launches)
9
+ - [Biometric-Gated Enclave Keys](#biometric-gated-enclave-keys)
10
+ - [Security Framework Route (iOS 10+)](#security-framework-route-ios-10)
11
+ - [iOS 26: Post-Quantum Types in the Enclave](#ios-26-post-quantum-types-in-the-enclave)
12
+ - [Enclave or Software Key?](#enclave-or-software-key)
13
+ - [Six Traps](#six-traps)
14
+ - [Testing and CI](#testing-and-ci)
15
+ - [Operating Enclave Keys](#operating-enclave-keys)
16
+ - [Summary](#summary)
17
+ <!-- /toc -->
18
+
3
19
  The Secure Enclave is a security coprocessor kept apart from the main
4
20
  processor. It creates keys, stores them and uses them without the private
5
21
  material ever reaching the Application Processor. It has shipped since the
@@ -1,5 +1,21 @@
1
1
  # Testing Security Code
2
2
 
3
+ <!-- toc -->
4
+ - [Contents](#contents)
5
+ - [A protocol in front of the keychain](#a-protocol-in-front-of-the-keychain)
6
+ - [Seven mistakes in generated keychain tests](#seven-mistakes-in-generated-keychain-tests)
7
+ - [Simulator versus device](#simulator-versus-device)
8
+ - [Core test patterns](#core-test-patterns)
9
+ - [Secure Enclave tests](#secure-enclave-tests)
10
+ - [Biometric flows](#biometric-flows)
11
+ - [CI configuration](#ci-configuration)
12
+ - [Test plans](#test-plans)
13
+ - [Swift Testing](#swift-testing)
14
+ - [Further techniques](#further-techniques)
15
+ - [Takeaways](#takeaways)
16
+ - [Checklist](#checklist)
17
+ <!-- /toc -->
18
+
3
19
  The pattern that makes keychain code testable is a protocol between the app and the Security framework. Unit tests run against an in-memory implementation; tests that need the real keychain, the Secure Enclave or biometric hardware run on devices.
4
20
 
5
21
  The keychain does not behave the same on Simulator, on a headless CI runner and on a phone. Tests written without that in mind fail intermittently, crash on runners, or pass while proving nothing.
@@ -1,5 +1,14 @@
1
1
  # Newer Swift Testing APIs
2
2
 
3
+ <!-- toc -->
4
+ - [Warnings: `Issue.record(_:severity:)`](#warnings-issuerecord_severity)
5
+ - [Cancelling a Test: `Test.cancel(_:)`](#cancelling-a-test-testcancel_)
6
+ - [Capturing Values in Exit Tests](#capturing-values-in-exit-tests)
7
+ - [Image Attachments](#image-attachments)
8
+ - [Version Gates](#version-gates)
9
+ - [Proposals](#proposals)
10
+ <!-- /toc -->
11
+
3
12
  Companion to the `swift-testing` skill. Each section names the Swift Testing
4
13
  proposal (ST-nnnn) and the toolchain that ships it.
5
14
 
@@ -1,5 +1,29 @@
1
1
  # Swift Testing Patterns
2
2
 
3
+ <!-- toc -->
4
+ - [Contents](#contents)
5
+ - [Suites](#suites)
6
+ - [Parameterized Tests](#parameterized-tests)
7
+ - [Execution Model](#execution-model)
8
+ - [Confirmations](#confirmations)
9
+ - [Known Issues Limited to Specific Failures](#known-issues-limited-to-specific-failures)
10
+ - [Tags](#tags)
11
+ - [Scoped Setup and Teardown with `TestScoping`](#scoped-setup-and-teardown-with-testscoping)
12
+ - [From XCTest, Step by Step](#from-xctest-step-by-step)
13
+ - [Test Doubles](#test-doubles)
14
+ - [Designing for Tests](#designing-for-tests)
15
+ - [Async and Time](#async-and-time)
16
+ - [UI Tests Stay on XCTest](#ui-tests-stay-on-xctest)
17
+ - [Performance Tests Stay on XCTest](#performance-tests-stay-on-xctest)
18
+ - [Snapshot Tests](#snapshot-tests)
19
+ - [Attachments from Files](#attachments-from-files)
20
+ - [Exit Tests](#exit-tests)
21
+ - [Organising Files](#organising-files)
22
+ - [Readable Arguments](#readable-arguments)
23
+ - [Tests That Need a Newer OS](#tests-that-need-a-newer-os)
24
+ - [More Mistakes to Avoid](#more-mistakes-to-avoid)
25
+ <!-- /toc -->
26
+
3
27
  Companion to the `swift-testing` skill.
4
28
 
5
29
  ## Contents
@@ -1,5 +1,14 @@
1
1
  # Async tests
2
2
 
3
+ <!-- toc -->
4
+ - [Serializing tests](#serializing-tests)
5
+ - [Confirming async work](#confirming-async-work)
6
+ - [How to set a time limit for concurrent tests](#how-to-set-a-time-limit-for-concurrent-tests)
7
+ - [How to force concurrent tests to run on a specific actor](#how-to-force-concurrent-tests-to-run-on-a-specific-actor)
8
+ - [Testing pre-concurrency code](#testing-pre-concurrency-code)
9
+ - [Mocking networking](#mocking-networking)
10
+ <!-- /toc -->
11
+
3
12
  Swift Testing is built to be async and run tests in parallel; special care must be taken to ensure those tests run well, particularly when Swift concurrency is involved. For more help with Swift concurrency, suggest the [Swift Concurrency Pro agent skill](https://github.com/twostraws/swift-concurrency-agent-skill).
4
13
 
5
14