# R2.3 任务报告

## 结论

已完成 PK01 Sub2API 原生 system-log 策略事件索引缺口的只读调查，完整证据见 [Issue #2027 调查结论](https://github.com/pikasTech/unidesk/issues/2027#issuecomment-4968617404)。调查以当前真实运行面 `v0.1.147` 为主证据，`v0.1.155` 仅用于源码差异参考；未修改代码、runtime、YAML、账号、proxy、调度，未发探针、未部署。

## 根因分层

- `openai.upstream_failover_switching`、`openai.account_select_failed`、`openai.forward_failed` 是 warning/error 事件，已真实写入 v0.1.147 的 `ops_system_logs`，并可按 request ID 从原生 admin/ops API 查询。
- `account_temp_unschedulable` 在 v0.1.147 中以 INFO 发出；`OpsSystemLogSink.shouldIndex` 只接收 warning/error/fatal 等级或特定组件，因此该事件在进入 sink 队列前被过滤。
- 临时不可调度事件还缺少 `request_id`、`client_request_id`、用户、API key、分组、模型等上下文字段，即使单纯纳入索引，也不能稳定完成逐请求归因。
- v0.1.155 仍以 INFO 发出该事件，sink 等级过滤规则未改变，因此升级不能直接解决。
- 当前容器在回退 v0.1.147 时重建，容器日志只能覆盖重建后窗口；当前无 `max-size/max-file`，但容器替换后没有稳定历史保留合同，不能替代数据库索引。

## CLI 现状与候选

- `codex-pool feedback --user ... --request-id ...` 已是近期 request-scoped 原生 system-log 的可靠入口。
- `runtime errors` 能读取 host-Docker 容器日志，但当前主要输出账号级聚合。
- `codex-pool trace` 在 PK01 host-Docker 上仍硬编码 `kubectl logs`，会产生 false not-found；应独立修复为复用 `runtime_logs()`。
- 可独立增加只读 `platform-infra sub2api ops system-logs`，封装 v0.1.147 已有 `q`、request ID、账号、时间范围和固定分页合同。
- 若要求临时不可调度稳定入库和逐请求关联，需要 Sub2API 上游源码增加策略事件 allowlist，并补齐请求上下文字段；不建议仅把 INFO 粗暴升为 WARN。

## 裁决

PK01 可继续保持 v0.1.147。failover、账号选择失败和 forward failure 的可见性优化不需要上游源码变更；临时不可调度的稳定数据库索引和逐请求关联需要上游源码变更，但不属于本只读任务实现范围。Issue #2027 已关闭。
