@mmerterden/multi-agent-pipeline 20.7.0 → 20.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/LICENSE +0 -10
  3. package/docs/facts.json +1 -1
  4. package/manifest.json +266 -267
  5. package/package.json +2 -2
  6. package/pipeline/scripts/_notices.mjs +1 -1
  7. package/pipeline/skills/.skill-manifest.json +68 -68
  8. package/pipeline/skills/shared/README.md +70 -70
  9. package/pipeline/skills/shared/external/alarmkit/SKILL.md +373 -381
  10. package/pipeline/skills/shared/external/alarmkit/evals/evals.json +23 -18
  11. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +328 -378
  12. package/pipeline/skills/shared/external/app-clips/SKILL.md +260 -160
  13. package/pipeline/skills/shared/external/app-clips/evals/evals.json +27 -27
  14. package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +150 -83
  15. package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +135 -83
  16. package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +143 -85
  17. package/pipeline/skills/shared/external/app-intents/SKILL.md +302 -304
  18. package/pipeline/skills/shared/external/app-intents/evals/evals.json +21 -21
  19. package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +594 -894
  20. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +339 -277
  21. package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +27 -23
  22. package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +105 -122
  23. package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +143 -166
  24. package/pipeline/skills/shared/external/app-store-review/SKILL.md +307 -326
  25. package/pipeline/skills/shared/external/app-store-review/evals/evals.json +21 -21
  26. package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +105 -67
  27. package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +114 -101
  28. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +333 -360
  29. package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +24 -27
  30. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +215 -322
  31. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +161 -256
  32. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +277 -387
  33. package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +196 -210
  34. package/pipeline/skills/shared/external/authentication/SKILL.md +265 -381
  35. package/pipeline/skills/shared/external/authentication/evals/evals.json +25 -25
  36. package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +133 -178
  37. package/pipeline/skills/shared/external/authentication/references/passkeys.md +111 -147
  38. package/pipeline/skills/shared/external/avkit/SKILL.md +267 -364
  39. package/pipeline/skills/shared/external/avkit/evals/evals.json +26 -26
  40. package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +375 -493
  41. package/pipeline/skills/shared/external/background-processing/SKILL.md +270 -382
  42. package/pipeline/skills/shared/external/background-processing/evals/evals.json +22 -22
  43. package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +169 -317
  44. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +290 -371
  45. package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +24 -24
  46. package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +175 -343
  47. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +292 -381
  48. package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +33 -30
  49. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +227 -355
  50. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +197 -346
  51. package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +19 -21
  52. package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +169 -308
  53. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +226 -376
  54. package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +25 -22
  55. package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +257 -337
  56. package/pipeline/skills/shared/external/core-data/SKILL.md +292 -368
  57. package/pipeline/skills/shared/external/core-data/evals/evals.json +30 -27
  58. package/pipeline/skills/shared/external/core-motion/SKILL.md +235 -324
  59. package/pipeline/skills/shared/external/core-motion/evals/evals.json +31 -27
  60. package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +210 -310
  61. package/pipeline/skills/shared/external/core-nfc/SKILL.md +292 -366
  62. package/pipeline/skills/shared/external/core-nfc/evals/evals.json +22 -24
  63. package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +233 -329
  64. package/pipeline/skills/shared/external/coreml/SKILL.md +323 -367
  65. package/pipeline/skills/shared/external/coreml/evals/evals.json +24 -21
  66. package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +562 -565
  67. package/pipeline/skills/shared/external/cryptokit/SKILL.md +253 -394
  68. package/pipeline/skills/shared/external/cryptokit/evals/evals.json +20 -18
  69. package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +299 -488
  70. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +270 -323
  71. package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +27 -30
  72. package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +167 -315
  73. package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +140 -193
  74. package/pipeline/skills/shared/external/device-integrity/SKILL.md +230 -353
  75. package/pipeline/skills/shared/external/device-integrity/evals/evals.json +25 -21
  76. package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +159 -197
  77. package/pipeline/skills/shared/external/energykit/SKILL.md +225 -392
  78. package/pipeline/skills/shared/external/energykit/evals/evals.json +29 -28
  79. package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +174 -470
  80. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +261 -383
  81. package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +25 -22
  82. package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +165 -268
  83. package/pipeline/skills/shared/external/healthkit/SKILL.md +252 -303
  84. package/pipeline/skills/shared/external/healthkit/evals/evals.json +24 -23
  85. package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +369 -523
  86. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +233 -348
  87. package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +27 -22
  88. package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +199 -305
  89. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +368 -340
  90. package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +28 -27
  91. package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +314 -260
  92. package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +97 -67
  93. package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +165 -101
  94. package/pipeline/skills/shared/external/ios-localization/SKILL.md +258 -371
  95. package/pipeline/skills/shared/external/ios-localization/evals/evals.json +23 -23
  96. package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +283 -491
  97. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +313 -440
  98. package/pipeline/skills/shared/external/ios-networking/SKILL.md +265 -341
  99. package/pipeline/skills/shared/external/ios-networking/evals/evals.json +24 -24
  100. package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +425 -652
  101. package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +143 -285
  102. package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -53
  103. package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +231 -456
  104. package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +517 -784
  105. package/pipeline/skills/shared/external/ios-simulator/SKILL.md +265 -393
  106. package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +21 -21
  107. package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +177 -270
  108. package/pipeline/skills/shared/external/live-activities/SKILL.md +318 -360
  109. package/pipeline/skills/shared/external/live-activities/evals/evals.json +21 -21
  110. package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +478 -710
  111. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +295 -267
  112. package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +28 -24
  113. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +378 -532
  114. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +397 -499
  115. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +165 -348
  116. package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +26 -23
  117. package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +123 -130
  118. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +189 -315
  119. package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +22 -21
  120. package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +181 -270
  121. package/pipeline/skills/shared/external/natural-language/SKILL.md +188 -340
  122. package/pipeline/skills/shared/external/natural-language/evals/evals.json +21 -21
  123. package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +171 -225
  124. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +258 -392
  125. package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +30 -29
  126. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +164 -231
  127. package/pipeline/skills/shared/external/pdfkit/SKILL.md +312 -344
  128. package/pipeline/skills/shared/external/pdfkit/evals/evals.json +19 -19
  129. package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +413 -624
  130. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +242 -358
  131. package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +25 -21
  132. package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +161 -226
  133. package/pipeline/skills/shared/external/permissionkit/SKILL.md +282 -400
  134. package/pipeline/skills/shared/external/permissionkit/evals/evals.json +27 -30
  135. package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +237 -350
  136. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +276 -325
  137. package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +299 -545
  138. package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +344 -588
  139. package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +316 -660
  140. package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +270 -416
  141. package/pipeline/skills/shared/external/push-notifications/SKILL.md +312 -340
  142. package/pipeline/skills/shared/external/push-notifications/evals/evals.json +27 -26
  143. package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +328 -485
  144. package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +327 -560
  145. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +218 -410
  146. package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +24 -27
  147. package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +221 -348
  148. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +222 -393
  149. package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +23 -24
  150. package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +280 -420
  151. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +217 -421
  152. package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +23 -26
  153. package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +133 -125
  154. package/pipeline/skills/shared/external/storekit/SKILL.md +228 -204
  155. package/pipeline/skills/shared/external/storekit/evals/evals.json +27 -24
  156. package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +98 -109
  157. package/pipeline/skills/shared/external/storekit/references/core-patterns.md +298 -242
  158. package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +356 -649
  159. package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +274 -399
  160. package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +22 -24
  161. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +107 -108
  162. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +93 -165
  163. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +99 -137
  164. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +77 -120
  165. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +334 -350
  166. package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +22 -22
  167. package/pipeline/skills/shared/external/swift-charts/SKILL.md +208 -394
  168. package/pipeline/skills/shared/external/swift-charts/evals/evals.json +27 -30
  169. package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +351 -762
  170. package/pipeline/skills/shared/external/swift-codable/SKILL.md +339 -343
  171. package/pipeline/skills/shared/external/swift-codable/evals/evals.json +20 -20
  172. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +303 -351
  173. package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +27 -24
  174. package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +65 -80
  175. package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +48 -84
  176. package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +134 -79
  177. package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +145 -167
  178. package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +62 -50
  179. package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +92 -121
  180. package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +177 -241
  181. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +258 -234
  182. package/pipeline/skills/shared/external/swift-language/SKILL.md +342 -382
  183. package/pipeline/skills/shared/external/swift-language/evals/evals.json +24 -27
  184. package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +79 -56
  185. package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +297 -340
  186. package/pipeline/skills/shared/external/swift-security/SKILL.md +180 -161
  187. package/pipeline/skills/shared/external/swift-security/evals/evals.json +25 -25
  188. package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +314 -469
  189. package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +408 -476
  190. package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +260 -530
  191. package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +270 -477
  192. package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +573 -571
  193. package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +370 -441
  194. package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +332 -433
  195. package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +346 -468
  196. package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +352 -472
  197. package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +431 -432
  198. package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +328 -425
  199. package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +341 -579
  200. package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +396 -457
  201. package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +354 -614
  202. package/pipeline/skills/shared/external/swift-testing/SKILL.md +188 -175
  203. package/pipeline/skills/shared/external/swift-testing/evals/evals.json +26 -24
  204. package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +80 -84
  205. package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +317 -433
  206. package/pipeline/skills/shared/external/swiftdata/SKILL.md +392 -256
  207. package/pipeline/skills/shared/external/swiftdata/evals/evals.json +24 -24
  208. package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +206 -402
  209. package/pipeline/skills/shared/external/swiftdata/references/indexing.md +59 -52
  210. package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +57 -33
  211. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +354 -747
  212. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +300 -508
  213. package/pipeline/skills/shared/external/swiftlint/SKILL.md +175 -226
  214. package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +141 -208
  215. package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +100 -109
  216. package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +159 -179
  217. package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +383 -18
  218. package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +143 -229
  219. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +283 -366
  220. package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +396 -608
  221. package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +336 -385
  222. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +239 -349
  223. package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +228 -310
  224. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +260 -249
  225. package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +92 -74
  226. package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +112 -177
  227. package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +61 -64
  228. package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +94 -134
  229. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +193 -225
  230. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +173 -327
  231. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +193 -168
  232. package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +127 -150
  233. package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +132 -133
  234. package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +152 -117
  235. package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +106 -140
  236. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +316 -252
  237. package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +341 -332
  238. package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +547 -854
  239. package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +485 -537
  240. package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +417 -499
  241. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +213 -376
  242. package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +86 -175
  243. package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +89 -195
  244. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +95 -182
  245. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +71 -149
  246. package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +21 -27
  247. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +303 -295
  248. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +204 -387
  249. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +469 -683
  250. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +140 -186
  251. package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +75 -86
  252. package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +63 -60
  253. package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +69 -137
  254. package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +95 -67
  255. package/pipeline/skills/shared/external/tipkit/SKILL.md +220 -335
  256. package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +356 -494
  257. package/pipeline/skills/shared/external/vision-framework/SKILL.md +260 -375
  258. package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +393 -515
  259. package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +363 -539
  260. package/pipeline/skills/shared/external/weatherkit/SKILL.md +152 -310
  261. package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +288 -407
  262. package/pipeline/skills/shared/external/widgetkit/SKILL.md +216 -288
  263. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +414 -719
  264. package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +0 -39
