Claude Code
代码质量高、功能覆盖完整的单文件Canvas动画实现,自行车与鹈鹕细节丰富、场景滚动流畅,但agent未提供针对验收清单的运行时视觉自检证据导致工程闭环维度扣分。
Coding Agent 能力测试 · 固定模型
同一个测试集、同一个模型,只换 harness。机器断言判硬条件(能否交付、是否自包含), LLM judge 按证据状态给分;同一份分数在「测试结果展示」页可以看到对应的产物与判据。
代码质量高、功能覆盖完整的单文件Canvas动画实现,自行车与鹈鹕细节丰富、场景滚动流畅,但agent未提供针对验收清单的运行时视觉自检证据导致工程闭环维度扣分。
产物代码质量高、功能覆盖完整、完全自包含,SVG+JS rAF 架构实现了鹈鹕骑自行车的流畅循环动画,但 agent 未展示对验收清单的实质性视觉自检证据,W 维度受限。
产物代码质量高、功能覆盖完整、严格自包含合规,但缺少渲染级验证证据且存在CSS死代码和轮腿周期微失配问题。
| # | Agent | 鹈鹕骑自行车循环动画 | 均分 | 断言 | 总耗时 | Token |
|---|---|---|---|---|---|---|
| 1 | Claude Code | 7.93 | 7.93 | 1/1 | 15m 0s | 568,656 in(输出未上报) |
| 2 | Qoder CLI | 7.93 | 7.93 | 1/1 | 9m 31s | 未上报 |
| 3 | Codex CLI | 7.62 | 7.62 | 1/1 | 4m 20s | 271,641 in / 27,008 out |
条形长度为该 agent 在本维度的得分;右侧标签是 judge 给出的最高证据状态,分数已被该状态封顶。
代码使用IIFE封装全部逻辑,无全局污染;canvas尺寸仅在resize事件中修改(resize函数第30-37行),动画循环frame()内只做ctx.clearRect与绘制调用,不重建DOM;requestAnimationFrame(frame)在第856行被初始调用、第853行递归调用,确保持续渲染;几何常量集中定义于第62-76行(WHEEL_R, RH, FH, BB, ST等),便于维护;无console.log或debugger残留。dpr上限为2兼顾性能。
代码结构清晰:IIFE 封装避免全局污染;常量集中声明(WHEEL_PERIOD, CRANK_RADIUS, BB 等);DOM 引用通过 `const $ = (id) => document.getElementById(id)` 一次性缓存,动画循环中仅调用 setAttribute 更新 transform/d,无逐帧重建 DOM。数学上使用 solveLeg() 做二连杆逆运动学解算腿部姿态,性能合理。唯一不足是每帧对 legNearOutline/legNearMain/legFarOutline/legFarMain 分别调用 setAttribute('d',...) 共 4-5 次重复设置相同路径字符串,可合并为一个 <g> 或用 CSS 变量优化,但不构成严重问题。兼容性方面使用 performance.now()、Math.hypot、requestAnimationFrame,现代浏览器均支持。所有 rAF 回调 draw() 被 requestAnimationFrame(frame) 正确接线调用。
代码结构清晰:SVG defs 复用 #wheelParts 和 #cloudShape;JS IIFE 封装所有逻辑,getElementById 缓存 DOM 引用(legNearA、crankNearArm 等共12个),requestAnimationFrame(frame) 每帧仅 setAttribute 更新 path d/transform,不重建 DOM。CSS .spin{transform-box:view-box} 定义了但无元素使用该类,属于死代码。viewBox="0 0 1280 720" + preserveAspectRatio="xMidYMid meet" 保证兼容性。
条形长度为该 agent 在本维度的得分;右侧标签是 judge 给出的最高证据状态,分数已被该状态封顶。
验收清单1-6逐条对照均有对应绘制函数在frame()中被调用:drawPelican/drawHead覆盖鹈鹕形态,drawWheel/drawBike/drawFramePath覆盖自行车结构,crankA联动wheelAng覆盖骑行动作,drawSky/drawRoad/drawHills覆盖场景,requestAnimationFrame连续调用覆盖循环,CSS viewport+canvas 1280×720覆盖构图。所有绘制函数均在frame(now)内按序调用,接线完整。
单文件自包含:所有代码在一个 index.html 内;无外链:机器断言确认外链=0、无 fetch/XMLHttpRequest;页面打开即播放:IIFE 末尾 `const start = performance.now(); draw(0); requestAnimationFrame(frame);` 确保无需交互即可启动动画。SVG 内无外部 image href、无 @import、无 web font。全部图形由 <path>/<circle>/<rect>/<line>/<ellipse> 本地绘制。
验收清单6项全部在代码中可找到对应实现:1)鹈鹕有body(#rider ellipse)、长喙(path d="M 699 195...873 239")、喉囊(path d="M 699 222...696 244")、翅膀(path d="M 596 281...")、眼睛(circle cx=695 cy=197)、腿脚(#legNear/#legFar);2)自行车有两轮(use href="#wheelParts"含辐条line*8)、三角车架(line*6构成frame)、车把(path d="M682 318...709 309")、座垫(path saddle)、脚踏(rect#pedalNear);3)车轮SMIL animateTransform dur="1.6s"旋转,腿部rAF frame()函数用 kneeFor() IK计算蹬踏,周期850ms;4)场景有天空(#sky渐变+sunGlow)、远景(hills animateTransform)、道路(road rect+markings滚动);5)SMIL repeatCount="indefinite" + rAF循环,无跳帧;6)viewBox 1280x720完整展示。但未观察到实际渲染验证证据,故封顶7.4。
条形长度为该 agent 在本维度的得分;右侧标签是 judge 给出的最高证据状态,分数已被该状态封顶。
单文件自包含,机器断言7项全pass(ok:true),包括'无外部资源引用'(detail='')、'无网络请求API'(detail='')、'使用SVG或Canvas绘制'(ok:true)。页面加载即执行IIFE中的requestAnimationFrame(frame)自动播放,无需交互触发。href="#cloudShape"等为同文档fragment引用,非外链。
单文件index.html自包含,无<link>外链、无<img src>外部图片、无@import字体、无fetch/XMLHttpRequest网络请求(机器断言'无外部资源引用':ok,'无网络请求API':ok均通过);所有图形由Canvas 2D API本地绘制;IIFE末尾直接requestAnimationFrame(frame)页面打开即播放,无需交互触发。
—
条形长度为该 agent 在本维度的得分;右侧标签是 judge 给出的最高证据状态,分数已被该状态封顶。
会话轨迹显示7次Read、6次Edit、2次Write、9次Bash,表明agent有迭代修改过程,且机器断言全部pass(true)说明做了基础静态校验。但未见agent读取自己写出的index.html内容进行逐条验收清单自查的证据,也未见运行可视化测试或针对6条验收标准的具体断言脚本输出。退出码124为超时信号而非自检失败。依据证据纪律,无法确认产物经过充分的视觉/功能验证,分数封顶5.9。
工具调用轨迹显示 [Bash×3, index.html×2, Write×1, Edit×1],机器断言结果 pass=true 但仅验证了文件存在性、体积、HTML 完整性、无外链、有 SVG/rAF 等结构性检查,未对验收清单 1-6 的视觉内容做任何断言或截图比对。没有证据表明 agent 读取自己写出的文件进行逐条自查,也没有修复问题的记录(Edit×1 可能是初始编写过程)。依据评分规则,缺乏验证证据封顶 5.9。
轨迹显示Bash工具调用12次、Message 6次、error 1次,机器断言结果为pass:true证明agent运行了检查脚本,但没有证据表明agent打开浏览器验证渲染效果、对照验收清单逐条自查画面、或修复过发现的视觉问题。任务要求'对照验收清单自查一遍后立即结束',无法确认该步骤被执行。