Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
4.4 KiB
4.4 KiB
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. 问题与根因
- P1 合同测试红:删掉 H2 那句是对的(首轮已经没有 H2),但锁这句的测试没跟着改。这条测试会让 staging 门禁变红。
- 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 上复核。