# R8 任务报告

## 任务回链

- MDTODO：R8。
- GitHub issue：UniDesk #2341。
- Target：NC01。
- 分支：`fix/sub2api-error-attribution`。

## 实现

- `faults` 按 `request_id` 关联 native `request-errors`、`upstream-errors` 与最终 request 状态。
- P0 只统计 `external-customer` 的最终 4xx/5xx，最终 499、`context canceled` 和 client disconnected 不计入。
- P2 保留 upstream attempt，同时展示 upstream/final 状态、调用者分类、吸收结果和账号评分资格。
- 默认汇总增加 external P0、internal monitor、internal user 和 canceled 分视图，保持 Kubernetes 风格渐进披露。
- 删除失效的 `runtime models` 文档入口，正式替代入口为：
  - `runtime get --account`：账号配置与调度状态；
  - `runtime errors --account --full`：原生 Ops 已观测模型证据。

## 验证

- `bun scripts/cli.ts check --syntax-only`：11/11 通过。
- 调用者分类 smoke：
  - 管理员 `main` key 归为 `internal-user`；
  - 明确 `monitor` key 归为 `internal-monitor`；
  - `monitoring-user` 不被模糊匹配为 monitor。
- P0 过滤后分页 smoke：
  - group 2 的 external final error 总数为 24；
  - 第一页返回 20 行和 next token；
  - 第二页返回剩余 4 行且不再返回 next token。
- `643ab721-65ae-4f21-a119-2a5e81abb31f`：upstream 502、final 499、P0 clear、absorbed yes、score eligible no。
- `afffce5c-9eb0-4226-b765-85312ca31af0`：upstream 524、final 499、P0 clear、absorbed yes、score eligible no。
- `7ae72409-e5d1-4c14-8963-d63179b4cc35`：P0 clear，未计为账号失败。
- 真实最终 502 样本 `10766195-ee99-4c84-8bbc-e21df23e141f`：P0 active，customer error count 为 1。

## 边界与风险

- 未修改 Sub2API 源码、版本、runtime、账号、外部哨兵或生产运行面。
- 调用者分类依赖 native request 返回的 user/API-key 字段；字段缺失时保守归为 external customer，但最终取消仍通过 final status 排除 P0 和账号扣分。
- 默认汇总需要读取同窗口 request 记录完成关联，查询成本高于旧的直接 total 投影，但仍使用固定 24 小时窗口和分页原生接口。
- 主代理已完成 diff 审核；PR #2344 合并后从最新 `master` 执行只读原入口复测。
