chore(rectification): re-freeze sealed holdout and offset sweep once for the merged audit wave 2 (ERR-110)
Independent Staging Quality Gate / validate-frontend (push) Successful in 6m27s
Independent Staging Quality Gate / validate-python (push) Successful in 6m34s
Independent Staging Quality Gate / publish (push) Successful in 3m1s

G (BUG-1560/1561: varga.py, divisional_charts_extended.py), H (BUG-1566/1567:
jaimini.py) and J (BUG-1270/1576: shadbala.py) each changed frozen identity
files and each froze its own audit_g / audit_h / audit_j record, which only
matches that branch's tree. Per ERR-110 the merged tree is frozen once as
audit_wave2_2026_11_04 (FREEZE/REPORT constants first, --freeze, then replay).
The contract now points at audit_wave2 with moon_paksha_2026_11_04 as the
previous record; the per-branch records are kept byte-for-byte and named as
intermediate in the superseded_reason notes. Freshness test and frontend gate
test updated.

Compared field by field with moon_paksha_2026_11_04: sealed holdout 20/20
trials identical, metrics unchanged; reported offset 900/900 identical,
summary unchanged; changed_trial_count vs 2026-09-20 stays 8 / 581.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
This commit is contained in:
2026-11-04 17:24:31 +08:00
co-authored by Claude Opus 5.5
parent 1cdd9c827c
commit 607a48b6c3
11 changed files with 44741 additions and 49 deletions
+3 -3
View File
@@ -21376,7 +21376,7 @@
- 根因:D16 / D20 / D45 应按动 / 定 / 变星座定起点,D27 应按火土风水定起点,代码却一律写成「奇数星座从白羊、偶数星座从狮子 / 射手 / 天秤」;D30 偶数星座的宫主次序是金 5、水 7、木 8、土 5、火 5(金牛、处女、双鱼、摩羯、天蝎),代码写成 12–20° 摩羯、20–25° 天蝎、25–30° 双鱼,段长对、星座错。同仓 `shadbala._d30_sign` 本来就是对的。
- 修复:按 BPHS 第 6 章(Santhanam 英译;PVR《Vedic Astrology: An Integrated Approach》第 6 章同表)改 `varga_map`:D16、D45 动白羊 / 定狮子 / 变射手;D20 动白羊 / 定射手 / 变狮子;D27 火白羊 / 土巨蟹 / 风天秤 / 水摩羯。D3、D7、D9、D10、D12、D24、D40、D60 本来就对,未动。D30 偶数星座(应为 12–20° 双鱼、20–25° 摩羯、25–30° 天蝎)这次没有改,代码处加了 KNOWN DEFECT 注释:先改过一次并按 ERR-110 重冻回放,生时校正结果变了(见下),快速门 `test_rectification_engine_memoization` 8 条、`test_rectification_dated_transitions` 1 条 golden 转红,按 BUG-1260 / BUG-1275 先例要升 `rectification-v5-matrix-scoring-13`、新增 memoization golden v6,属于产品决定,故撤回。`references/shodasavarga-complete-guide.md` 里 D4、D10、D24、D27、D30、D40 的起算说明一并改正(D24 写成「从本星座起」、D40 写成「动定变」等,与 BPHS 不符)。
- 验证:新增 `tests/test_varga_bphs_starts_audit_g.py`(D16/D20/D27/D40/D45 每个星座每一份对独立写出的 BPHS 表,`varga` 与 `divisional_charts_extended` 两处;D30 每 0.1° 对 BPHS,`divisional_charts_extended`、`trimshamsa_d30`、`shadbala` 三处一致;装了 PyJHora 时逐份对 PyJHora 方法 1;`varga.py` 偶数星座 D30 用 strict xfail 锁住这条已知缺陷,修了就必须去掉标记)。在 origin/staging 的代码上,D16/D20/D27/D40/D45 与 D30 的断言都失败。19 张盘复跑:同经度下 D16/D20/D27/D45 190 / 190 与 PyJHora 一致(改前 14–27%);`varga.py` 的 D30 仍是 70–72%。
- 冻结身份(ERR-110):`varga.py` 在生时校正冻结身份里。按 ERR-110 改 FREEZE / REPORT 常量后 `--freeze` 新建记录并回放,标签 `audit_g_2026_11_04`,合同 `references/rectification_sealed_holdout.v1.json` 按 11-04 先例轮换,旧记录逐字节保留。与 `moon_paksha_2026_11_04` 逐条逐字段比:密封 20 条、报时窗口 900 条全部相同,`metrics`、`summary` 不变,相对 09-20 历史报告的 changed_trial_count 仍为 8 / 581(D16/D20/D27/D45 与 `divisional_charts_extended` 都不进校正打分)。撤回前(含 D30 改正)那次回放的结果留作产品决定的依据:密封 20 条里 3 条变(第 5 例 true_rank 1 → 3、minute_error 1 → 9,第 18 例 12 → 10,第 14 例只有 sparse_trial_reasons),top_1_rate 0.50 → 0.45、平均分钟误差 6.65 → 7.05;报时窗口 900 条里 166 条变(true_rank 前移 37、后移 118,top_1_minute_error 29 条),头名命中 46 / 900 与交付覆盖 818 / 900 不变,900 条平均分钟误差 19.79 → 19.51。只把 D30 偶数表换回旧表即与 `moon_paksha_2026_11_04` 逐条相同,变化全部来自 D30。
- 冻结身份(ERR-110):`varga.py` 在生时校正冻结身份里。按 ERR-110 改 FREEZE / REPORT 常量后 `--freeze` 新建记录并回放,标签 `audit_g_2026_11_04`,合同 `references/rectification_sealed_holdout.v1.json` 按 11-04 先例轮换,旧记录逐字节保留。与 `moon_paksha_2026_11_04` 逐条逐字段比:密封 20 条、报时窗口 900 条全部相同,`metrics`、`summary` 不变,相对 09-20 历史报告的 changed_trial_count 仍为 8 / 581(D16/D20/D27/D45 与 `divisional_charts_extended` 都不进校正打分)。撤回前(含 D30 改正)那次回放的结果留作产品决定的依据:密封 20 条里 3 条变(第 5 例 true_rank 1 → 3、minute_error 1 → 9,第 18 例 12 → 10,第 14 例只有 sparse_trial_reasons),top_1_rate 0.50 → 0.45、平均分钟误差 6.65 → 7.05;报时窗口 900 条里 166 条变(true_rank 前移 37、后移 118,top_1_minute_error 29 条),头名命中 46 / 900 与交付覆盖 818 / 900 不变,900 条平均分钟误差 19.79 → 19.51。只把 D30 偶数表换回旧表即与 `moon_paksha_2026_11_04` 逐条相同,变化全部来自 D30。合入 staging 时(分支 `codex/audit-wave2-integration-20261104`)G / H / J 三支一起合并,各支的 `audit_g` / `audit_h` / `audit_j` 记录只对各自分支的代码成立,原样保留为中间记录;在合并后的代码上按 ERR-110 只重冻一次为 `audit_wave2_2026_11_04`,合同上一份指回 `moon_paksha_2026_11_04`。逐条逐字段比:密封 20 条、报时 900 条全部相同,`metrics`、`summary` 不变,changed_trial_count 仍为 8 / 581。
- 防复发:上述测试与 strict xfail;分盘起点只在 `varga_map` 一处写,`divisional_charts_extended` 的 D16/D20/D27/D40/D45 也改为读它(BUG-1561)。对照外部引擎前先确认两边方法编号(PyJHora 每张分盘有 3–6 种方法,默认方法 1)。动分盘表前先查它是否进校正打分(`active_rectification_event_engine`、`minute_rectification_feature_facts_v4` 读 D2/D3/D4/D5/D7/D9/D10/D12/D24/D30)。
- 关联记录:BUG-1500(D60)、BUG-1561、BUG-1562。
- 复发自:无
@@ -21438,7 +21438,7 @@
- 根因:`_jaimini_stronger_planet` 用大运星座(天蝎 / 水瓶)本身判断两颗主星的尊贵,与它们实际所在星座无关:天蝎里计都「入旺」永远胜火星,水瓶里土星「本宫」永远胜罗睺,结果与盘面无关;也没有「一主在本宫、另一主在外,取在外者」这条(K.N. Rao《Predicting through Jaimini's Chara Dasha》;Rath《Narayana Dasa》p.43 (c);PyJHora basic rule;`references/prashna-complete-guide.md` 双主星第 1 条)。函数注释说「基于 PyJHora _stronger_planet_new」,实际没有照它的次序。
- 修复:一主在本宫、另一主在外,取在外者;两主都在外,按各自所在星座比:① 同宫星数多者;② 木星 / 水星 / 定位星同宫或星座相照者多;③ 所在星座尊贵(旺 > 本宫 > 其他 > 落);④ 双体 > 固定 > 活动;⑤ 星座内度数大者;最后天然力量。次序与 PyJHora、Rath p.43 (d)、prashna 指南一致。两主都在本宫仍按比较结果(年数都是 12),未改。
- 验证:`tests/test_audit_h_dasha_sky_20261104.py`(布什、泰勒、乔布斯三张公开盘两种岁差的天蝎 / 水瓶年数等于 PyJHora 参照值,只存数字;一主在本宫取另一主;两主都在外时随盘面翻转);`tests/test_chara_dasha_board_lord.py` 一条按「原值 / 新值 / 原因」改写(计都在天蝎、火星在天秤:原值 计都 / 天蝎,新值 火星 / 天秤),另加一例火星在天蝎时取计都。修复后与 PyJHora 年数 225/228(Raman)、226/228(Lahiri),剩余差异均为 PyJHora 自己的取法:把上升算作同宫星(东京盘天蝎、齐达内 Raman 水瓶),尊贵一步只认入旺、第二颗星的入旺判断写成和自己比(伦敦盘天蝎)。K.N. Rao 书中越南女士例(1958,Lahiri)前 5 段星座与年数(含水瓶 3 年)与原书一致。前端金样 `chart-view-golden.json`、`chara-zero-year-1985-08-03-beijing.golden.json` 的 Chara 段按同一张盘的经度用修复后的引擎重采(前者天蝎宫主计都 8 年 → 火星 4 年,两份的小运次序随 BUG-1567 变),先用改前代码重算与原金样逐字节相同,确认输入一致;读它们的前端测试 256 条通过。咨询数据卡两份大金样(`consult-evidence-card-golden.json`、`consult-biography-backtest-golden.json`)里的 `chara_dasha` 仍是旧引擎采样(乔布斯天蝎宫主计都、水瓶 5 年),未重采,下次整体重采时更新。`tests/test_rashi_dashas_native.py` 的 PyJHora 4.8.7 对照(乔布斯、奥巴马、爱因斯坦)三盘 Chara 年数改前各差一段,改后与 PyJHora 逐段相同,fixture 的 `native.chara.years` 与 `diff_steps` 按「原值 / 新值 / 原因」更新(PyJHora 行未动)。
- 冻结身份(ERR-110):`jaimini.py` 在生时校正冻结身份里(校正只用 `calc_arudha_padas`,未改)。与 BUG-1567 一起按 ERR-110 改 FREEZE / REPORT 常量后用各脚本 `--freeze` 新建记录并回放,标签 `audit_h_2026_11_04`(`docs/research/sealed_holdout_rerun_audit_h_2026_11_04.{freeze.json,json}`、`docs/research/reported_offset_audit_h_2026_11_04.{freeze.json,json}`),合同 `references/rectification_sealed_holdout.v1.json` 按 moon_paksha 先例轮换,旧记录逐字节保留。与 `moon_paksha_2026_11_04` 逐条逐字段比:密封 20 条全部相同、`metrics` 不变;报时窗口 900 条全部相同、`summary` 不变(只有冻结身份哈希与路径不同);相对 09-20 历史报告的 changed_trial_count 仍为 8 / 581。符合预期:校正打分只调 `jaimini.calc_arudha_padas`,Chara Dasha 不进打分。
- 冻结身份(ERR-110):`jaimini.py` 在生时校正冻结身份里(校正只用 `calc_arudha_padas`,未改)。与 BUG-1567 一起按 ERR-110 改 FREEZE / REPORT 常量后用各脚本 `--freeze` 新建记录并回放,标签 `audit_h_2026_11_04`(`docs/research/sealed_holdout_rerun_audit_h_2026_11_04.{freeze.json,json}`、`docs/research/reported_offset_audit_h_2026_11_04.{freeze.json,json}`),合同 `references/rectification_sealed_holdout.v1.json` 按 moon_paksha 先例轮换,旧记录逐字节保留。与 `moon_paksha_2026_11_04` 逐条逐字段比:密封 20 条全部相同、`metrics` 不变;报时窗口 900 条全部相同、`summary` 不变(只有冻结身份哈希与路径不同);相对 09-20 历史报告的 changed_trial_count 仍为 8 / 581。符合预期:校正打分只调 `jaimini.calc_arudha_padas`,Chara Dasha 不进打分。合入 staging 时(分支 `codex/audit-wave2-integration-20261104`)G / H / J 三支一起合并,各支的 `audit_g` / `audit_h` / `audit_j` 记录只对各自分支的代码成立,原样保留为中间记录;在合并后的代码上按 ERR-110 只重冻一次为 `audit_wave2_2026_11_04`,合同上一份指回 `moon_paksha_2026_11_04`。逐条逐字段比:密封 20 条、报时 900 条全部相同,`metrics`、`summary` 不变,changed_trial_count 仍为 8 / 581。
- 防复发:上述测试;同名「动态判定」函数要用盘面上的位置,不能用被判定的星座代入。
- 关联记录:BUG-1567(同轮 Chara 小运)、BUG-1218 / BUG-1227(Narayana Rath 版双主星,p.43)、issue #163。
- 复发自:无
@@ -21574,7 +21574,7 @@
- 根因:照射星是从集合 `benefics | malefics` 里取出来求和的,集合的顺序随字符串哈希种子变化;浮点数加法的顺序不同,最后在 0.005 边上 `round(…, 2)` 就会舍到不同的一边。
- 修复:按星名排序后求和,用整数的 0.01 单位累加,四分之一按「四舍五入,远离零」取到 0.01(`Decimal` 的 ROUND_HALF_UP)。水星平票时的同宫星列表也排序。没有改公式、表和吉凶分类。相对一次随机种子的旧结果,140 个 Drik 值里有 14 个变了 0.01。
- 验证:新增 `tests/test_shadbala_drik_deterministic.py`:5 张盘,PYTHONHASHSEED 0–7 的结果必须完全相同;伦敦土星 86.18 / 4 = 21.545 → 21.55,圣保罗木星 −184.38 / 4 = −46.095 → −46.10。Raman 例 55、PyJHora 同盘对照(容差 0.02)、VP Jain 对照(容差 1)仍然通过。
- 冻结身份(ERR-110):与 BUG-1270 一起重冻为 `audit_j_2026_11_04`,结果见 BUG-1270 的解决段。
- 冻结身份(ERR-110):与 BUG-1270 一起重冻为 `audit_j_2026_11_04`,结果见 BUG-1270 的解决段。合入 staging 时(分支 `codex/audit-wave2-integration-20261104`)G / H / J 三支一起合并,各支的 `audit_g` / `audit_h` / `audit_j` 记录只对各自分支的代码成立,原样保留为中间记录;在合并后的代码上按 ERR-110 只重冻一次为 `audit_wave2_2026_11_04`,合同上一份指回 `moon_paksha_2026_11_04`。逐条逐字段比:密封 20 条、报时 900 条全部相同,`metrics`、`summary` 不变,changed_trial_count 仍为 8 / 581。
- 防复发:回归测试;凡是要四舍五入的浮点求和,都不能按集合的顺序加。
- 关联记录:BUG-1270(同轮)、BUG-1545(当时的记录:「换 PYTHONHASHSEED 结果相同」,说的是校正排名,没有检查 Drik 本身)。
- 复发自:无
+1
View File
@@ -22,6 +22,7 @@ Purpose: read this file before substantial project work. It exists to stop repea
- 数据核对 H(worktree `/workspace/wt-h`,`codex/audit-dasha-sky-20261104`):`pre_work_check.py` exit 0、六项全部 ok。Narayana / Chara / 行运 / 日出 / Gulika 两种岁差各 19 张盘对 PyJHora 与 Swiss 直算:行运 190/190、Hindu 日出与 PyJHora 0 秒、Narayana Rath 版差异全是流派(起运宫、双主星、水星处女),第二轮规则与 PyJHora 同;修 BUG-1565(夜段时段点表错一格)、BUG-1566 / 1567(K.N. Rao Chara 双主星、小运次序)、BUG-1568(日出前出生的星期)、BUG-1569(四个对照脚本岁差)。`jaimini.py` 在冻结身份里,按 ERR-110 重冻为 `audit_h_2026_11_04`:密封 20 条、报时 900 条与 `moon_paksha_2026_11_04` 全同。教训:① PyJHora 4.8.6 夜生的 Gulika / 时段点算法本身错(以次日日出为起点、钟点差作夜长),夜生盘不能拿它作对照,要用 Swiss 独立重算;② 一个函数名叫「动态判定」不等于真按盘面判定,对照时先看结果是否随盘面变;③ 同机多会话同时跑报时回放与全量测试,相关测试 91 个文件跑了一个多小时,比对改前改后要用同一时段的两个 worktree 并行跑。`test_narayana_rath_book_tables.py::test_rath_profile_is_display_only` 在未改动的基线上就失败(`scripts/annual_service/package.py` 导入 `narayana_rath`)。
- 数据核对第二波 I 瑜伽与功能吉凶(worktree `/workspace/wt-i`,`codex/audit-yoga-roles-20261104`):`pre_work_check.py` exit 0。两边显式 Raman + 平均交点,19 张盘上升与行星星座 0 差。BUG-1571:规则表里的 custom 表达式还在调 06-27 改名前的 `pyjhora_*` 辅助函数,NameError 被吞,9 条瑜伽从未成立;BUG-1572:`_eval_parivartana` 不解析 any_pair 的 "$a"。教训:yoga 引擎「表达式出错 = 不成立」,改名 / 改签名后必须跑全表静态扫描(新测试已加),「某条瑜伽 19 张盘 0 次」先当成检测器坏了查。BUG-1570:白羊 / 天蝎金星按 BPHS 34.20 / 34.35 应判凶,试改后报时窗口头名掉 3~5 个百分点(108 / 900 条变),按红线撤回,待产品决定;只动 `yoga_engine.py` / `yoga_rules.json`(不在冻结身份里)时,密封 20 条、报时 900 条与 `moon_paksha_2026_11_04` 逐条相同,未重冻。`run_yoga_accuracy.py` 只用手写星座 / 宫位,不排盘,不涉及岁差。
- 数据核对 J:Sthana / Dig / Drik(worktree `/workspace/wt-j`,`codex/audit-shadbala-rest-20261104`):`pre_work_check.py` exit 0。本仓与 PyJHora 在 19 张盘加乔布斯盘上 Dig 140 / 140「一致」,但两边用的是同一个没折回的函数(PyJHora `_dig_bala`;它自己的 `_dig_bala_another` 是折回的)。这是第二次出现「两家一致 = 两家同错」(BUG-1546 之后)。BUG-1270 已按 BPHS 27.7 和 Raman GBB 例 14–15 修好。同一份经度两次复算,Drik 差了 0.01:求和顺序跟着 PYTHONHASHSEED 变,记为 BUG-1576,已修。两个修复一起重冻为 `audit_j_2026_11_04`。比较前后两次运行时,要固定 PYTHONHASHSEED,或者先确认被比较的函数本身是确定的。教训:对照某个外部引擎时,先查这个引擎有没有同一分量的多种写法,几种都跑一遍,再拿原书的例题核对。Sthana 和 Drik 用 Raman 标准盘例 13、例 55 逐项吻合。jyotishganit 在本机跑需要 Hipparcos 星表,下载被 SSL 拦截,改用 Spica 的 J2000 星表值替代;七星经度与 Lahiri 相差不超过 0.022°。jyotishganit 的上升点比我们晚约 1.08°,Piaf 和 Kahlo 两张盘的上升换了星座,不要把它的 Kendra / Dig 当对照。`jyotish_engine.MOOLATRIKONA` 里月亮写成金牛 0–3°,记为 BUG-1575,未修。全量 Shadbala 相关测试在负载 69 的机器上很慢,基线放在独立的干净 worktree(`/workspace/wt-j-base`)里跑,不占用改动中的 worktree。
- 数据核对第二波合并(worktree `/workspace/wt-int2`,`codex/audit-wave2-integration-20261104`,基于 staging 8f15745c):G、H、I、J 依次 `--no-ff` 合并。G / H / J 各自的 `audit_g` / `audit_h` / `audit_j` 冻结记录只对各自分支的代码成立,合并后的代码上哪一份都不是当前记录;合并时合同、FREEZE / REPORT 常量与两份门测试先保持 G 的状态,最后按 ERR-110 只重冻一次为 `audit_wave2_2026_11_04`,合同上一份指回 `moon_paksha_2026_11_04`,三份分支记录逐字节保留为中间记录。与 `moon_paksha_2026_11_04` 逐条逐字段比:密封 20 / 20、报时 900 / 900 全同,`metrics`、`summary` 不变,changed_trial_count 仍为 8 / 581。冲突只在文档(BUG_HISTORY、台账、CHANGELOG 全部保留)、冻结合同与 `run_chara_dasha_compare.py`(G、H 都改了岁差传参,取 H 的写法)。注意:`tests/test_narayana_rath_book_tables.py::test_rath_profile_is_display_only` 在 staging 8f15745c 上就失败(`scripts/annual_service/package.py` 也引用 `narayana_rath`),不是本轮造成。
## 2026-11-03 · 输入框单行起步(方案 2,worktree `/workspace/wt-composer`)
@@ -0,0 +1,118 @@
{
"record_version": "reported-offset-native-candidate-date-v3",
"frozen_at_utc": "2026-11-04T09:06:20.032962+00:00",
"ayanamsa": "raman",
"node_mode": "mean",
"radii_minutes": [
15,
30,
60
],
"offsets_minutes": [
-30,
-20,
-15,
-10,
-8,
-5,
-3,
0,
3,
5,
8,
10,
15,
20,
30
],
"minute_step": 1,
"dataset": "references/real_case_calibration/minute_rectification_holdout_v3.json",
"dataset_sha256": "45aa76ab79dfc6c6404b6252083e1aa5c7e2e2b7de811fc11042a8ad2da3f0ea",
"dataset_benchmark_id": "minute_rectification_fact_ranker_v4_holdout_v3",
"implementation_sha256": "6911e686575d0b4ea1a6b17682c4557811ac79366e59ccaecaea504892043dad",
"implementation_sha256_prefix": "6911e686575d0b4e",
"historical_artifacts_manifest_sha256": "6102a26a840be207b5858b3a4c0509274468ae9071e86d308cbbac7371d6864e",
"production_scoring_files": [
"scripts/active_rectification_event_engine.py",
"scripts/active_rectification_events.py",
"scripts/ashtakavarga.py",
"scripts/dasha_analyzer.py",
"scripts/divisional_charts_extended.py",
"scripts/domain_calculation_service.py",
"scripts/functional_benefics.py",
"scripts/jaimini.py",
"scripts/minute_rectification_fact_ranker_v4.py",
"scripts/minute_rectification_feature_facts_v4.py",
"scripts/narayana_dasha.py",
"scripts/rectification/api_service.py",
"scripts/rectification/candidate_contrast.py",
"scripts/rectification/candidate_window.py",
"scripts/rectification/case_holdout.py",
"scripts/rectification/contracts.py",
"scripts/rectification/dasha_transition_proximity.py",
"scripts/rectification/decision_policy.py",
"scripts/rectification/event_probes.py",
"scripts/rectification/refinement_packet.py",
"scripts/rectification/scoring_service.py",
"scripts/shadbala.py",
"scripts/varga.py"
],
"production_scoring_sha256": "c67128293d994c55f99d1c0dc444261fd828182d9bf6f098a371403037524ab2",
"research_files": [
"scripts/research/reported_offset_sweep.py",
"scripts/research/cluster_width_lib.py",
"scripts/research/probe_supply_after_six.py",
"scripts/research/sealed_holdout_rerun.py",
"scripts/minute_rectification_blind_eval.py",
"scripts/minute_rectification_fact_blind_eval_v4.py",
"scripts/minute_rectification_holdout_validator.py"
],
"research_implementation_sha256": "27107a247e1fab7d4e2148f8105a20fa040ab4ec2767f3ca40e63772cc7165f5",
"file_sha256": {
"scripts/active_rectification_event_engine.py": "dced0b398ad90bdec59c743a55ffe01613306127c17a1e44c8c9cfb569c57841",
"scripts/active_rectification_events.py": "03e333ccf1103caf685dfe50fe890ab1793e945037085f50ce834a4a3b232222",
"scripts/ashtakavarga.py": "c524da3f54b2ed9c080b78b33854854a0ca3d5d79b7e536bb1c3bc2be3e02852",
"scripts/dasha_analyzer.py": "3949b96813217fe624899856afec9f0b787c4cb0fea3a9a0d961990dbd11943a",
"scripts/divisional_charts_extended.py": "6050ee6706d0f27b8c406b1c06ac5b49cf6f13814a3f930d944598892650ed92",
"scripts/domain_calculation_service.py": "66923a2bc69daf65c965d2973c4b9234edbec5147909eaf3609b6b377ce3c7ca",
"scripts/functional_benefics.py": "cbaac3b8c09b97f8724b5300e9a402cbf77089af6c7db8788550d40fd35ac57b",
"scripts/jaimini.py": "706d20dcff89079063fd1857a36f19419604ef81c80227921c7a2ced60011ac9",
"scripts/minute_rectification_blind_eval.py": "07aa30d8bad3278669495d5fea8be937aaf6367c8af980ff4f2fe9aa84ccc6ff",
"scripts/minute_rectification_fact_blind_eval_v4.py": "bdf460e3467208e8b87345c5beb2128f3e22de7eeffd68f72b281b3ad9affc92",
"scripts/minute_rectification_fact_ranker_v4.py": "f1a0d8d2482cd754d2e7f253a9606b0373519435a2bf58cfc3753e2b9ae0fb76",
"scripts/minute_rectification_feature_facts_v4.py": "3d899a2cdd4825b8e32062443d487edcd2173a4ea55a36eb9f3abe587c0faf0f",
"scripts/minute_rectification_holdout_validator.py": "b60b1c752e58672beaee8b36eb3b2348169726cda070ec969db0f13e7ed715af",
"scripts/narayana_dasha.py": "9a847d3b8d05f90d4f275079c97af1f71e83a74f930e14bd8f3f37b293d91d1e",
"scripts/rectification/api_service.py": "089730097d3872a4f7b5d7dd5574bb7e9ab4d2e246d4a380800bc824d7979b95",
"scripts/rectification/candidate_contrast.py": "eee7da71c0574a08876404b78ca111153fa95fb83ace82b9fdca141d1992e273",
"scripts/rectification/candidate_window.py": "2fbc5058b12049b15fca375cdc125b8283e19f9f3e4bedcc291e344501891bef",
"scripts/rectification/case_holdout.py": "fe0e699b617d9e216acdfeff87af4221c1d6f4c101bf33e1dbf14e2bcd75a8b5",
"scripts/rectification/contracts.py": "c6dc6bd230e38f9f2126c224aae9ddbd6415304c15340f8c7cd3f06f6ef3160f",
"scripts/rectification/dasha_transition_proximity.py": "5ce4ed27b0f06c681abc34e5fd998fafb10c153a0070aa36c99ddfa869a2cbf2",
"scripts/rectification/decision_policy.py": "80e8de4680d19a052213bb821d2a9c94143a2962235aeb27f6ad81374d2e60d5",
"scripts/rectification/event_probes.py": "f5ca9d54501f67a1546fcf5b01da0c1277dec2e2c6df481884e8900d14909a7c",
"scripts/rectification/refinement_packet.py": "dbeea5aa780889785ce850f3881e8b7f67bb44594e9bc382c65b2e730884a2f4",
"scripts/rectification/scoring_service.py": "fa056fa30d9e6ffa4b75295fc49c793e35b26ebeca64ca843d26c8abef3050f2",
"scripts/research/cluster_width_lib.py": "1d8f2ffa7795d62069deebb2de8e16749317037d4ed3f24a2c0092676e5cfcc6",
"scripts/research/probe_supply_after_six.py": "098a5b4398d6f8d996917d809c2fc922ad64031d3b70660f8ef7c876aba92438",
"scripts/research/reported_offset_sweep.py": "fde2e27595546d6c607ba804dafe9e9f4a2a33f4ea67684c7aefc3cbe1caa4be",
"scripts/research/sealed_holdout_rerun.py": "97fdb9e30d7fc697439a692e1115b9e8ddaca6619788bb1654a7b8f4ecfb720d",
"scripts/shadbala.py": "6a586b504b45d96acf593393051b878b12068e80f2799fe0ebbea2d433658192",
"scripts/varga.py": "37813c5da7b619439880808c0c69cfedf5c4d2c5cedd0dd2296ed7ffa7282e13"
},
"hash_scope": "explicit_identity_file_sets_not_a_transitive_dependency_lock",
"scorer": "native_event_contribution_matrix_not_shadow_fact_ranker",
"delivery": "initial_signature_clusters_peak_gap_lt_8_envelope_no_answers_no_elimination",
"rank": "score_desc_then_sha256(benchmark_id:case_id:candidate_time)",
"grid": "every_minute_inclusive_not_production_two_minute_sampling",
"cross_midnight": "date_aware_candidates_distance_and_native_single_matrix",
"evaluator_sha256": "fde2e27595546d6c607ba804dafe9e9f4a2a33f4ea67684c7aefc3cbe1caa4be",
"replay_revision": "native_candidate_date_v3",
"supersedes": "candidate_date_grouped_v2_identity_and_path_not_assumed_numerically_wrong",
"is_blind_evaluation": false,
"truth_hidden_from_ranker": true,
"official_valid_independent_blind": false,
"official_blind_trial_count": 0,
"results_previously_seen": true,
"must_not_use_for_tuning": true
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,116 @@
{
"record_version": "exposed-v3-fixed-protocol-cross-midnight-rerun-v2",
"extended_identity": {
"historical_artifacts_manifest_sha256": "6102a26a840be207b5858b3a4c0509274468ae9071e86d308cbbac7371d6864e",
"production_scoring_files": [
"scripts/active_rectification_event_engine.py",
"scripts/active_rectification_events.py",
"scripts/ashtakavarga.py",
"scripts/dasha_analyzer.py",
"scripts/divisional_charts_extended.py",
"scripts/domain_calculation_service.py",
"scripts/functional_benefics.py",
"scripts/jaimini.py",
"scripts/minute_rectification_fact_ranker_v4.py",
"scripts/minute_rectification_feature_facts_v4.py",
"scripts/narayana_dasha.py",
"scripts/rectification/api_service.py",
"scripts/rectification/candidate_contrast.py",
"scripts/rectification/candidate_window.py",
"scripts/rectification/case_holdout.py",
"scripts/rectification/contracts.py",
"scripts/rectification/dasha_transition_proximity.py",
"scripts/rectification/decision_policy.py",
"scripts/rectification/event_probes.py",
"scripts/rectification/refinement_packet.py",
"scripts/rectification/scoring_service.py",
"scripts/shadbala.py",
"scripts/varga.py"
],
"production_scoring_sha256": "c67128293d994c55f99d1c0dc444261fd828182d9bf6f098a371403037524ab2",
"research_files": [
"scripts/research/reported_offset_sweep.py",
"scripts/research/cluster_width_lib.py",
"scripts/research/probe_supply_after_six.py",
"scripts/research/sealed_holdout_rerun.py",
"scripts/minute_rectification_blind_eval.py",
"scripts/minute_rectification_fact_blind_eval_v4.py",
"scripts/minute_rectification_holdout_validator.py"
],
"research_implementation_sha256": "27107a247e1fab7d4e2148f8105a20fa040ab4ec2767f3ca40e63772cc7165f5",
"file_sha256": {
"scripts/active_rectification_event_engine.py": "dced0b398ad90bdec59c743a55ffe01613306127c17a1e44c8c9cfb569c57841",
"scripts/active_rectification_events.py": "03e333ccf1103caf685dfe50fe890ab1793e945037085f50ce834a4a3b232222",
"scripts/ashtakavarga.py": "c524da3f54b2ed9c080b78b33854854a0ca3d5d79b7e536bb1c3bc2be3e02852",
"scripts/dasha_analyzer.py": "3949b96813217fe624899856afec9f0b787c4cb0fea3a9a0d961990dbd11943a",
"scripts/divisional_charts_extended.py": "6050ee6706d0f27b8c406b1c06ac5b49cf6f13814a3f930d944598892650ed92",
"scripts/domain_calculation_service.py": "66923a2bc69daf65c965d2973c4b9234edbec5147909eaf3609b6b377ce3c7ca",
"scripts/functional_benefics.py": "cbaac3b8c09b97f8724b5300e9a402cbf77089af6c7db8788550d40fd35ac57b",
"scripts/jaimini.py": "706d20dcff89079063fd1857a36f19419604ef81c80227921c7a2ced60011ac9",
"scripts/minute_rectification_blind_eval.py": "07aa30d8bad3278669495d5fea8be937aaf6367c8af980ff4f2fe9aa84ccc6ff",
"scripts/minute_rectification_fact_blind_eval_v4.py": "bdf460e3467208e8b87345c5beb2128f3e22de7eeffd68f72b281b3ad9affc92",
"scripts/minute_rectification_fact_ranker_v4.py": "f1a0d8d2482cd754d2e7f253a9606b0373519435a2bf58cfc3753e2b9ae0fb76",
"scripts/minute_rectification_feature_facts_v4.py": "3d899a2cdd4825b8e32062443d487edcd2173a4ea55a36eb9f3abe587c0faf0f",
"scripts/minute_rectification_holdout_validator.py": "b60b1c752e58672beaee8b36eb3b2348169726cda070ec969db0f13e7ed715af",
"scripts/narayana_dasha.py": "9a847d3b8d05f90d4f275079c97af1f71e83a74f930e14bd8f3f37b293d91d1e",
"scripts/rectification/api_service.py": "089730097d3872a4f7b5d7dd5574bb7e9ab4d2e246d4a380800bc824d7979b95",
"scripts/rectification/candidate_contrast.py": "eee7da71c0574a08876404b78ca111153fa95fb83ace82b9fdca141d1992e273",
"scripts/rectification/candidate_window.py": "2fbc5058b12049b15fca375cdc125b8283e19f9f3e4bedcc291e344501891bef",
"scripts/rectification/case_holdout.py": "fe0e699b617d9e216acdfeff87af4221c1d6f4c101bf33e1dbf14e2bcd75a8b5",
"scripts/rectification/contracts.py": "c6dc6bd230e38f9f2126c224aae9ddbd6415304c15340f8c7cd3f06f6ef3160f",
"scripts/rectification/dasha_transition_proximity.py": "5ce4ed27b0f06c681abc34e5fd998fafb10c153a0070aa36c99ddfa869a2cbf2",
"scripts/rectification/decision_policy.py": "80e8de4680d19a052213bb821d2a9c94143a2962235aeb27f6ad81374d2e60d5",
"scripts/rectification/event_probes.py": "f5ca9d54501f67a1546fcf5b01da0c1277dec2e2c6df481884e8900d14909a7c",
"scripts/rectification/refinement_packet.py": "dbeea5aa780889785ce850f3881e8b7f67bb44594e9bc382c65b2e730884a2f4",
"scripts/rectification/scoring_service.py": "fa056fa30d9e6ffa4b75295fc49c793e35b26ebeca64ca843d26c8abef3050f2",
"scripts/research/cluster_width_lib.py": "1d8f2ffa7795d62069deebb2de8e16749317037d4ed3f24a2c0092676e5cfcc6",
"scripts/research/probe_supply_after_six.py": "098a5b4398d6f8d996917d809c2fc922ad64031d3b70660f8ef7c876aba92438",
"scripts/research/reported_offset_sweep.py": "fde2e27595546d6c607ba804dafe9e9f4a2a33f4ea67684c7aefc3cbe1caa4be",
"scripts/research/sealed_holdout_rerun.py": "97fdb9e30d7fc697439a692e1115b9e8ddaca6619788bb1654a7b8f4ecfb720d",
"scripts/shadbala.py": "6a586b504b45d96acf593393051b878b12068e80f2799fe0ebbea2d433658192",
"scripts/varga.py": "37813c5da7b619439880808c0c69cfedf5c4d2c5cedd0dd2296ed7ffa7282e13"
},
"hash_scope": "explicit_identity_file_sets_not_a_transitive_dependency_lock"
},
"production_identity_scope": "context_only_shadow_scorer_does_not_call_transition_proximity",
"frozen_at_utc": "2026-11-04T09:06:17.549317+00:00",
"dataset_path": "references/real_case_calibration/minute_rectification_holdout_v3.json",
"dataset_sha256": "45aa76ab79dfc6c6404b6252083e1aa5c7e2e2b7de811fc11042a8ad2da3f0ea",
"algorithm_version": "birth-time-event-fact-ranker-v4-shadow",
"implementation_sha256": "6911e686575d0b4ea1a6b17682c4557811ac79366e59ccaecaea504892043dad",
"files": [
"scripts/active_rectification_event_engine.py",
"scripts/active_rectification_events.py",
"scripts/ashtakavarga.py",
"scripts/dasha_analyzer.py",
"scripts/divisional_charts_extended.py",
"scripts/domain_calculation_service.py",
"scripts/jaimini.py",
"scripts/minute_rectification_fact_ranker_v4.py",
"scripts/minute_rectification_feature_facts_v4.py",
"scripts/narayana_dasha.py",
"scripts/shadbala.py",
"scripts/varga.py"
],
"historical_frozen_sha256": "f41c298dd6cdcebe7a93e632f7191954be7987f6012ca2a34cecb6e447fbf196",
"evaluator_sha256": "97fdb9e30d7fc697439a692e1115b9e8ddaca6619788bb1654a7b8f4ecfb720d",
"ayanamsa": "raman",
"node_mode": "mean",
"candidate_radius_minutes": [
10
],
"minute_step": 1,
"release_metrics": {
"top_1_rate_minimum": 0.6,
"top_3_rate_minimum": 0.85,
"mean_absolute_minute_error_maximum": 2.0,
"false_confirmation_rate_maximum": 0.05,
"correct_insufficient_evidence_rejection_rate_minimum": 0.9
},
"results_previously_seen": true,
"official_valid_independent_blind": false,
"must_not_use_for_tuning": true,
"tie_breaker": "sha256(benchmark_id:case_id:candidate_time); published minute is never passed to the ranker",
"metric_rank_definition": "competition_rank_1_plus_strictly_higher_scores_legacy_protocol",
"extra_metric_rank_definition": "score_desc_then_existing_opaque_sha256_total_order"
}
File diff suppressed because it is too large Load Diff
@@ -124,10 +124,10 @@ const diagnosticReport = JSON.parse(readFileSync(
// 新值(14):docs/research/sealed_holdout_rerun_moon_paksha_2026_11_04.json
// 原因(14):BUG-1557 月亮 Paksha 口径改了冻结身份里的 shadbala.py,20 条回放不变,ERR-110 另存新记录。确认门行为与阈值不变。
// 原值(15):docs/research/sealed_holdout_rerun_moon_paksha_2026_11_04.json
// 新值(15):docs/research/sealed_holdout_rerun_audit_g_2026_11_04.json
// 原因(15):数据核对第二轮 BUG-1560 / BUG-1561(varga.py、divisional_charts_extended.py 的分盘起点按 BPHS 改正)改了冻结身份文件,ERR-110 另存新记录。确认门行为与阈值不变。
// 新值(15):docs/research/sealed_holdout_rerun_audit_wave2_2026_11_04.json
// 原因(15):数据核对第二波合并(BUG-1560 / BUG-1561 varga.py、divisional_charts_extended.py;BUG-1566 / BUG-1567 jaimini.py;BUG-1270 / BUG-1576 shadbala.py)改了冻结身份文件,20 条回放不变,ERR-110 在合并后的代码上另存新记录;各分支的 audit_g / audit_h / audit_j 是中间记录。确认门行为与阈值不变。
const currentTreeRerun = JSON.parse(readFileSync(
new URL("../../docs/research/sealed_holdout_rerun_audit_g_2026_11_04.json", import.meta.url),
new URL("../../docs/research/sealed_holdout_rerun_audit_wave2_2026_11_04.json", import.meta.url),
"utf8",
)) as {
frozen_record: { implementation_sha256: string };
@@ -279,10 +279,10 @@ test("sealed holdout aggregates match the v3 report and still block confirmation
// 原值(11):…upstream_sync9b_2026_10_28.json / 新值(11):…d60_mapping_2026_10_29.json / 原因(11):BUG-1500 修正 D60 映射,输出不变,ERR-110 另存新记录。
// 原值(12):…d60_mapping_2026_10_29.json / 新值(12):…data_audit_2026_11_04.json / 原因(12):BUG-1545 / BUG-1546 改了冻结身份文件,输出不变,ERR-110 另存新记录。
// 原值(13):…data_audit_2026_11_04.json / 新值(13):…moon_paksha_2026_11_04.json / 原因(13):BUG-1557 改了冻结身份里的 shadbala.py,输出不变,ERR-110 另存新记录。
// 原值(14):…moon_paksha_2026_11_04.json / 新值(14):…audit_g_2026_11_04.json / 原因(14):BUG-1560 / BUG-1561 改了冻结身份里的 varga.py、divisional_charts_extended.py,ERR-110 另存新记录(回放比对见 BUG-1560)。
// 原值(14):…moon_paksha_2026_11_04.json / 新值(14):…audit_wave2_2026_11_04.json / 原因(14):数据核对第二波 BUG-1560 / 1561、1566 / 1567、1270 / 1576 改了冻结身份文件,输出不变,ERR-110 在合并后的代码上另存新记录(audit_g / h / j 为中间记录)。
assert.equal(
productHoldout.current_tree_scorer.source_report,
"docs/research/sealed_holdout_rerun_audit_g_2026_11_04.json",
"docs/research/sealed_holdout_rerun_audit_wave2_2026_11_04.json",
);
assert.equal(currentTreeRerun.official_valid_independent_blind, false);
assert.equal(productHoldout.current_tree_scorer.matches_metrics_scorer, false);
+31 -31
View File
@@ -24,7 +24,7 @@
"evaluated_on": "2026-07-21"
},
"current_tree_scorer": {
"implementation_sha256": "baf118a5cfe3cd1e4906a4857ab4e1f3581728ee0717e72837d1fef32a34a114",
"implementation_sha256": "6911e686575d0b4ea1a6b17682c4557811ac79366e59ccaecaea504892043dad",
"extended_identity": {
"historical_artifacts_manifest_sha256": "6102a26a840be207b5858b3a4c0509274468ae9071e86d308cbbac7371d6864e",
"production_scoring_files": [
@@ -52,7 +52,7 @@
"scripts/shadbala.py",
"scripts/varga.py"
],
"production_scoring_sha256": "b5893afcf1b4e1eea58bce872deeec304b6cb2f6f29f53699d3b8999da2f7a53",
"production_scoring_sha256": "c67128293d994c55f99d1c0dc444261fd828182d9bf6f098a371403037524ab2",
"research_files": [
"scripts/research/reported_offset_sweep.py",
"scripts/research/cluster_width_lib.py",
@@ -62,7 +62,7 @@
"scripts/minute_rectification_fact_blind_eval_v4.py",
"scripts/minute_rectification_holdout_validator.py"
],
"research_implementation_sha256": "cc0bd489840017e1418ffcf956f805c8f478739f840b3ce879c8518b90ef0fa5",
"research_implementation_sha256": "27107a247e1fab7d4e2148f8105a20fa040ab4ec2767f3ca40e63772cc7165f5",
"file_sha256": {
"scripts/active_rectification_event_engine.py": "dced0b398ad90bdec59c743a55ffe01613306127c17a1e44c8c9cfb569c57841",
"scripts/active_rectification_events.py": "03e333ccf1103caf685dfe50fe890ab1793e945037085f50ce834a4a3b232222",
@@ -71,7 +71,7 @@
"scripts/divisional_charts_extended.py": "6050ee6706d0f27b8c406b1c06ac5b49cf6f13814a3f930d944598892650ed92",
"scripts/domain_calculation_service.py": "66923a2bc69daf65c965d2973c4b9234edbec5147909eaf3609b6b377ce3c7ca",
"scripts/functional_benefics.py": "cbaac3b8c09b97f8724b5300e9a402cbf77089af6c7db8788550d40fd35ac57b",
"scripts/jaimini.py": "6b88658da5404da9b136686d92a04be462d61a39da6e8de4255021e2ed2d1173",
"scripts/jaimini.py": "706d20dcff89079063fd1857a36f19419604ef81c80227921c7a2ced60011ac9",
"scripts/minute_rectification_blind_eval.py": "07aa30d8bad3278669495d5fea8be937aaf6367c8af980ff4f2fe9aa84ccc6ff",
"scripts/minute_rectification_fact_blind_eval_v4.py": "bdf460e3467208e8b87345c5beb2128f3e22de7eeffd68f72b281b3ad9affc92",
"scripts/minute_rectification_fact_ranker_v4.py": "f1a0d8d2482cd754d2e7f253a9606b0373519435a2bf58cfc3753e2b9ae0fb76",
@@ -90,9 +90,9 @@
"scripts/rectification/scoring_service.py": "fa056fa30d9e6ffa4b75295fc49c793e35b26ebeca64ca843d26c8abef3050f2",
"scripts/research/cluster_width_lib.py": "1d8f2ffa7795d62069deebb2de8e16749317037d4ed3f24a2c0092676e5cfcc6",
"scripts/research/probe_supply_after_six.py": "098a5b4398d6f8d996917d809c2fc922ad64031d3b70660f8ef7c876aba92438",
"scripts/research/reported_offset_sweep.py": "25b315f7c4895ce8a838d6f74a3570a20f5d403de302ea213d91c861ede2b59c",
"scripts/research/sealed_holdout_rerun.py": "cb23560f980648a7c503ddfa39fd3cce210c81a3da8303cd5bf131fc9e5f2d14",
"scripts/shadbala.py": "352a9dd91c9be6dd7a294b1dc24c62173e8f08db5fc36c453dc5dcd7e0fd62d7",
"scripts/research/reported_offset_sweep.py": "fde2e27595546d6c607ba804dafe9e9f4a2a33f4ea67684c7aefc3cbe1caa4be",
"scripts/research/sealed_holdout_rerun.py": "97fdb9e30d7fc697439a692e1115b9e8ddaca6619788bb1654a7b8f4ecfb720d",
"scripts/shadbala.py": "6a586b504b45d96acf593393051b878b12068e80f2799fe0ebbea2d433658192",
"scripts/varga.py": "37813c5da7b619439880808c0c69cfedf5c4d2c5cedd0dd2296ed7ffa7282e13"
},
"hash_scope": "explicit_identity_file_sets_not_a_transitive_dependency_lock"
@@ -100,7 +100,7 @@
"matches_metrics_scorer": false,
"official_eval_implementation_hash_matches": false,
"official_eval_trial_count": 0,
"source_report": "docs/research/sealed_holdout_rerun_audit_g_2026_11_04.json",
"source_report": "docs/research/sealed_holdout_rerun_audit_wave2_2026_11_04.json",
"fixed_protocol_rerun_trial_count": 20,
"fixed_protocol_rerun_hash_matches": true,
"metrics": {
@@ -114,9 +114,9 @@
},
"current_tree_fixed_protocol_rerun": {
"evaluated_on": "2026-11-04",
"report_path": "docs/research/sealed_holdout_rerun_audit_g_2026_11_04.json",
"freeze_record_path": "docs/research/sealed_holdout_rerun_audit_g_2026_11_04.freeze.json",
"implementation_sha256": "baf118a5cfe3cd1e4906a4857ab4e1f3581728ee0717e72837d1fef32a34a114",
"report_path": "docs/research/sealed_holdout_rerun_audit_wave2_2026_11_04.json",
"freeze_record_path": "docs/research/sealed_holdout_rerun_audit_wave2_2026_11_04.freeze.json",
"implementation_sha256": "6911e686575d0b4ea1a6b17682c4557811ac79366e59ccaecaea504892043dad",
"extended_identity": {
"historical_artifacts_manifest_sha256": "6102a26a840be207b5858b3a4c0509274468ae9071e86d308cbbac7371d6864e",
"production_scoring_files": [
@@ -144,7 +144,7 @@
"scripts/shadbala.py",
"scripts/varga.py"
],
"production_scoring_sha256": "b5893afcf1b4e1eea58bce872deeec304b6cb2f6f29f53699d3b8999da2f7a53",
"production_scoring_sha256": "c67128293d994c55f99d1c0dc444261fd828182d9bf6f098a371403037524ab2",
"research_files": [
"scripts/research/reported_offset_sweep.py",
"scripts/research/cluster_width_lib.py",
@@ -154,7 +154,7 @@
"scripts/minute_rectification_fact_blind_eval_v4.py",
"scripts/minute_rectification_holdout_validator.py"
],
"research_implementation_sha256": "cc0bd489840017e1418ffcf956f805c8f478739f840b3ce879c8518b90ef0fa5",
"research_implementation_sha256": "27107a247e1fab7d4e2148f8105a20fa040ab4ec2767f3ca40e63772cc7165f5",
"file_sha256": {
"scripts/active_rectification_event_engine.py": "dced0b398ad90bdec59c743a55ffe01613306127c17a1e44c8c9cfb569c57841",
"scripts/active_rectification_events.py": "03e333ccf1103caf685dfe50fe890ab1793e945037085f50ce834a4a3b232222",
@@ -163,7 +163,7 @@
"scripts/divisional_charts_extended.py": "6050ee6706d0f27b8c406b1c06ac5b49cf6f13814a3f930d944598892650ed92",
"scripts/domain_calculation_service.py": "66923a2bc69daf65c965d2973c4b9234edbec5147909eaf3609b6b377ce3c7ca",
"scripts/functional_benefics.py": "cbaac3b8c09b97f8724b5300e9a402cbf77089af6c7db8788550d40fd35ac57b",
"scripts/jaimini.py": "6b88658da5404da9b136686d92a04be462d61a39da6e8de4255021e2ed2d1173",
"scripts/jaimini.py": "706d20dcff89079063fd1857a36f19419604ef81c80227921c7a2ced60011ac9",
"scripts/minute_rectification_blind_eval.py": "07aa30d8bad3278669495d5fea8be937aaf6367c8af980ff4f2fe9aa84ccc6ff",
"scripts/minute_rectification_fact_blind_eval_v4.py": "bdf460e3467208e8b87345c5beb2128f3e22de7eeffd68f72b281b3ad9affc92",
"scripts/minute_rectification_fact_ranker_v4.py": "f1a0d8d2482cd754d2e7f253a9606b0373519435a2bf58cfc3753e2b9ae0fb76",
@@ -182,9 +182,9 @@
"scripts/rectification/scoring_service.py": "fa056fa30d9e6ffa4b75295fc49c793e35b26ebeca64ca843d26c8abef3050f2",
"scripts/research/cluster_width_lib.py": "1d8f2ffa7795d62069deebb2de8e16749317037d4ed3f24a2c0092676e5cfcc6",
"scripts/research/probe_supply_after_six.py": "098a5b4398d6f8d996917d809c2fc922ad64031d3b70660f8ef7c876aba92438",
"scripts/research/reported_offset_sweep.py": "25b315f7c4895ce8a838d6f74a3570a20f5d403de302ea213d91c861ede2b59c",
"scripts/research/sealed_holdout_rerun.py": "cb23560f980648a7c503ddfa39fd3cce210c81a3da8303cd5bf131fc9e5f2d14",
"scripts/shadbala.py": "352a9dd91c9be6dd7a294b1dc24c62173e8f08db5fc36c453dc5dcd7e0fd62d7",
"scripts/research/reported_offset_sweep.py": "fde2e27595546d6c607ba804dafe9e9f4a2a33f4ea67684c7aefc3cbe1caa4be",
"scripts/research/sealed_holdout_rerun.py": "97fdb9e30d7fc697439a692e1115b9e8ddaca6619788bb1654a7b8f4ecfb720d",
"scripts/shadbala.py": "6a586b504b45d96acf593393051b878b12068e80f2799fe0ebbea2d433658192",
"scripts/varga.py": "37813c5da7b619439880808c0c69cfedf5c4d2c5cedd0dd2296ed7ffa7282e13"
},
"hash_scope": "explicit_identity_file_sets_not_a_transitive_dependency_lock"
@@ -201,15 +201,15 @@
"verified_minute_claim_allowed": false,
"metric_gates_passed": false,
"events_per_case": 3,
"boundary": "Previously exposed v3 shadow fixed-protocol rerun after the data-audit wave 2 varga fixes (ERR-110, BUG-1560, BUG-1561). Trials and metrics match the 2026-11-04 moon_paksha_2026_11_04 report on every field. Versus the 2026-09-20 historical report, changed_trial_count stays 8. Not a release metric. Prior reports and freezes preserved byte-for-byte.",
"report_sha256": "d15f34606ad657c5a61027c3b2065282b48349e96007ef13fd8e6be6dc08da6d",
"freeze_record_sha256": "7d990e0088996486ea60dd287ba848521ac1469da18f72affbf7ee6da5833a07",
"replay_started_at_utc": "2026-11-04T08:52:26.436417+00:00",
"replay_finished_at_utc": "2026-11-04T08:52:28.687637+00:00",
"boundary": "Previously exposed v3 shadow fixed-protocol rerun after the data audit wave 2 merge: BUG-1560 / BUG-1561 (scripts/varga.py, scripts/divisional_charts_extended.py: D16/D20/D27/D30/D40/D45 starting signs per BPHS ch. 6), BUG-1566 / BUG-1567 (scripts/jaimini.py: K.N. Rao Chara Dasha co-lord and antardasha order), BUG-1270 / BUG-1576 (scripts/shadbala.py: Dig Bala arc fold, deterministic Drik rounding) (ERR-110). Trials and metrics match the 2026-11-04 moon_paksha_2026_11_04 report on every field. Versus the 2026-09-20 historical report, changed_trial_count stays 8. Not a release metric. Prior reports and freezes preserved byte-for-byte.",
"report_sha256": "6cc1b9a80f86cf8c4768a224a19ceccda7a2e672a5531f9d29f064c53f585298",
"freeze_record_sha256": "219856490a73e0a0331a17253179b8556e557b78c251a318fc442cdb1ec79809",
"replay_started_at_utc": "2026-11-04T09:06:17.646138+00:00",
"replay_finished_at_utc": "2026-11-04T09:06:19.899116+00:00",
"previous_fixed_protocol_rerun": {
"report_path": "docs/research/sealed_holdout_rerun_moon_paksha_2026_11_04.json",
"freeze_record_path": "docs/research/sealed_holdout_rerun_moon_paksha_2026_11_04.freeze.json",
"superseded_reason": "Data audit wave 2 BUG-1560 / BUG-1561 (scripts/varga.py D16/D20/D27/D45 and scripts/divisional_charts_extended.py D16/D20/D27/D30/D40/D45 starting signs corrected to BPHS ch. 6) changed frozen identity files. Output is unchanged, so ERR-110 stored a new record. Prior moon_paksha_2026_11_04 report and freeze preserved byte-for-byte."
"superseded_reason": "The data audit wave 2 merge: BUG-1560 / BUG-1561 (scripts/varga.py, scripts/divisional_charts_extended.py: D16/D20/D27/D30/D40/D45 starting signs per BPHS ch. 6), BUG-1566 / BUG-1567 (scripts/jaimini.py: K.N. Rao Chara Dasha co-lord and antardasha order), BUG-1270 / BUG-1576 (scripts/shadbala.py: Dig Bala arc fold, deterministic Drik rounding) changed frozen identity files. Output is unchanged, so ERR-110 stored one new record for the merged tree. The per-branch records audit_g_2026_11_04, audit_h_2026_11_04 and audit_j_2026_11_04 were frozen on the individual branches, match only those branch trees, and are kept byte-for-byte as intermediate history; none was current on the merged tree. Prior moon_paksha_2026_11_04 report and freeze preserved byte-for-byte."
}
},
"previous_fixed_protocol_rerun": {
@@ -330,25 +330,25 @@
"verified_minute_claim_allowed": false
},
"current_tree_reported_offset_replay": {
"report_path": "docs/research/reported_offset_audit_g_2026_11_04.json",
"report_sha256": "25a0918c73aec53c11aedd84dfc457f2c68bed6af203f8cc18b0243f20e5338e",
"freeze_record_path": "docs/research/reported_offset_audit_g_2026_11_04.freeze.json",
"freeze_record_sha256": "9bbe62a427625cbda4c252931c168360f3ec1d8be1ed5c30cf1d7e2f303f4df4",
"report_path": "docs/research/reported_offset_audit_wave2_2026_11_04.json",
"report_sha256": "4832ce11ab096dd55b04ee00c04b7020eee2a3ba2e73fb3b5b565b995a56e059",
"freeze_record_path": "docs/research/reported_offset_audit_wave2_2026_11_04.freeze.json",
"freeze_record_sha256": "dedaaf7a29ba8cd122c100075bac71b5836c5097cb47a443e230592a5e6bef4f",
"scope": "reported_offset_sensitivity_not_product_accuracy",
"trial_count": 900,
"official_valid_independent_blind": false,
"official_blind_trial_count": 0,
"must_not_use_for_tuning": true,
"must_not_claim_as_release_metrics": true,
"replay_started_at_utc": "2026-11-04T08:52:28.786956+00:00",
"replay_finished_at_utc": "2026-11-04T08:55:04.726837+00:00",
"boundary": "Previously exposed reported-offset sensitivity after the data-audit wave 2 varga fixes (ERR-110, BUG-1560, BUG-1561). Summary and all 900 trials match the 2026-11-04 moon_paksha_2026_11_04 report on every field. Versus the 2026-09-20 historical report, changed_trial_count stays 581 of 900. Not a release metric. No tuning. Prior reports and freezes preserved byte-for-byte.",
"replay_started_at_utc": "2026-11-04T09:06:20.135348+00:00",
"replay_finished_at_utc": "2026-11-04T09:08:59.718147+00:00",
"boundary": "Previously exposed reported-offset sensitivity after the data audit wave 2 merge: BUG-1560 / BUG-1561 (scripts/varga.py, scripts/divisional_charts_extended.py: D16/D20/D27/D30/D40/D45 starting signs per BPHS ch. 6), BUG-1566 / BUG-1567 (scripts/jaimini.py: K.N. Rao Chara Dasha co-lord and antardasha order), BUG-1270 / BUG-1576 (scripts/shadbala.py: Dig Bala arc fold, deterministic Drik rounding) (ERR-110). Summary and all 900 trials match the 2026-11-04 moon_paksha_2026_11_04 report on every field. Versus the 2026-09-20 historical report, changed_trial_count stays 581 of 900. Not a release metric. No tuning. Prior reports and freezes preserved byte-for-byte.",
"previous_reported_offset_replay": {
"report_path": "docs/research/reported_offset_moon_paksha_2026_11_04.json",
"report_sha256": "f0b602a0477d5913d4befcdf888f3687062c3e62e0b11e6ea3bc69303f0f02cb",
"freeze_record_path": "docs/research/reported_offset_moon_paksha_2026_11_04.freeze.json",
"freeze_record_sha256": "9728da404c736a85179dfbbd62ac551550ff8590494f4da62df874cac5ffbd49",
"superseded_reason": "Data audit wave 2 BUG-1560 / BUG-1561 (scripts/varga.py D16/D20/D27/D45 and scripts/divisional_charts_extended.py D16/D20/D27/D30/D40/D45 starting signs corrected to BPHS ch. 6) changed frozen identity files. Output is unchanged, so ERR-110 stored a new record. Prior moon_paksha_2026_11_04 report and freeze preserved byte-for-byte."
"superseded_reason": "The data audit wave 2 merge: BUG-1560 / BUG-1561 (scripts/varga.py, scripts/divisional_charts_extended.py: D16/D20/D27/D30/D40/D45 starting signs per BPHS ch. 6), BUG-1566 / BUG-1567 (scripts/jaimini.py: K.N. Rao Chara Dasha co-lord and antardasha order), BUG-1270 / BUG-1576 (scripts/shadbala.py: Dig Bala arc fold, deterministic Drik rounding) changed frozen identity files. Summary and all 900 trials are unchanged, so ERR-110 stored one new record for the merged tree. The per-branch records audit_g_2026_11_04, audit_h_2026_11_04 and audit_j_2026_11_04 were frozen on the individual branches, match only those branch trees, and are kept byte-for-byte as intermediate history; none was current on the merged tree. Prior moon_paksha_2026_11_04 report and freeze preserved byte-for-byte."
}
},
"previous_reported_offset_replay": {
+4 -4
View File
@@ -43,10 +43,10 @@ MINUTE_STEP = 1
# 新值: docs/research/reported_offset_moon_paksha_2026_11_04.{freeze.json,json}
# 原因: BUG-1557 月亮 Paksha 口径(scripts/shadbala.py)改了冻结身份文件,ERR-110 另存新记录
# 原值: docs/research/reported_offset_moon_paksha_2026_11_04.{freeze.json,json}
# 新值: docs/research/reported_offset_audit_g_2026_11_04.{freeze.json,json}
# 原因: 数据核对第二轮 BUG-1560 / BUG-1561(scripts/varga.py、scripts/divisional_charts_extended.py 的 D16/D20/D27/D30/D40/D45 起点按 BPHS 改正)改了冻结身份文件,ERR-110 另存新记录
FREEZE = ROOT / "docs/research/reported_offset_audit_g_2026_11_04.freeze.json"
REPORT = ROOT / "docs/research/reported_offset_audit_g_2026_11_04.json"
# 新值: docs/research/reported_offset_audit_wave2_2026_11_04.{freeze.json,json}
# 原因: 数据核对第二波合并(BUG-1560 / BUG-1561 varga.py、divisional_charts_extended.py;BUG-1566 / BUG-1567 jaimini.py;BUG-1270 / BUG-1576 shadbala.py)改了冻结身份文件,ERR-110 在合并后的代码上另存新记录;各分支自己的 audit_g / audit_h / audit_j 记录只对各自分支成立,作为中间记录原样保留
FREEZE = ROOT / "docs/research/reported_offset_audit_wave2_2026_11_04.freeze.json"
REPORT = ROOT / "docs/research/reported_offset_audit_wave2_2026_11_04.json"
LEGACY_REPORT = ROOT / "docs/research/reported_offset_2026_09_20.json"
+4 -4
View File
@@ -40,10 +40,10 @@ DATASET = ROOT / "references/real_case_calibration/minute_rectification_holdout_
# 新值: docs/research/sealed_holdout_rerun_moon_paksha_2026_11_04.{freeze.json,json}
# 原因: BUG-1557 月亮 Paksha 口径(scripts/shadbala.py)改了冻结身份文件,ERR-110 另存新记录
# 原值: docs/research/sealed_holdout_rerun_moon_paksha_2026_11_04.{freeze.json,json}
# 新值: docs/research/sealed_holdout_rerun_audit_g_2026_11_04.{freeze.json,json}
# 原因: 数据核对第二轮 BUG-1560 / BUG-1561(scripts/varga.py、scripts/divisional_charts_extended.py 的 D16/D20/D27/D30/D40/D45 起点按 BPHS 改正)改了冻结身份文件,ERR-110 另存新记录
FREEZE = ROOT / "docs/research/sealed_holdout_rerun_audit_g_2026_11_04.freeze.json"
REPORT = ROOT / "docs/research/sealed_holdout_rerun_audit_g_2026_11_04.json"
# 新值: docs/research/sealed_holdout_rerun_audit_wave2_2026_11_04.{freeze.json,json}
# 原因: 数据核对第二波合并(BUG-1560 / BUG-1561 varga.py、divisional_charts_extended.py;BUG-1566 / BUG-1567 jaimini.py;BUG-1270 / BUG-1576 shadbala.py)改了冻结身份文件,ERR-110 在合并后的代码上另存新记录;各分支自己的 audit_g / audit_h / audit_j 记录只对各自分支成立,作为中间记录原样保留
FREEZE = ROOT / "docs/research/sealed_holdout_rerun_audit_wave2_2026_11_04.freeze.json"
REPORT = ROOT / "docs/research/sealed_holdout_rerun_audit_wave2_2026_11_04.json"
LEGACY_REPORT = ROOT / "docs/research/sealed_holdout_rerun_2026_09_20.json"
ARCHIVE = ROOT / "docs/research/history/rectification_pre_cross_midnight_2026_09_20"
PRODUCTION_FILES = [
@@ -74,10 +74,16 @@ IDENTITY_FORBIDDEN_PREFIXES = (
"docs/research/sealed_holdout_rerun_moon_paksha_2026_11_04",
"docs/research/reported_offset_moon_paksha_2026_11_04",
# 原值: 排除到 moon_paksha_2026_11_04
# 新值: 再排除 audit_g_2026_11_04 两份冻结路径(追加,不替换上面的)
# 原因: 数据核对第二轮 BUG-1560 / BUG-1561 改了冻结身份里的 varga.py、divisional_charts_extended.py,ERR-110 另存新记录
# 新值: 再排除各分支中间记录 audit_g / audit_h / audit_j 与合并后的 audit_wave2_2026_11_04 冻结路径(追加,不替换上面的)
# 原因: 数据核对第二波 BUG-1560 / BUG-1561(varga.py、divisional_charts_extended.py)、BUG-1566 / BUG-1567(jaimini.py)、BUG-1270 / BUG-1576(shadbala.py)改了冻结身份文件,ERR-110 在合并后的代码上另存一份新记录;各分支的 audit_g / audit_h / audit_j 只对各自分支成立,原样保留为中间记录
"docs/research/sealed_holdout_rerun_audit_g_2026_11_04",
"docs/research/reported_offset_audit_g_2026_11_04",
"docs/research/sealed_holdout_rerun_audit_h_2026_11_04",
"docs/research/reported_offset_audit_h_2026_11_04",
"docs/research/sealed_holdout_rerun_audit_j_2026_11_04",
"docs/research/reported_offset_audit_j_2026_11_04",
"docs/research/sealed_holdout_rerun_audit_wave2_2026_11_04",
"docs/research/reported_offset_audit_wave2_2026_11_04",
"docs/research/history/",
"artifacts/",
)