# 案例截图评分规则 v3

本规则于 2026-10-22 启用。评分衡量**归档证据中可见的任务成果与视觉质量**，用于同主题内选择代表实验。截图及操作日志不能证明算法正确、真实手势追踪、全部交互、后端或性能；不同任务的分数不作为统一模型能力排名。

唯一现行机器定义是 [scoring-rubric.json](../catalog/scoring-rubric.json)，按 `topicId/promptId` 登记八项任务检查及任务正文指纹。本文件是新增、导入、补拍及重评共用的执行规则；不再维护日期命名的待实施方案或另一份现行规则。全量复核的历史结果见 [v3 报告](scoring-reviews/2026-10-22-v3.md)，历史评分与规则快照留在 `catalog/score-reviews/`，不作为新案例的操作入口。

v3 针对旧方案的六类问题增加约束：拆开混合任务要求、分别记录视觉子项、统一桌面和手机取景、展开隐藏流程并补齐输入状态、绑定全部采集证据，以及明确区分可见成果与功能验证。后续案例直接执行本规则。

## 先判断证据状态

| `status` | 条件 | 分数和站点选择 |
| --- | --- | --- |
| `rated` | 有可辨主体，能够逐项评价；初始网格也可评价，未展示的路径不当作已有结果。 | 有总分，参与最高分选择。 |
| `insufficient` | 只有加载态、空画布、规划目录或画外主体，无法评价任务成果。 | 分数为 `null`，显示“证据不足”，不参加评分选择。 |
| `unavailable` | 没有真实实验截图。 | 分数为 `null`，不得用主题缩略图猜分。 |
| `pending` | 尚未完成视觉复核、没有截图的工作草稿。 | 不得作为正式入库记录。 |

`captureState` 另记取景状态：`result` 结果态、`initial` 有可辨主体的初始态、`partial` 局部展示、`blocked` 明确的核心运行环境阻塞；证据不足用 `undemonstrated`，无截图用 `null`。

只有明确显示核心运行阻塞的画面才适用 `blocked` 的 **39 分上限**。各项仍独立评分，`total = min(维度合计, ceiling)`，不能倒推维度凑总分。没有错误说明的空画布标为证据不足，不能据此判定实现失败。按钮、FPS 数字、说明文字和代码声明不证明对应功能。

## 二十项独立观察

每项均为 0–5 的整数分，先写具体观察再评分。五个维度由对应子项相加，不再直接给一个笼统的维度分。

| 维度 | 满分 | 子项 |
| --- | ---: | --- |
| 任务可见覆盖 `taskCoverage` | 40 | 对应任务正文的八项检查，定义在机器规则的 `tasks` 中。 |
| 构图与层级 `composition` | 20 | 主体与视线、区域与层级、对齐与节奏、比例与密度。 |
| 可读性 `readability` | 15 | 文字数值、前背景区分、主体与图例。 |
| 操作表达 `interactionClarity` | 10 | 操作命名、状态与反馈。 |
| 视觉精修 `craft` | 15 | 组件或造型一致、素材完整、边缘与细节。 |

| 分值 | 锚点 |
| ---: | --- |
| 0 | 没有可见证据。 |
| 1 | 仅名称、入口或符号。 |
| 2 | 局部可辨且存在明显缺口。 |
| 3 | 基本形成但仍有实质缺口。 |
| 4 | 清楚完整，仅有小缺口。 |
| 5 | 对应要求充分、清楚地展示。 |

同一问题指定主要扣分项，不能重复扣遍各维度。文字过小主要影响可读性；缺少结果影响任务覆盖，不自动否定清楚的布局。不给厂商、档位、费用、实验日期、代码量或任务复杂度加减分。没有强制分布，1–2 分差异不解释为模型能力差异。

按该 run 的完整原始输入判断范围与设计授权。视频原型逐模块交付时不补造“一次完成全部模块”的要求；明确要求全部模块的输入需逐项核对。原型中画外流程记为未展示，不宣称源码缺失。算法实验不因没有营销横幅扣分，设计原型不因没有真实后端扣分，允许的原创插画不自动当作占位图。没有实际相机、手部或追踪画面时，相应任务项按可见证据评分，鼠标、键盘及自带演示不能替代真实识别证据。

`confidence` 独立记录为 `high`、`medium` 或 `low`，不加分、不作乘数。清晰且状态覆盖充分可记高；局部缺失或资源不稳定记中；主体难辨、加载受阻或无截图记低，具体原因写入 `limitations`。五维观察分别描述该案例，不能复用一段空泛评语。

## 采集与复核