@@ -3,43 +3,47 @@
3
3
  "evals": [
4
4
  {
5
5
  "id": 1,
6
- "prompt": "I have a new habit tracker launching on the App Store. Draft an ASO plan covering app name/subtitle keyword placement, keyword field priorities, the description hook, first three screenshots, promotional text, custom product pages for ads, in-app events, product page optimization tests, localization, and review prompt timing.",
7
- "expected_output": "A complete App Store Optimization plan that separates search visibility from conversion, uses Apple-backed metadata surfaces correctly, and gives practical copy/testing guidance without drifting into App Review compliance or StoreKit implementation depth.",
6
+ "name": "language-app-full-plan",
7
+ "prompt": "We are launching a language-learning flashcard app in English, German and Japanese. Build us an ASO plan: what goes in the name, subtitle and keyword field, how the product page should convert, which Custom Product Pages and events make sense, how we should test the page, and when the app should ask for a rating.",
8
+ "expected_output": "Organizes the plan into visibility and conversion. Picks relevant, high-intent keywords over popular unrelated ones and lists name, subtitle, keyword field, primary category, ratings, Custom Product Page keywords and event cards as visibility levers without stuffing the description. For conversion covers the opening description lines, benefit-led first screenshots, current promotional text and research per locale. Maps Custom Product Pages to audiences or channels and mentions the 70-page capacity or assigned keywords. Proposes a test with one hypothesis, at most three treatments and chosen localizations. Places review prompts after positive moments and notes StoreKit may not show them.",
8
9
  "files": [],
9
10
  "expectations": [
10
- "Separates search visibility work from conversion work and prioritizes relevance over high-volume but weakly related keywords.",
11
- "Uses app name, subtitle, keyword field, primary category, ratings/reviews, Custom Product Page assigned keywords, and in-app event cards as the main search/visibility surfaces rather than keyword-stuffing the description.",
12
- "Recommends a conversion-focused description hook, benefit-oriented first screenshots, current promotional text, and per-locale metadata research.",
13
- "Plans Custom Product Pages around audience or acquisition-channel differences and mentions the current 70-page capacity or assigned keyword search visibility.",
14
- "Plans Product Page Optimization around one hypothesis at a time while acknowledging up to three treatments and selected localizations.",
15
- "Places in-app review prompts only after positive user moments and notes that StoreKit may not show every requested prompt."
11
+ "Splits the plan into a visibility part and a conversion part",
12
+ "Puts relevance and intent ahead of raw search volume",
13
+ "Names name, subtitle, keyword field, category, ratings, Custom Product Page keywords and event cards as visibility levers, and keeps keywords out of the description",
14
+ "Covers the description opening, benefit-first screenshots, up-to-date promotional text and keyword research per locale",
15
+ "Ties Custom Product Pages to audiences or channels and mentions the 70-page limit or assigned search keywords",
16
+ "Designs a test with one hypothesis, up to three treatments and selected localizations",
17
+ "Asks for reviews after positive moments and says StoreKit decides whether the prompt appears"
16
18
  ]
17
19
  },
18
20
  {
19
21
  "id": 2,
20
- "prompt": "Review this ASO note for accuracy: 'Custom Product Pages are capped at 35 and only work through direct links. Product Page Optimization compares one treatment in the default locale only. Put repeated keywords at the start of the keyword field because position is a ranking factor. Add more keywords to the description. In-app event metadata is indexed like the keyword field. Japan and Korea also index English keyword fields. Ratings below 4.0 always tank conversion.' What should change?",
21
- "expected_output": "A correction-focused review that replaces stale or unsupported App Store Optimization claims with current Apple-source-grounded guidance.",
22
+ "name": "correct-aso-notes",
23
+ "prompt": "Fix this internal ASO note: 'We can make 35 Custom Product Pages and they only work through links. Product page tests allow one treatment for all locales and give no confidence data. Words at the start of the keyword field rank higher. Add keywords to the description too. Event names are a hidden keyword field. Japan and Korea index the English keyword field, and a rating under 4.0 always kills conversion.'",
24
+ "expected_output": "Raises the Custom Product Page limit to 70 and adds that assigned keywords let pages appear in search as well as via links. Says a test can have up to three treatments, localizations are selectable and App Analytics reports confidence. Rejects the idea that keyword position inside the field changes ranking, removes keywords from the description, and describes event names and short descriptions as visible card copy. Drops the unsupported claims about cross-locale indexing and a hard 4.0 threshold, while keeping research per market and treating ratings as a real signal.",
22
25
  "files": [],
23
26
  "expectations": [
24
- "Corrects Custom Product Pages to the current 70-page limit and mentions assigned-keyword search visibility in addition to direct URLs.",
25
- "Corrects Product Page Optimization to up to three treatments, selectable localizations, and App Analytics confidence/reporting behavior instead of one default-locale treatment.",
26
- "Rejects unsupported keyword-position ranking claims and recommends spending keyword-field characters on relevant, non-duplicated terms.",
27
- "Keeps the description conversion-focused and avoids adding unnecessary keywords for search ranking.",
28
- "Frames in-app event name and short description as visible event-card/search-result copy rather than a hidden keyword field.",
29
- "Removes unsupported cross-locale English-indexing and fixed rating-threshold claims while preserving per-market research and ratings/reviews as search and conversion signals."
27
+ "Corrects the limit to 70 Custom Product Pages and adds assigned-keyword search visibility",
28
+ "States up to three treatments, selectable localizations and confidence reporting in App Analytics",
29
+ "Rejects the claim that position within the keyword field affects ranking",
30
+ "Advises against adding keywords to the description",
31
+ "Describes event metadata as visible card copy rather than a keyword field",
32
+ "Removes the unsupported cross-locale indexing and fixed-threshold rating claims while keeping per-market research and ratings as signals"
30
33
  ]
31
34
  },
32
35
  {
33
36
  "id": 3,
34
- "prompt": "I need help before submission: my App Store listing has ASO keyword ideas, but also PrivacyInfo.xcprivacy entries, ATT wording, subscription paywall code, and a possible metadata rejection because screenshots show mockups. Which pieces should app-store-optimization own, and where should the rest go?",
35
- "expected_output": "A boundary-aware answer that keeps app-store-optimization focused on discoverability and conversion strategy while routing compliance, privacy manifest, ATT, rejection, and StoreKit implementation details to sibling skills.",
37
+ "name": "ownership-boundary",
38
+ "prompt": "Our growth, compliance and payments teams keep arguing over who owns what on the App Store listing and the paywall. Split the work between ASO, App Store review and StoreKit, and say what ASO should still double-check.",
39
+ "expected_output": "ASO keeps keywords, name and subtitle, description copy, screenshots and captions, promotional text, Custom Product Pages, events, page tests, listing localization and ratings. Rejection risk, screenshot compliance, PrivacyInfo.xcprivacy, metadata policy and ATT go to app-store-review. Paywall code, purchase handling, entitlements and product setup go to storekit. ASO still reviews listing copy and screenshots for accuracy and conversion, and never recommends competitor names, unrelated keywords or misleading screenshots.",
36
40
  "files": [],
37
41
  "expectations": [
38
- "Keeps app-store-optimization focused on keyword strategy, title/subtitle, description conversion copy, screenshots/captions, promotional text, Custom Product Pages, In-App Events, PPO tests, localization, and ratings strategy.",
39
- "Routes App Store rejection risks, screenshot compliance, PrivacyInfo.xcprivacy, metadata policy, and ATT wording to app-store-review rather than solving them in depth.",
40
- "Routes subscription paywall code, purchase handling, entitlement checks, and StoreKit product setup to storekit rather than expanding ASO into IAP implementation.",
41
- "Still gives the ASO-safe next step: cross-check listing copy and screenshots for both conversion quality and compliance before submission.",
42
- "Avoids recommending competitor names, unrelated keywords, or misleading screenshots as ASO tactics."
42
+ "Assigns keywords, name, subtitle, description, screenshots, captions, promotional text, Custom Product Pages, events, tests, listing localization and ratings to ASO",
43
+ "Sends rejection risk, screenshot compliance, PrivacyInfo.xcprivacy, metadata policy and ATT to app-store-review",
44
+ "Sends paywall code, purchase handling, entitlements and product setup to storekit",
45
+ "Keeps an ASO cross-check of listing copy and screenshots for accuracy and conversion",
46
+ "Never suggests competitor names, unrelated keywords or misleading screenshots"
43
47
  ]
44
48
  }
45
49
  ]
