Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
74 lines
5.8 KiB
Markdown
74 lines
5.8 KiB
Markdown
# PROGRESS:采用后核对题无按钮(2026-10-01,BUG-1146~1147)
|
||
|
||
- 模式:直接执行(产品 10-01「保留 然后你修」:盘型口径下保留采用后核对题,Claude 直接修并验收)。
|
||
- 基线:`origin/staging` `f1a169cb`;分支 `codex/rectification-post-adopt-verify-20261001`。
|
||
- BUG 编号:开工时 staging 最大 1144;1145 已被另一会话(consult-timeline-no-plan)占用,本单用 1146~1147。
|
||
|
||
## 根因(已用测试复现)
|
||
|
||
1. 已采用时 keep 分支重建 followup 丢了探针身份,卡片 id 与落库题号 `probe:<key>` 对不上,GET 返回空卡(BUG-498 同症状复发)。
|
||
2. 采用接口不写轮次;随后的只读运行在交付后 60 秒内被判 `already_delivered`(BUG-596),也不写;题挂到上一题回复下。
|
||
3. 盘型口径下三处分钟文案未分支(BUG-1147)。
|
||
|
||
## 改动
|
||
|
||
| 文件 | 改动 |
|
||
| --- | --- |
|
||
| `v9/method-followup.ts` | keep 分支带回 `semantic_key` / `candidate_split_hash` |
|
||
| `v9/answer-choice.ts` | 新 `writeAdoptFollowupTurn`(写轮次 + 挂焦点 + 交付标记);盘型口径下答题回复无分数移动句、交付旁白不追加分钟候选提示 |
|
||
| `candidates/accept/route.ts` | 非幂等采用后写采用轮次,返回 `adopt_turn_id` |
|
||
| `rectification-chat-accept-run.ts` | 有 `adopt_turn_id` 时用快照替换进行中行,不发只读运行 |
|
||
| `user-copy.ts` | `postAdoptCheckLead`;盘型交付正文不重复边界句 |
|
||
| `v9/choice-action.ts` | `segmentProduct` 参数 |
|
||
|
||
不改数据库结构;所用 RPC(`append_agentic_rectification_turn`、`set_agentic_rectification_conversation_focus`)采用后状态 `accepted` 不属终止态,既有只读续跑路径已在采用后调用过。
|
||
|
||
## 验收
|
||
|
||
见本文件末尾「门禁」一节(与基线 `f1a169cb` 逐条比对)。真机:`docs/testing/rectification-post-adopt-card-20261001.md`。
|
||
|
||
## 门禁(基线 `f1a169cb` vs 本分支,同机同 node_modules)
|
||
|
||
| 项 | 基线 | 本分支 |
|
||
| --- | --- | --- |
|
||
| `tsc --noEmit` | 0 | 0 |
|
||
| `npm run lint` | 0 error | 0 error |
|
||
| `npm test` 用例名 | 4833 | 4841(+8 新增,缺失 0) |
|
||
| 失败清单(无 Docker 的 DB / 部署套件) | 24 | 24,逐条一致 |
|
||
| cancelled | 0 | 0 |
|
||
| `next build` `/` | ○ Static | ○ Static |
|
||
| 首屏 gzip JS | 555,622 | 555,659(+0.007%) |
|
||
| 按镜像 COPY 清单的构建 | — | 通过 |
|
||
| `tests/test_repo_privacy_markers.py` | — | 通过 |
|
||
|
||
Python 快速门:本单不改 `scripts/**`、`tests/**`,未跑。`test:db`:不改表与 SQL,所用 RPC 采用后已有调用路径,未跑;部署后真机清单覆盖。
|
||
|
||
## 第二轮(真机回报后,BUG-1149~1150)
|
||
|
||
真机:采用后核对题仍挂在上一题下面;点任何选项都「这次没提交上」。本机真 PostgreSQL 17 + 真引擎重放虚构案例复现两处:
|
||
|
||
| 步骤 | 修前 | 修后 |
|
||
| --- | --- | --- |
|
||
| 写采用轮次 | `invalid input syntax for type uuid: "<uuid>:adopt"`(被吞) | 写入 |
|
||
| 作答核对题 | `agentic_rectification_stale_probe`(schema `probe:<键>` ≠ 推断态 `probe:<键>:<哈希>`) | `applied: true`,收尾句 |
|
||
|
||
同根问题:交付收尾补写轮次的 `<id>:gate` 请求号也不是 uuid,一并修。真机反映的「选中后旁白和卡片消失一会儿」本机无浏览器未复现;采用路径现在不再发只读续跑、收尾句能落库,待真机复测,复现则请录屏。
|
||
|
||
第二轮门禁(`52495df7`,基线 staging `fa6d026f`):tsc 0、lint 0 error、用例 4866(失败 24 条与 f1a169cb 基线逐条一致、cancelled 0;唯一「缺失」名为 c0f05912 改名)、`/` ○ Static、首屏 gzip JS 555,642、镜像 COPY 布局构建通过;真库重放 8 条中可采用的 1 条:采用轮次写入、作答成功。
|
||
|
||
## 第三轮:验证报告去分钟排名(BUG-1151,产品选 A)
|
||
|
||
`buildSkillVerificationPacket` 加 `segmentProduct`;盘型口径不出并列/代表分钟行、「本命上升(该分钟)」、候选窗排名表。golden 测试加断言,去开关 15 条红。
|
||
|
||
## 第四轮:交付正文重复(BUG-1153,我在 BUG-1149 引入)
|
||
|
||
真机:交付时「D1 上升…用了 5 道选择题」连出两条。gate 收尾轮次在 BUG-1149 后首次真的落库,与答题回复里的同一段重复。修:写前比对最近一条助手消息。真机另报两点:①采用消息里题干「出现两次」——服务端与单测均确认正文已剥题干,粘贴里多出的一遍来自选项卡给读屏用的隐藏标题(sr-only legend)被鼠标选中复制,屏幕上只显示一次;②答一道核对题就结束——按现行规则:采用后核对题至多 2 道,且只取采用前没问过、不在用户已报年份/领域、未拒答的探针,该案只剩 1 道,属设计,已向产品提出改进选项。
|
||
|
||
## 第五轮:核对题答完说结果(BUG-1172,产品选 A)
|
||
|
||
新增 `v9/post-adopt-verdict.ts`;`persistApplied` 已采用且所答为核对题时,在收尾句或下一题前加结果句。真库重放:「这件事和 15:26 对得上。盘型结论不变。」+ 收尾句。题数规则不变。
|
||
|
||
## 第六轮:盘型变化时说清并给「改用」(BUG-1173,产品 10-02 选 A);BUG-1170→1172 改号
|
||
|
||
`readoptOffer` 一处判断,回复 / 卡片按钮 / 卡片位置共用。真库重放:答「对不上」12 例盘型均未变,原回复「可以回到上面的卡片改选」误导,改为「一件事还不足以改变盘型结论」。真库 D7 测试新增:只改后验使服务端采用分钟 2→8,同一代表候选再采用成功、资料排盘时间跟到新分钟。第一次写夹具时改了先验,被 RPC 以 `segment_state_inconsistent` 拒(先验必须等于引擎原分),属夹具错误。改号原因:普通对话任务书已预留 1170/1171,我上一轮只核对到 1169。
|