# OpenCut 下一轮路线评估运行日志

评估 ID：`opencut-next-run-___`
日期/时间：`YYYY-MM-DD HH:mm TZ`
执行人/审核人：`请填写`
record_kind：`evaluation-run`
状态：`请按真实回执填写`

## 一、不要把历史摘要当原始日志

历史链接：`examples/opencut-evaluations/20260727-opencut-local-route.json`。

| 历史门 | reported 摘要 | 当前证据质量 | 本表起始状态 |
|---|---|---|---|
| `dependency-install` | reported 安装 1,937 packages | 无时间戳、退出码、原始日志：`evidence-missing` | 不得自动 pass |
| `production-build` | reported 构建因 `isShortcutKey` 未导出失败 | 无时间戳、退出码、原始日志：`evidence-missing` | 保留失败摘要，不得自动 fail-as-proven |
| `dev-server` | reported localhost Ready | 无时间戳、退出码、原始日志：`evidence-missing` | 不得自动 pass |

历史轮仍可诚实声称：Mac 锁定；Computer Use 未执行；0 次导入、0 次剪辑、0 次导出；状态 `evaluation-run-blocked-before-ui`。

## 二、tracked evidence receipts

| role | tracked path | 预期 SHA-256 | 本轮实测 SHA-256 | match |
|---|---|---|---|---|
| sources-lock | `third_party/sources.lock.json` | `9400ff46706740549fd5a32d44fd02908d2f35e2891baf84993fa808ad390755` |  | yes/no |
| environment-lock | `environment.lock.json` | `ef7242c0ed139abe48bb2bcd80811f1a4e3dd5c50521b273b879d3e620f451f8` |  | yes/no |
| input-technical-receipt | `course/labs/card-preview-001/receipts/technical-receipt.json` | `e55d2eab89727e55b4d24af3c98992d3f3e747651daa3c1ce3ce57138c06e653` |  | yes/no |

`source-license` 只由 tracked `sources.lock.json`、其哈希和登记内容支持。`third_party/src/OpenCut*` 是被忽略的本地审计副本，不是课程依赖、发布资产或许可证事实源。

## 三、input_asset

| 字段 | 本轮值 | 决定 |
|---|---|---|
| path / availability |  | pass/block |
| technical_receipt path + sha256 |  | pass/block |
| media_sha256 |  | pass/block |
| rights | `owned / licensed` | pass/block |
| private_data | 必须为 `false` | pass/block |
| duration_seconds | 必须为 `32` | pass/block |
| allowed_edit | `split-right-16-seconds-keep-left` | pass/block |
| output_path | 新路径，不得等于输入或已存在 | pass/block |

任一项不通过，停止在输入层。

## 四、本轮命令与原始回执

本表记录本轮新证据。没有时间戳、退出码和日志路径时，只能写 `evidence-missing`。

summary-only 的 `raw_log_sha256` 固定为 null。raw-log 必须填写 64 位 SHA-256、整数退出码与完整有序的 started_at / ended_at；复核时读取原始文件，确认包含对应 attempt 的 id、command、result，并重新验哈希。

| 门 | 命令/动作 | 开始/结束 | 退出码/结果 | 原始结果摘要 | 日志/截图/状态路径 | 证据质量 |
|---|---|---|---|---|---|---|
| source-license | `shasum -a 256 third_party/sources.lock.json` |  |  |  |  | tracked-receipt/evidence-missing |
| code-capability | 固定源码只读检查 |  | n/a |  |  | current-run-receipt/evidence-missing |
| dependency-install | `bun install --frozen-lockfile --ignore-scripts` |  |  |  |  | current-run-receipt/evidence-missing |
| production-build | `bun run build:web` |  |  | 保留 `isShortcutKey` 原文或真实新结果 |  | current-run-receipt/evidence-missing |
| dev-server | `bun run dev:web` |  |  |  |  | current-run-receipt/evidence-missing |
| ui-media-import | Computer Use |  |  |  |  | current-run-receipt/evidence-missing |
| timeline-export | Computer Use + ffprobe/hash/watch |  |  |  |  | current-run-receipt/evidence-missing |

## 五、四个有序 approval_steps

每一行必须在动作前获得新的明确确认。前一步 `completed-once` 不自动授权下一步。`approval_steps[].approved` 的 boolean 只记录状态，不是授权回执，也不能单独触发 Computer Use。

| 顺序 | approval_step | 本阶段准确动作 | 风险与状态变化 | 新确认内容/时间 | 状态 |
|---:|---|---|---|---|---|
| 1 | `read-only-ui-network` | 只读观察本地 UI 与 Network | 可能暴露页面信息或出现非 localhost 请求；不导入 |  | not-requested/approved-once/completed-once/block |
| 2 | `import-owned-media` | 仅导入登记哈希的 owned 32 秒视频 | 创建本地媒体/工程状态；不编辑 |  | not-requested/approved-once/completed-once/block |
| 3 | `local-edit-and-reload` | 16 秒执行 Split right、保留左段并刷新恢复 | 修改本地工程；不导出 |  | not-requested/approved-once/completed-once/block |
| 4 | `export-new-file` | 导出到登记的新路径并验收 | 新增本地媒体文件；不覆盖、不上传 |  | not-requested/approved-once/completed-once/block |

每道门另存一份批准与执行回执，初始必须全部留空，不得预填：

| approval_step | approved_at | approved_by | scope | risk_ack | Computer Use 原始回执路径 |
|---|---|---|---|---|---|
| `read-only-ui-network` |  |  |  |  |  |
| `import-owned-media` |  |  |  |  |  |
| `local-edit-and-reload` |  |  |  |  |  |
| `export-new-file` |  |  |  |  |  |

只有该门的 `approved_at`、`approved_by`、`scope`、`risk_ack` 已真实填写，且动作后已有对应 Computer Use 原始回执，才能把该门记为完成；任一缺失都保持未推进。

## 六、action_taxonomy

不要再用笼统的 `external_actions: none` 掩盖本地或网络行为。

| 分类 | 本轮准确值 | 证据 |
|---|---|---|
| `platform_account_actions` | `none`；若出现登录要求立即 block |  |
| `network_actions_observed` | preflight 为 `[]`；只追加本轮真实观察动作 |  |
| `network_actions_possible_not_observed` | `opencut-ui-third-party-resources` |  |
| `local_mutations` | preflight 为 `[]`；只追加本轮真实本地变更 |  |
| `media_actions` | `status` 只用 `none` / `import-observed` / `local-export-created`，并分别记录 imports / edits / exports 非负整数 |  |

## 七、七层能力门与状态

| 门 | 状态 | 直接证据 | 未证明什么 |
|---|---|---|---|
| source-license |  |  | 软件可用性 |
| code-capability |  |  | README 路线图已实现 |
| dependency-install |  |  | 构建/运行 |
| production-build |  |  | dev Ready 可替代生产构建 |
| dev-server |  |  | UI 或剪辑可用 |
| ui-media-import |  |  | 时间线、刷新和导出 |
| timeline-export |  |  | 长期稳定与学员可复现 |

状态示例：UI 与导入有本轮回执、编辑尚未获批时，才能写 `ui-import-observed-awaiting-edit`。不得用状态反推缺失证据。

## 八、决定与禁止声称

- 决定：`adopt / defer / reject`
- reviewer：`请填写`
- 仍为 evidence-missing 的门：`请填写`
- 不修上游原因：固定 Commit 评估不能偷换成未审计 fork；补丁须另立任务与版本。
- 禁止声称：reported 等于原始日志、Ready 等于 UI、已导入等于已剪辑、预览等于导出、MCP/headless 已验证。
