agy-superpowers 5.0.7 → 5.0.9

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 (232) hide show
  1. package/package.json +1 -1
  2. package/template/agent/rules/superpowers.md +54 -0
  3. package/template/agent/skills/api-design/SKILL.md +193 -0
  4. package/template/agent/skills/app-store-optimizer/SKILL.md +127 -0
  5. package/template/agent/skills/auth-and-identity/SKILL.md +167 -0
  6. package/template/agent/skills/backend-developer/SKILL.md +148 -0
  7. package/template/agent/skills/community-manager/SKILL.md +115 -0
  8. package/template/agent/skills/content-marketer/SKILL.md +111 -0
  9. package/template/agent/skills/conversion-optimizer/SKILL.md +142 -0
  10. package/template/agent/skills/copywriter/SKILL.md +114 -0
  11. package/template/agent/skills/cto-architect/SKILL.md +133 -0
  12. package/template/agent/skills/customer-success-manager/SKILL.md +126 -0
  13. package/template/agent/skills/data-analyst/SKILL.md +147 -0
  14. package/template/agent/skills/devops-engineer/SKILL.md +117 -0
  15. package/template/agent/skills/email-infrastructure/SKILL.md +164 -0
  16. package/template/agent/skills/frontend-developer/SKILL.md +172 -0
  17. package/template/agent/skills/frontend-developer/references/react-nextjs.md +343 -0
  18. package/template/agent/skills/frontend-developer/references/react-rules/_sections.md +46 -0
  19. package/template/agent/skills/frontend-developer/references/react-rules/_template.md +28 -0
  20. package/template/agent/skills/frontend-developer/references/react-rules/advanced-event-handler-refs.md +55 -0
  21. package/template/agent/skills/frontend-developer/references/react-rules/advanced-init-once.md +42 -0
  22. package/template/agent/skills/frontend-developer/references/react-rules/advanced-use-latest.md +39 -0
  23. package/template/agent/skills/frontend-developer/references/react-rules/async-api-routes.md +38 -0
  24. package/template/agent/skills/frontend-developer/references/react-rules/async-defer-await.md +80 -0
  25. package/template/agent/skills/frontend-developer/references/react-rules/async-dependencies.md +51 -0
  26. package/template/agent/skills/frontend-developer/references/react-rules/async-parallel.md +28 -0
  27. package/template/agent/skills/frontend-developer/references/react-rules/async-suspense-boundaries.md +99 -0
  28. package/template/agent/skills/frontend-developer/references/react-rules/bundle-barrel-imports.md +59 -0
  29. package/template/agent/skills/frontend-developer/references/react-rules/bundle-conditional.md +31 -0
  30. package/template/agent/skills/frontend-developer/references/react-rules/bundle-defer-third-party.md +49 -0
  31. package/template/agent/skills/frontend-developer/references/react-rules/bundle-dynamic-imports.md +35 -0
  32. package/template/agent/skills/frontend-developer/references/react-rules/bundle-preload.md +50 -0
  33. package/template/agent/skills/frontend-developer/references/react-rules/client-event-listeners.md +74 -0
  34. package/template/agent/skills/frontend-developer/references/react-rules/client-localstorage-schema.md +71 -0
  35. package/template/agent/skills/frontend-developer/references/react-rules/client-passive-event-listeners.md +48 -0
  36. package/template/agent/skills/frontend-developer/references/react-rules/client-swr-dedup.md +56 -0
  37. package/template/agent/skills/frontend-developer/references/react-rules/js-batch-dom-css.md +107 -0
  38. package/template/agent/skills/frontend-developer/references/react-rules/js-cache-function-results.md +80 -0
  39. package/template/agent/skills/frontend-developer/references/react-rules/js-cache-property-access.md +28 -0
  40. package/template/agent/skills/frontend-developer/references/react-rules/js-cache-storage.md +70 -0
  41. package/template/agent/skills/frontend-developer/references/react-rules/js-combine-iterations.md +32 -0
  42. package/template/agent/skills/frontend-developer/references/react-rules/js-early-exit.md +50 -0
  43. package/template/agent/skills/frontend-developer/references/react-rules/js-flatmap-filter.md +60 -0
  44. package/template/agent/skills/frontend-developer/references/react-rules/js-hoist-regexp.md +45 -0
  45. package/template/agent/skills/frontend-developer/references/react-rules/js-index-maps.md +37 -0
  46. package/template/agent/skills/frontend-developer/references/react-rules/js-length-check-first.md +49 -0
  47. package/template/agent/skills/frontend-developer/references/react-rules/js-min-max-loop.md +82 -0
  48. package/template/agent/skills/frontend-developer/references/react-rules/js-set-map-lookups.md +24 -0
  49. package/template/agent/skills/frontend-developer/references/react-rules/js-tosorted-immutable.md +57 -0
  50. package/template/agent/skills/frontend-developer/references/react-rules/rendering-activity.md +26 -0
  51. package/template/agent/skills/frontend-developer/references/react-rules/rendering-animate-svg-wrapper.md +47 -0
  52. package/template/agent/skills/frontend-developer/references/react-rules/rendering-conditional-render.md +40 -0
  53. package/template/agent/skills/frontend-developer/references/react-rules/rendering-content-visibility.md +38 -0
  54. package/template/agent/skills/frontend-developer/references/react-rules/rendering-hoist-jsx.md +46 -0
  55. package/template/agent/skills/frontend-developer/references/react-rules/rendering-hydration-no-flicker.md +82 -0
  56. package/template/agent/skills/frontend-developer/references/react-rules/rendering-hydration-suppress-warning.md +30 -0
  57. package/template/agent/skills/frontend-developer/references/react-rules/rendering-resource-hints.md +85 -0
  58. package/template/agent/skills/frontend-developer/references/react-rules/rendering-script-defer-async.md +68 -0
  59. package/template/agent/skills/frontend-developer/references/react-rules/rendering-svg-precision.md +28 -0
  60. package/template/agent/skills/frontend-developer/references/react-rules/rendering-usetransition-loading.md +75 -0
  61. package/template/agent/skills/frontend-developer/references/react-rules/rerender-defer-reads.md +39 -0
  62. package/template/agent/skills/frontend-developer/references/react-rules/rerender-dependencies.md +45 -0
  63. package/template/agent/skills/frontend-developer/references/react-rules/rerender-derived-state-no-effect.md +40 -0
  64. package/template/agent/skills/frontend-developer/references/react-rules/rerender-derived-state.md +29 -0
  65. package/template/agent/skills/frontend-developer/references/react-rules/rerender-functional-setstate.md +74 -0
  66. package/template/agent/skills/frontend-developer/references/react-rules/rerender-lazy-state-init.md +58 -0
  67. package/template/agent/skills/frontend-developer/references/react-rules/rerender-memo-with-default-value.md +38 -0
  68. package/template/agent/skills/frontend-developer/references/react-rules/rerender-memo.md +44 -0
  69. package/template/agent/skills/frontend-developer/references/react-rules/rerender-move-effect-to-event.md +45 -0
  70. package/template/agent/skills/frontend-developer/references/react-rules/rerender-no-inline-components.md +82 -0
  71. package/template/agent/skills/frontend-developer/references/react-rules/rerender-simple-expression-in-memo.md +35 -0
  72. package/template/agent/skills/frontend-developer/references/react-rules/rerender-split-combined-hooks.md +64 -0
  73. package/template/agent/skills/frontend-developer/references/react-rules/rerender-transitions.md +40 -0
  74. package/template/agent/skills/frontend-developer/references/react-rules/rerender-use-deferred-value.md +59 -0
  75. package/template/agent/skills/frontend-developer/references/react-rules/rerender-use-ref-transient-values.md +73 -0
  76. package/template/agent/skills/frontend-developer/references/react-rules/server-after-nonblocking.md +73 -0
  77. package/template/agent/skills/frontend-developer/references/react-rules/server-auth-actions.md +96 -0
  78. package/template/agent/skills/frontend-developer/references/react-rules/server-cache-lru.md +41 -0
  79. package/template/agent/skills/frontend-developer/references/react-rules/server-cache-react.md +76 -0
  80. package/template/agent/skills/frontend-developer/references/react-rules/server-dedup-props.md +65 -0
  81. package/template/agent/skills/frontend-developer/references/react-rules/server-hoist-static-io.md +142 -0
  82. package/template/agent/skills/frontend-developer/references/react-rules/server-parallel-fetching.md +83 -0
  83. package/template/agent/skills/frontend-developer/references/react-rules/server-serialization.md +38 -0
  84. package/template/agent/skills/frontend-developer/references/svelte-sveltekit.md +220 -0
  85. package/template/agent/skills/frontend-developer/references/vanilla.md +275 -0
  86. package/template/agent/skills/frontend-developer/references/vue-nuxt.md +289 -0
  87. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/_index.md +154 -0
  88. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/animation-class-based-technique.md +254 -0
  89. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/animation-state-driven-technique.md +291 -0
  90. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-async.md +97 -0
  91. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-data-flow.md +307 -0
  92. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-fallthrough-attrs.md +174 -0
  93. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-keep-alive.md +137 -0
  94. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-slots.md +216 -0
  95. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-suspense.md +228 -0
  96. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-teleport.md +108 -0
  97. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-transition-group.md +128 -0
  98. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-transition.md +125 -0
  99. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/composables.md +290 -0
  100. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/directives.md +162 -0
  101. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/perf-avoid-component-abstraction-in-lists.md +159 -0
  102. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/perf-v-once-v-memo-directives.md +182 -0
  103. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/perf-virtualize-large-lists.md +187 -0
  104. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/plugins.md +166 -0
  105. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/reactivity.md +344 -0
  106. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/render-functions.md +201 -0
  107. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/sfc.md +310 -0
  108. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/state-management.md +135 -0
  109. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/updated-hook-performance.md +187 -0
  110. package/template/agent/skills/frontend-developer/references/vue-rules/router/_index.md +23 -0
  111. package/template/agent/skills/frontend-developer/references/vue-rules/router/router-beforeenter-no-param-trigger.md +167 -0
  112. package/template/agent/skills/frontend-developer/references/vue-rules/router/router-beforerouteenter-no-this.md +176 -0
  113. package/template/agent/skills/frontend-developer/references/vue-rules/router/router-guard-async-await-pattern.md +227 -0
  114. package/template/agent/skills/frontend-developer/references/vue-rules/router/router-navigation-guard-infinite-loop.md +187 -0
  115. package/template/agent/skills/frontend-developer/references/vue-rules/router/router-navigation-guard-next-deprecated.md +150 -0
  116. package/template/agent/skills/frontend-developer/references/vue-rules/router/router-param-change-no-lifecycle.md +181 -0
  117. package/template/agent/skills/frontend-developer/references/vue-rules/router/router-simple-routing-cleanup.md +209 -0
  118. package/template/agent/skills/frontend-developer/references/vue-rules/router/router-use-vue-router-for-production.md +183 -0
  119. package/template/agent/skills/frontend-developer/references/vue-rules/testing/_index.md +29 -0
  120. package/template/agent/skills/frontend-developer/references/vue-rules/testing/async-component-testing.md +163 -0
  121. package/template/agent/skills/frontend-developer/references/vue-rules/testing/teleport-testing-complexity.md +158 -0
  122. package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-async-await-flushpromises.md +175 -0
  123. package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-browser-vs-node-runners.md +208 -0
  124. package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-component-blackbox-approach.md +144 -0
  125. package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-composables-helper-wrapper.md +238 -0
  126. package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-e2e-playwright-recommended.md +242 -0
  127. package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-no-snapshot-only.md +197 -0
  128. package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-pinia-store-setup.md +228 -0
  129. package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-suspense-async-components.md +229 -0
  130. package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-vitest-recommended-for-vue.md +204 -0
  131. package/template/agent/skills/game-design/SKILL.md +194 -0
  132. package/template/agent/skills/game-developer/SKILL.md +175 -0
  133. package/template/agent/skills/growth-hacker/SKILL.md +122 -0
  134. package/template/agent/skills/i18n-localization/SKILL.md +126 -0
  135. package/template/agent/skills/influencer-marketer/SKILL.md +141 -0
  136. package/template/agent/skills/mobile-developer/SKILL.md +194 -0
  137. package/template/agent/skills/mobile-developer/references/android-native.md +396 -0
  138. package/template/agent/skills/mobile-developer/references/android-rules/android-accessibility.md +36 -0
  139. package/template/agent/skills/mobile-developer/references/android-rules/android-architecture.md +52 -0
  140. package/template/agent/skills/mobile-developer/references/android-rules/android-coroutines.md +139 -0
  141. package/template/agent/skills/mobile-developer/references/android-rules/android-data-layer.md +51 -0
  142. package/template/agent/skills/mobile-developer/references/android-rules/android-emulator-skill.md +108 -0
  143. package/template/agent/skills/mobile-developer/references/android-rules/android-gradle-logic.md +126 -0
  144. package/template/agent/skills/mobile-developer/references/android-rules/android-retrofit.md +142 -0
  145. package/template/agent/skills/mobile-developer/references/android-rules/android-testing.md +102 -0
  146. package/template/agent/skills/mobile-developer/references/android-rules/android-viewmodel.md +43 -0
  147. package/template/agent/skills/mobile-developer/references/android-rules/coil-compose.md +74 -0
  148. package/template/agent/skills/mobile-developer/references/android-rules/compose-navigation.md +422 -0
  149. package/template/agent/skills/mobile-developer/references/android-rules/compose-performance-audit.md +199 -0
  150. package/template/agent/skills/mobile-developer/references/android-rules/compose-ui.md +49 -0
  151. package/template/agent/skills/mobile-developer/references/android-rules/gradle-build-performance.md +346 -0
  152. package/template/agent/skills/mobile-developer/references/android-rules/kotlin-concurrency-expert.md +169 -0
  153. package/template/agent/skills/mobile-developer/references/android-rules/rxjava-to-coroutines-migration.md +101 -0
  154. package/template/agent/skills/mobile-developer/references/android-rules/xml-to-compose-migration.md +338 -0
  155. package/template/agent/skills/mobile-developer/references/flutter-rules/dart-best-practices.md +52 -0
  156. package/template/agent/skills/mobile-developer/references/flutter-rules/dart-checks-migration.md +134 -0
  157. package/template/agent/skills/mobile-developer/references/flutter-rules/dart-cli-app-best-practices.md +123 -0
  158. package/template/agent/skills/mobile-developer/references/flutter-rules/dart-doc-validation.md +45 -0
  159. package/template/agent/skills/mobile-developer/references/flutter-rules/dart-matcher-best-practices.md +106 -0
  160. package/template/agent/skills/mobile-developer/references/flutter-rules/dart-modern-features.md +241 -0
  161. package/template/agent/skills/mobile-developer/references/flutter-rules/dart-package-maintenance.md +75 -0
  162. package/template/agent/skills/mobile-developer/references/flutter-rules/dart-test-fundamentals.md +124 -0
  163. package/template/agent/skills/mobile-developer/references/flutter.md +291 -0
  164. package/template/agent/skills/mobile-developer/references/ios-native.md +358 -0
  165. package/template/agent/skills/mobile-developer/references/ios-rules/accessibility-patterns.md +215 -0
  166. package/template/agent/skills/mobile-developer/references/ios-rules/animation-advanced.md +403 -0
  167. package/template/agent/skills/mobile-developer/references/ios-rules/animation-basics.md +284 -0
  168. package/template/agent/skills/mobile-developer/references/ios-rules/animation-transitions.md +326 -0
  169. package/template/agent/skills/mobile-developer/references/ios-rules/charts-accessibility.md +135 -0
  170. package/template/agent/skills/mobile-developer/references/ios-rules/charts.md +602 -0
  171. package/template/agent/skills/mobile-developer/references/ios-rules/image-optimization.md +203 -0
  172. package/template/agent/skills/mobile-developer/references/ios-rules/latest-apis.md +464 -0
  173. package/template/agent/skills/mobile-developer/references/ios-rules/layout-best-practices.md +266 -0
  174. package/template/agent/skills/mobile-developer/references/ios-rules/liquid-glass.md +416 -0
  175. package/template/agent/skills/mobile-developer/references/ios-rules/list-patterns.md +394 -0
  176. package/template/agent/skills/mobile-developer/references/ios-rules/macos-scenes.md +318 -0
  177. package/template/agent/skills/mobile-developer/references/ios-rules/macos-views.md +357 -0
  178. package/template/agent/skills/mobile-developer/references/ios-rules/macos-window-styling.md +303 -0
  179. package/template/agent/skills/mobile-developer/references/ios-rules/performance-patterns.md +403 -0
  180. package/template/agent/skills/mobile-developer/references/ios-rules/scroll-patterns.md +293 -0
  181. package/template/agent/skills/mobile-developer/references/ios-rules/sheet-navigation-patterns.md +363 -0
  182. package/template/agent/skills/mobile-developer/references/ios-rules/state-management.md +417 -0
  183. package/template/agent/skills/mobile-developer/references/ios-rules/view-structure.md +389 -0
  184. package/template/agent/skills/mobile-developer/references/react-native-rules/_sections.md +86 -0
  185. package/template/agent/skills/mobile-developer/references/react-native-rules/_template.md +28 -0
  186. package/template/agent/skills/mobile-developer/references/react-native-rules/animation-derived-value.md +53 -0
  187. package/template/agent/skills/mobile-developer/references/react-native-rules/animation-gesture-detector-press.md +95 -0
  188. package/template/agent/skills/mobile-developer/references/react-native-rules/animation-gpu-properties.md +65 -0
  189. package/template/agent/skills/mobile-developer/references/react-native-rules/design-system-compound-components.md +66 -0
  190. package/template/agent/skills/mobile-developer/references/react-native-rules/fonts-config-plugin.md +71 -0
  191. package/template/agent/skills/mobile-developer/references/react-native-rules/imports-design-system-folder.md +68 -0
  192. package/template/agent/skills/mobile-developer/references/react-native-rules/js-hoist-intl.md +61 -0
  193. package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-callbacks.md +44 -0
  194. package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-function-references.md +132 -0
  195. package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-images.md +53 -0
  196. package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-inline-objects.md +97 -0
  197. package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-item-expensive.md +94 -0
  198. package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-item-memo.md +82 -0
  199. package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-item-types.md +104 -0
  200. package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-virtualize.md +67 -0
  201. package/template/agent/skills/mobile-developer/references/react-native-rules/monorepo-native-deps-in-app.md +46 -0
  202. package/template/agent/skills/mobile-developer/references/react-native-rules/monorepo-single-dependency-versions.md +63 -0
  203. package/template/agent/skills/mobile-developer/references/react-native-rules/navigation-native-navigators.md +188 -0
  204. package/template/agent/skills/mobile-developer/references/react-native-rules/react-compiler-destructure-functions.md +50 -0
  205. package/template/agent/skills/mobile-developer/references/react-native-rules/react-compiler-reanimated-shared-values.md +48 -0
  206. package/template/agent/skills/mobile-developer/references/react-native-rules/react-state-dispatcher.md +91 -0
  207. package/template/agent/skills/mobile-developer/references/react-native-rules/react-state-fallback.md +56 -0
  208. package/template/agent/skills/mobile-developer/references/react-native-rules/react-state-minimize.md +65 -0
  209. package/template/agent/skills/mobile-developer/references/react-native-rules/rendering-no-falsy-and.md +74 -0
  210. package/template/agent/skills/mobile-developer/references/react-native-rules/rendering-text-in-text-component.md +36 -0
  211. package/template/agent/skills/mobile-developer/references/react-native-rules/scroll-position-no-state.md +82 -0
  212. package/template/agent/skills/mobile-developer/references/react-native-rules/state-ground-truth.md +80 -0
  213. package/template/agent/skills/mobile-developer/references/react-native-rules/ui-expo-image.md +66 -0
  214. package/template/agent/skills/mobile-developer/references/react-native-rules/ui-image-gallery.md +104 -0
  215. package/template/agent/skills/mobile-developer/references/react-native-rules/ui-measure-views.md +78 -0
  216. package/template/agent/skills/mobile-developer/references/react-native-rules/ui-menus.md +174 -0
  217. package/template/agent/skills/mobile-developer/references/react-native-rules/ui-native-modals.md +77 -0
  218. package/template/agent/skills/mobile-developer/references/react-native-rules/ui-pressable.md +61 -0
  219. package/template/agent/skills/mobile-developer/references/react-native-rules/ui-safe-area-scroll.md +65 -0
  220. package/template/agent/skills/mobile-developer/references/react-native-rules/ui-scrollview-content-inset.md +45 -0
  221. package/template/agent/skills/mobile-developer/references/react-native-rules/ui-styling.md +87 -0
  222. package/template/agent/skills/mobile-developer/references/react-native.md +345 -0
  223. package/template/agent/skills/monetization-strategist/SKILL.md +119 -0
  224. package/template/agent/skills/paid-acquisition-specialist/SKILL.md +119 -0
  225. package/template/agent/skills/product-manager/SKILL.md +105 -0
  226. package/template/agent/skills/real-time-features/SKILL.md +194 -0
  227. package/template/agent/skills/retention-specialist/SKILL.md +123 -0
  228. package/template/agent/skills/saas-architect/SKILL.md +139 -0
  229. package/template/agent/skills/security-engineer/SKILL.md +133 -0
  230. package/template/agent/skills/seo-specialist/SKILL.md +130 -0
  231. package/template/agent/skills/subscription-billing/SKILL.md +179 -0
  232. package/template/agent/skills/ux-designer/SKILL.md +128 -0
