- 字段白名单：stage/flow、产品、根意图、时间戳、Skill 版本、宿主/模型、匿名机器哈希、`run_id`、终态计数和终态原因枚举；禁密钥/账号密码/订单/交易号/截图/凭证/用户输入/路径/URL/响应/命令输出/堆栈原文；失败不影响业务，内部行 `ALIPAY_AIPAY_INTERNAL:`。
- run：`start-run` 创建/复用 `run_id`，脚本继承 `PLATFORM_ID=<run_id>`；`root_intent + product_type` 判定复用/新建，`UNKNOWN` 补全产品仍复用同一 `run_id`；换产品/根意图/已终态/重新开始/重新走流程/作废本轮流程才新建。`COZE_PROJECT_ID`、`MEOO_PROJECT_ID`、`VITE_APP_ID`/`PLATFORM_ID` 优先；`current-run-id` 只查看，不新建 run。私有 JSON 原子写失败后无等待重试一次，state 落盘后才返回成功；终态先入 outbox 再标记，失败均不阻塞业务。outbox 仅接受低敏 event 和严格字段/type，拒绝 `report.item/options` 直通，2xx 后才删除；维护/测试/Benchmark 禁上传。
- 计数：统计窗口从首次触发本 Skill 的用户消息开始，到当前 `run_id` 的 `run.terminal` 事件生成为止。只计用户在 Agent 对话框发送的消息，不计宿主权限弹窗、系统授权、网页授权、扫码、Skill stage、runner、工具调用或自动轮询；文字、图片/文件上传、空白或短确认消息、材料补充、确认回复和中途插话都按一条用户消息计，同一条消息同时包含文字和图片/文件时仍只计一条。`USER_INPUT_ID` 由 Agent 从首次触发本 Skill 的用户消息开始，在当前对话内给每条新用户消息分配单调序号，同一消息重试复用同一值；禁止包含或派生自用户输入内容、文件名、路径、截图/OCR、业务材料、stage 名或工具调用序号，运行时只保存本地 hash 且不上报。`start-run --input-id "$USER_INPUT_ID"` 自动把触发当前 run 的首条用户输入计为 `before-flow`；若中断/压缩后用新的 `USER_INPUT_ID` 重复进入同一未终态 run，`start-run` 会按当前 phase 幂等补计该用户消息。`reply confirm --reply "$USER_REPLY" --input-id "$USER_INPUT_ID"` 和 onboarding recovery 自动按当前 phase 幂等计数，禁止再为同一条回复手动执行 `count-user-input`。其他用户输入到达当前 run 后，包括用户中途打断、补充材料、只上传图片/文件或只问问题，在继续任何 Skill 动作或对该输入作业务答复前立刻执行 `telemetry count-user-input --phase before-flow|after-flow --input-id "$USER_INPUT_ID"` 写本地 run state，不联网；重复同一 `USER_INPUT_ID` 不加计。`user_input_count_total` 自触发 run 用户消息起；`user_input_count_after_flow_start` 自方案送达并进入正式执行后的下一条用户消息起。产品/MCC 澄清或选择、项目/语言/框架补齐、项目候选和方案本身只计 total；`full_process` 不因 Onboarding 重置。`flow_start_observed`=正式 flow start，由 `integration.user_confirmed|onboarding.user_confirmed` 的 flow loader 前台写入自动标记并在 state 为 `UNKNOWN` 时绑定已确认产品，但不计数；detached stage 只使用父进程固定的 `run_id/root_intent/product_type/timestamp` 投递事件，不读取后续 run 归因、不修改 run state。flow start 前拒绝 `after-flow`，用户 kill 未终态不补报。closeout 默认派生本地计数；状态为空时终态使用首条输入的最小合法计数，状态不可用且已核对时才显式传三项；runner 拒绝缺项、负数、`after > total`、已观测 flow start 但 `after >= total`。`terminal_reason` 只允许 `completed|partial_with_remaining_actions|integration_blocked|unsupported_product|unsupported_platform|enterprise_account_unsupported|unknown`，由终态 runner 依据机器事实派生，禁止自由文本原因。终态只追加计数和原因枚举，不新增确认点、stage 或独立上报。`run.terminal` 入队后以短超时前台 drain，仅当前 terminal 文件，避免流程最后的 detached worker 被宿主回收；当前 terminal 文件成功发送但仍有历史 outbox 积压时挂延迟后台补传；若文件仍在且是网络类错误，短重试一次并挂延迟后台补传，同时输出内部 `PERMISSIONED_FLUSH_NEEDED=true` 供 Agent 当场进入通用补传路径；失败保留 outbox。`c4=ext_info`，计数合法且有 `root_intent` 才写 JSON。
- 补传：不为权限探测新增网络事件；实际低敏上传就是自然探测，宿主已允许访问 collector 时不额外申请权限。任一 telemetry 上传若因 DNS、连接或超时失败导致 outbox 积压，均使用同一套本地判断和补传机制。`upload-status`/`permissioned-flush-status`/`permissioned-flush-needed` 都不联网、不写请求窗口或抑制状态；只要最近错误是 `ENOTFOUND|EAI_AGAIN|ETIMEDOUT` 等 DNS/连接/超时类错误且 outbox 仍有积压，`permissioned-flush-status` 出 `PERMISSIONED_FLUSH_CANDIDATE=true`，`permissioned-flush-needed` 出唯一 `PERMISSIONED_FLUSH_NEEDED=true` 后才按需申请补传权限。局部成功仅在无普通 outbox 和 active claim 时写全局 `status=success`。`flush-outbox` 前台完成一次有界小批量补传，优先发送积压的 `run.terminal`，再处理其他 outbox；失败、非 2xx 或仍有剩余积压时继续保留 outbox，失败后仍按实时条件继续允许补传，并可挂一个延迟后台 worker 作兜底。目标限定为 POST `collect.alipay.com:443` 的 `/yuyan/` 路径。说明：`是否允许 Agent 上报 Skill 使用过程的统计信息？只含产品类别、时间、Skill 版本、匿名设备标识、人机交互次数等用于帮助改善用户体验的非敏感信息，不会采集包含源代码、用户输入内容等任何敏感信息。` collector 结果非业务条件；无 `inspect-outbox`、`--confirm-reviewed`、`alipay-cli whoami` 兜底。
