Occupation collect was wiping year-month into an unscored note, and idle gap copy never joined the evidence turn. Co-authored-by: Cursor <cursoragent@cursor.com>
48 lines
4.6 KiB
Markdown
48 lines
4.6 KiB
Markdown
# PROGRESS · 职业题答出的年月不得被抹掉(2026-09-11)
|
||
|
||
工作树:`.worktrees/rectification-occupation-dated-answer-20260911`
|
||
分支:`codex/rectification-occupation-dated-answer-20260911`
|
||
任务书:`.worktrees/staging-docs/docs/tasks/TASK-rectification-occupation-dated-answer-20260911.md`(未推)
|
||
基线:`origin/staging` @ `e36bda53`(代码 `dd8f35f7`,Skill 10.0.23,BUG-646~648)
|
||
编号:开工时最大号 **BUG-648**;本单 **BUG-649**,工具轮缺口并入正文为 **BUG-650**。
|
||
|
||
## 已完成
|
||
|
||
- **T1 / BUG-649**:`applyOccupationCollectLedgerNorm` 在职业采集焦点下:无年月仍只写 `occupation_note`;带 `occurredFrom`/`occurredTo` 且精度非 unknown 时另写 `career` 主评分行(模型 career kind 沿用,否则 `career_entry`)。`rectification-v9-tools` batch/propose 按归一结果逐条写入,删除 `?? item.occurredFrom` 回落。覆盖判定仍不读正文、不用关键词、不依赖模型 domain。
|
||
- **T2**:通用职业题仍是「你平时主要做什么工作?」;毕业后第一份工作锚定题 `targetDomain=career`,`isOccupationCollectFocus` 为 false。系统提示已加「职业题不得自行追加年份;要问年份走 career 锚定题」。
|
||
- **T3**:`rectification-replay-20260911.test.ts` 回放脱敏序列。两件学业后无生日「年前后」;四件带月 → holdout 1、训练 3、≥2 类、训练门开、下一问区分选择题且可渲染。无日期职业变体:训练门关、idle 缺口句、本轮正文含缺口、`collect_waiting`。
|
||
- **T3 / BUG-650**:`persistExhaustionGateTurn` 在已有 `turnId` 时不会跑。证据轮把精确缺口接到同一条复述后;交付旁白(无「现在记下的是 / 就能开始筛」)不拼接。
|
||
- **T4**:BUG-649/650、CHANGELOG、本文件、走查第 22 条。Skill 10.0.23 未升。未改 `MIN_ACCEPTANCE_*` / 确认门 / 引擎计分。
|
||
|
||
## 三栏(既有断言)
|
||
|
||
| 位置 | 原值 | 新值 | 原因 |
|
||
| --- | --- | --- | --- |
|
||
| `applyOccupationCollectLedgerNorm` 带年月职业回答 | 一律 `occupation_note` + unknown + 日期 null | note(unknown/null)+ career 主评分行 | 产品收窄 BUG-442 P0 |
|
||
| `occupation_note` 是否计入训练 3 件 | 不计 | 仍不计;计入的是 `career_entry` 等 | BUG-356 / 389 / 442 |
|
||
| batch/propose 日期 | `normalized?.occurredFrom ?? item.occurredFrom` | 归一后的 null 就是 null | 账本 unknown 却带日期 |
|
||
| 通用职业题 | 「你平时主要做什么工作?」 | 仍不问哪年 | T2 |
|
||
| 毕业后第一份工作焦点 | 用户年份锚定 | `domain=career`,不是 `collect:occupation:` | 问年份走锚定 |
|
||
| 证据轮工具出口缺口 | 只在 idle `hostNarration` | 并入本轮 `p_assistant_message` | BUG-650 |
|
||
|
||
## 验收
|
||
|
||
工作树内 `frontend/node_modules` 链到主仓以便跑 tsx。未部署;staging `/api/health` 仍是旧 SHA 时不要用真机当本单已上线。未 commit、未 push。
|
||
|
||
| 命令 | 结果 |
|
||
| --- | --- |
|
||
| `cd frontend && npx tsc --noEmit` | **0 error** |
|
||
| `cd frontend && npm run lint` | **0 error** / 119 warning(既有) |
|
||
| 相关 7 文件 `npx tsx --test --test-force-exit` | **95 pass / 0 fail**(含本单 2 个新文件) |
|
||
| `npm test` 全量 glob | 3119 / pass 3113 / **fail 6**:全是 Docker/Postgres 争用(migration failed、connection terminated、本机 socket 无 postgres),与本单无关。安静后未再全量重跑。 |
|
||
| `.venv/bin/python -m pytest tests/test_candidate_discriminator_contract.py -q` | **8 passed** |
|
||
| `run_quality_gate.py --profile quick` 第一次 | pytest **730 passed / 1 failed**:`test_block_scan_seven_events_finishes_within_fifteen_seconds` 在与全量 npm test 并行时 18.2s > 15s |
|
||
| 同上测单独重跑 | **1 passed**(3.9s) |
|
||
| `run_quality_gate.py --profile quick --skip-frontend-runtime` | **Quality gate passed.** pytest **731 passed / 1 skipped / 0 fail**(451s)。前端 tsc/lint/相关测试/webpack 构建已在门外单独跑。 |
|
||
| `cd frontend && ./node_modules/.bin/next build --webpack` | 退出 0;默认 Turbopack 仍拒 worktree 外 `node_modules` 软链。`/` 为 `○` Static。首页 JS gzip(`index.html` 引用脚本去重后 `gzipSync`)**572018 B / 18 chunks**。相对 `origin/staging` 未改 `page.tsx` / `layout.tsx` / `globals.css`,首屏源码差为 0。 |
|
||
| `git diff --check` | 干净 |
|
||
|
||
新增测试:**+18**(dated-answer 9、replay 7、collection-pool 2);`occupation-coverage-exit` 未改断言。Skill 10.0.23 未改。
|
||
|
||
环境缺口:无登录态,走查第 22 条未做。部署后须先打开绑定 10.0.22 的历史校正(BUG-621),再按本案序列真机走一遍,第四件带月说完必须出选择题。
|