opencode-skills-collection 3.0.35 → 3.0.37

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 (238) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +15 -1
  2. package/bundled-skills/accesslint-audit/SKILL.md +115 -0
  3. package/bundled-skills/accesslint-diff/SKILL.md +81 -0
  4. package/bundled-skills/accesslint-scan/SKILL.md +47 -0
  5. package/bundled-skills/composition-patterns/SKILL.md +87 -0
  6. package/bundled-skills/composition-patterns/rules/_sections.md +29 -0
  7. package/bundled-skills/composition-patterns/rules/_template.md +24 -0
  8. package/bundled-skills/composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
  9. package/bundled-skills/composition-patterns/rules/architecture-compound-components.md +112 -0
  10. package/bundled-skills/composition-patterns/rules/patterns-children-over-render-props.md +87 -0
  11. package/bundled-skills/composition-patterns/rules/patterns-explicit-variants.md +100 -0
  12. package/bundled-skills/composition-patterns/rules/react19-no-forwardref.md +42 -0
  13. package/bundled-skills/composition-patterns/rules/state-context-interface.md +191 -0
  14. package/bundled-skills/composition-patterns/rules/state-decouple-implementation.md +113 -0
  15. package/bundled-skills/composition-patterns/rules/state-lift-state.md +125 -0
  16. package/bundled-skills/debugging-toolkit/SKILL.md +35 -0
  17. package/bundled-skills/deploy-to-vercel/SKILL.md +304 -0
  18. package/bundled-skills/deploy-to-vercel/resources/deploy-codex.sh +301 -0
  19. package/bundled-skills/deploy-to-vercel/resources/deploy.sh +301 -0
  20. package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
  21. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
  22. package/bundled-skills/docs/maintainers/backups/README-2026-06-02.md +687 -0
  23. package/bundled-skills/docs/maintainers/repo-growth-seo.md +4 -4
  24. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  25. package/bundled-skills/docs/users/bundles.md +245 -1
  26. package/bundled-skills/docs/users/claude-code-skills.md +1 -1
  27. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  28. package/bundled-skills/docs/users/getting-started.md +1 -1
  29. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  30. package/bundled-skills/docs/users/plugins.md +21 -13
  31. package/bundled-skills/docs/users/specialized-plugin-roadmap.md +95 -0
  32. package/bundled-skills/docs/users/usage.md +4 -4
  33. package/bundled-skills/docs/users/visual-guide.md +4 -4
  34. package/bundled-skills/polis-protocol/SKILL.md +93 -0
  35. package/bundled-skills/python-development/SKILL.md +35 -0
  36. package/bundled-skills/radix-ui-design-system/SKILL.md +2 -2
  37. package/bundled-skills/react-native-skills/SKILL.md +120 -0
  38. package/bundled-skills/react-native-skills/rules/_sections.md +86 -0
  39. package/bundled-skills/react-native-skills/rules/_template.md +28 -0
  40. package/bundled-skills/react-native-skills/rules/animation-derived-value.md +53 -0
  41. package/bundled-skills/react-native-skills/rules/animation-gesture-detector-press.md +95 -0
  42. package/bundled-skills/react-native-skills/rules/animation-gpu-properties.md +65 -0
  43. package/bundled-skills/react-native-skills/rules/design-system-compound-components.md +66 -0
  44. package/bundled-skills/react-native-skills/rules/fonts-config-plugin.md +71 -0
  45. package/bundled-skills/react-native-skills/rules/imports-design-system-folder.md +68 -0
  46. package/bundled-skills/react-native-skills/rules/js-hoist-intl.md +61 -0
  47. package/bundled-skills/react-native-skills/rules/list-performance-callbacks.md +44 -0
  48. package/bundled-skills/react-native-skills/rules/list-performance-function-references.md +132 -0
  49. package/bundled-skills/react-native-skills/rules/list-performance-images.md +53 -0
  50. package/bundled-skills/react-native-skills/rules/list-performance-inline-objects.md +97 -0
  51. package/bundled-skills/react-native-skills/rules/list-performance-item-expensive.md +94 -0
  52. package/bundled-skills/react-native-skills/rules/list-performance-item-memo.md +82 -0
  53. package/bundled-skills/react-native-skills/rules/list-performance-item-types.md +104 -0
  54. package/bundled-skills/react-native-skills/rules/list-performance-virtualize.md +67 -0
  55. package/bundled-skills/react-native-skills/rules/monorepo-native-deps-in-app.md +46 -0
  56. package/bundled-skills/react-native-skills/rules/monorepo-single-dependency-versions.md +63 -0
  57. package/bundled-skills/react-native-skills/rules/navigation-native-navigators.md +188 -0
  58. package/bundled-skills/react-native-skills/rules/react-compiler-destructure-functions.md +50 -0
  59. package/bundled-skills/react-native-skills/rules/react-compiler-reanimated-shared-values.md +48 -0
  60. package/bundled-skills/react-native-skills/rules/react-state-dispatcher.md +91 -0
  61. package/bundled-skills/react-native-skills/rules/react-state-fallback.md +56 -0
  62. package/bundled-skills/react-native-skills/rules/react-state-minimize.md +65 -0
  63. package/bundled-skills/react-native-skills/rules/rendering-no-falsy-and.md +74 -0
  64. package/bundled-skills/react-native-skills/rules/rendering-text-in-text-component.md +36 -0
  65. package/bundled-skills/react-native-skills/rules/scroll-position-no-state.md +82 -0
  66. package/bundled-skills/react-native-skills/rules/state-ground-truth.md +80 -0
  67. package/bundled-skills/react-native-skills/rules/ui-expo-image.md +66 -0
  68. package/bundled-skills/react-native-skills/rules/ui-image-gallery.md +104 -0
  69. package/bundled-skills/react-native-skills/rules/ui-measure-views.md +78 -0
  70. package/bundled-skills/react-native-skills/rules/ui-menus.md +174 -0
  71. package/bundled-skills/react-native-skills/rules/ui-native-modals.md +77 -0
  72. package/bundled-skills/react-native-skills/rules/ui-pressable.md +61 -0
  73. package/bundled-skills/react-native-skills/rules/ui-safe-area-scroll.md +65 -0
  74. package/bundled-skills/react-native-skills/rules/ui-scrollview-content-inset.md +45 -0
  75. package/bundled-skills/react-native-skills/rules/ui-styling.md +87 -0
  76. package/bundled-skills/skill-issue/SKILL.md +73 -0
  77. package/bundled-skills/tdd-workflows/SKILL.md +35 -0
  78. package/bundled-skills/vercel-cli-with-tokens/SKILL.md +361 -0
  79. package/bundled-skills/vercel-optimize/CONTRIBUTING.md +41 -0
  80. package/bundled-skills/vercel-optimize/SKILL.md +331 -0
  81. package/bundled-skills/vercel-optimize/lib/auth-route.mjs +23 -0
  82. package/bundled-skills/vercel-optimize/lib/budget-summary.mjs +182 -0
  83. package/bundled-skills/vercel-optimize/lib/citations.mjs +139 -0
  84. package/bundled-skills/vercel-optimize/lib/cost-coverage.mjs +143 -0
  85. package/bundled-skills/vercel-optimize/lib/dedup-recs.mjs +325 -0
  86. package/bundled-skills/vercel-optimize/lib/deep-dive.mjs +350 -0
  87. package/bundled-skills/vercel-optimize/lib/display-labels.mjs +185 -0
  88. package/bundled-skills/vercel-optimize/lib/extract-claims.mjs +550 -0
  89. package/bundled-skills/vercel-optimize/lib/framework-support.mjs +67 -0
  90. package/bundled-skills/vercel-optimize/lib/gates/build-minutes-fanout.mjs +69 -0
  91. package/bundled-skills/vercel-optimize/lib/gates/cold-start.mjs +66 -0
  92. package/bundled-skills/vercel-optimize/lib/gates/contract.mjs +79 -0
  93. package/bundled-skills/vercel-optimize/lib/gates/cwv-poor.mjs +87 -0
  94. package/bundled-skills/vercel-optimize/lib/gates/external-api-slow.mjs +55 -0
  95. package/bundled-skills/vercel-optimize/lib/gates/hard-gates.mjs +73 -0
  96. package/bundled-skills/vercel-optimize/lib/gates/index.mjs +45 -0
  97. package/bundled-skills/vercel-optimize/lib/gates/isr-overrevalidation.mjs +62 -0
  98. package/bundled-skills/vercel-optimize/lib/gates/middleware-heavy.mjs +51 -0
  99. package/bundled-skills/vercel-optimize/lib/gates/observability-events-attribution.mjs +56 -0
  100. package/bundled-skills/vercel-optimize/lib/gates/platform-bot-protection.mjs +115 -0
  101. package/bundled-skills/vercel-optimize/lib/gates/platform-fluid-compute.mjs +83 -0
  102. package/bundled-skills/vercel-optimize/lib/gates/region-misconfig.mjs +64 -0
  103. package/bundled-skills/vercel-optimize/lib/gates/route-errors.mjs +80 -0
  104. package/bundled-skills/vercel-optimize/lib/gates/scanner-driven.mjs +122 -0
  105. package/bundled-skills/vercel-optimize/lib/gates/select-candidates.mjs +134 -0
  106. package/bundled-skills/vercel-optimize/lib/gates/slow-route.mjs +88 -0
  107. package/bundled-skills/vercel-optimize/lib/gates/types.d.ts +38 -0
  108. package/bundled-skills/vercel-optimize/lib/gates/uncached-route.mjs +93 -0
  109. package/bundled-skills/vercel-optimize/lib/gates/usage-spike-triage.mjs +121 -0
  110. package/bundled-skills/vercel-optimize/lib/grade-recommendation.mjs +155 -0
  111. package/bundled-skills/vercel-optimize/lib/impact-label.mjs +126 -0
  112. package/bundled-skills/vercel-optimize/lib/impact-magnitude.mjs +60 -0
  113. package/bundled-skills/vercel-optimize/lib/investigation-brief.mjs +610 -0
  114. package/bundled-skills/vercel-optimize/lib/observation-safety.mjs +174 -0
  115. package/bundled-skills/vercel-optimize/lib/project-facts.mjs +99 -0
  116. package/bundled-skills/vercel-optimize/lib/queries.mjs +315 -0
  117. package/bundled-skills/vercel-optimize/lib/reconcile-candidates.mjs +372 -0
  118. package/bundled-skills/vercel-optimize/lib/render-report.mjs +955 -0
  119. package/bundled-skills/vercel-optimize/lib/repo-root.mjs +86 -0
  120. package/bundled-skills/vercel-optimize/lib/route-normalize.mjs +220 -0
  121. package/bundled-skills/vercel-optimize/lib/sanitizers/bot-protection-certainty.mjs +38 -0
  122. package/bundled-skills/vercel-optimize/lib/sanitizers/cache-tag-invalidation-certainty.mjs +30 -0
  123. package/bundled-skills/vercel-optimize/lib/sanitizers/count-correct.mjs +52 -0
  124. package/bundled-skills/vercel-optimize/lib/sanitizers/function-duration-invocations.mjs +38 -0
  125. package/bundled-skills/vercel-optimize/lib/sanitizers/index.mjs +79 -0
  126. package/bundled-skills/vercel-optimize/lib/sanitizers/middleware-conflict.mjs +36 -0
  127. package/bundled-skills/vercel-optimize/lib/sanitizers/missing-citation.mjs +16 -0
  128. package/bundled-skills/vercel-optimize/lib/sanitizers/pre-release.mjs +74 -0
  129. package/bundled-skills/vercel-optimize/lib/sanitizers/rate-limit.mjs +67 -0
  130. package/bundled-skills/vercel-optimize/lib/sanitizers/rendering-mode-mislabel.mjs +38 -0
  131. package/bundled-skills/vercel-optimize/lib/sanitizers/undeclared-dep.mjs +78 -0
  132. package/bundled-skills/vercel-optimize/lib/sanitizers/vercel-directive-strip.mjs +37 -0
  133. package/bundled-skills/vercel-optimize/lib/sanitizers/window-units.mjs +32 -0
  134. package/bundled-skills/vercel-optimize/lib/scanners/cache-components-suspense-dedupe.mjs +109 -0
  135. package/bundled-skills/vercel-optimize/lib/scanners/edge-heavy-import.mjs +94 -0
  136. package/bundled-skills/vercel-optimize/lib/scanners/force-dynamic.mjs +42 -0
  137. package/bundled-skills/vercel-optimize/lib/scanners/headers-in-page.mjs +44 -0
  138. package/bundled-skills/vercel-optimize/lib/scanners/index.mjs +35 -0
  139. package/bundled-skills/vercel-optimize/lib/scanners/large-static-asset.mjs +92 -0
  140. package/bundled-skills/vercel-optimize/lib/scanners/max-age-without-s-maxage.mjs +42 -0
  141. package/bundled-skills/vercel-optimize/lib/scanners/middleware-broad-matcher.mjs +55 -0
  142. package/bundled-skills/vercel-optimize/lib/scanners/missing-cache-headers.mjs +90 -0
  143. package/bundled-skills/vercel-optimize/lib/scanners/prisma-include-tree.mjs +42 -0
  144. package/bundled-skills/vercel-optimize/lib/scanners/region-pin-in-config.mjs +88 -0
  145. package/bundled-skills/vercel-optimize/lib/scanners/source-maps-production.mjs +36 -0
  146. package/bundled-skills/vercel-optimize/lib/scanners/sveltekit-prerender-missing.mjs +43 -0
  147. package/bundled-skills/vercel-optimize/lib/scanners/turbo-force-bypass.mjs +129 -0
  148. package/bundled-skills/vercel-optimize/lib/scanners/unoptimized-image.mjs +113 -0
  149. package/bundled-skills/vercel-optimize/lib/scanners/use-cache-date-stamp.mjs +106 -0
  150. package/bundled-skills/vercel-optimize/lib/support-topics.mjs +355 -0
  151. package/bundled-skills/vercel-optimize/lib/throttle.mjs +273 -0
  152. package/bundled-skills/vercel-optimize/lib/util.mjs +17 -0
  153. package/bundled-skills/vercel-optimize/lib/vercel.mjs +784 -0
  154. package/bundled-skills/vercel-optimize/lib/verify-claim.mjs +1296 -0
  155. package/bundled-skills/vercel-optimize/lib/workspace-resolver.mjs +521 -0
  156. package/bundled-skills/vercel-optimize/references/candidates.md +176 -0
  157. package/bundled-skills/vercel-optimize/references/data-collection.md +218 -0
  158. package/bundled-skills/vercel-optimize/references/docs-library.json +683 -0
  159. package/bundled-skills/vercel-optimize/references/doctrine.md +105 -0
  160. package/bundled-skills/vercel-optimize/references/observability-plus.md +108 -0
  161. package/bundled-skills/vercel-optimize/references/playbooks/README.md +53 -0
  162. package/bundled-skills/vercel-optimize/references/playbooks/ai-application.md +32 -0
  163. package/bundled-skills/vercel-optimize/references/playbooks/api-service.md +30 -0
  164. package/bundled-skills/vercel-optimize/references/playbooks/content-site.md +30 -0
  165. package/bundled-skills/vercel-optimize/references/playbooks/ecommerce.md +30 -0
  166. package/bundled-skills/vercel-optimize/references/playbooks/marketing.md +30 -0
  167. package/bundled-skills/vercel-optimize/references/playbooks/saas.md +31 -0
  168. package/bundled-skills/vercel-optimize/references/playbooks/sveltekit.md +75 -0
  169. package/bundled-skills/vercel-optimize/references/recommendations.md +203 -0
  170. package/bundled-skills/vercel-optimize/references/scanner-patterns.md +251 -0
  171. package/bundled-skills/vercel-optimize/references/scoring.md +205 -0
  172. package/bundled-skills/vercel-optimize/references/support-topics/README.md +46 -0
  173. package/bundled-skills/vercel-optimize/references/support-topics/astro-edge-middleware-scope.md +22 -0
  174. package/bundled-skills/vercel-optimize/references/support-topics/astro-output-mode-and-isr.md +22 -0
  175. package/bundled-skills/vercel-optimize/references/support-topics/auth-preserving-parallelization.md +22 -0
  176. package/bundled-skills/vercel-optimize/references/support-topics/bot-protection-product-guardrails.md +22 -0
  177. package/bundled-skills/vercel-optimize/references/support-topics/build-minutes-monorepo-fanout.md +23 -0
  178. package/bundled-skills/vercel-optimize/references/support-topics/cache-components-static-shell-boundaries.md +22 -0
  179. package/bundled-skills/vercel-optimize/references/support-topics/cache-components-suspense-dedupe-pitfall.md +23 -0
  180. package/bundled-skills/vercel-optimize/references/support-topics/cdn-cache-auth-safety.md +22 -0
  181. package/bundled-skills/vercel-optimize/references/support-topics/cold-start-initialization-bundle.md +22 -0
  182. package/bundled-skills/vercel-optimize/references/support-topics/core-web-vitals-client-bottlenecks.md +22 -0
  183. package/bundled-skills/vercel-optimize/references/support-topics/database-egress-pooling-region.md +22 -0
  184. package/bundled-skills/vercel-optimize/references/support-topics/dynamic-rendering-traps.md +22 -0
  185. package/bundled-skills/vercel-optimize/references/support-topics/external-api-critical-path-platform.md +22 -0
  186. package/bundled-skills/vercel-optimize/references/support-topics/external-api-critical-path.md +22 -0
  187. package/bundled-skills/vercel-optimize/references/support-topics/fast-data-transfer-payloads.md +22 -0
  188. package/bundled-skills/vercel-optimize/references/support-topics/fluid-compute-caveats.md +22 -0
  189. package/bundled-skills/vercel-optimize/references/support-topics/function-duration-io-and-after.md +22 -0
  190. package/bundled-skills/vercel-optimize/references/support-topics/function-invocation-reduction.md +22 -0
  191. package/bundled-skills/vercel-optimize/references/support-topics/function-region-misconfiguration-ttfb.md +23 -0
  192. package/bundled-skills/vercel-optimize/references/support-topics/image-optimization-cost-control.md +22 -0
  193. package/bundled-skills/vercel-optimize/references/support-topics/isr-revalidation-static-generation.md +22 -0
  194. package/bundled-skills/vercel-optimize/references/support-topics/middleware-proxy-edge-cost.md +22 -0
  195. package/bundled-skills/vercel-optimize/references/support-topics/next-fetch-revalidate-floor.md +22 -0
  196. package/bundled-skills/vercel-optimize/references/support-topics/next-font-cls-self-hosting.md +23 -0
  197. package/bundled-skills/vercel-optimize/references/support-topics/next-heavy-ui-lazy-load-boundaries.md +23 -0
  198. package/bundled-skills/vercel-optimize/references/support-topics/next-image-lcp-preload-sizes.md +23 -0
  199. package/bundled-skills/vercel-optimize/references/support-topics/next-route-handler-get-cache-defaults.md +22 -0
  200. package/bundled-skills/vercel-optimize/references/support-topics/next-script-third-party-strategy.md +23 -0
  201. package/bundled-skills/vercel-optimize/references/support-topics/nextjs-version-cache-semantics.md +22 -0
  202. package/bundled-skills/vercel-optimize/references/support-topics/not-found-catchall-request-waste.md +23 -0
  203. package/bundled-skills/vercel-optimize/references/support-topics/nuxt-route-rules-cache-isr.md +22 -0
  204. package/bundled-skills/vercel-optimize/references/support-topics/observability-events-cost-attribution.md +22 -0
  205. package/bundled-skills/vercel-optimize/references/support-topics/post-response-work-waituntil.md +22 -0
  206. package/bundled-skills/vercel-optimize/references/support-topics/route-error-durable-offload.md +22 -0
  207. package/bundled-skills/vercel-optimize/references/support-topics/route-error-runtime-limits.md +22 -0
  208. package/bundled-skills/vercel-optimize/references/support-topics/runtime-cache-reusable-data.md +22 -0
  209. package/bundled-skills/vercel-optimize/references/support-topics/sveltekit-isr-prerender-safety.md +22 -0
  210. package/bundled-skills/vercel-optimize/references/support-topics/sveltekit-split-cold-start-tradeoff.md +22 -0
  211. package/bundled-skills/vercel-optimize/references/support-topics/usage-spike-triage.md +22 -0
  212. package/bundled-skills/vercel-optimize/references/support-topics/use-cache-date-stamp-isr-write-amplifier.md +23 -0
  213. package/bundled-skills/vercel-optimize/references/support-topics/use-cache-remote-shared-origin-data.md +22 -0
  214. package/bundled-skills/vercel-optimize/references/support-topics/workflow-resumable-stream-routes.md +23 -0
  215. package/bundled-skills/vercel-optimize/references/verification.md +102 -0
  216. package/bundled-skills/vercel-optimize/references/voice.md +76 -0
  217. package/bundled-skills/vercel-optimize/scripts/budget-summary.mjs +56 -0
  218. package/bundled-skills/vercel-optimize/scripts/build-docs.mjs +74 -0
  219. package/bundled-skills/vercel-optimize/scripts/check-citations.mjs +81 -0
  220. package/bundled-skills/vercel-optimize/scripts/check-docs-fresh.mjs +93 -0
  221. package/bundled-skills/vercel-optimize/scripts/collect-signals.mjs +576 -0
  222. package/bundled-skills/vercel-optimize/scripts/collect-sub-agent-outputs.mjs +296 -0
  223. package/bundled-skills/vercel-optimize/scripts/deep-dive.mjs +319 -0
  224. package/bundled-skills/vercel-optimize/scripts/gate-investigations.mjs +166 -0
  225. package/bundled-skills/vercel-optimize/scripts/merge-signals.mjs +192 -0
  226. package/bundled-skills/vercel-optimize/scripts/prepare-investigation-brief.mjs +231 -0
  227. package/bundled-skills/vercel-optimize/scripts/reconcile-candidates.mjs +62 -0
  228. package/bundled-skills/vercel-optimize/scripts/render-report.mjs +437 -0
  229. package/bundled-skills/vercel-optimize/scripts/scan-codebase.mjs +313 -0
  230. package/bundled-skills/vercel-optimize/scripts/verify-and-regen.mjs +346 -0
  231. package/bundled-skills/vercel-optimize/scripts/verify-finding.mjs +19 -0
  232. package/bundled-skills/vercel-react-view-transitions/SKILL.md +327 -0
  233. package/bundled-skills/vercel-react-view-transitions/references/css-recipes.md +242 -0
  234. package/bundled-skills/vercel-react-view-transitions/references/implementation.md +182 -0
  235. package/bundled-skills/vercel-react-view-transitions/references/nextjs.md +176 -0
  236. package/bundled-skills/vercel-react-view-transitions/references/patterns.md +262 -0
  237. package/package.json +2 -2
  238. package/skills_index.json +312 -0
