From 80817b8a2b6a047284b9c6ec1d1b1a11d462c157 Mon Sep 17 00:00:00 2001 From: Jesse Zhang <101612750+Nagi-ovo@users.noreply.github.com> Date: Wed, 10 Jun 2026 11:48:18 +0100 Subject: [PATCH] Data-only contributions: per-model JSON registry, validation, PR CI Contributors no longer touch site code. Model registration moves from cases.ts literals to repo-root models/.json files (filename = model id = outputs/ folder); cases move to cases.json; cases.ts now just derives MODELS/RUNS via import.meta.glob. Parallel PRs stop conflicting because each model owns its own file. scripts/validate-data.ts runs inside `bun run build` and a new PR CI workflow: dash-only ids, required bilingual provenance note per run, declared artifacts must exist, no orphan outputs/ dirs. Also: run notes render whitespace-pre-wrap (multi-line notes, idea from PR #2), README contribution guide rewritten around the JSON template, CLAUDE.md updated, OG card refreshed for the DeepSeek merge. Co-Authored-By: Claude Fable 5 --- .github/workflows/ci.yml | 20 ++++++++++++++++ README.md | 42 ++++++++++++++++++++++++++-------- models/claude-fable-5.json | 19 +++++++++++++++ models/composer-2-5.json | 13 +++++++++++ models/deepseek-v4-pro.json | 19 +++++++++++++++ models/gemini-3-1-pro.json | 13 +++++++++++ models/gemini-3-5-flash.json | 13 +++++++++++ models/glm-5-1.json | 5 ++++ models/gpt-5-5-pro.json | 13 +++++++++++ models/gpt-5-5-xhigh.json | 13 +++++++++++ models/grok-build.json | 13 +++++++++++ models/kimi-k2-6.json | 5 ++++ models/minimax-m3.json | 5 ++++ models/mistral-medium-3-5.json | 5 ++++ models/qwen3-7-max.json | 5 ++++ 15 files changed, 193 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 models/claude-fable-5.json create mode 100644 models/composer-2-5.json create mode 100644 models/deepseek-v4-pro.json create mode 100644 models/gemini-3-1-pro.json create mode 100644 models/gemini-3-5-flash.json create mode 100644 models/glm-5-1.json create mode 100644 models/gpt-5-5-pro.json create mode 100644 models/gpt-5-5-xhigh.json create mode 100644 models/grok-build.json create mode 100644 models/kimi-k2-6.json create mode 100644 models/minimax-m3.json create mode 100644 models/mistral-medium-3-5.json create mode 100644 models/qwen3-7-max.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..8c2a3fb --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,20 @@ +name: CI + +on: + pull_request: + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: oven-sh/setup-bun@v2 + - name: Install dependencies + run: bun install + working-directory: site + - name: Type-check and build + run: bun run build + working-directory: site diff --git a/README.md b/README.md index 8362125..2d1dae7 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,10 @@ One-shot LLM eval cases by NAGI STUDIO: same prompt, different models, one attem ``` outputs//. 模型产出原文件(HTML / SVG),文件名 = 案例 id +models/.json 模型登记:label / vendor / order / 各案例运行备注 site/ 展示站点(Vite + React + Tailwind v4 + GSAP,bun 驱动) -site/src/data/cases.ts 案例定义:双语提示词、模型列表、运行备注 -.github/workflows/deploy.yml GitHub Pages 自动部署 +site/src/data/cases.json 案例定义:双语标题与提示词(维护者维护) +.github/workflows/ deploy.yml 自动部署;ci.yml 对 PR 跑数据校验 + 构建 ``` ## URL 规则 / URL scheme @@ -37,13 +38,34 @@ bun run dev # 同步 outputs/ 并启动 http://localhost:5173/ bun run build # 类型检查 + 产物构建(输出到 site/dist) ``` -## 添加案例或模型 / Adding a case or model +## 贡献一个模型产出 / Contributing a run -1. 把产出文件放进 `outputs//`,命名为 `.`(如 `mythos-craft.html`)。 -2. 在 `site/src/data/cases.ts` 里登记: - - 新模型:加入 `MODELS`(`status: 'ran' | 'pending'`)。 - - 新案例:加入 `CASES`(中英双语 `title` / `tagline` / `prompt`)。 - - 运行记录:在 `RUNS` 里登记案例 id 对应的模型 id(可附双语 `note` 运行备注;文件名不符合约定时用 `file` 覆盖)。 -3. 推送到 `main`,GitHub Actions 自动构建并部署。 +贡献**不需要改任何代码**,只涉及两类文件: -Drop the artifact into `outputs//` named `.`, register it in `site/src/data/cases.ts` (model in `MODELS`, case in `CASES` with bilingual prompts, run entry in `RUNS` with an optional per-model `note`), then push to `main` — GitHub Actions deploys automatically. +1. 产出文件:`outputs//.`(如 `outputs/gpt-5-5-pro/pelican-cycling.svg`)。 +2. 模型登记:`models/.json`(新模型新建文件;已有模型在 `runs` 里加一条): + +```json +{ + "label": "GPT-5.5 Pro", + "vendor": "OpenAI", + "order": 20, + "runs": { + "pelican-cycling": { + "note": { + "zh": "在哪个工具/产品里、什么思考档位、是否一次生成、是否有修复", + "en": "Which tool, what effort level, one-shot or fixed" + } + } + } +} +``` + +规则(CI 自动校验,不满足会挂): +- `model-id` 只用小写字母/数字/连字符(如 `doubao-seed-2-0-pro`),文件名与 `outputs/` 目录名一致; +- 每条 run 的 `note` **双语必填**——这是本仓库的可信度来源,必须写明产出怎么来的; +- 声明的 run 必须有对应的产出文件。 + +提 PR 后 CI 会跑数据校验 + 构建;合入 `main` 自动部署。 + +Contributions are data-only — no code changes needed. Drop the artifact into `outputs//.` and register it in `models/.json` (schema above). CI enforces: dash-only ids matching the folder name, a required bilingual provenance `note` per run, and that every declared run has its artifact. Merges to `main` deploy automatically. diff --git a/models/claude-fable-5.json b/models/claude-fable-5.json new file mode 100644 index 0000000..dc29716 --- /dev/null +++ b/models/claude-fable-5.json @@ -0,0 +1,19 @@ +{ + "label": "Claude Fable 5", + "vendor": "Anthropic", + "order": 10, + "runs": { + "mythos-craft": { + "note": { + "zh": "在 Claude 网页版以 Fable 5 Max(最高思考强度)运行,过程中触发一次 auto compact 与工具调用上限,手动输入「继续」后完成;ID 水印与英文支持为事后在 Cursor 中用 Composer 2.5 Fast 一条提示词补加,其余均为一次生成。已知小问题:开局可能卡在一棵树里,按一下 G 即可脱身。", + "en": "Run in the Claude web app on Fable 5 Max (max thinking effort); hit one auto-compact and the tool-call limit mid-run, finished after a manual \"continue\". The ID watermark and English support were patched in afterwards with a single prompt via Composer 2.5 Fast in Cursor; everything else is one-shot. Known quirk: you may spawn stuck inside a tree - press G once to get free." + } + }, + "pelican-cycling": { + "note": { + "zh": "在 Claude 网页版以 Fable 5 Max(最高思考强度)一次生成。", + "en": "Generated in one shot in the Claude web app on Fable 5 Max (max thinking effort)." + } + } + } +} diff --git a/models/composer-2-5.json b/models/composer-2-5.json new file mode 100644 index 0000000..ebb399b --- /dev/null +++ b/models/composer-2-5.json @@ -0,0 +1,13 @@ +{ + "label": "Composer 2.5", + "vendor": "Cursor", + "order": 70, + "runs": { + "mythos-craft": { + "note": { + "zh": "在 Cursor 中以 Composer 2.5 生成;本页为修复版(改 1 行)+ 补一个小功能。问题:第 1152 行水平速度先乘 speed*dt,位移时又乘一次 dt,实际步速只有设计值(5 格/秒)的约 1/60。修复前:走路如蜗牛、跳跃下落却正常;沙漠雪地等群系与神话建筑实际走不到,体感像「切换不了场景」——游戏本无传送功能,群系需步行抵达。原因:X/Z 轴把「每帧位移」当「每秒速度」存入 velocity,与 Y 轴语义不一致。去掉一次 dt 后步行恢复 5 格/秒。另外它确实生成了精灵螺旋塔、龙神殿、天空遗迹三处景点(也画在小地图上),但原版只能徒步抵达——已补加按 G 依次瞬移到三处景点的功能,开屏说明里也加了一行。", + "en": "Generated with Composer 2.5 in Cursor; fixed build (1 line changed) plus one small addition. Bug: line 1152 multiplied horizontal velocity by speed*dt, then displacement multiplied by dt again, leaving walking at ~1/60 of the designed 5 blocks/s. Before the fix: walking crawled while jumping/falling felt normal, and biomes or mythic structures were virtually unreachable — which read as \"scene switching is broken\" (there is no teleport; biomes are reached on foot). Cause: X/Z stored per-frame displacement in a per-second velocity field, inconsistent with the Y axis. With one dt removed walking is back to 5 blocks/s. It does generate three landmarks (Elven Spiral Tower, Dragon Temple, Sky Ruins — also drawn on the minimap) that were only reachable on foot, so a G-key cycle-teleport to them was added, with a line in the start screen." + } + } + } +} diff --git a/models/deepseek-v4-pro.json b/models/deepseek-v4-pro.json new file mode 100644 index 0000000..f8b00c6 --- /dev/null +++ b/models/deepseek-v4-pro.json @@ -0,0 +1,19 @@ +{ + "label": "DeepSeek-V4-Pro", + "vendor": "DeepSeek", + "order": 90, + "runs": { + "mythos-craft": { + "note": { + "zh": "在 Claude Code 中以 DeepSeek V4 Pro(最高思考强度)一次生成,未修复。包含 Perlin 噪声地形、WASD + 鼠标第一人称操控、12 种方块类型(含水、黑曜石、水晶、金块等)、程序化材质纹理、四种神话建筑(水晶塔、石环阵、龙骨遗迹、天空遗迹),按 G 可随机传送至神话建筑。", + "en": "Generated in one shot via Claude Code with DeepSeek V4 Pro (max thinking effort), no fixes. Features Perlin noise terrain, WASD + mouse first-person controls, 12 block types (including water, obsidian, crystal, gold), procedural textures, and four mythic structures (Crystal Tower, Stone Circle, Dragon Skeleton, Sky Ruins). Press G to teleport between landmarks." + } + }, + "pelican-cycling": { + "note": { + "zh": "在 Claude Code 中以 DeepSeek V4 Pro(最高思考强度)一次生成。场景包含天空、海洋、沙滩、棕榈树、海鸥、完整自行车细节(辐条、链条、齿轮)以及鹈鹕(长喙、喉囊、羽翼、踩踏动作)。", + "en": "Generated in one shot via Claude Code with DeepSeek V4 Pro (max thinking effort). Scene includes sky, ocean, beach, palm trees, seagulls, detailed bicycle (spokes, chain, gears), and a pelican (beak, gular pouch, wings, pedaling pose)." + } + } + } +} diff --git a/models/gemini-3-1-pro.json b/models/gemini-3-1-pro.json new file mode 100644 index 0000000..f359016 --- /dev/null +++ b/models/gemini-3-1-pro.json @@ -0,0 +1,13 @@ +{ + "label": "Gemini 3.1 Pro", + "vendor": "Google", + "order": 40, + "runs": { + "mythos-craft": { + "note": { + "zh": "通过 AntiGravity 生成(thinking effort: high);一次生成,未发现需要修复的问题,原样展示。", + "en": "Generated via AntiGravity (thinking effort: high); one shot, no fixes needed — shown as-is." + } + } + } +} diff --git a/models/gemini-3-5-flash.json b/models/gemini-3-5-flash.json new file mode 100644 index 0000000..93cd3fa --- /dev/null +++ b/models/gemini-3-5-flash.json @@ -0,0 +1,13 @@ +{ + "label": "Gemini 3.5 Flash", + "vendor": "Google", + "order": 50, + "runs": { + "mythos-craft": { + "note": { + "zh": "通过 AntiGravity 生成(thinking effort: high);本页为修复版(仅改 1 行)。问题:16 张贴图按「上为原点」的行序画进 4×4 图集,UV 坐标表也按同一行序编写,但 CanvasTexture 默认 flipY=true 把采样行上下镜像(第 r 行实际采到第 3-r 行)。修复前:草地顶面显示成紫水晶、侧面采到带透明孔洞的传送门/树叶贴图,配合 alphaTest 出现大量「透明方块」,放置的方块贴图与名称完全对不上。原因:flipY 与图集行序约定不一致。加上 flipY=false 后行序对齐,地形与方块全部正常。", + "en": "Generated via AntiGravity (thinking effort: high); fixed build (1 line changed). Bug: 16 tiles drawn into a 4x4 atlas with top-origin rows, and the UV table uses the same convention, but CanvasTexture's default flipY=true mirrors the rows on sampling (row r actually reads row 3-r). Before the fix: grass tops rendered as purple crystal, sides sampled the portal/leaves tiles with alpha holes — hence the many \"transparent blocks\" — and placed blocks never matched their names. Cause: flipY disagreeing with the atlas row convention. With flipY=false everything lines up." + } + } + } +} diff --git a/models/glm-5-1.json b/models/glm-5-1.json new file mode 100644 index 0000000..ffea8ae --- /dev/null +++ b/models/glm-5-1.json @@ -0,0 +1,5 @@ +{ + "label": "GLM-5.1", + "vendor": "Zhipu AI", + "order": 120 +} diff --git a/models/gpt-5-5-pro.json b/models/gpt-5-5-pro.json new file mode 100644 index 0000000..5db31df --- /dev/null +++ b/models/gpt-5-5-pro.json @@ -0,0 +1,13 @@ +{ + "label": "GPT-5.5 Pro", + "vendor": "OpenAI", + "order": 20, + "runs": { + "mythos-craft": { + "note": { + "zh": "以 GPT-5.5 Pro(开启 Extended Pro)生成;本页为修复版(仅改 1 行)。问题:14 张贴图排成 8×2 图集、第二行只画了 6 格,UV 按左上原点计算却未设 flipY=false,两行贴图上下互换采样。修复前:草地顶面显示成黑曜石(地面全黑),树叶、沙子采到未绘制的空格(大片纯黑),放置方块的贴图互相串行、颜色诡异似反色。原因:CanvasTexture 默认 flipY=true,与自上而下的图集布局不匹配。加上 flipY=false 后地形与方块颜色全部正常。", + "en": "Generated with GPT-5.5 Pro (Extended Pro enabled); fixed build (1 line changed). Bug: 14 tiles in an 8x2 atlas with only 6 slots drawn in row two, UVs computed from a top-left origin without flipY=false, so the two rows swapped on sampling. Before the fix: grass tops rendered as obsidian (black ground), leaves and sand hit undrawn slots (large black patches), and placed blocks wore each other's textures with inverted-looking colors. Cause: CanvasTexture defaults to flipY=true, mismatching the top-down atlas layout. With flipY=false everything renders correctly." + } + } + } +} diff --git a/models/gpt-5-5-xhigh.json b/models/gpt-5-5-xhigh.json new file mode 100644 index 0000000..f0b9b27 --- /dev/null +++ b/models/gpt-5-5-xhigh.json @@ -0,0 +1,13 @@ +{ + "label": "GPT-5.5 xhigh", + "vendor": "OpenAI", + "order": 30, + "runs": { + "mythos-craft": { + "note": { + "zh": "全程在 Codex CLI 中生成(未使用任何 skill);本页为修复版(仅改 1 行)。问题:移动向量的 Z 分量整体差一个负号(第 979 行,正确应为 -strafe*sin - forward*cos)。修复前:运动被沿 X 轴镜像——面朝 ±X 方向时按 A/D 左右颠倒,面朝 ±Z 时 W/S 前后颠倒,体感「左右移动方向不对」。原因:Three.js 相机在 yaw=0 时朝 -Z,推导前进/侧移向量时把这个约定弄反了。给 Z 分量取负后,任意朝向下八方向移动全部正确。", + "en": "Generated entirely in Codex CLI (no skills); fixed build (1 line changed). Bug: the movement vector's Z component had its sign flipped (line 979; correct form is -strafe*sin - forward*cos). Before the fix movement was mirrored across the X axis — A/D swapped when facing +-X, W/S swapped when facing +-Z, i.e. \"strafing goes the wrong way\". Cause: a Three.js camera faces -Z at yaw 0, and the forward/right derivation inverted that convention. Negating Z makes all eight directions correct at any heading." + } + } + } +} diff --git a/models/grok-build.json b/models/grok-build.json new file mode 100644 index 0000000..cebee35 --- /dev/null +++ b/models/grok-build.json @@ -0,0 +1,13 @@ +{ + "label": "Grok Build", + "vendor": "xAI", + "order": 60, + "runs": { + "mythos-craft": { + "note": { + "zh": "在本地通过 Grok Build(TUI)开发实现;本页为修复版(共改 3 行)。问题一:第 82 行 const WORLD_SEED = 0xAETHER,T/H/R 不是十六进制字符,整段脚本解析即抛 SyntaxError——修复前画面纯黑,只剩 HTML 文字。问题二:贴图集画在 canvas 顶部两行、UV 按左上原点计算,却未设 flipY=false,所有面采样到未绘制的黑色区域——修复前进入世界后近处地形全黑。问题三:forward 向量已指向相机朝向,按键却写成 W 减、S 加——修复前按 W 后退、按 S 前进(A/D 正常)。三处均为一行级修正,其余保持 Grok 原样。", + "en": "Built locally with the Grok Build TUI; fixed build (3 lines changed). Bug 1: line 82 const WORLD_SEED = 0xAETHER — T/H/R are not hex digits, so the whole script threw a SyntaxError at parse time; before the fix the screen was pure black with only HTML text. Bug 2: the atlas is drawn in the top canvas rows with top-left-origin UVs but no flipY=false, so every face sampled the undrawn black region; before the fix nearby terrain rendered solid black. Bug 3: the forward vector already points where the camera looks, but W subtracted and S added — W walked backward (A/D were fine). One line each; everything else is Grok as-is." + } + } + } +} diff --git a/models/kimi-k2-6.json b/models/kimi-k2-6.json new file mode 100644 index 0000000..bd522fe --- /dev/null +++ b/models/kimi-k2-6.json @@ -0,0 +1,5 @@ +{ + "label": "Kimi K2.6", + "vendor": "Moonshot AI", + "order": 100 +} diff --git a/models/minimax-m3.json b/models/minimax-m3.json new file mode 100644 index 0000000..d48f4ac --- /dev/null +++ b/models/minimax-m3.json @@ -0,0 +1,5 @@ +{ + "label": "MiniMax M3", + "vendor": "MiniMax", + "order": 110 +} diff --git a/models/mistral-medium-3-5.json b/models/mistral-medium-3-5.json new file mode 100644 index 0000000..4ad0737 --- /dev/null +++ b/models/mistral-medium-3-5.json @@ -0,0 +1,5 @@ +{ + "label": "Mistral Medium 3.5", + "vendor": "Mistral AI", + "order": 80 +} diff --git a/models/qwen3-7-max.json b/models/qwen3-7-max.json new file mode 100644 index 0000000..27962ed --- /dev/null +++ b/models/qwen3-7-max.json @@ -0,0 +1,5 @@ +{ + "label": "Qwen3.7-Max", + "vendor": "Alibaba", + "order": 130 +}