docs: 会话列表修复单验收通过,BUG-990 收口并更正影响面,新增 BUG-991
门禁 run 2833 全绿、df329fa9 已部署,987~990 回填修复版本。
归档视图的 UI 入口在 92558ee6 就已删除,BUG-990 的用户现象描述更正;
归档后无法查看与恢复记为 BUG-991,待产品决策。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0199rbQDTsUbCVw84wc8BTFe
This commit is contained in:
co-authored by
Claude Opus 5
parent
df329fa96c
commit
11e4d5ff09
+30
-14
@@ -13070,7 +13070,7 @@
|
||||
- 防复发:不得用「某列为空」推断会话有没有内容。列表过滤必须带 `session_type` 限定。不得用源码正则代替真实行测试。
|
||||
- 相关记录:BUG-928、BUG-704
|
||||
- 复发自:BUG-928(空咨询过滤写成全表 `messages <> '[]'`)
|
||||
- 修复版本:待本修复合入 staging
|
||||
- 修复版本:`df329fa9`(staging 已部署,门禁 run 2833 全绿)
|
||||
|
||||
## BUG-988 | 侧栏副标题用创建时间,排序用最后活动时间,列表读起来是乱的
|
||||
|
||||
@@ -13086,7 +13086,7 @@
|
||||
- 防复发:显示、排序、分组、游标必须用同一个时间字段(`updated_at`)。`SESSION_LIST_COLUMNS` 不得再含 `created_at`。
|
||||
- 相关记录:BUG-929、BUG-553
|
||||
- 复发自:BUG-929(副标题改创建时间后与排序键分叉)
|
||||
- 修复版本:待本修复合入 staging
|
||||
- 修复版本:`df329fa9`(staging 已部署,门禁 run 2833 全绿)
|
||||
|
||||
## BUG-989 | 点「新建对话」复用旧空会话,第一问之前就落库
|
||||
|
||||
@@ -13102,20 +13102,36 @@
|
||||
- 防复发:第一问之前不得 `POST /api/sessions`。未落库会话不得写入 `?c=`。列表响应不得再带 `draft`。
|
||||
- 相关记录:BUG-928、BUG-987
|
||||
- 复发自:BUG-928(延迟落库让步未收口)
|
||||
- 修复版本:待本修复合入 staging
|
||||
- 修复版本:`df329fa9`(staging 已部署,门禁 run 2833 全绿)
|
||||
|
||||
## BUG-990 | 侧栏切到归档记录后 500
|
||||
## BUG-990 | `GET /api/sessions?archived=1` 在自托管 Postgres 上 500
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-21
|
||||
- 最近更新:2026-09-21
|
||||
- 影响面:`LocalPostgresQueryBuilder.not()`、`GET /api/sessions?archived=1`、归档视图
|
||||
- 用户现象:**当前无用户可见现象**——归档视图自 `92558ee6`(2026-08-22)起没有 UI 入口(见 BUG-991),前端不会发出 `archived=1`。发现路径是 BUG-987 新加的真实 Postgres 测试第一次跑到归档分支。接口层面确为 500「聊天记录暂时无法读取」。
|
||||
- 触发条件:自托管本地 Postgres 上请求 `?archived=1`。托管 Supabase 不受影响。
|
||||
- 根因:兼容层 `not()` 只实现 PostgREST 算子子集 `eq` / `cs`。`applyArchiveFilter(..., true)` 调用 `not("archived_at", "is", null)`,构造期不报错,真跑 SQL 时 throw `unsupported not filter`,被列表路由外层 catch 成 500。该调用自 `a1956deb`(BUG-553)就在,此前没有真实数据库测试走到归档分支。
|
||||
- 修复:`not()` 增加 `is` 分支,新 filter kind `isNot`,编译为 `is not null` / `is not true` / `is not false`。不得写成 `<> null`(恒为 NULL,会静默 0 行)。
|
||||
- 验证:`local-postgres-not.test.ts`(本机绿);`database-session-list-visibility.test.ts` 归档分支在 Gitea 门禁 run **2833** 转绿(`ok 1238`,3653 条全过、0 红 0 skip),`deploy-staging` run 2835 成功,`/api/health` 的 `deployment.gitCommit` = `df329fa9`。执行方本机 Docker 网段耗尽未跑 `test:db`,见 `BLOCKED.md`。
|
||||
- 防复发:兼容层新增算子必须有真实 Postgres 覆盖,不得只加源码正则。
|
||||
- 相关记录:BUG-553、BUG-926、BUG-987
|
||||
- 复发自:BUG-926(同一兼容层的不同缺口:当时是 `order()` 只留最后一键)
|
||||
- 修复版本:`df329fa9`(staging 已部署)
|
||||
|
||||
## BUG-991 | 会话归档后没有任何入口能看回来或恢复
|
||||
|
||||
- 状态:investigating
|
||||
- 首次发现:2026-09-21
|
||||
- 最近更新:2026-09-21
|
||||
- 影响面:`LocalPostgresQueryBuilder.not()`、`GET /api/sessions?archived=1`、侧栏「归档记录」
|
||||
- 用户现象:点侧栏「归档记录」后聊天记录读不出来(500「聊天记录暂时无法读取」)。
|
||||
- 触发条件:自托管本地 Postgres 上打开归档视图。托管 Supabase 不受影响。
|
||||
- 根因:兼容层 `not()` 只实现 PostgREST 算子子集 `eq` / `cs`。`applyArchiveFilter(..., true)` 调用 `not("archived_at", "is", null)`,构造期不报错,真跑 SQL 时 throw `unsupported not filter`,被列表路由外层 catch 成 500。该调用自 `a1956deb`(BUG-553)就在,此前没有真实数据库测试走到归档分支。
|
||||
- 修复:`not()` 增加 `is` 分支,新 filter kind `isNot`,编译为 `is not null` / `is not true` / `is not false`。不得写成 `<> null`(恒为 NULL,会静默 0 行)。
|
||||
- 验证:`local-postgres-not.test.ts`;`database-session-list-visibility.test.ts` 归档分支(有 Docker 时)。**本记录在 `test:db` 或门禁该测试转绿前不得标 resolved。**
|
||||
- 防复发:兼容层新增算子必须有真实 Postgres 覆盖,不得只加源码正则。
|
||||
- 相关记录:BUG-553、BUG-926、BUG-987
|
||||
- 复发自:BUG-926(同一兼容层的不同缺口:当时是 `order()` 只留最后一键)
|
||||
- 修复版本:待本修复合入 staging 且门禁该测试转绿
|
||||
- 影响面:`app-sidebar.tsx` 会话分组页眉、`SidebarSessionControls.onToggleArchivedView` / `archivedCount`、`toggleArchivedView`
|
||||
- 用户现象:会话行菜单里可以「归档」,归档后它从侧栏消失;此后没有任何界面能列出归档记录,行菜单里的「恢复」也跟着不可达。除非记得 `?c=<uuid>` 深链,归档等于单向丢失。
|
||||
- 触发条件:在会话行菜单点「归档」。
|
||||
- 根因:`92558ee6`(2026-08-22,`fix(web): stack mobile audit tables and restore sidebar hierarchy`)删掉了分组页眉上的 `session-nav-toggle` 按钮(原文案「归档 N」/「返回」),但保留了它背后的整条链路:`onToggleArchivedView`、`archivedCount`、`showingArchived`、`toggleArchivedView()` 与 `GET /api/sessions?archived=1` 全部还在,只是没有调用者。`app-sidebar.tsx` 里两处 `showingArchived ? "归档记录" : …` 的三元条件因此恒取后者。全仓唯一提到 `onToggleArchivedView` 的非类型声明位置是 `use-home-shell-registration.ts` 里提供它的那一行。
|
||||
- 修复:待产品决策——恢复入口,或把归档能力整体下线(用户偏好:多余入口宁可删除也不修)。本轮只记录事实。
|
||||
- 验证:`grep -rn "ToggleArchivedView" frontend/src` 只有声明与提供方,无渲染调用点;`grep -rn "归档" frontend/src --include=*.tsx` 只剩行菜单文案与分组 aria-label。
|
||||
- 防复发:删除某个视图的唯一入口时,必须同时下线其数据链路,或留一条断言入口存在的测试;不得留下"接口活着、界面没有"的半截功能。
|
||||
- 相关记录:BUG-990、BUG-553
|
||||
- 复发自:无
|
||||
- 修复版本:未修复
|
||||
|
||||
Reference in New Issue
Block a user