research(rectification): preregister nadi second-level rules before v5 (BUG-1240)

Lock the N1–N5 rules, grids, placebos, seeds, and gates before the first
scoring run on the public v5 cases. Later changes cannot decide the gate.
This commit is contained in:
jesse-ux
2026-10-05 23:26:05 +08:00
committed by Jesse_Chen
parent a855512ecc
commit b64b590a99
@@ -0,0 +1,116 @@
{
"id": "nadi_seconds_preregistration_2026_10_05",
"dataset": "references/real_case_calibration/minute_rectification_holdout_v5.json",
"event_cutoff": "2026-09-14",
"ayanamsa": "raman",
"node_mode": "mean",
"locked_before_v5_scoring": true,
"grids": {
"coarse_radius_seconds": 600,
"coarse_step_seconds": 5,
"fine_radius_seconds": 120,
"fine_step_seconds": 1
},
"rules": {
"computed": ["A4", "A5", "B1", "B2", "B3", "B4", "B5", "N5A", "N5B"],
"n1_primary": ["A4", "A5", "B2"],
"n2_primary": "A5",
"n3_primary": "A5",
"n5_primary": ["N5A", "N5B"],
"definitions": {
"levels": "五层 Vimshottari 用生产递归:dasha_analyzer.build_dasha_timeline 之后再四次 build_antardasha。第 1 层是大运,第 4 层是 Sookshma,第 5 层是 Prana。前三层必须与 _active_vimshottari 对账。calculate_five_level_dasha 不是计分链。",
"targets": "领域目标宫主只读 DOMAIN_CONFIG 与 _house_lords,不改映射,也不乘辅助分。命中是二值。",
"A4": "第 4 层主星属于该事件领域的目标宫主。",
"A5": "第 5 层主星属于该事件领域的目标宫主。",
"B1": "五层里至少 1 层主星属于目标宫主。探索项,不是过门规则。",
"B2": "五层里至少 2 层主星属于目标宫主。",
"B3": "五层里至少 3 层。探索项。",
"B4": "五层里至少 4 层。探索项。",
"B5": "五层全部属于目标宫主。探索项。",
"N5A": "等分 D150(calc_custom_varga,N=150)上升星座的宫主星属于目标宫主。",
"N5B": "同一颗 D150 宫主星出现在当天五层小运主星里。",
"classical_index": "动宫顺排、固宫逆排、变宫从中段起排,状态 variant_unverified。不进入任何过门,也不进入 N4 的文案触发。不抄录纳迪描述原文。",
"named_text": "blocked。仓库内没有可合法使用的 Chandra Kala Nadi 描述文本。"
}
},
"samples": {
"n1_min_day_events": 3,
"n2_min_day_events": 4,
"n1_expected_n": 43,
"note": "N1 与 N5 只用日精度事件不少于 3 件、且两种安慰剂都非空的例子。开工时数过,43 例两种安慰剂都齐全。比较行的 n 不是 43,就不是本登记的样本,不能判过门。取整组与非取整组分开列,判定用合并样本。"
},
"tests": {
"permutations": 9999,
"bootstrap_resamples": 5000,
"n1_permutation_seed_base": 20261007,
"n2_bootstrap_seed": 20261008,
"n2_random_second_seed": 20261009,
"n3_bootstrap_seed": 20261010,
"n5_permutation_seed_base": 20261011,
"seed_order": "N1 与 N5 都按主规则列表的顺序,每条规则先 P1 再 P2,种子是基数加 0、1、2…。因此 N1 为 A4-P1=20261007、A4-P2=20261008、A5-P1=20261009、A5-P2=20261010、B2-P1=20261011、B2-P2=20261012。N5 为 N5A-P1=20261011、N5A-P2=20261012、N5B-P1=20261013、N5B-P2=20261014。N2 随机对照的种子是字符串 20261009:{case_id}:{event_id}。N2 安慰剂日期的 bootstrap 种子是 20261008+1。N3b 的 bootstrap 种子是 20261010 加半径分钟数,所以 ±10 为 20261020,±30 为 20261040,±60 为 20261070。"
},
"placebo": {
"shift_low_days": 30,
"shift_high_days": 180,
"shift_seed_template": "20261005:{case_id}",
"swap_seed": 20261006,
"p1": "每件日精度事件的日期用 Random(20261005:{case_id}) 平移。幅度 randint(30, 180),符号 ±1。落在 (出生日, 2026-09-14] 之外就反向;仍在外面就按 365 天步长夹回,最后才用出生日之后 400 天并截到截止日期。领域留在原事件上。",
"p2": "把全部日精度事件按 (case_id, event_id) 排序后,用 Random(20261006) 打乱日期。领域留在接收方。日期夹回接收方的 (出生日, 截止日期]。置换以整例为单位。"
},
"statistic": {
"truth_minute_offsets": "0 到 59 秒,含两端。记录没有秒。真值分钟的拟合率是这 60 秒的平均。",
"fit_rate": "某一秒解释的日精度事件数,除以该例日精度事件数。",
"difference": "同一例上,真值分钟平均拟合率减去安慰剂日期在同样 60 秒上的平均拟合率。",
"test": "单侧配对符号翻转。极端值是置换均值大于或等于观察均值的次数。p = (极端值 + 1) / (置换次数 + 1)。过门看精确分数小于 0.05,并且均值大于 0。不看四舍五入到 6 位后的显示值。",
"window_mean": "粗网格上的平均拟合率,等于在粗网格里均匀抽一秒的期望。写入报告。它不是 N1 的过门对照。",
"fraction_all": "粗网格上能解释全部日精度事件的秒所占比例。A4、A5、B1、B2 都报。接近 100% 表示问前事对得上并不能分辨真假。这是诊断,不是过门。"
},
"n3_protocol": {
"radius_gate": 10,
"nadi_limit_seconds": 60,
"hit": "并列第一的偏移必须每一个都在限制内。空的并列是未命中。没有日精度事件时,全部秒并列,记为未命中。",
"n3a": "只按 A5 在粗网格上排序。报告 ≤60 秒与 ≤120 秒,并对照均匀随机(步长 5 秒时 |偏移|≤60 的格点数除以 241)和已发表的引擎先验头名 0.18。N3a 不参与过门。本运行不另做 N3a 的 ±30 / ±60 网格。",
"n3b": "复现六题回放的前半段:六次探测、不注入引导窗口,再取交付区间。区间内按 1 秒重排 A5。命中仍要求全部并列都在记录时间 60 秒内。对照是生产头名全部落在 1 分钟内。提升是纳迪命中减生产命中,整例 bootstrap,下界大于 0 才算提升。另报 any_exact,用来对照已发表的 0.64;那一列不是过门。真值在区间内须不少于 76/77。过门只看半径 10,且例数必须是 77。±30 与 ±60 只报告。",
"published_references": {
"engine_prior_top1_pm10": 0.18,
"six_question_any_exact_pm10": 0.64,
"cluster_head_pm10": 0.68,
"truth_in_range": "76/77",
"source": "docs/research/holdout_v5_build_2026_09_29.md"
}
},
"n4": {
"ayanamsas": ["raman", "lahiri", "kp", "true_citra"],
"time_offsets_seconds": [-60, -30, -15, 15, 30, 60],
"longitude_shifts_km": [10, -10],
"node_mode_compare": "mean_to_true",
"sample": "至少有一件日精度事件的例子。第 4 / 第 5 层按事件加权。D150 用等分段号,按例子计。没有日精度事件的 4 例不进入这张表。",
"wording_trigger": "Raman 分别换成 Lahiri、KP、True Chitra。三次里只要有一次第 5 层事件变化率大于 0.20,或等分 D150 的例子变化率大于 0.20,对外文案就不得出现秒级。时间和地点扰动写入表,本身不触发这条例。交点 mean 与 true 单列,预期只动罗睺计都。古典段号不触发。"
},
"n2": {
"rule": "A5",
"grid": "coarse",
"design": "日精度事件不少于 4 的例子,留一件。其余事件在粗网格上的最高分,并列全部保留。被留出的事件在这些秒上被解释的比例,减去同数量随机秒上的比例。随机种子是 20261009:{case_id}:{event_id}。并列不少于整张网格时,随机对照就是整张网格。例子内先平均,再对例子做 5000 次 bootstrap。过门只看相对随机秒的区间下界大于 0。同一批领先秒上、把留出位置换成 P1 日期的差,只报告,不是额外门槛。"
},
"gates": {
"n1": "A4、A5、B2 对 P1 和 P2 共 6 项全部通过,且每项 n 为 43,且不是 --limit 子集。",
"n2": "相对随机秒的 bootstrap 下界大于 0,且不是子集。",
"n3": "半径 10 上,纳迪相对生产 ≤1 分钟命中的提升,bootstrap 下界大于 0,并且真值在区间内不少于 76/77,例数 77。",
"n4": "不过方法门。只决定对外是否还能说秒级。",
"n5": "N5A、N5B 对 P1 和 P2 共 4 项全部通过,且不是子集。低优先。原文比对保持 blocked。"
},
"not_a_gate": [
"N3a",
"N3 的 ±30 与 ±60",
"取整组与非取整组的拆分",
"古典 D150 段号",
"calculate_five_level_dasha 与生产链的差异",
"B1、B3、B4、B5",
"窗口平均拟合率",
"能解释全部事件的秒所占比例",
"N2 的安慰剂日期对照",
"N3b 的 any_exact 复现列",
"N4 的时间扰动与地点扰动"
],
"after_the_fact": "看过 v5 结果之后改过的规则、阈值或种子,只能写进研究文档的事后列,不能用来判过门。"
}