# R12 任务报告

## 结果

完成 UniDesk #2361 的两项通用 CLI 改进。

- `runtime list --recent <duration>` 使用 Sub2API 原生账号 `created_at` 过滤并按创建时间倒序展示；表格同时展示账号完整身份、创建时间、调度状态、priority、规则数和匹配模板。创建时间缺失的账号不猜测，单列 `unknownCreatedAt`。
- `--recent` 只允许只读 list；apply/delete 继续要求精确 `--account` 或 `--accounts`，并明确拒绝把 recent 作为写入 selector。
- Sub2API rollout worker 在 `prepull`、`apply`、`verify` 开始和终态输出结构化进度事件；默认 `job status` 新增 `sub2api-rollout` 投影，展示当前阶段、阶段状态、验证子项和耗时。
- 对旧 rollout job 没有进度事件的情况，job status 从既有终态表格恢复阶段与耗时，因此历史任务也无需 `--full` 才能完成常规验收。

## 调用缩减

- 新账号套模板由“全量 list + 人工猜测 + get + dry-run + confirm”缩短为“recent list + 精确 dry-run + confirm”。
- 版本滚动由“job status + terminal --full”缩短为默认 `job status` 一次读取终态；运行中同一入口持续显示当前阶段。

## 验证

- `bun scripts/cli.ts check --syntax-only`：11/11 通过。
- `runtime list --target PK01 --recent 24h`：只读 smoke 通过，返回 2/12 个新近账号；#39 排第一且显示已匹配模板，`unknownCreatedAt=1`，时区转换为 UTC 正确。
- `runtime apply --account 39 --template codex-upstream-failover --recent 24h`：在本地参数解析阶段拒绝，未访问写入端点。
- 历史真实 rollout job 默认 status：识别 `sub2api-rollout`，展示 prepull/apply/verify 成功及 74473/19753/2627/96854 ms 耗时，无需 `--full`。
- 本地 rollout 事件 fixture：6 个事件被识别，三阶段和每阶段 8000 ms 均正常展示；fixture 不调用 Sub2API。
- 受控 scripts typecheck 的全仓基线仍失败；修改路径 `platform-infra-sub2api-codex` 与 `platform-infra/rollout.ts` 匹配新增诊断均为 0。`jobs.ts` 匹配的 9 条为既有诊断，新增代码没有新增匹配项。

未执行 rollout、runtime confirm、账号修改或其他生产运行面变更。
