opencode-skills-collection 3.0.34 → 3.0.36

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 (269) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +16 -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 +3 -3
  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/mmx-cli/SKILL.md +5 -2
  35. package/bundled-skills/nextjs-seo-indexing/SKILL.md +3 -3
  36. package/bundled-skills/polis-protocol/SKILL.md +93 -0
  37. package/bundled-skills/python-development/SKILL.md +35 -0
  38. package/bundled-skills/radix-ui-design-system/SKILL.md +2 -2
  39. package/bundled-skills/react-native-skills/SKILL.md +120 -0
  40. package/bundled-skills/react-native-skills/rules/_sections.md +86 -0
  41. package/bundled-skills/react-native-skills/rules/_template.md +28 -0
  42. package/bundled-skills/react-native-skills/rules/animation-derived-value.md +53 -0
  43. package/bundled-skills/react-native-skills/rules/animation-gesture-detector-press.md +95 -0
  44. package/bundled-skills/react-native-skills/rules/animation-gpu-properties.md +65 -0
  45. package/bundled-skills/react-native-skills/rules/design-system-compound-components.md +66 -0
  46. package/bundled-skills/react-native-skills/rules/fonts-config-plugin.md +71 -0
  47. package/bundled-skills/react-native-skills/rules/imports-design-system-folder.md +68 -0
  48. package/bundled-skills/react-native-skills/rules/js-hoist-intl.md +61 -0
  49. package/bundled-skills/react-native-skills/rules/list-performance-callbacks.md +44 -0
  50. package/bundled-skills/react-native-skills/rules/list-performance-function-references.md +132 -0
  51. package/bundled-skills/react-native-skills/rules/list-performance-images.md +53 -0
  52. package/bundled-skills/react-native-skills/rules/list-performance-inline-objects.md +97 -0
  53. package/bundled-skills/react-native-skills/rules/list-performance-item-expensive.md +94 -0
  54. package/bundled-skills/react-native-skills/rules/list-performance-item-memo.md +82 -0
  55. package/bundled-skills/react-native-skills/rules/list-performance-item-types.md +104 -0
  56. package/bundled-skills/react-native-skills/rules/list-performance-virtualize.md +67 -0
  57. package/bundled-skills/react-native-skills/rules/monorepo-native-deps-in-app.md +46 -0
  58. package/bundled-skills/react-native-skills/rules/monorepo-single-dependency-versions.md +63 -0
  59. package/bundled-skills/react-native-skills/rules/navigation-native-navigators.md +188 -0
  60. package/bundled-skills/react-native-skills/rules/react-compiler-destructure-functions.md +50 -0
  61. package/bundled-skills/react-native-skills/rules/react-compiler-reanimated-shared-values.md +48 -0
  62. package/bundled-skills/react-native-skills/rules/react-state-dispatcher.md +91 -0
  63. package/bundled-skills/react-native-skills/rules/react-state-fallback.md +56 -0
  64. package/bundled-skills/react-native-skills/rules/react-state-minimize.md +65 -0
  65. package/bundled-skills/react-native-skills/rules/rendering-no-falsy-and.md +74 -0
  66. package/bundled-skills/react-native-skills/rules/rendering-text-in-text-component.md +36 -0
  67. package/bundled-skills/react-native-skills/rules/scroll-position-no-state.md +82 -0
  68. package/bundled-skills/react-native-skills/rules/state-ground-truth.md +80 -0
  69. package/bundled-skills/react-native-skills/rules/ui-expo-image.md +66 -0
  70. package/bundled-skills/react-native-skills/rules/ui-image-gallery.md +104 -0
  71. package/bundled-skills/react-native-skills/rules/ui-measure-views.md +78 -0
  72. package/bundled-skills/react-native-skills/rules/ui-menus.md +174 -0
  73. package/bundled-skills/react-native-skills/rules/ui-native-modals.md +77 -0
  74. package/bundled-skills/react-native-skills/rules/ui-pressable.md +61 -0
  75. package/bundled-skills/react-native-skills/rules/ui-safe-area-scroll.md +65 -0
  76. package/bundled-skills/react-native-skills/rules/ui-scrollview-content-inset.md +45 -0
  77. package/bundled-skills/react-native-skills/rules/ui-styling.md +87 -0
  78. package/bundled-skills/schema-markup-generator/SKILL.md +1 -1
  79. package/bundled-skills/skill-issue/SKILL.md +73 -0
  80. package/bundled-skills/social-metadata-hardening/SKILL.md +4 -3
  81. package/bundled-skills/social-post-writer-seo/SKILL.md +19 -0
  82. package/bundled-skills/tdd-workflows/SKILL.md +35 -0
  83. package/bundled-skills/user-thoughts/SKILL.md +236 -0
  84. package/bundled-skills/user-thoughts/assets/Runtime-Template/README.ai.md +13 -0
  85. package/bundled-skills/user-thoughts/assets/Runtime-Template/define.ini +3 -0
  86. package/bundled-skills/user-thoughts/assets/Runtime-Template/mdbase/README.ai.md +25 -0
  87. package/bundled-skills/user-thoughts/assets/Runtime-Template/mdbase/backlog.md +19 -0
  88. package/bundled-skills/user-thoughts/assets/Runtime-Template/mdbase/details/dev-stack.md +7 -0
  89. package/bundled-skills/user-thoughts/assets/Runtime-Template/mdbase/details/general.md +7 -0
  90. package/bundled-skills/user-thoughts/assets/Runtime-Template/mdbase/details/plans.md +7 -0
  91. package/bundled-skills/user-thoughts/assets/Runtime-Template/mdbase/details/rules.md +7 -0
  92. package/bundled-skills/user-thoughts/assets/Runtime-Template/mdbase/details/ui/details.md +7 -0
  93. package/bundled-skills/user-thoughts/assets/Runtime-Template/mdbase/details/ui/outline.md +7 -0
  94. package/bundled-skills/user-thoughts/references/commands.md +54 -0
  95. package/bundled-skills/user-thoughts/references/edge-cases.md +84 -0
  96. package/bundled-skills/user-thoughts/references/safety.md +65 -0
  97. package/bundled-skills/user-thoughts/references/sortin.md +76 -0
  98. package/bundled-skills/user-thoughts/scripts/common.py +62 -0
  99. package/bundled-skills/user-thoughts/scripts/ignore_ops.py +125 -0
  100. package/bundled-skills/user-thoughts/scripts/init.py +63 -0
  101. package/bundled-skills/user-thoughts/scripts/show_mdbase.py +93 -0
  102. package/bundled-skills/user-thoughts/scripts/show_raw.py +42 -0
  103. package/bundled-skills/user-thoughts/scripts/sortin.py +211 -0
  104. package/bundled-skills/user-thoughts/scripts/status.py +56 -0
  105. package/bundled-skills/user-thoughts/scripts/toggle.py +68 -0
  106. package/bundled-skills/user-thoughts/scripts/write_raw.py +106 -0
  107. package/bundled-skills/vercel-cli-with-tokens/SKILL.md +361 -0
  108. package/bundled-skills/vercel-optimize/CONTRIBUTING.md +41 -0
  109. package/bundled-skills/vercel-optimize/SKILL.md +331 -0
  110. package/bundled-skills/vercel-optimize/lib/auth-route.mjs +23 -0
  111. package/bundled-skills/vercel-optimize/lib/budget-summary.mjs +182 -0
  112. package/bundled-skills/vercel-optimize/lib/citations.mjs +139 -0
  113. package/bundled-skills/vercel-optimize/lib/cost-coverage.mjs +143 -0
  114. package/bundled-skills/vercel-optimize/lib/dedup-recs.mjs +325 -0
  115. package/bundled-skills/vercel-optimize/lib/deep-dive.mjs +350 -0
  116. package/bundled-skills/vercel-optimize/lib/display-labels.mjs +185 -0
  117. package/bundled-skills/vercel-optimize/lib/extract-claims.mjs +550 -0
  118. package/bundled-skills/vercel-optimize/lib/framework-support.mjs +67 -0
  119. package/bundled-skills/vercel-optimize/lib/gates/build-minutes-fanout.mjs +69 -0
  120. package/bundled-skills/vercel-optimize/lib/gates/cold-start.mjs +66 -0
  121. package/bundled-skills/vercel-optimize/lib/gates/contract.mjs +79 -0
  122. package/bundled-skills/vercel-optimize/lib/gates/cwv-poor.mjs +87 -0
  123. package/bundled-skills/vercel-optimize/lib/gates/external-api-slow.mjs +55 -0
  124. package/bundled-skills/vercel-optimize/lib/gates/hard-gates.mjs +73 -0
  125. package/bundled-skills/vercel-optimize/lib/gates/index.mjs +45 -0
  126. package/bundled-skills/vercel-optimize/lib/gates/isr-overrevalidation.mjs +62 -0
  127. package/bundled-skills/vercel-optimize/lib/gates/middleware-heavy.mjs +51 -0
  128. package/bundled-skills/vercel-optimize/lib/gates/observability-events-attribution.mjs +56 -0
  129. package/bundled-skills/vercel-optimize/lib/gates/platform-bot-protection.mjs +115 -0
  130. package/bundled-skills/vercel-optimize/lib/gates/platform-fluid-compute.mjs +83 -0
  131. package/bundled-skills/vercel-optimize/lib/gates/region-misconfig.mjs +64 -0
  132. package/bundled-skills/vercel-optimize/lib/gates/route-errors.mjs +80 -0
  133. package/bundled-skills/vercel-optimize/lib/gates/scanner-driven.mjs +122 -0
  134. package/bundled-skills/vercel-optimize/lib/gates/select-candidates.mjs +134 -0
  135. package/bundled-skills/vercel-optimize/lib/gates/slow-route.mjs +88 -0
  136. package/bundled-skills/vercel-optimize/lib/gates/types.d.ts +38 -0
  137. package/bundled-skills/vercel-optimize/lib/gates/uncached-route.mjs +93 -0
  138. package/bundled-skills/vercel-optimize/lib/gates/usage-spike-triage.mjs +121 -0
  139. package/bundled-skills/vercel-optimize/lib/grade-recommendation.mjs +155 -0
  140. package/bundled-skills/vercel-optimize/lib/impact-label.mjs +126 -0
  141. package/bundled-skills/vercel-optimize/lib/impact-magnitude.mjs +60 -0
  142. package/bundled-skills/vercel-optimize/lib/investigation-brief.mjs +610 -0
  143. package/bundled-skills/vercel-optimize/lib/observation-safety.mjs +174 -0
  144. package/bundled-skills/vercel-optimize/lib/project-facts.mjs +99 -0
  145. package/bundled-skills/vercel-optimize/lib/queries.mjs +315 -0
  146. package/bundled-skills/vercel-optimize/lib/reconcile-candidates.mjs +372 -0
  147. package/bundled-skills/vercel-optimize/lib/render-report.mjs +955 -0
  148. package/bundled-skills/vercel-optimize/lib/repo-root.mjs +86 -0
  149. package/bundled-skills/vercel-optimize/lib/route-normalize.mjs +220 -0
  150. package/bundled-skills/vercel-optimize/lib/sanitizers/bot-protection-certainty.mjs +38 -0
  151. package/bundled-skills/vercel-optimize/lib/sanitizers/cache-tag-invalidation-certainty.mjs +30 -0
  152. package/bundled-skills/vercel-optimize/lib/sanitizers/count-correct.mjs +52 -0
  153. package/bundled-skills/vercel-optimize/lib/sanitizers/function-duration-invocations.mjs +38 -0
  154. package/bundled-skills/vercel-optimize/lib/sanitizers/index.mjs +79 -0
  155. package/bundled-skills/vercel-optimize/lib/sanitizers/middleware-conflict.mjs +36 -0
  156. package/bundled-skills/vercel-optimize/lib/sanitizers/missing-citation.mjs +16 -0
  157. package/bundled-skills/vercel-optimize/lib/sanitizers/pre-release.mjs +74 -0
  158. package/bundled-skills/vercel-optimize/lib/sanitizers/rate-limit.mjs +67 -0
  159. package/bundled-skills/vercel-optimize/lib/sanitizers/rendering-mode-mislabel.mjs +38 -0
  160. package/bundled-skills/vercel-optimize/lib/sanitizers/undeclared-dep.mjs +78 -0
  161. package/bundled-skills/vercel-optimize/lib/sanitizers/vercel-directive-strip.mjs +37 -0
  162. package/bundled-skills/vercel-optimize/lib/sanitizers/window-units.mjs +32 -0
  163. package/bundled-skills/vercel-optimize/lib/scanners/cache-components-suspense-dedupe.mjs +109 -0
  164. package/bundled-skills/vercel-optimize/lib/scanners/edge-heavy-import.mjs +94 -0
  165. package/bundled-skills/vercel-optimize/lib/scanners/force-dynamic.mjs +42 -0
  166. package/bundled-skills/vercel-optimize/lib/scanners/headers-in-page.mjs +44 -0
  167. package/bundled-skills/vercel-optimize/lib/scanners/index.mjs +35 -0
  168. package/bundled-skills/vercel-optimize/lib/scanners/large-static-asset.mjs +92 -0
  169. package/bundled-skills/vercel-optimize/lib/scanners/max-age-without-s-maxage.mjs +42 -0
  170. package/bundled-skills/vercel-optimize/lib/scanners/middleware-broad-matcher.mjs +55 -0
  171. package/bundled-skills/vercel-optimize/lib/scanners/missing-cache-headers.mjs +90 -0
  172. package/bundled-skills/vercel-optimize/lib/scanners/prisma-include-tree.mjs +42 -0
  173. package/bundled-skills/vercel-optimize/lib/scanners/region-pin-in-config.mjs +88 -0
  174. package/bundled-skills/vercel-optimize/lib/scanners/source-maps-production.mjs +36 -0
  175. package/bundled-skills/vercel-optimize/lib/scanners/sveltekit-prerender-missing.mjs +43 -0
  176. package/bundled-skills/vercel-optimize/lib/scanners/turbo-force-bypass.mjs +129 -0
  177. package/bundled-skills/vercel-optimize/lib/scanners/unoptimized-image.mjs +113 -0
  178. package/bundled-skills/vercel-optimize/lib/scanners/use-cache-date-stamp.mjs +106 -0
  179. package/bundled-skills/vercel-optimize/lib/support-topics.mjs +355 -0
  180. package/bundled-skills/vercel-optimize/lib/throttle.mjs +273 -0
  181. package/bundled-skills/vercel-optimize/lib/util.mjs +17 -0
  182. package/bundled-skills/vercel-optimize/lib/vercel.mjs +784 -0
  183. package/bundled-skills/vercel-optimize/lib/verify-claim.mjs +1296 -0
  184. package/bundled-skills/vercel-optimize/lib/workspace-resolver.mjs +521 -0
  185. package/bundled-skills/vercel-optimize/references/candidates.md +176 -0
  186. package/bundled-skills/vercel-optimize/references/data-collection.md +218 -0
  187. package/bundled-skills/vercel-optimize/references/docs-library.json +683 -0
  188. package/bundled-skills/vercel-optimize/references/doctrine.md +105 -0
  189. package/bundled-skills/vercel-optimize/references/observability-plus.md +108 -0
  190. package/bundled-skills/vercel-optimize/references/playbooks/README.md +53 -0
  191. package/bundled-skills/vercel-optimize/references/playbooks/ai-application.md +32 -0
  192. package/bundled-skills/vercel-optimize/references/playbooks/api-service.md +30 -0
  193. package/bundled-skills/vercel-optimize/references/playbooks/content-site.md +30 -0
  194. package/bundled-skills/vercel-optimize/references/playbooks/ecommerce.md +30 -0
  195. package/bundled-skills/vercel-optimize/references/playbooks/marketing.md +30 -0
  196. package/bundled-skills/vercel-optimize/references/playbooks/saas.md +31 -0
  197. package/bundled-skills/vercel-optimize/references/playbooks/sveltekit.md +75 -0
  198. package/bundled-skills/vercel-optimize/references/recommendations.md +203 -0
  199. package/bundled-skills/vercel-optimize/references/scanner-patterns.md +251 -0
  200. package/bundled-skills/vercel-optimize/references/scoring.md +205 -0
  201. package/bundled-skills/vercel-optimize/references/support-topics/README.md +46 -0
  202. package/bundled-skills/vercel-optimize/references/support-topics/astro-edge-middleware-scope.md +22 -0
  203. package/bundled-skills/vercel-optimize/references/support-topics/astro-output-mode-and-isr.md +22 -0
  204. package/bundled-skills/vercel-optimize/references/support-topics/auth-preserving-parallelization.md +22 -0
  205. package/bundled-skills/vercel-optimize/references/support-topics/bot-protection-product-guardrails.md +22 -0
  206. package/bundled-skills/vercel-optimize/references/support-topics/build-minutes-monorepo-fanout.md +23 -0
  207. package/bundled-skills/vercel-optimize/references/support-topics/cache-components-static-shell-boundaries.md +22 -0
  208. package/bundled-skills/vercel-optimize/references/support-topics/cache-components-suspense-dedupe-pitfall.md +23 -0
  209. package/bundled-skills/vercel-optimize/references/support-topics/cdn-cache-auth-safety.md +22 -0
  210. package/bundled-skills/vercel-optimize/references/support-topics/cold-start-initialization-bundle.md +22 -0
  211. package/bundled-skills/vercel-optimize/references/support-topics/core-web-vitals-client-bottlenecks.md +22 -0
  212. package/bundled-skills/vercel-optimize/references/support-topics/database-egress-pooling-region.md +22 -0
  213. package/bundled-skills/vercel-optimize/references/support-topics/dynamic-rendering-traps.md +22 -0
  214. package/bundled-skills/vercel-optimize/references/support-topics/external-api-critical-path-platform.md +22 -0
  215. package/bundled-skills/vercel-optimize/references/support-topics/external-api-critical-path.md +22 -0
  216. package/bundled-skills/vercel-optimize/references/support-topics/fast-data-transfer-payloads.md +22 -0
  217. package/bundled-skills/vercel-optimize/references/support-topics/fluid-compute-caveats.md +22 -0
  218. package/bundled-skills/vercel-optimize/references/support-topics/function-duration-io-and-after.md +22 -0
  219. package/bundled-skills/vercel-optimize/references/support-topics/function-invocation-reduction.md +22 -0
  220. package/bundled-skills/vercel-optimize/references/support-topics/function-region-misconfiguration-ttfb.md +23 -0
  221. package/bundled-skills/vercel-optimize/references/support-topics/image-optimization-cost-control.md +22 -0
  222. package/bundled-skills/vercel-optimize/references/support-topics/isr-revalidation-static-generation.md +22 -0
  223. package/bundled-skills/vercel-optimize/references/support-topics/middleware-proxy-edge-cost.md +22 -0
  224. package/bundled-skills/vercel-optimize/references/support-topics/next-fetch-revalidate-floor.md +22 -0
  225. package/bundled-skills/vercel-optimize/references/support-topics/next-font-cls-self-hosting.md +23 -0
  226. package/bundled-skills/vercel-optimize/references/support-topics/next-heavy-ui-lazy-load-boundaries.md +23 -0
  227. package/bundled-skills/vercel-optimize/references/support-topics/next-image-lcp-preload-sizes.md +23 -0
  228. package/bundled-skills/vercel-optimize/references/support-topics/next-route-handler-get-cache-defaults.md +22 -0
  229. package/bundled-skills/vercel-optimize/references/support-topics/next-script-third-party-strategy.md +23 -0
  230. package/bundled-skills/vercel-optimize/references/support-topics/nextjs-version-cache-semantics.md +22 -0
  231. package/bundled-skills/vercel-optimize/references/support-topics/not-found-catchall-request-waste.md +23 -0
  232. package/bundled-skills/vercel-optimize/references/support-topics/nuxt-route-rules-cache-isr.md +22 -0
  233. package/bundled-skills/vercel-optimize/references/support-topics/observability-events-cost-attribution.md +22 -0
  234. package/bundled-skills/vercel-optimize/references/support-topics/post-response-work-waituntil.md +22 -0
  235. package/bundled-skills/vercel-optimize/references/support-topics/route-error-durable-offload.md +22 -0
  236. package/bundled-skills/vercel-optimize/references/support-topics/route-error-runtime-limits.md +22 -0
  237. package/bundled-skills/vercel-optimize/references/support-topics/runtime-cache-reusable-data.md +22 -0
  238. package/bundled-skills/vercel-optimize/references/support-topics/sveltekit-isr-prerender-safety.md +22 -0
  239. package/bundled-skills/vercel-optimize/references/support-topics/sveltekit-split-cold-start-tradeoff.md +22 -0
  240. package/bundled-skills/vercel-optimize/references/support-topics/usage-spike-triage.md +22 -0
  241. package/bundled-skills/vercel-optimize/references/support-topics/use-cache-date-stamp-isr-write-amplifier.md +23 -0
  242. package/bundled-skills/vercel-optimize/references/support-topics/use-cache-remote-shared-origin-data.md +22 -0
  243. package/bundled-skills/vercel-optimize/references/support-topics/workflow-resumable-stream-routes.md +23 -0
  244. package/bundled-skills/vercel-optimize/references/verification.md +102 -0
  245. package/bundled-skills/vercel-optimize/references/voice.md +76 -0
  246. package/bundled-skills/vercel-optimize/scripts/budget-summary.mjs +56 -0
  247. package/bundled-skills/vercel-optimize/scripts/build-docs.mjs +74 -0
  248. package/bundled-skills/vercel-optimize/scripts/check-citations.mjs +81 -0
  249. package/bundled-skills/vercel-optimize/scripts/check-docs-fresh.mjs +93 -0
  250. package/bundled-skills/vercel-optimize/scripts/collect-signals.mjs +576 -0
  251. package/bundled-skills/vercel-optimize/scripts/collect-sub-agent-outputs.mjs +296 -0
  252. package/bundled-skills/vercel-optimize/scripts/deep-dive.mjs +319 -0
  253. package/bundled-skills/vercel-optimize/scripts/gate-investigations.mjs +166 -0
  254. package/bundled-skills/vercel-optimize/scripts/merge-signals.mjs +192 -0
  255. package/bundled-skills/vercel-optimize/scripts/prepare-investigation-brief.mjs +231 -0
  256. package/bundled-skills/vercel-optimize/scripts/reconcile-candidates.mjs +62 -0
  257. package/bundled-skills/vercel-optimize/scripts/render-report.mjs +437 -0
  258. package/bundled-skills/vercel-optimize/scripts/scan-codebase.mjs +313 -0
  259. package/bundled-skills/vercel-optimize/scripts/verify-and-regen.mjs +346 -0
  260. package/bundled-skills/vercel-optimize/scripts/verify-finding.mjs +19 -0
  261. package/bundled-skills/vercel-react-view-transitions/SKILL.md +327 -0
  262. package/bundled-skills/vercel-react-view-transitions/references/css-recipes.md +242 -0
  263. package/bundled-skills/vercel-react-view-transitions/references/implementation.md +182 -0
  264. package/bundled-skills/vercel-react-view-transitions/references/nextjs.md +176 -0
  265. package/bundled-skills/vercel-react-view-transitions/references/patterns.md +262 -0
  266. package/bundled-skills/vibe-code-cleanup/SKILL.md +4 -4
  267. package/bundled-skills/vibecode-production-qa-validator/SKILL.md +3 -2
  268. package/package.json +1 -1
  269. package/skills_index.json +338 -4
