fix(rectification): ask relationship and career before dated collect
Independent Staging Quality Gate / validate (push) Successful in 10m6s
Independent Staging Quality Gate / publish (push) Has been cancelled

Move nextDatedCollectFollowup after family coverage so a new case still
asks D9 then D10. Dated third-event collect stays education → finance →
relocation → health. Admin input padding contract follows --space-3.

BUG-531 and BUG-532.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-09-04 19:06:54 +08:00
co-authored by Cursor
parent 846b60642f
commit 0be51e65f5
12 changed files with 257 additions and 90 deletions
+33 -1
View File
@@ -8161,7 +8161,7 @@
- 修复:`DATED_COLLECT_ORDER`(家人 → 学业 → 财务 → 搬家 → 健康 → 事业 → 感情)由主流程与 `exhaustionSpokenCollectFollowup` 共用。训练门未开时,在方法轮转之前取下一件带年份采集题;职业与 `other` 泛问排在最后。`datedCollectFollowup` 的 `source` 为 `method_coverage`(采集,不是盘外核对)。
- 验证:新文件锁 education → finance → occupation → other;拒答路径落下 `USER_COLLECT_QUESTION.education`。`rectification-eight-method` 中训练门未开的下一问从感情改为家人(或财务),每条改断言附原值/新值/原因。4 条可评分事件时本分支不触发(`rectification-collect-stall`、`rectification-yearless-ungrounded` 的 OOS 结论不变)。
- 防复发:训练门未开时不得先问职业或无领域泛问。顺序只许有一处定义。
- 相关记录:BUG-426、BUG-442、BUG-472、BUG-527
- 相关记录:BUG-426、BUG-442、BUG-472、BUG-527、BUG-531
- 复发自:无
- 修复版本:待发布
@@ -8196,3 +8196,35 @@
- 相关记录:BUG-527
- 复发自:无
- 修复版本:待发布
## BUG-531 | 新案例第二问被家人抢占感情 / 事业
- 状态:resolved
- 首次发现:2026-09-04
- 最近更新:2026-09-04
- 影响面:`buildMethodFollowupPlan` 里 `nextDatedCollectFollowup` 的插入位置
- 用户现象:新案例已有 1 件事业(或 1 件感情)时,第二问变成家人,而不是感情 / 事业。
- 触发条件:训练门未开(前 3 件事几乎总是如此);`3847e9c9` 把 dated 补采集插在方法覆盖轮转之前。
- 根因:上游任务书把「缺第三件带年份的事」的顺序写成了训练门未开阶段的总顺序。执行方按字面把 `nextDatedCollectFollowup` 放在 `!dashaCovered` 之后、感情 / 事业 / 家人轮转之前。这是任务书顺序错位,不是执行方偏离。
- 修复:删掉轮转前分支。轮转里 `!familyCovered` 之后、`!occupationCovered` 之前,训练门未开且 `nextDatedCollectFollowup` 有结果时取它。此时感情 / 事业 / 家人已 covered 或 declined,补采集只会给出学业 → 财务 → 搬家 → 健康。`DATED_COLLECT_ORDER` 与 `exhaustionSpokenCollectFollowup` 不动。
- 验证:`rectification-collect-direction-20260904` 锁 1 事业 → `d9_relationship`、1 感情 → `d10_career`、事业+感情 → `relatives`、再拒答家人 → `d5_education`、再拒答学业 → `d2_finance`。家人答「没有」后焦点仍是学业。`3847e9c9` 改写的感情 / 事业断言回到 `45bdb63e`。
- 防复发:dated 补采集不得插在感情 / 事业轮转之前。训练门未开时新案例前两问仍是 D9 / D10。
- 相关记录:BUG-528、BUG-463
- 复发自:BUG-528
- 修复版本:待发布
## BUG-532 | 原生 input 间距合同测试仍锁 12px
- 状态:resolved
- 首次发现:2026-09-04
- 最近更新:2026-09-04
- 影响面:`frontend/tests/admin-model-management-ui-contract.test.ts`;挡住 `backend-quality-gate` 的 `npm test --prefix frontend`
- 用户现象:无直接用户可见故障。`7ee7f825` 之后门禁因这一条失败,staging 部署停在更早的 SHA。
- 触发条件:`globals.css` 原生 input 为 `padding: 0 var(--space-3)`,合同测试仍匹配 `padding: 0 12px;`。
- 根因:`7ee7f825`(`fix(ui): collapse product weights and radii onto the shared Button`)把间距收敛到 token,未改合同测试。本单开工时 `origin/staging` 上这条仍红,别处未修。
- 修复:测试接受 `padding: 0 var(--space-3);`。不改 CSS。
- 验证:`admin-model-management-ui-contract` 全过;全量失败清单只剩 Docker 并发争用,隔离重跑通过。
- 防复发:改 `globals.css` 原生控件尺寸时同步合同测试。不得为迁就测试把 token 改回裸像素。
- 相关记录:无
- 复发自:无
- 修复版本:待发布
@@ -0,0 +1,86 @@
# PROGRESS · 采集方向修复单(2026-09-04)
工作树:`.worktrees/rectification-collect-direction-fix-20260904`
分支:`codex/rectification-collect-direction-fix-20260904`
基线:任务书写 `origin/staging` `3847e9c9`;开工时 tip 是纯文档 `cce919fe`。交付前再 `git fetch`,快进合入 `846b6064`(BUG-526 任务书,未占用 BUG-531)。
任务书:`docs/tasks/TASK-rectification-collect-direction-fix-20260904.md`
未改 Python、未 bump Skill(仍 10.0.14)、未改 `holdoutFollowupFor` / `validateSpokenPrompt` / `collectionProgressFromReceipt` / `declinedDomains` / 采用确认门。推 `origin/staging`。
| 任务 | 状态 | BUG |
| --- | --- | --- |
| 5.1 dated 分支移到轮转内(家人后、职业前) | 完成 | BUG-531 |
| 5.2 回退 17 条感情/事业断言 | 完成 | 随 BUG-531 |
| 5.3 门禁 CSS 合同测试 | 完成 | BUG-532 |
| 5.4 记录 | 完成 | — |
## 编号
开工时 `docs/BUG_HISTORY.md` 最大号 BUG-530。本单 **BUG-531~532**。`846b6064` 未占用。
## 实现要点
- 删掉 `buildMethodFollowupPlan` 里轮转前的 `if (!next && !meetsAcceptanceEventQuality) nextDatedCollectFollowup`。
- 轮转内 `!familyCovered` 之后、`!occupationCovered` 之前:训练门未开且 `nextDatedCollectFollowup` 有结果则取它。`source` 仍是 `method_coverage`。
- `DATED_COLLECT_ORDER` 与 `exhaustionSpokenCollectFollowup` 不动;`rectification-range-offer-deadend` 搬家在职业前保留。
- `3847e9c9` 把新案例第二问改成家人的断言回到 `45bdb63e`(感情 / 事业)。三栏:原值 = `3847e9c9`,新值 = `45bdb63e`,原因 = dated 分支移到家人之后。
- CSS 合同测试接受 `padding: 0 var(--space-3)`。这条是 `7ee7f825` 引入的,开工时 staging 仍红,别处未修。
## 偏离
- `rectification-question-ownership` / `rectification-v10-conversation-focus` 不能把 spokenPrompt 恢复成「哪年上的大学」:服务端下一问仍是采集,BUG-529 要求题干命中领域词。默认 1 件事业现在下一问是感情,改用 `USER_COLLECT_QUESTION.relationship`。
- `three dated events with one holdout` 仍锁 `domain: finance`(家人拒答后 dated 补采集,不是轮转抢跑)。`45bdb63e` 未锁 domain;本单不删这条,因为行为与 `3847e9c9` 补第三件事一致。
- `collect_retry: true` 与 `USER_COLLECT_QUESTION_RETRY.relationship` 实际在 `rectification-walkthrough-polish`,已恢复。v10 文件里没有这两条断言。
## 测试
`tsc --noEmit`:exit=0。
聚焦套件 `tsx --test tests/rectification-*.test.ts tests/admin-model-management-ui-contract.test.ts`:
```
# tests 875
# pass 875
# fail 0
# cancelled 0
# skipped 0
# todo 0
exit=0
```
新断言在 `rectification-collect-direction-20260904.test.ts`:9/9。
全量 `npm test`(本机有 Docker):
```
# tests 2656
# pass 2654
# fail 2
# cancelled 0
# skipped 0
# todo 0
exit=1
```
2 条失败均为 Docker 迁移争用(`database migration failed`):`database-personal-report-sections`、`rectification-v9-database` 里 `v9 agent api migration…`。`--test-concurrency=1` 隔离重跑:
```
# tests 8
# pass 8
# fail 0
# cancelled 0
# skipped 0
# todo 0
exit=0
```
`eslint` 本单文件 0 error;`choice-card` / `walkthrough-polish` 各 1 条既有 unused 警告,未触碰。
未改 Python;未声称系统 `python3` 预检通过。
## 改动文件
- 计划:`frontend/src/lib/rectification-agentic/v9/method-followup.ts`
- 新断言:`frontend/tests/rectification-collect-direction-20260904.test.ts`
- 回退:eight-method、walkthrough-polish、question-ownership、choice-card、v10-conversation-focus
- 门禁:`frontend/tests/admin-model-management-ui-contract.test.ts`
- 文档:`docs/BUG_HISTORY.md`、`docs/tasks/README.md`、`CHANGELOG.md`、本文件
+1 -1
View File
@@ -48,7 +48,7 @@
| `TASK-rectification-adopt-narration-fix-20260904.md` | `PROGRESS-rectification-adopt-narration-fix-20260904.md` | 采用旁白 Agent 在点选入口从不运行(早退分支重算过期决策)+ 校验器/可观测/超时 | 已验收(5.1/5.2 实现通过;超时测试挂死事件循环,见修复单 2) | `13dded9f`(BUG-521/522) |
| `TASK-rectification-adopt-narration-fix2-20260904.md` | `PROGRESS-rectification-adopt-narration-fix2-20260904.md` | 采用旁白超时用了 unref 的 `AbortSignal.timeout`,测试挂死取消同文件后三条用例,门禁 `npm test` 退出码 1 | 已验收(门禁通过,staging 已部署) | `45bdb63e`(BUG-523) |
| `TASK-rectification-collect-direction-20260904.md` | `PROGRESS-rectification-collect-direction-20260904.md` | 可评分事件 2 条时盘外核对抢跑到刚拒答的家人领域,Agent 只能改写成不指向任何领域的泛问;缺第三件带年份的事却先问职业 | 已验收:5.1/5.3/5.4 通过;5.2 顺序错位(任务书责任)见修复单 | `codex/rectification-collect-direction-20260904`(BUG-527~530) |
| `TASK-rectification-collect-direction-fix-20260904.md` | `PROGRESS-rectification-collect-direction-fix-20260904.md` | dated 补采集分支插在方法轮转之前,新案例第二问被家人抢占感情/事业;`7ee7f825` CSS 与合同测试脱节挡住门禁 | 待执行 | `codex/rectification-collect-direction-fix-20260904`(BUG-531~532) |
| `TASK-rectification-collect-direction-fix-20260904.md` | `PROGRESS-rectification-collect-direction-fix-20260904.md` | dated 补采集分支插在方法轮转之前,新案例第二问被家人抢占感情/事业;`7ee7f825` CSS 与合同测试脱节挡住门禁 | 待验收 | `codex/rectification-collect-direction-fix-20260904`(BUG-531~532) |
| `TASK-rectification-ux-20260902.md` | `PROGRESS-rectification-ux-20260903.md` | 会话面空白假死与交互摩擦 | 已验收 | `d159f08e`(09-03 在新基线重做后合入,BUG-505~509) |
### 聊天主链路与首页