@@ -0,0 +1,106 @@
1
+ ---
2
+ name: dart-matcher-best-practices
3
+ description: |-
4
+ Best practices for using `expect` and `package:matcher`.
5
+ Focuses on readable assertions, proper matcher selection, and avoiding common pitfalls.
6
+ license: Apache-2.0
7
+ ---
8
+
9
+ # Dart Matcher Best Practices
10
+
11
+ ## When to use this skill
12
+ Use this skill when:
13
+ - Writing assertions using `expect` and `package:matcher`.
14
+ - Migrating legacy manual checks to cleaner matchers.
15
+ - Debugging confusing test failures.
16
+
17
+ ## Core Matchers
18
+
19
+ ### 1. Collections (`hasLength`, `contains`, `isEmpty`)
20
+
21
+ - **`hasLength(n)`**:
22
+ - Prefer `expect(list, hasLength(n))` over `expect(list.length, n)`.
23
+ - Gives better error messages on failure (shows actual list content).
24
+
25
+ - **`isEmpty` / `isNotEmpty`**:
26
+ - Prefer `expect(list, isEmpty)` over `expect(list.isEmpty, true)`.
27
+ - Prefer `expect(list, isNotEmpty)` over `expect(list.isNotEmpty, true)`.
28
+
29
+ - **`contains(item)`**:
30
+ - Verify existence without manual iteration.
31
+
32
+ - **`unorderedEquals(items)`**:
33
+ - Verify contents regardless of order.
34
+
35
+ ### 2. Type Checks (`isA<T>` and `TypeMatcher<T>`)
36
+
37
+ - **`isA<T>()`**:
38
+ - Prefer for inline assertions: `expect(obj, isA<Type>())`.
39
+ - More concise and readable than `TypeMatcher<Type>()`.
40
+ - Allows chaining constraints using `.having()`.
41
+
42
+ - **`TypeMatcher<T>`**:
43
+ - Prefer when defining top-level reusable matchers.
44
+ - **Use `const`**: `const isMyType = TypeMatcher<MyType>();`
45
+ - Chaining `.having()` works here too, but the resulting matcher is not `const`.
46
+
47
+ ### 3. Object Properties (`having`)
48
+
49
+ Use `.having()` on `isA<T>()` or other TypeMatchers to check properties.
50
+
51
+ - **Descriptive Names**: Use meaningful parameter names in the closure (e.g.,
52
+ `(e) => e.message`) instead of generic ones like `p0` to improve readability.
53
+
54
+ ```dart
55
+ expect(person, isA<Person>()
56
+ .having((p) => p.name, 'name', 'Alice')
57
+ .having((p) => p.age, 'age', greaterThan(18)));
58
+ ```
59
+
60
+ This provides detailed failure messages indicating exactly which property
61
+ failed.
62
+
63
+ ### 4. Async Assertions
64
+
65
+ - **`completion(matcher)`**:
66
+ - Wait for a future to complete and check its value.
67
+ - **Prefer `await expectLater(...)`** to ensure the future completes before
68
+ the test continues.
69
+ - `await expectLater(future, completion(equals(42)))`.
70
+
71
+ - **`throwsA(matcher)`**:
72
+ - Check that a future or function throws an exception.
73
+ - `await expectLater(future, throwsA(isA<StateError>()))`.
74
+ - `expect(() => function(), throwsA(isA<ArgumentError>()))` (synchronous
75
+ function throwing is fine with `expect`).
76
+
77
+ ### 5. Using `expectLater`
78
+
79
+ Use `await expectLater(...)` when testing async behavior to ensure proper
80
+ sequencing.
81
+
82
+ ```dart
83
+ // GOOD: Waits for future to complete before checking side effects
84
+ await expectLater(future, completion(equals(42)));
85
+ expect(sideEffectState, equals('done'));
86
+
87
+ // BAD: Side effect check might run before future completes
88
+ expect(future, completion(equals(42)));
89
+ expect(sideEffectState, equals('done')); // Race condition!
90
+ ```
91
+
92
+ ## Principles
93
+
94
+ 1. **Readable Failures**: Choose matchers that produce clear error messages.
95
+ 2. **Avoid Manual Logic**: Don't use `if` statements or `for` loops for
96
+ assertions; let matchers handle it.
97
+ 3. **Specific Matchers**: Use the most specific matcher available (e.g.,
98
+ `containsPair` for maps instead of checking keys manually).
99
+
100
+ ## Related Skills
101
+
102
+ - **[`dart-test-fundamentals`](../dart-test-fundamentals/SKILL.md)**: Core
103
+ concepts for structuring tests, lifecycles, and configuration.
104
+ - **[`dart-checks-migration`](../dart-checks-migration/SKILL.md)**: Use this
105
+ skill if you are migrating tests from `package:matcher` to modern
106
+ `package:checks`.
@@ -0,0 +1,241 @@
1
+ ---
2
+ name: dart-modern-features
3
+ description: |-
4
+ Guidelines for using modern Dart features (v3.0 - v3.10) such as Records,
5
+ Pattern Matching, Switch Expressions, Extension Types, Class Modifiers,
6
+ Wildcards, Null-Aware Elements, and Dot Shorthands.
7
+ ---
8
+
9
+ # Dart Modern Features
10
+
11
+ ## 1. When to use this skill
12
+ Use this skill when:
13
+ - Writing or reviewing Dart code targeting Dart 3.0 or later.
14
+ - Refactoring legacy Dart code to use modern, concise, and safe features.
15
+ - Looking for idiomatic ways to handle multiple return values, deep data
16
+ extraction, or exhaustive checking.
17
+
18
+ ## 2. Features
19
+
20
+ ### Records
21
+ Use records as anonymous, immutable, aggregate structures to bundle multiple
22
+ objects without defining a custom class. Prefer them for returning multiple
23
+ values from a function or grouping related data temporarily.
24
+
25
+ **Avoid:**
26
+ Creating a dedicated class for simple multiple-value returns.
27
+ ```dart
28
+ class UserResult {
29
+ final String name;
30
+ final int age;
31
+ UserResult(this.name, this.age);
32
+ }
33
+
34
+ UserResult fetchUser() {
35
+ return UserResult('Alice', 42);
36
+ }
37
+ ```
38
+
39
+ **Prefer:**
40
+ Using records to bundle types seamlessly on the fly.
41
+ ```dart
42
+ (String, int) fetchUser() {
43
+ return ('Alice', 42);
44
+ }
45
+
46
+ void main() {
47
+ var user = fetchUser();
48
+ print(user.$1); // Alice
49
+ }
50
+ ```
51
+
52
+ ### Patterns and Pattern Matching
53
+ Use patterns to destructure complex data into local variables and match against
54
+ specific shapes or values. Use them in `switch`, `if-case`, or variable
55
+ declarations to unpack data directly.
56
+
57
+ **Avoid:**
58
+ Manually checking types, nulls, and keys for data extraction.
59
+ ```dart
60
+ void processJson(Map<String, dynamic> json) {
61
+ if (json.containsKey('name') && json['name'] is String &&
62
+ json.containsKey('age') && json['age'] is int) {
63
+ String name = json['name'];
64
+ int age = json['age'];
65
+ print('$name is $age years old.');
66
+ }
67
+ }
68
+ ```
69
+
70
+ **Prefer:**
71
+ Combining type-checking, validation, and assignment into a single statement.
72
+ ```dart
73
+ void processJson(Map<String, dynamic> json) {
74
+ if (json case {'name': String name, 'age': int age}) {
75
+ print('$name is $age years old.');
76
+ }
77
+ }
78
+ ```
79
+
80
+ ### Switch Expressions
81
+ Use switch expressions to return a value directly, eliminating bulky `case` and
82
+ `break` statements.
83
+
84
+ **Avoid:**
85
+ Using switch statements where every branch simply returns or assigns a value.
86
+ ```dart
87
+ String describeStatus(int code) {
88
+ switch (code) {
89
+ case 200:
90
+ return 'Success';
91
+ case 404:
92
+ return 'Not Found';
93
+ default:
94
+ return 'Unknown';
95
+ }
96
+ }
97
+ ```
98
+
99
+ **Prefer:**
100
+ Returning the evaluated expression directly using the `=>` syntax.
101
+ ```dart
102
+ String describeStatus(int code) => switch (code) {
103
+ 200 => 'Success',
104
+ 404 => 'Not Found',
105
+ _ => 'Unknown',
106
+ };
107
+ ```
108
+
109
+ ### Class Modifiers
110
+ Use class modifiers (`sealed`, `final`, `base`, `interface`) to restrict how
111
+ classes can be used outside their defines library. Prefer `sealed` for defining
112
+ closed families of subtypes to enable exhaustive checking.
113
+
114
+ **Avoid:**
115
+ Using open `abstract` classes when the set of subclasses is known and fixed.
116
+ ```dart
117
+ abstract class Result {}
118
+
119
+ class Success extends Result {}
120
+ class Failure extends Result {}
121
+
122
+ String handle(Result r) {
123
+ if (r is Success) return 'OK';
124
+ if (r is Failure) return 'Error';
125
+ return 'Unknown';
126
+ }
127
+ ```
128
+
129
+ **Prefer:**
130
+ Using `sealed` to guarantee to the compiler that all cases are covered.
131
+ ```dart
132
+ sealed class Result {}
133
+
134
+ class Success extends Result {}
135
+ class Failure extends Result {}
136
+
137
+ String handle(Result r) => switch(r) {
138
+ Success() => 'OK',
139
+ Failure() => 'Error',
140
+ };
141
+ ```
142
+
143
+ ### Extension Types
144
+ Use extension types for a zero-cost wrapper around an existing type. Use them to
145
+ restrict operations or add custom behavior without runtime overhead.
146
+
147
+ **Avoid:**
148
+ Allocating new wrapper objects just for domain-specific logic or type safety.
149
+ ```dart
150
+ class Id {
151
+ final int value;
152
+ Id(this.value);
153
+ bool get isValid => value > 0;
154
+ }
155
+ ```
156
+
157
+ **Prefer:**
158
+ Using extension types which compile down to the underlying type at runtime.
159
+ ```dart
160
+ extension type Id(int value) {
161
+ bool get isValid => value > 0;
162
+ }
163
+ ```
164
+
165
+ ### Digit Separators
166
+ Use underscores (`_`) in number literals strictly to improve visual readability
167
+ of large numeric values.
168
+
169
+ **Avoid:**
170
+ Long number literals that are difficult to read at a glance.
171
+ ```dart
172
+ const int oneMillion = 1000000;
173
+ ```
174
+
175
+ **Prefer:**
176
+ Using underscores to separate thousands or other groupings.
177
+ ```dart
178
+ const int oneMillion = 1_000_000;
179
+ ```
180
+
181
+ ### Wildcard Variables
182
+ Use wildcards (`_`) as non-binding variables or parameters to explicitly signal
183
+ that a value is intentionally unused.
184
+
185
+ **Avoid:**
186
+ Inventing clunky, distinct variable names to avoid "unused variable" warnings.
187
+ ```dart
188
+ void handleEvent(String ignoredName, int status) {
189
+ print('Status: $status');
190
+ }
191
+ ```
192
+
193
+ **Prefer:**
194
+ Explicitly dropping the binding with an underscore.
195
+ ```dart
196
+ void handleEvent(String _, int status) {
197
+ print('Status: $status');
198
+ }
199
+ ```
200
+
201
+ ### Null-Aware Elements
202
+ Use null-aware elements (`?`) inside collection literals to conditionally
203
+ include items only if they evaluate to a non-null value.
204
+
205
+ **Avoid:**
206
+ Using collection `if` statements for simple null checks.
207
+ ```dart
208
+ var names = [
209
+ 'Alice',
210
+ if (optionalName != null) optionalName,
211
+ 'Charlie'
212
+ ];
213
+ ```
214
+
215
+ **Prefer:**
216
+ Using the `?` prefix inline.
217
+ ```dart
218
+ var names = ['Alice', ?optionalName, 'Charlie'];
219
+ ```
220
+
221
+ ### Dot Shorthands
222
+ Use dot shorthands to omit the explicit type name when it can be confidently
223
+ inferred from context, such as with enums or static fields.
224
+
225
+ **Avoid:**
226
+ Fully qualifying type names when the type is obvious from the context.
227
+ ```dart
228
+ LogLevel currentLevel = LogLevel.info;
229
+ ```
230
+
231
+ **Prefer:**
232
+ Reducing visual noise with inferred shorthand.
233
+ ```dart
234
+ LogLevel currentLevel = .info;
235
+ ```
236
+
237
+ ## Related Skills
238
+
239
+ - **[`dart-best-practices`](../dart-best-practices/SKILL.md)**: General code
240
+ style and foundational Dart idioms that predate or complement the modern
241
+ syntax features.
@@ -0,0 +1,75 @@
1
+ ---
2
+ name: dart-package-maintenance
3
+ description: |-
4
+ Guidelines for maintaining external Dart packages, covering versioning,
5
+ publishing workflows, and pull request management. Use when updating Dart
6
+ packages, preparing for a release, or managing collaborative changes in a
7
+ repository.
8
+ ---
9
+
10
+ # Dart Package Maintenance
11
+
12
+ Guidelines for maintaining Dart packages in alignment with Dart team best
13
+ practices.
14
+
15
+ ## Versioning
16
+
17
+ ### Semantic Versioning
18
+ - **Major**: Breaking changes.
19
+ - **Minor**: New features (non-breaking API changes).
20
+ - **Patch**: Bug fixes, documentation, or non-impacting changes.
21
+ - **Unstable packages**: Use `0.major.minor+patch`.
22
+ - **Recommendation**: Aim for `1.0.0` as soon as the package is stable.
23
+
24
+ ### Pre-Edit Verification
25
+ - **Check Published Versions**: Before modifying `CHANGELOG.md` or
26
+ `pubspec.yaml`, ALWAYS check the currently released version (e.g., via
27
+ `git tag` or `pub.dev`).
28
+ - **Do Not Amend Released Versions**: Never add new entries to a version header
29
+ that corresponds to a released tag.
30
+ - **Increment for New Changes**: If the current version in `pubspec.yaml`
31
+ matches a released tag, increment the version (e.g., usually to `-wip`) and
32
+ create a new section in `CHANGELOG.md`.
33
+
34
+ - **Consistency**: The `CHANGELOG.md` header must match the new
35
+ `pubspec.yaml` version.
36
+
37
+ - **SemVer Guidelines**:
38
+ - **Breaking Changes**: Bump Major, reset Minor/Patch
39
+ (e.g., `2.0.0-wip`, `0.5.0-wip`).
40
+ - **New Features**: Bump Minor, reset Patch
41
+ (e.g., `1.1.0-wip`, `0.4.5-wip`).
42
+ - **Bug Fixes**: Bump Patch (e.g., `1.0.1-wip`).
43
+
44
+ ### Work-in-Progress (WIP) Versions
45
+ - Immediately after a publish, or on the first change after a publish, update
46
+ `pubspec.yaml` and `CHANGELOG.md` with a `-wip` suffix (e.g., `1.1.0-wip`).
47
+ - This indicates the current state is not yet published.
48
+
49
+ ### Breaking Changes
50
+ - Evaluate the impact on dependent packages and internal projects.
51
+ - Consider running changes through internal presubmits if possible.
52
+ - Prefer incremental rollouts (e.g., new behavior as opt-in) to minimize
53
+ downstream breakage.
54
+
55
+ ## Publishing Process
56
+
57
+ 1. **Preparation**: Remove the `-wip` suffix from `pubspec.yaml` and
58
+ `CHANGELOG.md` in a dedicated pull request.
59
+ 2. **Execution**: Run `dart pub publish` (or `flutter pub publish`) and resolve
60
+ all warnings and errors.
61
+ 3. **Tagging**: Create and push a git tag for the published version:
62
+ - For single-package repos: `v1.2.3`
63
+ - For monorepos: `package_name-v1.2.3`
64
+ - Example: `git tag v1.2.3 && git push --tags`
65
+
66
+ ## Pull Request Management
67
+
68
+ - **Commits**: Each PR should generally correspond to a single squashed commit
69
+ upon merging.
70
+ - **Shared History**: Once a PR is open, avoid force pushing to the branch.
71
+ - **Conflict Resolution**: Prefer merging `main` into the PR branch rather than
72
+ rebasing to resolve conflicts. This preserves the review history and comments.
73
+ - **Reviewing**: Add comments from the "Files changed" view to batch them.
74
+ - **Local Inspection**: Use `gh pr checkout <number>` to inspect changes
75
+ locally in your IDE.
@@ -0,0 +1,124 @@
1
+ ---
2
+ name: dart-test-fundamentals
3
+ description: |-
4
+ Core concepts and best practices for `package:test`.
5
+ Covers `test`, `group`, lifecycle methods (`setUp`, `tearDown`), and configuration (`dart_test.yaml`).
6
+ license: Apache-2.0
7
+ ---
8
+
9
+ # Dart Test Fundamentals
10
+
11
+ ## When to use this skill
12
+ Use this skill when:
13
+ - Writing new test files.
14
+ - structuring test suites with `group`.
15
+ - Configuring test execution via `dart_test.yaml`.
16
+ - Understanding test lifecycle methods.
17
+
18
+ ## Core Concepts
19
+
20
+ ### 1. Test Structure (`test` and `group`)
21
+
22
+ - **`test`**: The fundamental unit of testing.
23
+ ```dart
24
+ test('description', () {
25
+ // assertions
26
+ });
27
+ ```
28
+ - **`group`**: Used to organize tests into logical blocks.
29
+ - Groups can be nested.
30
+ - Descriptions are concatenated (e.g., "Group Description Test Description").
31
+ - Helps scope `setUp` and `tearDown` calls.
32
+ - **Naming**: Use `PascalCase` for groups that correspond to a class name
33
+ (e.g., `group('MyClient', ...)`).
34
+ - **Avoid Single Groups**: Do not wrap all tests in a file with a single
35
+ `group` call if it's the only one.
36
+
37
+ - **Naming Tests**:
38
+ - Avoid redundant "test" prefixes.
39
+ - Include the expected behavior or outcome in the description (e.g.,
40
+ `'throws StateError'` or `'adds API key to URL'`).
41
+ - Descriptions should read well when concatenated with their group name.
42
+
43
+ - **Named Parameters Placement**:
44
+ - For `test` and `group` calls, place named parameters (e.g., `testOn`,
45
+ `timeout`, `skip`) immediately after the description string, before the
46
+ callback closure. This improves readability by keeping the test logic last.
47
+ ```dart
48
+ test('description', testOn: 'vm', () {
49
+ // assertions
50
+ });
51
+ ```
52
+
53
+ ### 2. Lifecycle Methods (`setUp`, `tearDown`)
54
+
55
+ - **`setUp`**: Runs *before* every `test` in the current `group` (and nested
56
+ groups).
57
+ - **`tearDown`**: Runs *after* every `test` in the current `group`.
58
+ - **`setUpAll`**: Runs *once* before any test in the group.
59
+ - **`tearDownAll`**: Runs *once* after all tests in the group.
60
+
61
+ **Best Practice:**
62
+ - Use `setUp` for resetting state to ensure test isolation.
63
+ - Avoid sharing mutable state between tests without resetting it.
64
+
65
+ ### 3. Configuration (`dart_test.yaml`)
66
+
67
+ The `dart_test.yaml` file configures the test runner. Common configurations
68
+ include:
69
+
70
+ #### Platforms
71
+ Define where tests run (vm, chrome, node).
72
+
73
+ ```yaml
74
+ platforms:
75
+ - vm
76
+ - chrome
77
+ ```
78
+
79
+ #### Tags
80
+ Categorize tests to run specific subsets.
81
+
82
+ ```yaml
83
+ tags:
84
+ integration:
85
+ timeout: 2x
86
+ ```
87
+
88
+ Usage in code:
89
+ ```dart
90
+ @Tags(['integration'])
91
+ import 'package:test/test.dart';
92
+ ```
93
+
94
+ Running tags:
95
+ `dart test --tags integration`
96
+
97
+ #### Timeouts
98
+ Set default timeouts for tests.
99
+
100
+ ```yaml
101
+ timeouts:
102
+ 2x # Double the default timeout
103
+ ```
104
+
105
+ ### 4. File Naming
106
+ - Test files **must** end in `_test.dart` to be picked up by the test runner.
107
+ - Place tests in the `test/` directory.
108
+
109
+ ## Common commands
110
+
111
+ - `dart test`: Run all tests.
112
+ - `dart test test/path/to/file_test.dart`: Run a specific file.
113
+ - `dart test --name "substring"`: Run tests matching a description.
114
+
115
+ ## Related Skills
116
+
117
+ `dart-test-fundamentals` is the core skill for structuring and configuring
118
+ tests. For writing assertions within those tests, refer to:
119
+
120
+ - **[`dart-matcher-best-practices`](../dart-matcher-best-practices/SKILL.md)**:
121
+ Use this if the project sticks with the traditional
122
+ `package:matcher` (`expect` calls).
123
+ - **[`dart-checks-migration`](../dart-checks-migration/SKILL.md)**: Use this
124
+ if the project is migrating to the modern `package:checks` (`check` calls).