docs: BUG-991/992 收口,补真机走查清单

门禁 run 2837 全绿、d2cec179 已部署、retire 迁移已应用。
五条只有真人能验的写成 docs/testing 清单。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0199rbQDTsUbCVw84wc8BTFe
This commit is contained in:
Jesse_Chen
2026-09-21 19:40:24 +08:00
co-authored by Claude Opus 5
parent d2cec17995
commit c954fb8e67
3 changed files with 76 additions and 8 deletions
+6 -6
View File
@@ -13122,7 +13122,7 @@
## BUG-991 | 会话归档后没有任何入口能看回来或恢复
- 状态:investigating
- 状态:resolved
- 首次发现:2026-09-21
- 最近更新:2026-09-21
- 影响面:会话行菜单「归档 / 恢复」、`GET /api/sessions?archived=1`、`archived_at` 存量
@@ -13130,11 +13130,11 @@
- 触发条件:在会话行菜单点「归档」。
- 根因:`92558ee6`(2026-08-22)删掉了分组页眉上的归档切换按钮,但保留了整条数据链路。产品 2026-09-21 拍板整体下线,不装回入口。
- 修复:删行菜单归档/恢复、删 `archived=1` 查询与 PATCH 写 `archived_at`(旧 bundle 仍发送则 2xx 忽略)、迁移把存量 `archived_at` 清空且不 bump `updated_at`。删除会话能力不动。`archived_at` 列本轮不删。
- 验证:`sidebar-contract.test.ts` 行菜单恰好是重命名/收藏/分享/删除;`local-postgres-not.test.ts` 原样保留;`database-session-list-visibility.test.ts` 仍断言 `archived_at` 非空不入列,并测迁移清空。**门禁该 Postgres 测试转绿前不得标 resolved。**
- 验证:Gitea 门禁 run **2837** 全绿(3656 条 / 3656 过 / 0 红 / 0 skip)。真实 Postgres 测试 `ok 1240 - retire archive migration clears archived_at without bumping updated_at`:执行从迁移文件切出的 `update` 后 `archived_at` 归零,同一行的 `pinned` / `messages` / `updated_at` 与执行前逐字节相同,重跑仍 0 行;`ok 1239` 断言 `archived_at` 非空的行仍不入列;`ok 3444` 锁定行菜单只剩重命名/收藏/转发/删除;`ok 788` 断言 PATCH 收到 `archived_at` 回 2xx 不落库。`local-postgres-not.test.ts` 原样保留。`migrate-staging-database` run 1435 与 `deploy-staging` run 1436 成功,`/api/health` 的 `deployment.gitCommit` = `d2cec179`、`database.latestMigration` = `20260921010000_retire_chat_session_archive.sql`、八项 check 全 ok。验收方独立变异测试:把「归档」菜单项注回 `sidebar-session-row.tsx` 后,Python 合同与 `sidebar-contract.test.ts` 同时转红。真机走查(归档项消失、旧归档会话回列表且时间未变、删除仍可用)见 `docs/testing/`,仍欠。
- 防复发:删除某个视图的唯一入口时必须同轮下线其数据链路,或留一条断言入口存在的测试。
- 相关记录:BUG-990、BUG-553
- 相关记录:BUG-990、BUG-992、BUG-553
- 复发自:无
- 修复版本:待本修复合入 staging 且门禁转绿
- 修复版本:`5a4b8738` + `d2cec179`(staging 已部署)
## BUG-992 | 归档下线后门禁 Python 合同仍要求归档入口存在
@@ -13146,8 +13146,8 @@
- 触发条件:向 staging 推送删掉归档入口的前端改动。
- 根因:Python 合同对前端源码做字符串断言,要求 `toggleArchivedSession` 等必须出现。前序单 grep 只扫 `frontend/`,扫不到 `tests/`。同类第四次。
- 修复:那五个 token 从「必须出现」翻成「必须不出现」,且只对 `sidebar-session-row.tsx` 与 `use-session-management.ts` 做反向断言。归档测试重写,保住 `writeChatSession` 的 POST/PATCH 合同,并把「归档不走 DELETE」改成「删除仍走 DELETE」。`frontend/AGENTS.md` 要求删符号前 `git grep -- tests/ frontend/`。
- 验证:`python -m pytest tests/test_session_management_entrypoints.py`;门禁以合入后的 run 为准。
- 验证:`python -m pytest tests/test_session_management_entrypoints.py` 3 条全绿(验收方独立复跑);门禁 run **2837** 全绿、`publish` 不再跳过。变异测试:把「归档」注回行菜单后该合同转红。
- 防复发:删除或重命名任何前端符号、类名、可见文案之前,必须 `git grep -n "<符号>" -- tests/ frontend/`,不得只 grep `frontend/`。
- 相关记录:BUG-933、BUG-934、BUG-939、BUG-991
- 复发自:BUG-939(Python 合同盯着已搬走的前端源码)
- 修复版本:待本修复合入 staging
- 修复版本:`d2cec179`(staging 已部署)