buildanything 1.8.0 → 2.1.1

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 (494) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/.claude-plugin/plugin.json +17 -3
  3. package/CHANGELOG.md +57 -0
  4. package/README.md +57 -61
  5. package/agents/a11y-architect.md +168 -0
  6. package/agents/briefing-officer.md +172 -0
  7. package/agents/business-model.md +82 -29
  8. package/agents/code-architect.md +80 -0
  9. package/agents/code-reviewer.md +256 -0
  10. package/agents/code-simplifier.md +72 -0
  11. package/agents/design-brand-guardian.md +312 -53
  12. package/agents/design-critic.md +144 -0
  13. package/agents/design-inclusive-visuals-specialist.md +8 -19
  14. package/agents/design-ui-designer.md +352 -56
  15. package/agents/design-ux-architect.md +418 -55
  16. package/agents/design-ux-researcher.md +359 -49
  17. package/agents/engineering-ai-engineer.md +28 -36
  18. package/agents/engineering-backend-architect.md +187 -36
  19. package/agents/engineering-data-engineer.md +227 -43
  20. package/agents/engineering-devops-automator.md +229 -74
  21. package/agents/engineering-frontend-developer.md +223 -34
  22. package/agents/engineering-mobile-app-builder.md +8 -1
  23. package/agents/engineering-rapid-prototyper.md +45 -11
  24. package/agents/engineering-security-engineer.md +265 -61
  25. package/agents/engineering-senior-developer.md +141 -19
  26. package/agents/engineering-sre.md +86 -0
  27. package/agents/engineering-technical-writer.md +287 -41
  28. package/agents/feature-intel.md +111 -0
  29. package/agents/ios-app-review-guardian.md +21 -2
  30. package/agents/ios-foundation-models-specialist.md +22 -2
  31. package/agents/ios-product-reality-auditor.md +292 -0
  32. package/agents/ios-storekit-specialist.md +11 -2
  33. package/agents/ios-swift-architect.md +29 -1
  34. package/agents/ios-swift-search.md +9 -1
  35. package/agents/ios-swift-ui-design.md +40 -5
  36. package/agents/marketing-app-store-optimizer.md +248 -64
  37. package/agents/planner.md +221 -0
  38. package/agents/pr-test-analyzer.md +64 -0
  39. package/agents/product-feedback-synthesizer.md +70 -2
  40. package/agents/product-owner.md +163 -0
  41. package/agents/product-reality-auditor.md +216 -0
  42. package/agents/product-spec-writer.md +176 -0
  43. package/agents/refactor-cleaner.md +110 -0
  44. package/agents/security-reviewer.md +129 -0
  45. package/agents/silent-failure-hunter.md +55 -0
  46. package/agents/swift-build-resolver.md +121 -0
  47. package/agents/swift-reviewer.md +113 -0
  48. package/agents/tech-feasibility.md +26 -4
  49. package/agents/testing-api-tester.md +238 -59
  50. package/agents/testing-evidence-collector.md +50 -1
  51. package/agents/testing-performance-benchmarker.md +23 -1
  52. package/agents/testing-reality-checker.md +7 -1
  53. package/agents/visual-research.md +118 -0
  54. package/bin/adapters/cycle-counter-tool.ts +155 -0
  55. package/bin/adapters/scribe-tool.ts +73 -0
  56. package/bin/adapters/state-save-tool.ts +130 -0
  57. package/bin/adapters/write-lease-tool.ts +127 -0
  58. package/bin/buildanything-runtime.js +15 -0
  59. package/bin/buildanything-runtime.ts +241 -0
  60. package/bin/graph-index.js +24 -0
  61. package/bin/graph-index.ts +340 -0
  62. package/bin/mcp-servers/graph-mcp.js +26 -0
  63. package/bin/mcp-servers/graph-mcp.ts +481 -0
  64. package/bin/mcp-servers/orchestrator-mcp.js +26 -0
  65. package/bin/mcp-servers/orchestrator-mcp.ts +361 -0
  66. package/bin/setup.js +312 -76
  67. package/commands/add-feature.md +2 -0
  68. package/commands/build.md +994 -265
  69. package/commands/fix.md +1 -1
  70. package/commands/idea-sweep.md +2 -2
  71. package/commands/self-check.md +121 -0
  72. package/commands/setup.md +61 -9
  73. package/commands/ux-review.md +5 -5
  74. package/commands/verify.md +9 -9
  75. package/docs/migration/agents.yaml +729 -0
  76. package/docs/migration/phase-graph.yaml +1504 -0
  77. package/docs/migration/sdk-host-compat.md +18 -0
  78. package/hooks/compile-writer-owner-cache.ts +171 -0
  79. package/hooks/design-md-lint +4 -0
  80. package/hooks/design-md-lint.ts +295 -0
  81. package/hooks/hooks.json +36 -0
  82. package/hooks/pre-tool-use +19 -0
  83. package/hooks/pre-tool-use.ts +807 -0
  84. package/hooks/record-mode-transitions.ts +235 -0
  85. package/hooks/session-start +71 -1
  86. package/hooks/subagent-start +17 -0
  87. package/hooks/subagent-start.ts +472 -0
  88. package/hooks/subagent-stop +17 -0
  89. package/hooks/subagent-stop.ts +153 -0
  90. package/package.json +26 -4
  91. package/protocols/agent-prompt-authoring.md +165 -0
  92. package/protocols/architecture-schema.md +178 -0
  93. package/protocols/cleanup.md +4 -0
  94. package/protocols/decision-log.md +135 -0
  95. package/protocols/design-md-authoring.md +520 -0
  96. package/protocols/design-md-spec.md +362 -0
  97. package/protocols/fake-data-detector.md +1 -1
  98. package/protocols/ios-context.md +10 -11
  99. package/protocols/ios-fake-data-detector.md +65 -0
  100. package/protocols/ios-phase-branches.md +299 -39
  101. package/protocols/launch-readiness.md +262 -0
  102. package/protocols/metric-loop.md +62 -2
  103. package/protocols/page-spec-schema.md +234 -0
  104. package/protocols/product-spec-schema.md +354 -0
  105. package/protocols/smoke-test.md +9 -1
  106. package/protocols/sprint-tasks-schema.md +53 -0
  107. package/protocols/state-schema.json +423 -0
  108. package/protocols/state-schema.md +202 -0
  109. package/protocols/verify.md +91 -3
  110. package/protocols/web-phase-branches.md +395 -75
  111. package/skills/ios/_VENDORED.md +2 -0
  112. package/skills/ios/app-store-connect-metadata/SKILL.md +148 -0
  113. package/skills/ios/asc-privacy-manifest/SKILL.md +350 -0
  114. package/skills/ios/hig-components-content/SKILL.md +86 -0
  115. package/skills/ios/hig-components-content/references/activity-views.md +79 -0
  116. package/skills/ios/hig-components-content/references/charts.md +180 -0
  117. package/skills/ios/hig-components-content/references/collections.md +48 -0
  118. package/skills/ios/hig-components-content/references/color-wells.md +42 -0
  119. package/skills/ios/hig-components-content/references/image-views.md +82 -0
  120. package/skills/ios/hig-components-content/references/image-wells.md +34 -0
  121. package/skills/ios/hig-components-content/references/lockups.md +78 -0
  122. package/skills/ios/hig-components-content/references/web-views.md +36 -0
  123. package/skills/ios/hig-components-controls/SKILL.md +88 -0
  124. package/skills/ios/hig-components-controls/references/combo-boxes.md +40 -0
  125. package/skills/ios/hig-components-controls/references/controls.md +112 -0
  126. package/skills/ios/hig-components-controls/references/gauges.md +74 -0
  127. package/skills/ios/hig-components-controls/references/labels.md +92 -0
  128. package/skills/ios/hig-components-controls/references/pickers.md +128 -0
  129. package/skills/ios/hig-components-controls/references/rating-indicators.md +38 -0
  130. package/skills/ios/hig-components-controls/references/segmented-controls.md +94 -0
  131. package/skills/ios/hig-components-controls/references/sliders.md +92 -0
  132. package/skills/ios/hig-components-controls/references/steppers.md +40 -0
  133. package/skills/ios/hig-components-controls/references/text-fields.md +88 -0
  134. package/skills/ios/hig-components-controls/references/text-views.md +56 -0
  135. package/skills/ios/hig-components-controls/references/toggles.md +127 -0
  136. package/skills/ios/hig-components-controls/references/token-fields.md +48 -0
  137. package/skills/ios/hig-components-controls/references/virtual-keyboards.md +156 -0
  138. package/skills/ios/hig-components-dialogs/SKILL.md +76 -0
  139. package/skills/ios/hig-components-dialogs/references/action-sheets.md +74 -0
  140. package/skills/ios/hig-components-dialogs/references/alerts.md +158 -0
  141. package/skills/ios/hig-components-dialogs/references/digit-entry-views.md +32 -0
  142. package/skills/ios/hig-components-dialogs/references/popovers.md +81 -0
  143. package/skills/ios/hig-components-dialogs/references/sheets.md +157 -0
  144. package/skills/ios/hig-components-layout/SKILL.md +99 -0
  145. package/skills/ios/hig-components-layout/references/boxes.md +48 -0
  146. package/skills/ios/hig-components-layout/references/column-views.md +44 -0
  147. package/skills/ios/hig-components-layout/references/lists-and-tables.md +99 -0
  148. package/skills/ios/hig-components-layout/references/ornaments.md +56 -0
  149. package/skills/ios/hig-components-layout/references/outline-views.md +64 -0
  150. package/skills/ios/hig-components-layout/references/panels.md +75 -0
  151. package/skills/ios/hig-components-layout/references/scroll-views.md +123 -0
  152. package/skills/ios/hig-components-layout/references/sidebars.md +109 -0
  153. package/skills/ios/hig-components-layout/references/split-views.md +110 -0
  154. package/skills/ios/hig-components-layout/references/tab-bars.md +173 -0
  155. package/skills/ios/hig-components-layout/references/tab-views.md +68 -0
  156. package/skills/ios/hig-components-layout/references/windows.md +188 -0
  157. package/skills/ios/hig-components-menus/SKILL.md +81 -0
  158. package/skills/ios/hig-components-menus/references/action-button.md +61 -0
  159. package/skills/ios/hig-components-menus/references/buttons.md +261 -0
  160. package/skills/ios/hig-components-menus/references/context-menus.md +105 -0
  161. package/skills/ios/hig-components-menus/references/disclosure-controls.md +84 -0
  162. package/skills/ios/hig-components-menus/references/dock-menus.md +40 -0
  163. package/skills/ios/hig-components-menus/references/edit-menus.md +88 -0
  164. package/skills/ios/hig-components-menus/references/menus.md +171 -0
  165. package/skills/ios/hig-components-menus/references/pop-up-buttons.md +70 -0
  166. package/skills/ios/hig-components-menus/references/pull-down-buttons.md +77 -0
  167. package/skills/ios/hig-components-menus/references/the-menu-bar.md +303 -0
  168. package/skills/ios/hig-components-menus/references/toolbars.md +256 -0
  169. package/skills/ios/hig-components-search/SKILL.md +68 -0
  170. package/skills/ios/hig-components-search/references/page-controls.md +120 -0
  171. package/skills/ios/hig-components-search/references/path-controls.md +40 -0
  172. package/skills/ios/hig-components-search/references/search-fields.md +189 -0
  173. package/skills/ios/hig-components-status/SKILL.md +80 -0
  174. package/skills/ios/hig-components-status/references/activity-rings.md +105 -0
  175. package/skills/ios/hig-components-status/references/progress-indicators.md +116 -0
  176. package/skills/ios/hig-components-status/references/status-bars.md +38 -0
  177. package/skills/ios/hig-components-system/SKILL.md +88 -0
  178. package/skills/ios/hig-components-system/references/app-clips.md +387 -0
  179. package/skills/ios/hig-components-system/references/app-shortcuts.md +114 -0
  180. package/skills/ios/hig-components-system/references/complications.md +425 -0
  181. package/skills/ios/hig-components-system/references/home-screen-quick-actions.md +42 -0
  182. package/skills/ios/hig-components-system/references/live-activities.md +442 -0
  183. package/skills/ios/hig-components-system/references/notifications.md +153 -0
  184. package/skills/ios/hig-components-system/references/top-shelf.md +135 -0
  185. package/skills/ios/hig-components-system/references/watch-faces.md +40 -0
  186. package/skills/ios/hig-components-system/references/widgets.md +517 -0
  187. package/skills/ios/hig-foundations/SKILL.md +98 -0
  188. package/skills/ios/hig-foundations/references/accessibility.md +291 -0
  189. package/skills/ios/hig-foundations/references/app-icons.md +210 -0
  190. package/skills/ios/hig-foundations/references/branding.md +44 -0
  191. package/skills/ios/hig-foundations/references/color.md +274 -0
  192. package/skills/ios/hig-foundations/references/dark-mode.md +116 -0
  193. package/skills/ios/hig-foundations/references/icons.md +263 -0
  194. package/skills/ios/hig-foundations/references/images.md +176 -0
  195. package/skills/ios/hig-foundations/references/immersive-experiences.md +174 -0
  196. package/skills/ios/hig-foundations/references/inclusion.md +189 -0
  197. package/skills/ios/hig-foundations/references/layout.md +425 -0
  198. package/skills/ios/hig-foundations/references/materials.md +238 -0
  199. package/skills/ios/hig-foundations/references/motion.md +103 -0
  200. package/skills/ios/hig-foundations/references/privacy.md +231 -0
  201. package/skills/ios/hig-foundations/references/right-to-left.md +206 -0
  202. package/skills/ios/hig-foundations/references/sf-symbols.md +310 -0
  203. package/skills/ios/hig-foundations/references/spatial-layout.md +142 -0
  204. package/skills/ios/hig-foundations/references/typography.md +1146 -0
  205. package/skills/ios/hig-foundations/references/writing.md +91 -0
  206. package/skills/ios/hig-inputs/SKILL.md +94 -0
  207. package/skills/ios/hig-inputs/references/apple-pencil-and-scribble.md +148 -0
  208. package/skills/ios/hig-inputs/references/camera-control.md +107 -0
  209. package/skills/ios/hig-inputs/references/digital-crown.md +83 -0
  210. package/skills/ios/hig-inputs/references/eyes.md +120 -0
  211. package/skills/ios/hig-inputs/references/focus-and-selection.md +120 -0
  212. package/skills/ios/hig-inputs/references/game-controls.md +156 -0
  213. package/skills/ios/hig-inputs/references/gestures.md +208 -0
  214. package/skills/ios/hig-inputs/references/gyro-and-accelerometer.md +40 -0
  215. package/skills/ios/hig-inputs/references/keyboards.md +234 -0
  216. package/skills/ios/hig-inputs/references/nearby-interactions.md +70 -0
  217. package/skills/ios/hig-inputs/references/pointing-devices.md +237 -0
  218. package/skills/ios/hig-inputs/references/remotes.md +67 -0
  219. package/skills/ios/hig-inputs/references/spatial-interactions.md +70 -0
  220. package/skills/ios/hig-patterns/SKILL.md +104 -0
  221. package/skills/ios/hig-patterns/references/charting-data.md +81 -0
  222. package/skills/ios/hig-patterns/references/collaboration-and-sharing.md +86 -0
  223. package/skills/ios/hig-patterns/references/drag-and-drop.md +134 -0
  224. package/skills/ios/hig-patterns/references/entering-data.md +69 -0
  225. package/skills/ios/hig-patterns/references/feedback.md +67 -0
  226. package/skills/ios/hig-patterns/references/file-management.md +135 -0
  227. package/skills/ios/hig-patterns/references/going-full-screen.md +79 -0
  228. package/skills/ios/hig-patterns/references/launching.md +81 -0
  229. package/skills/ios/hig-patterns/references/live-viewing-apps.md +79 -0
  230. package/skills/ios/hig-patterns/references/loading.md +59 -0
  231. package/skills/ios/hig-patterns/references/managing-accounts.md +107 -0
  232. package/skills/ios/hig-patterns/references/managing-notifications.md +99 -0
  233. package/skills/ios/hig-patterns/references/modality.md +82 -0
  234. package/skills/ios/hig-patterns/references/multitasking.md +131 -0
  235. package/skills/ios/hig-patterns/references/offering-help.md +117 -0
  236. package/skills/ios/hig-patterns/references/onboarding.md +69 -0
  237. package/skills/ios/hig-patterns/references/playing-audio.md +124 -0
  238. package/skills/ios/hig-patterns/references/playing-haptics.md +280 -0
  239. package/skills/ios/hig-patterns/references/playing-video.md +180 -0
  240. package/skills/ios/hig-patterns/references/printing.md +50 -0
  241. package/skills/ios/hig-patterns/references/ratings-and-reviews.md +48 -0
  242. package/skills/ios/hig-patterns/references/searching.md +70 -0
  243. package/skills/ios/hig-patterns/references/settings.md +84 -0
  244. package/skills/ios/hig-patterns/references/undo-and-redo.md +58 -0
  245. package/skills/ios/hig-patterns/references/workouts.md +76 -0
  246. package/skills/ios/hig-platforms/SKILL.md +84 -0
  247. package/skills/ios/hig-platforms/references/designing-for-games.md +159 -0
  248. package/skills/ios/hig-platforms/references/designing-for-ios.md +66 -0
  249. package/skills/ios/hig-platforms/references/designing-for-ipados.md +64 -0
  250. package/skills/ios/hig-platforms/references/designing-for-macos.md +70 -0
  251. package/skills/ios/hig-platforms/references/designing-for-tvos.md +68 -0
  252. package/skills/ios/hig-platforms/references/designing-for-visionos.md +85 -0
  253. package/skills/ios/hig-platforms/references/designing-for-watchos.md +74 -0
  254. package/skills/ios/hig-project-context/SKILL.md +133 -0
  255. package/skills/ios/hig-technologies/SKILL.md +107 -0
  256. package/skills/ios/hig-technologies/references/airplay.md +125 -0
  257. package/skills/ios/hig-technologies/references/always-on.md +62 -0
  258. package/skills/ios/hig-technologies/references/apple-pay.md +441 -0
  259. package/skills/ios/hig-technologies/references/augmented-reality.md +247 -0
  260. package/skills/ios/hig-technologies/references/carekit.md +224 -0
  261. package/skills/ios/hig-technologies/references/carplay.md +119 -0
  262. package/skills/ios/hig-technologies/references/game-center.md +343 -0
  263. package/skills/ios/hig-technologies/references/generative-ai.md +110 -0
  264. package/skills/ios/hig-technologies/references/healthkit.md +120 -0
  265. package/skills/ios/hig-technologies/references/homekit.md +343 -0
  266. package/skills/ios/hig-technologies/references/icloud.md +52 -0
  267. package/skills/ios/hig-technologies/references/id-verifier.md +73 -0
  268. package/skills/ios/hig-technologies/references/imessage-apps-and-stickers.md +105 -0
  269. package/skills/ios/hig-technologies/references/in-app-purchase.md +263 -0
  270. package/skills/ios/hig-technologies/references/live-photos.md +54 -0
  271. package/skills/ios/hig-technologies/references/mac-catalyst.md +216 -0
  272. package/skills/ios/hig-technologies/references/machine-learning.md +394 -0
  273. package/skills/ios/hig-technologies/references/maps.md +221 -0
  274. package/skills/ios/hig-technologies/references/nfc.md +51 -0
  275. package/skills/ios/hig-technologies/references/photo-editing.md +40 -0
  276. package/skills/ios/hig-technologies/references/researchkit.md +134 -0
  277. package/skills/ios/hig-technologies/references/shareplay.md +142 -0
  278. package/skills/ios/hig-technologies/references/shazamkit.md +47 -0
  279. package/skills/ios/hig-technologies/references/sign-in-with-apple.md +288 -0
  280. package/skills/ios/hig-technologies/references/siri.md +523 -0
  281. package/skills/ios/hig-technologies/references/tap-to-pay-on-iphone.md +208 -0
  282. package/skills/ios/hig-technologies/references/voiceover.md +90 -0
  283. package/skills/ios/hig-technologies/references/wallet.md +420 -0
  284. package/skills/ios/ios-bootstrap/SKILL.md +17 -8
  285. package/skills/ios/swift-actor-persistence/SKILL.md +143 -0
  286. package/skills/ios/swift-concurrency-6-2/SKILL.md +216 -0
  287. package/skills/ios/swift-protocol-di-testing/SKILL.md +190 -0
  288. package/skills/ios/swiftui-design-tokens/SKILL.md +475 -0
  289. package/skills/ios/writing-for-interfaces/SKILL.md +75 -0
  290. package/skills/web/accessibility/SKILL.md +146 -0
  291. package/skills/web/aceternity-ui/SKILL.md +719 -0
  292. package/skills/web/aceternity-ui/metadata.json +10 -0
  293. package/skills/web/api-design/SKILL.md +523 -0
  294. package/skills/web/chart-accessibility/SKILL.md +332 -0
  295. package/skills/web/composition-patterns/AGENTS.md +946 -0
  296. package/skills/web/composition-patterns/README.md +60 -0
  297. package/skills/web/composition-patterns/SKILL.md +89 -0
  298. package/skills/web/composition-patterns/metadata.json +11 -0
  299. package/skills/web/composition-patterns/rules/_sections.md +29 -0
  300. package/skills/web/composition-patterns/rules/_template.md +24 -0
  301. package/skills/web/composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
  302. package/skills/web/composition-patterns/rules/architecture-compound-components.md +112 -0
  303. package/skills/web/composition-patterns/rules/patterns-children-over-render-props.md +87 -0
  304. package/skills/web/composition-patterns/rules/patterns-explicit-variants.md +100 -0
  305. package/skills/web/composition-patterns/rules/react19-no-forwardref.md +42 -0
  306. package/skills/web/composition-patterns/rules/state-context-interface.md +191 -0
  307. package/skills/web/composition-patterns/rules/state-decouple-implementation.md +113 -0
  308. package/skills/web/composition-patterns/rules/state-lift-state.md +125 -0
  309. package/skills/web/cost-aware-llm-pipeline/SKILL.md +183 -0
  310. package/skills/web/database-migrations/SKILL.md +429 -0
  311. package/skills/web/deployment-patterns/SKILL.md +427 -0
  312. package/skills/web/docker-patterns/SKILL.md +364 -0
  313. package/skills/web/e2e-testing/SKILL.md +326 -0
  314. package/skills/web/lighthouse-ci/SKILL.md +361 -0
  315. package/skills/web/mcp-server-patterns/SKILL.md +69 -0
  316. package/skills/web/next-best-practices/SKILL.md +153 -0
  317. package/skills/web/next-best-practices/async-patterns.md +87 -0
  318. package/skills/web/next-best-practices/bundling.md +180 -0
  319. package/skills/web/next-best-practices/data-patterns.md +297 -0
  320. package/skills/web/next-best-practices/debug-tricks.md +105 -0
  321. package/skills/web/next-best-practices/directives.md +73 -0
  322. package/skills/web/next-best-practices/error-handling.md +227 -0
  323. package/skills/web/next-best-practices/file-conventions.md +140 -0
  324. package/skills/web/next-best-practices/font.md +245 -0
  325. package/skills/web/next-best-practices/functions.md +108 -0
  326. package/skills/web/next-best-practices/hydration-error.md +91 -0
  327. package/skills/web/next-best-practices/image.md +173 -0
  328. package/skills/web/next-best-practices/metadata.md +301 -0
  329. package/skills/web/next-best-practices/parallel-routes.md +287 -0
  330. package/skills/web/next-best-practices/route-handlers.md +146 -0
  331. package/skills/web/next-best-practices/rsc-boundaries.md +159 -0
  332. package/skills/web/next-best-practices/runtime-selection.md +39 -0
  333. package/skills/web/next-best-practices/scripts.md +141 -0
  334. package/skills/web/next-best-practices/self-hosting.md +371 -0
  335. package/skills/web/next-best-practices/suspense-boundaries.md +67 -0
  336. package/skills/web/next-cache-components/SKILL.md +411 -0
  337. package/skills/web/postgres-best-practices/SKILL.md +14 -0
  338. package/skills/web/postgres-best-practices/references/schema-design.md +9 -0
  339. package/skills/web/react-best-practices/AGENTS.md +3810 -0
  340. package/skills/web/react-best-practices/README.md +123 -0
  341. package/skills/web/react-best-practices/SKILL.md +149 -0
  342. package/skills/web/react-best-practices/metadata.json +15 -0
  343. package/skills/web/react-best-practices/rules/_sections.md +46 -0
  344. package/skills/web/react-best-practices/rules/_template.md +28 -0
  345. package/skills/web/react-best-practices/rules/advanced-effect-event-deps.md +56 -0
  346. package/skills/web/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  347. package/skills/web/react-best-practices/rules/advanced-init-once.md +42 -0
  348. package/skills/web/react-best-practices/rules/advanced-use-latest.md +39 -0
  349. package/skills/web/react-best-practices/rules/async-api-routes.md +38 -0
  350. package/skills/web/react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  351. package/skills/web/react-best-practices/rules/async-defer-await.md +82 -0
  352. package/skills/web/react-best-practices/rules/async-dependencies.md +51 -0
  353. package/skills/web/react-best-practices/rules/async-parallel.md +28 -0
  354. package/skills/web/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  355. package/skills/web/react-best-practices/rules/bundle-analyzable-paths.md +63 -0
  356. package/skills/web/react-best-practices/rules/bundle-barrel-imports.md +60 -0
  357. package/skills/web/react-best-practices/rules/bundle-conditional.md +31 -0
  358. package/skills/web/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  359. package/skills/web/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  360. package/skills/web/react-best-practices/rules/bundle-preload.md +50 -0
  361. package/skills/web/react-best-practices/rules/client-event-listeners.md +74 -0
  362. package/skills/web/react-best-practices/rules/client-localstorage-schema.md +71 -0
  363. package/skills/web/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  364. package/skills/web/react-best-practices/rules/client-swr-dedup.md +56 -0
  365. package/skills/web/react-best-practices/rules/js-batch-dom-css.md +107 -0
  366. package/skills/web/react-best-practices/rules/js-cache-function-results.md +80 -0
  367. package/skills/web/react-best-practices/rules/js-cache-property-access.md +28 -0
  368. package/skills/web/react-best-practices/rules/js-cache-storage.md +70 -0
  369. package/skills/web/react-best-practices/rules/js-combine-iterations.md +32 -0
  370. package/skills/web/react-best-practices/rules/js-early-exit.md +50 -0
  371. package/skills/web/react-best-practices/rules/js-flatmap-filter.md +60 -0
  372. package/skills/web/react-best-practices/rules/js-hoist-regexp.md +45 -0
  373. package/skills/web/react-best-practices/rules/js-index-maps.md +37 -0
  374. package/skills/web/react-best-practices/rules/js-length-check-first.md +49 -0
  375. package/skills/web/react-best-practices/rules/js-min-max-loop.md +82 -0
  376. package/skills/web/react-best-practices/rules/js-request-idle-callback.md +105 -0
  377. package/skills/web/react-best-practices/rules/js-set-map-lookups.md +24 -0
  378. package/skills/web/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  379. package/skills/web/react-best-practices/rules/rendering-activity.md +26 -0
  380. package/skills/web/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  381. package/skills/web/react-best-practices/rules/rendering-conditional-render.md +40 -0
  382. package/skills/web/react-best-practices/rules/rendering-content-visibility.md +38 -0
  383. package/skills/web/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  384. package/skills/web/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  385. package/skills/web/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  386. package/skills/web/react-best-practices/rules/rendering-resource-hints.md +85 -0
  387. package/skills/web/react-best-practices/rules/rendering-script-defer-async.md +68 -0
  388. package/skills/web/react-best-practices/rules/rendering-svg-precision.md +28 -0
  389. package/skills/web/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  390. package/skills/web/react-best-practices/rules/rerender-defer-reads.md +39 -0
  391. package/skills/web/react-best-practices/rules/rerender-dependencies.md +45 -0
  392. package/skills/web/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  393. package/skills/web/react-best-practices/rules/rerender-derived-state.md +29 -0
  394. package/skills/web/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  395. package/skills/web/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  396. package/skills/web/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  397. package/skills/web/react-best-practices/rules/rerender-memo.md +44 -0
  398. package/skills/web/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  399. package/skills/web/react-best-practices/rules/rerender-no-inline-components.md +82 -0
  400. package/skills/web/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  401. package/skills/web/react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  402. package/skills/web/react-best-practices/rules/rerender-transitions.md +40 -0
  403. package/skills/web/react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  404. package/skills/web/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  405. package/skills/web/react-best-practices/rules/server-after-nonblocking.md +73 -0
  406. package/skills/web/react-best-practices/rules/server-auth-actions.md +96 -0
  407. package/skills/web/react-best-practices/rules/server-cache-lru.md +41 -0
  408. package/skills/web/react-best-practices/rules/server-cache-react.md +76 -0
  409. package/skills/web/react-best-practices/rules/server-dedup-props.md +65 -0
  410. package/skills/web/react-best-practices/rules/server-hoist-static-io.md +149 -0
  411. package/skills/web/react-best-practices/rules/server-no-shared-module-state.md +50 -0
  412. package/skills/web/react-best-practices/rules/server-parallel-fetching.md +83 -0
  413. package/skills/web/react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  414. package/skills/web/react-best-practices/rules/server-serialization.md +38 -0
  415. package/skills/web/seo/SKILL.md +154 -0
  416. package/skills/web/web-design-guidelines/SKILL.md +39 -0
  417. package/skills/web/zap-scan-config/SKILL.md +444 -0
  418. package/skills/web/zap-scan-config/assets/.gitkeep +9 -0
  419. package/skills/web/zap-scan-config/assets/github_action.yml +207 -0
  420. package/skills/web/zap-scan-config/assets/gitlab_ci.yml +226 -0
  421. package/skills/web/zap-scan-config/assets/zap_automation.yaml +196 -0
  422. package/skills/web/zap-scan-config/assets/zap_context.xml +192 -0
  423. package/skills/web/zap-scan-config/references/EXAMPLE.md +40 -0
  424. package/skills/web/zap-scan-config/references/api_testing_guide.md +475 -0
  425. package/skills/web/zap-scan-config/references/authentication_guide.md +431 -0
  426. package/skills/web/zap-scan-config/references/false_positive_handling.md +427 -0
  427. package/skills/web/zap-scan-config/references/owasp_mapping.md +255 -0
  428. package/src/graph/ids.ts +86 -0
  429. package/src/graph/index.ts +32 -0
  430. package/src/graph/parser/architecture.ts +603 -0
  431. package/src/graph/parser/component-manifest.ts +268 -0
  432. package/src/graph/parser/decisions-jsonl.ts +407 -0
  433. package/src/graph/parser/design-md-pass2.ts +253 -0
  434. package/src/graph/parser/design-md.ts +477 -0
  435. package/src/graph/parser/page-spec.ts +496 -0
  436. package/src/graph/parser/product-spec.ts +930 -0
  437. package/src/graph/parser/screenshot.ts +342 -0
  438. package/src/graph/parser/sprint-tasks.ts +317 -0
  439. package/src/graph/storage/index.ts +1154 -0
  440. package/src/graph/types.ts +432 -0
  441. package/src/graph/util/dhash.ts +84 -0
  442. package/src/lrr/aggregator.ts +175 -0
  443. package/src/orchestrator/hooks/context-header.ts +119 -0
  444. package/src/orchestrator/hooks/token-accounting-emitter.ts +77 -0
  445. package/src/orchestrator/hooks/token-accounting.ts +112 -0
  446. package/src/orchestrator/mcp/cycle-counter.ts +130 -0
  447. package/src/orchestrator/mcp/scribe.ts +294 -0
  448. package/src/orchestrator/mcp/state-save.ts +149 -0
  449. package/src/orchestrator/mcp/write-lease.ts +184 -0
  450. package/src/orchestrator/phase4-shared-context.ts +57 -0
  451. package/src/orchestrator/schemas/backward-edge.ts +46 -0
  452. package/agents/agentic-identity-trust.md +0 -121
  453. package/agents/data-consolidation-agent.md +0 -39
  454. package/agents/design-image-prompt-engineer.md +0 -105
  455. package/agents/design-visual-storyteller.md +0 -147
  456. package/agents/design-whimsy-injector.md +0 -89
  457. package/agents/engineering-autonomous-optimization-architect.md +0 -105
  458. package/agents/market-intel.md +0 -35
  459. package/agents/marketing-instagram-curator.md +0 -111
  460. package/agents/marketing-reddit-community-builder.md +0 -121
  461. package/agents/marketing-social-media-strategist.md +0 -74
  462. package/agents/marketing-tiktok-strategist.md +0 -123
  463. package/agents/marketing-twitter-engager.md +0 -124
  464. package/agents/marketing-wechat-official-account.md +0 -143
  465. package/agents/marketing-xiaohongshu-specialist.md +0 -136
  466. package/agents/marketing-zhihu-strategist.md +0 -160
  467. package/agents/product-behavioral-nudge-engine.md +0 -78
  468. package/agents/project-management-experiment-tracker.md +0 -102
  469. package/agents/report-distribution-agent.md +0 -43
  470. package/agents/risk-analysis.md +0 -45
  471. package/agents/sales-data-extraction-agent.md +0 -46
  472. package/agents/specialized-cultural-intelligence-strategist.md +0 -65
  473. package/agents/specialized-developer-advocate.md +0 -146
  474. package/agents/support-analytics-reporter.md +0 -133
  475. package/agents/support-executive-summary-generator.md +0 -64
  476. package/agents/support-finance-tracker.md +0 -145
  477. package/agents/support-legal-compliance-checker.md +0 -129
  478. package/agents/support-support-responder.md +0 -91
  479. package/agents/testing-accessibility-auditor.md +0 -110
  480. package/agents/testing-test-results-analyzer.md +0 -97
  481. package/agents/testing-tool-evaluator.md +0 -76
  482. package/agents/testing-workflow-optimizer.md +0 -99
  483. package/agents/user-research.md +0 -40
  484. package/protocols/brainstorm.md +0 -99
  485. package/protocols/design.md +0 -269
  486. package/protocols/planning.md +0 -87
  487. package/skills/ios/ios-hig/SKILL.md +0 -41
  488. package/skills/ios/ios-hig/references/accessibility.md +0 -81
  489. package/skills/ios/ios-hig/references/content.md +0 -142
  490. package/skills/ios/ios-hig/references/feedback.md +0 -123
  491. package/skills/ios/ios-hig/references/interaction.md +0 -199
  492. package/skills/ios/ios-hig/references/performance-platform.md +0 -129
  493. package/skills/ios/ios-hig/references/privacy-permissions.md +0 -181
  494. package/skills/ios/ios-hig/references/visual-design.md +0 -84
