fix(web): diagnose personal-report schema failures and ISO list timestamps
Keep report_schema_invalid for the user, but record the inner check, retry plan bind once, and format self-hosted timestamptz so the report list no longer shows 时间未知. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -5323,3 +5323,19 @@
|
||||
- 复发自:BUG-348(收集后再区分;区分问句被方法轮询和出牌 defer 排到采用之后)
|
||||
- 修复版本:9873ba42
|
||||
|
||||
## BUG-352 | 个人报告失败被压成 report_schema_invalid,列表把 Date 显示成时间未知
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-08-22
|
||||
- 最近更新:2026-08-22
|
||||
- 影响面:个人报告中心 `/reports`、`GET /api/reports`、`generatePersonalReport`、自托管 `timestamptz` 投影、报告 writer 绑定
|
||||
- 用户现象:生成完整报告后记录为「未完成」,右侧只显示 `report_schema_invalid`;卡片时间显示「时间未知」。出生时钟在创建时是可用的,失败发生在后台生成之后。
|
||||
- 触发条件:自托管 PostgreSQL 上创建个人完整报告;writer 输出与 section plan 不完全一致,或生成中被中止;列表读取 `created_at`。
|
||||
- 根因:`generatePersonalReport` 把 writer JSON、plan 绑定、组装、终态 parse 和 abort 全部吞成同一个 `report_schema_invalid`,且不记录内层 token。evidenceRefs 还要求顺序全等。自托管 `queryValue()` 只把 `date` 收成字符串,`timestamptz` 仍是 `Date`,列表投影只接受 string,UI 便显示「时间未知」。
|
||||
- 修复:schema 失败返回 allowlist `innerReason` 并打无 PII 日志;abort 向上抛出,不再伪装成 schema 失败。plan 绑定失败走现有那一次 repair;evidenceRefs 改为集合相等。`queryValue` 把 `timestamptz`/`timestamp` 收成 ISO,列表投影同时接受 `Date`。
|
||||
- 验证:`frontend/tests/personal-report-generation-v2.test.ts`、`frontend/tests/personal-report-generation.test.ts`、`frontend/tests/personal-report-api.test.ts`、`frontend/tests/local-postgres-query-value.test.ts`、`frontend/tests/personal-report-worker.test.ts`。
|
||||
- 防复发:用户可见码可以仍是 `report_schema_invalid`,但生成结果和日志必须带 allowlist 内层 token。lease abort 不得再断言成 schema 失败。列表时间必须能从 `Date` 或 ISO 字符串格式化。不得把模型原文、出生资料或路径写进失败日志。
|
||||
- 相关记录:BUG-154、BUG-188、BUG-217
|
||||
- 复发自:无
|
||||
- 修复版本:待提交
|
||||
|
||||
|
||||
Reference in New Issue
Block a user