@rubix0270/arboris 1.0.1 → 1.0.3

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 (451) hide show
  1. package/package.json +8 -19
  2. package/run.mjs +10 -0
  3. package/dist/cli.mjs +0 -382
  4. package/manifest.json +0 -323
  5. package/prisma/skills/accessibility/SKILL.md +0 -147
  6. package/prisma/skills/agent-architecture-audit/SKILL.md +0 -257
  7. package/prisma/skills/agent-eval/SKILL.md +0 -146
  8. package/prisma/skills/agent-harness-construction/SKILL.md +0 -74
  9. package/prisma/skills/agent-introspection-debugging/SKILL.md +0 -154
  10. package/prisma/skills/agent-payment-x402/SKILL.md +0 -225
  11. package/prisma/skills/agent-self-evaluation/SKILL.md +0 -182
  12. package/prisma/skills/agent-self-evaluation/examples/high-score-example.md +0 -87
  13. package/prisma/skills/agent-self-evaluation/examples/low-score-example.md +0 -86
  14. package/prisma/skills/agent-self-evaluation/references/evaluation-criteria.md +0 -71
  15. package/prisma/skills/agent-self-evaluation/references/hook-integration.md +0 -64
  16. package/prisma/skills/agent-self-evaluation/scripts/evaluate.py +0 -408
  17. package/prisma/skills/agent-self-evaluation/templates/evaluation-report.md +0 -86
  18. package/prisma/skills/agent-sort/SKILL.md +0 -216
  19. package/prisma/skills/agentic-engineering/SKILL.md +0 -64
  20. package/prisma/skills/agentic-os/SKILL.md +0 -388
  21. package/prisma/skills/ai-first-engineering/SKILL.md +0 -52
  22. package/prisma/skills/ai-regression-testing/SKILL.md +0 -386
  23. package/prisma/skills/android-clean-architecture/SKILL.md +0 -340
  24. package/prisma/skills/angular-developer/SKILL.md +0 -155
  25. package/prisma/skills/angular-developer/references/angular-animations.md +0 -160
  26. package/prisma/skills/angular-developer/references/angular-aria.md +0 -410
  27. package/prisma/skills/angular-developer/references/cli.md +0 -86
  28. package/prisma/skills/angular-developer/references/component-harnesses.md +0 -59
  29. package/prisma/skills/angular-developer/references/component-styling.md +0 -91
  30. package/prisma/skills/angular-developer/references/components.md +0 -117
  31. package/prisma/skills/angular-developer/references/creating-services.md +0 -97
  32. package/prisma/skills/angular-developer/references/data-resolvers.md +0 -69
  33. package/prisma/skills/angular-developer/references/define-routes.md +0 -67
  34. package/prisma/skills/angular-developer/references/defining-providers.md +0 -72
  35. package/prisma/skills/angular-developer/references/di-fundamentals.md +0 -120
  36. package/prisma/skills/angular-developer/references/e2e-testing.md +0 -56
  37. package/prisma/skills/angular-developer/references/effects.md +0 -83
  38. package/prisma/skills/angular-developer/references/hierarchical-injectors.md +0 -43
  39. package/prisma/skills/angular-developer/references/host-elements.md +0 -80
  40. package/prisma/skills/angular-developer/references/injection-context.md +0 -63
  41. package/prisma/skills/angular-developer/references/inputs.md +0 -101
  42. package/prisma/skills/angular-developer/references/linked-signal.md +0 -59
  43. package/prisma/skills/angular-developer/references/loading-strategies.md +0 -61
  44. package/prisma/skills/angular-developer/references/mcp.md +0 -108
  45. package/prisma/skills/angular-developer/references/navigate-to-routes.md +0 -69
  46. package/prisma/skills/angular-developer/references/outputs.md +0 -86
  47. package/prisma/skills/angular-developer/references/reactive-forms.md +0 -122
  48. package/prisma/skills/angular-developer/references/rendering-strategies.md +0 -44
  49. package/prisma/skills/angular-developer/references/resource.md +0 -77
  50. package/prisma/skills/angular-developer/references/route-animations.md +0 -56
  51. package/prisma/skills/angular-developer/references/route-guards.md +0 -52
  52. package/prisma/skills/angular-developer/references/router-lifecycle.md +0 -45
  53. package/prisma/skills/angular-developer/references/router-testing.md +0 -87
  54. package/prisma/skills/angular-developer/references/show-routes-with-outlets.md +0 -68
  55. package/prisma/skills/angular-developer/references/signal-forms.md +0 -795
  56. package/prisma/skills/angular-developer/references/signals-overview.md +0 -94
  57. package/prisma/skills/angular-developer/references/tailwind-css.md +0 -69
  58. package/prisma/skills/angular-developer/references/template-driven-forms.md +0 -114
  59. package/prisma/skills/angular-developer/references/testing-fundamentals.md +0 -65
  60. package/prisma/skills/api-connector-builder/SKILL.md +0 -121
  61. package/prisma/skills/api-design/SKILL.md +0 -524
  62. package/prisma/skills/architecture-decision-records/SKILL.md +0 -180
  63. package/prisma/skills/article-writing/SKILL.md +0 -80
  64. package/prisma/skills/automation-audit-ops/SKILL.md +0 -143
  65. package/prisma/skills/autonomous-agent-harness/SKILL.md +0 -274
  66. package/prisma/skills/autonomous-loops/SKILL.md +0 -611
  67. package/prisma/skills/backend-patterns/SKILL.md +0 -562
  68. package/prisma/skills/benchmark/SKILL.md +0 -94
  69. package/prisma/skills/benchmark-methodology/SKILL.md +0 -190
  70. package/prisma/skills/benchmark-optimization-loop/SKILL.md +0 -70
  71. package/prisma/skills/blender-motion-state-inspection/SKILL.md +0 -165
  72. package/prisma/skills/blueprint/SKILL.md +0 -106
  73. package/prisma/skills/brand-discovery/SKILL.md +0 -145
  74. package/prisma/skills/brand-discovery/references/10_purpose-why.md +0 -40
  75. package/prisma/skills/brand-discovery/references/20_positioning.md +0 -44
  76. package/prisma/skills/brand-discovery/references/30_audience-niche.md +0 -52
  77. package/prisma/skills/brand-discovery/references/40_personality-archetype.md +0 -57
  78. package/prisma/skills/brand-discovery/references/50_voice-tone.md +0 -59
  79. package/prisma/skills/brand-discovery/references/60_narrative-story.md +0 -50
  80. package/prisma/skills/brand-discovery/references/70_founder-tension.md +0 -49
  81. package/prisma/skills/brand-discovery/references/90_SYNTHESIS.md +0 -133
  82. package/prisma/skills/brand-voice/SKILL.md +0 -98
  83. package/prisma/skills/brand-voice/references/voice-profile-schema.md +0 -55
  84. package/prisma/skills/browser-qa/SKILL.md +0 -105
  85. package/prisma/skills/bun-runtime/SKILL.md +0 -85
  86. package/prisma/skills/canary-watch/SKILL.md +0 -108
  87. package/prisma/skills/carrier-relationship-management/SKILL.md +0 -212
  88. package/prisma/skills/cisco-ios-patterns/SKILL.md +0 -164
  89. package/prisma/skills/ck/SKILL.md +0 -148
  90. package/prisma/skills/ck/commands/forget.mjs +0 -44
  91. package/prisma/skills/ck/commands/info.mjs +0 -24
  92. package/prisma/skills/ck/commands/init.mjs +0 -143
  93. package/prisma/skills/ck/commands/list.mjs +0 -40
  94. package/prisma/skills/ck/commands/migrate.mjs +0 -202
  95. package/prisma/skills/ck/commands/resume.mjs +0 -36
  96. package/prisma/skills/ck/commands/save.mjs +0 -210
  97. package/prisma/skills/ck/commands/shared.mjs +0 -387
  98. package/prisma/skills/ck/hooks/session-start.mjs +0 -224
  99. package/prisma/skills/claude-devfleet/SKILL.md +0 -112
  100. package/prisma/skills/click-path-audit/SKILL.md +0 -245
  101. package/prisma/skills/clickhouse-io/SKILL.md +0 -440
  102. package/prisma/skills/code-tour/SKILL.md +0 -254
  103. package/prisma/skills/codebase-onboarding/SKILL.md +0 -234
  104. package/prisma/skills/codehealth-mcp/SKILL.md +0 -167
  105. package/prisma/skills/coding-standards/SKILL.md +0 -551
  106. package/prisma/skills/competitive-platform-analysis/SKILL.md +0 -214
  107. package/prisma/skills/competitive-report-structure/SKILL.md +0 -162
  108. package/prisma/skills/compose-multiplatform-patterns/SKILL.md +0 -300
  109. package/prisma/skills/config-gc/SKILL.md +0 -120
  110. package/prisma/skills/configure-ecc/SKILL.md +0 -385
  111. package/prisma/skills/connections-optimizer/SKILL.md +0 -190
  112. package/prisma/skills/content-engine/SKILL.md +0 -132
  113. package/prisma/skills/content-hash-cache-pattern/SKILL.md +0 -162
  114. package/prisma/skills/context-budget/SKILL.md +0 -136
  115. package/prisma/skills/continuous-agent-loop/SKILL.md +0 -46
  116. package/prisma/skills/continuous-learning/SKILL.md +0 -132
  117. package/prisma/skills/continuous-learning/config.json +0 -18
  118. package/prisma/skills/continuous-learning/evaluate-session.sh +0 -69
  119. package/prisma/skills/continuous-learning-v2/SKILL.md +0 -361
  120. package/prisma/skills/continuous-learning-v2/agents/observer-loop.sh +0 -359
  121. package/prisma/skills/continuous-learning-v2/agents/observer.md +0 -189
  122. package/prisma/skills/continuous-learning-v2/agents/session-guardian.sh +0 -150
  123. package/prisma/skills/continuous-learning-v2/agents/start-observer.sh +0 -248
  124. package/prisma/skills/continuous-learning-v2/config.json +0 -8
  125. package/prisma/skills/continuous-learning-v2/hooks/observe.sh +0 -585
  126. package/prisma/skills/continuous-learning-v2/scripts/detect-project.sh +0 -322
  127. package/prisma/skills/continuous-learning-v2/scripts/instinct-cli.py +0 -1956
  128. package/prisma/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +0 -31
  129. package/prisma/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +0 -68
  130. package/prisma/skills/continuous-learning-v2/scripts/test_parse_instinct.py +0 -1421
  131. package/prisma/skills/cost-aware-llm-pipeline/SKILL.md +0 -184
  132. package/prisma/skills/cost-tracking/SKILL.md +0 -97
  133. package/prisma/skills/council/SKILL.md +0 -204
  134. package/prisma/skills/cpp-coding-standards/SKILL.md +0 -724
  135. package/prisma/skills/cpp-testing/SKILL.md +0 -325
  136. package/prisma/skills/crosspost/SKILL.md +0 -112
  137. package/prisma/skills/csharp-testing/SKILL.md +0 -322
  138. package/prisma/skills/customer-billing-ops/SKILL.md +0 -141
  139. package/prisma/skills/customs-trade-compliance/SKILL.md +0 -263
  140. package/prisma/skills/dart-flutter-patterns/SKILL.md +0 -564
  141. package/prisma/skills/dashboard-builder/SKILL.md +0 -109
  142. package/prisma/skills/data-scraper-agent/SKILL.md +0 -765
  143. package/prisma/skills/data-throughput-accelerator/SKILL.md +0 -73
  144. package/prisma/skills/database-migrations/SKILL.md +0 -430
  145. package/prisma/skills/deep-research/SKILL.md +0 -160
  146. package/prisma/skills/defi-amm-security/SKILL.md +0 -167
  147. package/prisma/skills/delivery-gate/SKILL.md +0 -126
  148. package/prisma/skills/delivery-gate/hooks/quality-gate.py +0 -220
  149. package/prisma/skills/deployment-patterns/SKILL.md +0 -428
  150. package/prisma/skills/design-system/SKILL.md +0 -83
  151. package/prisma/skills/django-celery/SKILL.md +0 -458
  152. package/prisma/skills/django-patterns/SKILL.md +0 -735
  153. package/prisma/skills/django-security/SKILL.md +0 -644
  154. package/prisma/skills/django-tdd/SKILL.md +0 -730
  155. package/prisma/skills/django-verification/SKILL.md +0 -470
  156. package/prisma/skills/dmux-workflows/SKILL.md +0 -192
  157. package/prisma/skills/docker-patterns/SKILL.md +0 -365
  158. package/prisma/skills/documentation-lookup/SKILL.md +0 -91
  159. package/prisma/skills/dotnet-patterns/SKILL.md +0 -322
  160. package/prisma/skills/dynamic-workflow-mode/SKILL.md +0 -124
  161. package/prisma/skills/e2e-testing/SKILL.md +0 -327
  162. package/prisma/skills/ecc-guide/SKILL.md +0 -190
  163. package/prisma/skills/ecc-recipes/SKILL.md +0 -149
  164. package/prisma/skills/ecc-tools-cost-audit/SKILL.md +0 -161
  165. package/prisma/skills/email-ops/SKILL.md +0 -122
  166. package/prisma/skills/energy-procurement/SKILL.md +0 -228
  167. package/prisma/skills/enterprise-agent-ops/SKILL.md +0 -51
  168. package/prisma/skills/error-handling/SKILL.md +0 -377
  169. package/prisma/skills/eval-harness/SKILL.md +0 -271
  170. package/prisma/skills/evm-token-decimals/SKILL.md +0 -131
  171. package/prisma/skills/exa-search/SKILL.md +0 -108
  172. package/prisma/skills/fal-ai-media/SKILL.md +0 -289
  173. package/prisma/skills/fastapi-patterns/SKILL.md +0 -514
  174. package/prisma/skills/finance-billing-ops/SKILL.md +0 -128
  175. package/prisma/skills/flox-environments/SKILL.md +0 -497
  176. package/prisma/skills/flutter-dart-code-review/SKILL.md +0 -436
  177. package/prisma/skills/foundation-models-on-device/SKILL.md +0 -243
  178. package/prisma/skills/frontend-a11y/SKILL.md +0 -446
  179. package/prisma/skills/frontend-design-direction/SKILL.md +0 -93
  180. package/prisma/skills/frontend-patterns/SKILL.md +0 -657
  181. package/prisma/skills/frontend-slides/SKILL.md +0 -185
  182. package/prisma/skills/frontend-slides/STYLE_PRESETS.md +0 -330
  183. package/prisma/skills/frontend-slides/animation-patterns.md +0 -122
  184. package/prisma/skills/frontend-slides/html-template.md +0 -419
  185. package/prisma/skills/frontend-slides/scripts/export-pdf.sh +0 -418
  186. package/prisma/skills/frontend-slides/scripts/extract-pptx.py +0 -96
  187. package/prisma/skills/frontend-slides/viewport-base.css +0 -153
  188. package/prisma/skills/fsharp-testing/SKILL.md +0 -281
  189. package/prisma/skills/gan-style-harness/SKILL.md +0 -279
  190. package/prisma/skills/gateguard/SKILL.md +0 -133
  191. package/prisma/skills/generating-python-installer/SKILL.md +0 -820
  192. package/prisma/skills/git-workflow/SKILL.md +0 -716
  193. package/prisma/skills/github-ops/SKILL.md +0 -145
  194. package/prisma/skills/golang-patterns/SKILL.md +0 -675
  195. package/prisma/skills/golang-testing/SKILL.md +0 -721
  196. package/prisma/skills/google-workspace-ops/SKILL.md +0 -96
  197. package/prisma/skills/growth-log/SKILL.md +0 -128
  198. package/prisma/skills/healthcare-cdss-patterns/SKILL.md +0 -246
  199. package/prisma/skills/healthcare-emr-patterns/SKILL.md +0 -160
  200. package/prisma/skills/healthcare-eval-harness/SKILL.md +0 -208
  201. package/prisma/skills/healthcare-phi-compliance/SKILL.md +0 -146
  202. package/prisma/skills/hermes-imports/SKILL.md +0 -89
  203. package/prisma/skills/hexagonal-architecture/SKILL.md +0 -277
  204. package/prisma/skills/hipaa-compliance/SKILL.md +0 -79
  205. package/prisma/skills/homelab-network-readiness/SKILL.md +0 -170
  206. package/prisma/skills/homelab-network-setup/SKILL.md +0 -130
  207. package/prisma/skills/homelab-pihole-dns/SKILL.md +0 -275
  208. package/prisma/skills/homelab-vlan-segmentation/SKILL.md +0 -312
  209. package/prisma/skills/homelab-wireguard-vpn/SKILL.md +0 -306
  210. package/prisma/skills/hookify-rules/SKILL.md +0 -128
  211. package/prisma/skills/inherit-legacy-style/SKILL.md +0 -157
  212. package/prisma/skills/intent-driven-development/SKILL.md +0 -360
  213. package/prisma/skills/inventory-demand-planning/SKILL.md +0 -247
  214. package/prisma/skills/investor-materials/SKILL.md +0 -97
  215. package/prisma/skills/investor-outreach/SKILL.md +0 -92
  216. package/prisma/skills/ios-icon-gen/SKILL.md +0 -158
  217. package/prisma/skills/ios-icon-gen/scripts/generate_icons.swift +0 -258
  218. package/prisma/skills/ios-icon-gen/scripts/iconify_gen.sh +0 -235
  219. package/prisma/skills/iterative-retrieval/SKILL.md +0 -212
  220. package/prisma/skills/ito-basket-compare/SKILL.md +0 -64
  221. package/prisma/skills/ito-data-atlas-agent/SKILL.md +0 -64
  222. package/prisma/skills/ito-market-intelligence/SKILL.md +0 -61
  223. package/prisma/skills/ito-trade-planner/SKILL.md +0 -68
  224. package/prisma/skills/java-coding-standards/SKILL.md +0 -384
  225. package/prisma/skills/jira-integration/SKILL.md +0 -303
  226. package/prisma/skills/jpa-patterns/SKILL.md +0 -152
  227. package/prisma/skills/knowledge-ops/SKILL.md +0 -155
  228. package/prisma/skills/kotlin-coroutines-flows/SKILL.md +0 -285
  229. package/prisma/skills/kotlin-exposed-patterns/SKILL.md +0 -720
  230. package/prisma/skills/kotlin-ktor-patterns/SKILL.md +0 -690
  231. package/prisma/skills/kotlin-patterns/SKILL.md +0 -712
  232. package/prisma/skills/kotlin-testing/SKILL.md +0 -825
  233. package/prisma/skills/kubernetes-patterns/SKILL.md +0 -756
  234. package/prisma/skills/laravel-patterns/SKILL.md +0 -416
  235. package/prisma/skills/laravel-plugin-discovery/SKILL.md +0 -230
  236. package/prisma/skills/laravel-security/SKILL.md +0 -948
  237. package/prisma/skills/laravel-tdd/SKILL.md +0 -675
  238. package/prisma/skills/laravel-verification/SKILL.md +0 -180
  239. package/prisma/skills/latency-critical-systems/SKILL.md +0 -74
  240. package/prisma/skills/lead-intelligence/SKILL.md +0 -322
  241. package/prisma/skills/lead-intelligence/agents/enrichment-agent.md +0 -85
  242. package/prisma/skills/lead-intelligence/agents/mutual-mapper.md +0 -75
  243. package/prisma/skills/lead-intelligence/agents/outreach-drafter.md +0 -98
  244. package/prisma/skills/lead-intelligence/agents/signal-scorer.md +0 -60
  245. package/prisma/skills/liquid-glass-design/SKILL.md +0 -279
  246. package/prisma/skills/llm-trading-agent-security/SKILL.md +0 -147
  247. package/prisma/skills/logistics-exception-management/SKILL.md +0 -222
  248. package/prisma/skills/loop-design-check/SKILL.md +0 -143
  249. package/prisma/skills/mailtrap-email-integration/SKILL.md +0 -77
  250. package/prisma/skills/make-interfaces-feel-better/SKILL.md +0 -152
  251. package/prisma/skills/manim-video/SKILL.md +0 -90
  252. package/prisma/skills/manim-video/assets/network_graph_scene.py +0 -52
  253. package/prisma/skills/market-research/SKILL.md +0 -76
  254. package/prisma/skills/marketing-campaign/SKILL.md +0 -114
  255. package/prisma/skills/mcp-server-patterns/SKILL.md +0 -70
  256. package/prisma/skills/messages-ops/SKILL.md +0 -105
  257. package/prisma/skills/ml-adoption-playbook/SKILL.md +0 -57
  258. package/prisma/skills/mle-workflow/SKILL.md +0 -347
  259. package/prisma/skills/motion-advanced/SKILL.md +0 -596
  260. package/prisma/skills/motion-foundations/SKILL.md +0 -299
  261. package/prisma/skills/motion-patterns/SKILL.md +0 -434
  262. package/prisma/skills/motion-ui/SKILL.md +0 -576
  263. package/prisma/skills/mysql-patterns/SKILL.md +0 -413
  264. package/prisma/skills/nanoclaw-repl/SKILL.md +0 -34
  265. package/prisma/skills/nestjs-patterns/SKILL.md +0 -231
  266. package/prisma/skills/netmiko-ssh-automation/SKILL.md +0 -174
  267. package/prisma/skills/network-bgp-diagnostics/SKILL.md +0 -168
  268. package/prisma/skills/network-config-validation/SKILL.md +0 -211
  269. package/prisma/skills/network-interface-health/SKILL.md +0 -153
  270. package/prisma/skills/nextjs-turbopack/SKILL.md +0 -58
  271. package/prisma/skills/nodejs-keccak256/SKILL.md +0 -103
  272. package/prisma/skills/nutrient-document-processing/SKILL.md +0 -168
  273. package/prisma/skills/nuxt4-patterns/SKILL.md +0 -101
  274. package/prisma/skills/openclaw-persona-forge/SKILL.md +0 -289
  275. package/prisma/skills/openclaw-persona-forge/gacha.py +0 -224
  276. package/prisma/skills/openclaw-persona-forge/gacha.sh +0 -5
  277. package/prisma/skills/openclaw-persona-forge/references/avatar-style.md +0 -124
  278. package/prisma/skills/openclaw-persona-forge/references/boundary-rules.md +0 -53
  279. package/prisma/skills/openclaw-persona-forge/references/error-handling.md +0 -53
  280. package/prisma/skills/openclaw-persona-forge/references/identity-tension.md +0 -48
  281. package/prisma/skills/openclaw-persona-forge/references/naming-system.md +0 -39
  282. package/prisma/skills/openclaw-persona-forge/references/output-template.md +0 -166
  283. package/prisma/skills/opensource-pipeline/SKILL.md +0 -256
  284. package/prisma/skills/orch-add-feature/SKILL.md +0 -45
  285. package/prisma/skills/orch-build-mvp/SKILL.md +0 -49
  286. package/prisma/skills/orch-change-feature/SKILL.md +0 -43
  287. package/prisma/skills/orch-fix-defect/SKILL.md +0 -43
  288. package/prisma/skills/orch-pipeline/SKILL.md +0 -121
  289. package/prisma/skills/orch-refine-code/SKILL.md +0 -44
  290. package/prisma/skills/parallel-execution-optimizer/SKILL.md +0 -73
  291. package/prisma/skills/perl-patterns/SKILL.md +0 -505
  292. package/prisma/skills/perl-security/SKILL.md +0 -504
  293. package/prisma/skills/perl-testing/SKILL.md +0 -476
  294. package/prisma/skills/plan-orchestrate/SKILL.md +0 -263
  295. package/prisma/skills/plankton-code-quality/SKILL.md +0 -237
  296. package/prisma/skills/postgres-patterns/SKILL.md +0 -148
  297. package/prisma/skills/prediction-market-oracle-research/SKILL.md +0 -64
  298. package/prisma/skills/prediction-market-risk-review/SKILL.md +0 -61
  299. package/prisma/skills/prisma-patterns/SKILL.md +0 -401
  300. package/prisma/skills/product-capability/SKILL.md +0 -142
  301. package/prisma/skills/product-lens/SKILL.md +0 -93
  302. package/prisma/skills/production-audit/SKILL.md +0 -207
  303. package/prisma/skills/production-scheduling/SKILL.md +0 -238
  304. package/prisma/skills/project-flow-ops/SKILL.md +0 -112
  305. package/prisma/skills/prompt-optimizer/SKILL.md +0 -398
  306. package/prisma/skills/python-patterns/SKILL.md +0 -751
  307. package/prisma/skills/python-testing/SKILL.md +0 -817
  308. package/prisma/skills/pytorch-patterns/SKILL.md +0 -397
  309. package/prisma/skills/quality-nonconformance/SKILL.md +0 -260
  310. package/prisma/skills/quarkus-patterns/SKILL.md +0 -723
  311. package/prisma/skills/quarkus-security/SKILL.md +0 -468
  312. package/prisma/skills/quarkus-tdd/SKILL.md +0 -812
  313. package/prisma/skills/quarkus-verification/SKILL.md +0 -480
  314. package/prisma/skills/ralphinho-rfc-pipeline/SKILL.md +0 -68
  315. package/prisma/skills/react-native-patterns/SKILL.md +0 -326
  316. package/prisma/skills/react-patterns/SKILL.md +0 -342
  317. package/prisma/skills/react-performance/SKILL.md +0 -575
  318. package/prisma/skills/react-testing/SKILL.md +0 -424
  319. package/prisma/skills/recsys-pipeline-architect/SKILL.md +0 -115
  320. package/prisma/skills/recursive-decision-ledger/SKILL.md +0 -80
  321. package/prisma/skills/redis-patterns/SKILL.md +0 -404
  322. package/prisma/skills/regex-vs-llm-structured-text/SKILL.md +0 -221
  323. package/prisma/skills/remotion-video-creation/SKILL.md +0 -43
  324. package/prisma/skills/remotion-video-creation/rules/3d.md +0 -86
  325. package/prisma/skills/remotion-video-creation/rules/animations.md +0 -29
  326. package/prisma/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +0 -173
  327. package/prisma/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +0 -100
  328. package/prisma/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +0 -108
  329. package/prisma/skills/remotion-video-creation/rules/assets.md +0 -78
  330. package/prisma/skills/remotion-video-creation/rules/audio.md +0 -172
  331. package/prisma/skills/remotion-video-creation/rules/calculate-metadata.md +0 -104
  332. package/prisma/skills/remotion-video-creation/rules/can-decode.md +0 -75
  333. package/prisma/skills/remotion-video-creation/rules/charts.md +0 -58
  334. package/prisma/skills/remotion-video-creation/rules/compositions.md +0 -146
  335. package/prisma/skills/remotion-video-creation/rules/display-captions.md +0 -126
  336. package/prisma/skills/remotion-video-creation/rules/extract-frames.md +0 -229
  337. package/prisma/skills/remotion-video-creation/rules/fonts.md +0 -152
  338. package/prisma/skills/remotion-video-creation/rules/get-audio-duration.md +0 -58
  339. package/prisma/skills/remotion-video-creation/rules/get-video-dimensions.md +0 -68
  340. package/prisma/skills/remotion-video-creation/rules/get-video-duration.md +0 -58
  341. package/prisma/skills/remotion-video-creation/rules/gifs.md +0 -138
  342. package/prisma/skills/remotion-video-creation/rules/images.md +0 -130
  343. package/prisma/skills/remotion-video-creation/rules/import-srt-captions.md +0 -67
  344. package/prisma/skills/remotion-video-creation/rules/lottie.md +0 -67
  345. package/prisma/skills/remotion-video-creation/rules/measuring-dom-nodes.md +0 -34
  346. package/prisma/skills/remotion-video-creation/rules/measuring-text.md +0 -143
  347. package/prisma/skills/remotion-video-creation/rules/sequencing.md +0 -106
  348. package/prisma/skills/remotion-video-creation/rules/tailwind.md +0 -11
  349. package/prisma/skills/remotion-video-creation/rules/text-animations.md +0 -20
  350. package/prisma/skills/remotion-video-creation/rules/timing.md +0 -179
  351. package/prisma/skills/remotion-video-creation/rules/transcribe-captions.md +0 -19
  352. package/prisma/skills/remotion-video-creation/rules/transitions.md +0 -122
  353. package/prisma/skills/remotion-video-creation/rules/trimming.md +0 -52
  354. package/prisma/skills/remotion-video-creation/rules/videos.md +0 -171
  355. package/prisma/skills/repo-scan/SKILL.md +0 -79
  356. package/prisma/skills/research-ops/SKILL.md +0 -113
  357. package/prisma/skills/returns-reverse-logistics/SKILL.md +0 -240
  358. package/prisma/skills/rules-distill/SKILL.md +0 -265
  359. package/prisma/skills/rules-distill/scripts/scan-rules.sh +0 -58
  360. package/prisma/skills/rules-distill/scripts/scan-skills.sh +0 -129
  361. package/prisma/skills/rust-patterns/SKILL.md +0 -500
  362. package/prisma/skills/rust-testing/SKILL.md +0 -501
  363. package/prisma/skills/safety-guard/SKILL.md +0 -76
  364. package/prisma/skills/santa-method/SKILL.md +0 -307
  365. package/prisma/skills/scientific-db-pubmed-database/SKILL.md +0 -176
  366. package/prisma/skills/scientific-db-uspto-database/SKILL.md +0 -178
  367. package/prisma/skills/scientific-pkg-gget/SKILL.md +0 -167
  368. package/prisma/skills/scientific-thinking-literature-review/SKILL.md +0 -193
  369. package/prisma/skills/scientific-thinking-scholar-evaluation/SKILL.md +0 -161
  370. package/prisma/skills/search-first/SKILL.md +0 -183
  371. package/prisma/skills/security-bounty-hunter/SKILL.md +0 -100
  372. package/prisma/skills/security-review/SKILL.md +0 -504
  373. package/prisma/skills/security-review/cloud-infrastructure-security.md +0 -361
  374. package/prisma/skills/security-scan/SKILL.md +0 -166
  375. package/prisma/skills/seo/SKILL.md +0 -155
  376. package/prisma/skills/skill-comply/SKILL.md +0 -59
  377. package/prisma/skills/skill-comply/fixtures/compliant_trace.jsonl +0 -5
  378. package/prisma/skills/skill-comply/fixtures/noncompliant_trace.jsonl +0 -3
  379. package/prisma/skills/skill-comply/fixtures/tdd_spec.yaml +0 -44
  380. package/prisma/skills/skill-comply/prompts/classifier.md +0 -24
  381. package/prisma/skills/skill-comply/prompts/scenario_generator.md +0 -62
  382. package/prisma/skills/skill-comply/prompts/spec_generator.md +0 -42
  383. package/prisma/skills/skill-comply/pyproject.toml +0 -15
  384. package/prisma/skills/skill-comply/scripts/__init__.py +0 -0
  385. package/prisma/skills/skill-comply/scripts/classifier.py +0 -85
  386. package/prisma/skills/skill-comply/scripts/grader.py +0 -124
  387. package/prisma/skills/skill-comply/scripts/parser.py +0 -107
  388. package/prisma/skills/skill-comply/scripts/report.py +0 -170
  389. package/prisma/skills/skill-comply/scripts/run.py +0 -127
  390. package/prisma/skills/skill-comply/scripts/runner.py +0 -194
  391. package/prisma/skills/skill-comply/scripts/scenario_generator.py +0 -70
  392. package/prisma/skills/skill-comply/scripts/spec_generator.py +0 -72
  393. package/prisma/skills/skill-comply/scripts/utils.py +0 -13
  394. package/prisma/skills/skill-comply/tests/test_grader.py +0 -197
  395. package/prisma/skills/skill-comply/tests/test_parser.py +0 -90
  396. package/prisma/skills/skill-comply/tests/test_runner.py +0 -172
  397. package/prisma/skills/skill-scout/SKILL.md +0 -141
  398. package/prisma/skills/skill-stocktake/SKILL.md +0 -195
  399. package/prisma/skills/skill-stocktake/scripts/quick-diff.sh +0 -87
  400. package/prisma/skills/skill-stocktake/scripts/save-results.sh +0 -56
  401. package/prisma/skills/skill-stocktake/scripts/scan.sh +0 -170
  402. package/prisma/skills/social-graph-ranker/SKILL.md +0 -155
  403. package/prisma/skills/social-publisher/SKILL.md +0 -130
  404. package/prisma/skills/springboot-patterns/SKILL.md +0 -315
  405. package/prisma/skills/springboot-security/SKILL.md +0 -273
  406. package/prisma/skills/springboot-tdd/SKILL.md +0 -159
  407. package/prisma/skills/springboot-verification/SKILL.md +0 -232
  408. package/prisma/skills/strategic-compact/SKILL.md +0 -136
  409. package/prisma/skills/swift-actor-persistence/SKILL.md +0 -144
  410. package/prisma/skills/swift-concurrency-6-2/SKILL.md +0 -216
  411. package/prisma/skills/swift-protocol-di-testing/SKILL.md +0 -191
  412. package/prisma/skills/swiftui-patterns/SKILL.md +0 -259
  413. package/prisma/skills/taste/SKILL.md +0 -264
  414. package/prisma/skills/taste/references/genre-taxonomy.md +0 -87
  415. package/prisma/skills/tdd-workflow/SKILL.md +0 -583
  416. package/prisma/skills/team-agent-orchestration/SKILL.md +0 -111
  417. package/prisma/skills/team-builder/SKILL.md +0 -169
  418. package/prisma/skills/terminal-ops/SKILL.md +0 -110
  419. package/prisma/skills/tinystruct-patterns/SKILL.md +0 -279
  420. package/prisma/skills/tinystruct-patterns/references/architecture.md +0 -90
  421. package/prisma/skills/tinystruct-patterns/references/data-handling.md +0 -60
  422. package/prisma/skills/tinystruct-patterns/references/database.md +0 -99
  423. package/prisma/skills/tinystruct-patterns/references/routing.md +0 -64
  424. package/prisma/skills/tinystruct-patterns/references/system-usage.md +0 -97
  425. package/prisma/skills/tinystruct-patterns/references/testing.md +0 -72
  426. package/prisma/skills/token-budget-advisor/SKILL.md +0 -134
  427. package/prisma/skills/ui-demo/SKILL.md +0 -466
  428. package/prisma/skills/ui-to-vue/SKILL.md +0 -135
  429. package/prisma/skills/uncloud/SKILL.md +0 -344
  430. package/prisma/skills/unified-notifications-ops/SKILL.md +0 -188
  431. package/prisma/skills/verification-loop/SKILL.md +0 -127
  432. package/prisma/skills/video-editing/SKILL.md +0 -311
  433. package/prisma/skills/videodb/SKILL.md +0 -375
  434. package/prisma/skills/videodb/reference/api-reference.md +0 -550
  435. package/prisma/skills/videodb/reference/capture-reference.md +0 -407
  436. package/prisma/skills/videodb/reference/capture.md +0 -101
  437. package/prisma/skills/videodb/reference/editor.md +0 -443
  438. package/prisma/skills/videodb/reference/generative.md +0 -331
  439. package/prisma/skills/videodb/reference/rtstream-reference.md +0 -564
  440. package/prisma/skills/videodb/reference/rtstream.md +0 -65
  441. package/prisma/skills/videodb/reference/search.md +0 -230
  442. package/prisma/skills/videodb/reference/streaming.md +0 -406
  443. package/prisma/skills/videodb/reference/use-cases.md +0 -118
  444. package/prisma/skills/videodb/scripts/ws_listener.py +0 -282
  445. package/prisma/skills/visa-doc-translate/README.md +0 -86
  446. package/prisma/skills/visa-doc-translate/SKILL.md +0 -117
  447. package/prisma/skills/vite-patterns/SKILL.md +0 -450
  448. package/prisma/skills/vue-patterns/SKILL.md +0 -471
  449. package/prisma/skills/windows-desktop-e2e/SKILL.md +0 -888
  450. package/prisma/skills/workspace-surface-audit/SKILL.md +0 -126
  451. package/prisma/skills/x-api/SKILL.md +0 -235
