research(rectification): v5 verdict for scoring-method research — LR weights, absence and precision follow-up all fail hard line 1 (BUG-1091 closed_by_design)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
a29fbe0333
commit
fa2e7d17f5
+7
-6
@@ -14705,18 +14705,19 @@
|
||||
|
||||
## BUG-1091 | 生时校正打分只奖不罚、权重未校准、高分辨率信号未计分
|
||||
|
||||
- 状态:investigating(2026-09-29 研究单 `TASK-rectification-scoring-research-20260929` 脚手架已落地;判定按任务书须在 v5(≥60 例)上做,v4 上只跑通流水线、所有判定字段写 `pending_v5`)
|
||||
- 首次发现 / 最近更新:2026-09-29 / 2026-09-29
|
||||
- 状态:closed_by_design(2026-09-30 在 v5 77 例上判定:R-A 似然比校准权重与 R-B 缺席证据在三档半径 × truth/opposite 六格全部未过硬红线 1,打分层不立实现单;R-C 精度追问与同子集基线比无一致收益,同样不立实现单)
|
||||
- 首次发现 / 最近更新:2026-09-29 / 2026-09-30
|
||||
- 影响面:`scripts/active_rectification_event_engine.py::_score_event`(11 条加分规则,权重手拍)、`OBSERVATION_ONLY_LAYERS`(KP 宫头子主每分钟在算但不计分)、`_fine_minute_indices`(Pranapada / Hora / Ghati / Bhava lagna 已算未计分)、计分分盘无 D60。
|
||||
- 用户现象:开场说 12 件带年份经历、答约 10 张卡后范围整窗不动;引擎原始分头名簇命中在 v4 上只有 0.35 / 0.15 / 0.10(±10 / ±30 / ±60),约为随机水平的 4–5 倍。
|
||||
- 触发条件:任何一次校正。打分对候选「能解释事件」加分,对「预测了没发生的事」不扣分;一条规则对真分钟和错分钟同样常命中时照样 +2。
|
||||
- 根因(已确认):(1) 只奖不罚——负证据只来自选择题答「没有」(`core/build-state.ts::applyProbeOutcome`,±2);(2) 权重是人拍的,R1–R5 / V1 / V2 / V1n 都是「再拍一个权重看结果」,没有按数据校准;(3) KP / Pranapada / D60 这些分钟级信号没进计分,09-14 KP@默认权重更差是「权重没校准」的另一个症状。
|
||||
- 修复:未修。本轮只做离线脚手架:`scripts/research/scoring_research_lib.py`(特征记录 provider 与线上 `score_candidates` 逐分对账、似然比权重、leave-one-case-out、加权 provider、缺席 / 精度追问辅助)、`scripts/research/scoring_research.py`(R-A / R-B / R-C 流水线)、`tests/test_scoring_research.py`。生产代码与冻结文件零改动。
|
||||
- 验证:`tests/test_scoring_research.py`(含 v4 公开案例对账 0 差);v4 全集流水线跑通、`PYTHONHASHSEED=0` 两次复跑 JSON 逐字节一致(见 `docs/tasks/PROGRESS-rectification-scoring-research-20260929.md`)。
|
||||
- 防复发:任何计分改动必须先在 v5 上过任务书硬红线(六格真值在区间不降、留一法数字、稳健性三项),再按 ERR-110 重冻结;不得在 v4 上下结论(BUG-1090)。
|
||||
- 修复:不修(研究不过门)。离线脚手架与判定:`scripts/research/scoring_research_lib.py`(特征记录 provider 与线上 `score_candidates` 逐分对账、似然比权重、leave-one-case-out、加权 provider、缺席 / 精度追问辅助)、`scripts/research/scoring_research.py`(R-A / R-B / R-C 流水线)、`tests/test_scoring_research.py`。生产代码与冻结文件零改动。
|
||||
- 验证:`tests/test_scoring_research.py`(含 v4 公开案例对账 0 差);v4 与 v5 全集两次复跑 JSON 逐字节一致(`PYTHONHASHSEED=0`);v5 对账 231/231 case-radius 差 0。
|
||||
- 判定数字(v5,`raw` 口径,留一法按案例;基线真值在区间 / 头名 = 76 / 0.675、76 / 0.494、75 / 0.325):R-A A1 76 / 0.571、77 / 0.455、72 / 0.247;A2 75 / 0.545、76 / 0.416、72 / 0.247;A3 77 / 0.597、77 / 0.468、75 / 0.221——头名三档全降,六格不过。42 个特征里 36 / 38 / 39 个 bootstrap 区间跨 0,剩余 |log LR| ≤ 0.15,v4 与 v5 都稳定同号的特征 0 个。R-B @0.5 / 1.0 / 2.0 分:真值在区间 77 / 73 / 55、75 / 71 / 33、75 / 70 / 19,头名全降,六格不过。按方案矩阵重出六题与共用题目逐格相同(出题器不读矩阵分数)。全文 `docs/research/rectification_scoring_research_2026_09_29.md`。
|
||||
- 防复发:定论页 §9 记录「线上规则 + KP / Pranapada / D60 对分钟几乎无区分力、缺席年扣分伤真值」;再有人想从加权重 / 换尺度 / 缺席证据入手,先读 §9 与本条数字。任何计分改动仍须先在 v5 上过任务书硬红线,再按 ERR-110 重冻结。
|
||||
- 相关记录:BUG-560、BUG-1048、BUG-1089、BUG-1090
|
||||
- 复发自:无
|
||||
- 修复版本:未修(研究分支 `codex/rectification-scoring-research-20260929`)
|
||||
- 修复版本:未修(研究分支 `codex/rectification-scoring-research-20260929`;脚手架已合入 staging `84aaeadf`)
|
||||
|
||||
## BUG-1092 | 报告技术页标题出现「字段」,行星主星表头是看不懂的 RL / NL / SL / SS / SB
|
||||
|
||||
|
||||
@@ -105,3 +105,4 @@
|
||||
|
||||
- §1.3「加权重类改法全部不过门」说的是**人拍权重**。2026-09-29 研究单换了路线:每条规则的权重由数据估(似然比,leave-one-case-out),允许负权重(只奖不罚是结构性问题),KP / Pranapada / D60 作为特征进入由数据定权重;另测「缺席证据」与「对已说事件追问月份」。
|
||||
- 脚手架与 v4 流水线见 `docs/research/rectification_scoring_research_2026_09_29.md`;**判定必须在 v5(≥60 例)上做**,v4 上的数字只是调试参考(BUG-1090 / BUG-1091)。本页 §1–§7 的结论不因此改变。
|
||||
- **2026-09-30 v5 判定(77 例,留一法按案例,`raw` 口径):全部不过门。** R-A 三个方案(只奖 / 加 KP·Pranapada·D60 / 允许负权重)在 ±10 / ±30 / ±60 × truth/opposite 六格头名全降(±10 0.68 → 0.57–0.60,±60 0.32 → 0.22–0.25);42 个特征里 36–39 个的 bootstrap 区间跨 0,其余 |log LR| ≤ 0.15,**v4 与 v5 同时稳定同号的特征为 0**。R-B 缺席年扣分按卡片强度把真值在区间从 76 / 76 / 75 压到 55 / 33 / 19,低强度不挤真值但头名全降。结论:**线上 11 条规则连同分钟级观察,对"哪一分钟"几乎没有信息;可校准的权重不存在。** §1.3 的结论由此从"人拍权重不过门"升级为"数据驱动权重也没有东西可校准"。BUG-560 维持 blocked,BUG-1091 closed_by_design。R-C(对已说的经历追问月份)与同子集基线比也没有一致收益(`rectification_scoring_research_2026_09_29.md` §4)。三条路都关闭。
|
||||
|
||||
@@ -1,139 +1,167 @@
|
||||
# 生时校正打分方法研究:似然比权重 / 缺席证据 / 精度追问(脚手架阶段,2026-09-29)
|
||||
# 生时校正打分方法研究:似然比权重 / 缺席证据 / 精度追问(2026-09-29,v5 判定 2026-09-30)
|
||||
|
||||
- 任务书:`docs/tasks/TASK-rectification-scoring-research-20260929.md`;进度:`docs/tasks/PROGRESS-rectification-scoring-research-20260929.md`
|
||||
- 分支:`codex/rectification-scoring-research-20260929`,基线 `origin/staging` @ `6e393780`(开工时 head;任务书写作时为 `5febb111`,其间只有文档提交)。
|
||||
- 分支:`codex/rectification-scoring-research-20260929`。脚手架阶段基线 `origin/staging` @ `6e393780`(已合入 staging,`84aaeadf`);判定阶段基线 `origin/staging` @ `0120765f`(v5 已合入)。
|
||||
- 性质:**离线测量,不改线上代码、打分、阈值、出题闸门、Skill、冻结文件。** 研究计分器是 `precision_gate_lib.score_event_with_policy`(09-14 / 09-26 已证与线上逐分相同)加上不计分的"额外观察",通过 `build_event_contribution_matrix(row_provider=…)` 走线上同一条矩阵 / 出题 / 六题回放链。
|
||||
- 数据:`references/real_case_calibration/minute_rectification_holdout_v4.json`,20 例公开 Rodden-AA。**这是开放集回放,不是盲测;本页所有数字都是 v4 调试参考,任务书规定判定只能在 v5(≥60 例)上做,所以每一项的判定栏都是 `pending_v5`。**
|
||||
- 口径:ayanamsa `raman`,node mode `mean`,步长 2 分钟,半径 ±10 / ±30 / ±60;六题回放(`ASK_COUNT = 6`,按真值作答,题目由线上 G0 出题器按**线上矩阵**出一次、各方案共用);交付区间 = 未淘汰且落后头名不足 8 分的簇并集。两种先验都报:`raw`(引擎行原始分,09-14 / 09-26 口径)与 `percent`(线上 `relative_support` 百分比口径;似然比方案用带温度的 softmax 后验,见 R-A)。
|
||||
- 复跑:`PYTHONHASHSEED=0 python3 scripts/research/scoring_research.py --cache-dir <临时目录>`(约 14 分钟)→ `docs/research/scoring_research_{lr,absence,precision_followup}_2026_09_29.json`。同机两次运行 JSON 逐字节一致(见进度记录)。
|
||||
- 判门:`precision_gate_lib.gate_verdict`(头名不降**且**宽度下降、覆盖不降);JSON 里以 `debug_verdict_v4` 记录,`verdict` 字段一律 `pending_v5`。
|
||||
- 数据:判定用 `references/real_case_calibration/minute_rectification_holdout_v5.json`(77 例公开 Rodden-AA,964 件事件:day 244 / month 143 / year 577;v4 的 20 例原样继承)。v4(20 例)只用于脚手架调试,数字保留在 §6。**开放集回放,不是盲测;数字不是准确率。** v5 已知风险例(两例 LMT 时代记录先验即排除真值、一例 ±60 六题后挤出)按原样计入,未剔除。
|
||||
- 口径:ayanamsa `raman`,node mode `mean`,步长 2 分钟,半径 ±10 / ±30 / ±60;六题回放(`ASK_COUNT = 6`,按真值作答);交付区间 = 未淘汰且落后头名不足 8 分的簇并集(`unionStillValidRange`)。两种先验都报:`raw`(引擎行原始分,09-14 / 09-26 / 09-29 口径)与 `percent`(线上 `relative_support` 百分比口径)。**主判口径 = `raw`**(理由见 §2.1)。
|
||||
- 复跑:`PYTHONHASHSEED=0 python3 scripts/research/scoring_research.py --holdout references/real_case_calibration/minute_rectification_holdout_v5.json --dataset-label v5 --cache-dir <临时目录> --probes-per-variant --out-suffix v5_2026_09_29`(约 48 分钟,静态 context 走磁盘缓存;一次只驻留一个半径)→ `docs/research/scoring_research_{lr,absence,precision_followup}_v5_2026_09_29.json`。同机两次运行三份 JSON `cmp` 逐字节一致(见进度记录)。
|
||||
- 判门:`precision_gate_lib.gate_verdict`(头名不降**且**宽度下降、覆盖不降)+ 任务书硬红线 1(每格真值在区间的例数不低于基线、头名不降)。
|
||||
|
||||
## 结论
|
||||
## 1. 结论
|
||||
|
||||
| 项 | 一句话结论(v4 调试参考) | 判定 |
|
||||
| 项 | 一句话结论(v5,77 例,留一法按案例) | 是否立实现单 |
|
||||
| --- | --- | --- |
|
||||
| R-0 脚手架 | 研究计分器与线上 `score_candidates` 在 20 例 × 3 档 = 60 个 case-radius 上**逐分对账 0 差**(分数与规则 id 都相同);每个 (候选, 事件, 采样日期) 记录 42 个特征(线上规则 25 个 + 额外观察 17 个) | 完成 |
|
||||
| R-A 似然比权重 | 流水线跑通。v4 上:留一法 `raw` 口径头名 / 覆盖与基线持平或略动(±30 A3 头名 0.55 → 0.65、宽度 33 → 31),引擎自身头名(答题前)±10 0.30 → 0.40–0.45;`percent` 口径的 softmax 后验即使按训练集拟合温度仍过度自信,把真值挤出区间(±10 squeezed 3–5 例)。20 例上 42 个特征里 31–38 个的置信区间跨 0 | `pending_v5` |
|
||||
| R-B 缺席证据 | 流水线跑通。v4 上按卡片同等强度(2 分)扣分会大量挤出真值(±60 覆盖 1.00 → 0.40)——**v4 的事件表是传记摘录,不是完整时间线,空白年不等于没发生**;真人口述同样不完整。0.5 分档不挤真值但头名下降 | `pending_v5`(v4 信号明确为负,v5 上若不翻转即关闭) |
|
||||
| R-C 精度追问 | 流水线跑通。把日精度经历降成"只记得年"后,**每例平均只有 0.2 / 0.45 / 0.7 件经历在知道月份后能把候选分到两边**(±10 只有 2/20 例有);对这些例子把那一件恢复到月精度重算先验(`C1_prior`)在 ±30 上 7 例头名 0.71 vs 该 7 例的 C0,其余档位样本太少 | `pending_v5` |
|
||||
| R-0 脚手架 | 研究计分器与线上 `score_candidates` 在 77 例 × 3 档 = 231 个 case-radius 上逐分对账 0 差;42 个特征(线上规则 25 + 额外观察 17) | 完成 |
|
||||
| R-A 似然比校准权重 | **不过门,三个方案六格全部未过硬红线 1。** `raw` 口径头名 ±10 0.68 → 0.57 / 0.55 / 0.60,±30 0.49 → 0.45 / 0.42 / 0.47,±60 0.32 → 0.25 / 0.25 / 0.22;真值在区间 A3 三档 77 / 77 / 75(基线 76 / 76 / 75)但头名全降,A1 / A2 在 ±60 各丢 3 例。**42 个特征里 36 / 38 / 39 个的置信区间跨 0,剩下的 \|log LR\| ≤ 0.15;v4 与 v5 都不跨 0 且同号的特征:0 个。** 数据说这些规则对"哪一分钟"几乎没有信息 | **不立**(BUG-1091 `closed_by_design`) |
|
||||
| R-B 缺席证据 | **不过门,六格全部未过。** 按卡片强度(2 分)扣把真值在区间压到 55 / 33 / 19(基线 76 / 76 / 75);0.5 / 1.0 分不挤(77 / 75 / 75,73 / 71 / 70)但头名一律降、宽度不降。v5 每例平均 49 个缺席年——公开传记的空白年不是"没发生",真人口述同样不完整 | **不立** |
|
||||
| R-C 精度追问 | **不过门。** 可追问的经历每例平均只有 0.44 / 0.71 / 1.09 件(有得问的例子 20 / 34 / 45);对这些例子与同子集口述基线比,恢复到月精度重算先验只在 ±30 持平(头名 0.47 = 0.47、宽度 36 vs 37),±10 / ±60 头名降(0.70 vs 0.75、0.36 vs 0.42);当作答"是"的卡三档头名都降。v4 上的正向信号在 77 例上消失 | **不立** |
|
||||
|
||||
## R-0 · 脚手架与对账
|
||||
## 2. R-A · 似然比校准权重
|
||||
|
||||
- `scripts/research/scoring_research_lib.py`
|
||||
- `make_recording_provider`:对每个 legacy 单事件请求,用 `score_event_with_policy`(V0 基线)+ 线上的过运 / Ashtakavarga / Shadbala 辅助(取 context 里线上算好的结果)产出**与线上完全相同**的 evidence,同时把该候选在该事件下的额外观察写进 `FeatureStore`:
|
||||
- 线上规则(记为特征):`vim_{md,ad,pd}_domain_{house,lord,varga}`、`{label}_functional_{benefic,malefic}_auxiliary`、`narayana_{md,ad}_domain_house`、`{label}_arudha_auxiliary`、`controlled_transit_{jupiter,saturn}_domain_house`、`ashtakavarga_target_house_{support,pressure}_auxiliary`、`shadbala_sthana_drik_naisargika_{support,pressure}_auxiliary`。`event_kind:*`、`no_domain_activation`、`*_auxiliary_not_primary` 不作特征。
|
||||
- 额外观察(线上算了没计分):`kp_target_cusp_{sublord,starlord}_is_vim_{md,ad,pd}`、`kp_asc_sublord_is_vim_{md,ad,pd}`(`feature.kp_cusps.houses`,Placidus + Krishnamurti)、`vim_{md,ad,pd}_domain_varga_d60`(D60 现算)、`{pranapada,hora_lagna,ghati_lagna,bhava_lagna}_in_target_house`(`_fine_minute_indices`)。
|
||||
- `reconcile_rows`:逐分比较分数与规则 id。**60/60 case-radius 差异 0。**
|
||||
- `event_feature_matrix`:特征值 = 该规则在该事件采样日期上命中的比例(年精度 12 个采样日、月 3 个、日 1 个),与线上按采样日平均分数同口径。
|
||||
- 真值标签:候选属于真值所在的**签名簇**(`raw_signature_clusters`)。
|
||||
- 测试:`tests/test_scoring_research.py`(10 条:LR 估计、留一法不泄漏、特征矩阵、规则过滤、加权 provider、缩放答案、缺席年、精度升降、百分比、以及 v4 公开案例 ±10 对账 0 差)。
|
||||
### 2.1 后验标定(缺口 2)与主判口径的选择
|
||||
|
||||
## R-A · 似然比校准权重
|
||||
线上先验是 `relative_support` 的比例百分比;似然比方案的自然后验是 softmax(Σ log LR)。脚手架阶段(v4)发现 softmax 后验**过度自信**:即使按训练折拟合单温度(Platt,网格 0.25–256,最大化训练例真值簇的对数后验),仍有 15–25% 的例子被挤出区间。本轮的处理:
|
||||
|
||||
**方法。** 对每个特征 f,`log LR_present = log P(f | 真值簇) − log P(f | 非真值簇)`,拉普拉斯平滑 α = 1(`(Σx + 1) / (N + 2)`);`log LR_absent` 为朴素贝叶斯互补项。每档半径单独估。
|
||||
1. **主判口径用 `raw`**:研究分乘一个只从训练折估的 `scale`(研究分例内极差中位 → 线上极差中位),直接进 `unionStillValidRange`。理由:(a) 这是 09-14 / 09-26 / 09-29 三轮研究和定论页的口径,与既有数字可比;(b) ±2 / 8 分线的意义不变,判的是"先验换了之后六题还能不能把真值留在区间里",不掺入后验标定这一层的好坏;(c) 不给"挑口径"留空间——口径在看到 v5 数字之前就写进了脚手架文档。
|
||||
2. **`percent` 口径照常报**(拟合温度的 softmax),用来回答"后验能不能标定"。v5 上拟合出的温度大得多(A1 16、A2 8–16、A3 4–16;v4 是 0.5–4),校准曲线在 ±30 / ±60 上几乎全部落在 [0,0.1) 桶(预测 0.03–0.06、实际 0.03–0.06),也就是说**标定之后后验接近均匀分布**——过自信解决了,代价是先验几乎不携带信息。这与 `raw` 口径的结论一致,不是口径差异。
|
||||
3. 两个口径下六格硬红线 1 都没过,所以口径选择不影响判定方向。
|
||||
|
||||
| 方案 | 特征 | 权重规则 |
|
||||
| --- | --- | --- |
|
||||
| A1 | 只用线上 25 条规则 | 只奖不罚:`max(log LR_present, 0)`,不用 absent 项 |
|
||||
| A2 | 加 17 个额外观察 | 同上 |
|
||||
| A3 | 同 A2 | 朴素贝叶斯:present + absent 两项都用,允许负权重 |
|
||||
### 2.2 六格硬红线 1(真值在区间例数 ≥ 基线且头名不降;`raw` 口径,留一法)
|
||||
|
||||
候选分 = Σ 事件 Σ 特征(x·w_present + (1−x)·w_absent),经线上矩阵的事件类型系数、精度权重、采样日平均与大运边界邻近项(后者按线上原样附加,不重加权)。两个只从**训练折**估的标定量:`scale`(研究分的例内极差中位 → 线上极差中位,让 `raw` 回放的 ±2 / 8 分线意义不变)、`temperature`(Platt 单温度,最大化训练例真值簇的对数后验;网格 0.25–256),`percent` 先验 = softmax(分 / T) × 100。**留一法按案例留**(`loo_folds`),全集拟合另报只作参照。
|
||||
D1(09-29 止血单,已上线)之后训练门开后不再注入口述 / 引导经历,truth 与 opposite 两个方向的格子是同一次回放;下表每行即一档的两格。
|
||||
|
||||
### 六题回放(留一法;括号内为全集拟合)
|
||||
| 半径 | 基线 真值在区间 / 头名 | A1 | A2 | A3 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| ±10(truth = opposite) | 76 / 0.675 | 76 / 0.571 **不过** | 75 / 0.545 **不过** | 77 / 0.597 **不过**(头名降) |
|
||||
| ±30(truth = opposite) | 76 / 0.494 | 77 / 0.455 **不过** | 76 / 0.416 **不过** | 77 / 0.468 **不过** |
|
||||
| ±60(truth = opposite) | 75 / 0.325 | 72 / 0.247 **不过** | 72 / 0.247 **不过** | 75 / 0.221 **不过** |
|
||||
|
||||
`raw` 口径:
|
||||
`percent` 口径:A1 76 / 77 / 77,A2 71 / 76 / 77,A3 66 / 75 / 76(基线 77 / 77 / 77);头名全部低于基线 0.79 / 0.81 / 0.77。六格同样全部不过。
|
||||
|
||||
| 半径 | 方案 | 头名命中 | 真值在区间 | 宽度中位 | 引擎头名(答题前) | 挤出真值 | debug 判定 |
|
||||
### 2.3 六题回放全表(留一法;括号内为全集拟合)
|
||||
|
||||
| 半径 | 方案 | 头名命中 | 真值在区间 | 宽度中位 | 引擎头名(答题前) | 挤出 | gate_verdict |
|
||||
| --- | --- | ---: | ---: | ---: | ---: | ---: | --- |
|
||||
| ±10 | 基线 | 0.80 | 1.00 | 15 | 0.30 | 0 | — |
|
||||
| ±10 | A1 | 0.70 (0.75) | 1.00 | 14 | 0.45 | 0 | no_benefit |
|
||||
| ±10 | A2 | 0.75 (0.80) | 1.00 | 15 | 0.40 (0.50) | 0 | no_benefit |
|
||||
| ±10 | A3 | 0.80 (0.85) | 1.00 | 15 | 0.40 (0.50) | 0 | no_benefit |
|
||||
| ±30 | 基线 | 0.55 | 1.00 | 33 | 0.20 | 0 | — |
|
||||
| ±30 | A1 | 0.55 (0.70) | 1.00 | 32 | 0.25 | 0 | benefit(宽度 −1) |
|
||||
| ±30 | A2 | 0.60 (0.65) | 1.00 | 34 | 0.10 (0.30) | 0 | no_benefit |
|
||||
| ±30 | A3 | 0.65 (0.75) | 1.00 | 31 | 0.20 (0.45) | 0 | benefit(宽度 −2) |
|
||||
| ±60 | 基线 | 0.40 | 1.00 | 56 | 0.05 | 0 | — |
|
||||
| ±60 | A1 | 0.45 (0.50) | 1.00 | 61 | 0.15 (0.20) | 0 | no_benefit |
|
||||
| ±60 | A2 | 0.55 (0.60) | 1.00 | 61 | 0.00 (0.10) | 0 | no_benefit |
|
||||
| ±60 | A3 | 0.50 (0.70) | **0.95** | 61 | 0.05 (0.30) | 1 | no_benefit |
|
||||
| ±10 | 基线 | 0.675 | 0.987 | 15 | 0.169 | 1 | — |
|
||||
| ±10 | A1 | 0.571 (0.571) | 0.987 | 13 | 0.195 (0.182) | 1 | no_benefit |
|
||||
| ±10 | A2 | 0.545 (0.545) | 0.974 | 15 | 0.156 (0.169) | 2 | no_benefit |
|
||||
| ±10 | A3 | 0.597 (0.649) | 1.000 | 15 | 0.117 (0.182) | 0 | no_benefit |
|
||||
| ±30 | 基线 | 0.494 | 0.987 | 35 | 0.091 | 1 | — |
|
||||
| ±30 | A1 | 0.455 (0.532) | 1.000 | 35 | 0.052 (0.091) | 0 | no_benefit |
|
||||
| ±30 | A2 | 0.416 (0.494) | 0.987 | 35 | 0.065 (0.078) | 1 | no_benefit |
|
||||
| ±30 | A3 | 0.468 (0.494) | 1.000 | 35 | 0.078 (0.091) | 0 | no_benefit |
|
||||
| ±60 | 基线 | 0.325 | 0.974 | 63 | 0.052 | 2 | — |
|
||||
| ±60 | A1 | 0.247 (0.325) | 0.935 | 61 | 0.013 (0.078) | 5 | no_benefit |
|
||||
| ±60 | A2 | 0.247 (0.325) | 0.935 | 67 | 0.013 (0.026) | 5 | no_benefit |
|
||||
| ±60 | A3 | 0.221 (0.299) | 0.974 | 73 | 0.026 (0.052) | 2 | no_benefit |
|
||||
|
||||
`percent` 口径(基线 = 线上比例百分比;A* = 拟合温度的 softmax 后验):
|
||||
基线与扩集单发布的 v5 成绩单逐格一致(头名 0.68 / 0.49 / 0.32,真值在区间 76 / 76 / 75,宽度 15 / 35 / 63)。
|
||||
|
||||
| 半径 | 方案 | 头名命中 | 真值在区间 | 宽度中位 | 挤出真值 | 温度(各折) |
|
||||
| --- | --- | ---: | ---: | ---: | ---: | --- |
|
||||
| ±10 | 基线 | 0.90 | 1.00 | 11 | 0 | — |
|
||||
| ±10 | A1 / A2 / A3 | 0.60 / 0.50 / 0.55 | 0.80 / 0.85 / 0.75 | 7 / 7 / 5 | 4 / 3 / 5 | 1–2 / 1 / 0.5–1 |
|
||||
| ±30 | 基线 | 0.85 | 1.00 | 33 | 0 | — |
|
||||
| ±30 | A1 / A2 / A3 | 0.65 / 0.55 / 0.55 | 0.95 / 0.80 / 0.90 | 31 / 10 / 13 | 1 / 4 / 2 | 2–4 / 1–2 / 1–2 |
|
||||
| ±60 | 基线 | 0.80 | 1.00 | 53 | 0 | — |
|
||||
| ±60 | A1 / A2 / A3 | 0.65 / 0.50 / 0.40 | 1.00 / 0.80 / 0.80 | 57 / 32 / 38 | 0 / 4 / 4 | 4–8 / 2–4 / 2 |
|
||||
- **缺口 3(按方案矩阵重出六题)已做**:`--probes-per-variant` 对每个留一法方案用它自己的矩阵重新出题再回放。结果与共用题目**逐格相同**(每档每方案头名 / 覆盖 / 宽度完全一致,每例题数 4.9 / 7.1 / 7.3)。原因:`discriminating_event_probes` 按代表候选与静态 context 判定分边,不读矩阵分数,所以先验换了题不换。这条缺口对判定方向无影响,可以关闭。
|
||||
- 稳健性(留一法,`raw`):±7 天抖动真值在区间 A1 / A2 / A3 ±10 0.99 / 0.97 / 1.00,±30 1.00 / 0.99 / 1.00,±60 0.94 / 0.94 / 0.97;±1–3 月平移 0.99 / 0.99 / 1.00,0.99 / 0.99 / 1.00,0.94 / 0.95 / 1.00;答错 1 题 0.99 / 0.99 / 1.00,0.97 / 0.97 / 0.99,0.90 / 0.93 / 0.96;答错 2 题 0.94 / 0.95 / 0.98,0.91 / 0.89 / 0.94,0.82 / 0.87 / 0.86。与 09-26 基线(答错 2 题 ±60 0.90)同量级或更差,没有一项能补回头名的损失。
|
||||
|
||||
**读法(v4,仅供 v5 前设计参考,不是结论)。**
|
||||
### 2.4 特征表:v4 与 v5 都稳定有信号的特征 —— 没有
|
||||
|
||||
1. 对账通过后,`raw` 口径的留一法数字与基线基本持平:似然比权重没有让真值掉出区间(±60 A3 一例除外),也没有明显收窄;引擎答题前的头名在 ±10 从 0.30 到 0.40–0.45、±60 A1 从 0.05 到 0.15,全集拟合再高一些——**全集与留一法的差距就是 20 例过拟合的量**。
|
||||
2. `percent` 口径下 softmax 后验**过度自信**:即使温度按训练折拟合,仍把 15–25% 例子的真值挤出区间。校准曲线(A3 留一法)在 ±10 上 [0.20,0.30) 桶预测 0.24 / 实际 0.40、[0.50,0.70) 预测 0.58 / 实际 0.40、[0.70,1.00) 只有 1 个点且错;±30 / ±60 高桶几乎无样本。要上线必须先解决后验的标定,而不是先验本身。
|
||||
3. **42 个特征里 31 / 36 / 38 个(±10 / ±30 / ±60)的 5–95% 置信区间跨 0**(案例级 bootstrap 200 次)。±10 上区间不跨 0 的:`ashtakavarga_target_house_pressure_auxiliary`(+0.41)、`vim_ad_domain_varga`(+0.30)、`vim_md_domain_varga`(+0.27)、`ghati_lagna_in_target_house` / `hora_lagna_in_target_house`(+0.31)、`pranapada_in_target_house`(**−0.36**)、`vim_ad_arudha_auxiliary`(−0.21)、`narayana_ad_domain_house`(−0.21)、`kp_target_cusp_sublord_is_vim_ad`(−0.19)。方向与线上手拍权重相反的几条(Arudha、Narayana AD、KP AD 子主为负)正是 20 例上说不清的地方——这就是任务书要先扩集的原因。
|
||||
4. 稳健性(留一法 A3,`raw`):±7 天抖动与 ±1–3 月平移三档真值在区间 0.95–1.00;答错 1 题 0.96–1.00、答错 2 题 0.91–0.99(与 09-26 基线同量级)。`percent` 口径下三项都更差(0.70–0.90),同样是后验过自信的表现。
|
||||
案例级 bootstrap 200 次的 5–95% 区间,v5 上**不跨 0** 的特征只剩:
|
||||
|
||||
## R-B · 缺席证据
|
||||
| 半径 | 特征 | log LR(命中) | 区间 |
|
||||
| --- | --- | ---: | --- |
|
||||
| ±10 | `vim_md_domain_varga_d60` | −0.15 | [−0.27, −0.03] |
|
||||
| ±10 | `kp_asc_sublord_is_vim_ad` | −0.11 | [−0.22, −0.00] |
|
||||
| ±10 | `kp_target_cusp_starlord_is_vim_md` | +0.08 | [0.00, 0.16] |
|
||||
| ±10 | `kp_target_cusp_starlord_is_vim_ad` | +0.06 | [0.00, 0.13] |
|
||||
| ±10 / ±30 / ±60 | `shadbala_sthana_drik_naisargika_support_auxiliary` | −0.06 | [−0.10, −0.01] 三档 |
|
||||
| ±10 / ±30 / ±60 | `shadbala_sthana_drik_naisargika_pressure_auxiliary` | +0.05 | [0.01, 0.08] 三档 |
|
||||
| ±30 / ±60 | `vim_md_domain_varga_d60` | −0.15 / −0.14 | [−0.25, −0.05] / [−0.23, −0.04] |
|
||||
| ±30 | `kp_target_cusp_starlord_is_vim_md` | +0.09 | [0.00, 0.17] |
|
||||
|
||||
其余 36 / 38 / 39 个跨 0。v4 上不跨 0 的九条(Ashtakavarga 压力、D-varga 命中、Hora / Ghati lagna、Pranapada 为负、Arudha 为负、Narayana AD 为负、KP AD 子主为负)在 v5 上**全部回到跨 0**;v5 上不跨 0 的几条在 v4 上也都跨 0。**没有一个特征在两套数据上同时稳定、同号。** 剩下的几条量级 0.05–0.15 nat(命中概率相差 1–2 个百分点),而且方向与线上手拍权重相反的居多(D60 命中、Shadbala 支持为负;Shadbala 压力为正)。
|
||||
|
||||
**读法。** 这是本轮最硬的结果:线上 11 条规则加 17 个额外观察,对"真值分钟 vs 邻近分钟"的区分几乎为零;v4 上看到的"信号"是 20 例的噪声。让数据定权重(R-A)不是没做对,而是没有可校准的东西。定论页 §1.3"加权重类改法不过门"的结论被 77 例、留一法、数据驱动权重的方式再次确认,并且说明了原因。
|
||||
|
||||
## 3. R-B · 缺席证据
|
||||
|
||||
**方法。** 只用训练事件(留一件 holdout 不用)。每个领域取第一件与最后一件带年月事件之间的年份,没有该领域事件的年份 = 缺席年。对每个缺席 (领域, 年) 用出题器同一判定函数 `_evaluate_contexts(month=None)` 在代表候选上求"这一年该领域是否激活"的分边;分得开就当作一道答了"没有"的题,按 0.5 / 1.0 / 2.0 分扣(卡片是 2.0;低于卡片强度的扣分不计强冲突、不会淘汰)。之后照常六题。漏说稳健性:随机删掉 1–2 件训练事件再算缺席年(每例 5 次,种子固定)。
|
||||
|
||||
`raw` 口径六题回放(`percent` 口径同向,见 JSON):
|
||||
### 3.1 六格硬红线 1(`raw` 口径;truth = opposite)
|
||||
|
||||
| 半径 | 方案 | 头名命中 | 真值在区间 | 宽度中位 | 挤出真值 | 漏说 1 件(100 次回放)真值在区间 | 漏说 2 件 |
|
||||
| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: |
|
||||
| ±10 | B0 | 0.80 | 1.00 | 15 | 0 | — | — |
|
||||
| ±10 | 缺席 @0.5 分 | 0.70 | 1.00 | 15 | 0 | 1.00 | 1.00 |
|
||||
| ±10 | 缺席 @1.0 分 | 0.70 | 1.00 | 14 | 0 | 1.00 | 1.00 |
|
||||
| ±10 | 缺席 @2.0 分(=卡片) | 0.55 | **0.85** | 13 | 3 | 0.94 | 0.94 |
|
||||
| ±30 | B0 | 0.55 | 1.00 | 33 | 0 | — | — |
|
||||
| ±30 | 缺席 @0.5 分 | 0.50 | 1.00 | 34 | 0 | 1.00 | 1.00 |
|
||||
| ±30 | 缺席 @1.0 分 | 0.45 | 1.00 | 33 | 0 | 1.00 | 1.00 |
|
||||
| ±30 | 缺席 @2.0 分 | 0.25 | **0.70** | 19 | 6 | 0.80 | 0.87 |
|
||||
| ±60 | B0 | 0.40 | 1.00 | 56 | 0 | — | — |
|
||||
| ±60 | 缺席 @0.5 分 | 0.35 | 1.00 | 68 | 0 | 1.00 | 1.00 |
|
||||
| ±60 | 缺席 @1.0 分 | 0.25 | 1.00 | 61 | 0 | 1.00 | 1.00 |
|
||||
| ±60 | 缺席 @2.0 分 | 0.10 | **0.40** | 9 | 12 | 0.54 | 0.73 |
|
||||
| 半径 | 基线 真值在区间 / 头名 | @0.5 分 | @1.0 分 | @2.0 分(=卡片) |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| ±10 | 76 / 0.675 | 77 / 0.662 **不过**(头名降) | 73 / 0.649 **不过** | 55 / 0.481 **不过** |
|
||||
| ±30 | 76 / 0.494 | 75 / 0.442 **不过** | 71 / 0.429 **不过** | 33 / 0.169 **不过** |
|
||||
| ±60 | 75 / 0.325 | 75 / 0.221 **不过** | 70 / 0.195 **不过** | 19 / 0.091 **不过** |
|
||||
|
||||
每例平均缺席年 17.95;能分边的缺席题 2.05 / 4.30 / 6.15 道(有题的例子 12 / 17 / 17)。三档 debug 判定全部 no_benefit。
|
||||
`percent` 口径同向(@2.0 分 54 / 33 / 20,@0.5 分头名 0.74 / 0.69 / 0.49 vs 基线 0.79 / 0.81 / 0.77)。
|
||||
|
||||
读法:
|
||||
### 3.2 全表与漏说稳健性(`raw`)
|
||||
|
||||
1. **按卡片强度扣,真值被大量挤出**(±60 覆盖 1.00 → 0.40)。原因不是方法错,而是 v4 的事件表是传记摘录:那些"空白年"里公众人物多半确有该领域的事,只是没进数据集;扣分等于用不完整的时间线否定真值。真人口述同样不完整(用户不会把每年的事都说全),所以这条在 v5 上大概率也是负的——**若 v5 上不翻转,R-B 关闭**。
|
||||
2. 0.5 / 1.0 分档不挤真值(覆盖 1.00)但头名一律下降、宽度不降,等于只加噪声。漏说 1–2 件在低强度下不伤覆盖,在卡片强度下把覆盖压到 0.54–0.94。
|
||||
| 半径 | 方案 | 头名 | 真值在区间 | 宽度中位 | 漏说 1 件(385 次)真值在区间 | 漏说 2 件 |
|
||||
| --- | --- | ---: | ---: | ---: | ---: | ---: |
|
||||
| ±10 | B0 | 0.675 | 0.987 | 15 | — | — |
|
||||
| ±10 | @0.5 | 0.662 | 1.000 | 15 | 1.000 | 0.997 |
|
||||
| ±10 | @1.0 | 0.649 | 0.948 | 15 | 0.953 | 0.953 |
|
||||
| ±10 | @2.0 | 0.481 | 0.714 | 9 | 0.751 | 0.753 |
|
||||
| ±30 | B0 | 0.494 | 0.987 | 35 | — | — |
|
||||
| ±30 | @0.5 | 0.442 | 0.974 | 35 | 0.974 | 0.974 |
|
||||
| ±30 | @1.0 | 0.429 | 0.922 | 33 | 0.932 | 0.945 |
|
||||
| ±30 | @2.0 | 0.169 | 0.429 | 5 | 0.465 | 0.488 |
|
||||
| ±60 | B0 | 0.325 | 0.974 | 63 | — | — |
|
||||
| ±60 | @0.5 | 0.221 | 0.974 | 71 | 0.974 | 0.969 |
|
||||
| ±60 | @1.0 | 0.195 | 0.909 | 57 | 0.917 | 0.933 |
|
||||
| ±60 | @2.0 | 0.091 | 0.247 | 5 | 0.301 | 0.369 |
|
||||
|
||||
## R-C · 精度追问可行性
|
||||
每例平均缺席年 48.9;能分边的缺席题 3.9 / 7.6 / 10.8 道(有题的例子 60 / 72 / 73)。
|
||||
|
||||
**方法。** 把每例所有日精度经历降成"只记得年"(v4 没有月精度)作为口述形态 `C0_spoken`,先验按线上重算。对每件训练中的日精度经历,用 `_evaluate_contexts(month=真实月份)` 判断"知道月份后能否把代表候选分到两边";能分的按信息增益排序取前 1 / 2 件:`C{k}_prior`(那件恢复到月精度重算先验)、`C{k}_probe`(当作答"是"的卡)、`C{k}_both`。
|
||||
**读法。** 缺席年扣分在三档、三档强度、两种口径下没有一格过门。卡片强度下区间是窄了(5–9 分钟)但真值多半不在里面——这正是定论页 §6 第 3 条警告的"把区间做窄很容易"。原因是"时间线上没有"不等于"没发生":公开传记如此,真人口述更如此。**关闭。**
|
||||
|
||||
## 4. R-C · 精度追问可行性
|
||||
|
||||
**方法。** 把每例所有日 / 月精度经历降成"只记得年"作为口述形态 `C0_spoken`,先验按线上重算。对每件训练中的日 / 月精度经历,用 `_evaluate_contexts(month=真实月份)` 判断"知道月份后能否把代表候选分到两边";能分的按信息增益排序取前 1 / 2 件:`C{k}_prior`(那件恢复到月精度重算先验,走线上已有的打字经历通道)、`C{k}_probe`(当作答"是"的卡)、`C{k}_both`。**方案臂只覆盖"有得问"的子集,所以与同一子集上的 `C0`(`subset_C0`)比**,不与全集比。
|
||||
|
||||
| 半径 | 每例可追问件数均值 | ≥1 件的例子 | ≥2 件的例子 |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| ±10 | 0.20 | 2 / 20 | 1 / 20 |
|
||||
| ±30 | 0.45 | 7 / 20 | 1 / 20 |
|
||||
| ±60 | 0.70 | 10 / 20 | 3 / 20 |
|
||||
| ±10 | 0.44 | 20 / 77 | 10 / 77 |
|
||||
| ±30 | 0.71 | 34 / 77 | 12 / 77 |
|
||||
| ±60 | 1.09 | 45 / 77 | 23 / 77 |
|
||||
|
||||
| 半径 | 方案 | n | 头名命中(raw) | 真值在区间 | 宽度中位 | 同 n 例的 C0(raw 头名 / 宽度) |
|
||||
| --- | --- | ---: | ---: | ---: | ---: | --- |
|
||||
| ±10 | C1_prior / C1_probe | 2 | 1.00 / 0.50 | 1.00 | 16 | 见 JSON per-arm(样本太少) |
|
||||
| ±30 | C1_prior | 7 | 0.71 | 1.00 | 31 | debug 判定 benefit(percent 口径头名 1.00) |
|
||||
| ±30 | C1_probe | 7 | 0.57 | 1.00 | 33 | no_benefit |
|
||||
| ±60 | C1_prior / C1_probe | 10 | 0.40 / 0.40 | 1.00 | 58 / 63 | no_benefit |
|
||||
六格硬红线 1 与同子集 C0 比(`raw`;truth = opposite):
|
||||
|
||||
**读法。** 可追问的经历很少(与 09-29 打字经历研究一致:绝大多数经历落在所有候选都一样的大运段),但在 ±30 上"恢复到月精度重算先验"(走线上已有的打字经历通道,不加卡片)对那 7 例有正向信号;"当作答是的卡"没有。样本太少,只能说值得在 v5 上按同口径重测;产品层实现(只对落在候选分歧点的那一件追问月份,算在定向追问 2 条额度内)要等 v5 判定。
|
||||
| 半径 | 方案 | n | 真值在区间(方案 / 子集 C0) | 头名(方案 / 子集 C0) | 宽度中位(方案 / 子集 C0) | 硬红线 1 | gate_verdict |
|
||||
| --- | --- | ---: | --- | --- | --- | --- | --- |
|
||||
| ±10 | C1_prior | 20 | 20 / 20 | 0.70 / 0.75 | 13 / 13 | **不过** | no_benefit |
|
||||
| ±10 | C1_probe | 20 | 20 / 20 | 0.60 / 0.75 | 12 / 13 | **不过** | no_benefit |
|
||||
| ±10 | C2_prior | 10 | 10 / 10 | 0.70 / 0.80 | 11 / 11 | **不过** | no_benefit |
|
||||
| ±30 | C1_prior | 34 | 34 / 34 | 0.47 / 0.47 | 36 / 37 | 过(头名持平,宽度 −1) | benefit |
|
||||
| ±30 | C1_probe | 34 | 34 / 34 | 0.41 / 0.47 | 32 / 37 | **不过** | no_benefit |
|
||||
| ±30 | C2_prior | 12 | 12 / 12 | 0.42 / 0.50 | 31 / 36 | **不过** | no_benefit |
|
||||
| ±60 | C1_prior | 45 | 44 / 44 | 0.36 / 0.42 | 71 / 71 | **不过** | no_benefit |
|
||||
| ±60 | C1_probe | 45 | 44 / 44 | 0.38 / 0.42 | 63 / 71 | **不过** | no_benefit |
|
||||
| ±60 | C2_prior | 23 | 22 / 22 | 0.48 / 0.52 | 75 / 75 | **不过** | no_benefit |
|
||||
|
||||
## 给产品的话
|
||||
`percent` 口径:`C1_prior` ±30 头名 0.79 vs 0.71、宽度 35 vs 32(宽度变宽,gate no_benefit)、±10 0.80 vs 0.85、±60 0.76 vs 0.80;`C1_probe` ±30 0.74 vs 0.71 且宽度 31 vs 32(gate benefit)但 ±10 / ±60 头名降。两个口径下没有一个臂在三档同时过。
|
||||
|
||||
- 三条流水线都跑通、与线上对账 0 差,**但没有任何一条在 v4 上能下结论**,20 例上 42 个特征有四分之三分不清正负。这一轮交付的是"能在 v5 上一键复跑的测量工具",不是新打分。
|
||||
- v4 上唯一方向明确的信号是负的:把口述时间线的空白当"没发生"会伤真值(R-B)。
|
||||
- v5 交付后的复跑命令:`PYTHONHASHSEED=0 python3 scripts/research/scoring_research.py --holdout references/real_case_calibration/minute_rectification_holdout_v5.json --dataset-label v5 --out-suffix v5_<日期>`。
|
||||
**读法。** (1) 能追问的经历确实少:±10 上 77 例只有 20 例有一件"知道月份就能分开候选"的经历,与 09-29 打字经历研究一致。(2) 对这些例子,"恢复到月精度重算先验"(走现有通道)在 ±30 上持平、±10 / ±60 上头名反而降;"当作答是的卡"在 ±10 / ±60 也降。之前 v4 上 ±30 的 7 例正向信号(0.71)在 77 例、同子集比较下消失。(3) 结论:**精度追问没有一致收益,不立实现单。** 产品若仍想做"只追问一件落在候选分歧点的经历",那是交互层面的取舍,本研究给不出精度上的理由。
|
||||
|
||||
## 5. 给产品的话
|
||||
|
||||
- **打分层这条路可以收口了。** 77 例、留一法、让数据定权重、加进 KP / Pranapada / D60,结果是:线上规则对"哪一分钟"的区分几乎为零,没有可校准的权重;把口述时间线的空白当"没发生"会伤真值。BUG-560(换尺度)继续 blocked、BUG-1091 按设计关闭。收窄仍然只能靠带年月的选择题——这与 09-14 定论一致,现在有了 77 例的证据。
|
||||
- 产品层的"对已说的事追问月份"(§4)与同子集基线比也没有一致收益:能追问的例子少(±10 只有 20 / 77),追问后头名多半不升。若要做,是交互层面的决定,不是精度收益。
|
||||
- 复跑:本页顶部命令;判定所用 JSON `dataset: v5`。
|
||||
|
||||
## 6. v4 脚手架阶段的数字(20 例,仅调试参考)
|
||||
|
||||
- 对账:20 例 × 3 档 = 60 个 case-radius 差异 0;两次复跑 JSON 逐字节一致(`scoring_research_*_2026_09_29.json`)。
|
||||
- R-A `raw` 留一法头名:±10 A1 / A2 / A3 0.70 / 0.75 / 0.80(基线 0.80);±30 0.55 / 0.60 / 0.65(0.55);±60 0.45 / 0.55 / 0.50(0.40)。真值在区间除 ±60 A3 0.95 外全 1.00。`percent` 口径挤出 3–5 例。42 个特征里 31 / 36 / 38 个跨 0。
|
||||
- R-B:@2.0 分覆盖 0.85 / 0.70 / 0.40;@0.5 / 1.0 覆盖 1.00 但头名降。
|
||||
- R-C:可追问件数每例均值 0.20 / 0.45 / 0.70;±30 C1_prior 7 例头名 0.71。
|
||||
- 这些数字与 v5 方向一致,但 v4 上看似"有信号"的九个特征在 v5 上全部回到噪声——扩集单(BUG-1090)的必要性由此坐实。
|
||||
|
||||
## 附:复跑命令
|
||||
|
||||
```bash
|
||||
PYTHONHASHSEED=0 python3 scripts/research/scoring_research.py --cache-dir /tmp/scoring_ctx # 约 14 分钟,写三份 JSON
|
||||
PYTHONHASHSEED=0 python3 scripts/research/scoring_research.py --limit 3 --radii 10 --fast --no-write # 开发用
|
||||
PYTHONHASHSEED=0 python3 scripts/research/scoring_research.py --holdout references/real_case_calibration/minute_rectification_holdout_v5.json --dataset-label v5 --cache-dir /tmp/scoring_ctx --probes-per-variant --out-suffix v5_2026_09_29 # 约 48 分钟
|
||||
PYTHONHASHSEED=0 python3 scripts/research/scoring_research.py --cache-dir /tmp/scoring_ctx # v4,约 13 分钟
|
||||
PYTHONHASHSEED=0 python3 scripts/research/scoring_research.py --limit 3 --radii 10 --fast --no-write # 开发用
|
||||
python3 -m pytest tests/test_scoring_research.py -q
|
||||
```
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,73 +1,67 @@
|
||||
# PROGRESS · 生时校正打分方法研究:似然比权重 / 缺席证据 / 精度追问(脚手架阶段,2026-09-29)
|
||||
# PROGRESS · 生时校正打分方法研究:似然比权重 / 缺席证据 / 精度追问(2026-09-29 脚手架,2026-09-30 v5 判定)
|
||||
|
||||
- 任务书:`docs/tasks/TASK-rectification-scoring-research-20260929.md`
|
||||
- 执行:Claude(直接执行模式,fork 子代理),分支 `codex/rectification-scoring-research-20260929`,基线 `origin/staging` @ `6e393780`(任务书写作时 `5febb111`,其间只有文档提交)。**未推送。**
|
||||
- 研究报告:`docs/research/rectification_scoring_research_2026_09_29.md` + `scoring_research_{lr,absence,precision_followup}_2026_09_29.json`
|
||||
- 本轮范围(按调度方指令):在 v4 上完成 R-0 脚手架并把 R-A / R-B / R-C 流水线跑通;**所有判定字段写 `pending_v5`**,v4 数字只作调试参考。v5 交付后在 v5 上跑判定(复跑命令见研究报告末尾)。
|
||||
- 执行:Claude(直接执行模式,fork 子代理),分支 `codex/rectification-scoring-research-20260929`。脚手架阶段基线 `origin/staging` @ `6e393780`,已合入 staging(`84aaeadf`);判定阶段 `git rebase origin/staging` 到 `0120765f`(v5 已合入,分支无额外提交后再开新提交)。**未推送。**
|
||||
- 研究报告:`docs/research/rectification_scoring_research_2026_09_29.md` + `scoring_research_{lr,absence,precision_followup}_2026_09_29.json`(v4)与 `…_v5_2026_09_29.json`(v5,判定用)。
|
||||
|
||||
## 开工
|
||||
## 阶段一(2026-09-29)· 脚手架与 v4 流水线
|
||||
|
||||
- `git fetch origin --prune` → worktree `.worktrees/rectification-scoring-research-20260929` 基于 `origin/staging`;任何 git 操作前 `git status -sb` 核对分支。
|
||||
- 先读:定论页(含 §7 勘误)、`rectification_offline_research_2026_09_26.md`、`rectification_typed_event_scoring_2026_09_29.md`、ERR-110 / ERR-111。
|
||||
- 环境:本机没有 `.venv`(所有 worktree 的 `.venv` 软链都指向不存在的 `/workspace/Jyotisha/.venv`),全部用系统 `python3` 3.13.5(swisseph 9.1.1、pytest、timezonefinder 齐)。快速门的前端步需要 Node 22:`frontend/node_modules` 软链到主检出,`npm` 用 `/exec-daemon/node` + `/exec-daemon/lib/node_modules/npm` 的 shim(系统 `node` 是 20.19,`/usr/bin/npm` 跑的 `tsx` 不在 PATH)。`PYTHONHASHSEED=0`(ERR-111)。
|
||||
- 另一子代理并行做 v5 扩集(`.worktrees/rectification-holdout-expansion-20260929`),未触碰。
|
||||
- 环境:本机没有 `.venv`,全部用系统 `python3` 3.13.5(swisseph 9.1.1)。快速门的前端步需要 Node 22:`frontend/node_modules` 软链到主检出(未入库),`npm` 用 `/exec-daemon/node` + `/exec-daemon/lib/node_modules/npm` 的 shim。`PYTHONHASHSEED=0`(ERR-111)。
|
||||
- 交付:`scripts/research/scoring_research_lib.py`(特征记录 provider、逐分对账、似然比估计 α = 1、案例级 bootstrap、加权 provider、leave-one-case-out、缩放答案、Platt 温度、缺席年 / 精度升降辅助)、`scripts/research/scoring_research.py`(R-A / R-B / R-C 流水线)、`tests/test_scoring_research.py`(10 条,含 v4 公开案例 ±10 对账 0 差)。
|
||||
- 对账:20 例 × 3 档 = 60 个 case-radius 分数差 0、规则 id 差 0。两次复跑 JSON 逐字节一致。所有判定字段 `pending_v5`。
|
||||
- 生产代码、`sealed_holdout_rerun.py::PRODUCTION_FILES` 的 10 个冻结文件、任何常数零改动。
|
||||
- 已由 Claude 验收合入 staging(README 状态板记录)。
|
||||
|
||||
## 交付物
|
||||
## 阶段二(2026-09-30)· v5 判定
|
||||
|
||||
| 文件 | 内容 |
|
||||
| --- | --- |
|
||||
| `scripts/research/scoring_research_lib.py` | R-0:特征记录 provider(线上同源 evidence + 额外观察)、逐分对账、特征矩阵、似然比估计(α = 1)、案例级 bootstrap、加权 provider、leave-one-case-out、缩放答案、Platt 温度、缺席年 / 精度升降 / 月份平移辅助 |
|
||||
| `scripts/research/scoring_research.py` | R-A / R-B / R-C 流水线;`--limit / --radii / --parts / --fast / --cache-dir / --holdout / --dataset-label / --out-suffix` |
|
||||
| `tests/test_scoring_research.py` | 10 条:纯函数 9 条 + v4 公开案例 ±10 对账 0 差 1 条 |
|
||||
| `docs/research/rectification_scoring_research_2026_09_29.md` | 报告(结构按任务书 R-D;结论栏全部 `pending_v5`;复跑命令) |
|
||||
| `docs/research/scoring_research_*_2026_09_29.json` | 三份结果(`dataset: v4, verdict: pending_v5`) |
|
||||
| `docs/BUG_HISTORY.md` | BUG-1091 `investigating`(开工核对最大号 1089;1090 由扩集单占用,未冲突) |
|
||||
| `docs/research/ACTIVE_FRONTS.md`、定论页 §9、`docs/tasks/README.md` | 索引与状态板 |
|
||||
### 脚本改动(本次提交,`scripts/research/scoring_research.py`)
|
||||
|
||||
生产代码、`sealed_holdout_rerun.py::PRODUCTION_FILES` 的 10 个冻结文件、任何常数:**零改动**(`git status` 只有上表文件)。
|
||||
1. `main` 改为**一次只驻留一个半径**:77 例 × 3 档的静态 context 同时驻留会 OOM(两次被系统 kill,anon-rss 3.2 GB),按半径加载 → 跑 R-A / R-B / R-C → 释放。JSON 结构不变。
|
||||
2. `fit_prior` 的训练折计分改用线性代理 `CaseData.proxy_rows`(特征权重 × 精度权重,不含事件类型系数 / 大运边界邻近项),把每折 O(n) 次矩阵构建降为字典求和;留出例的分数仍走线上矩阵。
|
||||
3. `--probes-per-variant`:留一法方案用自己的矩阵重新出六题再回放(缺口 3)。
|
||||
4. `hard_line_1` 字段:每格真值在区间例数与头名 vs 基线;R-C 增加同一子集的 `subset_C0` / `subset_B0` 与 `gate_verdict_vs_subset_C0`(子集方案对全集 C0 比是不公平的,改为同子集比)。
|
||||
5. `per_case` 行(R-A 各方案与基线、R-C 各臂)写进 JSON,供验收逐例核对。
|
||||
6. `verdict` 字段:v4 仍 `pending_v5`;v5 文件 header 写 `see_report`,方案级 `gate_verdict` / `hard_line_1.pass` 是机器判定,正式判定见研究报告 §1。
|
||||
|
||||
## R-0 · 对账(任务书硬红线 4)
|
||||
### 对账与复跑
|
||||
|
||||
- 研究计分器 vs 线上 `score_candidates`(经 `build_event_contribution_matrix` 同一条矩阵链):**20 例 × 3 档 = 60 个 case-radius,分数差 0、规则 id 差 0**(`reconciliation.unreconciled = 0`,三份 JSON 均记录)。
|
||||
- 做法:provider 用 `precision_gate_lib.score_event_with_policy`(V0)+ 线上 `_controlled_transit_rules`(带缓存)/ `_ashtakavarga_auxiliary` / `_shadbala_verified_components_auxiliary`(取 context 里线上算好的结果),返回与 `_candidate_row` 相同的 evidence;额外观察只进 `FeatureStore`,不进 rule_ids / points,所以矩阵、`event_kind` 系数、`technique_layers`、出题都与线上一致。
|
||||
- 特征 42 个:线上规则 25 + 额外观察 17(KP 宫头子主 / 星主 × MD/AD/PD、KP 上升子主、D60 × MD/AD/PD、Pranapada / Hora / Ghati / Bhava lagna 落领域宫)。特征值 = 该规则在该事件采样日期上命中的比例。真值标签 = 候选属于真值所在签名簇。
|
||||
- 留一法按**案例**留(`loo_folds`),`scale` 与 `temperature` 也只从训练折估。
|
||||
- v5 对账:**77 例 × 3 档 = 231 个 case-radius 差异 0**(`reconciliation.unreconciled = 0`,三份 JSON 均记录)。
|
||||
- 复跑:`PYTHONHASHSEED=0 … --dataset-label v5 --probes-per-variant` 连跑两次(2918 s / 2818 s),三份 JSON `cmp` **逐字节一致**(`lr` 407,129 B、`absence` 53,227 B、`precision_followup` 48,521 B);R-C 加同子集基线后单独再跑两次(`--parts rc`),同样逐字节一致;`_v5_rerun` 副本比对后删除,不入库。
|
||||
- 基线自检:本脚本的 v5 基线(六题后 `raw`)头名 0.675 / 0.494 / 0.325、真值在区间 76 / 76 / 75、宽度 15 / 35 / 63,与扩集单发布的 v5 成绩单逐格一致。
|
||||
|
||||
## R-A / R-B / R-C · 流水线状态
|
||||
### 判定(`raw` 主判口径,理由见报告 §2.1;truth = opposite,D1 之后六题后不再注入)
|
||||
|
||||
| 项 | 状态 | v4 调试参考(`raw` 口径,留一法) | 判定 |
|
||||
| 项 | 六格硬红线 1(真值在区间例数 / 头名 vs 基线 76 / 0.675、76 / 0.494、75 / 0.325) | `gate_verdict` | 判定 |
|
||||
| --- | --- | --- | --- |
|
||||
| R-A A1 / A2 / A3 | 跑通(留一法 + 全集、六题回放、引擎头名、校准曲线、稳健性四项、LR 表 + 案例级 bootstrap 区间) | 头名 ±10 0.70 / 0.75 / 0.80(基线 0.80);±30 0.55 / 0.60 / 0.65(0.55);±60 0.45 / 0.55 / 0.50(0.40)。真值在区间除 ±60 A3 0.95 外全 1.00。`percent` 口径 softmax 后验过自信,挤出 3–5 例 | `pending_v5` |
|
||||
| R-B 缺席 @0.5 / 1.0 / 2.0 分 | 跑通(含漏说 1–2 件 × 5 次) | 2.0 分(=卡片)把覆盖压到 0.85 / 0.70 / 0.40;0.5 / 1.0 分覆盖 1.00 但头名一律降 | `pending_v5`(v4 信号为负) |
|
||||
| R-C C1 / C2 × prior / probe / both | 跑通 | 可追问件数每例均值 0.20 / 0.45 / 0.70;±30 上 C1_prior 7 例头名 0.71 | `pending_v5`(样本太少) |
|
||||
| R-A A1 | 76 / 0.571、77 / 0.455、72 / 0.247 | no_benefit ×3 | **不过**(头名三档降;±60 丢 3 例) |
|
||||
| R-A A2 | 75 / 0.545、76 / 0.416、72 / 0.247 | no_benefit ×3 | **不过** |
|
||||
| R-A A3 | 77 / 0.597、77 / 0.468、75 / 0.221 | no_benefit ×3 | **不过**(覆盖不降但头名三档降) |
|
||||
| R-B @0.5 分 | 77 / 0.662、75 / 0.442、75 / 0.221 | no_benefit ×3 | **不过**(头名降、宽度不降) |
|
||||
| R-B @1.0 分 | 73 / 0.649、71 / 0.429、70 / 0.195 | no_benefit ×3 | **不过** |
|
||||
| R-B @2.0 分(卡片强度) | 55 / 0.481、33 / 0.169、19 / 0.091 | no_benefit ×3 | **不过**(真值大量挤出) |
|
||||
| R-C(与同子集 C0 比) | C1_prior:20/20 头名 0.70 vs 0.75、34/34 0.47 vs 0.47(宽度 36 vs 37)、44/44 0.36 vs 0.42;C1_probe:0.60 vs 0.75、0.41 vs 0.47、0.38 vs 0.42;C2_prior:0.70 vs 0.80、0.42 vs 0.50、0.48 vs 0.52 | 只有 ±30 C1_prior 一格 benefit,其余 no_benefit | **不过**(无一致收益,不立实现单) |
|
||||
|
||||
各特征在 v4 上的 LR 与「LR≈1」名单在报告 R-A 第 3 条与 JSON `radii.*.lr_table` / `noise_features`:**42 个特征里 31 / 36 / 38 个(±10 / ±30 / ±60)的 5–95% 区间跨 0**。
|
||||
`percent` 口径六格同样全部不过(R-A A1 76 / 77 / 77、A2 71 / 76 / 77、A3 66 / 75 / 76,头名全低于基线 0.79 / 0.81 / 0.77;R-B @2.0 分 54 / 33 / 20)。
|
||||
|
||||
## 复跑与确定性(任务书硬红线 5)
|
||||
- 稳健性(R-A 留一法 `raw`,真值在区间):±7 天 0.94–1.00、±1–3 月 0.94–1.00、答错 1 题 0.90–1.00、答错 2 题 0.82–0.98;没有一项补回头名损失。
|
||||
- 缺口 3:按方案矩阵重出六题的回放与共用题目**逐格相同**(出题器按代表候选与静态 context 判定分边,不读矩阵分数;每例题数 4.9 / 7.1 / 7.3)。对判定方向无影响,关闭。
|
||||
- 后验标定(缺口 2):主判 `raw`(scale 只从训练折估,进 `unionStillValidRange`,与三轮既有研究同口径);`percent` 口径的 Platt 温度在 v5 上拟合到 4–32,校准曲线在 ±30 / ±60 几乎全落在 [0,0.1) 桶且预测≈实际——过自信消失的代价是后验≈均匀,即先验不携带信息。两口径判定方向一致。
|
||||
- 特征:42 个里 36 / 38 / 39 个 bootstrap 5–95% 区间跨 0;剩余 |log LR| ≤ 0.15(D60 命中 −0.15、Shadbala 支持 −0.06 / 压力 +0.05、KP 星主 +0.06–0.09、KP 上升 AD 子主 −0.11);**v4 与 v5 都不跨 0 且同号的特征:0 个**。
|
||||
|
||||
- `PYTHONHASHSEED=0 python3 scripts/research/scoring_research.py --cache-dir <scratch>` 连跑两次(758 s / 748 s,静态 context 走磁盘缓存),三份 JSON `cmp` **逐字节一致**;`--out-suffix rerun` 的副本比对后删除,不入库。
|
||||
- JSON 不写耗时字段,`sort_keys=True`;随机(漏说抽样、月份平移、答错抽样、bootstrap)全部按 `f"{SEED}:{case_id}:{radius}:…"` 种子。
|
||||
### 文档
|
||||
|
||||
- 研究报告改写为 v5 判定版(§1 结论表、§2.1 标定口径、§2.2 / §3.1 六格表、§2.4 特征表、§4 R-C、§6 v4 数字保留)。
|
||||
- `docs/BUG_HISTORY.md` BUG-1091 → `closed_by_design`(附数字);定论页 §9 追加 v5 结论;`docs/research/ACTIVE_FRONTS.md` 索引已指向报告;`docs/tasks/README.md` 状态行更新。
|
||||
|
||||
## 快速门
|
||||
|
||||
- 开工基线(`origin/staging` @ `6e393780`,未改任何文件)与改后各跑一次 `python3 scripts/run_quality_gate.py --profile quick`(PATH 带 Node 22 shim):
|
||||
- Python:**1001 passed, 1 skipped** 两次相同(改后含新增的 10 条 `test_scoring_research.py`——门禁的 pytest 集合按清单收集,新文件不在清单里,计数没变;定向 `python3 -m pytest tests/test_scoring_research.py -q` 10 passed)。
|
||||
- 前端 `npm test`:基线 4357 / pass 4301 / fail 25;改后 4357 / pass **4302** / fail **24**、cancelled 0。失败清单逐条比对:改后 24 条是基线 25 条的子集(少的一条 `D3 · the first stage line shows on send…` 是基线那次偶发红、改后绿,前端零改动);24 条全是需要 Docker / PostgreSQL / 部署环境的套件(Better Auth / billing / migration / staging sync 等),与 09-29 上一单验收记录的 24 条环境失败一致。
|
||||
- 门禁整体 exit 1 = 该 24 条环境失败所致,基线同样 exit 1;**无新增失败**。
|
||||
- 隐私:`tests/test_repo_privacy_markers.py` 在快速门 Python 步内通过(1001 passed 含之)。
|
||||
- 阶段一:基线(`6e393780`)与改后各一次:Python 1001 passed / 1 skipped 两次相同;前端 4357 / pass 4302 / fail 24 / cancelled 0(基线 4301 / 25,改后失败清单是基线的子集,24 条全是 Docker / PostgreSQL / 部署环境套件)。
|
||||
- 阶段二(`0120765f` 之上,改动只在 `scripts/research/scoring_research.py` 与文档):`python3 scripts/run_quality_gate.py --profile quick`(PATH 带 Node 22 shim)——Python **1001 passed / 1 skipped**(与阶段一两次相同;定向 `tests/test_scoring_research.py` 10 passed);前端 **4391 / pass 4336 / fail 24 / cancelled 0**(staging 在 `6e393780`→`0120765f` 间新增 34 条测试,全部通过),24 条失败清单与阶段一逐条相同(Docker / PostgreSQL / 部署环境套件),门禁整体 exit 1 由此导致;**无新增失败**。
|
||||
|
||||
## 缺口与说明
|
||||
|
||||
- **判定未做**:按任务书,R-A / R-B / R-C 的有无收益只能在 v5 上判;本轮 JSON 的 `debug_verdict_v4` 只是 `gate_verdict` 的机械输出,不作结论。
|
||||
- R-A 的 `percent` 口径需要先解决后验标定(单温度 Platt 不够,校准曲线高桶过自信);v5 上若仍过自信,考虑按训练折做等分位标定或直接用 `raw` 口径(缩放到线上极差)。
|
||||
- 六道题由线上矩阵出一次、各方案共用(隔离先验的影响);若某方案在 v5 上过门,实现前还应按方案矩阵重新出题再测一次。
|
||||
- 大运边界邻近项(`merge_transition_proximity`)按线上原样附加、未重加权。
|
||||
- R-B 的缺席年在 v4 上不可靠(传记摘录不是完整时间线);这条限制在真人口述上同样存在,报告已写明。
|
||||
- 未做:R-C 的产品层实现、任何实现单;`CHANGELOG.md` 无用户可见变化,未改。
|
||||
|
||||
## Claude 验收(2026-09-29,脚手架阶段)
|
||||
|
||||
- 范围:`git diff --name-only` 在 `scripts/rectification/`、`active_rectification_event_engine.py`、`frontend/` 上为 0 个文件;三份结果 JSON 的 `verdict` 全部 `pending_v5`、`dataset: v4`。
|
||||
- 测试:`test_scoring_research.py` + `test_rectification_validation_integrity_gate.py` + `test_repo_privacy_markers.py` + `test_minute_resolution_research.py` + `test_cluster_width_research.py` = 117 passed(`PYTHONHASHSEED=0`)。
|
||||
- 已 rebase 到 `origin/staging`(BUG_HISTORY 与报告两单、上游同步 3 同时追加,冲突按编号顺序保留两侧)。
|
||||
- 结论:脚手架通过,合入 staging。判定阶段等 `TASK-rectification-holdout-expansion-20260929` 交付 v5 后再跑;届时先解决 `percent` 口径后验过自信(执行方缺口 2),并按方案矩阵重出六题(缺口 3)。
|
||||
- R-A / R-B 判定为负,**不立实现单**;BUG-560 维持 blocked。
|
||||
- R-C 与同子集基线比无一致收益,不立实现单;产品若仍想做"只追问一件落在候选分歧点的经历",是交互层面的决定(额度按 09-26「定向追问 2 条」),本研究给不出精度理由。
|
||||
- 六道题由线上矩阵出一次、各方案共用;已验证按方案矩阵重出题结果相同。
|
||||
- 大运边界邻近项按线上原样附加、未重加权(R-A 判负后无需再测)。
|
||||
- 本机无 `.venv`,用系统 python3;`frontend/node_modules` 为软链,未入库。
|
||||
|
||||
@@ -256,7 +256,7 @@
|
||||
| `TASK-mobile-chart-and-confirmed-edit-20260929.md` | `PROGRESS-mobile-chart-confirmed-edit-20260929.md` | **手机星盘 + 确认时间可改 + 天空定格**:iPhone 星盘被宽表撑出屏幕(BUG-1083);confirmed 状态改声明字段也重置排盘时间(推翻 BUG-264 约定);「那一刻的天空」改为重放汇聚→定格→右上角分享;去掉报告星图封面 | 已验收(Claude 2026-09-29),已推 staging | BUG-1083 |
|
||||
| `TASK-rectification-futile-collect-stop-20260929.md` | `PROGRESS-rectification-futile-collect-stop-20260929.md` | **生时校正停掉无效补经历循环(止血)**:打字经历不收窄(BUG-560 后果),流程却一路索要,真机 22 件整窗不动;采集只为开闸、门开后只问点选卡问完即出卡;交付正文去吻合率;多段时旁白误报「范围没变」;交付轮带采集题 | 已验收(Claude 2026-09-29 合并验收:全量前端 4302/24 与基线同 24 条环境失败、tsc 0、lint 0 error、`/` Static、gzip +0.16%、快速门 pytest 1001 passed、两份回放复跑一致),待部署核对 | BUG-1084~1087 |
|
||||
| `TASK-rectification-holdout-expansion-20260929.md` | `PROGRESS-rectification-holdout-expansion-20260929.md` | **开放评价集扩到 ≥60 例(v5)**:所有打分判定都在 20 例上做,1 例 = 5pp,KP / 精度闸 / V1n 的 no_benefit 都只差 1–3 例。只用 Rodden AA 公开名人,事件人工核对出处,分层(年代 / 纬度 / 南半球 / 跨午夜 / UTC+8),v4 不动;基线成绩单 v4 子集须与已发布数字逐格一致。研究单的判定以 v5 为准 | 已验收(Claude 09-29:77 例、v4 子集数字逐格一致、抽样 6 例来源一致、冻结文件零改动;UTC+8 5/6 为数据可得性缺口,接受;已合入 staging)→ 研究单判定可开工 | 分支 `codex/rectification-holdout-expansion-20260929`(BUG-1090) |
|
||||
| `TASK-rectification-scoring-research-20260929.md` | `PROGRESS-rectification-scoring-research-20260929.md` | **打分方法研究(离线)**:R-A 似然比校准权重(leave-one-case-out,KP / Pranapada / D60 作为特征由数据定权重、允许负权重)、R-B 缺席证据(口述时间线覆盖时段内的空白年扣分,必测漏说稳健性)、R-C 精度追问可行性(对已说事件追问月份,算在定向追问 2 条额度内)。判定必须在 v5 上做;有收益才立实现单并按 ERR-110 重冻结 | 脚手架已验收(Claude 09-29:对账 60 case-radius 0 差、JSON 复跑逐字节一致、冻结文件零改动、117 测试全绿;已合入 staging);R-A / R-B / R-C 判定待 v5 | 分支 `codex/rectification-scoring-research-20260929`(BUG-1091 investigating) |
|
||||
| `TASK-rectification-scoring-research-20260929.md` | `PROGRESS-rectification-scoring-research-20260929.md` | **打分方法研究(离线)**:R-A 似然比校准权重(leave-one-case-out,KP / Pranapada / D60 作为特征由数据定权重、允许负权重)、R-B 缺席证据(口述时间线覆盖时段内的空白年扣分,必测漏说稳健性)、R-C 精度追问可行性(对已说事件追问月份,算在定向追问 2 条额度内)。判定必须在 v5 上做;有收益才立实现单并按 ERR-110 重冻结 | 脚手架已验收(Claude 09-29:对账 60 case-radius 0 差、JSON 复跑逐字节一致、冻结文件零改动、117 测试全绿;已合入 staging);**v5 判定已做待验收**(Claude fork 09-30,77 例留一法):R-A / R-B 六格全部不过硬红线 1、无稳定特征,打分层不立实现单(BUG-1091 closed_by_design);R-C 同子集比无一致收益;对账 231/231 差 0,两次复跑逐字节一致 | 分支 `codex/rectification-scoring-research-20260929`(BUG-1091 closed_by_design) |
|
||||
| `TASK-rectification-typed-event-scoring-research-20260929.md` | `PROGRESS-rectification-typed-event-research-20260929.md` | **打字经历按选择题规则计分(离线研究,不上线)**:计分通道不对称 + 已入账年份挡题;R0 学业质量题措辞 / 年精度显示成 1 月(冻结文件,需重新冻结) | 已验收(Claude 2026-09-29 合并验收:全量前端 4302/24 与基线同 24 条环境失败、tsc 0、lint 0 error、`/` Static、gzip +0.16%、快速门 pytest 1001 passed、两份回放复跑一致),待部署核对 | BUG-1088、1089 |
|
||||
| `TASK-report-reader-polish-20260929.md` | `PROGRESS-report-reader-polish-20260929.md` | **报告页打磨**:生成入口挪进页面主体(删标题栏按钮)、详情页到底部按钮(懒渲染一次到底)、导出按钮带文字、目录一级/二级分层、去掉「字段」与 RL/NL 缩写表头、状态列同义重复去重、报告表格淡底色、分块导出显示真实文件大小 | Claude 直接执行并自验(tsc 0、lint 0 error、全量 fail 与基线同 24 条、`/` Static、gzip +7 B、快速门 Python 1000 passed),已部署 staging `d7772011`,真机欠 | BUG-1092~1094 |
|
||||
| `TASK-report-english-edition-20260929.md` | `PROGRESS-report-english-edition-20260929.md` | **报告中英两版**:同一次引擎计算渲染 zh/en 两遍(不用模型翻译),瑜伽库 477 条补英文、模板与前端表头英文化;中文逐字节不变、英文零汉字、两版数字序列一致;阅读页 `?lang=en` 切换,导出当前语言 + 「问 AI 建议导出英文版」提示;旧报告不补英文 | Claude 直接执行(含两个 fork 子代理)并自验(tsc 0、lint 0 error、全量 fail 与基线同 24 条、`/` Static、gzip +0.06%、Python 定向全绿),已部署 staging `d7772011`,真机欠 | — |
|
||||
|
||||
Reference in New Issue
Block a user