# PROGRESS · 同域同年点选题去重(2026-09-08) 工作树:`.worktrees/rectification-same-year-probe-dedupe-20260908` 分支:`codex/rectification-same-year-probe-dedupe-20260908` 任务书:`docs/tasks/TASK-rectification-same-year-probe-dedupe-20260908.md` 基线:`origin/staging` @ `f17af254`(含 BUG-592 修复单 `f3a1a583`;代码基线仍是 `7ca6ade2`) 本单状态:**待验收**。 未改:引擎 `asked_probe_keys`、`SCORE_DELTA`、四选项合同、采用门、确认门、Skill 版本(仍 10.0.15)。相邻年仍只降权。 ## 做了什么 - **决策 1** `sameYearProbeAsked`:同 `domain` 且同 `year`(`SEMANTIC_YEAR_KEY` 解析)硬排除。`inspectDiscriminatorProbes` 与 `rankRenderableDiscriminators`(event / contrast)都 `dropped_probes(reason="same_year_asked")`。`year=0` 分盘风格题不受影响。 - **决策 2** 相邻年(±1)仍走 `existenceProbeAsked` → `rankDiscriminatorScore` 降权,不硬排除。`remainingReverseVerifyProbes` 继续按邻近年排除(采用后核对,不动)。 - **决策 3** `remainingConflictProbes` 改用 `sameYearProbeAsked`,让邻近年事件探针还能进排序降权,而不是在进目录前被整年砍掉。 - **决策 4** 记录 BUG-592(复发自 BUG-559)、CHANGELOG、手测脚本第 9 条。 ## 三栏(被触碰断言) | 用例 | 原值 | 新值 | 理由 | | --- | --- | --- | --- | | 答完 `career.2023.05.*` 后选 `career.2023.dasha_activation` | 会问(inspect 无年份规则;followup 只降权) | 不问,`dropped_probes.reason = same_year_asked` | 决策 1 | | 同列表 `career.2024.04.*` | 可问 | 仍可问 | 决策 2 | | 事故五题回放第五题 | `career.2023.dasha_activation` | D10 风格题或交付 | 决策 1 | | 核心 `isDuplicateProbe` | 不同 key 不算重复 | 仍不算;inspect 负责硬排除 | 旧防线缺口 | ## 测试 - `frontend` `./node_modules/.bin/tsc --noEmit`:exit 0 - 任务书指定 TS 切片(`tests/rectification-*.test.ts` + `agent-voice-copy-contract.test.ts`,排除 database):**1012 passed / 0 failed** - `.venv/bin/python -m pytest tests/test_rectification_event_probes.py -q`:34 passed - `npm run lint`:本机对改动文件 ReadLints 0 error;全量 `npm run lint` 未在本轮沙盒跑完 - 浏览器真人走查:本轮未跑,见 `docs/testing/rectification-scenarios-20260907.md` §9 - 工作期间 `origin/staging` 又合入 `06e44104`(BUG-593)。本分支仍基于 `f17af254`,未自动 merge(工作区有未提交文档与代码,且与 BUG-593 改了同一批 changelog / BUG_HISTORY / 手测脚本) ## 偏离 1. 任务书开工基线写 `7ca6ade2`。本 worktree 跟 `origin/staging` 尖端 `f17af254`(多了 BUG-593 修复单文档,无代码差)。 2. `sameYearProbeAsked` 放在 `probe-question-contract.ts`,避免 `candidate-contrast-packet` ↔ `method-followup` 循环依赖。 3. `remainingConflictProbes` 从邻近年硬排除改为仅同年硬排除,否则 event 探针路径仍会把有信息量的 2024 题提前砍掉。