docs(tasks): decision draft for narrowing after dated probe pool is empty (A/B/C/D options)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0193vBv6w5MV2cifdTUu9H5P
This commit is contained in:
Jesse_Chen
2026-09-13 04:04:11 +00:00
co-authored by Claude Fable 5.1
parent 5d54d0597d
commit 4e93ca1587
2 changed files with 54 additions and 0 deletions
+1
View File
@@ -175,6 +175,7 @@
| `TASK-rectification-targeted-collect-persist-20260911.md` | `PROGRESS-rectification-targeted-collect-persist-20260911.md` | 09-11 真机:6c9a0896 后六题答完又无题无卡——定向/锚定/通用采集题 `kind_hint` 违反 `target_kind` CHECK 落不了库、引擎刷新用整网格空转、`targetedCollectExhausted` 按池非空判定成永久等待。执行方只拿到 T0/T3 片段,做成 BUG-655(刷新空题不写库) | 部分实现 `512be9b7`;余项见修复单 | `codex/rectification-targeted-collect-persist-20260911` | | `TASK-rectification-targeted-collect-persist-20260911.md` | `PROGRESS-rectification-targeted-collect-persist-20260911.md` | 09-11 真机:6c9a0896 后六题答完又无题无卡——定向/锚定/通用采集题 `kind_hint` 违反 `target_kind` CHECK 落不了库、引擎刷新用整网格空转、`targetedCollectExhausted` 按池非空判定成永久等待。执行方只拿到 T0/T3 片段,做成 BUG-655(刷新空题不写库) | 部分实现 `512be9b7`;余项见修复单 | `codex/rectification-targeted-collect-persist-20260911` |
| `TASK-rectification-targeted-collect-persist-fix-20260911.md` | `PROGRESS-rectification-targeted-collect-persist-fix-20260911.md` | 修复单:BUG-656 采集焦点 kind 映射到 CHECK 枚举;BUG-657 引擎刷新按 `column_times` 取剩余候选;BUG-658 刷新尝试持久化 + 等待收窄以已问过判定(512be9b7 让无新题时 GET 永远等待且每轮重调引擎) | 已实现 `eae049d0` + `529fcc09`,已部署;静态验收通过,真机六题流程待走 | `codex/rectification-targeted-collect-persist-fix-20260911` | | `TASK-rectification-targeted-collect-persist-fix-20260911.md` | `PROGRESS-rectification-targeted-collect-persist-fix-20260911.md` | 修复单:BUG-656 采集焦点 kind 映射到 CHECK 枚举;BUG-657 引擎刷新按 `column_times` 取剩余候选;BUG-658 刷新尝试持久化 + 等待收窄以已问过判定(512be9b7 让无新题时 GET 永远等待且每轮重调引擎) | 已实现 `eae049d0` + `529fcc09`,已部署;静态验收通过,真机六题流程待走 | `codex/rectification-targeted-collect-persist-fix-20260911` |
| `TASK-rectification-set-focus-tool-failed-20260912.md` | `PROGRESS-rectification-set-focus-tool-failed-20260912.md` | 09-12 真机:记完两件学业后 `rectification-set-focus` 连续六次 `tool_failed`(兜底码,原始错误无处记录;焦点其实已由 batch 工具落下)、宿主兜底正文日期重复(BUG-659/660 | 待验收 | `codex/rectification-set-focus-tool-failed-20260912` | | `TASK-rectification-set-focus-tool-failed-20260912.md` | `PROGRESS-rectification-set-focus-tool-failed-20260912.md` | 09-12 真机:记完两件学业后 `rectification-set-focus` 连续六次 `tool_failed`(兜底码,原始错误无处记录;焦点其实已由 batch 工具落下)、宿主兜底正文日期重复(BUG-659/660 | 待验收 | `codex/rectification-set-focus-tool-failed-20260912` |
| `TASK-rectification-after-pool-empty-decision-20260913.md` | — | 决策单草案:六道带年月题问完、引擎刷新无新题后,定向补事是开放式口述题,体感死板。给出 A 逐条点选 / B 放宽引擎出题(先离线量收益)/ C 参考题可选入口 / D 文案 四个方案,建议 A+D(+C) | 待产品拍板,未拍板不开工 | — |
## 命名与归档 ## 命名与归档
@@ -0,0 +1,53 @@
# 决策单(草案,待产品拍板)· 带年月选择题问完之后,用什么方式继续收窄(2026-09-13)
- 基线:`origin/staging` @ `5d54d059`(已部署;含 BUG-646660
- 性质:产品决策单。**执行方不得在产品选定方案前开工。**
- 关联:`TASK-rectification-narrow-before-deliver-20260911.md`BUG-653/654)、`TASK-rectification-targeted-collect-persist-fix-20260911.md`BUG-656658
## 1. 现状(2026-09-13 03:57 真机,代码 5d54d059
同一序列(两件学业 + 实习入职/离职 + 六道带年月选择题)跑完后,系统按 09-11 的设计做了三步:
| 步 | 结果 | 证据 |
| --- | --- | --- |
| 刷新探针(按剩余 5 个候选 04:51 / 04:53 / 04:59 / 05:00 / 05:06 再向引擎要题) | **没有新题** | `inference_state.refresh_attempts[0].result = "no_new_probes"`,答题数 6,候选集不变 |
| 定向补事 | 已落成活动焦点 | `current_question = collect:targeted:relationship`:「还有4条线能把 04:51 和 05:06 分开:哪年结婚或订婚、哪年收入明显变过、哪年搬家、家里哪年添丁。记得哪件说哪件,年月大概就行。」 |
| 交付卡 | 未出(等用户回答上一步) | `can_offer_range=false`;用户答「都没有」即出「目前范围」卡 |
范围 04:4805:0720 分钟,5 簇),头名 04:53 占 32%,收敛门未开。流程没有卡住,但用户看到的是一道开放式补事题,而不是选择题,体感「死板」。
## 2. 为什么引擎给不出更多选择题(结构性原因,不是 bug)
带年月选择题由 `scripts/rectification/event_probes.py` 在**大运换运边界**上生成,一道题要同时满足:
1. 换运日期在不同候选簇之间至少差 45 天或跨年(`MIN_BOUNDARY_DAYS=45``_boundary_windows`)。Vimshottari 边界随出生分钟只移动几天,所以同年内几乎没有可用边界;Narayana 边界随本命上升变,而 04:48–05:07 内本命上升都是巨蟹座,边界完全相同。
2. 该年该领域的分盘读数在候选组之间确实不同(`_evaluate_contexts`:至少一组「会发生」一组「不会」,且两组各有候选)。
3. 该年没问过、也不挨着已知事件(`asked_years_for_domain` + `EXISTENCE_NEARBY_YEARS`:学业 / 感情 / 事业 / 搬家各 ±1 年)。
4. 家人「有没有发生」题被 0.85 的先验丢弃,只有月级边界题例外。
六题答完后,事业 2023 / 2024、感情 2023 / 2024、搬家 2015、学业 2016 都已问过,剩余 5 个候选之间的差别(04:52 D9 换升、05:00 D10 / D4 / D12 / D2 换升、05:06 D24 换升)只能变成**无年月**的分盘题——正是 09-09 产品拍板降级为「仅作参考、不参与淘汰」的那一类(BUG-629),09-11 又决定「不挡在结果前面」(BUG-651 决策 2,执行时按让步做成了完全不问)。于是引擎侧的选择题供给在这里真的用尽了,剩下唯一能收窄的信息源就是用户再给一件带年月的事。定向补事题正是为此设计的(09-11 决策 3.1)。
## 3. 可选方案
| 方案 | 做法 | 能不能收窄 | 用户体感 | 代价 / 风险 |
| --- | --- | --- | --- | --- |
| **A · 定向补事改成逐条点选**(推荐) | 把「4 条线」拆成一次一条的卡:「结过婚或订过婚吗?」有 / 没有 / 记不清;答「有」→ 追问「大概哪年几月」(口述)→ 记事件 → 引擎重算、可能生出新的带年月题;答「没有」→ 下一条;四条都「没有」→ 出「目前范围」卡 | 只有答「有」并给出年月才收窄;「没有」本身不计分(无年月的否定不参与打分,BUG-629 口径) | 像在继续答题;年份仍由用户给 | 前端两步卡 + 焦点状态机;引擎不动。约 1 单 |
| **B · 放宽引擎出题规则(仅刷新阶段)** | 刷新时允许:挨着已知事件的年份出题(去掉 ±1 年封锁);同一领域同一年按不同事件家族再出一道(入职 vs 升职 vs 离职);`MIN_BOUNDARY_DAYS` 降到 30;家人月级题按 T2(b) 已放开 | 可能多出 1~3 道题,也可能一道没有;分辨力未经验证 | 继续出选择题 | 必须先在离线 20 例公开 AA 数据上量收益(`minute_rectification_fact_ranker_v4_holdout_v3`),有提升再上;风险是多问几道没分辨力的题 |
| **C · 参考题作为可选追问** | 交付卡下给「再答两道参考题」入口(D9 相处方式 / D10 做事风格),±1 只排序不淘汰 | 不收窄,只调整头名顺序 | 有东西可点 | 已有代码(BUG-629 的 tie_break),只需入口;09-11 决策 2 原意即此 |
| **D · 只改文案** | 「还有4条线能把 04:51 和 05:06 分开」改成「现在还剩 04:48–05:07 里 5 个候选;能把它们分开的是这几条线……」,并给每条线一个按钮 + 「都没有,先看结果」 | 不变 | 不再像一句死板的模板 | 半天 |
我的建议:**A + D 一起做**,C 作为可选入口顺带做;B 单独立一张研究单,先量收益再决定,不与 A 混在一起。
## 4. 需要产品拍板的问题
1. 选 A + D(+ C)还是也要 B?
2. A 里每条线答「没有」是否要写进账本作为「该领域近年无事」(不计分,只用于不再问)?建议是。
3. 四条线都「没有」之后直接出卡(当前行为)是否接受?
## 5. 拍板后的任务分解(预案,未定不执行)
- **T1A** `collection-question-pool.ts` `targetedCollectPool` 改为逐条产出 `{domain, existence_prompt}`;焦点 `collect:targeted:<domain>` 改为 choice(有 / 没有 / 记不清);「有」→ 落 `collect:targeted:<domain>:year` 口述焦点;「没有 / 记不清」→ 话题记 skipped 并进下一条;全部 skipped → S3。
- **T2D** `rangeNarrowHint` / 定向题干文案;`agent-voice-copy-contract` 禁词不变。
- **T3(C)** 交付卡下入口 → 性格卡(`tie_break`)。
- **T4(B,独立研究单)** 离线脚本:对 20 例 AA 数据在「六题后剩余 ≤5 候选」的状态下分别按放宽规则再生成题,统计新增题数与真实分钟命中率变化;有提升才进入实现。
- 验收:真机 §1 序列六题答完后出现第一条点选题;答「有 + 年月」后引擎重算并出现新的带年月题或范围变化;四条都「没有」出「目前范围」卡;全程不出现「没有拿到下一个问题」。