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,46 @@
1
+ # Support Topics
2
+
3
+ Support topics are small, candidate-scoped investigation guardrails injected into sub-agent briefs.
4
+
5
+ They are not recommendations, gates, scanners, or broad documentation. A topic tells the investigator what evidence to check, what false positives to avoid, and when to abstain for one class of candidate.
6
+
7
+ ## Add A Topic
8
+
9
+ Add one file: `references/support-topics/<id>.md`.
10
+
11
+ The filename must match the `id`. Frontmatter uses a strict subset of YAML: one `key: value` per line, arrays as JSON arrays.
12
+
13
+ ```md
14
+ ---
15
+ id: cdn-cache-auth-safety
16
+ title: CDN cache auth safety
17
+ status: active
18
+ candidateKinds: ["uncached_route", "cache_header_gap"]
19
+ frameworks: ["*"]
20
+ priority: 90
21
+ citations: ["https://vercel.com/docs/caching/cdn-cache"]
22
+ maxBriefChars: 900
23
+ ---
24
+
25
+ ## Investigation Brief
26
+ ...
27
+
28
+ ## Evidence To Check
29
+ ...
30
+
31
+ ## Do Not Recommend When
32
+ ...
33
+
34
+ ## Verification
35
+ ...
36
+ ```
37
+
38
+ ## Rules
39
+
40
+ - Every active topic must cite only URLs or skill-rule refs already present in `references/docs-library.json`.
41
+ - Use `candidateKinds` to keep the topic narrow. Use `"*"` only for workflow/protocol topics that truly apply to every candidate.
42
+ - Use optional `metrics` only when a topic applies to a specific candidate metric, such as `["LCP"]`, `["INP"]`, or `["CLS"]` for Core Web Vitals.
43
+ - Use optional `routePatterns` as JavaScript regex source strings when a topic should appear only for specific candidate routes, such as `["(^|/)404$"]`.
44
+ - Keep the body below `maxBriefChars`; the brief renderer caps selected topics before they reach the sub-agent.
45
+ - Put URLs in frontmatter only. Topic bodies should describe checks and guardrails, not cite new sources.
46
+ - Do not include internal repository paths, service names, pricing tables, exact savings claims, or framework APIs without version gating.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: astro-edge-middleware-scope
3
+ title: Astro edge middleware scope
4
+ status: active
5
+ candidateKinds: ["middleware_heavy"]
6
+ frameworks: ["astro@*"]
7
+ priority: 88
8
+ citations: ["https://vercel.com/docs/frameworks/frontend/astro", "https://docs.astro.build/en/guides/integrations-guide/vercel/"]
9
+ maxBriefChars: 800
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ Astro middleware can run at the edge for broad request sets. If middleware volume is high, prove which paths actually need interception.
14
+
15
+ ## Evidence To Check
16
+ Use middleware invocation share and top paths. Inspect adapter middleware mode, middleware source, auth/redirect logic, and whether static assets, prerendered pages, or public pages are being intercepted.
17
+
18
+ ## Do Not Recommend When
19
+ Do not bypass required auth, locale, header, or routing logic. Do not move global middleware work into every page when the current scope is already minimal.
20
+
21
+ ## Verification
22
+ Name the middleware share, dominant paths, current middleware mode, and exact source or config line to narrow.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: astro-output-mode-and-isr
3
+ title: Astro output mode and ISR
4
+ status: active
5
+ candidateKinds: ["uncached_route", "rendering_candidate"]
6
+ frameworks: ["astro@*"]
7
+ priority: 90
8
+ citations: ["https://vercel.com/docs/frameworks/frontend/astro", "https://docs.astro.build/en/guides/on-demand-rendering/", "https://docs.astro.build/en/reference/configuration-reference/"]
9
+ maxBriefChars: 850
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ Astro defaults to static output; `server` output makes pages render on demand unless route-level prerendering changes that. First decide whether the hot route truly needs SSR.
14
+
15
+ ## Evidence To Check
16
+ Inspect `astro.config`, adapter options, `output`, route-level `prerender`, dynamic params, middleware, and whether the content is shared across visitors. Compare route cache result and request volume.
17
+
18
+ ## Do Not Recommend When
19
+ Do not prerender or cache personalized, preview, cart, checkout, or auth-gated pages. Do not change output mode for the whole app when one route-level flag is enough.
20
+
21
+ ## Verification
22
+ Name the Astro output mode, route-level prerender state, observed route signal, and exact config or page line.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: auth-preserving-parallelization
3
+ title: Authorization-preserving parallelization
4
+ status: active
5
+ candidateKinds: ["slow_route"]
6
+ frameworks: ["*"]
7
+ priority: 90
8
+ citations: ["vercel-react-best-practices:async-parallel", "vercel-react-best-practices:server-parallel-fetching"]
9
+ maxBriefChars: 900
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ Parallelizing awaits is safe only when it does not move private data access ahead of the auth, ownership, tenant, or permission check protecting that data.
14
+
15
+ ## Evidence To Check
16
+ List every awaited operation being reordered. If a private lookup currently runs after `getSession()`, an ownership query, a tenant check, or a redirect guard, prove the lookup itself enforces the same predicate before recommending `Promise.all`.
17
+
18
+ ## Do Not Recommend When
19
+ Do not parallelize a private record fetch with the ownership check that authorizes that fetch. Instead, recommend combining the guard and data lookup into one query constrained by the authenticated user, tenant, or ownership key.
20
+
21
+ ## Verification
22
+ The fix must preserve the sequential guard or replace it with a single authorized query. Do not promise a latency drop equal to a helper unless that helper duration was measured.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: bot-protection-product-guardrails
3
+ title: Bot Protection product guardrails
4
+ status: active
5
+ candidateKinds: ["platform_bot_protection"]
6
+ frameworks: ["*"]
7
+ priority: 90
8
+ citations: ["https://vercel.com/docs/bot-management", "https://vercel.com/docs/vercel-firewall/vercel-waf/managed-rulesets", "https://vercel.com/docs/vercel-firewall/vercel-waf/custom-rules", "https://vercel.com/docs/botid"]
9
+ maxBriefChars: 800
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ Bot Protection recommendations must be grounded in observed automated traffic or meaningful edge-request scale.
14
+
15
+ ## Evidence To Check
16
+ Check bot bandwidth share, edge request volume, existing WAF managed rules, and whether BotID or Bot Protection is already enabled. Prefer a staged Log to Challenge or Deny path for rules whose false-positive risk is not proven.
17
+
18
+ ## Do Not Recommend When
19
+ Do not recommend disabling Vercel security products to reduce cost. Do not recommend Bot Protection for quiet projects with no bot evidence.
20
+
21
+ ## Verification
22
+ State the observed bot share or scale signal, current protection state, and any existing log, challenge, deny, or BotID check.
@@ -0,0 +1,23 @@
1
+ ---
2
+ id: build-minutes-monorepo-fanout
3
+ title: Build Minutes monorepo fanout
4
+ status: active
5
+ candidateKinds: ["build_minutes_fanout"]
6
+ frameworks: ["*"]
7
+ scannerPatterns: ["turbo-force-bypass"]
8
+ priority: 90
9
+ citations: ["https://vercel.com/docs/monorepos", "https://vercel.com/docs/builds", "https://turborepo.dev/docs/crafting-your-repository/caching"]
10
+ maxBriefChars: 900
11
+ ---
12
+
13
+ ## Investigation Brief
14
+ Build Minutes climbs when commits rebuild unchanged work. Common causes: `TURBO_FORCE`, `cache: false`, missing outputs, or disabled build-skip settings.
15
+
16
+ ## Evidence To Check
17
+ Confirm Build Minutes share and scanner subtype. Inspect `package.json`, `turbo.json`, outputs, `.gitignore`, `vercel.json`, and project settings. If `build` runs migrations, split them into an uncached step before recommending Turbo build caching.
18
+
19
+ ## Do Not Recommend When
20
+ Skip under 5% bill share with no scanner finding. Skip single-project repos and intentional CI-only force flags. Do not recommend `ignoreCommand` from repo grep alone; dashboard-only skip-unaffected may be better.
21
+
22
+ ## Verification
23
+ Name the offending file and pattern. Recommend only the verified fix: cache a pure build task, add generated `outputs`, enable skip-unaffected builds, or add `ignoreCommand` only when needed.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: cache-components-static-shell-boundaries
3
+ title: Cache Components static shell boundaries
4
+ status: active
5
+ candidateKinds: ["rendering_candidate"]
6
+ frameworks: ["next@>=16.0.0"]
7
+ priority: 94
8
+ citations: ["https://nextjs.org/docs/app/api-reference/config/next-config-js/cacheComponents", "https://nextjs.org/docs/app/getting-started/caching", "https://nextjs.org/docs/app/guides/migrating-to-cache-components"]
9
+ maxBriefChars: 900
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ On Next.js 16 with Cache Components, avoid older segment-config advice. The right question is whether the route can keep a static shell while dynamic data moves behind explicit cached or runtime boundaries.
14
+
15
+ ## Evidence To Check
16
+ Check `cacheComponents`, `use cache`, `cacheLife`, request-time APIs, Suspense boundaries, and scanner evidence such as `force-dynamic` or `headers-in-page`.
17
+
18
+ ## Do Not Recommend When
19
+ Do not suggest `dynamic`, `revalidate`, or `fetchCache` as the primary fix when Cache Components is enabled. Do not cache request-personalized content.
20
+
21
+ ## Verification
22
+ Name the Next.js version, Cache Components state, dynamic trigger, and the exact boundary or directive that can change.
@@ -0,0 +1,23 @@
1
+ ---
2
+ id: cache-components-suspense-dedupe-pitfall
3
+ title: Cache Components Suspense dedupe pitfall
4
+ status: active
5
+ candidateKinds: ["cache_components_suspense_dedupe"]
6
+ frameworks: ["next@>=16.0.0"]
7
+ scannerPatterns: ["cache-components-suspense-dedupe"]
8
+ priority: 87
9
+ citations: ["https://nextjs.org/docs/app/api-reference/directives/use-cache", "https://nextjs.org/docs/app/api-reference/config/next-config-js/cacheComponents", "https://nextjs.org/docs/app/guides/migrating-to-cache-components"]
10
+ maxBriefChars: 900
11
+ ---
12
+
13
+ ## Investigation Brief
14
+ Default `'use cache'` does not dedupe identical calls across separate `<Suspense>` boundaries on the same render. Each boundary re-invokes the cached function, multiplying function-duration and ISR write churn.
15
+
16
+ ## Evidence To Check
17
+ Confirm the scanner finding's repeated fetch URL or helper name. Verify the call sites are within the same route segment and inside distinct `<Suspense>` boundaries. Cross-reference `fnDurationP95ByRoute` and `isrWritesByRoute` for the owning route.
18
+
19
+ ## Do Not Recommend When
20
+ Skip if the repeated call is intentional (different parameters, different intent). Skip if the duplicate is in a single component body where in-request memoization already applies.
21
+
22
+ ## Verification
23
+ Name the duplicated call, count, and either: (a) the page-level promise to hoist or (b) the function to move to `'use cache: remote'`.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: cdn-cache-auth-safety
3
+ title: CDN cache auth safety
4
+ status: active
5
+ candidateKinds: ["uncached_route", "cache_header_gap"]
6
+ frameworks: ["*"]
7
+ priority: 100
8
+ citations: ["https://vercel.com/docs/caching/cdn-cache", "https://vercel.com/docs/caching/cache-control-headers", "https://vercel.com/docs/project-configuration"]
9
+ maxBriefChars: 900
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ Treat edge caching as a safety question first. The route must be a public, cacheable GET path before a shared-cache recommendation is allowed.
14
+
15
+ ## Evidence To Check
16
+ Use `methodDistribution`, `cacheBreakdown`, and headers. Before `s-maxage`, rule out cookies, sessions, authorization, draft state, and user-specific data.
17
+
18
+ ## Do Not Recommend When
19
+ Do not cache mutations, dashboards, account data, request-personalized responses, or routes whose value changes per viewer. Do not mix `private` with shared-cache directives.
20
+
21
+ ## Verification
22
+ Name GET share, cache mix, file line, and policy: mechanism, scope, TTL/freshness, and `Vary`. If the right policy is `no-store`, emit no-change/observation.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: cold-start-initialization-bundle
3
+ title: Cold-start initialization and bundle weight
4
+ status: active
5
+ candidateKinds: ["cold_start"]
6
+ frameworks: ["*"]
7
+ priority: 92
8
+ citations: ["https://vercel.com/docs/functions/debug-slow-functions", "https://vercel.com/docs/functions/limitations", "https://vercel.com/docs/functions/runtimes"]
9
+ maxBriefChars: 850
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ Cold-start candidates need a code-path check, not only a project-setting check. First prove whether cold requests are paying for imports, module-scope setup, runtime choice, or dependency weight.
14
+
15
+ ## Evidence To Check
16
+ Use `startTypeSplit`, `coldVsWarmLatencyP95`, and `coldByDeployment`. In source, inspect module-scope SDK setup, database/client construction, top-level network calls, heavy dependencies, runtime exports, and deployment-local changes.
17
+
18
+ ## Do Not Recommend When
19
+ Do not blame cold starts when warm requests are similarly slow. Do not recommend keep-warm traffic or more memory before proving initialization or runtime pressure.
20
+
21
+ ## Verification
22
+ Name the cold-start share, cold-vs-warm gap, and exact initialization, dependency, or runtime line that explains it.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: core-web-vitals-client-bottlenecks
3
+ title: Core Web Vitals client bottlenecks
4
+ status: active
5
+ candidateKinds: ["cwv_poor"]
6
+ frameworks: ["*"]
7
+ priority: 90
8
+ citations: ["https://vercel.com/docs/speed-insights", "https://web.dev/articles/vitals", "https://web.dev/articles/optimize-lcp", "https://web.dev/articles/optimize-inp", "https://web.dev/articles/optimize-cls"]
9
+ maxBriefChars: 850
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ Core Web Vitals candidates need metric-specific investigation. LCP, INP, and CLS usually have different causes and fixes.
14
+
15
+ ## Evidence To Check
16
+ Use the poor metric in the deep dive first. For LCP, inspect server response and critical media. For INP, inspect heavy client JavaScript and interaction handlers. For CLS, inspect dimensions, fonts, and injected content.
17
+
18
+ ## Do Not Recommend When
19
+ Do not emit a generic “improve Web Vitals” recommendation. Do not optimize a metric that is not poor for this route.
20
+
21
+ ## Verification
22
+ Name the poor p75 metric, its value, and the exact source mechanism behind that metric.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: database-egress-pooling-region
3
+ title: Database region and connection pressure
4
+ status: active
5
+ candidateKinds: ["slow_route"]
6
+ frameworks: ["*"]
7
+ priority: 60
8
+ citations: ["https://vercel.com/docs/regions", "https://vercel.com/docs/functions", "https://vercel.com/docs/functions/functions-api-reference/vercel-functions-package", "https://vercel.com/docs/functions/limitations"]
9
+ maxBriefChars: 800
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ Only recommend database or region changes when source and metrics both point to downstream I/O rather than in-process compute.
14
+
15
+ ## Evidence To Check
16
+ Compare `cpu.p95` with `latency.p95`, then inspect database awaits, query fan-out, connection creation, pool lifecycle handling, and configured regions in project files.
17
+
18
+ ## Do Not Recommend When
19
+ Do not name a database provider, pooling product, or region change unless the repo and project config prove it applies.
20
+
21
+ ## Verification
22
+ Tie the finding to the observed wall-clock gap and the exact query, pool, or region configuration line.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: dynamic-rendering-traps
3
+ title: Dynamic rendering traps
4
+ status: active
5
+ candidateKinds: ["rendering_candidate"]
6
+ frameworks: ["next@>=13.0.0"]
7
+ priority: 90
8
+ citations: ["https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config", "https://nextjs.org/docs/app/api-reference/functions/generate-static-params", "https://nextjs.org/docs/app/building-your-application/rendering/partial-prerendering"]
9
+ maxBriefChars: 850
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ Rendering candidates are only actionable when the dynamic behavior is accidental. First prove that the route can be static, ISR, or partially static.
14
+
15
+ ## Evidence To Check
16
+ Inspect `dynamic`, `revalidate`, `generateStaticParams`, route params, and dynamic APIs such as request headers or cookies. Check whether the dynamic call is in a layout, because that can affect a larger route tree.
17
+
18
+ ## Do Not Recommend When
19
+ Do not remove dynamic rendering for auth, personalization, draft mode, per-request redirects, or request-specific data.
20
+
21
+ ## Verification
22
+ The recommendation must cite the dynamic trigger and explain why the target route can tolerate static or ISR behavior.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: external-api-critical-path-platform
3
+ title: Cross-framework external API critical path
4
+ status: active
5
+ candidateKinds: ["external_api_slow"]
6
+ frameworks: ["*"]
7
+ priority: 86
8
+ citations: ["https://vercel.com/docs/functions/debug-slow-functions", "https://vercel.com/docs/caching/runtime-cache", "https://vercel.com/docs/functions/functions-api-reference/vercel-functions-package"]
9
+ maxBriefChars: 850
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ External API candidates are actionable only when the slow hostname is on a customer route's critical path. Prove the route waits on it before suggesting a cache, payload, or post-response change.
14
+
15
+ ## Evidence To Check
16
+ Use hostname latency, caller routes, transfer bytes, and source awaits. Check sequential calls, overbroad payloads, repeated shared data, and side effects that can move after the response.
17
+
18
+ ## Do Not Recommend When
19
+ Do not cache mutations, secrets, per-user responses, or unknown freshness contracts. Do not blame Vercel runtime when the upstream owns the latency.
20
+
21
+ ## Verification
22
+ Name the hostname, caller route, observed p75/p95 or bytes, and exact await or fetch line that blocks the response.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: external-api-critical-path
3
+ title: External API critical path
4
+ status: active
5
+ candidateKinds: ["external_api_slow"]
6
+ frameworks: ["next@>=13.0.0"]
7
+ priority: 90
8
+ citations: ["vercel-react-best-practices:async-parallel", "vercel-react-best-practices:server-parallel-fetching", "vercel-react-best-practices:server-cache-react"]
9
+ maxBriefChars: 850
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ For external API candidates, identify the customer route that waits on the slow hostname and whether the call is on the critical path.
14
+
15
+ ## Evidence To Check
16
+ Use callers-by-route evidence, transfer size, and source awaits. Check whether the upstream call can run in parallel, be cached safely, be reduced in payload size, or move after response.
17
+
18
+ ## Do Not Recommend When
19
+ Do not cache mutations, secrets, per-user responses, or upstream calls whose freshness requirement is unknown.
20
+
21
+ ## Verification
22
+ Name the hostname, caller route, p75 or p95 latency, and the exact source line that waits on the call.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: fast-data-transfer-payloads
3
+ title: Fast Data Transfer payloads
4
+ status: active
5
+ candidateKinds: ["uncached_route"]
6
+ frameworks: ["*"]
7
+ priority: 65
8
+ citations: ["https://vercel.com/docs/manage-cdn-usage", "https://vercel.com/docs/caching/cdn-cache"]
9
+ maxBriefChars: 900
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ When uncached routes carry high bandwidth, check payload shape before recommending only cache headers. Fast Data Transfer includes the bytes transferred by requests and responses; compare compressed response sizes to the signal, not raw JSON.
14
+
15
+ ## Evidence To Check
16
+ Use `bandwidthByCache`, response size, and source serialization. Look for unbounded JSON, large embedded objects, static files through functions, missing pagination.
17
+
18
+ ## Do Not Recommend When
19
+ Do not shrink payloads without identifying fields or assets that are unnecessary for the route’s response.
20
+
21
+ ## Verification
22
+ Tie the finding to observed bytes, cache result mix, and the exact response line. A "large payload" claim must reflect post-compression bytes — the unit FDT meters.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: fluid-compute-caveats
3
+ title: Fluid compute caveats
4
+ status: active
5
+ candidateKinds: ["platform_fluid_compute", "cold_start"]
6
+ frameworks: ["*"]
7
+ priority: 80
8
+ citations: ["https://vercel.com/docs/fluid-compute"]
9
+ maxBriefChars: 900
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ Fluid compute is a project-level lever. Use it when the setting is off and metrics show cold-start or warm-instance reuse pressure. Fluid can handle multiple invocations in one function instance; avoid per-request state in module scope.
14
+
15
+ ## Evidence To Check
16
+ Check project facts, `startTypeSplit`, cold-vs-warm latency, and routes carrying the cold-start share. When enabling Fluid, audit module-state hazards Fluid surfaces (not creates): module-scoped mutable state, lazy singletons holding per-user data, globals keyed on per-request inputs.
17
+
18
+ ## Do Not Recommend When
19
+ Do not recommend enabling fluid compute when project facts say it is already on. Do not frame as a file-level code fix.
20
+
21
+ ## Verification
22
+ State project setting, cold-start rate or fallback slow-route signal, affected route concentration. If enabling, call out module-state audit as follow-up.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: function-duration-io-and-after
3
+ title: Function duration, I/O, and post-response work
4
+ status: active
5
+ candidateKinds: ["slow_route"]
6
+ frameworks: ["next@>=15.0.0"]
7
+ priority: 75
8
+ citations: ["https://nextjs.org/docs/app/api-reference/functions/after", "vercel-react-best-practices:async-parallel", "vercel-react-best-practices:server-after-nonblocking"]
9
+ maxBriefChars: 850
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ When wall-clock latency is much higher than CPU time, check critical-path awaits before blaming rendering or compute.
14
+
15
+ ## Evidence To Check
16
+ Compare `cpu.p95`, `ttfb.p95`, and `latency.p95`. In source, separate dependent awaits from independent awaits, and identify analytics, logging, or notification work that can run after the response.
17
+
18
+ ## Do Not Recommend When
19
+ Do not wrap dependent operations in `Promise.all`. Do not replace `Promise.allSettled` when partial failure handling is intentional.
20
+
21
+ ## Verification
22
+ Name the awaits that can move, the work that can run post-response, and the observed CPU-vs-wall-clock gap.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: function-invocation-reduction
3
+ title: Function invocation reduction
4
+ status: active
5
+ candidateKinds: ["slow_route"]
6
+ frameworks: ["next@>=13.0.0"]
7
+ priority: 70
8
+ citations: ["https://react.dev/reference/react/cache", "vercel-react-best-practices:server-parallel-fetching", "vercel-react-best-practices:server-cache-react"]
9
+ maxBriefChars: 850
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ For slow routes, prove duplicated in-request work in the listed files before recommending consolidation or memoization.
14
+
15
+ ## Evidence To Check
16
+ Look for repeated awaits, duplicate fetches, same-app route handler calls, and helpers that run more than once per request.
17
+
18
+ ## Do Not Recommend When
19
+ Do not collapse endpoints called independently by different clients. Do not persistently cache user-specific data. Do not recommend `Promise.all` for CPU-bound or compile-bound work unless trace/span evidence shows wait time to overlap. High `cpu.p95` near `latency.p95` is a warning sign, not proof of a latency win.
20
+
21
+ ## Verification
22
+ Quote duplicated call sites with `latency.p95`, `cpu.p95`, or request-count evidence. If the fix overlaps awaits, cite measured helper/span timing or state the impact is unmeasured.
@@ -0,0 +1,23 @@
1
+ ---
2
+ id: function-region-misconfiguration-ttfb
3
+ title: Function region misconfiguration (TTFB)
4
+ status: active
5
+ candidateKinds: ["region_misconfig"]
6
+ frameworks: ["*"]
7
+ scannerPatterns: ["region-pin-in-config"]
8
+ priority: 85
9
+ citations: ["https://vercel.com/docs/functions/configuring-functions/region", "https://vercel.com/docs/regions"]
10
+ maxBriefChars: 950
11
+ ---
12
+
13
+ ## Investigation Brief
14
+ A single function region is pinned. Per-region TTFB data is unavailable today (`evidence.dataGap`); treat as an audit prompt — validate the pinned region against user geo and data-source location before recommending changes.
15
+
16
+ ## Evidence To Check
17
+ Scanner subtype (`vercel-json-single`, `segment-preferred`) and pinned regions. Cross-check Speed Insights TTFB and country analytics for traffic geo. Locate the data source — proximity to it often wins on cache-miss paths.
18
+
19
+ ## Do Not Recommend When
20
+ Skip if TTFB is healthy across countries. Skip if pinned intentionally for data proximity. Skip on small projects (<20 routes). Do not propose multi-region without confirming the data layer is reachable without cross-region egress.
21
+
22
+ ## Verification
23
+ Name pinned region(s), traffic geo, data-source location, and a specific call: relocate, expand, or keep with a TTFB monitor.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: image-optimization-cost-control
3
+ title: Image optimization cost control
4
+ status: active
5
+ candidateKinds: ["image_optimization"]
6
+ frameworks: ["*"]
7
+ priority: 90
8
+ citations: ["https://vercel.com/docs/image-optimization", "https://vercel.com/docs/image-optimization/managing-image-optimization-costs", "https://vercel.com/docs/image-optimization/limits-and-pricing"]
9
+ maxBriefChars: 850
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ Image recommendations should distinguish real user-facing image work from wasteful transformations.
14
+
15
+ ## Evidence To Check
16
+ Inspect the sampled files for raw image tags, dimensions, remote sources, repeated transforms, source image limits, icons, SVGs, GIFs, and existing framework image components.
17
+
18
+ ## Do Not Recommend When
19
+ Do not route tiny icons, SVG UI assets, or animated GIFs through image optimization just because they are images. Do not change remote-source policy without checking the existing config.
20
+
21
+ ## Verification
22
+ Name the image files or components, current rendering path, and the metric or scanner evidence that makes optimization material.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: isr-revalidation-static-generation
3
+ title: ISR revalidation and static generation
4
+ status: active
5
+ candidateKinds: ["isr_overrevalidation"]
6
+ frameworks: ["next@>=13.4.0"]
7
+ priority: 95
8
+ citations: ["https://vercel.com/docs/incremental-static-regeneration", "https://nextjs.org/docs/app/api-reference/functions/revalidateTag", "https://nextjs.org/docs/app/api-reference/functions/revalidatePath"]
9
+ maxBriefChars: 1000
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ For ISR over-revalidation, the goal is to reduce unnecessary regeneration work without making content stale beyond the product’s tolerance.
14
+
15
+ ## Evidence To Check
16
+ Compare ISR writes to reads, then inspect the route’s `revalidate`, `cacheLife()`, tag invalidation, and content update path. Look for very short timer revalidation on routes where updates are event-driven. If recommending `cacheLife()` or `cacheTag()` for tagged content, prove the exact tags are invalidated by `revalidateTag()` or `updateTag()`; near-matches do not count.
17
+
18
+ ## Do Not Recommend When
19
+ Do not lengthen revalidation for inventory, pricing, auth, or other user-critical freshness without source evidence that stale content is acceptable. Do not claim existing CMS or webhook invalidation unless the matching invalidation call or config is in the allowed files.
20
+
21
+ ## Verification
22
+ Tie the fix to the observed ISR writes per read and the line that controls revalidation or on-demand invalidation.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: middleware-proxy-edge-cost
3
+ title: Middleware edge cost
4
+ status: active
5
+ candidateKinds: ["middleware_heavy"]
6
+ frameworks: ["next@>=12.0.0"]
7
+ priority: 90
8
+ citations: ["https://nextjs.org/docs/app/building-your-application/routing/middleware", "https://vercel.com/docs/routing-middleware"]
9
+ maxBriefChars: 850
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ Middleware recommendations should reduce unnecessary interception, not remove required request handling.
14
+
15
+ ## Evidence To Check
16
+ Use `topMiddlewarePaths` and the matcher config. Confirm which paths need auth, rewrites, headers, or locale handling. Check whether static assets, images, or routes with no middleware need are being matched.
17
+
18
+ ## Do Not Recommend When
19
+ Do not narrow the matcher in a way that bypasses required auth or routing behavior. Do not move middleware work into every route if the current matcher is already scoped.
20
+
21
+ ## Verification
22
+ State the current middleware share, the dominant matched paths, and the exact matcher line to change.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: next-fetch-revalidate-floor
3
+ title: Next.js fetch revalidation floor
4
+ status: active
5
+ candidateKinds: ["uncached_route", "isr_overrevalidation"]
6
+ frameworks: ["next@>=13.0.0"]
7
+ priority: 88
8
+ citations: ["https://nextjs.org/docs/app/api-reference/functions/fetch", "https://nextjs.org/docs/app/building-your-application/caching"]
9
+ maxBriefChars: 850
10
+ ---
11
+
12
+ ## Investigation Brief
13
+ Next.js `fetch` options can set the route's effective cache floor. Low `revalidate`, `revalidate: 0`, or `cache: 'no-store'` can explain uncached traffic and excessive ISR work.
14
+
15
+ ## Evidence To Check
16
+ Inspect route-tree `fetch` calls. Compare route revalidation with per-fetch `cache`, `next.revalidate`, tags, dynamic APIs, and duplicated URLs with conflicting options.
17
+
18
+ ## Do Not Recommend When
19
+ Do not raise freshness windows for pricing, inventory, auth, draft, or user-specific data unless the source proves stale reads are acceptable.
20
+
21
+ ## Verification
22
+ Name the observed cache or ISR signal, the lowest cache setting that controls the route, and the exact fetch line to change.
@@ -0,0 +1,23 @@
1
+ ---
2
+ id: next-font-cls-self-hosting
3
+ title: Next.js font CLS guardrail
4
+ status: active
5
+ candidateKinds: ["cwv_poor"]
6
+ frameworks: ["next@>=13.2.0"]
7
+ metrics: ["CLS"]
8
+ priority: 86
9
+ citations: ["https://nextjs.org/docs/app/api-reference/components/font", "https://web.dev/articles/optimize-cls"]
10
+ maxBriefChars: 800
11
+ ---
12
+
13
+ ## Investigation Brief
14
+ For poor CLS, check fonts only when the route actually loads external font CSS or swaps text after render.
15
+
16
+ ## Evidence To Check
17
+ Inspect layouts and global styles for external font links, CSS imports, custom font-face rules, late-loading font classes, and whether `next/font` is already used.
18
+
19
+ ## Do Not Recommend When
20
+ Do not migrate fonts when CLS is caused by images, ads, embeds, or injected UI. Do not suggest `next/font` for unsupported Next.js versions.
21
+
22
+ ## Verification
23
+ Name the CLS value, font-loading mechanism, and the exact layout or stylesheet line to change.
@@ -0,0 +1,23 @@
1
+ ---
2
+ id: next-heavy-ui-lazy-load-boundaries
3
+ title: Next.js heavy UI lazy-load boundaries
4
+ status: active
5
+ candidateKinds: ["cwv_poor"]
6
+ frameworks: ["next@*"]
7
+ metrics: ["LCP", "INP"]
8
+ priority: 82
9
+ citations: ["https://nextjs.org/docs/app/guides/lazy-loading", "https://web.dev/articles/optimize-inp"]
10
+ maxBriefChars: 850
11
+ ---
12
+
13
+ ## Investigation Brief
14
+ Heavy above-the-fold or rarely used UI can hurt LCP and INP when it ships too much JavaScript on first load. Look for concrete route-local UI, not generic bundle advice.
15
+
16
+ ## Evidence To Check
17
+ Inspect client components, menus, search overlays, personalization widgets, maps, editors, and large imported libraries. Check whether they can load on interaction, viewport, or route entry with `next/dynamic` or dynamic import.
18
+
19
+ ## Do Not Recommend When
20
+ Do not lazy-load essential above-the-fold content needed for initial meaning or accessibility. Do not use `ssr: false` from a Server Component.
21
+
22
+ ## Verification
23
+ Name the poor metric, heavy UI boundary, imported library or component, and exact line to split.