Files
Jyotisha/docs/tasks/TASK-rectification-yearless-probe-downgrade-20260909.md
T

6.1 KiB
Raw Blame History

TASK · 无年月的性格题降级为平局裁决:带年月题问完且候选仍分不开时才问,分值减半,永不参与淘汰,报告标「参考」;并加一条离线测量(2026-09-09)

  • 基线:origin/staging @ 4eea9c10
  • 分支:codex/rectification-yearless-probe-downgrade-20260909,基于 origin/staging;与 BUG-626~628 无文件重叠(本单不碰 holdoutFollowupFor / 别名归并)
  • 执行方:coding agent;验收:Claude
  • 涉及文件:frontend/src/lib/rectification-agentic/core/types.tsSCORE_DELTASTRONG_CONFLICT_ELIMINATION_COUNT 不改,新增 PROBE_WEIGHT)、core/apply-probe-outcome.tsL70 varga_style 识别、directionFor)、core/build-state.ts(淘汰计数)、v9/method-followup.ts(L1142 的 ×0.8、无年份题在计划里的位置)、v9/decision-from-dossier.tsnakshatraProbeIfFollowupCanAskdiscriminatorProbeIfFollowupCanAsk)、v9/skill-verification-report.ts(技法审计表)、v9/divergence-panel.ts(三列卡不动)、scripts/rectification/varga_style_calibration_report.py(新,离线测量)、skills/jyotish-birth-time-rectification/SKILL.md §5(一句口径)
  • BUG 编号起点:BUG-629docs/BUG_HISTORY.md 当前最大 BUG-628
  • 优先级:P1(产品 2026-09-09 拍板:无年月性格题的分辨力从未验证,不能与带年月题同权,也不能单独淘汰分钟)

1. 现状

题型 来源 现在的地位
婚恋风格(D9 上升星座 → 相处方式三选一) varga_style,需有带年月感情事件锚点(BUG-559),排序分 ×0.8 与带年月题同样 ±2,冲突计入淘汰(3 次淘汰)
做事风格(D10 同上,需事业事件锚点 同上
月宿边界两组性格 nakshatra_boundary 同上(只偏置窗口,但分值机制相同)
其他分盘的无年份对照(D24/D12/D11/D7/D2/D4/D5 yearless_ungrounded_contrast 已丢弃,不问

分盘星座是确定计算;"星座 ↔ 性格"与"用户自评 ↔ 类型"两层从未在任何数据上验证。20 例公开集只测带年月事件的打分。真实用户案例里头两道题就是性格题,参与了把真实分钟排除的过程。

2. 决策记录(产品同意 2026-09-09)

  1. 只做平局裁决。 计划层:varga_stylenakshatra_boundary 题只在「可问的带年月区分题(dasha_boundary / dasha_activation / known_event_quality)为空」「active 候选 ≥ 2 且未分开」时才成为 next_followup;否则记 dropped_probes(reason="yearless_deferred")。锚点要求(BUG-559)保留。
  2. 分值减半,不淘汰。 新增 PROBE_WEIGHT: { dated: 1, yearless: 0.5 }applyProbeOutcomevarga_style / nakshatra_boundary 的 delta 乘 0.5(±1),且不递增 strong_conflict_countSTRONG_CONFLICT_ELIMINATION_COUNT = 3 不变,只有带年月题的 conflict 计数)。rounds.kind 对这类题记 tie_break
  3. 报告与旁白标「参考」。 技法审计表里 D9 / D10 类型对照月宿边界 的 status 写 reference,note"性格自评,只作排序参考,不参与淘汰";点选后旁白维持"已记录,范围…"。Skill §5 加一句:"性格类点选题只在带年月题问完仍分不开时出现,分值减半、不淘汰。"(bump 10.0.21,一句)。
  4. 三列对比卡的性格描述不动:那是"若是这一分钟你会怎样"的展示,不是证据;边界句已在。
  5. 离线测量。 新脚本 scripts/rectification/varga_style_calibration_report.py:输入一份由管理员从数据库导出的匿名 JSON(字段:case_id 哈希、birth_time_source、记录分钟、每道 varga_style / nakshatra 答案的 answer_class 与该题各选项对应星座),只对 birth_time_source = hospital_recorduncertainty ≤ 2 分钟 的 Case,计算"用户所选选项的星座 == 记录分钟的分盘星座"的命中率,按 D9 / D10 / 月宿分组,输出 n 与命中率,不输出任何单人行。导出 SQL 写在 docs/operations/varga-style-calibration-export.md,由产品负责人在有数据库权限的环境跑。命中率 ≈ 1/3(三选一)即随机,届时按产品决定删题。
  6. 不动 SCORE_DELTA 数值、四选项合同(BUG-390)、采用/确认门、MIN_SEPARATION_LEAD_relative_support

3. 任务分解

  • 3.1 决策 1:计划层排序与守卫;用例——存在可问的 2023.05 事业题时 D9 题不出;带年月题问完、剩 2 候选 → D9 题出;剩 1 候选 → 不出且 yearless_deferred 记录。
  • 3.2 决策 2:核心层权重;用例——D9 答 B:命中候选 +1、冲突候选 −1、strong_conflict_count 不变;三道性格题全冲突也不淘汰;带年月题行为与今天逐字节相同(rectification-probe-replay-loss-20260908.test.ts 不改断言)。三栏:原值"±2、计淘汰"→ 新值"±1、不计"→ 决策 2。
  • 3.3 决策 3:报告行 + Skill 10.0.21(快照、registry、skill-registry.test.ts)。
  • 3.4 决策 5:脚本 + 单元测试(合成 JSON:命中率 0.33 与 0.9 两组)+ 导出 SQL 文档。
  • 3.5 记录:BUG-629(关联 BUG-559 锚点、BUG-560 校准、BUG-623 真实用户案例);CHANGELOG.mdPROGRESS-…docs/testing/rectification-scenarios-20260907.md 加"性格题只在带年月题问完后出现;报告里标参考"。

4. 让步顺序

3.2 最先(一处改动即止损);3.1 必做;3.3 必做;3.4 可后置为 P2 但导出 SQL 文档不可省;3.5 不可省。

5. 开工前置命令

git fetch origin --prune
git worktree add -b codex/rectification-yearless-probe-downgrade-20260909 .worktrees/rectification-yearless-probe-downgrade-20260909 origin/staging
cd .worktrees/rectification-yearless-probe-downgrade-20260909
ln -s /workspace/Jyotisha/frontend/node_modules frontend/node_modules
ln -s /workspace/Jyotisha/.venv .venv
cd frontend && ./node_modules/.bin/tsc --noEmit; npm run lint 2>&1 | tail -1
ls tests/rectification-*.test.ts tests/skill-registry.test.ts | grep -v database | xargs npx tsx --test 2>&1 | grep -E "^# (tests|pass|fail)"