@@ -0,0 +1,174 @@
1
+ ---
2
+ title: Use Native Menus for Dropdowns and Context Menus
3
+ impact: HIGH
4
+ impactDescription: native accessibility, platform-consistent UX
5
+ tags: user-interface, menus, context-menus, zeego, accessibility
6
+ ---
7
+
8
+ ## Use Native Menus for Dropdowns and Context Menus
9
+
10
+ Use native platform menus instead of custom JS implementations. Native menus
11
+ provide built-in accessibility, consistent platform UX, and better performance.
12
+ Use [zeego](https://zeego.dev) for cross-platform native menus.
13
+
14
+ **Incorrect (custom JS menu):**
15
+
16
+ ```tsx
17
+ import { useState } from 'react'
18
+ import { View, Pressable, Text } from 'react-native'
19
+
20
+ function MyMenu() {
21
+ const [open, setOpen] = useState(false)
22
+
23
+ return (
24
+ <View>
25
+ <Pressable onPress={() => setOpen(!open)}>
26
+ <Text>Open Menu</Text>
27
+ </Pressable>
28
+ {open && (
29
+ <View style={{ position: 'absolute', top: 40 }}>
30
+ <Pressable onPress={() => console.log('edit')}>
31
+ <Text>Edit</Text>
32
+ </Pressable>
33
+ <Pressable onPress={() => console.log('delete')}>
34
+ <Text>Delete</Text>
35
+ </Pressable>
36
+ </View>
37
+ )}
38
+ </View>
39
+ )
40
+ }
41
+ ```
42
+
43
+ **Correct (native menu with zeego):**
44
+
45
+ ```tsx
46
+ import * as DropdownMenu from 'zeego/dropdown-menu'
47
+
48
+ function MyMenu() {
49
+ return (
50
+ <DropdownMenu.Root>
51
+ <DropdownMenu.Trigger>
52
+ <Pressable>
53
+ <Text>Open Menu</Text>
54
+ </Pressable>
55
+ </DropdownMenu.Trigger>
56
+
57
+ <DropdownMenu.Content>
58
+ <DropdownMenu.Item key='edit' onSelect={() => console.log('edit')}>
59
+ <DropdownMenu.ItemTitle>Edit</DropdownMenu.ItemTitle>
60
+ </DropdownMenu.Item>
61
+
62
+ <DropdownMenu.Item
63
+ key='delete'
64
+ destructive
65
+ onSelect={() => console.log('delete')}
66
+ >
67
+ <DropdownMenu.ItemTitle>Delete</DropdownMenu.ItemTitle>
68
+ </DropdownMenu.Item>
69
+ </DropdownMenu.Content>
70
+ </DropdownMenu.Root>
71
+ )
72
+ }
73
+ ```
74
+
75
+ **Context menu (long-press):**
76
+
77
+ ```tsx
78
+ import * as ContextMenu from 'zeego/context-menu'
79
+
80
+ function MyContextMenu() {
81
+ return (
82
+ <ContextMenu.Root>
83
+ <ContextMenu.Trigger>
84
+ <View style={{ padding: 20 }}>
85
+ <Text>Long press me</Text>
86
+ </View>
87
+ </ContextMenu.Trigger>
88
+
89
+ <ContextMenu.Content>
90
+ <ContextMenu.Item key='copy' onSelect={() => console.log('copy')}>
91
+ <ContextMenu.ItemTitle>Copy</ContextMenu.ItemTitle>
92
+ </ContextMenu.Item>
93
+
94
+ <ContextMenu.Item key='paste' onSelect={() => console.log('paste')}>
95
+ <ContextMenu.ItemTitle>Paste</ContextMenu.ItemTitle>
96
+ </ContextMenu.Item>
97
+ </ContextMenu.Content>
98
+ </ContextMenu.Root>
99
+ )
100
+ }
101
+ ```
102
+
103
+ **Checkbox items:**
104
+
105
+ ```tsx
106
+ import * as DropdownMenu from 'zeego/dropdown-menu'
107
+
108
+ function SettingsMenu() {
109
+ const [notifications, setNotifications] = useState(true)
110
+
111
+ return (
112
+ <DropdownMenu.Root>
113
+ <DropdownMenu.Trigger>
114
+ <Pressable>
115
+ <Text>Settings</Text>
116
+ </Pressable>
117
+ </DropdownMenu.Trigger>
118
+
119
+ <DropdownMenu.Content>
120
+ <DropdownMenu.CheckboxItem
121
+ key='notifications'
122
+ value={notifications}
123
+ onValueChange={() => setNotifications((prev) => !prev)}
124
+ >
125
+ <DropdownMenu.ItemIndicator />
126
+ <DropdownMenu.ItemTitle>Notifications</DropdownMenu.ItemTitle>
127
+ </DropdownMenu.CheckboxItem>
128
+ </DropdownMenu.Content>
129
+ </DropdownMenu.Root>
130
+ )
131
+ }
132
+ ```
133
+
134
+ **Submenus:**
135
+
136
+ ```tsx
137
+ import * as DropdownMenu from 'zeego/dropdown-menu'
138
+
139
+ function MenuWithSubmenu() {
140
+ return (
141
+ <DropdownMenu.Root>
142
+ <DropdownMenu.Trigger>
143
+ <Pressable>
144
+ <Text>Options</Text>
145
+ </Pressable>
146
+ </DropdownMenu.Trigger>
147
+
148
+ <DropdownMenu.Content>
149
+ <DropdownMenu.Item key='home' onSelect={() => console.log('home')}>
150
+ <DropdownMenu.ItemTitle>Home</DropdownMenu.ItemTitle>
151
+ </DropdownMenu.Item>
152
+
153
+ <DropdownMenu.Sub>
154
+ <DropdownMenu.SubTrigger key='more'>
155
+ <DropdownMenu.ItemTitle>More Options</DropdownMenu.ItemTitle>
156
+ </DropdownMenu.SubTrigger>
157
+
158
+ <DropdownMenu.SubContent>
159
+ <DropdownMenu.Item key='settings'>
160
+ <DropdownMenu.ItemTitle>Settings</DropdownMenu.ItemTitle>
161
+ </DropdownMenu.Item>
162
+
163
+ <DropdownMenu.Item key='help'>
164
+ <DropdownMenu.ItemTitle>Help</DropdownMenu.ItemTitle>
165
+ </DropdownMenu.Item>
166
+ </DropdownMenu.SubContent>
167
+ </DropdownMenu.Sub>
168
+ </DropdownMenu.Content>
169
+ </DropdownMenu.Root>
170
+ )
171
+ }
172
+ ```
173
+
174
+ Reference: [Zeego Documentation](https://zeego.dev/components/dropdown-menu)
@@ -0,0 +1,77 @@
1
+ ---
2
+ title: Use Native Modals Over JS-Based Bottom Sheets
3
+ impact: HIGH
4
+ impactDescription: native performance, gestures, accessibility
5
+ tags: modals, bottom-sheet, native, react-navigation
6
+ ---
7
+
8
+ ## Use Native Modals Over JS-Based Bottom Sheets
9
+
10
+ Use native `<Modal>` with `presentationStyle="formSheet"` or React Navigation
11
+ v7's native form sheet instead of JS-based bottom sheet libraries. Native modals
12
+ have built-in gestures, accessibility, and better performance. Rely on native UI
13
+ for low-level primitives.
14
+
15
+ **Incorrect (JS-based bottom sheet):**
16
+
17
+ ```tsx
18
+ import BottomSheet from 'custom-js-bottom-sheet'
19
+
20
+ function MyScreen() {
21
+ const sheetRef = useRef<BottomSheet>(null)
22
+
23
+ return (
24
+ <View style={{ flex: 1 }}>
25
+ <Button onPress={() => sheetRef.current?.expand()} title='Open' />
26
+ <BottomSheet ref={sheetRef} snapPoints={['50%', '90%']}>
27
+ <View>
28
+ <Text>Sheet content</Text>
29
+ </View>
30
+ </BottomSheet>
31
+ </View>
32
+ )
33
+ }
34
+ ```
35
+
36
+ **Correct (native Modal with formSheet):**
37
+
38
+ ```tsx
39
+ import { Modal, View, Text, Button } from 'react-native'
40
+
41
+ function MyScreen() {
42
+ const [visible, setVisible] = useState(false)
43
+
44
+ return (
45
+ <View style={{ flex: 1 }}>
46
+ <Button onPress={() => setVisible(true)} title='Open' />
47
+ <Modal
48
+ visible={visible}
49
+ presentationStyle='formSheet'
50
+ animationType='slide'
51
+ onRequestClose={() => setVisible(false)}
52
+ >
53
+ <View>
54
+ <Text>Sheet content</Text>
55
+ </View>
56
+ </Modal>
57
+ </View>
58
+ )
59
+ }
60
+ ```
61
+
62
+ **Correct (React Navigation v7 native form sheet):**
63
+
64
+ ```tsx
65
+ // In your navigator
66
+ <Stack.Screen
67
+ name='Details'
68
+ component={DetailsScreen}
69
+ options={{
70
+ presentation: 'formSheet',
71
+ sheetAllowedDetents: 'fitToContents',
72
+ }}
73
+ />
74
+ ```
75
+
76
+ Native modals provide swipe-to-dismiss, proper keyboard avoidance, and
77
+ accessibility out of the box.
@@ -0,0 +1,61 @@
1
+ ---
2
+ title: Use Pressable Instead of Touchable Components
3
+ impact: LOW
4
+ impactDescription: modern API, more flexible
5
+ tags: ui, pressable, touchable, gestures
6
+ ---
7
+
8
+ ## Use Pressable Instead of Touchable Components
9
+
10
+ Never use `TouchableOpacity` or `TouchableHighlight`. Use `Pressable` from
11
+ `react-native` or `react-native-gesture-handler` instead.
12
+
13
+ **Incorrect (legacy Touchable components):**
14
+
15
+ ```tsx
16
+ import { TouchableOpacity } from 'react-native'
17
+
18
+ function MyButton({ onPress }: { onPress: () => void }) {
19
+ return (
20
+ <TouchableOpacity onPress={onPress} activeOpacity={0.7}>
21
+ <Text>Press me</Text>
22
+ </TouchableOpacity>
23
+ )
24
+ }
25
+ ```
26
+
27
+ **Correct (Pressable):**
28
+
29
+ ```tsx
30
+ import { Pressable } from 'react-native'
31
+
32
+ function MyButton({ onPress }: { onPress: () => void }) {
33
+ return (
34
+ <Pressable onPress={onPress}>
35
+ <Text>Press me</Text>
36
+ </Pressable>
37
+ )
38
+ }
39
+ ```
40
+
41
+ **Correct (Pressable from gesture handler for lists):**
42
+
43
+ ```tsx
44
+ import { Pressable } from 'react-native-gesture-handler'
45
+
46
+ function ListItem({ onPress }: { onPress: () => void }) {
47
+ return (
48
+ <Pressable onPress={onPress}>
49
+ <Text>Item</Text>
50
+ </Pressable>
51
+ )
52
+ }
53
+ ```
54
+
55
+ Use `react-native-gesture-handler` Pressable inside scrollable lists for better
56
+ gesture coordination, as long as you are using the ScrollView from
57
+ `react-native-gesture-handler` as well.
58
+
59
+ **For animated press states (scale, opacity changes):** Use `GestureDetector`
60
+ with Reanimated shared values instead of Pressable's style callback. See the
61
+ `animation-gesture-detector-press` rule.
@@ -0,0 +1,65 @@
1
+ ---
2
+ title: Use contentInsetAdjustmentBehavior for Safe Areas
3
+ impact: MEDIUM
4
+ impactDescription: native safe area handling, no layout shifts
5
+ tags: safe-area, scrollview, layout
6
+ ---
7
+
8
+ ## Use contentInsetAdjustmentBehavior for Safe Areas
9
+
10
+ Use `contentInsetAdjustmentBehavior="automatic"` on the root ScrollView instead of wrapping content in SafeAreaView or manual padding. This lets iOS handle safe area insets natively with proper scroll behavior.
11
+
12
+ **Incorrect (SafeAreaView wrapper):**
13
+
14
+ ```tsx
15
+ import { SafeAreaView, ScrollView, View, Text } from 'react-native'
16
+
17
+ function MyScreen() {
18
+ return (
19
+ <SafeAreaView style={{ flex: 1 }}>
20
+ <ScrollView>
21
+ <View>
22
+ <Text>Content</Text>
23
+ </View>
24
+ </ScrollView>
25
+ </SafeAreaView>
26
+ )
27
+ }
28
+ ```
29
+
30
+ **Incorrect (manual safe area padding):**
31
+
32
+ ```tsx
33
+ import { ScrollView, View, Text } from 'react-native'
34
+ import { useSafeAreaInsets } from 'react-native-safe-area-context'
35
+
36
+ function MyScreen() {
37
+ const insets = useSafeAreaInsets()
38
+
39
+ return (
40
+ <ScrollView contentContainerStyle={{ paddingTop: insets.top }}>
41
+ <View>
42
+ <Text>Content</Text>
43
+ </View>
44
+ </ScrollView>
45
+ )
46
+ }
47
+ ```
48
+
49
+ **Correct (native content inset adjustment):**
50
+
51
+ ```tsx
52
+ import { ScrollView, View, Text } from 'react-native'
53
+
54
+ function MyScreen() {
55
+ return (
56
+ <ScrollView contentInsetAdjustmentBehavior='automatic'>
57
+ <View>
58
+ <Text>Content</Text>
59
+ </View>
60
+ </ScrollView>
61
+ )
62
+ }
63
+ ```
64
+
65
+ The native approach handles dynamic safe areas (keyboard, toolbars) and allows content to scroll behind the status bar naturally.
@@ -0,0 +1,45 @@
1
+ ---
2
+ title: Use contentInset for Dynamic ScrollView Spacing
3
+ impact: LOW
4
+ impactDescription: smoother updates, no layout recalculation
5
+ tags: scrollview, layout, contentInset, performance
6
+ ---
7
+
8
+ ## Use contentInset for Dynamic ScrollView Spacing
9
+
10
+ When adding space to the top or bottom of a ScrollView that may change
11
+ (keyboard, toolbars, dynamic content), use `contentInset` instead of padding.
12
+ Changing `contentInset` doesn't trigger layout recalculation—it adjusts the
13
+ scroll area without re-rendering content.
14
+
15
+ **Incorrect (padding causes layout recalculation):**
16
+
17
+ ```tsx
18
+ function Feed({ bottomOffset }: { bottomOffset: number }) {
19
+ return (
20
+ <ScrollView contentContainerStyle={{ paddingBottom: bottomOffset }}>
21
+ {children}
22
+ </ScrollView>
23
+ )
24
+ }
25
+ // Changing bottomOffset triggers full layout recalculation
26
+ ```
27
+
28
+ **Correct (contentInset for dynamic spacing):**
29
+
30
+ ```tsx
31
+ function Feed({ bottomOffset }: { bottomOffset: number }) {
32
+ return (
33
+ <ScrollView
34
+ contentInset={{ bottom: bottomOffset }}
35
+ scrollIndicatorInsets={{ bottom: bottomOffset }}
36
+ >
37
+ {children}
38
+ </ScrollView>
39
+ )
40
+ }
41
+ // Changing bottomOffset only adjusts scroll bounds
42
+ ```
43
+
44
+ Use `scrollIndicatorInsets` alongside `contentInset` to keep the scroll
45
+ indicator aligned. For static spacing that never changes, padding is fine.
@@ -0,0 +1,87 @@
1
+ ---
2
+ title: Modern React Native Styling Patterns
3
+ impact: MEDIUM
4
+ impactDescription: consistent design, smoother borders, cleaner layouts
5
+ tags: styling, css, layout, shadows, gradients
6
+ ---
7
+
8
+ ## Modern React Native Styling Patterns
9
+
10
+ Follow these styling patterns for cleaner, more consistent React Native code.
11
+
12
+ **Always use `borderCurve: 'continuous'` with `borderRadius`:**
13
+
14
+ ```tsx
15
+ // Incorrect
16
+ { borderRadius: 12 }
17
+
18
+ // Correct – smoother iOS-style corners
19
+ { borderRadius: 12, borderCurve: 'continuous' }
20
+ ```
21
+
22
+ **Use `gap` instead of margin for spacing between elements:**
23
+
24
+ ```tsx
25
+ // Incorrect – margin on children
26
+ <View>
27
+ <Text style={{ marginBottom: 8 }}>Title</Text>
28
+ <Text style={{ marginBottom: 8 }}>Subtitle</Text>
29
+ </View>
30
+
31
+ // Correct – gap on parent
32
+ <View style={{ gap: 8 }}>
33
+ <Text>Title</Text>
34
+ <Text>Subtitle</Text>
35
+ </View>
36
+ ```
37
+
38
+ **Use `padding` for space within, `gap` for space between:**
39
+
40
+ ```tsx
41
+ <View style={{ padding: 16, gap: 12 }}>
42
+ <Text>First</Text>
43
+ <Text>Second</Text>
44
+ </View>
45
+ ```
46
+
47
+ **Use `experimental_backgroundImage` for linear gradients:**
48
+
49
+ ```tsx
50
+ // Incorrect – third-party gradient library
51
+ <LinearGradient colors={['#000', '#fff']} />
52
+
53
+ // Correct – native CSS gradient syntax
54
+ <View
55
+ style={{
56
+ experimental_backgroundImage: 'linear-gradient(to bottom, #000, #fff)',
57
+ }}
58
+ />
59
+ ```
60
+
61
+ **Use CSS `boxShadow` string syntax for shadows:**
62
+
63
+ ```tsx
64
+ // Incorrect – legacy shadow objects or elevation
65
+ { shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.1 }
66
+ { elevation: 4 }
67
+
68
+ // Correct – CSS box-shadow syntax
69
+ { boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)' }
70
+ ```
71
+
72
+ **Avoid multiple font sizes – use weight and color for emphasis:**
73
+
74
+ ```tsx
75
+ // Incorrect – varying font sizes for hierarchy
76
+ <Text style={{ fontSize: 18 }}>Title</Text>
77
+ <Text style={{ fontSize: 14 }}>Subtitle</Text>
78
+ <Text style={{ fontSize: 12 }}>Caption</Text>
79
+
80
+ // Correct – consistent size, vary weight and color
81
+ <Text style={{ fontWeight: '600' }}>Title</Text>
82
+ <Text style={{ color: '#666' }}>Subtitle</Text>
83
+ <Text style={{ color: '#999' }}>Caption</Text>
84
+ ```
85
+
86
+ Limiting font sizes creates visual consistency. Use `fontWeight` (bold/semibold)
87
+ and grayscale colors for hierarchy instead.
@@ -0,0 +1,73 @@
1
+ ---
2
+ id: skill-issue
3
+ name: skill-issue
4
+ description: "Find out why a coding-agent skill won't fire — grade each SKILL.md A–F on activation, simulate which skill a prompt triggers, and flag collisions where one silently shadows another."
5
+ category: meta
6
+ risk: safe
7
+ source: community
8
+ source_repo: mishanefedov/skill-issue
9
+ source_type: community
10
+ date_added: "2026-06-02"
11
+ author: mishanefedov
12
+ tags: [skills, linter, activation, meta, ci]
13
+ tools: [claude, cursor, gemini, codex]
14
+ license: "MIT"
15
+ license_source: "https://github.com/mishanefedov/skill-issue/blob/main/LICENSE"
16
+ ---
17
+
18
+ # skill-issue — skill activation audit
19
+
20
+ ## Overview
21
+
22
+ A coding agent decides which skill to run from each skill's always-on `name` +
23
+ `description`. A skill can be perfectly implemented and still never fire because
24
+ its description is too vague to match how people phrase requests, or because a
25
+ more specific sibling silently wins. `skill-issue` audits exactly that surface,
26
+ grading each skill A–F, simulating which skill fires for a given prompt, and
27
+ reporting collision clusters where one skill shadows another.
28
+
29
+ ## When to Use This Skill
30
+
31
+ - Use when a skill you wrote never seems to trigger and you don't know why
32
+ - Use when the user says "why isn't my skill firing", "which skill fires for X", or "audit my skills"
33
+ - Use after writing or installing a new SKILL.md, to confirm it will actually be picked
34
+ - Use in CI to fail a PR that adds a skill with empty/duplicate/colliding metadata
35
+
36
+ ## How It Works
37
+
38
+ Install the CLI (`npm i -g @misha_misha/skill-issue`, `brew install mishanefedov/skill-issue/skill-issue`, or `npx @misha_misha/skill-issue`), then:
39
+
40
+ ```bash
41
+ skill-issue ~/.claude/skills # grade every skill A–F (+ collisions summary)
42
+ skill-issue ~/.codex/skills --why "deploy to prod" # which skill fires for this prompt, and why
43
+ skill-issue <dir> --collisions # clusters of skills that shadow each other
44
+ skill-issue <dir> --fix # append a "Use when …" clause to weak descriptions
45
+ skill-issue <dir> --json # machine-readable; exits non-zero on errors
46
+ ```
47
+
48
+ Offline heuristic by default; add `--llm` to judge with a local `claude`/`codex` CLI.
49
+
50
+ ## Examples
51
+
52
+ ### Example 1: Audit installed skills
53
+
54
+ ```bash
55
+ skill-issue ~/.claude/skills
56
+ # F deploy-helper ✗ no description — can never fire
57
+ # C shipit ! no "use when …" trigger clause
58
+ # A rollback-prod ✓ will fire on its triggers
59
+ ```
60
+
61
+ ### Example 2: Diagnose a collision
62
+
63
+ ```bash
64
+ skill-issue ~/.claude/skills --why "deploy the app to prod"
65
+ # 1. shipit 0.74 ← would fire
66
+ # 2. land-deploy 0.69 (margin 0.05 — ambiguous, likely collision)
67
+ ```
68
+
69
+ ## Limitations
70
+
71
+ - Offline scoring is heuristic and should be treated as a triage signal, not a final quality verdict.
72
+ - Collision reports highlight likely shadowing, but agent-specific routers can weight metadata differently.
73
+ - The `--fix` mode can improve weak trigger wording, but generated edits still need maintainer review before committing.
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: tdd-workflows
3
+ description: "Use when working with tdd workflows tdd cycle (Alias for tdd-workflows-tdd-cycle)"
4
+ risk: unknown
5
+ source: "alias"
6
+ date_added: "2026-06-02"
7
+ ---
8
+
9
+ # Tdd Workflows
10
+
11
+ > **This is an alias.** The canonical skill is **`tdd-workflows-tdd-cycle`**.
12
+
13
+ This skill redirects to `tdd-workflows-tdd-cycle`. Load it from the vault:
14
+
15
+ `skill-libraries/testing/tdd-workflows-tdd-cycle/SKILL.md`
16
+
17
+ ## When to Use
18
+ - Use this skill when working with tdd workflows tdd cycle (Alias for tdd-workflows-tdd-cycle)
19
+
20
+ ## Why this alias exists
21
+
22
+ Users commonly search for `tdd-workflows` but the full skill name in this collection is `tdd-workflows-tdd-cycle`. This alias ensures discoverability.
23
+
24
+ ## Limitations
25
+ - Use this skill only when the task clearly matches the scope described above.
26
+ - Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
27
+ - Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
28
+
29
+ ## Examples
30
+ ```text
31
+ Use @tdd-workflows for this task: Use when working with tdd workflows tdd cycle (Alias for tdd-workflows-tdd-cycle).
32
+
33
+ Apply the skill to my current work and walk me through the safest next steps,
34
+ key checks, and the concrete output I should produce.
35
+ ```