From 448ed10684ba7feb4353d4e90e70d47f7f87d472 Mon Sep 17 00:00:00 2001 From: Jesse_Chen Date: Sat, 26 Sep 2026 05:53:19 +0800 Subject: [PATCH] docs(tasks): brief for new chat from /people landing on stale rectification Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8 --- docs/tasks/README.md | 1 + .../TASK-new-chat-from-people-20260926.md | 55 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 docs/tasks/TASK-new-chat-from-people-20260926.md diff --git a/docs/tasks/README.md b/docs/tasks/README.md index eb75e733..ab01347c 100644 --- a/docs/tasks/README.md +++ b/docs/tasks/README.md @@ -119,6 +119,7 @@ | 任务书 | 进度 | 主题 | 状态 | 落点 | | --- | --- | --- | --- | --- | +| `TASK-new-chat-from-people-20260926.md` | — | **从星盘档案页点新建对话落回上一次生时校正**(产品 09-26 真机):标题显示旧校正会话、输入框「正在打开生时校正…」,中间却是新对话开场;另有两套新建入口(`?new=1` 与 `?newChat=1`)违反 BUG-1015 一处解析红线。先复现写失败测试、定位跨页残留状态再修,合并入口。BUG-1037 | 待领取 | — | | `TASK-people-archive-p1-fix-20260925.md` | `PROGRESS-people-archive-p1-fix-20260925.md` | **P0修复**:worker按持久化人物解析、真实删除预留退款、本人历史OR is、切人/消息时序及P2/P3;BUG-1031/1032,关联1030/990/1024。永久定向54/54、独立前端5探针与退款r4六场景通过;必须最终Node22 Linux全量+DB逐条基线对照 | 已验收(Claude 09-25:两 P0、两 P1、七 P2 通过;新 P2 删后跳错人、人物接口故障连累聊天 → 收尾单) | `4d801e53`(已部署,health 核对一致) | | `TASK-home-page-split-20260925.md` | `PROGRESS-home-page-split-20260925.md` | **首页 page.tsx 拆分(只搬不改)**:启动流程约 285 行抽成 lib 纯函数 `runHomeBootstrap`、恢复轮询约 100 行抽出、错误 / 引导屏抽组件,目标 ≤1300 行并下调增长合同基线;两个按源码切片的测试改为直接调用函数;还原 824647f2 的 import 挤行。排在 chart-ephemeris 之后、people-archive P1 之前 | 已验收(行为逐行一致;1417 行达让步线、合同基线已下调;流程违规:未跑全量致门禁红 3 次) | `da35b3e4`(已部署) | | `TASK-staging-gate-fix-20260924.md` | — | **修复单(阻塞 staging 部署)**:慢网首页 `0e4dd0f4` 起 5 条源码合同测试未跟上(硬跳转计数、重试 reload 正则、两处按已删语句切片)→ 门禁红,`0e4dd0f4..f125fae0` 全部未部署;另 page.tsx +9 行、订阅支付不刷新余额、原始附录三文件残留。只修测试与收尾,不改已验收行为;失败名单须与 `edc9c22c` 逐条一致 | 已验收(Claude 09-25:5 条转绿、失败名单与 edc9c22c 逐条一致 56/56、门禁 run 2877 绿;import 挤行凑数为 P3,由 home-page-split D5 还原;原始附录三文件仍未删) | `651c75e7`/`7a001456`/`824647f2`;deploy run 2879 因 ACR 网络失败,待同 SHA 重跑 | diff --git a/docs/tasks/TASK-new-chat-from-people-20260926.md b/docs/tasks/TASK-new-chat-from-people-20260926.md new file mode 100644 index 00000000..097fd6be --- /dev/null +++ b/docs/tasks/TASK-new-chat-from-people-20260926.md @@ -0,0 +1,55 @@ +# 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` 中挂载(``)。这违反 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-1037(复发自 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-1036;本单 **BUG-1037**,开工时核对。