@@ -9,6 +9,7 @@ _Wholesale copies from `research/swift-skills/` per `research/swift-skills/_docs
9
9
  | swift-security-expert | ivan-magda/swift-security-skill | MIT | Ivan Magda | 2026-04-04 |
10
10
  | swiftdata-pro | twostraws/SwiftData-Agent-Skill | MIT | Paul Hudson | 2026-04-04 |
11
11
  | swift-testing-expert | AvdLee/Swift-Testing-Agent-Skill | MIT | Antoine van der Lee | 2026-04-04 |
12
+ | swift-testing | bocato/swift-testing-agent-skill | MIT | bocato | 2026-04-18 |
12
13
  | swift-accessibility | PasqualeVittoriosi/swift-accessibility-skill | MIT | Pasquale Vittoriosi | 2026-04-04 |
13
14
  | swiftui-ui-patterns | Dimillian/Skills | MIT | Dimillian | 2026-04-04 |
14
15
  | swiftui-view-refactor | Dimillian/Skills | MIT | Dimillian | 2026-04-04 |
@@ -58,3 +59,4 @@ Authored in-house for the buildanything plugin. Not vendored from upstream.
58
59
  | ios-entitlements-generator | expanding | Derive `.entitlements` file from required iOS capabilities (Keychain, Push, HealthKit, etc.) | stub | 2026-04-04 |
59
60
  | ios-info-plist-hardening | expanding | Populate Info.plist usage-description strings, ATS settings, privacy manifest alignment | stub | 2026-04-04 |
60
61
  | ios-maestro-flow-author | expanding | Author Maestro `.yaml` E2E flows for critical user journeys | stub | 2026-04-04 |
62
+ | writing-for-interfaces | ready | Microcopy + tone review for iOS interface text | stub | 2026-04-18 |
@@ -0,0 +1,148 @@
1
+ ---
2
+ name: asc-metadata-sync
3
+ description: Sync and validate App Store metadata and localizations with asc, including legacy metadata format migration. Use when updating metadata or translations.
4
+ ---
5
+
6
+ # asc metadata sync
7
+
8
+ Use this skill to keep local metadata in sync with App Store Connect.
9
+
10
+ ## Two Types of Localizations
11
+
12
+ ### 1. Version Localizations (per-release)
13
+ Fields: `description`, `keywords`, `whatsNew`, `supportUrl`, `marketingUrl`, `promotionalText`
14
+
15
+ ```bash
16
+ # List version localizations
17
+ asc localizations list --version "VERSION_ID"
18
+
19
+ # Download
20
+ asc localizations download --version "VERSION_ID" --path "./localizations"
21
+
22
+ # Upload from .strings files
23
+ asc localizations upload --version "VERSION_ID" --path "./localizations"
24
+ ```
25
+
26
+ ### 2. App Info Localizations (app-level)
27
+ Fields: `name`, `subtitle`, `privacyPolicyUrl`, `privacyChoicesUrl`, `privacyPolicyText`
28
+
29
+ ```bash
30
+ # First, find the app info ID
31
+ asc apps info list --app "APP_ID"
32
+
33
+ # List app info localizations
34
+ asc localizations list --app "APP_ID" --type app-info --app-info "APP_INFO_ID"
35
+
36
+ # Upload app info localizations
37
+ asc localizations upload --app "APP_ID" --type app-info --app-info "APP_INFO_ID" --path "./app-info-localizations"
38
+ ```
39
+
40
+ **Note:** If you get "multiple app infos found", you must specify `--app-info` with the correct ID.
41
+
42
+ ## Legacy Fastlane Metadata Workflow
43
+
44
+ ### Export current state
45
+ ```bash
46
+ asc migrate export --app "APP_ID" --version-id "VERSION_ID" --output-dir "./fastlane"
47
+ ```
48
+
49
+ ### Validate local files
50
+ ```bash
51
+ asc migrate validate --fastlane-dir "./fastlane"
52
+ ```
53
+ This checks character limits and required fields.
54
+
55
+ ### Import updates
56
+ ```bash
57
+ asc migrate import --app "APP_ID" --version-id "VERSION_ID" --fastlane-dir "./fastlane" --dry-run
58
+ asc migrate import --app "APP_ID" --version-id "VERSION_ID" --fastlane-dir "./fastlane"
59
+ ```
60
+
61
+ ## Quick Field Updates
62
+
63
+ ### Version-specific fields
64
+ ```bash
65
+ # What's New
66
+ asc apps info edit --app "APP_ID" --locale "en-US" --whats-new "Bug fixes and improvements"
67
+
68
+ # Description
69
+ asc apps info edit --app "APP_ID" --locale "en-US" --description "Your app description here"
70
+
71
+ # Keywords
72
+ asc apps info edit --app "APP_ID" --locale "en-US" --keywords "keyword1,keyword2,keyword3"
73
+
74
+ # Support URL
75
+ asc apps info edit --app "APP_ID" --locale "en-US" --support-url "https://support.example.com"
76
+ ```
77
+
78
+ ### Version metadata
79
+ ```bash
80
+ # Copyright
81
+ asc versions update --version-id "VERSION_ID" --copyright "2026 Your Company"
82
+
83
+ # Release type
84
+ asc versions update --version-id "VERSION_ID" --release-type AFTER_APPROVAL
85
+ ```
86
+
87
+ ### TestFlight notes
88
+ ```bash
89
+ asc build-localizations create --build "BUILD_ID" --locale "en-US" --whats-new "TestFlight notes here"
90
+ ```
91
+
92
+ ## .strings File Format
93
+
94
+ For bulk updates, use .strings files:
95
+
96
+ ```
97
+ // en-US.strings
98
+ "description" = "Your app description";
99
+ "keywords" = "keyword1,keyword2,keyword3";
100
+ "whatsNew" = "What's new in this version";
101
+ "supportUrl" = "https://support.example.com";
102
+ ```
103
+
104
+ For app-info type:
105
+ ```
106
+ // en-US.strings (app-info type)
107
+ "privacyPolicyUrl" = "https://example.com/privacy";
108
+ "name" = "Your App Name";
109
+ "subtitle" = "Your subtitle";
110
+ ```
111
+
112
+ ## Multi-Language Workflow
113
+
114
+ 1. Export all localizations:
115
+ ```bash
116
+ asc localizations download --version "VERSION_ID" --path "./localizations"
117
+ ```
118
+
119
+ 2. Translate the .strings files (or use translation service)
120
+
121
+ 3. Upload all at once:
122
+ ```bash
123
+ asc localizations upload --version "VERSION_ID" --path "./localizations"
124
+ ```
125
+
126
+ 4. Verify:
127
+ ```bash
128
+ asc localizations list --version "VERSION_ID" --output table
129
+ ```
130
+
131
+ ## Character Limits
132
+
133
+ | Field | Limit |
134
+ |-------|-------|
135
+ | Name | 30 |
136
+ | Subtitle | 30 |
137
+ | Keywords | 100 (comma-separated) |
138
+ | Description | 4000 |
139
+ | What's New | 4000 |
140
+ | Promotional Text | 170 |
141
+
142
+ Use `asc metadata validate --dir "./metadata"` for canonical metadata trees.
143
+ Use `asc migrate validate --fastlane-dir "./fastlane"` for legacy fastlane-format metadata.
144
+
145
+ ## Notes
146
+ - Version localizations and app info localizations are different; use the right command and `--type` flag.
147
+ - Use `asc localizations list` to confirm available locales and IDs.
148
+ - Privacy Policy URL is in app info localizations, not version localizations.
@@ -0,0 +1,350 @@
1
+ ---
2
+ name: asc-privacy-manifest
3
+ description: Generate and validate PrivacyInfo.xcprivacy files for iOS apps — required reason APIs, collected data types, tracking declarations, and SDK aggregation.
4
+ license: MIT
5
+ metadata:
6
+ author: oneshot
7
+ version: "1.0.0"
8
+ ---
9
+
10
+ # iOS Privacy Manifest (PrivacyInfo.xcprivacy)
11
+
12
+ Since iOS 17 / Xcode 15, every app and third-party SDK must ship a `PrivacyInfo.xcprivacy` file declaring what data it collects, which privacy-sensitive APIs it calls, and whether it tracks users. App Store Connect rejects submissions that omit required entries (ITMS-91053, ITMS-91055).
13
+
14
+ ## File structure
15
+
16
+ `PrivacyInfo.xcprivacy` is a property list (XML plist) with four top-level keys:
17
+
18
+ | Key | Type | Purpose |
19
+ |-----|------|---------|
20
+ | `NSPrivacyTracking` | Boolean | `true` if the app tracks users per ATT definition |
21
+ | `NSPrivacyTrackingDomains` | Array of String | Domains contacted for tracking (only when tracking is true) |
22
+ | `NSPrivacyCollectedDataTypes` | Array of Dict | Each data category collected, with purpose and linkage |
23
+ | `NSPrivacyAccessedAPITypes` | Array of Dict | Each required-reason API category used, with reason codes |
24
+
25
+ ## 1. Required reason APIs (NSPrivacyAccessedAPITypes)
26
+
27
+ Five API categories require declared reasons. Each entry is a dict with `NSPrivacyAccessedAPIType` (category string) and `NSPrivacyAccessedAPITypeReasons` (array of reason codes).
28
+
29
+ ### File timestamp APIs — `NSPrivacyAccessedAPICategoryFileTimestamp`
30
+
31
+ Triggered by: `FileManager` attribute reads (`modificationDate`, `creationDate`), `stat()`, `fstat()`, `getattrlist()`, `NSFileModificationDate`, `NSURLContentModificationDateKey`, `NSURLCreationDateKey`.
32
+
33
+ | Code | Meaning |
34
+ |------|---------|
35
+ | `DDA9.1` | Display file timestamps to the user on-device only (no off-device transmission) |
36
+ | `C617.1` | Access file metadata inside app container, app group container, or CloudKit container |
37
+ | `3B52.1` | Access metadata for files the user explicitly selected (document picker, drag-and-drop) |
38
+ | `0A2A.1` | Third-party SDK wrapper — only when the host app invokes the wrapper API |
39
+
40
+ ### System boot time APIs — `NSPrivacyAccessedAPICategorySystemBootTime`
41
+
42
+ Triggered by: `ProcessInfo.processInfo.systemUptime`, `mach_absolute_time()`, `clock_gettime(CLOCK_MONOTONIC)`.
43
+
44
+ | Code | Meaning |
45
+ |------|---------|
46
+ | `35F9.1` | Measure elapsed time between events within the app |
47
+ | `8FFB.1` | Calculate absolute timestamps for events (e.g. UIKit or AVFAudio timestamps) |
48
+ | `3D61.1` | Include boot time in an optional, user-initiated bug report |
49
+
50
+ ### Disk space APIs — `NSPrivacyAccessedAPICategoryDiskSpace`
51
+
52
+ Triggered by: `FileManager` `attributesOfFileSystem(forPath:)`, `volumeAvailableCapacityKey`, `volumeTotalCapacityKey`, `statfs()`, `statvfs()`.
53
+
54
+ | Code | Meaning |
55
+ |------|---------|
56
+ | `85F4.1` | Display disk space information to the user on-device |
57
+ | `E174.1` | Check available space before writing files or delete files on low disk |
58
+ | `7D9E.1` | Include disk space in an optional, user-initiated bug report |
59
+ | `B728.1` | Health research apps detecting low disk for data integrity |
60
+
61
+ ### Active keyboards APIs — `NSPrivacyAccessedAPICategoryActiveKeyboards`
62
+
63
+ Triggered by: `UITextInputMode.activeInputModes`.
64
+
65
+ | Code | Meaning |
66
+ |------|---------|
67
+ | `3EC4.1` | Custom keyboard app checking which keyboards are active |
68
+ | `54BD.1` | Customize UI or input behavior based on active keyboards |
69
+
70
+ ### User defaults APIs — `NSPrivacyAccessedAPICategoryUserDefaults`
71
+
72
+ Triggered by: `UserDefaults` standard or suite access. Almost every app hits this.
73
+
74
+ | Code | Meaning |
75
+ |------|---------|
76
+ | `CA92.1` | Read/write data accessible only to the app itself |
77
+ | `1C8F.1` | Read/write data shared via App Group (app + widgets/extensions) |
78
+ | `C56D.1` | Third-party SDK wrapper providing access to user defaults |
79
+ | `AC6B.1` | Read managed app configuration or write feedback for MDM |
80
+
81
+ ## 2. Collected data types (NSPrivacyCollectedDataTypes)
82
+
83
+ Each dict in the array declares one data category with four keys:
84
+
85
+ | Key | Type | Description |
86
+ |-----|------|-------------|
87
+ | `NSPrivacyCollectedDataType` | String | Identifier from Apple's predefined list |
88
+ | `NSPrivacyCollectedDataTypeLinked` | Boolean | `true` if this data is linked to the user's identity |
89
+ | `NSPrivacyCollectedDataTypeTracking` | Boolean | `true` if this data is used for tracking |
90
+ | `NSPrivacyCollectedDataTypePurposes` | Array of String | Why this data is collected |
91
+
92
+ ### Common data type identifiers
93
+
94
+ | Identifier | Category |
95
+ |------------|----------|
96
+ | `NSPrivacyCollectedDataTypeName` | Contact info — name |
97
+ | `NSPrivacyCollectedDataTypeEmailAddress` | Contact info — email |
98
+ | `NSPrivacyCollectedDataTypePhoneNumber` | Contact info — phone |
99
+ | `NSPrivacyCollectedDataTypeUserID` | Identifiers — user ID |
100
+ | `NSPrivacyCollectedDataTypeDeviceID` | Identifiers — device ID (IDFA, IDFV) |
101
+ | `NSPrivacyCollectedDataTypePreciseLocation` | Location — precise |
102
+ | `NSPrivacyCollectedDataTypeCoarseLocation` | Location — coarse |
103
+ | `NSPrivacyCollectedDataTypeProductInteraction` | Usage data — product interaction |
104
+ | `NSPrivacyCollectedDataTypeOtherUsageData` | Usage data — other |
105
+ | `NSPrivacyCollectedDataTypeCrashData` | Diagnostics — crash data |
106
+ | `NSPrivacyCollectedDataTypePerformanceData` | Diagnostics — performance |
107
+ | `NSPrivacyCollectedDataTypeOtherDiagnosticData` | Diagnostics — other |
108
+ | `NSPrivacyCollectedDataTypePaymentInfo` | Financial — payment info |
109
+ | `NSPrivacyCollectedDataTypePhotosorVideos` | User content — photos/videos |
110
+ | `NSPrivacyCollectedDataTypeContacts` | User content — contacts |
111
+ | `NSPrivacyCollectedDataTypeHealth` | Health & fitness |
112
+ | `NSPrivacyCollectedDataTypeFitness` | Health & fitness |
113
+ | `NSPrivacyCollectedDataTypeOtherDataTypes` | Catch-all |
114
+
115
+ ### Purpose identifiers
116
+
117
+ | Identifier | Meaning |
118
+ |------------|---------|
119
+ | `NSPrivacyCollectedDataTypePurposeAppFunctionality` | Core app features |
120
+ | `NSPrivacyCollectedDataTypePurposeAnalytics` | Analytics |
121
+ | `NSPrivacyCollectedDataTypePurposeProductPersonalization` | Personalization |
122
+ | `NSPrivacyCollectedDataTypePurposeDeveloperAdvertising` | Developer's own ads/marketing |
123
+ | `NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising` | Third-party ad networks |
124
+ | `NSPrivacyCollectedDataTypePurposeOther` | Other purposes |
125
+
126
+ ## 3. Tracking and ATT (NSPrivacyTracking)
127
+
128
+ Set `NSPrivacyTracking` to `true` only if the app links collected data with third-party data for advertising or ad measurement. This aligns with Apple's App Tracking Transparency (ATT) definition.
129
+
130
+ When `NSPrivacyTracking` is `true`:
131
+ - The app **must** call `ATTrackingManager.requestTrackingAuthorization()` before tracking.
132
+ - `NSPrivacyTrackingDomains` must list every domain contacted for tracking purposes.
133
+ - iOS blocks network requests to listed domains when the user denies tracking permission.
134
+ - `Info.plist` must include `NSUserTrackingUsageDescription` with a user-facing explanation.
135
+
136
+ When `NSPrivacyTracking` is `false`, leave `NSPrivacyTrackingDomains` as an empty array.
137
+
138
+ ## 4. Third-party SDK manifests and aggregation
139
+
140
+ Each SDK must bundle its own `PrivacyInfo.xcprivacy` inside its framework or Swift package bundle. During archival, Xcode aggregates all manifests into a unified **Privacy Report** (accessible via Product > Generate Privacy Report in Xcode).
141
+
142
+ Rules:
143
+ - The app's manifest covers the app target only — not its dependencies.
144
+ - Each framework/xcframework/Swift package provides its own manifest.
145
+ - Xcode merges all manifests at archive time; duplicates are union-merged.
146
+ - If an SDK lacks a manifest, App Store Connect flags the submission (ITMS-91061).
147
+ - Update third-party SDKs regularly — most major SDKs (Alamofire, Firebase, Sentry, etc.) ship manifests since mid-2024.
148
+
149
+ For Swift packages: place `PrivacyInfo.xcprivacy` in the package's resource bundle and declare it in `Package.swift` via `.process("PrivacyInfo.xcprivacy")` in the target's `resources` array.
150
+
151
+ ## 5. Xcode integration
152
+
153
+ ### Where to place the file
154
+ - **App target**: project root, alongside `Info.plist`. Xcode copies it into the app bundle at build time.
155
+ - **Framework target**: inside the framework's bundle resources.
156
+ - **Swift Package**: in `Sources/<Target>/` and declared in `Package.swift` resources.
157
+
158
+ ### How to create it in Xcode
159
+ 1. File > New > File (or Cmd-N).
160
+ 2. Search for "App Privacy" and select the template.
161
+ 3. Choose the correct target in the file inspector.
162
+ 4. Xcode creates `PrivacyInfo.xcprivacy` with a visual editor for the four top-level keys.
163
+
164
+ The file **must** be named exactly `PrivacyInfo.xcprivacy` — Apple's tooling scans for this specific filename.
165
+
166
+ ### Generate a privacy report
167
+ 1. Archive the app (Product > Archive).
168
+ 2. Right-click the archive in the Organizer > Generate Privacy Report.
169
+ 3. Review the aggregated report for missing entries before submission.
170
+
171
+ ## 6. Common App Store rejection reasons
172
+
173
+ | Error code | Cause | Fix |
174
+ |------------|-------|-----|
175
+ | ITMS-91053 | App uses a required-reason API without declaring it in the manifest | Add the missing `NSPrivacyAccessedAPIType` entry with valid reason codes |
176
+ | ITMS-91055 | Invalid reason code for a declared API category | Replace with a valid reason code from Apple's predefined list |
177
+ | ITMS-91056 | Malformed or invalid privacy manifest file | Validate plist XML structure; re-create via Xcode template |
178
+ | ITMS-91061 | A third-party SDK is missing its privacy manifest | Update the SDK or add a manifest to its bundle |
179
+
180
+ **TestFlight catches these errors** — always run a TestFlight build before production submission.
181
+
182
+ Other common pitfalls:
183
+ - Declaring `NSPrivacyTracking = true` but omitting `NSUserTrackingUsageDescription` in `Info.plist`.
184
+ - Using reason code `CA92.1` (app-only) when the app actually shares `UserDefaults` via App Group — use `1C8F.1` instead.
185
+ - Forgetting to declare `NSPrivacyAccessedAPICategoryFileTimestamp` when using `SDWebImage`, `Kingfisher`, or other caching libraries that call `stat()`.
186
+ - Declaring collected data types without matching entries in the App Store Connect privacy questionnaire.
187
+
188
+ ## 7. Complete example
189
+
190
+ A typical app using `UserDefaults`, file timestamps (caching), and analytics with crash reporting:
191
+
192
+ ```xml
193
+ <?xml version="1.0" encoding="UTF-8"?>
194
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
195
+ "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
196
+ <plist version="1.0">
197
+ <dict>
198
+
199
+ <!-- Tracking -->
200
+ <key>NSPrivacyTracking</key>
201
+ <false/>
202
+ <key>NSPrivacyTrackingDomains</key>
203
+ <array/>
204
+
205
+ <!-- Collected data types -->
206
+ <key>NSPrivacyCollectedDataTypes</key>
207
+ <array>
208
+ <!-- Crash data for stability monitoring -->
209
+ <dict>
210
+ <key>NSPrivacyCollectedDataType</key>
211
+ <string>NSPrivacyCollectedDataTypeCrashData</string>
212
+ <key>NSPrivacyCollectedDataTypeLinked</key>
213
+ <false/>
214
+ <key>NSPrivacyCollectedDataTypeTracking</key>
215
+ <false/>
216
+ <key>NSPrivacyCollectedDataTypePurposes</key>
217
+ <array>
218
+ <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
219
+ </array>
220
+ </dict>
221
+ <!-- Performance metrics -->
222
+ <dict>
223
+ <key>NSPrivacyCollectedDataType</key>
224
+ <string>NSPrivacyCollectedDataTypePerformanceData</string>
225
+ <key>NSPrivacyCollectedDataTypeLinked</key>
226
+ <false/>
227
+ <key>NSPrivacyCollectedDataTypeTracking</key>
228
+ <false/>
229
+ <key>NSPrivacyCollectedDataTypePurposes</key>
230
+ <array>
231
+ <string>NSPrivacyCollectedDataTypePurposeAnalytics</string>
232
+ </array>
233
+ </dict>
234
+ <!-- User ID for account features -->
235
+ <dict>
236
+ <key>NSPrivacyCollectedDataType</key>
237
+ <string>NSPrivacyCollectedDataTypeUserID</string>
238
+ <key>NSPrivacyCollectedDataTypeLinked</key>
239
+ <true/>
240
+ <key>NSPrivacyCollectedDataTypeTracking</key>
241
+ <false/>
242
+ <key>NSPrivacyCollectedDataTypePurposes</key>
243
+ <array>
244
+ <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
245
+ </array>
246
+ </dict>
247
+ </array>
248
+
249
+ <!-- Required reason APIs -->
250
+ <key>NSPrivacyAccessedAPITypes</key>
251
+ <array>
252
+ <!-- UserDefaults: app-only storage -->
253
+ <dict>
254
+ <key>NSPrivacyAccessedAPIType</key>
255
+ <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
256
+ <key>NSPrivacyAccessedAPITypeReasons</key>
257
+ <array>
258
+ <string>CA92.1</string>
259
+ </array>
260
+ </dict>
261
+ <!-- File timestamps: cache management -->
262
+ <dict>
263
+ <key>NSPrivacyAccessedAPIType</key>
264
+ <string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
265
+ <key>NSPrivacyAccessedAPITypeReasons</key>
266
+ <array>
267
+ <string>C617.1</string>
268
+ </array>
269
+ </dict>
270
+ <!-- System boot time: elapsed time measurement -->
271
+ <dict>
272
+ <key>NSPrivacyAccessedAPIType</key>
273
+ <string>NSPrivacyAccessedAPICategorySystemBootTime</string>
274
+ <key>NSPrivacyAccessedAPITypeReasons</key>
275
+ <array>
276
+ <string>35F9.1</string>
277
+ </array>
278
+ </dict>
279
+ </array>
280
+
281
+ </dict>
282
+ </plist>
283
+ ```
284
+
285
+ ### Variant: app with App Group sharing and tracking
286
+
287
+ If the app shares data with a widget via App Group and uses an ad SDK:
288
+
289
+ ```xml
290
+ <?xml version="1.0" encoding="UTF-8"?>
291
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
292
+ "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
293
+ <plist version="1.0">
294
+ <dict>
295
+
296
+ <key>NSPrivacyTracking</key>
297
+ <true/>
298
+ <key>NSPrivacyTrackingDomains</key>
299
+ <array>
300
+ <string>analytics.example.com</string>
301
+ <string>ads.example.com</string>
302
+ </array>
303
+
304
+ <key>NSPrivacyCollectedDataTypes</key>
305
+ <array>
306
+ <dict>
307
+ <key>NSPrivacyCollectedDataType</key>
308
+ <string>NSPrivacyCollectedDataTypeDeviceID</string>
309
+ <key>NSPrivacyCollectedDataTypeLinked</key>
310
+ <false/>
311
+ <key>NSPrivacyCollectedDataTypeTracking</key>
312
+ <true/>
313
+ <key>NSPrivacyCollectedDataTypePurposes</key>
314
+ <array>
315
+ <string>NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising</string>
316
+ </array>
317
+ </dict>
318
+ </array>
319
+
320
+ <key>NSPrivacyAccessedAPITypes</key>
321
+ <array>
322
+ <dict>
323
+ <key>NSPrivacyAccessedAPIType</key>
324
+ <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
325
+ <key>NSPrivacyAccessedAPITypeReasons</key>
326
+ <array>
327
+ <string>CA92.1</string>
328
+ <string>1C8F.1</string>
329
+ </array>
330
+ </dict>
331
+ </array>
332
+
333
+ </dict>
334
+ </plist>
335
+ ```
336
+
337
+ Note: when `NSPrivacyTracking` is `true`, the app must also declare `NSUserTrackingUsageDescription` in `Info.plist` and call `ATTrackingManager.requestTrackingAuthorization()` before any tracking occurs.
338
+
339
+ ## Decision checklist
340
+
341
+ Before generating the manifest, answer these:
342
+
343
+ 1. Does the app use `UserDefaults`? (almost always yes) --> `CA92.1` or `1C8F.1`
344
+ 2. Does the app or any dependency read file timestamps? (caching libraries do) --> `C617.1`
345
+ 3. Does the app measure elapsed time or call `mach_absolute_time()`? --> `35F9.1`
346
+ 4. Does the app check disk space before writes? --> `E174.1`
347
+ 5. Does the app inspect active keyboards? (rare) --> `54BD.1`
348
+ 6. Does the app collect crash/performance data? --> add collected data type entries
349
+ 7. Does the app link data to user identity? --> set `Linked` to `true` on those types
350
+ 8. Does the app track users for advertising? --> `NSPrivacyTracking = true` + ATT + tracking domains
@@ -0,0 +1,86 @@
1
+ ---
2
+ name: hig-components-content
3
+ version: 1.0.0
4
+ description: >-
5
+ Apple Human Interface Guidelines for content display components. Use this skill when the user asks about
6
+ "charts component", "collection view", "image view", "web view", "color well", "image well",
7
+ "activity view", "lockup", "data visualization", "content display", displaying images, rendering
8
+ web content, color pickers, or presenting collections of items in Apple apps.
9
+ Also use when the user says "how should I display charts", "what's the best way to show images",
10
+ "should I use a web view", "how do I build a grid of items", "what component shows media",
11
+ or "how do I present a share sheet".
12
+ Cross-references: hig-foundations for color/typography/accessibility, hig-patterns for data
13
+ visualization patterns, hig-components-layout for structural containers, hig-platforms for
14
+ platform-specific component behavior.
15
+ ---
16
+
17
+ # Apple HIG: Content Components
18
+
19
+ Check for `.claude/apple-design-context.md` before asking questions. Use existing context and only ask for information not already covered.
20
+
21
+ ## Key Principles
22
+
23
+ 1. **Adapt to different sizes and contexts.** Content components must work across screen sizes, orientations, and multitasking configurations. Use Auto Layout and size classes.
24
+
25
+ 2. **Make content accessible.** Charts need audio graph support. Images need alt text. Collections need proper VoiceOver navigation order. All content components need labels and descriptions.
26
+
27
+ 3. **Maintain visual hierarchy.** Use spacing, sizing, and grouping to establish clear information hierarchy. Primary content should be visually prominent.
28
+
29
+ 4. **Use system components first.** Evaluate UICollectionView, SwiftUI Charts, WKWebView before building custom. System components come with built-in accessibility and platform adaptation.
30
+
31
+ 5. **Respect platform conventions.** A collection on tvOS uses large lockups with parallax. The same collection on iOS uses compact cells with touch targets. On visionOS, content gains depth and hover effects.
32
+
33
+ 6. **Handle empty states.** Show a meaningful empty state with guidance on how to populate it, not a blank screen.
34
+
35
+ 7. **Optimize for performance.** Use lazy loading, cell reuse, pagination, and prefetching for large datasets.
36
+
37
+ ## Reference Index
38
+
39
+ | Reference | Topic | Key content |
40
+ |---|---|---|
41
+ | [charts.md](references/charts.md) | Charts | Swift Charts, bar/line/area/point marks, chart accessibility, audio graphs |
42
+ | [collections.md](references/collections.md) | Collections | Grid/list layouts, compositional layout, selection, reordering, diffable data sources |
43
+ | [image-views.md](references/image-views.md) | Image Views | Aspect ratio handling, content modes, SF Symbol images, accessibility |
44
+ | [image-wells.md](references/image-wells.md) | Image Wells | Drag-and-drop image selection, macOS-specific, placeholder content |
45
+ | [color-wells.md](references/color-wells.md) | Color Wells | Color selection UI, system color picker, custom color spaces |
46
+ | [web-views.md](references/web-views.md) | Web Views | WKWebView, SFSafariViewController, navigation controls, content restrictions |
47
+ | [activity-views.md](references/activity-views.md) | Activity Views | Share sheets, activity items, custom activities, action extensions |
48
+ | [lockups.md](references/lockups.md) | Lockups | Image+text elements, tvOS card layouts, focus effects, shelf layouts |
49
+
50
+ ## Component Selection Guide
51
+
52
+ | Content Need | Recommended Component | Platform Notes |
53
+ |---|---|---|
54
+ | Visualizing quantitative data | Charts (Swift Charts) | iOS 16+, macOS 13+, watchOS 9+ |
55
+ | Browsing a grid or list of items | Collection View | Compositional layout for complex arrangements |
56
+ | Displaying a single image | Image View | Support aspect ratio fitting; provide accessibility description |
57
+ | Selecting an image via drag or browse | Image Well | macOS primarily; use image pickers on iOS |
58
+ | Selecting a color | Color Well | Triggers system color picker; macOS, iOS 14+ |
59
+ | Showing web content inline | Web View (WKWebView) | Use SFSafariViewController for external browsing |
60
+ | Sharing content to other apps | Activity View | System share sheet with configurable activity types |
61
+ | Content card (image + text) | Lockup | Primarily tvOS; adaptable to other platforms |
62
+
63
+ ## Output Format
64
+
65
+ 1. **Component recommendation with rationale**, referencing the relevant HIG reference file.
66
+ 2. **Configuration guidance** -- key properties and setup.
67
+ 3. **Accessibility requirements** for the recommended component.
68
+ 4. **Platform-specific notes** for targeted platforms.
69
+
70
+ ## Questions to Ask
71
+
72
+ 1. What type of content? (Quantitative data, images, web content, browsable collection, share action?)
73
+ 2. Which platforms?
74
+ 3. Static or dynamic content?
75
+ 4. How much content? (Few items vs hundreds/thousands affects component choice and optimization.)
76
+
77
+ ## Related Skills
78
+
79
+ - **hig-foundations** -- Color, typography, accessibility, and image guidelines
80
+ - **hig-patterns** -- Data visualization, sharing, and loading patterns
81
+ - **hig-components-layout** -- Structural containers (scroll views, lists, split views) hosting content
82
+ - **hig-platforms** -- Platform-specific component behavior (lockups on tvOS, web views on macOS)
83
+
84
+ ---
85
+
86
+ *Built by [Raintree Technology](https://raintree.technology) · [More developer tools](https://raintree.technology)*