fix(rectification): keep clock-stamped events out of window intercept (BUG-631, BUG-632)
Dated life events with clock times were swallowed as birth-window replies, and compare columns still stopped at the first nine candidates after the hour-window cap. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -9763,3 +9763,35 @@
|
||||
- 相关记录:BUG-205、BUG-214、BUG-255、BUG-257、BUG-612
|
||||
- 复发自:BUG-214(同一句用户文案和合同门;本条是模型根本没成功调计算工具,不是失败计数把成功次数算超)
|
||||
- 修复版本:待发布
|
||||
|
||||
## BUG-631 | 申报时段拦截把带钟点的经历当成改窗口
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-09
|
||||
- 最近更新:2026-09-10
|
||||
- 影响面:`parseDeclaredBirthWindow`、`POST /api/rectification/agent` 自由文本、采集/点选题下的经历落库
|
||||
- 用户现象:用户报经历时带了钟点(例如「2024 年 8 月 8 日 20:00 左右分手」),助手立刻回复「搜索范围开始时按资料定、过程中不改」,这句话不进模型,证据也不落库。
|
||||
- 触发条件:校正做到一半,自由文本里出现 `HH:MM` / `X 点 Y 分` 加「到 / 至 / -」或「左右 / 前后」,同时这句话其实是经历而不是申报出生时段。
|
||||
- 根因:BUG-625 只按钟点样式拦截。经历里的钟点和申报出生时段共用同一套样式,没有出生语境或年月日门。
|
||||
- 修复:命中钟点后再判语境。含出生语境词才算申报;含年月日且无出生语境一律当经历;只有裸钟点范围(可带「大概 / 下午」这类虚词)仍拦截。
|
||||
- 验证:`frontend/tests/rectification-declared-window-20260909.test.ts`;既有 `rectification-window-cluster-cap-20260909.test.ts` 补了三句经历不拦截。
|
||||
- 防复发:不得只靠钟点正则拦截自由文本;带年月日的经历即使含「20:00 左右」也必须进模型。走查见 `docs/testing/rectification-window-cluster-cap-20260909.md` 第 4 节。
|
||||
- 相关记录:BUG-625
|
||||
- 复发自:BUG-625(拦截范围过宽)
|
||||
- 修复版本:待发布
|
||||
|
||||
## BUG-632 | 经历对照只算引擎前 9 个候选,推断前三会显示还没对照
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-09
|
||||
- 最近更新:2026-09-10
|
||||
- 影响面:`column_times_for_compare`、三列对照卡 `event_dasha_ledger_by_time` / `prospective_windows_by_time`
|
||||
- 用户现象:一小时窗有 17 个引擎候选时,对照卡某一列写「这一分钟还没对照」。
|
||||
- 触发条件:BUG-623 之后公开候选可以超过 9 个;推断层前三不在引擎候选列表的前 9 个里。
|
||||
- 根因:BUG-614 把对照从「引擎分数最高的三个」改成「引擎候选列表」,但仍保留 `limit=9`。卡片按推断前三查表,键不在这 9 个里就显示没对照。
|
||||
- 修复:默认上限改为公开候选全集(`MAX_PUBLIC_CLUSTERS`,64)。`column_times` 仍可传入更小的 active 集合;`column_compare_ms` 继续记录耗时,预算 3 秒。
|
||||
- 验证:`tests/test_rectification_v5_services.py`:17 个候选 → by_time 17 键,65 个截到 64,`column_compare_ms` 低于 3000;`column_times` 子集 3 键。前端 `columnTimesForSlowCompare` 在上一轮超过 3 秒时把 active 分钟写入引擎请求。
|
||||
- 防复发:不得把对照列截回前 9;推断层查表的分钟必须落在 by_time 键集合里。超 3 秒时只允许改传入的 `column_times`,不能再静默丢掉后段候选。
|
||||
- 相关记录:BUG-614、BUG-623
|
||||
- 复发自:BUG-614(对照集合仍被 9 截断)
|
||||
- 修复版本:待发布
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
# PROGRESS · 验收补漏:申报时段误伤经历;by_time 只算 9 个(2026-09-09)
|
||||
|
||||
工作树:`.worktrees/rectification-followups-20260909`
|
||||
分支:`codex/rectification-followups-20260909`
|
||||
任务书:`docs/tasks/TASK-rectification-followups-20260909.md`
|
||||
基线:任务书写 `fef54b6e`;开工时接到 `origin/staging` @ `2de2aa0b`(任务书已在其上)。本单不依赖 BUG-626~628。
|
||||
|
||||
## 开工回执
|
||||
|
||||
- 编号 **BUG-631** / **BUG-632**(`docs/BUG_HISTORY.md` 当时最大已发布号是 630)。
|
||||
- 顺序:解析语境门 → 对照列上限 64 → 超 3 秒时把 active 分钟作为 `column_times` 传入 → 记录。
|
||||
|
||||
## 已完成
|
||||
|
||||
- **BUG-631**:`parseDeclaredBirthWindow` 命中钟点后再判语境。含出生语境词才算申报;含年月日且无出生语境一律当经历;裸钟点范围(可带「大概 / 下午」)仍拦截。`route.ts` 仍只在解析命中时固定回复。
|
||||
- **BUG-632**:`column_times_for_compare` 默认 `limit=MAX_PUBLIC_CLUSTERS`(64)。17 个候选 → by_time 17 键。`column_compare_ms` 预算 `COLUMN_COMPARE_BUDGET_MS=3000`。上一轮超过 3 秒时,TS `columnTimesForSlowCompare` 把推断层 active 分钟写入引擎请求的 `column_times`;决策层只保留仍在公开候选里的那些分钟。
|
||||
- 记录:BUG-631/632、CHANGELOG、DESIGN §11、走查第 4 节、场景清单第 7 条、本文件。Skill 版本不变(10.0.21)。
|
||||
|
||||
## 验收命令(实测)
|
||||
|
||||
工作树 `codex/rectification-followups-20260909`,相对 `origin/staging` @ `2de2aa0b`。
|
||||
|
||||
| 命令 | 结果 |
|
||||
| --- | --- |
|
||||
| `frontend` `./node_modules/.bin/tsx --test tests/rectification-declared-window-20260909.test.ts tests/rectification-window-cluster-cap-20260909.test.ts tests/rectification-v9-engine-contract.test.ts` | **23/23 pass** |
|
||||
| `frontend` `./node_modules/.bin/tsx --test tests/rectification-v9-agent.test.ts` | **23/23 pass** |
|
||||
| `.venv/bin/python -m pytest tests/test_rectification_v5_services.py -q` | **40 passed** |
|
||||
| `git diff --check` | 干净 |
|
||||
|
||||
## 环境缺口
|
||||
|
||||
- 无登录态、无 Chrome:`docs/testing/rectification-window-cluster-cap-20260909.md` 第 4 节真人走查未做。
|
||||
- 未跑完整前端套件 / `next build`。
|
||||
|
||||
## 未做
|
||||
|
||||
- 未 commit、未 push、未提升 `main`。
|
||||
- Skill 未升版。intake 自定义更小范围仍等产品答复(BUG-625 留下的)。
|
||||
@@ -93,7 +93,7 @@
|
||||
| `TASK-rectification-skipped-health-deadend-20260909.md` | `PROGRESS-rectification-skipped-health-deadend-20260909.md` | 真实用户:健康题「记不清」后职业答完即断(『没有拿到下一个问题』):holdout 的 `declined` 未归并 health/health_pressure,把跳过的健康线再问一次,撞同 id 焦点 `duplicate_focus` 静默;出口闸门把 `exhausted` 当已交付不修复;『重新加载』只重取快照 | 待执行 | `codex/rectification-skipped-health-deadend-20260909`(BUG-626~627) |
|
||||
| `TASK-rectification-domain-alias-audit-20260909.md` | `PROGRESS-rectification-domain-alias-audit-20260909.md` | 领域命名审计:健康线 `health`(账本/焦点)与 `health_pressure`(计划/引擎)在十处比较里六处未归并(holdout declined、reverse-verify、conflict probes、probeYearAlreadyCovered、引擎 oos_blind_prompts / _event_years / volunteered);职业线焦点存为 `other` 只靠 questionId 兜底。其余六领域三层同名无问题。决策:TS/Python 各一个归并函数 + 源码合同禁字面量比较 | 待执行 | `codex/rectification-domain-alias-audit-20260909`(BUG-628) |
|
||||
| `TASK-rectification-yearless-probe-downgrade-20260909.md` | `PROGRESS-rectification-yearless-probe-downgrade-20260909.md` | 产品拍板:无年月性格题(D9/D10 风格、月宿边界)降级为平局裁决——带年月题问完且候选仍分不开才问,分值减半(±1)、不计淘汰,报告标「参考」;三列卡性格描述不动;新增离线命中率测量脚本 + 导出 SQL(有出生证用户,聚合);Skill 10.0.21 | 已验收通过 | `fef54b6e`(BUG-629,Skill 10.0.21) |
|
||||
| `TASK-rectification-followups-20260909.md` | `PROGRESS-rectification-followups-20260909.md` | 验收补漏:申报时段拦截只看钟点样式,带钟点的经历(『20:00 左右分手』『3 点到 5 点被车撞』)会被吞(BUG-631);by_time 只算引擎前 9 个候选,一小时窗 17 个候选时卡片列写『还没对照』(BUG-632) | 待执行 | `codex/rectification-followups-20260909`(BUG-631~632) |
|
||||
| `TASK-rectification-followups-20260909.md` | `PROGRESS-rectification-followups-20260909.md` | 验收补漏:申报时段拦截只看钟点样式,带钟点的经历(『20:00 左右分手』『3 点到 5 点被车撞』)会被吞(BUG-631);by_time 只算引擎前 9 个候选,一小时窗 17 个候选时卡片列写『还没对照』(BUG-632) | 待验收 | `codex/rectification-followups-20260909`(BUG-631~632) |
|
||||
|
||||
### 聊天主链路与首页
|
||||
|
||||
|
||||
@@ -173,6 +173,7 @@
|
||||
- 口述采集没有「没有」「记不清」按钮,也没有「先这样」;输入框上方不再挂快捷回答
|
||||
- 想跳过可以打字「没有」或「记不清」
|
||||
- 每轮助手正文一句复述(可另接一句范围变化);气泡里没有「本轮对照了…」,也没有「很有帮助 / 很有价值 / 很有分量 / 特别有用」
|
||||
- 报经历时带钟点(「20:00 左右分手」「下午 3 点到 5 点被车撞」)不得被当成申报出生时段,不得回「搜索范围开始时按资料定、过程中不改」
|
||||
|
||||
## 8. 性格题只作平局参考(BUG-629)
|
||||
|
||||
|
||||
@@ -27,3 +27,17 @@
|
||||
|
||||
- [ ] 不得出现「明白了,以你说的为准」或改写搜索窗口。
|
||||
- [ ] Skill 10.0.20 写明不得口头承认。
|
||||
|
||||
## 4. 报经历带钟点不得被当成申报时段
|
||||
|
||||
采集或点选题还挂着时,用虚构经历带上钟点(不要用真实资料):
|
||||
|
||||
- 「2024 年 8 月 8 日 20:00 左右分手」
|
||||
- 「下午 3 点到 5 点被车撞」
|
||||
- 「2019 年 10 月 23 日 9 点半入职」
|
||||
|
||||
期望:
|
||||
|
||||
- [ ] 不出现「搜索范围开始时按资料定、过程中不改」那句固定回复。
|
||||
- [ ] 这句话进模型 / 证据账本,不当成申报出生时段。
|
||||
- [ ] 「我的出生时间是 14 点 45 到 14 点 50」「14:45–14:50」「我是 14:47 左右生的」仍走固定回复。
|
||||
|
||||
Reference in New Issue
Block a user