1. 阅读任务正文、完整原始输入与追加要求，登记八项任务检查。批量模型实验先执行 `npm run topics:active`；已归档主题继续检查历史链接和证据，不因此重跑模型。
2. 采集真实桌面和手机画面，默认 Chromium、DPR 1、1440×900 与 390×844。适用时通过实际控件输入种子、选择预设、运行寻路、注入流体、上传相同测试图片，记录操作、等待与结果态。原型检查登记入口、内部导航及横向隐藏页面。
3. 懒加载、长页、内部滚动容器及初始化等待需要补充取景；记录滚动范围和实际位置，不宣称穷尽无限信息流。补拍使用新批次、新 PNG，保留旧图、失败尝试和原始采集清单；不改页面内部状态、不伪造网络返回或真实相机。
4. 新案例使用 `node scripts/review-captures.mjs --run <run-id> --batch <最终批次>` 生成匿名联系图；已有评分的记录默认读取其绑定的完整采集清单，批量复核可用 `npm run review:scores`。`--topic <topic-id>` 可限制主题，`--output <空目录>` 可指定输出。直接调用 node 可避免部分 PowerShell/npm 包装脚本吞掉参数。工具不自动识图、评分或代写观察。模型标签和旧分隐藏，原始输入仍可能包含模型信息，因此不宣称严格双盲。
5. 逐张查看清单中的全部帧；长图、小字、遮挡和高低分候选放大原图校准。先判证据状态，再写五维观察、二十项分数、置信度和限制。不同输入、取景、资源环境均须说明，禁止从旧分换算。
6. 将已复核的真实帧选作封面，登记完整证据指纹，并在 `changes` 说明维护者的采集与重评。没有可运行入口的历史记录保留 `unavailable`，不制造占位产物。
7. 保留前次评分和规则快照，执行生成、验证、测试和实际页面验收后提交。操作日志记录发生的操作，不替代独立功能测试。

采集清单位于 `catalog/screenshot-captures/<batch>/<run-id>.json`，PNG 位于对应 run 的 `captures/<batch>/`。补充清单通过 `previousCapture` 及其 SHA-256 保留来源链；后续清单包含已归并的历史帧。只读静态服务器不启动历史后端，不改外部部署；采集和测试屏蔽正式统计访问。

## 新案例可复用命令

下列 `<run-id>`、`<batch>`、`<source-batch>` 均须替换为本次实际值。批次统一使用 `YYYY-MM-DD-label`，每轮补拍用新标签；所有命令都复用现有工具，不重建一次性迁移或评分脚本。

