# PROGRESS · 打字经历按选择题规则计分(离线研究)+ 学业质量题措辞(2026-09-29) - 任务书:`docs/tasks/TASK-rectification-typed-event-scoring-research-20260929.md` - 执行:Claude(直接执行模式,fork 子代理),分支 `codex/rectification-typed-event-research-20260929`,基线 `origin/staging` @ `56722063`。未推送。 - 研究报告:`docs/research/rectification_typed_event_scoring_2026_09_29.md` + `.json` ## 开工预检 - `python3 scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45`:exit 0;python_runtime / fragment_scan / external_engine_adapters / focused_tests 全部 ok,remote_visibility `verified`。 - 读 `docs/research/pre_work_error_ledger.md` ERR-110(冻结文件改动须重新冻结)、ERR-111(固定 `PYTHONHASHSEED`)。本机无 `.venv`,全部用系统 `python3`。 ## R0 · 学业质量题措辞(BUG-1088) - `scripts/rectification/event_probes.py`:`_display_date_label` 对 `precision == "year"` 不取月;`_quality_user_meaning` 学业分支按 `event_kind` 称呼(`EDUCATION_QUALITY_EVENT_NAME`:升学 / 学业变动 / 学业中断,兜底「学业经历」),句式「…那次X,结果更接近如愿、将就调剂、发挥失常还是说不清」。四个选项标签未改(仍含「录取」字样,属选项文案,留待产品决定)。 - **计分身份不变**:`_event_month` 未改,`candidate_split_hash`、题目 `month` 字段仍带存储的月份;新增测试锁住这一点。 - 同机 A/B(`scripts/research/quality_wording_ab.py`,`PYTHONHASHSEED=0`,v4 前 4 例 ±10 + 2 个虚构出生带学业质量事件):基线连跑两次逐字节一致;改后对比,**只有 2 个叶子字段类型变化**:`user_meaning`(2 处)与 `display_date_label`(2 处),均在虚构例的 `known_event_quality` 题上;引擎行分数、公开候选决策、全部题目的 id / split hash / outcomes 逐字节相同。 - `2010 年 1 月那次上大学…` → `2010 年那次学业中断…`(年精度 + interruption) - `2011 年 1 月那次上大学…` → `2011 年那次升学…`(年精度 + start) - 重新冻结(ERR-110,不覆盖旧记录): - `scripts/research/sealed_holdout_rerun.py` `FREEZE/REPORT` → `docs/research/sealed_holdout_rerun_quality_wording_2026_09_29.{freeze.json,json}`;重放 20 例,metrics 与 20 条 trials 与 09-21 记录**完全相同**(top1 0.45 / top3 0.50 / MAE 6.45)。 - `scripts/research/reported_offset_sweep.py` `FREEZE/REPORT` → `docs/research/reported_offset_quality_wording_2026_09_29.{freeze.json,json}`;900 trials 与 summary 与 09-21 **完全相同**。 - `references/rectification_sealed_holdout.v1.json`:`current_tree_scorer`、`current_tree_fixed_protocol_rerun`、`current_tree_reported_offset_replay` 指向新记录;旧的 09-21 记录移入 `previous_fixed_protocol_rerun` / `previous_reported_offset_replay`;`evaluated_on` 2026-09-29。遗留 12 文件哈希 `c913c6f0…` 不变,只有扩展身份(event_probes.py 与两份研究脚本)变化。 - `tests/test_sealed_holdout_contract_freshness.py` 的 `IDENTITY_FORBIDDEN_PREFIXES` 补两条新前缀(同 09-21 先例)。 - 新测试:`tests/test_rectification_event_probes.py::QualityWordingTests`(4 条:三种类型不叫上大学、年精度无月、月精度保留月、split 月份不变)。 ## R1–R3 · 离线研究(BUG-1089) 脚本 `scripts/research/typed_event_as_probe.py`,`PYTHONHASHSEED=0` 连跑两次 JSON 逐字节一致(各 1 分 25 秒)。结论全部 `no_benefit`,**不建议立实现单**。数字见研究报告;要点: | 项 | raw 口径(±10 / ±30 / ±60) | 判定 | | --- | --- | --- | | B0 头名 / 宽度 | 0.75 / 0.50 / 0.35;15 / 33 / 56 | 基线 | | R1d 头名 / 宽度 | 0.70 / 0.45 / 0.30;15 / 33 / 56 | no_benefit | | R1y 头名 / 宽度 | 0.60 / 0.45 / 0.30;14 / 33 / 56 | no_benefit | | R3 头名 / 宽度 | 0.60 / 0.65 / 0.45;14 / 33 / 55 | no_benefit(±10 头名降) | | 能分边的日精度训练经历 | 4 / 9 / 14(共 57 件) | — | | R2 挤出真值(k=1 / k=2) | 0–1.5% / 2.1–2.9% | — | percent 口径结论相同(判定全部 `no_benefit`)。 ## 测试 - 定向:`tests/test_rectification_validation_integrity_gate.py`、`tests/test_sealed_holdout_contract_freshness.py`、`tests/test_reported_offset_research.py`、`tests/test_rectification_event_probes.py`:83 passed(改前重新冻结前为 7 失败,全部是冻结身份不匹配)。 - 快速门 `python3 scripts/run_quality_gate.py --profile quick`(系统 python3,本机无 `.venv`):JSON / 审计 / 碎片 / BPHS 各步通过;pytest **1001 passed, 1 skipped**(含上面四个文件)。随后 `npm test` 步骤 exit 127:本工作树没有 `frontend/node_modules`,npm 找不到测试依赖。**前端三步(npm test / lint / build)未跑,记为环境缺口,不算通过。** 本轮没有改任何前端文件。 - 隐私:`tests/test_repo_privacy_markers.py` 通过。 ## 偏离 - 基线回放头名与 09-26 研究差 0.05(宽度一致),原因见研究报告「偏离与说明」;方案之间可比,不与 09-26 逐格对照。 - v4 无月精度事件,日精度按所在月判定。 - 未改质量题四个选项标签;前端 `collection-question-pool.ts` 也有「上大学」措辞(采集题示例),不在本单范围,未改。 ## 2026-09-29 Claude 验收补改 - 前端 `frontend/tests/rectification-confirmation-gate.test.ts` 仍读旧冻结重跑报告 `sealed_holdout_rerun_midnight_anchor_2026_09_21.json`(执行方工作树没装前端依赖,快速门前端步骤未跑,没发现)。按 09-21 先例改为新报告路径,两处断言写「原值 / 新值 / 原因」;该文件 7/7 通过。