Files
Jyotisha/docs/tasks/PROGRESS-rectification-in-chat-step1-20261006.md
T
Jesse_ChenandClaude Opus 5.5 11333460fa
Independent Staging Quality Gate / validate (push) Successful in 12m39s
Independent Staging Quality Gate / publish (push) Successful in 3m33s
docs(tasks): Claude acceptance of rectification-in-chat step 1; note one missing three-column comment
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-10-07 13:05:04 +08:00

58 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PROGRESS:生时校正并入对话 · 第一步 — 2026-10-07
产品 2026-10-07 要求直接执行。实现:Claude fork 子代理;分支 `codex/rectification-in-chat-step1-20261006`(基线 `origin/staging` `328f919d`,代码同 `6ec8efd5`)。未推送。BUG-1247~1251 均为 fixed-pending-verify。
## 实现(按任务书)
| 项 | 做法 |
| --- | --- |
| T1 / P3 / C1 | 删首页「生时校正」pill、`rectificationEntryHint`、`rectificationEntryLabels` / `resolveRectificationEntryAction`;删 `isRectificationHandoffQuestion` 与发送路径里的交接分支、`pendingConsultationQuestion` 展示与传参。`page.tsx` 1357 → 1337 行,`useState` / `useRef` 数不变;新增一个 `onStartRectification` 动作 |
| T2 / C2 / C3 | `RECTIFICATION_OFFER_RULE` 只定义在 `consultation-thinking-plan.ts`,进首轮、追问与申报时段指令。工具 `offer-birth-time-rectification`(本命与申报时段两种 agent 都有):只记录本轮提议;能否出卡由服务端 `decideRectificationOffer` 决定(本人、产品开关、无进行中 case、`feature_pricing` 价格);会话里已提议过且非用户主动要求时拒绝。提议随回答经 `complete_consultation_response` 存进 `messages`,`run.completed` 事件带给浏览器 |
| T3 / C4 | 打开接口带 `sourceSessionId` 时把该会话最新一张提议卡绑定到 case;`GET /api/rectification/cases/[caseId]/source` 在本人最近 20 条咨询里找来源;与校正水合并行读取 |
| T4 / C5 / C6 / C8 | `POST …/source` 由服务端读 `accepted_time` 判断是否改了时间,追加一次分隔消息、提议卡标 `returned`;浏览器重读来源会话并切过去。校正面「回到刚才的对话」按钮;`verified_idle` 或 case 终态时,本视图内做过操作的 case 2.5 s 后自动返回(历史打开的不跳)。分隔线、「按校正前的时间」小字、「按新时间重新看」(走普通 `onFollowUp`,点了才发)。C8 文案在 BUG-1258 已改为「之后的对话都按这个时间来看」,本单保持 |
| T5 / C7 | 模型历史跳过分隔消息;改时间前的助手回答与早于改时间的会话摘要前缀「(以下回答按校正前的出生时间,不要沿用其中的盘面判断)」 |
| T6 | DESIGN.md、VOICE.md、CONTEXT.md(来源对话、提议卡)、CHANGELOG、BUG-1247~1251、本记录、真机清单 `docs/testing/rectification-in-chat-step1-20261006.md` |
数据库:**不改表、不加迁移**。关联存在咨询会话自己的 `messages` JSON 里(`rectificationOffer` / `rectificationReturn`),写入用调用者自己的客户端(`messages` 是本人可更新列,`20260715030000` 起即有授权)。
## 偏离与原因
- 任务书 C4 说「刷新后仍在(服务端存)」:来源不单独存,读时在本人最近 20 条咨询里找绑定了该 case 的提议卡(绑定会写该会话,所以它在最近更新里)。代价:若用户之后在 20 条以上别的对话里聊过,再打开这次校正时找不到来源(只是没有返回按钮,不报错)。
- 来源对话的消息改写是读后整写,没有乐观锁:本地 Postgres 兼容层取回的 `updated_at` 精度不一定能做等值比较。并发风险只在用户同时在来源对话里提问时出现(此时人在校正面)。
- 提议工具成功后的说明,经模型实测改为「正文最后一段必须有一句提到卡片」(原写法 2/2 没提,改后 3/3 提到)。
- 首页卡片专用的 `RECTIFICATION_OPENING_LABEL` 一并删除(侧栏行的打开中文案是另一个常量,不变)。
## 验证(Linux + Node 22.14)
| 项 | 基线 `6ec8efd5` | 本分支 |
| --- | --- | --- |
| `tsc --noEmit` | — | 0 错 |
| `npm run lint` | 0 error / 126 warning | 0 error / 125 warning |
| `npm test` | 4973 项 / fail 24 | 4987 项 / fail 24;失败名单逐条一致(均为无 Docker 的数据库 / 部署类);测试名逐条比对,无消失,新增 14 条 |
| `next build` | `/` ○ Static,首屏 gzip 567,201 B | `/` ○ Static,568,343 B(+0.20%) |
| Python 快速门 | — | py_compile / JSON / 审计 / pytest(329.7 s)通过;其中 `npm test` 一步因上述 24 条环境失败而红,与基线相同 |
断言改动 14 个前端测试文件 + `tests/test_daily_and_rectification_entrypoints.py`,每处写原值 / 新值 / 原因。
模型实测(DeepSeek deepseek-flash,公开名人 golden 盘,脚本在会话临时目录、不入库):只是不认同解释 2/2 不调用提议工具;「过去的事对不上 + 时间是估的」2/2 调用;家人档案 2/2 调用后被服务端拒、一句话说明;已提议后再说不准 2/2 被拒且不再推;成功后正文提到卡片 3/3。
## 环境缺口
- 无 Docker:来源绑定 / 返回的真实库读写(`chat_sessions.messages` 读改写、`maybeSingle`、`order + limit`)未真查;只用了本地 Postgres 兼容层已实现的写法。部署后按真机清单第 4–8 步验。
- 无登录态浏览器:卡片、返回、自动返回、按钮不点不发均为渲染与源码合同测试,真机清单 11 步待产品。
## Claude 独立验收(2026-10-07)
| 项 | 结果 |
| --- | --- |
| tsc / lint | 0 错 / 0 error(125 warning) |
| npm test | 4987 项 fail 24,失败名单与 `6ec8efd5` 逐条一致 |
| build | `/` ○ Static;首屏 gzip 567,201 → 568,343 B(+0.20%) |
| Python | `test_daily_and_rectification_entrypoints.py`、隐私标记通过 |
| page.tsx | 1357 → 1337 行,未增长 |
| 数据库写权限 | 复核迁移:`authenticated` 有 `update (title, theme, messages, updated_at)`(20260715030000),本地 Postgres 兼容层 `set local role authenticated` 后直接 `update public.chat_sessions`,写来源对话消息可行;`agentic_rectification_chat_sessions_case_guard` 只在改 `agentic_rectification_case_id` 时触发,不拦 |
| 断言三栏 | 抽查 16 个改动文件;`consultation-workflow-contract.test.ts` 漏写,验收时补上 |
接受的风险(不阻塞上线,第二步一并处理):来源靠扫描本人最近 20 条咨询找提议卡;来源对话消息读改写无乐观锁(用户校正时同时在来源对话发问才会冲突);C2 判断的模型证据来自实现方的 DeepSeek 实测(4 场景各 2 次 + 卡片提示 3/3),验收未另跑。