Files
Jyotisha/docs/tasks/TASK-consult-conversational-answer-fix-20261006.md
T

4.4 KiB
Raw Blame History

TASK · 普通对话首轮改聊天 · 验收修复单(2026-10-06)

  • 依赖分支:codex/consult-conversational-answer-20261006 @ 28113fa0(在此分支上继续提交,不另开分支)
  • 基线:origin/staging @ 86cafe68
  • 原任务书:docs/tasks/TASK-consult-conversational-answer-20261006.md
  • BUG 编号:不新开号,补进 BUG-1244 记录的「验证 / 防复发」

1. 验收实证(Claude,Linux + Node 22.14,干净 npm ci)

项 基线 86cafe68 分支 28113fa0 结论
tsc --noEmit — 0 错 通过
npm run lint — 0 error / 126 warning 通过
npm test 4936 项,fail 25 4939 项,fail 25 未通过:失败名单不一致,见下
next build / ○ Static / ○ Static 通过
首屏 gzip(index.html 引用脚本 gzip-9 合计) 567,642 B 567,656 B(+14 B) 通过
断言三栏 — 每处改动都有 通过
git grep "这周可以做的一件事|骨架不可省略" frontend/src — 只剩 REPORT_HEADING.action 兼容常量 通过

失败名单逐条比对:

  • 新增失败:tests/chat-answer-detail.test.ts「the model is told the answer renders inline, so it stops writing for a fold」。它断言 product-voice.ts 含 Every H2 must start its own line,这句在本分支被删了。执行方在 Windows 上这条测试没跑到,进度记录也没有和基线逐条比对,所以漏掉了。
  • 基线多出的「a lookup does not reset the answer clock…70 s」是全量并发下的计时抖动:两边单独跑 3 次都是 15/15 通过,与本单无关。
  • 其余 24 条两边同名(数据库 / 部署 / 备份类,无 Docker)。

2. 问题与根因

  1. P1 合同测试红:删掉 H2 那句是对的(首轮已经没有 H2),但锁这句的测试没跟着改。这条测试会让 staging 门禁变红。
  2. P2 示范段落之间只有一个换行:product-voice.ts 的父母题、事业题 Good 示范,段与段之间是单个 \n。聊天渲染里 .message p 是 white-space: pre-wrap,单换行只是折行,段间距(.message-markdown p 的下边距)只加在空一行分开的真段落上。模型照示范写单换行的话,「几段话」会显示成一整块没有间距的文字。以前有 ## 标题撑开,所以这个问题没暴露。

3. 决策记录

不涉及新的产品决策。P2 的修法(示范段落空一行 + 指令写明段落之间空一行)属于原任务书 D1「写成几段话」的实现细节,由 Claude 定。

4. 硬红线

沿用原任务书 §4。不改 CSS / 渲染器(不加 remark-breaks、不改 .message p 样式),只改提示词和测试。

5. 任务

F1 修 chat-answer-detail.test.ts(P1)

把 assert.match(voice, /Every H2 must start its own line/) 换成符合新形状的断言(例:assert.doesNotMatch(voice, /Every H2 must start its own line/),再加一条 renders the whole answer inline 仍在),写原值 / 新值 / 原因三栏。测试名可保留。

验收:这条测试通过;全量失败名单与基线逐条一致(只差计时抖动那条也要写明)。

F2 段落空一行(P2)

  • product-voice.ts 两条首轮 Good 示范:段与段之间改成空一行(\n\n)。
  • NATAL_ANSWER_SHAPE_SUMMARY 与 natalAnswerShapeBody() 各加一句:段落之间空一行(英文:separate paragraphs with a blank line)。
  • 合同测试:父母示范切片里「你妈妈这边」「爸爸那边」前面都是空行;首轮指令含「段落之间空一行」。

验收:上述测试通过;tsc / lint / build 不变。

F3 记录

  • BUG-1244「验证」补本次 Linux 全量对照数字;「防复发」补 F1/F2 的测试。
  • 进度记录补一节「验收修复」,写清漏掉的原因(Windows 上没跑到 + 没做基线比对)。

6. 让步顺序

F1 > F2 > F3。F1 不修不能推 staging。

7. 开工前置命令

cd /workspace/Jyotisha/.worktrees/consult-conversational-answer-20261006
git status -sb
git fetch origin --prune && git log -1 --oneline   # 应为 28113fa0
cd frontend && npm test 2>&1 | grep -E "^# (tests|fail)"

交付门同原任务书,另加:全量失败名单必须和 86cafe68 逐条比对后贴进进度记录;做不到(Windows 符号链接 EPERM)就写明,由 Claude 在 Linux 上复核。