# TASK · 生时校正匿名聚合统计(2026-09-26) ## 基线 - `origin/staging`(`TASK-rectification-fewer-probes-card-20260926` 合入之后)。分支 `codex/rectification-telemetry-20260926`。 ## 背景 线上没有任何校正会话的聚合数据:交付宽度、问了几题、停在哪条规则、门槛是否达标、是否补过经历都不知道(盘点 09-26)。后续所有决策(领域门槛 2→3、引导题是否再调、默认窗口宽度)都缺证据。 ## 决策记录(产品 2026-09-26) - D1 加匿名聚合统计,**只存数字与枚举**,不存出生资料、姓名、邮箱、用户 / 案例 id 以外的任何身份信息、对话内容、模型原文。 - D2 每个校正会话在交付(或放弃 / 超时结束)时写一行:起始窗口半径、出生时间来源类别、提问总数(按类型:定向 / 引导 / 带年月探针 / 性格 / 开放)、用户补经历次数、最终区间宽度(分钟)、候选数、第一名与第二名差距(百分点)、停止原因枚举(收敛 / 题源问空 / 用户说没有了 / 8 轮上限 / 用户中止 / 错误)、精度门槛是否达标、耗时(秒)、算法与策略版本。 - D3 数据只供产品负责人在管理后台看**汇总**(中位、分布、按周),不提供逐条导出;保留期 180 天。 - D4 用户 id 只用于去重与删除联动(账户删除时一并删除),汇总视图不显示。 ## 硬红线 1. 隐私:AGENTS §8;字段白名单写进测试(新增字段必须改测试);日志与表中不得出现出生日期 / 时间 / 地点 / 姓名 / 对话文本。 2. 动表:迁移必须向后兼容(加表,不改旧表);**必须真跑 `npm run test:db`**(本机无 Docker 时以门禁 DB job 结果为准,写进 PROGRESS 并附 run 号);RLS:普通用户不可读写,只有服务端写、管理员读。 3. 写入失败不得影响用户会话(异步 / 吞错并记录)。 4. 全量前端测试(Node 22)与基线逐条一致、新增 0;改动断言三栏。 ## 任务分解 - T1 迁移(表 + RLS + 保留期清理函数)+ 真实 Postgres 测试。 - T2 写入点:交付 / 结束路径,字段计算纯函数 + 单测(白名单)。 - T3 管理后台汇总页(沿用 admin 现有框架):宽度分布、提问数分布、停止原因占比、门槛达标率、按周趋势。 - T4 记录:CHANGELOG、PROGRESS、`docs/testing/`(产品在后台看到汇总的步骤)、隐私说明写进 `docs/operations/`。