Files
Jyotisha/docs/tasks/PROGRESS-rectification-occupation-dated-answer-20260911.md
T
Jesse_ChenandCursor 1fa994ea63
Independent Staging Quality Gate / validate (push) Successful in 13m26s
Independent Staging Quality Gate / publish (push) Successful in 9m33s
fix(rectification): keep dated occupation answers scoreable (BUG-649/650)
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>
2026-09-11 11:49:52 +08:00

48 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.23BUG-646648
编号:开工时最大号 **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 | noteunknown/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),再按本案序列真机走一遍,第四件带月说完必须出选择题。