@@ -0,0 +1,372 @@
1
+ // Deterministic post-deep-dive reconciliation.
2
+ //
3
+ // Runs after metrics deep-dive and before investigation briefs. Its job is to
4
+ // prevent weak candidates from consuming investigator budget when the
5
+ // follow-up metric evidence already disproves or reframes the gate hypothesis.
6
+
7
+ const SLOW_ROUTE_P95_THRESHOLD_MS = 500;
8
+ const ERROR_RATE_DOMINATES_THRESHOLD = 0.5;
9
+ const DEPLOYMENT_OUTLIER_MULTIPLE = 2;
10
+ const DEPLOYMENT_OUTLIER_MIN_MS = 1000;
11
+ const ROUTE_ERROR_CONFIRMATION_RATIO = 0.1;
12
+ const UNCACHED_HEALTHY_HIT_RATE = 0.9;
13
+ const UNCACHED_MIN_GET_SHARE = 0.2;
14
+ const ISR_WRITE_FLOOR = 100;
15
+ const ISR_WRITE_READ_RATIO_THRESHOLD = 0.5;
16
+
17
+ const SCANNER_ONLY_KINDS = new Set([
18
+ 'cache_header_gap',
19
+ 'image_optimization',
20
+ 'rendering_candidate',
21
+ ]);
22
+
23
+ export function reconcileInvestigation(investigation, { gate = null } = {}) {
24
+ if (!investigation || typeof investigation !== 'object') {
25
+ throw new TypeError('reconcileInvestigation investigation must be an object');
26
+ }
27
+
28
+ const preResolvedRecords = [];
29
+ const reconciliation = {
30
+ droppedBeforeInvestigation: 0,
31
+ reasons: {},
32
+ };
33
+
34
+ const reconcilePool = (pool, group) => {
35
+ if (!Array.isArray(pool)) return [];
36
+ const kept = [];
37
+ for (let i = 0; i < pool.length; i++) {
38
+ const candidate = pool[i];
39
+ const decision = reconcileCandidate(candidate, { group, index: i, gate });
40
+ if (decision.keep) {
41
+ kept.push(candidate);
42
+ continue;
43
+ }
44
+ reconciliation.droppedBeforeInvestigation++;
45
+ reconciliation.reasons[decision.reasonCode] = (reconciliation.reasons[decision.reasonCode] ?? 0) + 1;
46
+ preResolvedRecords.push(decision.record);
47
+ }
48
+ return kept;
49
+ };
50
+
51
+ const priorPreResolved = Array.isArray(investigation.preResolvedRecords)
52
+ ? investigation.preResolvedRecords
53
+ : [];
54
+
55
+ return {
56
+ ...investigation,
57
+ toLaunch: reconcilePool(investigation.toLaunch, 'toLaunch'),
58
+ platform: reconcilePool(investigation.platform, 'platform'),
59
+ preResolvedRecords: [...priorPreResolved, ...preResolvedRecords],
60
+ reconciliation: {
61
+ ...(investigation.reconciliation ?? {}),
62
+ ...reconciliation,
63
+ },
64
+ };
65
+ }
66
+
67
+ export function reconcileCandidate(candidate, ctx = {}) {
68
+ if (!candidate || typeof candidate !== 'object') return { keep: true };
69
+
70
+ const scannerOnly = scannerOnlyDecision(candidate, ctx);
71
+ if (scannerOnly) return scannerOnly;
72
+
73
+ if (candidate.kind === 'slow_route') {
74
+ const errorDecision = slowRouteErrorDecision(candidate, ctx);
75
+ if (errorDecision) return errorDecision;
76
+
77
+ const mismatchDecision = slowRouteMetricMismatchDecision(candidate, ctx);
78
+ if (mismatchDecision) return mismatchDecision;
79
+
80
+ const regressionDecision = deploymentRegressionDecision(candidate, ctx);
81
+ if (regressionDecision) return regressionDecision;
82
+ }
83
+
84
+ if (candidate.kind === 'route_errors') {
85
+ const mismatchDecision = routeErrorsMetricMismatchDecision(candidate, ctx);
86
+ if (mismatchDecision) return mismatchDecision;
87
+ }
88
+
89
+ if (candidate.kind === 'uncached_route') {
90
+ const cacheDecision = uncachedRouteCacheDecision(candidate, ctx);
91
+ if (cacheDecision) return cacheDecision;
92
+ const methodDecision = uncachedRouteMethodDecision(candidate, ctx);
93
+ if (methodDecision) return methodDecision;
94
+ }
95
+
96
+ if (candidate.kind === 'isr_overrevalidation') {
97
+ const isrDecision = isrOverrevalidationDecision(candidate, ctx);
98
+ if (isrDecision) return isrDecision;
99
+ }
100
+
101
+ return { keep: true };
102
+ }
103
+
104
+ function scannerOnlyDecision(candidate, ctx) {
105
+ if (!SCANNER_ONLY_KINDS.has(candidate.kind)) return null;
106
+ if (candidate.o11ySignal !== 'scanner-only') return null;
107
+ return dropWithObservation(candidate, ctx, {
108
+ reasonCode: 'scanner_only_no_metric',
109
+ reason: 'Static scanner found a possible optimization, but no Vercel metric tied traffic or cost to this target.',
110
+ observation: {
111
+ kind: 'scanner_only_no_metric',
112
+ summary: `${targetLabel(candidate)} has a static scanner finding, but no route-level Vercel metric signal.`,
113
+ evidence: `gate signal=${candidate.o11ySignal}`,
114
+ suggestedAction: 'Do not ship a recommendation from this finding unless a Vercel metric shows material traffic, cost, or latency for the same target.',
115
+ },
116
+ });
117
+ }
118
+
119
+ function slowRouteMetricMismatchDecision(candidate, ctx) {
120
+ const p95 = numberAt(candidate, ['evidence', 'deepDive', 'latency', 'p95']);
121
+ if (p95 == null) return null;
122
+ if (p95 >= SLOW_ROUTE_P95_THRESHOLD_MS) return null;
123
+ return dropWithObservation(candidate, ctx, {
124
+ reasonCode: 'metric_mismatch',
125
+ reason: `Deep-dive p95 (${formatMs(p95)}) is below the slow-route threshold, so the broad gate did not survive follow-up verification.`,
126
+ observation: {
127
+ kind: 'metric_mismatch',
128
+ summary: `${targetLabel(candidate)} was flagged as slow in the broad pass, but follow-up p95 is below threshold.`,
129
+ evidence: `${candidate.o11ySignal ?? 'gate signal unavailable'}; deepDive.latency.p95=${formatMs(p95)}`,
130
+ suggestedAction: 'Skip code investigation for this run. Re-check only if the broad and follow-up windows converge in a later run.',
131
+ },
132
+ });
133
+ }
134
+
135
+ function slowRouteErrorDecision(candidate, ctx) {
136
+ const rows = arrayAt(candidate, ['evidence', 'deepDive', 'statusDistribution']);
137
+ if (rows.length === 0) return null;
138
+ let total = 0;
139
+ let errors = 0;
140
+ for (const row of rows) {
141
+ const value = numberValue(row?.value);
142
+ if (value == null) continue;
143
+ total += value;
144
+ if (/^5/.test(String(row.http_status ?? ''))) errors += value;
145
+ }
146
+ if (total <= 0) return null;
147
+ const rate = errors / total;
148
+ if (rate <= ERROR_RATE_DOMINATES_THRESHOLD) return null;
149
+ return dropWithObservation(candidate, ctx, {
150
+ reasonCode: 'error_storm',
151
+ reason: `Function-level 5xx responses dominate this route (${formatPct(rate)}), so this is a reliability finding rather than a slow-route finding.`,
152
+ observation: {
153
+ kind: 'error_storm',
154
+ summary: `${targetLabel(candidate)} latency is dominated by function-level 5xx responses.`,
155
+ evidence: `deepDive.statusDistribution: ${formatInteger(errors)} 5xx of ${formatInteger(total)} function invocations (${formatPct(rate)})`,
156
+ suggestedAction: 'Investigate as route_errors with runtime logs and error classification before making performance recommendations.',
157
+ },
158
+ });
159
+ }
160
+
161
+ function deploymentRegressionDecision(candidate, ctx) {
162
+ const rows = arrayAt(candidate, ['evidence', 'deepDive', 'perDeployment'])
163
+ .filter((row) => row && typeof row.deployment_id === 'string' && numberValue(row.value) != null)
164
+ .map((row) => ({ deploymentId: row.deployment_id, p95: numberValue(row.value) }))
165
+ .sort((a, b) => b.p95 - a.p95);
166
+
167
+ if (rows.length < 3) return null;
168
+ const [worst, second] = rows;
169
+ if (!worst || !second || worst.p95 < DEPLOYMENT_OUTLIER_MIN_MS) return null;
170
+ if (worst.p95 < second.p95 * DEPLOYMENT_OUTLIER_MULTIPLE) return null;
171
+
172
+ return dropWithObservation(candidate, ctx, {
173
+ reasonCode: 'deployment_regression',
174
+ reason: `One deployment is a large latency outlier (${worst.deploymentId} at ${formatMs(worst.p95)}), so the next action is regression triage rather than generic code optimization.`,
175
+ observation: {
176
+ kind: 'deployment_regression',
177
+ summary: `${targetLabel(candidate)} p95 is concentrated in one deployment.`,
178
+ evidence: `${worst.deploymentId} p95=${formatMs(worst.p95)} vs next highest ${second.deploymentId} p95=${formatMs(second.p95)}`,
179
+ suggestedAction: 'Compare the outlier deployment against the prior deployment and inspect runtime logs before recommending a code-level performance change.',
180
+ },
181
+ });
182
+ }
183
+
184
+ function routeErrorsMetricMismatchDecision(candidate, ctx) {
185
+ const broadErrors = numberAt(candidate, ['evidence', 'count']) ?? parseSignalNumber(candidate.o11ySignal, 'errs');
186
+ if (broadErrors == null || broadErrors < 1000) return null;
187
+ const rows = [
188
+ ...arrayAt(candidate, ['evidence', 'deepDive', 'errorStatusPattern']),
189
+ ...arrayAt(candidate, ['evidence', 'deepDive', 'errorsByDeployment']),
190
+ ];
191
+ if (rows.length === 0) return null;
192
+ let confirmed5xx = 0;
193
+ for (const row of rows) {
194
+ if (!/^5\d\d$/.test(String(row?.http_status ?? ''))) continue;
195
+ const value = numberValue(row?.value);
196
+ if (value != null) confirmed5xx += value;
197
+ }
198
+ // errorStatusPattern and errorsByDeployment can both be present; avoid
199
+ // double-count inflation by taking the lower non-zero route-level view when available.
200
+ const statusRows = arrayAt(candidate, ['evidence', 'deepDive', 'errorStatusPattern']);
201
+ const status5xx = sumRows(statusRows, (row) => /^5\d\d$/.test(String(row?.http_status ?? '')));
202
+ if (status5xx > 0) confirmed5xx = status5xx;
203
+ if (confirmed5xx >= broadErrors * ROUTE_ERROR_CONFIRMATION_RATIO) return null;
204
+ return dropWithObservation(candidate, ctx, {
205
+ reasonCode: 'metric_mismatch',
206
+ reason: `Deep-dive 5xx volume (${formatInteger(confirmed5xx)}) does not confirm the broad route_errors gate (${formatInteger(broadErrors)}).`,
207
+ observation: {
208
+ kind: 'metric_mismatch',
209
+ summary: `${targetLabel(candidate)} was flagged for 5xx errors, but follow-up status data did not confirm the volume.`,
210
+ evidence: `${candidate.o11ySignal ?? 'gate signal unavailable'}; deepDive.confirmed5xx=${formatInteger(confirmed5xx)}`,
211
+ suggestedAction: 'Skip code recommendations from this run. Re-run with refreshed status metrics or runtime logs if the route is still suspected.',
212
+ },
213
+ });
214
+ }
215
+
216
+ function uncachedRouteCacheDecision(candidate, ctx) {
217
+ const rows = arrayAt(candidate, ['evidence', 'deepDive', 'cacheBreakdown']);
218
+ if (rows.length === 0) return null;
219
+ const total = sumRows(rows);
220
+ if (total <= 0) return null;
221
+ const hits = sumRows(rows, (row) => ['HIT', 'STALE'].includes(String(row?.cache_result ?? '').toUpperCase()));
222
+ const hitRate = hits / total;
223
+ if (hitRate < UNCACHED_HEALTHY_HIT_RATE) return null;
224
+ return dropWithObservation(candidate, ctx, {
225
+ reasonCode: 'metric_mismatch',
226
+ reason: `Deep-dive cache hit rate (${formatPct(hitRate)}) is already healthy, so the uncached-route gate did not survive follow-up verification.`,
227
+ observation: {
228
+ kind: 'metric_mismatch',
229
+ summary: `${targetLabel(candidate)} was flagged as low-cache, but follow-up cache data is already healthy.`,
230
+ evidence: `${candidate.o11ySignal ?? 'gate signal unavailable'}; deepDive.cacheHitRate=${formatPct(hitRate)}`,
231
+ suggestedAction: 'Skip cache recommendations for this candidate unless a later run shows sustained MISS/BYPASS traffic.',
232
+ },
233
+ });
234
+ }
235
+
236
+ function uncachedRouteMethodDecision(candidate, ctx) {
237
+ const rows = arrayAt(candidate, ['evidence', 'deepDive', 'methodDistribution']);
238
+ if (rows.length === 0) return null;
239
+ const total = sumRows(rows);
240
+ if (total <= 0) return null;
241
+ const gets = sumRows(rows, (row) => String(row?.request_method ?? '').toUpperCase() === 'GET');
242
+ const getShare = gets / total;
243
+ if (getShare >= UNCACHED_MIN_GET_SHARE) return null;
244
+ return dropWithObservation(candidate, ctx, {
245
+ reasonCode: 'protocol_mismatch',
246
+ reason: `Deep-dive GET share (${formatPct(getShare)}) is below the cacheable-route floor, so this is not a good shared-cache candidate.`,
247
+ observation: {
248
+ kind: 'protocol_mismatch',
249
+ summary: `${targetLabel(candidate)} is not GET-heavy enough for a shared-cache recommendation.`,
250
+ evidence: `${candidate.o11ySignal ?? 'gate signal unavailable'}; deepDive.getShare=${formatPct(getShare)}`,
251
+ suggestedAction: 'Do not recommend CDN caching for this route from aggregate traffic alone. Investigate write-path cost only if another metric gate fires.',
252
+ },
253
+ });
254
+ }
255
+
256
+ function isrOverrevalidationDecision(candidate, ctx) {
257
+ const writeRows = arrayAt(candidate, ['evidence', 'deepDive', 'writePattern']);
258
+ const readRows = arrayAt(candidate, ['evidence', 'deepDive', 'readPattern']);
259
+ if (writeRows.length === 0 && readRows.length === 0) return null;
260
+ const writes = sumRows(writeRows);
261
+ const reads = sumRows(readRows);
262
+ const ratio = reads > 0 ? writes / reads : (writes > 0 ? Infinity : 0);
263
+ if (reads <= 0) {
264
+ return dropWithObservation(candidate, ctx, {
265
+ reasonCode: 'metric_mismatch',
266
+ reason: 'Deep-dive ISR read units were not present, so the write/read over-revalidation signal was not confirmed.',
267
+ observation: {
268
+ kind: 'metric_mismatch',
269
+ summary: `${targetLabel(candidate)} was flagged for ISR over-revalidation, but follow-up ISR read data was empty.`,
270
+ evidence: `${candidate.o11ySignal ?? 'gate signal unavailable'}; deepDive.isrWrites=${formatInteger(writes)}; deepDive.isrReads=${formatInteger(reads)}`,
271
+ suggestedAction: 'Skip ISR recommendations for this candidate unless a later run confirms both ISR writes and reads for the same route.',
272
+ },
273
+ });
274
+ }
275
+ if (writes >= ISR_WRITE_FLOOR && ratio > ISR_WRITE_READ_RATIO_THRESHOLD) return null;
276
+ const ratioLabel = ratio === Infinity ? 'Infinity' : ratio.toFixed(2);
277
+ return dropWithObservation(candidate, ctx, {
278
+ reasonCode: 'metric_mismatch',
279
+ reason: `Deep-dive ISR writes per read (${ratioLabel}) no longer crosses the over-revalidation threshold.`,
280
+ observation: {
281
+ kind: 'metric_mismatch',
282
+ summary: `${targetLabel(candidate)} was flagged for ISR over-revalidation, but follow-up ISR data did not confirm it.`,
283
+ evidence: `${candidate.o11ySignal ?? 'gate signal unavailable'}; deepDive.isrWrites=${formatInteger(writes)}; deepDive.isrReads=${formatInteger(reads)}; ratio=${ratioLabel}`,
284
+ suggestedAction: 'Skip ISR recommendations for this candidate unless a later run shows sustained write amplification.',
285
+ },
286
+ });
287
+ }
288
+
289
+ function dropWithObservation(candidate, ctx, { reasonCode, reason, observation }) {
290
+ return {
291
+ keep: false,
292
+ reasonCode,
293
+ record: {
294
+ abstain: true,
295
+ candidateRef: candidateRefFor(candidate),
296
+ reason,
297
+ observation,
298
+ reconciliation: {
299
+ droppedBeforeInvestigation: true,
300
+ reasonCode,
301
+ group: ctx.group ?? null,
302
+ index: Number.isInteger(ctx.index) ? ctx.index : null,
303
+ },
304
+ },
305
+ };
306
+ }
307
+
308
+ export function candidateRefFor(candidate, files = candidate?.files) {
309
+ if (!candidate || typeof candidate !== 'object') return 'unknown:<unknown>';
310
+ const target = candidate.route
311
+ ?? candidate.hostname
312
+ ?? (Array.isArray(files) && files.length > 0 ? `<account>#${files[0]}` : '<account>');
313
+ return `${candidate.kind ?? 'unknown'}:${target}`;
314
+ }
315
+
316
+ function targetLabel(candidate) {
317
+ return candidate.route ?? candidate.hostname ?? candidate.files?.[0] ?? 'account-level target';
318
+ }
319
+
320
+ function arrayAt(obj, path) {
321
+ let cur = obj;
322
+ for (const p of path) cur = cur?.[p];
323
+ return Array.isArray(cur) ? cur : [];
324
+ }
325
+
326
+ function numberAt(obj, path) {
327
+ let cur = obj;
328
+ for (const p of path) cur = cur?.[p];
329
+ return numberValue(cur);
330
+ }
331
+
332
+ function numberValue(value) {
333
+ return typeof value === 'number' && Number.isFinite(value) ? value : null;
334
+ }
335
+
336
+ function sumRows(rows, predicate = () => true) {
337
+ if (!Array.isArray(rows)) return 0;
338
+ let total = 0;
339
+ for (const row of rows) {
340
+ if (!predicate(row)) continue;
341
+ const value = numberValue(row?.value);
342
+ if (value != null) total += value;
343
+ }
344
+ return total;
345
+ }
346
+
347
+ function parseSignalNumber(signal, key) {
348
+ if (typeof signal !== 'string') return null;
349
+ const re = new RegExp(`(?:^|,)${key}=([\\d,.]+)`);
350
+ const m = signal.match(re);
351
+ if (!m) return null;
352
+ const n = Number(m[1].replace(/,/g, ''));
353
+ return Number.isFinite(n) ? n : null;
354
+ }
355
+
356
+ function formatMs(value) {
357
+ const n = numberValue(value);
358
+ if (n == null) return String(value);
359
+ return `${Math.round(n)}ms`;
360
+ }
361
+
362
+ function formatPct(value) {
363
+ const n = numberValue(value);
364
+ if (n == null) return String(value);
365
+ return `${(n * 100).toFixed(n >= 0.1 ? 1 : 2)}%`;
366
+ }
367
+
368
+ function formatInteger(value) {
369
+ const n = numberValue(value);
370
+ if (n == null) return String(value);
371
+ return Math.round(n).toLocaleString('en-US');
372
+ }