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

4.8 KiB
Raw Blame History

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 增加"先开一条校正会话再从档案页新建"。

开工前置命令

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,开工时核对。