@@ -1,174 +1,157 @@
1
1
  # Keyword Research Methodology
2
2
 
3
- Step-by-step process for identifying, scoring, and maintaining the keyword field for App Store search optimization.
3
+ ## What App Store search reads
4
4
 
5
- ## Contents
5
+ Apple documents two kinds of search signal: text relevance from the name,
6
+ subtitle, keyword field and primary category, and user behavior such as
7
+ downloads, ratings and reviews. The table below is a planning aid, not a list
8
+ of ranking weights.
6
9
 
7
- - [How Apple Indexes Metadata](#how-apple-indexes-metadata)
8
- - [Research Process](#research-process)
9
- - [Keyword Scoring Framework](#keyword-scoring-framework)
10
- - [Slot Allocation Strategy](#slot-allocation-strategy)
11
- - [Seasonal Keyword Rotation](#seasonal-keyword-rotation)
12
- - [Before and After Examples](#before-and-after-examples)
10
+ | Field | Role in search | Limit | Changing it | Guidance |
11
+ |---|---|---|---|---|
12
+ | App name | Indexed | 30 characters | With a new version, when status allows | Distinctive, and hints at what the app does |
13
+ | Subtitle | Indexed | 30 characters | With a new version | Short statement of the value or main use |
14
+ | Keyword field | Indexed | 100 bytes | With a new version | Commas between terms, no spaces after them |
15
+ | Primary category | Counts toward relevance | One choice | With a new version | Never repeat its name in keywords |
16
+ | Custom Product Page keywords | Indexed for approved, visible pages | Set per page | In App Store Connect | Sends matching searches to that page |
17
+ | In-App Event name and short description | Shown on cards in Search | Set per event | Per event | Visible copy, not a hidden keyword field |
18
+ | Description | Conversion | 4,000 characters | With a new version | Apple's product page guidance says not to add keywords for search here |
19
+ | Promotional text | No effect on ranking, per Apple | 170 characters | Any time | Timely conversion message |
20
+ | Ratings and reviews | Behavior signal | Ongoing | Earned | Mine for vocabulary; never a place to stuff terms |
13
21
 
14
- ## How Apple Indexes Metadata
22
+ Additional rules:
15
23
 
16
- Apple documents the main App Store search signals as text relevance, including matches for the app title, subtitle, keywords, and primary category, plus user behavior such as downloads, ratings, and reviews. Use this table as a practical planning map, not as a precise ranking-weight model:
24
+ - Singular and plural of a word already present count as the same word.
25
+ - Use a space only inside a real multi-word phrase.
26
+ - Two different words that are both searched, such as "photo" and
27
+ "photography", may both earn a place.
28
+ - Latin-script characters take one byte each; many other scripts take two or
29
+ three, so the field holds fewer of them.
17
30
 
18
- | Field | Indexed for search? | Controllable per version? | Notes |
19
- |-------|---------------------|--------------------------|-------|
20
- | App name | Yes | Yes (with new version/status permitting) | 30 characters. Choose a distinctive name that hints at what the app does. |
21
- | Subtitle | Yes | Yes (with new version/status permitting) | 30 characters. Summarize value or typical use in a concise phrase. |
22
- | Keyword field | Yes | Yes (with new version/status permitting) | Up to 100 bytes. Use comma-separated terms with no spaces after commas. |
23
- | Primary category | Yes | Yes (with new version/status permitting) | Apple includes the primary category in search relevance. Do not repeat the category name in keywords. |
24
- | Custom Product Page assigned keywords | Yes, for approved visible pages | Yes (in App Store Connect) | Can route matching searches to a custom page instead of the default product page. |
25
- | In-app event name and short description | Visible in Search/event cards | Yes (per event) | Use query-relevant language for the event card, but avoid treating event copy as a hidden keyword field. |
26
- | Description | Conversion-focused | Yes (with new version/status permitting) | Apple's product page guidance says not to add unnecessary keywords to improve search results. |
27
- | Promotional text | No ranking effect | Yes (anytime) | Apple says promotional text does not affect search ranking. Use it for timely conversion messaging. |
28
- | Ratings and reviews | Behavior/search signal | Ongoing | Ratings and reviews influence search and conversion, but review text should be used as customer research rather than keyword stuffing. |
31
+ ## Research process
29
32
 
30
- ### Indexing behavior details
33
+ ### 1. Competitors
31
34
 
32
- - Avoid plurals of words already included in singular form; Apple treats them as duplicates.
33
- - Do not repeat words from the app name, subtitle, or category in the keyword field.
34
- - Use spaces only inside real keyword phrases; do not add spaces after commas.
35
- - Include separate related terms when both are genuine search terms, such as "photo" and "photography".
35
+ Pick the top 5 to 10 apps that rank for your category's main terms. For each,
36
+ record:
36
37
 
37
- ## Research Process
38
+ - the keywords in its name and subtitle,
39
+ - positioning words that recur across names, subtitles and screenshots,
40
+ - terms nobody covers.
38
41
 
39
- ### Step 1: Competitor audit
42
+ Type partial queries into App Store search and note the autocomplete
43
+ suggestions; they come from what people actually search.
40
44
 
41
- Identify the top 5-10 apps ranking for the primary category terms. For each competitor, note:
45
+ ### 2. Brainstorm by type
42
46
 
43
- - Title and subtitle keywords
44
- - Visible positioning patterns (terms that appear frequently across top-ranking titles, subtitles, and screenshots)
45
- - Gaps -- relevant terms that competitors are not targeting
47
+ | Type | Example for a hiking app |
48
+ |---|---|
49
+ | What it does | trail, map, route |
50
+ | What it is used for | hike, backpack, summit |
51
+ | Who uses it | beginner, family, solo |
52
+ | Nearby activities | camping, climbing, birding |
46
53
 
47
- Use App Store search autocomplete to discover what users actually type. Start typing a category term and note the suggested completions.
54
+ Terms that appear in many competitor names usually mean high volume and hard
55
+ competition. Terms that autocomplete offers but competitors ignore are the
56
+ openings.
48
57
 
49
- ### Step 2: Category analysis
58
+ ### 3. Apple Ads discovery
50
59
 
51
- List every term a user might associate with the app's functionality:
60
+ Run a discovery campaign with broad match for two to four weeks. Export the
61
+ search terms report, sort by tap-through rate to find intent and by conversion
62
+ rate to find terms that lead to downloads, and move the winners into the
63
+ keyword field.
52
64
 
53
- - Primary function terms (what the app does)
54
- - Use case terms (why a user would want it)
55
- - Audience terms (who the user is)
56
- - Adjacent terms (related activities or workflows)
65
+ ### 4. Every update
57
66
 
58
- Filter this list against competitor findings. Terms that appear in many competitor titles are high-volume but high-competition. Terms that appear in autocomplete but not in competitor metadata represent opportunities.
67
+ - Check impressions, tap-through rate and conversion in App Analytics.
68
+ - Swap out terms with low impressions or low tap-through.
69
+ - Try newly discovered terms.
70
+ - Note what competitors changed in their metadata.
59
71
 
60
- ### Step 3: Search Ads discovery
72
+ ## Scoring
61
73
 
62
- Run Apple Search Ads discovery campaigns with broad-match keywords matching the primary function. After 2-4 weeks of data:
74
+ Rate each candidate from 1 to 5 on three scales:
63
75
 
64
- - Export the search term report to see actual queries that triggered impressions.
65
- - Sort by tap-through rate (TTR) to identify high-intent terms.
66
- - Sort by conversion rate to identify terms where users who find the app actually download it.
67
- - Add high-performing discovered terms to the keyword field.
76
+ - **Relevance**: 5 means it describes the core function, 1 means it is
77
+ tangential.
78
+ - **Volume**: estimated from Apple Ads impressions.
79
+ - **Difficulty**: 5 means little competition, 1 means large apps dominate it.
68
80
 
69
- ### Step 4: Iteration cycle
81
+ Only terms with Relevance of 3 or more are considered. Priority is
82
+ `(Relevance x 2) + Volume + Difficulty`.
70
83
 
71
- With each app update:
84
+ Rule a term out when:
72
85
 
73
- 1. Review App Analytics for keyword impressions, tap-through rates, and conversion rates.
74
- 2. Identify underperforming keywords (low impressions or low TTR) and replace them.
75
- 3. Test new terms discovered through Search Ads or category changes.
76
- 4. Check if competitor metadata has shifted -- new competitors or renamed apps can change the keyword landscape.
86
+ - Relevance is below 3,
87
+ - it is another company's brand name, which breaks the guidelines,
88
+ - it already appears in the name or subtitle,
89
+ - it is the primary category's name.
77
90
 
78
- ## Keyword Scoring Framework
91
+ ## Filling the slots
79
92
 
80
- Score each candidate keyword on three dimensions:
93
+ Two worked examples. Lengths are counted exactly.
81
94
 
82
- | Dimension | Score range | How to assess |
83
- |-----------|-------------|---------------|
84
- | **Relevance** | 1-5 | Does the keyword describe what the app actually does? 5 = core function, 1 = tangentially related |
85
- | **Volume** | 1-5 | Is this term frequently searched? Use Search Ads impression data as a proxy. 5 = high impressions, 1 = minimal |
86
- | **Difficulty** | 1-5 | How many established apps target this term? 5 = low competition (good), 1 = dominated by major apps |
95
+ **Meditation app**
87
96
 
88
- **Decision rule:** Include a keyword only if Relevance >= 3. Among qualifying keywords, prioritize by (Relevance x 2) + Volume + Difficulty. This weights relevance heavily while still favoring discoverable, winnable terms.
89
-
90
- **Disqualify keywords that:**
91
- - Do not describe the app's actual functionality (Relevance < 3)
92
- - Are competitor brand names (violates App Store guidelines)
93
- - Duplicate a word already in the title or subtitle
94
- - Are the app's primary category name (Apple adds it automatically)
95
-
96
- ## Slot Allocation Strategy
97
-
98
- The 100-character keyword field requires careful allocation. Here are allocation patterns for different app types:
99
-
100
- ### Example: Fitness tracking app
101
-
102
- Title: `FitTrack -- Workout Log` (23 chars used)
103
- Subtitle: `Exercise & Activity Stats` (25 chars used)
104
-
105
- Keyword field strategy -- do not repeat: fittrack, workout, log, exercise, activity, stats
97
+ - Name: `Stillpoint - Meditation Timer`
98
+ - Subtitle: `Sleep Sounds & Calm Breathing`
99
+ - Keywords (15 terms, 98 bytes):
106
100
 
107
101
  ```
108
- gym,training,health,run,step,calorie,weight,strength,cardio,hiit,yoga,plank,squat,routine,progress
102
+ mindfulness,anxiety,stress,relax,focus,yoga,insomnia,nap,journal,mantra,zen,rain,noise,guided,mood
109
103
  ```
110
104
 
111
- (96 characters -- 4 remaining, all unique against title/subtitle)
112
-
113
- ### Example: Photo editing app
105
+ **Recipe app**
114
106
 
115
- Title: `PixelPop -- Photo Editor` (24 chars used)
116
- Subtitle: `Filters & Retouch Tools` (23 chars used)
117
-
118
- Keyword field -- do not repeat: pixelpop, photo, editor, filter, retouch, tool
107
+ - Name: `Pantry Chef - Recipe Planner`
108
+ - Subtitle: `Meal Prep & Grocery Lists`
109
+ - Keywords (14 terms, 100 bytes):
119
110
 
120
111
  ```
121
- selfie,portrait,collage,crop,blur,preset,enhance,adjust,brightness,contrast,saturation,beauty,skin
112
+ cooking,dinner,vegan,keto,healthy,shopping,budget,family,easy,quick,bake,cookbook,leftover,nutrition
122
113
  ```
123
114
 
124
- (99 characters -- all unique against title/subtitle)
125
-
126
- ### Allocation principles
115
+ Notes:
127
116
 
128
- - Each comma costs 1 character. Fewer, longer keywords are not inherently better than more, shorter ones -- Apple matches individual words, not phrases.
129
- - If two terms are searched as a phrase (e.g., "meal prep"), use the phrase when it matches real query behavior; use separate terms when each word is independently valuable.
130
- - Reserve 5-10 characters for experimental keywords that rotate each release based on performance data.
117
+ - Every comma costs one byte. Search matches single words, so long keywords
118
+ are not better in themselves.
119
+ - Keep a phrase such as "meal prep" together when people search it that way;
120
+ split words that are valuable on their own.
121
+ - Hold back 5 to 10 bytes for experimental terms you rotate each release.
131
122
 
132
- ## Seasonal Keyword Rotation
123
+ ## Seasonal rotation
133
124
 
134
- Some keywords have seasonal search volume spikes. Plan rotation around predictable events:
125
+ | Season | Terms | Ship in |
126
+ |---|---|---|
127
+ | New year | resolution, goal, habit, new year | December release |
128
+ | Back to school | student, school, study, planner | July or August |
129
+ | Holiday shopping | gift, holiday, deal, wish list | October or November |
130
+ | Summer fitness | outdoor, running, summer, beach | April or May |
131
+ | Tax season | tax, receipt, expense, deduction | January or February |
135
132
 
136
- | Season/Event | Example keywords to add | When to deploy |
137
- |-------------|------------------------|----------------|
138
- | New Year | resolution,goal,habit,new year | December release |
139
- | Back to school | student,school,study,planner | July/August release |
140
- | Holiday shopping | gift,holiday,deal,wish list | October/November release |
141
- | Summer fitness | outdoor,running,summer,beach | April/May release |
142
- | Tax season | tax,receipt,expense,deduction | January/February release |
133
+ Swap two or three terms per season. Keep the core 70 to 80 bytes stable and use
134
+ the remaining 20 to 30 for seasonal experiments.
143
135
 
144
- Rotate 2-3 keyword slots per seasonal cycle. Keep the core 70-80 characters stable and use the remaining 20-30 characters for seasonal experimentation.
136
+ ## Before and after
145
137
 
146
- ## Before and After Examples
138
+ **Wasted bytes.** For a surf forecast app:
147
139
 
148
- ### Problem: Wasted characters
149
-
150
- **Before:**
151
140
  ```
152
- fitness tracker, workout app, best exercise, health and wellness, gym
141
+ Before (66): best surf app, surf forecast, wave report, and tide times, surfing
142
+ After (48): wave,swell,tide,wind,beach,buoy,report,spot,reef
153
143
  ```
154
- Issues: spaces after commas (-5 chars wasted), "fitness" and "tracker" may duplicate title, "best" and "app" have no search value, "and" is a stop word.
155
144
 
156
- **After:**
157
- ```
158
- gym,health,run,step,calorie,weight,strength,cardio,hiit,yoga,plank,squat,routine,progress,streak
159
- ```
160
- Fixes: no spaces, no duplicates of title/subtitle, no filler words, all terms are genuine search queries.
145
+ The first version pays for spaces after commas, filler ("best", "app"), a
146
+ stop word ("and") and words that belong in the name. The second holds nine real
147
+ terms in fewer bytes and leaves 52 bytes for more.
161
148
 
162
- ### Problem: Duplicate keywords
149
+ **Duplicates.** With the name `SwellWatch - Surf Forecast`:
163
150
 
164
- **Before** (title is "RunMate -- Running Tracker"):
165
151
  ```
166
- running,tracker,run,jog,marathon,5k,pace,distance,route,gps,heart,rate,training,fitness,health
152
+ Before (65): surf,forecast,forecasts,swell,wave,tide,wind,buoy,beach,reef,spot
153
+ After (59): swell,wave,tide,wind,buoy,beach,reef,spot,kite,marine,chart
167
154
  ```
168
- Issues: "running", "tracker", and "run" duplicate the title -- 17 characters wasted.
169
155
 
170
- **After:**
171
- ```
172
- jog,marathon,5k,pace,distance,route,gps,heart,rate,training,fitness,health,stride,tempo,interval
173
- ```
174
- Fixes: removed title duplicates, added 3 new high-value terms with the recovered space.
156
+ Removing "surf", "forecast" and "forecasts" frees 24 bytes; "kite", "marine"
157
+ and "chart" use 18 of them, and 41 bytes remain for further terms.