Files
Jyotisha/docs/tasks/TASK-rectification-delivery-ui-simplify-20260908.md
T

70 lines
8.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.
# TASK · 生时校正交付面精简:时间卡直接选、去掉四个按钮、去掉输入框上的「先这样」与采用后状态条、交付正文收短、交付轮不得出两条消息(2026-09-08)
- 基线:`origin/staging` @ `be711043`(BUG-594 已合入并部署;本轮转录跑在这版,范围 04:5004:59 → 04:5104:59,收敛已可接受)
- 分支:`codex/rectification-delivery-ui-simplify-20260908`,基于 `origin/staging`
- 执行方:coding agent;验收:Claude
- 涉及文件:`frontend/src/components/rectification-range-delivery.tsx``frontend/src/components/rectification-agentic-chat.tsx`L1688 只读范围行、L17331750 采用状态条、L17551762 输入框上方 `CHOICE_STOP_LABEL` 按钮、`rectification-composer-meta`)、`frontend/src/app/globals.css``frontend/src/lib/rectification-agentic/user-copy.ts``frontend/src/lib/rectification-agentic/v9/divergence-panel.ts`(投影改为按候选行)、`skills/jyotish-birth-time-rectification/SKILL.md` §9 L119bump 10.0.17)、`frontend/DESIGN.md``frontend/docs/VOICE.md`
- BUG 编号起点:**BUG-595**
- 优先级:**P1**(产品负责人原话:"文案还有 UI 完全是乱的";收敛已通,剩下的是交付面)
## 1. 事故实证(2026-09-08 staging `be711043`,只写结构)
1. 职业答完后出现**两条**助手消息:第一条(4 步)已经写了摘要 + "你可以在卡片里选择采用";第二条(2 步)开头"你上一轮说的职业情况已经记下",又写了一遍完整八法报告。中间没有用户输入。
2. 每条报告都是长篇 markdown(表格、八个方法小节、Technique Audit Table),聊天气泡里表格渲染成平铺文本,读不了。
3. 区间交付卡下面四个按钮:两列"这段"的分歧对比(本身也是按钮)+「都不像」「说不好」+「按这个范围用」「再补一件经历」。
4. 输入框上方一直挂着「先这样,先看当前范围」按钮。
5. 采用后输入框上方出现状态条:"已采用 04:53 · 范围 04:5104:59 / 改选 / 之后新建对话即按此时间排盘。",同时气泡里又一句"前事核对到这里。之后新建对话即按已采用时间排盘;对不上随时改选。"——而这次根本没有核对题。
## 2. 决策记录(产品负责人 2026-09-08 口头决定;本单**推翻** `TASK-rectification-range-delivery-card-20260907.md` 的"两个动作 + 分歧面板"设计与 DESIGN.md L255 的"口述采集上方放先这样按钮")
1. **时间卡直接选。** 卡片 = 一行标题(这次给出的范围 04:51–04:59 · 对照了 N 件经历)+ **区间内每个候选分钟一行**(代表分钟排第一、标"排盘用"),每行右侧一句该分钟与代表分钟**不同**的分盘特征(来自 `sign_by_candidate` / D9、D10 类型表;相同则空)。**点一行即采用**(行内变"正在采用…"→"已采用"),采用后其它行仍可点,点了即改选(走现有 accept RPC)。底部只留边界句"这只是代表性候选,不是已确认的唯一出生分钟"。删掉:分歧对比两列、「都不像」「说不好」「按这个范围用」「再补一件经历」。`divergence-panel.ts` 的投影改为 `rows: [{time, candidate_id, representative, difference_label}]`
2. **输入框上方不再有「先这样,先看当前范围」按钮。** 口述采集与只读范围两种状态都删;停止只保留选择题卡内的「先这样」选项(四选项合同 BUG-390 不动)与生成中的「停止回答」。`rectification-composer-meta`("再补一件经历"后的提示)随决策 1 一起删。
3. **采用后不再有状态条。**`rectification-adopt-status`(含"改选"链接与"之后新建对话即按此时间排盘")。采用状态只在卡片行内显示。`postAdoptVerifyDone` 在**没有核对题**时改为一句:"已采用 HH:MM,新建对话即按这个时间排盘。"(有核对题时原句保留)。
4. **交付正文收短,八法报告不进气泡。** 交付轮正文只写三句:范围与代表分钟、对照了几件经历与吻合率、边界句。八法验证报告改由服务端 `skill_verification_report.markdown` 渲染为卡片下方一个折叠块「查看验证报告」(默认收起,`<details>`,表格用真正的 `<table>`),模型不再写报告。Skill §9 L119 与 `references/candidate-comparison.md` L24/L29 改口径,bump **10.0.17**
5. **交付轮只允许一条助手消息。** 第二条消息的触发链未证实(`investigating`):执行方在 `finalizeSuccessfulTurnExit` / `persistExhaustionGateTurn` / 客户端 `send("opening")` / `regenerate` 四条路上加 `rectification_delivery_turn` 日志字段(`trigger`),并在 agent-run 加守卫:本轮 `persistNextInterviewIfIdle` 已返回 `terminalNote``latestResult.resultId` 未变时,同一 Case 60 秒内的下一次无用户消息的 agent 运行直接返回 `already_delivered`,不计费、不写 turn。
6. 不动采用 RPC、确认门、各道门槛;不动 `page.tsx`
## 3. 任务分解
- 3.1 决策 1`rectification-range-delivery.tsx` 重写;`rectification-range-delivery-20260907.test.ts` 三栏(原两个动作 + 面板 → 行选;原值/新值/原因);`agent-voice-copy-contract` 收新文案;隐藏文案 `rangeDelivery*``divergenceTitle``continueCollectFallback` 删除。验收:卡片 DOM 里 `button` 数 = 候选行数;点行调用 `onAccept(candidateId)`;已采用行 `aria-pressed=true`;无「按这个范围用」「再补一件经历」「都不像」「说不好」字样。
- 3.2 决策 2:删除输入框上方停止按钮与 composer-meta`rectification-spoken-collect.test.ts``rectification-agentic-entry.test.ts` 三栏。验收:`collect_spoken` 状态下 `composer-wrap` 内无 `CHOICE_STOP_LABEL`
- 3.3 决策 3:删除状态条;`postAdoptVerifyDone` 分支;`rectification-adopt-*.test.ts` 三栏。验收:采用后 `composer-wrap``rectification-adopt-status`;无核对题时旁白为新句。
- 3.4 决策 4:折叠块组件 `RectificationVerificationReport``<details>` + markdown→`<table>`);Skill 10.0.17versions/ 快照、registry、`skill-registry.test.ts`);交付旁白模板改三句。验收:交付轮落库 `assistant_message` ≤ 3 句、不含"方法1"/"Technique Audit";折叠块默认 `open=false`
- 3.5 决策 5:日志字段 + 守卫 + 用例(mock 两次连续无消息运行 → 第二次 `already_delivered`)。
- 3.6 记录:`docs/BUG_HISTORY.md` BUG-595(交付面四项,关联 BUG-544/545/558/583)、BUG-596(交付轮两条消息,`investigating`,关联 BUG-462 假 run_failed 的 exit gate);`CHANGELOG.md`Skill 10.0.17);`frontend/DESIGN.md` L234/L255/L477 改;`frontend/docs/VOICE.md``PROGRESS-…``docs/testing/rectification-scenarios-20260907.md` 交付段重写。
## 4. 让步顺序
3.1、3.2、3.3 必做且同一提交(用户直接点名);3.4 必做,若 Skill bump 牵扯广可先做折叠块与正文模板、Skill 句子同提交不得拆;3.5 日志必做、守卫可后置为 P2;3.6 不可省。
## 5. 开工前置命令
```bash
git fetch origin --prune
git worktree add -b codex/rectification-delivery-ui-simplify-20260908 .worktrees/rectification-delivery-ui-simplify-20260908 origin/staging
cd .worktrees/rectification-delivery-ui-simplify-20260908
ln -s /workspace/Jyotisha/frontend/node_modules frontend/node_modules
cd frontend && ./node_modules/.bin/tsc --noEmit; npm run lint 2>&1 | tail -1
ls tests/rectification-*.test.ts tests/agent-voice-copy-contract.test.ts tests/skill-registry.test.ts | grep -v database | xargs npx tsx --test 2>&1 | grep -E "^# (tests|pass|fail)"
npm run build 2>&1 | grep -E "○ /|First Load" | head -3 # / 仍 Static,首屏 gzip ±2%
```
## 验收(Claude2026-09-08`origin/staging` @ `7e3b6cdc`staging 已部署同 SHA
| 门 | 结果 |
| --- | --- |
| tsc | 0 错 |
| lint | 0 error / 106 warning+3,未清) |
| 前端 rectification + consultation + voice + skill-registry(非 DB | 1276 / 0 |
| `next build` | 本机 Turbopack 拒外部软链,未能复核;执行方 `--webpack``/` 仍 Static,首屏 gzip 无法从 Next 16.3 输出读到,记环境缺口 |
| 项 | 结论 |
| --- | --- |
| 3.1 逐行卡 | 通过(真实环境已见逐行卡与「查看验证报告」折叠块)。但产品看过实物后改要三列对比,见 `TASK-rectification-candidate-compare-columns-20260908.md` |
| 3.2 删「先这样」 | 通过 |
| 3.3 删状态条 / 无核对题旁白 | 通过 |
| 3.4 三句正文 + 折叠报告 + Skill 10.0.17 | 通过。真实交付正文为四句(多一句"如果采用…之后还可以继续核对"),可接受;快照字节一致 |
| 3.5 双消息守卫 | 通过(守卫 + 日志);真实环境本轮只有一条交付消息。触发链仍 investigating |
结论:通过。