@@ -1,216 +0,0 @@
1
- ---
2
- name: swift-concurrency-6-2
3
- description: Swift 6.2 Approachable Concurrency — single-threaded by default, @concurrent for explicit background offloading, isolated conformances for main actor types.
4
- ---
5
-
6
- # Swift 6.2 Approachable Concurrency
7
-
8
- Patterns for adopting Swift 6.2's concurrency model where code runs single-threaded by default and concurrency is introduced explicitly. Eliminates common data-race errors without sacrificing performance.
9
-
10
- ## When to Activate
11
-
12
- - Migrating Swift 5.x or 6.0/6.1 projects to Swift 6.2
13
- - Resolving data-race safety compiler errors
14
- - Designing MainActor-based app architecture
15
- - Offloading CPU-intensive work to background threads
16
- - Implementing protocol conformances on MainActor-isolated types
17
- - Enabling Approachable Concurrency build settings in Xcode 26
18
-
19
- ## Core Problem: Implicit Background Offloading
20
-
21
- In Swift 6.1 and earlier, async functions could be implicitly offloaded to background threads, causing data-race errors even in seemingly safe code:
22
-
23
- ```swift
24
- // Swift 6.1: ERROR
25
- @MainActor
26
- final class StickerModel {
27
- let photoProcessor = PhotoProcessor()
28
-
29
- func extractSticker(_ item: PhotosPickerItem) async throws -> Sticker? {
30
- guard let data = try await item.loadTransferable(type: Data.self) else { return nil }
31
-
32
- // Error: Sending 'self.photoProcessor' risks causing data races
33
- return await photoProcessor.extractSticker(data: data, with: item.itemIdentifier)
34
- }
35
- }
36
- ```
37
-
38
- Swift 6.2 fixes this: async functions stay on the calling actor by default.
39
-
40
- ```swift
41
- // Swift 6.2: OK — async stays on MainActor, no data race
42
- @MainActor
43
- final class StickerModel {
44
- let photoProcessor = PhotoProcessor()
45
-
46
- func extractSticker(_ item: PhotosPickerItem) async throws -> Sticker? {
47
- guard let data = try await item.loadTransferable(type: Data.self) else { return nil }
48
- return await photoProcessor.extractSticker(data: data, with: item.itemIdentifier)
49
- }
50
- }
51
- ```
52
-
53
- ## Core Pattern — Isolated Conformances
54
-
55
- MainActor types can now conform to non-isolated protocols safely:
56
-
57
- ```swift
58
- protocol Exportable {
59
- func export()
60
- }
61
-
62
- // Swift 6.1: ERROR — crosses into main actor-isolated code
63
- // Swift 6.2: OK with isolated conformance
64
- extension StickerModel: @MainActor Exportable {
65
- func export() {
66
- photoProcessor.exportAsPNG()
67
- }
68
- }
69
- ```
70
-
71
- The compiler ensures the conformance is only used on the main actor:
72
-
73
- ```swift
74
- // OK — ImageExporter is also @MainActor
75
- @MainActor
76
- struct ImageExporter {
77
- var items: [any Exportable]
78
-
79
- mutating func add(_ item: StickerModel) {
80
- items.append(item) // Safe: same actor isolation
81
- }
82
- }
83
-
84
- // ERROR — nonisolated context can't use MainActor conformance
85
- nonisolated struct ImageExporter {
86
- var items: [any Exportable]
87
-
88
- mutating func add(_ item: StickerModel) {
89
- items.append(item) // Error: Main actor-isolated conformance cannot be used here
90
- }
91
- }
92
- ```
93
-
94
- ## Core Pattern — Global and Static Variables
95
-
96
- Protect global/static state with MainActor:
97
-
98
- ```swift
99
- // Swift 6.1: ERROR — non-Sendable type may have shared mutable state
100
- final class StickerLibrary {
101
- static let shared: StickerLibrary = .init() // Error
102
- }
103
-
104
- // Fix: Annotate with @MainActor
105
- @MainActor
106
- final class StickerLibrary {
107
- static let shared: StickerLibrary = .init() // OK
108
- }
109
- ```
110
-
111
- ### MainActor Default Inference Mode
112
-
113
- Swift 6.2 introduces a mode where MainActor is inferred by default — no manual annotations needed:
114
-
115
- ```swift
116
- // With MainActor default inference enabled:
117
- final class StickerLibrary {
118
- static let shared: StickerLibrary = .init() // Implicitly @MainActor
119
- }
120
-
121
- final class StickerModel {
122
- let photoProcessor: PhotoProcessor
123
- var selection: [PhotosPickerItem] // Implicitly @MainActor
124
- }
125
-
126
- extension StickerModel: Exportable { // Implicitly @MainActor conformance
127
- func export() {
128
- photoProcessor.exportAsPNG()
129
- }
130
- }
131
- ```
132
-
133
- This mode is opt-in and recommended for apps, scripts, and other executable targets.
134
-
135
- ## Core Pattern — @concurrent for Background Work
136
-
137
- When you need actual parallelism, explicitly offload with `@concurrent`:
138
-
139
- > **Important:** This example requires Approachable Concurrency build settings — SE-0466 (MainActor default isolation) and SE-0461 (NonisolatedNonsendingByDefault). With these enabled, `extractSticker` stays on the caller's actor, making mutable state access safe. **Without these settings, this code has a data race** — the compiler will flag it.
140
-
141
- ```swift
142
- nonisolated final class PhotoProcessor {
143
- private var cachedStickers: [String: Sticker] = [:]
144
-
145
- func extractSticker(data: Data, with id: String) async -> Sticker {
146
- if let sticker = cachedStickers[id] {
147
- return sticker
148
- }
149
-
150
- let sticker = await Self.extractSubject(from: data)
151
- cachedStickers[id] = sticker
152
- return sticker
153
- }
154
-
155
- // Offload expensive work to concurrent thread pool
156
- @concurrent
157
- static func extractSubject(from data: Data) async -> Sticker { /* ... */ }
158
- }
159
-
160
- // Callers must await
161
- let processor = PhotoProcessor()
162
- processedPhotos[item.id] = await processor.extractSticker(data: data, with: item.id)
163
- ```
164
-
165
- To use `@concurrent`:
166
- 1. Mark the containing type as `nonisolated`
167
- 2. Add `@concurrent` to the function
168
- 3. Add `async` if not already asynchronous
169
- 4. Add `await` at call sites
170
-
171
- ## Key Design Decisions
172
-
173
- | Decision | Rationale |
174
- |----------|-----------|
175
- | Single-threaded by default | Most natural code is data-race free; concurrency is opt-in |
176
- | Async stays on calling actor | Eliminates implicit offloading that caused data-race errors |
177
- | Isolated conformances | MainActor types can conform to protocols without unsafe workarounds |
178
- | `@concurrent` explicit opt-in | Background execution is a deliberate performance choice, not accidental |
179
- | MainActor default inference | Reduces boilerplate `@MainActor` annotations for app targets |
180
- | Opt-in adoption | Non-breaking migration path — enable features incrementally |
181
-
182
- ## Migration Steps
183
-
184
- 1. **Enable in Xcode**: Swift Compiler > Concurrency section in Build Settings
185
- 2. **Enable in SPM**: Use `SwiftSettings` API in package manifest
186
- 3. **Use migration tooling**: Automatic code changes via swift.org/migration
187
- 4. **Start with MainActor defaults**: Enable inference mode for app targets
188
- 5. **Add `@concurrent` where needed**: Profile first, then offload hot paths
189
- 6. **Test thoroughly**: Data-race issues become compile-time errors
190
-
191
- ## Best Practices
192
-
193
- - **Start on MainActor** — write single-threaded code first, optimize later
194
- - **Use `@concurrent` only for CPU-intensive work** — image processing, compression, complex computation
195
- - **Enable MainActor inference mode** for app targets that are mostly single-threaded
196
- - **Profile before offloading** — use Instruments to find actual bottlenecks
197
- - **Protect globals with MainActor** — global/static mutable state needs actor isolation
198
- - **Use isolated conformances** instead of `nonisolated` workarounds or `@Sendable` wrappers
199
- - **Migrate incrementally** — enable features one at a time in build settings
200
-
201
- ## Anti-Patterns to Avoid
202
-
203
- - Applying `@concurrent` to every async function (most don't need background execution)
204
- - Using `nonisolated` to suppress compiler errors without understanding isolation
205
- - Keeping legacy `DispatchQueue` patterns when actors provide the same safety
206
- - Skipping `model.availability` checks in concurrency-related Foundation Models code
207
- - Fighting the compiler — if it reports a data race, the code has a real concurrency issue
208
- - Assuming all async code runs in the background (Swift 6.2 default: stays on calling actor)
209
-
210
- ## When to Use
211
-
212
- - All new Swift 6.2+ projects (Approachable Concurrency is the recommended default)
213
- - Migrating existing apps from Swift 5.x or 6.0/6.1 concurrency
214
- - Resolving data-race safety compiler errors during Xcode 26 adoption
215
- - Building MainActor-centric app architectures (most UI apps)
216
- - Performance optimization — offloading specific heavy computations to background
@@ -1,191 +0,0 @@
1
- ---
2
- name: swift-protocol-di-testing
3
- description: Protocol-based dependency injection for testable Swift code — mock file system, network, and external APIs using focused protocols and Swift Testing.
4
- metadata:
5
- origin: ECC
6
- ---
7
-
8
- # Swift Protocol-Based Dependency Injection for Testing
9
-
10
- Patterns for making Swift code testable by abstracting external dependencies (file system, network, iCloud) behind small, focused protocols. Enables deterministic tests without I/O.
11
-
12
- ## When to Activate
13
-
14
- - Writing Swift code that accesses file system, network, or external APIs
15
- - Need to test error handling paths without triggering real failures
16
- - Building modules that work across environments (app, test, SwiftUI preview)
17
- - Designing testable architecture with Swift concurrency (actors, Sendable)
18
-
19
- ## Core Pattern
20
-
21
- ### 1. Define Small, Focused Protocols
22
-
23
- Each protocol handles exactly one external concern.
24
-
25
- ```swift
26
- // File system access
27
- public protocol FileSystemProviding: Sendable {
28
- func containerURL(for purpose: Purpose) -> URL?
29
- }
30
-
31
- // File read/write operations
32
- public protocol FileAccessorProviding: Sendable {
33
- func read(from url: URL) throws -> Data
34
- func write(_ data: Data, to url: URL) throws
35
- func fileExists(at url: URL) -> Bool
36
- }
37
-
38
- // Bookmark storage (e.g., for sandboxed apps)
39
- public protocol BookmarkStorageProviding: Sendable {
40
- func saveBookmark(_ data: Data, for key: String) throws
41
- func loadBookmark(for key: String) throws -> Data?
42
- }
43
- ```
44
-
45
- ### 2. Create Default (Production) Implementations
46
-
47
- ```swift
48
- public struct DefaultFileSystemProvider: FileSystemProviding {
49
- public init() {}
50
-
51
- public func containerURL(for purpose: Purpose) -> URL? {
52
- FileManager.default.url(forUbiquityContainerIdentifier: nil)
53
- }
54
- }
55
-
56
- public struct DefaultFileAccessor: FileAccessorProviding {
57
- public init() {}
58
-
59
- public func read(from url: URL) throws -> Data {
60
- try Data(contentsOf: url)
61
- }
62
-
63
- public func write(_ data: Data, to url: URL) throws {
64
- try data.write(to: url, options: .atomic)
65
- }
66
-
67
- public func fileExists(at url: URL) -> Bool {
68
- FileManager.default.fileExists(atPath: url.path)
69
- }
70
- }
71
- ```
72
-
73
- ### 3. Create Mock Implementations for Testing
74
-
75
- ```swift
76
- public final class MockFileAccessor: FileAccessorProviding, @unchecked Sendable {
77
- public var files: [URL: Data] = [:]
78
- public var readError: Error?
79
- public var writeError: Error?
80
-
81
- public init() {}
82
-
83
- public func read(from url: URL) throws -> Data {
84
- if let error = readError { throw error }
85
- guard let data = files[url] else {
86
- throw CocoaError(.fileReadNoSuchFile)
87
- }
88
- return data
89
- }
90
-
91
- public func write(_ data: Data, to url: URL) throws {
92
- if let error = writeError { throw error }
93
- files[url] = data
94
- }
95
-
96
- public func fileExists(at url: URL) -> Bool {
97
- files[url] != nil
98
- }
99
- }
100
- ```
101
-
102
- ### 4. Inject Dependencies with Default Parameters
103
-
104
- Production code uses defaults; tests inject mocks.
105
-
106
- ```swift
107
- public actor SyncManager {
108
- private let fileSystem: FileSystemProviding
109
- private let fileAccessor: FileAccessorProviding
110
-
111
- public init(
112
- fileSystem: FileSystemProviding = DefaultFileSystemProvider(),
113
- fileAccessor: FileAccessorProviding = DefaultFileAccessor()
114
- ) {
115
- self.fileSystem = fileSystem
116
- self.fileAccessor = fileAccessor
117
- }
118
-
119
- public func sync() async throws {
120
- guard let containerURL = fileSystem.containerURL(for: .sync) else {
121
- throw SyncError.containerNotAvailable
122
- }
123
- let data = try fileAccessor.read(
124
- from: containerURL.appendingPathComponent("data.json")
125
- )
126
- // Process data...
127
- }
128
- }
129
- ```
130
-
131
- ### 5. Write Tests with Swift Testing
132
-
133
- ```swift
134
- import Testing
135
-
136
- @Test("Sync manager handles missing container")
137
- func testMissingContainer() async {
138
- let mockFileSystem = MockFileSystemProvider(containerURL: nil)
139
- let manager = SyncManager(fileSystem: mockFileSystem)
140
-
141
- await #expect(throws: SyncError.containerNotAvailable) {
142
- try await manager.sync()
143
- }
144
- }
145
-
146
- @Test("Sync manager reads data correctly")
147
- func testReadData() async throws {
148
- let mockFileAccessor = MockFileAccessor()
149
- mockFileAccessor.files[testURL] = testData
150
-
151
- let manager = SyncManager(fileAccessor: mockFileAccessor)
152
- let result = try await manager.loadData()
153
-
154
- #expect(result == expectedData)
155
- }
156
-
157
- @Test("Sync manager handles read errors gracefully")
158
- func testReadError() async {
159
- let mockFileAccessor = MockFileAccessor()
160
- mockFileAccessor.readError = CocoaError(.fileReadCorruptFile)
161
-
162
- let manager = SyncManager(fileAccessor: mockFileAccessor)
163
-
164
- await #expect(throws: SyncError.self) {
165
- try await manager.sync()
166
- }
167
- }
168
- ```
169
-
170
- ## Best Practices
171
-
172
- - **Single Responsibility**: Each protocol should handle one concern — don't create "god protocols" with many methods
173
- - **Sendable conformance**: Required when protocols are used across actor boundaries
174
- - **Default parameters**: Let production code use real implementations by default; only tests need to specify mocks
175
- - **Error simulation**: Design mocks with configurable error properties for testing failure paths
176
- - **Only mock boundaries**: Mock external dependencies (file system, network, APIs), not internal types
177
-
178
- ## Anti-Patterns to Avoid
179
-
180
- - Creating a single large protocol that covers all external access
181
- - Mocking internal types that have no external dependencies
182
- - Using `#if DEBUG` conditionals instead of proper dependency injection
183
- - Forgetting `Sendable` conformance when used with actors
184
- - Over-engineering: if a type has no external dependencies, it doesn't need a protocol
185
-
186
- ## When to Use
187
-
188
- - Any Swift code that touches file system, network, or external APIs
189
- - Testing error handling paths that are hard to trigger in real environments
190
- - Building modules that need to work in app, test, and SwiftUI preview contexts
191
- - Apps using Swift concurrency (actors, structured concurrency) that need testable architecture
@@ -1,259 +0,0 @@
1
- ---
2
- name: swiftui-patterns
3
- description: SwiftUI architecture patterns, state management with @Observable, view composition, navigation, performance optimization, and modern iOS/macOS UI best practices.
4
- ---
5
-
6
- # SwiftUI Patterns
7
-
8
- Modern SwiftUI patterns for building declarative, performant user interfaces on Apple platforms. Covers the Observation framework, view composition, type-safe navigation, and performance optimization.
9
-
10
- ## When to Activate
11
-
12
- - Building SwiftUI views and managing state (`@State`, `@Observable`, `@Binding`)
13
- - Designing navigation flows with `NavigationStack`
14
- - Structuring view models and data flow
15
- - Optimizing rendering performance for lists and complex layouts
16
- - Working with environment values and dependency injection in SwiftUI
17
-
18
- ## State Management
19
-
20
- ### Property Wrapper Selection
21
-
22
- Choose the simplest wrapper that fits:
23
-
24
- | Wrapper | Use Case |
25
- |---------|----------|
26
- | `@State` | View-local value types (toggles, form fields, sheet presentation) |
27
- | `@Binding` | Two-way reference to parent's `@State` |
28
- | `@Observable` class + `@State` | Owned model with multiple properties |
29
- | `@Observable` class (no wrapper) | Read-only reference passed from parent |
30
- | `@Bindable` | Two-way binding to an `@Observable` property |
31
- | `@Environment` | Shared dependencies injected via `.environment()` |
32
-
33
- ### @Observable ViewModel
34
-
35
- Use `@Observable` (not `ObservableObject`) — it tracks property-level changes so SwiftUI only re-renders views that read the changed property:
36
-
37
- ```swift
38
- @Observable
39
- final class ItemListViewModel {
40
- private(set) var items: [Item] = []
41
- private(set) var isLoading = false
42
- var searchText = ""
43
-
44
- private let repository: any ItemRepository
45
-
46
- init(repository: any ItemRepository = DefaultItemRepository()) {
47
- self.repository = repository
48
- }
49
-
50
- func load() async {
51
- isLoading = true
52
- defer { isLoading = false }
53
- items = (try? await repository.fetchAll()) ?? []
54
- }
55
- }
56
- ```
57
-
58
- ### View Consuming the ViewModel
59
-
60
- ```swift
61
- struct ItemListView: View {
62
- @State private var viewModel: ItemListViewModel
63
-
64
- init(viewModel: ItemListViewModel = ItemListViewModel()) {
65
- _viewModel = State(initialValue: viewModel)
66
- }
67
-
68
- var body: some View {
69
- List(viewModel.items) { item in
70
- ItemRow(item: item)
71
- }
72
- .searchable(text: $viewModel.searchText)
73
- .overlay { if viewModel.isLoading { ProgressView() } }
74
- .task { await viewModel.load() }
75
- }
76
- }
77
- ```
78
-
79
- ### Environment Injection
80
-
81
- Replace `@EnvironmentObject` with `@Environment`:
82
-
83
- ```swift
84
- // Inject
85
- ContentView()
86
- .environment(authManager)
87
-
88
- // Consume
89
- struct ProfileView: View {
90
- @Environment(AuthManager.self) private var auth
91
-
92
- var body: some View {
93
- Text(auth.currentUser?.name ?? "Guest")
94
- }
95
- }
96
- ```
97
-
98
- ## View Composition
99
-
100
- ### Extract Subviews to Limit Invalidation
101
-
102
- Break views into small, focused structs. When state changes, only the subview reading that state re-renders:
103
-
104
- ```swift
105
- struct OrderView: View {
106
- @State private var viewModel = OrderViewModel()
107
-
108
- var body: some View {
109
- VStack {
110
- OrderHeader(title: viewModel.title)
111
- OrderItemList(items: viewModel.items)
112
- OrderTotal(total: viewModel.total)
113
- }
114
- }
115
- }
116
- ```
117
-
118
- ### ViewModifier for Reusable Styling
119
-
120
- ```swift
121
- struct CardModifier: ViewModifier {
122
- func body(content: Content) -> some View {
123
- content
124
- .padding()
125
- .background(.regularMaterial)
126
- .clipShape(RoundedRectangle(cornerRadius: 12))
127
- }
128
- }
129
-
130
- extension View {
131
- func cardStyle() -> some View {
132
- modifier(CardModifier())
133
- }
134
- }
135
- ```
136
-
137
- ## Navigation
138
-
139
- ### Type-Safe NavigationStack
140
-
141
- Use `NavigationStack` with `NavigationPath` for programmatic, type-safe routing:
142
-
143
- ```swift
144
- @Observable
145
- final class Router {
146
- var path = NavigationPath()
147
-
148
- func navigate(to destination: Destination) {
149
- path.append(destination)
150
- }
151
-
152
- func popToRoot() {
153
- path = NavigationPath()
154
- }
155
- }
156
-
157
- enum Destination: Hashable {
158
- case detail(Item.ID)
159
- case settings
160
- case profile(User.ID)
161
- }
162
-
163
- struct RootView: View {
164
- @State private var router = Router()
165
-
166
- var body: some View {
167
- NavigationStack(path: $router.path) {
168
- HomeView()
169
- .navigationDestination(for: Destination.self) { dest in
170
- switch dest {
171
- case .detail(let id): ItemDetailView(itemID: id)
172
- case .settings: SettingsView()
173
- case .profile(let id): ProfileView(userID: id)
174
- }
175
- }
176
- }
177
- .environment(router)
178
- }
179
- }
180
- ```
181
-
182
- ## Performance
183
-
184
- ### Use Lazy Containers for Large Collections
185
-
186
- `LazyVStack` and `LazyHStack` create views only when visible:
187
-
188
- ```swift
189
- ScrollView {
190
- LazyVStack(spacing: 8) {
191
- ForEach(items) { item in
192
- ItemRow(item: item)
193
- }
194
- }
195
- }
196
- ```
197
-
198
- ### Stable Identifiers
199
-
200
- Always use stable, unique IDs in `ForEach` — avoid using array indices:
201
-
202
- ```swift
203
- // Use Identifiable conformance or explicit id
204
- ForEach(items, id: \.stableID) { item in
205
- ItemRow(item: item)
206
- }
207
- ```
208
-
209
- ### Avoid Expensive Work in body
210
-
211
- - Never perform I/O, network calls, or heavy computation inside `body`
212
- - Use `.task {}` for async work — it cancels automatically when the view disappears
213
- - Use `.sensoryFeedback()` and `.geometryGroup()` sparingly in scroll views
214
- - Minimize `.shadow()`, `.blur()`, and `.mask()` in lists — they trigger offscreen rendering
215
-
216
- ### Equatable Conformance
217
-
218
- For views with expensive bodies, conform to `Equatable` to skip unnecessary re-renders:
219
-
220
- ```swift
221
- struct ExpensiveChartView: View, Equatable {
222
- let dataPoints: [DataPoint] // DataPoint must conform to Equatable
223
-
224
- static func == (lhs: Self, rhs: Self) -> Bool {
225
- lhs.dataPoints == rhs.dataPoints
226
- }
227
-
228
- var body: some View {
229
- // Complex chart rendering
230
- }
231
- }
232
- ```
233
-
234
- ## Previews
235
-
236
- Use `#Preview` macro with inline mock data for fast iteration:
237
-
238
- ```swift
239
- #Preview("Empty state") {
240
- ItemListView(viewModel: ItemListViewModel(repository: EmptyMockRepository()))
241
- }
242
-
243
- #Preview("Loaded") {
244
- ItemListView(viewModel: ItemListViewModel(repository: PopulatedMockRepository()))
245
- }
246
- ```
247
-
248
- ## Anti-Patterns to Avoid
249
-
250
- - Using `ObservableObject` / `@Published` / `@StateObject` / `@EnvironmentObject` in new code — migrate to `@Observable`
251
- - Putting async work directly in `body` or `init` — use `.task {}` or explicit load methods
252
- - Creating view models as `@State` inside child views that don't own the data — pass from parent instead
253
- - Using `AnyView` type erasure — prefer `@ViewBuilder` or `Group` for conditional views
254
- - Ignoring `Sendable` requirements when passing data to/from actors
255
-
256
- ## References
257
-
258
- See skill: `swift-actor-persistence` for actor-based persistence patterns.
259
- See skill: `swift-protocol-di-testing` for protocol-based DI and testing with Swift Testing.