# Sub2API 用户反馈只读追踪

## 入口

- 按用户邮箱或正整数用户 ID 查询：

  ```bash
  bun scripts/cli.ts platform-infra sub2api codex-pool feedback \
    --target PK01 \
    --user <email-or-id>
  ```

- 默认窗口为 `30m`；可显式选择 `5m|30m|1h|6h|24h|7d|30d`。
- 默认输出 Kubernetes 列表风格紧凑文本；只有显式 `--json` 才输出完整脱敏 JSON。
- 请求表固定返回 10 条，并输出 `returned`、`total`、`moreAvailable`、`nextPageToken`；下一页使用 CLI 给出的完整 `Next` 命令，不提供手工 `limit`。
- `REQUEST ID INDEX` 输出当前页完整、可复制的 request ID；主表使用页内序号避免重复宽字段。
- 按默认表格中的 client request ID 或内部 request ID 下钻：

  ```bash
  bun scripts/cli.ts platform-infra sub2api codex-pool feedback \
    --target PK01 \
    --user <email-or-id> \
    --request-id <client-or-internal-id>
  ```

- 稳定游标下一页：

  ```bash
  bun scripts/cli.ts platform-infra sub2api codex-pool feedback \
    --target PK01 \
    --user <email-or-id> \
    --window 24h \
    --page-token <nextPageToken>
  ```

## 证据组合

- 用户与 API Key：使用 Sub2API 原生 `admin users` 和用户 API Key 列表，输出邮箱、名称、分组与当前并发，不输出 Key 值。
- 请求时间线：自动分页读取窗口内全部 `ops requests`，逐项显示相邻请求空窗、模型、状态、耗时、账号和 proxy。
- ID 关联：一次读取 `ops system-logs`，在本地关联 client request ID 与内部 request ID；指定 `--request-id` 时披露关联日志。
- 实时状态：组合用户、账号和分组并发，区分无入站证据、排队、在途与已完成。
- 基础设施：组合账号可用性、账号当前状态、proxy 状态和 Sub2API 组件健康摘要。

## 归因边界

- `client-before-submit-or-no-inbound-evidence` 表示窗口内没有 Sub2API 入站记录且实时并发为零，不等价于证明客户端没有尝试调用。
- `sub2api-queue` 需要实时等待队列证据；`in-flight` 需要实时并发证据。
- `upstream-first-byte-stream`、`proxy-egress` 和 `client-connection` 只根据原生 Ops 日志、账号、proxy 与基础设施证据分类，不执行探针或写操作。
- 无足够分层证据时返回 `sub2api-or-upstream-unknown`，禁止扩大结论。

## 脱敏与只读

- 入口只调用 GET 类 admin/ops 接口、管理员登录和运行组件健康读取。
- 不调用账号测试、探针、调度、取消、清理、更新或其他运行面写接口。
- JSON 和文本均不披露 API Key、管理员 token、账号 credentials、proxy 用户名、密码或其他 Secret。
- 所有分页由 CLI 自动完成，不提供手工 `limit` 作为输出规避手段。

## 调用量

- issue `#2000` 的人工调查包含用户、请求、系统日志、两种 request ID trace、账号、proxy、进程/端口和 journal 共 9 次工具入口。
- 本入口将用户侧工具调用收敛为 1 次，减少 8 次，即 `88.9%`；内部只读 API 来源在 JSON `sources` 字段披露。
