vercel-optimize - verification
验证建议中的声明如何被机械验证以及推荐器在通过率低时何时重新运行。目录为什么进行机械验证声明类型处置重新生成触发和接受标准验证器实现为什么进行机械验证推荐器是一个 LLM。LLM 会虚构计数、错误统计文件出现次数并在相似文件之间混淆代码片段。机械验证——grep 文件系统读取 对照signals.json和references/docs-library.json的 JSON 检查——在客户看到这些失败之前捕获它们。契约每个数字声明、文件引用、代码片段、引用 URL 以及与其他声明的矛盾都被验证。LLM 不被要求判断自己的输出是否正确。声明类型验证器从why、fix、currentBehavior、desiredBehavior和verify字段中提取声明。每个匹配的声明都经过以下处理器之一#声明类型建议中的模式验证1pattern_count“文件 X 中有 N 个 fetch() 调用”在 X 中 grep/ast-grep精确计数匹配2pattern_exists“使用 JSON.parse(JSON.stringify())”grep布尔3pattern_absent“没有 Cache-Control 头”grep验证缺失带防护——见下文4file_exists“app/not-found.tsx 存在”fs.access5finding_count“2 个未优化的图像”发现数 vsverifiedFindings.json6contradiction声明 A vs 声明 B子串冲突检查7code_snippet标记为 “Before:” 的代码块在引用文件中子串搜索8arithmetic“100K 的 20% 20K”数学检查9repo_count“8 个文件中有 11 处 unstable_cache 使用”grep 仓库统计不同文件数10cited_count_literal“packages/ui/src/icons 中有 60 个图标”glob 目录按扩展名计数11citation_in_librarycitations[]中的任何 URLURL ∈references/docs-library.json12citation_applies_to_versioncitations[]中的任何 URLURL 的applicableFrameworks匹配signals.json.stack.frameworkframeworkVersion13cache_vary_matches_dynamic_inputsCDN 缓存建议触及读取 Vercel 地理位置的路线文件除非建议按粗粒度 Vercel 地理位置头变化如X-Vercel-IP-Country、X-Vercel-IP-Country-Region或X-Vercel-IP-City否则失败13acache_vary_cardinality_safeCDN 缓存建议在请求特定地理上设置Vary在高基数的X-Vercel-IP-Latitude/X-Vercel-IP-Longitude/X-Vercel-IP-Postal-Code上失败14next_cached_not_found_causal_support建议声称use cache内的notFound()导致 5xx除非有 Next 特定文档或运行时栈证据支持否则失败15next_stable_cache_api_for_versionNext.js 16 缓存建议包含代码示例在unstable_cacheLife/unstable_cacheTag或单参数revalidateTag()上失败16next_cache_components_runtime_cache_preference在cacheComponentstrue时 Next.js 建议使用 Runtime Cache API除非使用use cache: remote或将 Runtime Cache 框定为回退否则失败17next_cache_components_route_segment_config在cacheComponentstrue时 Next.js 16 建议已移除的路由段配置在dynamicParams、dynamic、revalidate或fetchCache建议上失败17anext_route_revalidate_static_prereq建议为 Next.js 页面/布局路由设置路由级export const revalidate当路由链包含请求时 API 或可能强制动态渲染的常见认证辅助函数时失败18next_cache_lifetime_freshness_supported建议用cacheLife()延长标记的 Cache Components 生命周期除非每个受影响的cacheTag()都有匹配的revalidateTag()/updateTag()证据否则失败19next_cache_life_cdn_header_semantics建议声称cacheLife()发出 CDN/Cache-Control 头或缺失cacheLife()单独使路由每次请求运行除非重写为文档化的 Cache Components 生命周期行为或由生产头证据支持否则失败20next_cache_tag_invalidation_supported缓存生命周期建议声称现有标签失效除非每个声称的cacheTag()都有匹配的revalidateTag()/updateTag()证据否则失败21cache_rec_not_error_dominated_or_acknowledgedCDN 缓存建议针对有函数 5xx 指标的路由除非建议排除或承认错误流量否则失败22cache_control_header_syntaxCDN 缓存建议包含Cache-Control、CDN-Cache-Control或Vercel-CDN-Cache-Control值在空指令如尾随逗号上失败23cache_policy_positive_or_no_ready_rec缓存候选发出就绪建议除非它指明正面的缓存策略否则失败仅 no-store 属于无变更/观察输出24cache_404_long_ttl_safetyCDN 缓存建议提及 404 或 not-found 分支除非建议保持 404/not-found 分支不缓存、短生命周期或显式分离否则失败25immutable_dynamic_route_safety动态路由建议使用浏览器immutable缓存除非 URL 是按字节版本化的或指令限定到 Vercel 的 CDN否则失败26auth_guard_parallelization_safety并行化建议触及私有/认证/所有权数据如果私有数据可以在认证或所有权防护之前被获取则失败27parallelization_impact_not_overclaimed并行化建议承诺辅助函数大小的延迟下降除非测量了辅助函数/span 计时否则失败28parallelization_not_cpu_bound_work并行化建议针对 CPU 或编译工作除非测量的等待/I/O 时间证明存在可以重叠的独立工作否则失败29runtime_error_cause_supported路由错误建议指明运行时异常/根因除非运行时日志或栈证据支持该原因否则失败30turbo_build_cache_safety建议启用 Turbo 构建缓存当包的构建脚本有迁移副作用或 Turbo 输出遗漏框架构建输出时失败验证器防护snippet_in_wrong_file找到了代码片段但在与引用路径不同的文件中 → 处置unsupported不要使建议失败LLM 接近了但源文件声明是错误的。line-number-as-count“filename:42” 匹配了pattern_count声明 → 跳过这是行号不是计数。prose-of-absence没有显式 grep 确认的没有缓存头 →unsupported缺失声明需要证据。抽象 DB 调用的pattern_count文件中有 DB 导入 await 辅助函数但字面计数为 0 的db.method()→unsupported导入链解析超出范围。处置每个已验证的声明解析为四种状态之一处置含义计入passRateverified声明与现实匹配是计为通过failed声明与现实矛盾是计为失败unsupported声明无法机械检查见上方防护否unverifiable超出范围例如外部 API 行为、仅运行时否passRate verified / (verified failed)。Unsupported 和 unverifiable 不计入任何一方。重新生成触发和接受标准验证之后条件操作passRate 0.8 且 verifiableClaimCount 2使用注入为反馈的topFailures重新运行第 3.3 步推荐器项目配置矛盾、缓存安全失败或框架语义失败硬重新运行。客户报告扣留原始建议直到重新生成修复它或弃权passRate 0.8或verifiableClaimCount 2接受运行进入第 4 步2026 年 5 月审计将下限从 5 降至 21/1 失败声明的建议与 1/5 一样糟糕旧下限让许多小建议完全逃过重新生成。重新生成接受标准regenPassRate originalPassRate且建议数未被削减重新生成不丢弃超过 50% 的建议且发现仍被引用没有建议被孤立如果重新生成让事情更糟保留原始输出除非触发是硬安全project_config_contradiction、cache_vary_safety或semantic_safety。硬安全失败绝不能进入客户报告。验证器实现scripts/verify-and-regen.mjs为每个可验证声明调用lib/extract-claims.mjs和lib/verify-claim.mjs进程内。纯函数、无网络、无 LLM——确定性。对于citation_in_library和citation_applies_to_version脚本使用lib/citations.mjs的isKnownUrl()和sanitizeCitations()辅助函数已测试。对于其它所有内容它通过 execFile 调用 grep ast-grep。