Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
5.4 KiB
5.4 KiB
PROGRESS · 生时校正消息清理(2026-10-01,BUG-1135~1137)
任务书:TASK-rectification-message-cleanup-20261001.md。执行:Claude fork 子代理。分支 codex/rectification-message-cleanup-20261001,基线 origin/staging @ 437dcecb。未推送。
环境
Linux,Node 22.14(/exec-daemon/node),Python 3.13。frontend/node_modules 由主检出 cp -al 硬链(同一 lockfile;Turbopack 不接受软链),未跑 npm ci。无 Docker(DB 套件跳过 / 环境失败,同基线)。基线 next build 首次因本机内存紧张类型检查中断,单独重跑通过(/ Static),gzip 以重跑产物为准。
交付
| T | 内容 | 提交 |
|---|---|---|
| T1 一屏一题干(BUG-1135) | GET attachQuestionsToTurns 与客户端 placePersistedQuestion 让活焦点替换「superseded 且无答案」的死焦点;挂题时复用 stripQuestionSentences 剥正文题干;死题 / 被替换的未答题在消息上不画任何东西(当前焦点 busy / 只读时保留题干);Case 另有活题时死题不再判 unavailable;复制文本跳过死题 |
9ec908d3 |
| T3 结算后无回执(BUG-1137) | 校正消息结算后 timeline=[]、无分盘说明句;写作中照旧;普通对话不变 |
6e11a8f0 |
| T2 复述变短(BUG-1136) | 批次有入账条目时证据轮正文 = 服务器复述(≤2 件列出,>2 件「记下了 N 件事。」);快照每条助手回复带 recorded_evidence(证据账本,排除 rejected / superseded);>2 件时消息内 <details> 收起清单;两套 Agent 提示删逐条复述;中文日期标签直接接事件 |
b8dac9c1 |
| T4 记录 | BUG-1135~1137、BUG-917 修订注、CHANGELOG、DESIGN、VOICE、真机清单、本进度、README | 本提交 |
复现与修复证据
- 形状 B(同题重新出题):
C · a superseded focus with the same stem on the latest message…、C · client guard: a message still carrying a dead focus…——修复前 0 个可点选项(死题只剩题干 + 「没有拿到下一个问题」),修复后题干 1 次、4 个可点选项。 - 形状 A(正文残留题干):
C · a stem left in the body of the message that receives the persisted question shows once——修复前题干 2 次,修复后 1 次。 - T3:
a settled rectification reply renders no step receipt在改动前红(临时回退组件验证),改后绿。 - 「1.」来源:步骤列表是
<ol>,收起后仍在 DOM;按纯文本复制时浏览器为有序列表项补序号(屏幕上list-style: none不显示)。推断,未在浏览器复现;回执结算后不再渲染,该来源消失。
T2 一次 12 件的结果
服务端:12 条入账 → 正文与落库都是「记下了 12 件事。」(rectification-v9-agent.test.ts 新测试)。前端:正文一行,其下收起的「看记下的 12 件」,展开 12 个 <li>(如「2000年虚构事件1」),默认不展开;2 件时正文直接列出、无清单。
既有断言改动(原值 / 新值 / 原因)
| 文件 | 原值 | 新值 | 原因 |
|---|---|---|---|
rectification-timeline-adapter.test.ts |
/timeline: rectificationTimelineRows/ |
/timeline: settled \? \[\] : rectificationTimelineRows/ |
BUG-1137 结算后不派生步骤 |
rectification-opening-plain-20260926.test.tsx |
turn 以「已完成 2 步」开头;两条步骤名各 1 次 | turn 以开场正文开头;无「已完成」;步骤名 0 次 | BUG-1137 |
agent-voice-copy-contract.test.ts |
/证据轮正文只写一句复述/、「记下了:2016 年 9 月入学、2020 年 6 月毕业」为好例 |
/证据轮的复述由服务器写/、该句为坏例 |
BUG-1136 |
rectification-v9-agent.test.ts |
/证据轮正文只写一句复述/;answerText/落库 /^记下了:2016 年 9 月入学、2020 年 6 月毕业。/ |
/证据轮的复述由服务器写/;整句等于服务器复述 |
BUG-1136 |
rectification-agentic-entry.test.ts |
/证据轮正文只写一句复述/ |
/证据轮的复述由服务器写/ |
BUG-1136 |
rectification-adopt-flow-20260902.test.ts |
/必须先用一句话承接用户本轮给出的事实(年份\+事件)/ |
/证据轮的复述由服务器写:「记下了 N 件事」/ |
BUG-1136 |
rectification-host-fallback.test.ts |
「2016年9月 入学、2020年6月 毕业」「2018年7月 入职」 | 无空格 | 中文日期标签直接接事件 |
rectification-grounding-20260927.test.ts、rectification-unwritten-evidence.test.ts、rectification-v9-stream.test.ts |
同上四处带空格 | 无空格 | 同上 |
门禁(基线 437dcecb vs 最终)
| 项 | 基线 | 最终 |
|---|---|---|
| tsc | 0 | 0 |
| lint | 0 error / 126 warning | 0 error / 126 warning |
| npm test | 4809 / pass 4744 / fail 24 / cancel 0 / skip 41 | 4820 / pass 4755 / fail 24 / cancel 0 / skip 41;失败清单逐名一致;基线名 0 丢失,新增 11 |
/ |
Static | Static |
| 首屏 gzip | JS 555,325 / CSS 68,764 | JS 555,587(+0.05%)/ CSS 68,813(+0.07%) |
| 快速门 | — | Python 1036 passed / 1 skipped / 0 failed;npm 步同 24 条环境失败 |
缺口
- 「1.」来源为推断,未在浏览器复现。
- 真机清单
docs/testing/rectification-message-cleanup-20261001.md未执行。 - 无 Docker:本单不改库,DB 套件未跑。
- Skill 未 bump(只改系统提示与服务端文案)。