fix(web): 四个页面共用一份会话列表,空会话不入列
对话、星盘、星历、报告进同一 (app) 外壳,列表只拉一次。服务端不再列出空咨询;新建复用已有空会话。新标题改成「生时校正 · M月D日」,侧栏副标题用创建时间。
This commit is contained in:
@@ -12082,3 +12082,51 @@
|
||||
- 相关记录:BUG-553
|
||||
- 复发自:无
|
||||
- 修复版本:待发布
|
||||
|
||||
## BUG-927 | `/` 与次级页各拉一份会话列表,切页就重拉
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-17
|
||||
- 最近更新:2026-09-17
|
||||
- 影响面:`app/(app)/layout.tsx`、`session-list-context.tsx`、`page.tsx`
|
||||
- 用户现象:对话、星盘、星历、报告四处侧栏不是同一份,每换一页都重新读一次。
|
||||
- 触发条件:在 `/` 与 `/chart` `/ephemeris` `/reports` 之间切换。
|
||||
- 根因:`/` 不在 `(secondary)` 路由组,离开即卸载 Home;次级页另用 `useSidebarData` 再拉一遍。
|
||||
- 修复:四个页面进 `(app)` 路由组。一份 `SessionListProvider` 拉 `/api/sessions` 与 `/api/account`。首页不再自己 `fetchSessions`/`fetchAccount`。侧栏不随切页卸载。按任务书让步,改名/置顶/删除仍由首页注册,未注册时侧栏只读。
|
||||
- 验证:`session-list-provider.test.ts`、`sidebar-contract.test.ts`、`chart-page-view.test.tsx`。
|
||||
- 防复发:`app/` 里 `SidebarProvider` 只许出现在 `(app)/layout.tsx`。
|
||||
- 相关记录:BUG-745、BUG-926
|
||||
- 复发自:无
|
||||
- 修复版本:待发布
|
||||
|
||||
## BUG-928 | 空的「新对话」落库堆积,两边列表还不一致
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-17
|
||||
- 最近更新:2026-09-17
|
||||
- 影响面:`GET /api/sessions`、`startNewChat`、首页启动落点
|
||||
- 用户现象:首页 50 条里大量「新对话」;对话页把它们藏起来,星盘等页原样显示。
|
||||
- 触发条件:点「新建对话」或启动时自动落一个空咨询会话。
|
||||
- 根因:会话在用户开口前就 `POST /api/sessions`;列表页不过滤空咨询。
|
||||
- 修复:列表 `GET` 排除 `messages = []`;详情仍可读。启动和「新建对话」复用已有空咨询。延迟到第一问才落库未做,见 `BLOCKED.md`。
|
||||
- 验证:`chat-session-authority.test.ts`、`session-list-filter.test.ts`。无 Docker,未跑 `test:db` 空会话不入列。
|
||||
- 防复发:列表路由必须带空咨询过滤;详情路由不得带。
|
||||
- 相关记录:BUG-553、BUG-927
|
||||
- 复发自:无
|
||||
- 修复版本:待发布
|
||||
|
||||
## BUG-929 | 会话标题类别在后,同名靠墙钟 HH:MM
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-17
|
||||
- 最近更新:2026-09-17
|
||||
- 影响面:`resolveSessionTitle`、侧栏行映射、`GET /api/sessions` 的 `created_at`
|
||||
- 用户现象:一列「新对话 / 9月14日 · 生时校正 / 9月14日 · 生时校正 02:14」,看不出类别,同日多条靠新建时的钟点区分。
|
||||
- 触发条件:新建校正或今日节奏,或同日开第二条。
|
||||
- 根因:`datedSessionTitle` 日期在前;`uniquifySessionTitle` 用墙钟。侧栏副标题只在他人盘时出现。
|
||||
- 修复:新标题「生时校正 · M月D日」「今日节奏 · M月D日」。删除 uniquify。两处侧栏共用 `toSidebarSessionRow`,副标题为上海时区创建时间。旧标题不批量改。
|
||||
- 验证:`agent-reply.test.ts`、`chart-library-session.test.ts`、`session-open-preserves-identity.test.ts`。
|
||||
- 防复发:不得再给同名标题追加 HH:MM;打开已有会话仍不得改 title / updatedAt(BUG-699)。
|
||||
- 相关记录:BUG-699、BUG-557
|
||||
- 复发自:无
|
||||
- 修复版本:待发布
|
||||
|
||||
@@ -2,21 +2,35 @@
|
||||
|
||||
工作树:`.worktrees/session-list-single-source-20260917`
|
||||
分支:`codex/session-list-single-source-20260917`
|
||||
基线:`origin/staging` @ `6d81062b`(composer-guard 已合入)
|
||||
基线:`origin/staging` @ `e60a3a4d`(T1 已合入)后继续 T2–T4。任务书更新为常驻外壳 layout(`f6db3c77`)。
|
||||
|
||||
## 任务状态
|
||||
|
||||
| 任务 | 状态 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| T1 多键排序 BUG-926 | 完成 | `order()` 追加;SQL `order by a, b`;套餐路由未改代码 |
|
||||
| T2 常驻外壳 layout BUG-927 | 未做 | 路由组重排 + SessionListProvider,本轮未开工 |
|
||||
| T3 空会话不入列 BUG-928 | 未做 | 按让步顺序在 T2 之后 |
|
||||
| T4 标题副标题 BUG-929 | 未做 | |
|
||||
| T5 记录 | 部分 | T1 的 BUG-926 / BLOCKED / CHANGELOG 已写 |
|
||||
| T1 多键排序 BUG-926 | 完成 | 已合入 `e60a3a4d` |
|
||||
| T2 常驻外壳 layout BUG-927 | 完成 | `(app)` 路由组 + SessionListProvider;首页 `useHomeShellRegistration` 注册全部 controls(让步:元数据操作未上移到 provider,次级页只读) |
|
||||
| T3 空会话不入列 BUG-928 | 完成(让步) | 服务端列表排除空 `messages`;启动/新建复用已有空咨询。延迟落库见 `BLOCKED.md` |
|
||||
| T4 标题副标题 BUG-929 | 完成 | `生时校正 · M月D日`;删除 uniquify;共用 `toSidebarSessionRow` |
|
||||
| T5 记录 | 完成 | |
|
||||
|
||||
## 测试(T1)
|
||||
## T2 让步
|
||||
|
||||
任务书允许第一步只做「路由组 + layout 常驻 + provider 拥有列表 + 首页注册全部控制」,元数据操作上移作第二步。本轮按此交付:改名/置顶/删除仍由首页注册,未挂载首页时侧栏只读(与改前次级页一致)。列表所有者已是 provider,切页不重拉。
|
||||
|
||||
## T3 让步
|
||||
|
||||
延迟到第一问才 `POST /api/sessions` 未做(深链 `?c=`、刷新恢复牵动过大)。改为服务端过滤 + 复用已有空咨询。
|
||||
|
||||
`page.tsx` 行数:T2 开工约 1831,抽出 `useHomeShellRegistration` 后 **1825**。`Home()` useState 34(帽 36),useRef 37(帽 37)。
|
||||
|
||||
## 测试
|
||||
|
||||
| 项 | 结果 |
|
||||
| --- | --- |
|
||||
| `local-postgres-order.test.ts` + query-value | 7 passed / 0 failed |
|
||||
| `npm run test:db` | 无 Docker,见 `BLOCKED.md` |
|
||||
| `tsc --noEmit` | 0 错 |
|
||||
| `npm run lint` | 0 error(既有 warning 未动) |
|
||||
| 定向 | session-list / sidebar / agent-reply / chat-session-authority / local-postgres-or / home-shell-growth 等 **26 + 先前 114/115(已修列表 messages 断言)** |
|
||||
| Python | `test_session_management_entrypoints`、`test_supabase_user_data_contract` 过。`test_daily_and_rectification_entrypoints` 两条找 `daily-starlanguage-card` / `birth-rectification-card` 在 **T1 基线 `e60a3a4d` 已红**(前端测试明确断言这两类名已删除),不是本轮引入 |
|
||||
| `test:db` | 无 Docker,见 `BLOCKED.md` |
|
||||
| `next build` | 本 worktree `node_modules` 是 junction,未核 `/` Static,见既有 BLOCKED |
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
| `TASK-rectification-p0-fix-20260915.md` | `PROGRESS-rectification-p0-fix-20260915.md` | **验收修复单**:`f51e494c` 六条缺陷全部实现且方式正确,但 `page.tsx` 从 1951 涨到 1964 行,撞了 `chart-view-route.test.ts` 的 `<= 1951` 上限(AGENTS.md §6 增长冻结)。全量 fail 32→33,就这一条。门禁红很可能是 staging 停在 `2d7698ea`、6 个提交未部署的原因。修法是把 BUG-705 的十来行接线搬出 page.tsx,不放宽上限 | 待验收 | `codex/rectification-p0-fix-20260915` |
|
||||
| `TASK-settings-dialog-size-and-nav-20260915.md` | — | **复发单**:设置弹窗四个分区尺寸仍随内容跳变(BUG-698,复发自 BUG-554——旧防复发只查「有没有写 height」,查不到「写了没生效」);首要嫌疑是 `.settings-modal` 的 `dvh` 没有 `vh` 回退,不支持时整条 `height` 作废退化成内容高度,需先复现确认。另按产品要求去掉分区菜单左侧强调条,并拆开与悬停共用的选中态 | 待领取 | `codex/settings-dialog-size-and-nav-20260915` |
|
||||
| `TASK-consult-followup-tool-contract-20260917.md` | `PROGRESS-consult-followup-tool-contract-20260917.md` | 真机:申报时段会话连发「?」「你在说什么鬼」都 `run.failed runtime_contract_incomplete`,回执无任何 `tool` 步骤。根因是 Agent 系统指令写明「简单追问可复用已有 packet / context、不调工具」,而 `contractReady()` 要求每次请求恰好一次成功排盘调用;「已有 packet」跨请求并不存在(缓存只在单次请求内)。本命与窗口两个 Agent 同构。**产品拍板方案 1**:每轮必调工具(BUG-922 删例外句 + BUG-923 第 0 步 `toolChoice: required`);否决「没调工具就走不扣点纯对话」。第一轮正经问题为何失败留 T4 取证(回执只在 web 容器日志) | 待验收 | `codex/consult-followup-tool-contract-20260917` |
|
||||
| `TASK-session-list-single-source-20260917.md` | `PROGRESS-session-list-single-source-20260917.md` | 会话列表一处数据源:本地 PG 兼容层 `order()` 只保留最后一键,`/api/sessions` 实际按 `id` 排、与游标不一致;`/` 与次级页两份数据源、`/` 每次回来重启动(产品拍板:首页与三个次级页进同一路由组,侧栏外壳与列表 provider 常驻 layout,不做 store);空「新对话」落库堆积(首页 50 条里 28 条);标题类别在后、同名靠墙钟 HH:MM。串行在 composer-guard 单之后。BUG 段 926 起 | 执行中(T1 已合入) | `codex/session-list-single-source-20260917` |
|
||||
| `TASK-session-list-single-source-20260917.md` | `PROGRESS-session-list-single-source-20260917.md` | 会话列表一处数据源:本地 PG 兼容层 `order()` 只保留最后一键,`/api/sessions` 实际按 `id` 排、与游标不一致;`/` 与次级页两份数据源、`/` 每次回来重启动(产品拍板:首页与三个次级页进同一路由组,侧栏外壳与列表 provider 常驻 layout,不做 store);空「新对话」落库堆积(首页 50 条里 28 条);标题类别在后、同名靠墙钟 HH:MM。串行在 composer-guard 单之后。BUG 段 926 起 | 待验收(T1–T4;延迟落库让步) | `codex/session-list-single-source-20260917` |
|
||||
| `TASK-consultation-answer-start-anchor-20260917.md` | — | 主会话回答落在结尾:`useConversationScrollAnchor` 是贴底跟随,流式期间视口钉在最后一个字,回答开头滚出视口;改为发送后问题钉顶、回答向下长、长出视口显示「跳到最新」、末尾动态留白;产品追加拍板:校正面同一语义(推翻 BUG-041/048 贴底),本轮开头 = 用户行或新助手行。BUG 段 930 起 | 待领取 | — |
|
||||
|
||||
### 个人报告
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
# 真机清单 · 会话列表只拉一次(2026-09-17)
|
||||
|
||||
无登录态、无 Chrome。留给有真实账号的人在 staging 用 DevTools 走查。不要截会话正文。
|
||||
|
||||
## 列表只拉一次
|
||||
|
||||
1. 登录后打开 `/`,打开开发者工具 Network,过滤 `sessions` 与 `account`。
|
||||
2. 点侧栏「星盘」→「星历」→「我的报告」→ 再点一条对话回到 `/`。
|
||||
3. **看:** `/api/sessions` 与 `/api/account` 全程各一次(改名、删除、充值后的刷新除外)。
|
||||
4. **看:** Elements 里选中侧栏节点,切页后仍是同一个节点(不卸载重建)。
|
||||
|
||||
## 改名一致
|
||||
|
||||
1. 在对话页把一条会话改名。
|
||||
2. 再去星盘页。
|
||||
3. **看:** 侧栏已是新标题。
|
||||
|
||||
## 登录页无侧栏
|
||||
|
||||
1. 退出后打开 `/login`。
|
||||
2. **看:** 没有会话侧栏。`/admin` 也没有。
|
||||
|
||||
## 空会话不入列
|
||||
|
||||
1. 在对话页连点两次「新建对话」。
|
||||
2. 去星盘页看侧栏。
|
||||
3. **看:** 没有多出一排「新对话」。正在用的那条空会话只在对话页本地出现。
|
||||
|
||||
## 新标题
|
||||
|
||||
1. 新开一段生时校正。
|
||||
2. **看:** 侧栏标题是「生时校正 · M月D日」,下面一行是创建时间,没有「02:14」这种墙钟后缀。
|
||||
3. 旧的「9月14日 · 生时校正」标题保持原样。
|
||||
Reference in New Issue
Block a user