Files
Jyotisha/docs/tasks/TASK-new-chat-from-people-20260926.md
T

56 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TASK · 从星盘档案页点「新建对话」落回上一次的生时校正(2026-09-26)
## 基线
- `origin/staging` 当前 head(线上 `e84d6eb8`)。分支 `codex/new-chat-from-people-20260926`。
- 与即将出的"档案页样式 / 星历可读性"单不交叉(本单不改 CSS 与星历)。
## 事故实证(产品 09-26 真机,iPhone Safari,staging)
1. 进入 `/people`(星盘档案页),点侧栏「新建对话」。
2. 回到首页后:标题栏显示上一次的会话标题「生时校正 · 04:45–05:15」,输入框占位写「正在打开生时校正…」且发送按钮禁用;页面中间却是新对话的开场问候「早上好,岳辰」和两个入口按钮。**期望是一个干净的新对话。**
代码现状(`origin/staging` e84d6eb8):
- 侧栏只读模式的「新建对话」:`frontend/src/components/app-sidebar.tsx` `SidebarMenuLink … href={newChatHref()}` → `/?new=1`(`frontend/src/lib/chat-session-url.ts` `newChatHref` / `parseNewChatIntent`,BUG-1015)。
- 首页启动:`frontend/src/lib/home-bootstrap-run.ts` `resolveLanding` 对 `urlAction === "new-chat"` 新建本地空咨询并 `writeSessionUrl(null, "replace")`、`setActiveSessionId(landingSessionId)`;`reservedConsultation` 恢复后再次改回新建落点。这一段逻辑仍在。
- **第二套新建入口**:`frontend/src/components/people-home-links.tsx` `NewChatDeepLink` 解析 `?newChat=1`(`/people`「和 TA 对话」使用),在 `page.tsx` 中挂载(`<NewChatDeepLink ready={…} startNewChat={startNewChat} />`)。这违反 BUG-1015 红线 3「解析与生成新建意图只在 `chat-session-url.ts` 一处」。
- 标题与占位来自生时校正面的打开状态(`use-rectification-surface` / 外壳注册 `openingSessionId`、`EMPTY_RECTIFICATION_SHELL`),说明回到首页时仍保留或重新激活了上一次的校正会话打开态。
## 根因(待复现确认)
静态阅读能确定的只有"有两套新建入口"。截图同时出现"新对话开场"和"校正会话标题 + 正在打开"两种状态,说明新建落点生效了,但**某个跨页面存活的状态**(候选:外壳注册里残留的 `openingSessionId` / 校正面的模块级缓存 / `current-subject` 绑定时的会话订阅 emit 触发 `activateFallbackSession` / `shouldAutoOpenRectificationSession`)把上一条校正会话重新推成了活动会话或打开态。**执行方必须先复现再定根因,不得凭猜测改。**
## 决策记录
- D1 新建意图只保留一套:`/people`「和 TA 对话」改用 `newChatHref()`(必要时扩展为 `newChatHref({ subjectId })` 带人物,解析仍在 `chat-session-url.ts`),删除 `NewChatDeepLink` 与 `?newChat` 参数。
- D2 从任何次级页(`/chart`、`/ephemeris`、`/reports`、`/people`)点「新建对话」,结果必须等同首页点「新建对话」:活动会话是新的空咨询,标题栏显示新对话,输入框可用,不出现「正在打开生时校正…」,不打开任何历史会话(含校正会话)。
- D3 定位到的残留状态必须在"新建意图"路径上显式清掉(或改为按会话 id 作用域),并写明是哪一个。
## 硬红线
1. 先写一条**会失败**的回归测试复现问题(真实 React 生命周期:先打开一条校正会话 → 客户端导航到 `/people` → 导航回 `/?new=1`),修复后转绿;只有静态源码断言不算。
2. 在真实浏览器里验证(本机有 Chrome;用受控测试账号或本地 dev + 预览数据),截图写进 PROGRESS。没有受控账号时写进 BLOCKED,并交给产品真机复测,不得写成通过。
3. 不改 BUG-989 口径(首问前不落库、不写 `?c=`);首页保持 `○ Static`;`page.tsx` 不新增 hook。
4. 全量测试 Node 22 + Linux 与基线逐条一致、新增 0;改动断言写三栏(写在测试文件里)。
## 任务分解
- T1 复现 + 失败测试。
- T2 定根因并修(D3),合并两套新建入口(D1)。
- T3 覆盖四个次级页 + 移动抽屉的新建路径测试;「和 TA 对话」进入的新对话标题旁是 TA 的名字。
- T4 记录:BUG-1038(复发自 BUG-1015 的"新建意图"链路,写明为何当时的测试没覆盖客户端导航回首页 + 残留校正态);PROGRESS;更新 `docs/testing/secondary-new-chat-20260923.md` 增加"先开一条校正会话再从档案页新建"。
## 开工前置命令
```bash
git fetch origin --prune
node -v # 22.x
git worktree add -b codex/new-chat-from-people-20260926 .worktrees/new-chat-from-people-20260926 origin/staging
cd .worktrees/new-chat-from-people-20260926/frontend && npx tsx --test tests/chat-session-url.test.ts tests/new-chat-recovery.test.ts tests/home-bootstrap-run.test.ts
```
## BUG 编号
写单时最大 BUG-1037;本单 **BUG-1038**,开工时核对。