# PROGRESS · 生时校正采集流程重设计(2026-09-10) 工作树:`.worktrees/rectification-collection-redesign-20260910` 分支:`codex/rectification-collection-redesign-20260910` 任务书:`docs/tasks/TASK-rectification-collection-redesign-20260910.md` 基线:任务书写 `origin/staging` @ `3cd7a95d`(代码 `52db714b`);开工接到当前 `origin/staging` @ `cb045297`(任务书文档提交,尚未含本单代码)。 代码提交:`dd8f35f7` ## 开工回执 - 编号 **BUG-646 / 647 / 648**。开工时最大已占用号是 648(646/647 已在任务书占用)。 - 顺序:T1 收集池 → T2 锚定模板 → T3 删年龄段年份线索 → T4 holdout ≥4 → T5 缺口/S3/collect_waiting → T6 Skill 10.0.23 与测试改写。 ## 已完成 - **T1 / BUG-648**:`collection-question-pool.ts`。S1 按信息价值排序:邀请 `collect:invite:more`(价值 2.0)→ 用户年份锚定 → 无年份 generic。训练门关时 `next_followup` 取池首。邀请拒答不把整个 `other` 列入禁问。 - **T2**:锚定规则用任务书概率表,不是让步里的统一 0.5:毕业→工作 0.8、上大学→搬家 0.6、感情跟进 / 事后追问 0.5。年份只来自账本。焦点 id `collect:anchor::`,`kind_hint` 写成 `anchor:…` / `generic:…` / `invite_more` 以便无 `question_id` 的 SQL 重建仍能记住已问键。 - **T3**:删除 `COLLECT_QUESTION_YEAR_CUE`。`user-copy.ts` 无「年前后」。年龄段探针年份不入口述题干。 - **T4 / BUG-647**:`MIN_EVENTS_TO_RESERVE_HOLDOUT = 4`(TS + `case_holdout.py`)。3 件全训练;回执 `not_reserved_min_events`;报告 Real Case Calibration = `not reserved`。确认门与引擎计分未改。 - **T5 / BUG-646**:训练门关且池空 → 精确缺口句、无卡、占位「再说一件带年月的事」、客户端 `collect_waiting`。训练门开且增益见底 → 区间卡 + 「再补什么」。不做暂定采用。职业/占问层在训练门开后仍可问,不恢复家人/财务领域轮转。 - **T6**:Skill **10.0.23** live 与 `versions/10.0.23` 逐字节相等。sha256 `91f5839e15514b80fa0370bb8b539686af211082e83bc951dc0e8250cbdbadcb`。10.0.22 仍 deprecated、`e3765b20…`;10.0.21 仍 `3ced1073…`。`resolveExactSkillPackage` 可打开 10.0.21 与 10.0.22。CHANGELOG、BUG-646~648、走查 19–21、VOICE、DESIGN 已写。 ## 三栏(既有断言) | 位置 | 原值 | 新值 | 原因 | | --- | --- | --- | --- | | Skill 当前钉 | 10.0.22 / sha256 `e3765b20…` | 10.0.23 / `91f5839e…` | 改 SKILL.md 必须升版 | | 方法覆盖顺序(用户可见) | 先走完感情→事业→家人→职业→占问再精度追问 | S1 收集池到训练门 → S2 选择题到收敛/增益见底 → S3 交付 | 产品口径 1 | | 采集题干年份 | `COLLECT_QUESTION_YEAR_CUE` / 「2021 年前后」 | 删除;只有用户账本年份进锚定题 | 撤回 BUG-642 | | holdout 起留件数 | `MIN_EVENTS_TO_RESERVE_HOLDOUT=2` | 4 | 3 件全训练(BUG-647) | | 3 件带月、2 类后的下一动 | `ask_fact_collection`(1 件 holdout) | 可 `ask_candidate_discriminator` | 同上 | | 训练门开后 leftover dated collect | 家人/财务轮转,可挡 adopt | `exhaustionSpokenCollectFollowup` 返回 null | BUG-648 | | 池空且训练门关 | 「还差 N 件,领域不限」或「没有拿到下一个问题」 | 精确缺口句 + `collect_waiting` | BUG-646 | | 开场后下一问 | 家人/学业领域轮转 | 邀请 `collect:invite:more` | 先等用户说完 | | 事故夹具 5 件后公开 `can_adopt` | false(财务口述未问完) | true;确认门仍关 | 训练门开后不再轮转采集 | ## 验收命令(实测) 工作树 `codex/rectification-collection-redesign-20260910`,相对 `origin/staging` @ `cb045297`。 | 命令 | 结果 | | --- | --- | | `cmp skills/jyotish-birth-time-rectification/SKILL.md skills/jyotish-birth-time-rectification/versions/10.0.23/SKILL.md` | 相等 | | `computeSkillPackageSha256(versions/10.0.23)` | `91f5839e15514b80fa0370bb8b539686af211082e83bc951dc0e8250cbdbadcb` | | 10.0.22 / 10.0.21 包哈希 | 未改:`e3765b20…` / `3ced1073…` | | `cd frontend && ./node_modules/.bin/tsc --noEmit` | **0 error** | | `cd frontend && npm run lint` | **0 error**,121 warning(既有债务 + 本单未做无关清理) | | 相关 glob(97 个文件,分三批,`--test-force-exit --test-timeout=20000`) | **1163 pass / 0 fail**(417 + 322 + 424)。同类 glob 采集语义单曾记 1156;本单新增 `rectification-collection-question-pool.test.ts`。 | | `.venv/bin/python -m pytest tests/test_candidate_discriminator_contract.py -q` | **8 passed / 0 fail** | | `run_quality_gate.py --profile quick --skip-frontend-runtime` | **Quality gate passed.** pytest **731 passed / 1 skipped / 0 fail**(263s)。 | | `git diff --check` | 干净 | | `cd frontend && npm run build` | **blocked**:Turbopack `Symlink [project]/frontend/node_modules is invalid, it points out of the filesystem root`。未核首页 Static / gzip。 | ## 环境缺口 - 无 Docker:未跑 `npm run test:db`。本单未动表。 - 无登录态、无 Chrome:走查第 19~21 条未做。部署后须先打开绑定 10.0.22 的历史校正(BUG-621)。 - `next build` 在本 worktree 因 `node_modules` 软链被 Turbopack 拒绝;未核首页 Static / gzip。 - 未提升 `main`,未 push。 ## 未做 / 未改 - 未改引擎计分、未改确认门(唯一分钟仍关)。 - 未加数据库迁移。已问键靠 `kind_hint` 进现有 `target_kind`。 - 未改冻结历史包 10.0.21 / 10.0.22 字节。