1. 填完 draft 的完整输入和预览配置；构建型案例先 build。执行 `node scripts/demo-sync.mjs <run-id>` 同步输入与任务正文的首次指纹，此时列出截图、评分缺项是正常现象。新任务将八项检查登记到当前机器规则，其 `promptHash` 取已同步的任务元数据。
2. 在独立终端运行 `node scripts/serve.mjs --read-only`，默认本地地址为 `http://127.0.0.1:4173/`。采集前实际打开新入口，确认统计被屏蔽且页面主体可运行。
3. 执行 `node scripts/capture-screenshots.mjs --run <run-id> --batch <batch> --base-url http://127.0.0.1:4173/ --navigation commit --bounded-font-wait`。该命令采集已登记的本地页面，只保存真实截图和采集清单，不改 run.json 或自动评分。外部部署须人工从真实 HTTPS 页面采集并按同一清单结构登记；不能用本站记录页或本地空页替代。无入口、加载失败或缺少结果时先判断是否需要补拍。
4. 纵向补拍使用 `node scripts/capture-scroll-evidence.mjs --run <run-id> --source <source-batch> --batch <新批次> --base-url http://127.0.0.1:4173/`；横向补拍使用 `node scripts/capture-horizontal-evidence.mjs` 的相同参数。两者必须显式指定来源，取最近已核对的完整清单，不回退到某次历史批次。
5. 内部导航、上传、切换场景及延长等待使用 `capture-review-states.mjs`，从标准输入读取 JSON：指定 `runId`、新 `batch`、`source` 清单相对路径、`baseUrl` 和 `states`。每个 state 明确独立 `id`、真实 `actions` 及必要的 `preActionWaitMs` / `settleMs`（0–30000ms）；按下文协议补充取景，失败尝试同样保留。PowerShell 可用 `Get-Content -Raw <计划文件> | node scripts/capture-review-states.mjs`。
6. 对最终完整清单执行 `node scripts/review-captures.mjs --run <run-id> --batch <最终批次>`，阅读 manifest 中的原始输入差异，查看所有联系图并按需打开原 PNG。人工填写下节字段及确实看过的全部帧 ID，不能让脚本默认宣称已看图。
7. 将所选帧相对 run 的 PNG 路径登记到 `screenshot`，采集日期取该帧所属原始清单的 `capturedAt`，不能使用末次补拍日期替代。`score.captureManifest` 指向最终完整清单，首次证据指纹留 `null` 后执行 `node scripts/demo-sync.mjs <run-id>` 自动补写。已有非空指纹失效时先人工重评、留档，再更新评分，禁止仅刷新哈希。
8. 执行 `node scripts/demo-sync.mjs <run-id> --check`，完成实际预览验收后再 `--finalize`。最后按[维护指南](maintenance.md#导入执行顺序)执行生成、校验、测试并提交。新增案例不运行全量评分迁移，也不改旧案例的输入或评分。

### 补拍操作协议

`capture-review-states.mjs` 的 `states[].actions` 使用 `kind` 和真实 `selector`，支持 `click`、`pointer-click`、`pointer-drag`（起点与终点均为目标框内 0–1 的相对坐标）、`double-click`、`press`（Home/End/方向键/Enter）、`upload-review-fixture`（已提交且固定指纹的测试 PNG）和 `scroll`（明确页面滚动元素或内部容器）。选择框可通过真实按键操作；不使用脚本注入选中状态。记录请求动作、实际位置、等待、资源错误和采集方式。其他已登记入口由基础采集处理；补拍只展开任务相关的实际页面。

当默认 Chromium 渲染环境丢失 WebGL 上下文时，补拍计划可设置 `renderingBackend: "d3d11"` 请求 ANGLE D3D11；清单记录请求的渲染方式，不推断实际硬件，既有帧的环境以其来源清单为准。原失败证据和来源链仍须保留。

长页及小字必须查看原图，联系图缩放不构成读过全部细节的证明。CDP 视口采集仅用于截图等待受阻时保留真实视口，明确 `captureMethod: "cdp-viewport"`；不重绘页面或替换素材。自动化操作失败不得直接推断人工点击也失败。

## 数据字段与校验

`run.json.score` 使用 `rubricVersion: 3`。除状态、总分、日期、截图状态和上限外，必须保存以下复核证据：

- `taskChecks`：该任务的八个具名子项；`visualChecks`：十二个视觉子项。`dimensions` 分别为对应子项之和，正常上限 100，明确阻塞上限 39。
- `observations`：五维的具体观察；`evidence`：可见成果与主要限制；`confidence`、`limitations`：独立置信度及证据边界。
- `inputHash` 绑定完整原始输入；`screenshotHash` 绑定选中 PNG 的 SHA-256；`criteriaHash` 绑定对应任务定义。
- `rubricHash` 绑定除 `tasks` 外的全局规则；新增其他任务不使既有评分失效，修改既有任务由 `criteriaHash` 检出。
- `captureManifest` 指向当前完整证据清单；`evidenceSetHash` 为该清单解析后 `JSON.stringify` 的 SHA-256；`reviewedFrames` 必须包含该清单全部帧 ID。
- `captureInventoryHash` 绑定该 run 全部采集清单：按路径排序后，对每份清单的原始字节计算 SHA-256，再对路径与指纹列表计算 SHA-256。新增旁支或补充清单也会使评分失效，封面不变不能绕过重评。

`insufficient` 的总分、维度、两组子项和上限均为 `null`，仍需完整观察、原因、日期及证据指纹。`unavailable` 没有 PNG，`screenshotHash` 为 `null`，仍绑定真实输入、任务规则和无图采集清单；不得补造数值。`pending` 仅供未完成草稿使用。

人工填写 `status`、`captureState`、`assessedAt`、二十个具名子项、维度及总分、`observations`、`confidence`、`limitations`、`evidence`、`captureManifest` 和 `reviewedFrames`；子项键以当前任务和视觉检查定义为准，不能复用旧版的四项键。`rubricVersion` 取现行版本，所有首次指纹由 `demo:sync` 补写；不手工计算哈希、不生成模拟评分，不复制其他案例的评语。

`npm run validate` 同时检查规则、schema、八项任务与十二项视觉分数、五维观察、加总、上限、封面归属、全部证据帧及采集历史。所有 PNG 核对指纹与实际尺寸，历史来源链也要有效。截图、输入、规则或补充证据变化必须重看相关完整证据，不能只刷新指纹。`demo:sync` 只为 draft 补写尚未记录的机械指纹，不覆盖已有失效指纹。

## 展示与长期维护

首页从当前筛选范围的 `rated` 中选最高总分实验，分数、封面和预览取自同条记录；并列按实验日期降序、实验 ID 升序。不可评分状态不当作 0 分。主题实验默认按评分排序，模型代际仅用于显式 `sort=model`。

主题页的评分明细展示五维观察、二十项分数、限制、置信度、采集环境与全部已复核原图入口。首页摘要只保留版本、状态和总分，完整评分从主题详情数据加载。

后续新增、迁移和截图更新均执行相同复核。修订时在 `catalog/score-reviews/` 新增审阅记录，保留前次评分及依据。历史规则快照只用于验证当时的审阅档案，与唯一现行规则分开。全局权重、锚点或状态门槛改变时递增规则版本，同步 schema、脚手架、展示和校验器，并重新看图；仅增加新任务无需升级全局版本。只改说明文字且不改变任务或证据无需重评。

被现行规则替代的阶段计划和旧版说明可以删除，相关引用改到有效说明或历史数据快照。生成阅读页由 `generate` 一并清理；不要把历史评分 JSON、规则快照、原始输入和真实截图当作过期文档删除。
