fix(web): 聊天列表恢复项目符号,收紧定义列表,压思考条间距(BUG-962/963/964)

This commit is contained in:
jesse-ux
2026-09-18 18:45:19 +08:00
parent 53d78137ff
commit dccedf372e
12 changed files with 214 additions and 9 deletions
@@ -0,0 +1,63 @@
# PROGRESS · 回答正文的列表渲染(2026-09-18)
- 分支:`codex/chat-markdown-list-20260918`worktree `.worktrees/chat-markdown-list-20260918`
- 基线:`origin/staging` @ `1061514f`(任务书写 `ea0280c1`,本 worktree 从当时 origin/staging 拉出)
- BUG962 / 963 / 964
- Skill 版本:不变
## 1. 做了什么
| BUG | 落点 |
| --- | --- |
| 962 列表无符号 | `globals.css``.message-markdown ul.markdown-list { list-style-type: disc }``ol``decimal``::marker``--color-ink-secondary`。保持 `display: grid`。不动个人报告 Markdown。 |
| 963 散文被提升 | `chat-definition-lists.ts`:收紧 `isDefinitionLine`,不删函数。term 不得含 `。!?;!?;` / 换行;body 必须单句且 ≤ 40 字;仍要连续 ≥2 段,仍跳过 fence 与已有列表。 |
| 964 思考条空 56px | 新增 `--consult-think-answer-gap: var(--space-3)`12px),`.consultation-thinking-report``.message-stage-and-answer` 都读它。会话作用域补 `.message-markdown > *:first-child { margin-top: 0 }`,盖过 h2 的 `--space-8`。会话 `.markdown-list` gap 从 `--space-4`16px)降到 `--space-2`8px)。 |
BUG-356 防复发仍在:既有 fixture「月亮行运三分本命太阳……:情绪与精力契合。」等短项继续提升成 `- **term**body`。那些 body 最长约 10 字,远低于 40。
## 2. 间距口径(headless Chrome 实测)
改前(任务书 harness):思考条底 → 正文首标题 **56px** = 报告 gap 24 + h2 margin-top 32`list-style: none`
改后(本机 Chrome headless`renderChatMarkdown` + 会话作用域 CSS + Tailwind preflight 的 `ul, ol { list-style: none }`):
```
{"gapPx":12,"h2MarginTop":"0px","reportGap":"12px","listStyle":"disc","pCount":3,"liCount":2,"firstChild":"H2"}
```
| 项 | 改前 | 改后 |
| --- | --- | --- |
| `.consultation-thinking-report` gap | `--space-6`24px | `--consult-think-answer-gap`12px |
| `.message-stage-and-answer` gap | `--space-2`8px | 同一 token12px |
| 会话首元素 `h2` margin-top | `--space-8`(32px,特指度压过清零) | 0px |
| 思考条底 → 正文首标题 | 56px | **12px**(≤ 16px |
| 会话 `.markdown-list` gap | `--space-4`16px | `--space-2`8px |
| 列表 `list-style-type` | `none` | `disc` |
| 三段口语冒号段 | 三条 `<li>` | 三个 `<p>`;只有文末行动是列表 |
截图:`docs/testing/chat-markdown-list-20260918-after.png`。步骤仍写在 `docs/testing/chat-markdown-list-20260918.md`
## 3. 被改的既有断言(原值 / 新值 / 原因)
| 文件 · 测试 | 原值 | 新值 | 原因 |
| --- | --- | --- | --- |
| `tests/chat-stream-layout.test.ts` | `.message-stage-and-answer { gap: var(--space-2) }` | `gap: var(--consult-think-answer-gap)`,并新增 thinking-report 同 token、first-child 清零、ul/ol `list-style-type` | BUG-964 / 962 |
| `tests/rectification-agentic-entry.test.ts` | 同上 `--space-2` | 同上 `--consult-think-answer-gap` | 同一 token,校正面也走这条堆叠 |
`chat-definition-lists.test.ts` 既有「consecutive label-colon paragraphs become a markdown list」**一字未改**且须保持绿。
## 4. 测试
| 项 | 结果 |
| --- | --- |
| `tsc --noEmit` | 0 错 |
| `npm run lint` | 0 error / 120 warning(未新增;未顺手修) |
| `tsx --test tests/chat-definition-lists.test.ts` | 3/3 |
| `tsx --test tests/chat-stream-layout.test.ts` | 6/6 |
| `tsx --test tests/chat-markdown-split.test.ts` | 5/5 |
| `tsx --test tests/markdown-code-block-contract.test.ts` | 5/5 |
| `tsx --test tests/rectification-agentic-entry.test.ts` | 43/43 |
| `npm test` 全量 | tests 3458 / pass 3380 / fail 78。多出来的红是本机 Windows 环境:`G:\G:\…` 路径加倍、symlink EPERM、无 Docker 的 database/backup。与本轮 CSS/lib 无关。任务书 Linux 基线是 3501 / 3455 / 31。 |
| `next build` | 未跑。本轮只动 CSS 与一个 lib,首屏 gzip 预期接近 0staging 验收时再核 `/` 仍 Static。 |
Chrome headless 改后:`gapPx=12`(≤16)、`listStyle=disc`、三段口语仍是 `<p>`
+2 -2
View File
@@ -140,8 +140,8 @@
| `TASK-consult-pass4-streaming-20260918.md` | `PROGRESS-consult-pass4-streaming-20260918.md` | 验收 review 三轮:Pass 4 一 hold 正文就整段蹦出、逐字流式消失(BUG-950 产品拍板按句放行);无出生分钟模式整段被一句拒绝顶掉、一般知识句一起丢(951 改按句丢弃);该模式下日期不留痕(952);校正流 token 级 thinking 是死链,按 P2 删除并把测试翻转成否定合同(953)。基线 `1e553976` | 待验收 | `cd4775ae` |
| `TASK-window-consult-contract-20260918.md` | `PROGRESS-window-consult-contract-20260918.md` | **P0 线上**:申报时段模式**自 2026-08-21 起每轮秒败**69ms、0 token、模型从未被调用)。服务端日志实证根因:窗口 Agent attach 了 `jyotishSkillBinding()`,但 `windowJyotishInstructions` 从来不含方法块 marker,输入处理器直接 abortBUG-954)。abort 与「模型没调工具」同码,是它藏四周的原因(955);另含合同未绿不得丢正文(956)、计算不该由模型触发(957,须等 954 上线后另轮)、窗口指令应期冲突(958)。基线 `9cdcf96b` | 已验收通过(Claudetsc 0 / lint 0 error / npm test 3501 条 31 红同基线 / `/` Static / gzip 无变化;实跑确认窗口 Agent 指令已含 marker);review 另出 BUG-959~961 见下一行 | `5b6abc23` |
| `TASK-contract-degraded-pass4-20260918.md` | `PROGRESS-contract-degraded-pass4-20260918.md` | 验收 review:BUG-956 新增的降级交付路径绕过 Pass 4,保证句原样送达(BUG-959);`uncontractedText` 跨 attempt 不清零,同一轮正文说两遍(960);降级后还空跑一轮 compose(961)。基线 `877128ce` | 待验收 | `e07d5190` |
| `TASK-window-consult-contract-20260918.md` §5 | `PROGRESS-window-consult-precompute-20260918.md` | BUG-957:申报时段计算改为服务端预跑并走同请求缓存。产品确认 BUG-954 已在 staging 验证,本轮单独做。不得 `toolChoice: "required"`,本命不预跑 | 待验收 | `59788ac6` |
| `TASK-chat-markdown-list-20260918.md` | | 真机排版反馈:聊天正文列表**没有项目符号**Tailwind v4 preflight 清了 `list-style``.markdown-list` 没恢复,BUG-962);`promoteDefinitionLists` 把四标题口语体的散文误判成并列项,三段正文被改写成列表(BUG-963,判据太松,收紧而非删除——BUG-356 的场景要留);思考条与正文之间实测 56px=报告 grid gap 24 + 首标题 margin-top 32,后者是被特指度压掉的「首元素清零」规则(BUG-964)。基线 `ea0280c1` | 待领取 | |
| `TASK-window-consult-contract-20260918.md` §5 | `PROGRESS-window-consult-precompute-20260918.md` | BUG-957:申报时段计算改为服务端预跑并走同请求缓存。产品确认 BUG-954 已在 staging 验证,本轮单独做。不得 `toolChoice: "required"`,本命不预跑 | 待验收 | `efd40d43` |
| `TASK-chat-markdown-list-20260918.md` | `PROGRESS-chat-markdown-list-20260918.md` | 真机排版反馈:聊天正文列表**没有项目符号**Tailwind v4 preflight 清了 `list-style``.markdown-list` 没恢复,BUG-962);`promoteDefinitionLists` 把四标题口语体的散文误判成并列项,三段正文被改写成列表(BUG-963,判据太松,收紧而非删除——BUG-356 的场景要留);思考条与正文之间实测 56px=报告 grid gap 24 + 首标题 margin-top 32,后者是被特指度压掉的「首元素清零」规则(BUG-964)。基线 `ea0280c1` | 待验收 | `8b102d52` |
| `TASK-secondary-page-entry-20260918.md` | — | 真机反馈:星盘 / 星历 / 报告进入时抖一下——三页都是「矮的等待文案块 → 高的正文块」一次推挤,且 `use-chart-page` 无缓存所以每次进入都抖(BUG-966)。产品已拍板方案一:统一外壳 + 缓存 + 预取消灭中间态,**不加 spinner**,红线不动。另含 BUG-967:标签页跨过部署后客户端导航静默失效(BUG-965 已复现确认,刷新即恢复),要按 `NEXT_PUBLIC_GIT_COMMIT``/api/health` 比对自愈。基线 `41902067` | 待领取 | — |
| `TASK-account-dialog-inert-20260918.md` | — | 真机:账户弹窗打开后整个弹窗点不动、退出登录做不了,刷新依旧——`e4e73f56``SidebarInset` 搬进 layout 后 `inert={modalOpen}` 罩住了没有 portal 的 `AccountDialogOverlay`(BUG-968P0,代码级确认)。另含 BUG-969:校正「换一件事问」后无下文,服务端已出下一题且快照重算完整,客户端停在开场状态,GET 路由与客户端两端静默,本单只做可观测 + 不静默 + 题干进正文。基线 `1061514f` | 待领取 | — |
| `TASK-first-paint-dead-screen-fallback-20260917.md` | — | 真机:首页永远停在「正在载入账户」,兜底全在没跑起来的 bundle 里(BUG-936 investigating)。根 layout 加与 bundle 无关的内联兜底 + 去掉本仓正则后行断言 | 待领取 | — |