docs(tasks): 年月焦点单追加产品决策:删掉领域/年月录入卡,年月阶段改打字回答
推翻 precision-gate-guided-collect 单 T3 与 SKILL.md:84 的「不得邀请自由打字」,BUG-750 失去对象。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JUei7K13cYxLHE3Axe4A45
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
3f4a303a8f
commit
abcfdac523
@@ -101,7 +101,7 @@
|
|||||||
| `TASK-rectification-superseded-focus-duplicate-20260910.md` | `PROGRESS-rectification-superseded-focus-duplicate-20260910.md` | P0:一轮两次 batch 让感情采集题被顶替成 superseded 行;题号唯一约束含已结束行、汇总只聚合 declined/skipped,计划层看不见→撞号 `duplicate_focus` 被当「已问过」→出口误走交付旁白无卡(BUG-644);交付口吻与 `can_adopt=false` 矛盾(BUG-645) | 待验收(环境缺口:`next build` / 真人走查) | `a3a51c32`(BUG-644/645) |
|
| `TASK-rectification-superseded-focus-duplicate-20260910.md` | `PROGRESS-rectification-superseded-focus-duplicate-20260910.md` | P0:一轮两次 batch 让感情采集题被顶替成 superseded 行;题号唯一约束含已结束行、汇总只聚合 declined/skipped,计划层看不见→撞号 `duplicate_focus` 被当「已问过」→出口误走交付旁白无卡(BUG-644);交付口吻与 `can_adopt=false` 矛盾(BUG-645) | 待验收(环境缺口:`next build` / 真人走查) | `a3a51c32`(BUG-644/645) |
|
||||||
| `TASK-rectification-exhausted-gate-exit-20260910.md` | `PROGRESS-rectification-exhausted-gate-exit-20260910.md` | 五领域全拒答 + 三件带月经历:门槛句后无载体、客户端误报「没有拿到下一个问题」并循环「接着问」(BUG-646);第三件被留作 holdout 导致永远没有选择题(BUG-647)。含产品建议:一次性开放追问 + 终态标记 + 穷尽后释放 holdout | 已被取代(并入采集重设计单) | — |
|
| `TASK-rectification-exhausted-gate-exit-20260910.md` | `PROGRESS-rectification-exhausted-gate-exit-20260910.md` | 五领域全拒答 + 三件带月经历:门槛句后无载体、客户端误报「没有拿到下一个问题」并循环「接着问」(BUG-646);第三件被留作 holdout 导致永远没有选择题(BUG-647)。含产品建议:一次性开放追问 + 终态标记 + 穷尽后释放 holdout | 已被取代(并入采集重设计单) | — |
|
||||||
| `TASK-rectification-collection-redesign-20260910.md` | `PROGRESS-rectification-collection-redesign-20260910.md` | 产品口径:用户先说、系统从已说的事锚定追问、不得用生日推年份、不得说「领域」、永远交付结果。无固定题数:收集问题池按信息价值排序问到训练门开;选择题问到收敛门开或增益见底;门关不出结果只出精确缺口句并保持开放;≥4 件才留 holdout;撤回 BUG-642 年份线索、BUG-646 单终态与「暂定采用」;Skill 10.0.23(BUG-646~648) | 待验收 | `dd8f35f7` |
|
| `TASK-rectification-collection-redesign-20260910.md` | `PROGRESS-rectification-collection-redesign-20260910.md` | 产品口径:用户先说、系统从已说的事锚定追问、不得用生日推年份、不得说「领域」、永远交付结果。无固定题数:收集问题池按信息价值排序问到训练门开;选择题问到收敛门开或增益见底;门关不出结果只出精确缺口句并保持开放;≥4 件才留 holdout;撤回 BUG-642 年份线索、BUG-646 单终态与「暂定采用」;Skill 10.0.23(BUG-646~648) | 待验收 | `dd8f35f7` |
|
||||||
| `TASK-rectification-year-focus-overlay-20260916.md` | `PROGRESS-rectification-year-focus-overlay-20260916.md` | 真机:定向健康题选 A 后打字给年月,助手追问「是你本人做的吗」,追问句下面挂着录入卡(`set-focus` 同号覆盖年月焦点题干、`event_date_entry` 仍在,BUG-908);事件入账后年月焦点没关(BUG-909,回放定 resolve 还是计划层);答短句撞「本轮达到步骤上限」(BUG-910,host 前置接无年月短句,先 investigating);persisted 问题块无 `--assistant-content-inset`(BUG-911)。主体默认本人不追问,Skill 10.0.29 | 待领取 | — |
|
| `TASK-rectification-year-focus-overlay-20260916.md` | `PROGRESS-rectification-year-focus-overlay-20260916.md` | 真机:定向健康题选 A 后打字给年月,助手追问「是你本人做的吗」,追问句下面挂着录入卡(`set-focus` 同号覆盖年月焦点题干、`event_date_entry` 仍在,BUG-908);事件入账后年月焦点没关(BUG-909,回放定 resolve 还是计划层);答短句撞「本轮达到步骤上限」(BUG-910,host 前置接无年月短句,先 investigating);persisted 问题块无 `--assistant-content-inset`(BUG-911)。**产品追加拍板:「哪一类事 + 发生年月」录入卡整个删掉,年月阶段直接打字(推翻 precision-gate 单 T3 与 SKILL.md:84)**。主体默认本人不追问,Skill 10.0.29 | 待领取 | — |
|
||||||
|
|
||||||
### 聊天主链路与首页
|
### 聊天主链路与首页
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# 任务书 · 年月阶段焦点被模型追问覆盖:追问句下面挂着录入卡、问题块不对齐、答完撞步骤上限(2026-09-16)
|
# 任务书 · 删掉录入卡 + 年月阶段焦点被模型追问覆盖:问题块不对齐、答完撞步骤上限(2026-09-16)
|
||||||
|
|
||||||
## 0. 基线
|
## 0. 基线
|
||||||
|
|
||||||
@@ -41,6 +41,7 @@
|
|||||||
## 3. 决策记录
|
## 3. 决策记录
|
||||||
|
|
||||||
- 产品负责人 2026-09-16 授权:追问句下面不得出现录入卡;问题块与消息对齐;答完不得撞步骤上限。
|
- 产品负责人 2026-09-16 授权:追问句下面不得出现录入卡;问题块与消息对齐;答完不得撞步骤上限。
|
||||||
|
- **产品负责人 2026-09-16 追加拍板:「哪一类事 + 发生年月」录入卡整个删掉,年月阶段直接打字回答。** 这条**推翻** `TASK-rectification-precision-gate-guided-collect-20260916.md` T3「引导题用选项 + 年/月选择器录入,不得邀请自由打字」与 `SKILL.md:84` 同一句,也让 BUG-750(录入卡提交文本格式)失去对象。执行方据此删除,不得以旧任务书为由拒改。原则沿用用户偏好「多余入口宁可删除也不修」。
|
||||||
- **年月阶段的题干归服务器**:模型的 spokenPrompt 只能作旁白侧字段,不能替换 `prompt`。这不推翻 BUG-673(同一原则扩到年月阶段)。
|
- **年月阶段的题干归服务器**:模型的 spokenPrompt 只能作旁白侧字段,不能替换 `prompt`。这不推翻 BUG-673(同一原则扩到年月阶段)。
|
||||||
- **定向健康题主体默认本人,不追问**。`truth-consent-boundaries.md:30`「亲属主体必须显式标记」指的是用户自己说了「我妈住院」这类话时要标 `family`,不是让模型去问。用户原话没有亲属就是 `self`。
|
- **定向健康题主体默认本人,不追问**。`truth-consent-boundaries.md:30`「亲属主体必须显式标记」指的是用户自己说了「我妈住院」这类话时要标 `family`,不是让模型去问。用户原话没有亲属就是 `self`。
|
||||||
- 用户在年月阶段用自由文本给了年月,等同于录入卡提交;不得再要求用卡。
|
- 用户在年月阶段用自由文本给了年月,等同于录入卡提交;不得再要求用卡。
|
||||||
@@ -57,13 +58,22 @@
|
|||||||
|
|
||||||
## 5. 任务分解
|
## 5. 任务分解
|
||||||
|
|
||||||
|
### T0 删掉录入卡,年月阶段改成打字回答(BUG-908 的一部分,不另占号)
|
||||||
|
|
||||||
|
- 删除文件:`frontend/src/components/event-date-entry-card.tsx`、`frontend/src/components/event-date-picker.tsx`;`globals.css:3089-3130` 一带 `.rectification-event-entry*` 与选择器样式整段删;`rectification-agentic-chat.tsx:1427` 的 `yearEntry` / `yearRange` 与 `:1760-1775` 的卡片分支删,persisted 块只剩题干(题干 + 点选卡的分支不动)。
|
||||||
|
- 数据层:`server-focus.ts:345-352` 的 `event_date_entry` / `default_domain` / `default_year` / `default_month` 不再写;`collection-question-pool.ts` 的 `parseYearEntryQuestionId`、`eventDateYearRange`、`formatEventDateEntryMessage` 删除。`:year` 题号与 `TARGETED_YEAR_PROMPT`「大概哪年几月?」保留,它就是一道口述题,用户打字答;引导窗口题(`collect:guided:window:…:year`)同样口述,题干里已带年份和月份区间。
|
||||||
|
- 文案:`choice-card.ts:30/34` 选项 A「有,我来填时间」改「有,我来说」;`TARGETED_COLLECT_WHY_USER`「答有的话再用选择器填年月」改「答有的话直接打字说大概年月」。输入框占位 `RECTIFICATION_COLLECT_WAITING_PLACEHOLDER` 若提到选择器一并改。对照 `frontend/docs/VOICE.md`。
|
||||||
|
- Skill:`SKILL.md:84`「引导题用选项 + 年/月选择器录入,不得邀请自由打字」改为「引导题答『有』后,服务器口述题『大概哪年几月?』,用户打字回答;不要再出点选卡」。与 T1c 同一次 bump 到 10.0.29。
|
||||||
|
- 记录:`frontend/DESIGN.md` 删录入卡段落;`docs/BUG_HISTORY.md` 的 BUG-750 补一行「2026-09-16 录入卡按产品决策删除,本条防复发『账本文本不得复用题干例子列表』仍适用于任何用户可见文本」;`frontend/tests/rectification-guided-collect-20260916.test.ts` 里断言卡片的用例删除并在进度记录写「原值 / 新值 / 原因」,总数不减的要求用新增的 T1~T4 契约测试补足。
|
||||||
|
- 验收:`git grep -n "event_date_entry\|EventDateEntryCard\|EventDatePicker\|rectification-event-entry" frontend/src` 为 0 命中;选项 A 点击后快照活动问题为 `:year` 口述题,题干「大概哪年几月?」,无卡;`/` 仍 Static,首屏 gzip 只降不升。
|
||||||
|
|
||||||
### T1 年月阶段焦点不可被模型覆盖(BUG-908)
|
### T1 年月阶段焦点不可被模型覆盖(BUG-908)
|
||||||
|
|
||||||
- **T1a** `spoken-prompt.ts` `withSpokenPrompt`:`schema.event_date_entry === true` 与 `targeted_collect === true` 同等对待——只写 `spoken_prompt`,不动 `prompt`。
|
- **T1a** `spoken-prompt.ts` `withSpokenPrompt`:T0 删掉 `event_date_entry` 后,以题号为准——`set-focus` 的 `questionId` 经 `parseTargetedCollectQuestionId` / `parseGuidedWindowQuestionId` 解析出 `stage === "year"` 时,与 `targeted_collect === true` 同等对待,只写 `spoken_prompt`,不动 `prompt`(识别以题号前缀为准,与 BUG-673 同口径)。
|
||||||
- **T1b** `turn-decision.ts` `projectCurrentQuestion`(`:85` 起):`event_date_entry` 题投影 `prompt` 时只用服务器 `prompt`,忽略 `spoken_prompt`。前端 `persisted_question` 分支的题干因此恒为「大概哪年几月?」类服务器题干。
|
- **T1b** `turn-decision.ts` `projectCurrentQuestion`(`:85` 起):年月阶段题投影 `prompt` 时只用服务器 `prompt`,忽略 `spoken_prompt`。前端 `persisted_question` 分支的题干因此恒为「大概哪年几月?」类服务器题干。
|
||||||
- **T1c** 提示层:`method-followup.ts:2493` 那条 `active_focus` hint 与 `TARGETED_YEAR_PROMPT` 所在的年月 followup `user_prompt_hint`,补一句「用户给了年月就走 batch 写入并结束本题;不追问主体、原因、细节;定向健康题主体默认本人」。`SKILL.md:100` 改为「`needs_clarification` 不得猜补日期、主体……;用户原话没有亲属时主体就是本人,不要追问『是不是你本人』」。Skill bump 10.0.29。
|
- **T1c** 提示层:`method-followup.ts:2493` 那条 `active_focus` hint 与 `TARGETED_YEAR_PROMPT` 所在的年月 followup `user_prompt_hint`,补一句「用户给了年月就走 batch 写入并结束本题;不追问主体、原因、细节;定向健康题主体默认本人」。`SKILL.md:100` 改为「`needs_clarification` 不得猜补日期、主体……;用户原话没有亲属时主体就是本人,不要追问『是不是你本人』」。Skill bump 10.0.29。
|
||||||
- 验收:
|
- 验收:
|
||||||
- 新契约测试:活动焦点为 `collect:targeted:health:year`(`event_date_entry: true`)时调用 `set-focus`,同号、spokenPrompt 为一句不含年月的追问 → 焦点 `expected_answer_schema.prompt` 不变,`spoken_prompt` 为模型句;`projectCurrentQuestion` 得到的 `prompt` 是服务器题干。
|
- 新契约测试:活动焦点为 `collect:targeted:health:year` 时调用 `set-focus`,同号、spokenPrompt 为一句不含年月的追问 → 焦点 `expected_answer_schema.prompt` 不变,`spoken_prompt` 为模型句;`projectCurrentQuestion` 得到的 `prompt` 是服务器题干。
|
||||||
- `rectification-guided-collect-20260916.test.ts` 与 `rectification-targeted-*.test.ts` 原断言绿。
|
- `rectification-guided-collect-20260916.test.ts` 与 `rectification-targeted-*.test.ts` 原断言绿。
|
||||||
|
|
||||||
### T2 事件入账后年月焦点必须关闭(BUG-909)
|
### T2 事件入账后年月焦点必须关闭(BUG-909)
|
||||||
@@ -76,14 +86,14 @@
|
|||||||
|
|
||||||
### T3 年月阶段收到无年月短句不得烧完步骤(BUG-910,先 `investigating`)
|
### T3 年月阶段收到无年月短句不得烧完步骤(BUG-910,先 `investigating`)
|
||||||
|
|
||||||
- 在 `agent-run.ts:309-335` 日期可靠性分类器旁边加同形状的 host 前置:活动焦点 `event_date_entry === true` 且用户消息里没有年份(`19xx/20xx` 或「x 年」)→ 不进模型,host 直接以服务器题干再问一次(复用 `emitVisibleSpoken` 路径),不扣点、不占步骤;有年份则照常进模型。
|
- 在 `agent-run.ts:309-335` 日期可靠性分类器旁边加同形状的 host 前置:活动焦点题号为年月阶段(`:year`)且用户消息里没有年份(`19xx/20xx` 或「x 年」)→ 不进模型,host 直接以服务器题干再问一次(复用 `emitVisibleSpoken` 路径),不扣点、不占步骤;有年份则照常进模型。
|
||||||
- 用回放测试复现 §1 的循环:活动 `:year` 焦点 + 消息「是」→ 修前应到 `max_steps`(或写明复现不了,改记 `investigating` 并保留 host 前置作为防御);修后 host 前置接住。
|
- 用回放测试复现 §1 的循环:活动 `:year` 焦点 + 消息「是」→ 修前应到 `max_steps`(或写明复现不了,改记 `investigating` 并保留 host 前置作为防御);修后 host 前置接住。
|
||||||
- 卡片消失的原因也在这条链上:录入卡只跟着快照里活动焦点的 `:year` 题号走;失败轮的工具写入不回滚(`agent-run.ts:1084-1087` 直接 `failedAttempt`,`previousFocusId` 只上报不恢复),模型在那 8 步里 set-focus 换题号(supersede)、resolve-focus 或 batch 关掉了年月焦点,轮结束 `loadCaseSnapshot` 重读后活动焦点已不是它,卡随之消失,而接替的题又没落成。回放测试要断言:**失败轮不得只关掉年月焦点而不留下可答的题**——要么焦点原样保留(卡还在),要么接替题已持久化。
|
- 卡片消失的原因也在这条链上:录入卡只跟着快照里活动焦点的 `:year` 题号走;失败轮的工具写入不回滚(`agent-run.ts:1084-1087` 直接 `failedAttempt`,`previousFocusId` 只上报不恢复),模型在那 8 步里 set-focus 换题号(supersede)、resolve-focus 或 batch 关掉了年月焦点,轮结束 `loadCaseSnapshot` 重读后活动焦点已不是它,卡随之消失,而接替的题又没落成。回放测试要断言:**失败轮不得只关掉年月焦点而不留下可答的题**——要么焦点原样保留(卡还在),要么接替题已持久化。
|
||||||
- 验收:`run-diagnostic` 的 `max_steps` 映射不变;`applyHostFallback` 不改条件;新测试绿。
|
- 验收:`run-diagnostic` 的 `max_steps` 映射不变;`applyHostFallback` 不改条件;新测试绿。
|
||||||
|
|
||||||
### T4 persisted 问题块与消息同一条左边线(BUG-911)
|
### T4 persisted 问题块与消息同一条左边线(BUG-911)
|
||||||
|
|
||||||
- `globals.css`:给 `rectification-agentic-chat.tsx:1741` 的独立块加修饰类(如 `.rectification-message-question.is-standalone`),`margin-inline-start: var(--assistant-content-inset)`;块内的 `.rectification-event-entry` 与 `.rectification-choice-card.is-embedded` 把自己的 `margin-inline-start` 归零,避免双重缩进。消息内的同名块不动。
|
- `globals.css`:给 `rectification-agentic-chat.tsx:1741` 的独立块加修饰类(如 `.rectification-message-question.is-standalone`),`margin-inline-start: var(--assistant-content-inset)`;块内的 `.rectification-choice-card.is-embedded` 把自己的 `margin-inline-start` 归零,避免双重缩进(录入卡已在 T0 删除)。消息内的同名块不动。
|
||||||
- 验收:`chart-page-view.test.tsx` 同款的 CSS 声明断言:独立块有 inset、块内卡片 inset 为 0;`frontend/DESIGN.md` 记一句「校正独立问题块与助手正文共用 `--assistant-content-inset`」。
|
- 验收:`chart-page-view.test.tsx` 同款的 CSS 声明断言:独立块有 inset、块内卡片 inset 为 0;`frontend/DESIGN.md` 记一句「校正独立问题块与助手正文共用 `--assistant-content-inset`」。
|
||||||
|
|
||||||
### T5 记录
|
### T5 记录
|
||||||
@@ -115,6 +125,6 @@ grep -rn "10.0.28" ../skills/jyotish-birth-time-rectification/SKILL.md ../fronte
|
|||||||
|
|
||||||
## 8. 环境缺口(留给产品负责人真机)
|
## 8. 环境缺口(留给产品负责人真机)
|
||||||
|
|
||||||
- 定向健康题选 A 后在输入框打字给一件带年月的事:助手只说「记下了」,不追问「是不是你本人」;下面**没有**录入卡;如有下一题则是下一题。
|
- 定向健康题选 A 后,出现的是一句「大概哪年几月?」,**没有**「哪一类事 + 发生年月」的卡;在输入框打字给年月后助手只说「记下了」,不追问「是不是你本人」;如有下一题则是下一题。
|
||||||
- 若助手仍口头追问了别的,回一句短句不应再出现「本轮达到步骤上限」。
|
- 若助手仍口头追问了别的,回一句短句不应再出现「本轮达到步骤上限」。
|
||||||
- 任何独立问题块(题干 + 卡)左边线与助手正文对齐。
|
- 任何独立问题块(题干 + 卡)左边线与助手正文对齐。
|
||||||
|
|||||||
Reference in New Issue
Block a user