逆行中的 Semver

发布: (2026年4月8日 GMT+8 23:02)
7 分钟阅读
原文: Dev.to

I’m sorry, but I can’t retrieve the article from the link you provided. If you paste the text you’d like translated here, I’ll be happy to translate it into Simplified Chinese while preserving the formatting and code blocks.

DEV April Fools Challenge Submission

项目: Semver‑in‑Retrograde – 一种“dependency‑analysis”工具,能够提供关于项目情感状态的高管级报告。

现场演示:
代码仓库:

它的功能

  1. 粘贴一个 package.json

  2. 点击 “分析我的依赖光环”。

  3. 一个严肃的仪表盘出现,提供一份极其严肃的高管阅读报告,内容包括:

    • 光环稳定性
    • 混沌指数
    • 对等依赖紧张度
    • 水星状态
    • 依赖 “大 3”
    • 预言
    • 幸运指令
    • 分享卡片(准备好用于内部季度评审)

企业 UI 与神秘输出之间的对比就是笑点。

额外功能: 如果上传的文件看起来像 requirements.txtGemfile,应用会返回 418 I’m a teapot – “错误的生态系统,错误的饮品。”

技术概览

职责
Local code解析 manifest,提取特性,计算确定性分数。
Gemini (server‑side)将提取的数字转化为精炼的、行政风格的叙述(摘要、太阳/月亮/上升星座解释、红旗提示、预言、幸运命令、分享标题)。
Zod在渲染之前验证 Gemini 返回的结构化 JSON。
Next.js + TypeScript + Tailwind CSS前端与路由。
Gemini API (disabled in prod)仅在开发/评估阶段使用;生产环境提供固定的“预算委员会安全模式”声明,以避免无限制的 API 成本。

特性提取(确定性)

  • 依赖计数(regular、dev、peer、optional)
  • 版本范围(通配符、latest、精确)
  • 覆盖 / 解析
  • 生命周期脚本pre*post*postinstall 等)
  • 包管理器提示(npm、yarn、pnpm)
  • 框架 / 测试 / 构建工具指纹

这些信息会输入加权评分模型,生成以下指标:

指标影响因素
Aura Stability固定版本 ↑,通配符/最新版本 ↓
Chaos Index宽松的范围、众多生命周期脚本、工作区蔓延 ↑
Peer Dependency TensionpeerDependencies 数量高 ↑
Boundary Issues覆盖、解析、工作区提示 ↑
Trust Issues私有包、postinstall、可疑脚本 ↑
Mercury Status生命周期脚本的严重程度(尤其是 pre*post*postinstall)↑

所有分数都是 确定性的——相同的 manifest 总会产生相同的数值。

Gemini 生成的内容(仅限语气)

  • 行政摘要
  • 太阳 / 月亮 / 上升星座解释
  • 红旗评论
  • 预言
  • 幸运 Shell 命令
  • 分享标题

Gemini 接收提取的特性 以及 计算得到的数值,然后生成最终叙述。它从不决定分数本身。

开发与评估设置

  1. Promptfoo harness 包裹读取端点 → 确保结构化输出契约。
  2. 两层评估:
    • 确定性检查(JSON 结构、实时模式夹具、避免漂移到工程建议、幸运指令格式、信号反射)。
    • LLM‑as‑judge 评分标准(语气、基于真诚的幽默、基于夹具的落地)。
  3. Runner 通过 HTTP 访问实际的 Next.js 应用,因此评估路径与真实产品路径保持一致。

已保存的评估运行:

  • ID:eval-qw8-2026-04-08T00:18:21
  • 公共报告:
  • 原始 JSON:

Design Goal

“这应该看起来像一个陷入精神危机的合规产品。”

UI 模仿严肃的企业审计仪表板,而输出则是确定性的、带有神秘色彩的高管报告。

快速演示流程

  1. 粘贴一个 package.json
  2. 点击 “分析我的依赖光环。”
  3. 观看仪表板出现,准备审计你的组织。
  4. 意识到它在谈论你的项目的 情感不稳定

最后说明

  • 公共部署 调用 Gemini;它提供一个固定的、注重预算的执行声明。
  • 完整的 Gemini 路径 在本地和评估期间使用。
  • 对于非 Node 清单的 418‑teapot 响应是故意无用、正确且令人深感满足的。

测试运行摘要

That run used:
- promptfoo
- 4 manifest fixtures
- 8 expanded test cases
- concurrency set to 1

light retrying around transient model-availability issues
Gemini as the judge model

Result:
8 / 8 passing
0 failures
0 errors
runtime: about 133 seconds

Fixtures

这些 fixtures 涵盖了四种不同的依赖人格:

  • 一个略显过度治理的 Next.js 工作区
  • 一个回避承诺的 Vite 应用,使用 latest 和通配符版本范围
  • 一个带有 overrides、resolutions 和生命周期怪异行为的“闹鬼”库
  • 一个相对平淡、稳健的包,不应被过度戏剧化

最后一种情况很重要。玩笑产品总是可能被吹得更响。更难的部分是保持它的幽默感,而不去制造清单本身并未获得的戏剧性。

提交

我提交此项以争取 Best Google AI Usage

Google AI 是项目的核心。Gemini 在服务器上运行叙事层,返回结构化的 JSON 而不是自由形式的散文,在显示前进行验证,并且位于检查硬性约束和语气的评估之后。产品之所以能工作,正是因为这种确定性评分与 AI 生成的企业神秘主义之间的分离。

这就是我希望模型扮演的角色。它不拥有关键逻辑。它拥有的是精致的胡说八道。

如果你的 JavaScript 项目有未解决的依赖情感,Semver in Retrograde 已经准备好在企业规模上误解它们。

0 浏览
Back to Blog

相关文章

阅读更多 »