Files
Jyotisha/docs/tasks/PROGRESS-rectification-post-adopt-card-20261001.md
T
Jesse_ChenandClaude Opus 5.5 6987875b84
Independent Staging Quality Gate / validate (push) Successful in 14m56s
Independent Staging Quality Gate / publish (push) Successful in 3m23s
feat(rectification): post-adopt verdict says whether the adopted time still fits and offers 改用 HH:MM; renumber BUG-1170→1172 (BUG-1173)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-10-02 07:40:30 +08:00

74 lines
5.8 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-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。