fix(chat): honor new-chat intent from secondary pages
Independent Staging Quality Gate / validate (push) Successful in 13m41s
Independent Staging Quality Gate / publish (push) Successful in 3m30s

Create a fresh local consultation for explicit new-chat navigation and keep reserved recovery from taking over its landing. Add regression tests and record validation gaps for remote review.

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
jesse-ux
2026-09-24 00:25:28 +08:00
co-authored by Claude Code
parent 1c95eb3979
commit 8902e48468
17 changed files with 368 additions and 6 deletions
@@ -0,0 +1,30 @@
# 次级页「新建对话」真人验收(2026-09-23)
关联:`TASK-secondary-new-chat-intent-20260923.md`、BUG-1015。
## 前置与记录边界
- 本清单尚未执行,不以源码合同或纯函数测试代替真实登录走查。
- 在本轮修复已部署的 staging 使用受控测试账号;先核对 `/api/health` 的部署提交。不借用任何他人的登录态。
- 使用明确虚构的资料与对话。测试账号至少有一条已保存的普通咨询;记录列表项数量,不记录账号、会话 ID、出生信息或完整请求体。
- 用浏览器网络面板核对请求方法和路径即可,不保存 Cookie、JWT 或请求正文。每个场景记录通过/未通过、浏览器、日期和脱敏现象。
## 必验
| 步骤 | 操作 | 预期 |
| --- | --- | --- |
| 1 | 从已有普通咨询进入 `/chart`,点侧栏「新建对话」 | 首页为空会话,不显示旧消息;地址为 `/`,无 `new`、无 `c`;历史列表不增加;没有创建会话的 `POST /api/sessions`,无“该对话不存在或已被删除”提示 |
| 2 | 在步骤 1 的空会话发送第一问 | 走既有创建流程;成功后地址为 `/?c=<新会话>`,历史顶部出现新会话;输入与回复正常 |
| 3 | 重做步骤 1,不发消息,直接刷新 | 按无参数首页的既有规则恢复会话,不再次执行新建意图;不是继续保留上一步未保存空会话。无收藏/存根干扰时回最近普通咨询(D6) |
| 4 | 在 `/ephemeris`、`/reports`、`/reports/<受控测试报告>` 分别重复步骤 1 | 与步骤 1 一致 |
| 5 | 移动端打开次级页抽屉,点「新建对话」 | 与步骤 1 一致,抽屉关闭;没有新入口、额外等待动画 |
| 6 | 已有登录返回存根时,访问 `/?new=1&c=<已有会话>`;另测 c 为格式错误值 | 新建意图胜出,打开空咨询;清除两种参数及存根;不恢复旧会话,不提示会话缺失 |
| 7 | 次级页点击账户页脚返回 `/`;首页点击自己的「新建对话」 | 页脚仍走原回首页规则;首页按钮仍走原本地新建流程 |
| 8 | 单独访问有效 `/?c=<已有会话>`(不带 new),并浏览器后退/前进 | 深链仍打开指定会话;没有被本次新建规则抢走;URL 历史仍按原设计工作 |
| 9 | 在旧咨询仍后台生成时进入次级页,再点「新建对话」 | 仍停留新空咨询;旧任务继续恢复但不抢回活动会话,启动恢复提示不留在空会话上;无 `new` 正常回首页时仍恢复旧咨询 |
## 边界复核
- 刚注册、没有历史的受控账号进入新建入口仍只有一个可见空会话,首问前不写数据库、不显示空列表行。启动内部已有的空列表兜底与本单新建分支可能分别产生本地空对象;两者都必须隐藏且不持久化。
- 普通刷新 `/` 不承诺“始终空白”,本单不更改默认落点规则。
- 需要模型凭据才能完成步骤 2 的真实回复;若不可用,只记录创建链的实际证据,将回复部分标环境缺口,不伪写通过。