fix(varga): count D60 from the sign itself for every sign (BUG-1500, issue #149)
The production D60 branch added one sign to 1-based even signs, with no source, while the repository's own guide and the vedastro mapping count from the sign itself. PyJHora agrees with the latter: 33/77 recorded times before, 77/77 after. - scripts/varga.py: D60 is (si+pi)%12 for odd and even signs; other mappings and the vedastro mode are untouched. - tests/test_d60_varga_mapping.py: 12 signs x 60 parts against PyJHora, plus the even-sign first part. - scripts/research/d60_two_way_run.py: the G1 reconciliation that found this, now in the repository with a test; G1 passes 77/77. - scripts/varga.py is part of the extended frozen identity, so the sealed holdout and the reported-offset sweep were re-frozen per ERR-110. All 20 and 900 trials match the upstream_sync9b records on every field and the metrics and summary are unchanged. Co-Authored-By: Grok (agent loop)
This commit is contained in:
co-authored by
Grok (agent loop)
parent
a21c9ec163
commit
129313e175
@@ -1,5 +1,12 @@
|
||||
# 印度占星 Skill 更新日志
|
||||
|
||||
## 2026-10-29 — D60 分盘的星座算法改对
|
||||
|
||||
- 落在金牛、巨蟹、处女、天蝎、摩羯、双鱼上的行星或上升,D60 星座改为从本星座起算(以前多移一个星座);同一张盘的 D60 星座可能与以前不同。
|
||||
- 与外部参照(PyJHora)在 77 例已知出生时间上 77/77 一致;以前只有 33/77。
|
||||
- 生时校正 20 条密封案例与 900 个报时窗口,名次与分钟误差与上一份回放逐条相同。
|
||||
- Skill 版本不变(BUG-1500,issue #149)。
|
||||
|
||||
## 2026-10-29 — 咨询首字前少等最多 3 秒
|
||||
|
||||
- 判断「是不是寒暄」改为和扣点、记下问题同时进行,不再排在它们后面;真问题首字前最多快约 3 秒。
|
||||
|
||||
+13
-14
@@ -14081,7 +14081,7 @@
|
||||
- 防复发:待定。改闸门时,同时用同年、跨年、列表错位三类虚构配对做回归。
|
||||
- 相关记录:BUG-689、BUG-740、BUG-1047;ERR-110。
|
||||
- 复发自:无。
|
||||
- 修复版本:未修。
|
||||
- 修复版本:分支 `codex/rectification-d60-two-way-20261028`。
|
||||
|
||||
## BUG-1049 | 生时校正开场没有例子、满是行话,用户不知道该答什么
|
||||
|
||||
@@ -18773,7 +18773,7 @@
|
||||
- 防复发:在这项真正交付之前,不得把「少数一侧不足两成仍不出题」写成已经生效。
|
||||
- 相关记录:BUG-1367。
|
||||
- 复发自:无。
|
||||
- 修复版本:未修。
|
||||
- 修复版本:分支 `codex/rectification-d60-two-way-20261028`。
|
||||
|
||||
## BUG-1369 | 进入交付区间仍要落后峰值 8 分
|
||||
|
||||
@@ -18788,7 +18788,7 @@
|
||||
- 防复发:不得只改写盘或只改读盘。不得用修改 `MIN_SEPARATION_LEAD` 来收窄区间。
|
||||
- 相关记录:BUG-423、BUG-560、BUG-1367。
|
||||
- 复发自:无。
|
||||
- 修复版本:未修。
|
||||
- 修复版本:分支 `codex/rectification-d60-two-way-20261028`。
|
||||
|
||||
## BUG-1392 | 分段显示用取整分数,还会跳过缺区间的活候选
|
||||
|
||||
@@ -19174,7 +19174,7 @@
|
||||
- 防复发:以后要固定顺序时,遍历前排序,并加不依赖哈希种子的回归。不要在本条未修之前把中文逐字节对比做成不设种子的门禁。
|
||||
- 相关记录:BUG-1413。issue #89 修复单顺手记下。
|
||||
- 复发自:无。
|
||||
- 修复版本:未修。
|
||||
- 修复版本:分支 `codex/rectification-d60-two-way-20261028`。
|
||||
|
||||
## BUG-1416 | 中文完整数据附录由英文回译,Dosha 丢否定,友敌矩阵空表
|
||||
|
||||
@@ -19931,7 +19931,7 @@
|
||||
- 防复发:待修复单补测试(与 Swiss Ephemeris 日出对比,误差 ≤ 2 分钟)。
|
||||
- 相关记录:issue #114。
|
||||
- 复发自:无
|
||||
- 修复版本:未修。
|
||||
- 修复版本:分支 `codex/rectification-d60-two-way-20261028`。
|
||||
|
||||
## BUG-1463 | 单独调 `/api/shadbala` 带出生资料时 500
|
||||
|
||||
@@ -19947,7 +19947,7 @@
|
||||
- 防复发:待修复单补接口测试。
|
||||
- 相关记录:issue #114。
|
||||
- 复发自:无
|
||||
- 修复版本:未修。
|
||||
- 修复版本:分支 `codex/rectification-d60-two-way-20261028`。
|
||||
|
||||
## BUG-1464 | 存过别人的账户进首页即「页面出错了」
|
||||
|
||||
@@ -20466,13 +20466,12 @@
|
||||
## BUG-1497 | D60 换格能不能帮生时校正,从没在已知出生时间的人身上测过
|
||||
|
||||
- 状态:investigating
|
||||
- 首次发现 / 最近更新:2026-10-28 / 2026-10-28(issue #149,来源 #142 竞品宣传)
|
||||
- 首次发现 / 最近更新:2026-10-28 / 2026-10-29(issue #149,来源 #142 竞品宣传)
|
||||
- 影响面:生时校正的技法路由与对外文案。`skills/jyotish-birth-time-rectification/references/technique-routing.md` 现在写「D60 只作参考,不驱动结论」。
|
||||
- 现象:竞品宣传「证据够密时 D60 与纳迪分盘反向校准,收束时刻可以到秒」。纳迪那一半已在 BUG-1240 证伪(N3 ±10 窗口找回记录分钟 5/77,生产 25/77;N4 只换岁差 73/73 换段);D60 这一半从未在 v5 77 例已知出生时间上检验。
|
||||
- 触发条件:用 D60 换格给候选分段打分,或对外宣称「到秒」。
|
||||
- 根因:未验证的技法被当成能力宣传;我方没有 D60 换格的评分实现,也没有对照实验。
|
||||
- 修复:(进行中)G1 已跑:生产 D60 上升与 PyJHora 只一致 33/77(42.9%),本仓 `mode='vedastro'` 的 D60 与 PyJHora 77/77。
|
||||
失败原因是本仓生产 D60 映射本身(见 BUG-1500),不是「D60 没有信号」;G2–G5 暂缓,先把映射口径定下来再重跑 G1。结论出来前生产代码、技法路由、对外文案都不动。
|
||||
- 修复:(进行中)G1 第一次跑出 33/77,原因在生产 D60 映射(BUG-1500)。映射改对后重跑 G1:77/77 通过(`docs/research/d60_two_way_results_2026_10_29.json`,脚本 `scripts/research/d60_two_way_run.py`)。下一步按任务书先登记 G2–G5 的口径(换格题只认同日事件),再跑五门、安慰剂、端到端与 MEVG。结论出来前技法路由、对外文案都不动。
|
||||
- 验证:待研究单 `docs/tasks/TASK-rectification-d60-two-way-20261028.md` 的 G1–G5 全部有结论后回填;不过门就写 `closed_by_design` 并附对外口径。
|
||||
- 防复发:研究单写死「先登记再跑、真值不可见、必须有安慰剂、负结果照写」。
|
||||
- 关联:BUG-1240、BUG-560、BUG-1090、BUG-1091。
|
||||
@@ -20512,16 +20511,16 @@
|
||||
|
||||
## BUG-1500 | 生产 D60 映射把 1-based 偶数星座整体后移一个星座
|
||||
|
||||
- 状态:investigating
|
||||
- 状态:resolved(代码 + 回归测试;待部署)
|
||||
- 首次发现 / 最近更新:2026-10-28 / 2026-10-28(issue #149,G1 三引擎对账)
|
||||
- 影响面:`scripts/varga.py::varga_map` 的 D60 分支(生产默认 `classical_local` 模式)。技法路由目前写「D60 只作参考」,不进校正打分。
|
||||
- 现象:v5 的 77 例已知出生时间里,生产 D60 上升星座与 PyJHora(traditional Parasara,from sign)只一致 33 例;其余 44 例全部差 +1 个星座,且 44 例全是 1-based 偶数星座(金牛、巨蟹、处女、天蝎、摩羯、双鱼)。本仓 `mode='vedastro'` 的 D60 映射与 PyJHora 77/77 一致。
|
||||
- 触发条件:读取生产 D60(`calc_varga(lon, 60)` 默认模式)。
|
||||
- 根因:`varga_map` 的 D60 分支是 `(si+pi)%12 if o else (si+1+pi)%12`(`o` 为 1-based 奇数星座),对 1-based 偶数星座加 1;同文件 vedastro 映射是 `(si+pi)%12`。两套内部映射不一致,外部引擎与 vedastro 那套一致。哪一套符合来源尚未裁决,不预设 classical 就是错。
|
||||
- 修复:未修。研究单红线要求生产代码零改动;要先按经典来源(BPHS / Raman)确认偶数星座是否真的从下一星座起算,再决定改映射还是改文档。
|
||||
- 验证:`docs/research/d60_two_way_results_2026_10_28.json`(77 例逐条:上升经度、两套本仓 D60、PyJHora D60、是否一致)。
|
||||
- 防复发:给 D60 补一条映射测试,锁定与外部引擎一致的规则;classical 与 vedastro 两种模式要么一致,要么在注释里写明来源差异。
|
||||
- 修复:`varga_map` 的 D60 分支改为 `(si+pi)%12`,奇偶星座都从本星座起算,并加注释指向 `references/shodasavarga-complete-guide.md` 与 PyJHora 对账(BUG-1500)。vedastro 模式与其他分盘未动。
|
||||
- 验证:新增 `tests/test_d60_varga_mapping.py`(12 个星座 × 60 段逐段对 PyJHora;偶数星座第 1 段落在本星座)。G1 脚本 `scripts/research/d60_two_way_run.py` 重跑 77/77 一致(`docs/research/d60_two_way_results_2026_10_29.json`)。密封校正 20 条与报时窗口 900 条与 sync9b 记录逐条相同,按 ERR-110 重新冻结为 `d60_mapping_2026_10_29`。`tests/test_varga_bphs.py`、`tests/test_upstream_sync9b_varga_bphs.py`、`tests/test_deep_varga_avastha.py`、`tests/test_divisional_charts_extended.py`、`tests/test_cli_smoke.py` 通过;`tests/test_d1_d60_varga_mapping_registry.py` 依赖的 `python3` 在本机不存在,属环境缺口。
|
||||
- 防复发:`tests/test_d60_varga_mapping.py` 锁定「从本星座起算」;classical 与 vedastro 现在同一条规则,外部引擎对账留作回归。
|
||||
- 关联:BUG-1497。
|
||||
- 复发自:无。
|
||||
- 修复版本:未修。
|
||||
- 修复版本:分支 `codex/rectification-d60-two-way-20261028`。
|
||||
|
||||
|
||||
@@ -0,0 +1,565 @@
|
||||
{
|
||||
"brief": "docs/tasks/TASK-rectification-d60-fix-20261029.md",
|
||||
"bug": "BUG-1500",
|
||||
"cases": [
|
||||
{
|
||||
"ascendant_longitude": 71.1909,
|
||||
"case_id": "albert_brooks_1947_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 0,
|
||||
"d60_sign_idx_pyjhora": 0,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 109.6959,
|
||||
"case_id": "andrew_windsor_1960_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 6,
|
||||
"d60_sign_idx_pyjhora": 6,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 96.8001,
|
||||
"case_id": "angelina_jolie_1975_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 4,
|
||||
"d60_sign_idx_pyjhora": 4,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 296.1798,
|
||||
"case_id": "barack_obama_1961_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 1,
|
||||
"d60_sign_idx_pyjhora": 1,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 107.0009,
|
||||
"case_id": "bernd_eichinger_1949_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 1,
|
||||
"d60_sign_idx_pyjhora": 1,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 269.6959,
|
||||
"case_id": "chad_everett_1937_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 7,
|
||||
"d60_sign_idx_pyjhora": 7,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 162.7012,
|
||||
"case_id": "elizabeth_montgomery_1933_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 6,
|
||||
"d60_sign_idx_pyjhora": 6,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 231.7983,
|
||||
"case_id": "elizabeth_taylor_1932_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 2,
|
||||
"d60_sign_idx_pyjhora": 2,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 216.2833,
|
||||
"case_id": "iwao_takamoto_1925_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 7,
|
||||
"d60_sign_idx_pyjhora": 7,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 149.6725,
|
||||
"case_id": "john_robbins_1947_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 3,
|
||||
"d60_sign_idx_pyjhora": 3,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 59.9029,
|
||||
"case_id": "joseph_kennedy_iii_1980_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 0,
|
||||
"d60_sign_idx_pyjhora": 0,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 151.3987,
|
||||
"case_id": "kurt_cobain_1967_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 7,
|
||||
"d60_sign_idx_pyjhora": 7,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 104.8722,
|
||||
"case_id": "pablo_picasso_1881_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 8,
|
||||
"d60_sign_idx_pyjhora": 8,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 218.6428,
|
||||
"case_id": "paul_ryan_1970_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 0,
|
||||
"d60_sign_idx_pyjhora": 0,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 145.4799,
|
||||
"case_id": "salma_hayek_1966_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 6,
|
||||
"d60_sign_idx_pyjhora": 6,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 113.2594,
|
||||
"case_id": "sean_lennon_1975_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 1,
|
||||
"d60_sign_idx_pyjhora": 1,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 199.7737,
|
||||
"case_id": "sigmund_freud_1856_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 9,
|
||||
"d60_sign_idx_pyjhora": 9,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 9.9031,
|
||||
"case_id": "steve_reich_1936_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 7,
|
||||
"d60_sign_idx_pyjhora": 7,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 152.3435,
|
||||
"case_id": "tiger_woods_1975_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 9,
|
||||
"d60_sign_idx_pyjhora": 9,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 135.3649,
|
||||
"case_id": "tom_kennedy_1927_aa_v4_holdout",
|
||||
"d60_sign_idx_production": 10,
|
||||
"d60_sign_idx_pyjhora": 10,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 234.5927,
|
||||
"case_id": "adriana_lima_1981_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 8,
|
||||
"d60_sign_idx_pyjhora": 8,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 242.6992,
|
||||
"case_id": "agatha_christie_1890_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 1,
|
||||
"d60_sign_idx_pyjhora": 1,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 80.9181,
|
||||
"case_id": "albert_einstein_1879_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 7,
|
||||
"d60_sign_idx_pyjhora": 7,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 30.0607,
|
||||
"case_id": "alberto_fujimori_1938_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 1,
|
||||
"d60_sign_idx_pyjhora": 1,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 59.3382,
|
||||
"case_id": "arthur_conan_doyle_1859_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 11,
|
||||
"d60_sign_idx_pyjhora": 11,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 307.1967,
|
||||
"case_id": "audrey_hepburn_1929_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 0,
|
||||
"d60_sign_idx_pyjhora": 0,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 289.3969,
|
||||
"case_id": "ayrton_senna_1960_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 11,
|
||||
"d60_sign_idx_pyjhora": 11,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 346.7636,
|
||||
"case_id": "barbra_streisand_1942_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 8,
|
||||
"d60_sign_idx_pyjhora": 8,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 6.8595,
|
||||
"case_id": "beyonce_1981_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 1,
|
||||
"d60_sign_idx_pyjhora": 1,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 238.7367,
|
||||
"case_id": "bob_dylan_1941_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 4,
|
||||
"d60_sign_idx_pyjhora": 4,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 233.8797,
|
||||
"case_id": "brigitte_bardot_1934_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 6,
|
||||
"d60_sign_idx_pyjhora": 6,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 224.6155,
|
||||
"case_id": "bruce_lee_1940_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 0,
|
||||
"d60_sign_idx_pyjhora": 0,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 259.5116,
|
||||
"case_id": "catherine_deneuve_1943_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 11,
|
||||
"d60_sign_idx_pyjhora": 11,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 181.278,
|
||||
"case_id": "charles_de_gaulle_1890_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 8,
|
||||
"d60_sign_idx_pyjhora": 8,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 76.9514,
|
||||
"case_id": "cher_1946_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 11,
|
||||
"d60_sign_idx_pyjhora": 11,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 207.1468,
|
||||
"case_id": "clint_eastwood_1930_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 0,
|
||||
"d60_sign_idx_pyjhora": 0,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 292.2015,
|
||||
"case_id": "daniel_barenboim_1942_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 5,
|
||||
"d60_sign_idx_pyjhora": 5,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 290.6112,
|
||||
"case_id": "diane_cilento_1932_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 2,
|
||||
"d60_sign_idx_pyjhora": 2,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 181.5986,
|
||||
"case_id": "dingdong_dantes_1980_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 9,
|
||||
"d60_sign_idx_pyjhora": 9,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 128.3089,
|
||||
"case_id": "donald_trump_1946_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 8,
|
||||
"d60_sign_idx_pyjhora": 8,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 212.402,
|
||||
"case_id": "edith_piaf_1915_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 11,
|
||||
"d60_sign_idx_pyjhora": 11,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 230.8658,
|
||||
"case_id": "elvis_presley_1935_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 0,
|
||||
"d60_sign_idx_pyjhora": 0,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 46.0748,
|
||||
"case_id": "francois_hollande_1954_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 9,
|
||||
"d60_sign_idx_pyjhora": 9,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 122.4798,
|
||||
"case_id": "frida_kahlo_1907_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 8,
|
||||
"d60_sign_idx_pyjhora": 8,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 105.4441,
|
||||
"case_id": "george_w_bush_1946_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 9,
|
||||
"d60_sign_idx_pyjhora": 9,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 263.6478,
|
||||
"case_id": "gisele_bundchen_1980_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 7,
|
||||
"d60_sign_idx_pyjhora": 7,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 92.6966,
|
||||
"case_id": "gustavo_kuerten_1976_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 8,
|
||||
"d60_sign_idx_pyjhora": 8,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 77.1545,
|
||||
"case_id": "imelda_marcos_1929_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 0,
|
||||
"d60_sign_idx_pyjhora": 0,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 303.9231,
|
||||
"case_id": "janis_joplin_1943_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 5,
|
||||
"d60_sign_idx_pyjhora": 5,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 182.6838,
|
||||
"case_id": "jennifer_aniston_1969_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 11,
|
||||
"d60_sign_idx_pyjhora": 11,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 243.0694,
|
||||
"case_id": "jimi_hendrix_1942_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 2,
|
||||
"d60_sign_idx_pyjhora": 2,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 110.5385,
|
||||
"case_id": "johnny_depp_1963_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 8,
|
||||
"d60_sign_idx_pyjhora": 8,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 79.5603,
|
||||
"case_id": "judy_garland_1922_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 5,
|
||||
"d60_sign_idx_pyjhora": 5,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 274.8708,
|
||||
"case_id": "juscelino_kubitschek_1902_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 6,
|
||||
"d60_sign_idx_pyjhora": 6,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 62.5086,
|
||||
"case_id": "kamala_harris_1964_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 7,
|
||||
"d60_sign_idx_pyjhora": 7,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 161.0553,
|
||||
"case_id": "leonardo_dicaprio_1974_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 3,
|
||||
"d60_sign_idx_pyjhora": 3,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 282.7709,
|
||||
"case_id": "lionel_messi_1987_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 10,
|
||||
"d60_sign_idx_pyjhora": 10,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 116.2537,
|
||||
"case_id": "lou_diamond_phillips_1962_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 7,
|
||||
"d60_sign_idx_pyjhora": 7,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 186.6657,
|
||||
"case_id": "manuel_puig_1932_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 7,
|
||||
"d60_sign_idx_pyjhora": 7,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 111.6899,
|
||||
"case_id": "marilyn_monroe_1926_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 10,
|
||||
"d60_sign_idx_pyjhora": 10,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 101.0442,
|
||||
"case_id": "meryl_streep_1949_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 1,
|
||||
"d60_sign_idx_pyjhora": 1,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 36.3265,
|
||||
"case_id": "miley_cyrus_1992_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 1,
|
||||
"d60_sign_idx_pyjhora": 1,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 117.9238,
|
||||
"case_id": "muhammad_ali_1942_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 10,
|
||||
"d60_sign_idx_pyjhora": 10,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 154.3377,
|
||||
"case_id": "nicolas_sarkozy_1955_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 1,
|
||||
"d60_sign_idx_pyjhora": 1,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 137.9234,
|
||||
"case_id": "pele_1940_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 3,
|
||||
"d60_sign_idx_pyjhora": 3,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 132.9944,
|
||||
"case_id": "piolo_pascual_1977_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 5,
|
||||
"d60_sign_idx_pyjhora": 5,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 204.8647,
|
||||
"case_id": "prince_1958_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 7,
|
||||
"d60_sign_idx_pyjhora": 7,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 197.6444,
|
||||
"case_id": "rafael_nadal_1986_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 5,
|
||||
"d60_sign_idx_pyjhora": 5,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 178.9455,
|
||||
"case_id": "rudy_fernandez_1952_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 2,
|
||||
"d60_sign_idx_pyjhora": 2,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 91.157,
|
||||
"case_id": "salvador_dali_1904_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 5,
|
||||
"d60_sign_idx_pyjhora": 5,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 11.0106,
|
||||
"case_id": "serena_williams_1981_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 10,
|
||||
"d60_sign_idx_pyjhora": 10,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 152.8918,
|
||||
"case_id": "silvio_santos_1930_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 10,
|
||||
"d60_sign_idx_pyjhora": 10,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 253.9547,
|
||||
"case_id": "sophia_loren_1934_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 11,
|
||||
"d60_sign_idx_pyjhora": 11,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 171.3938,
|
||||
"case_id": "venus_williams_1980_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 11,
|
||||
"d60_sign_idx_pyjhora": 11,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 90.7335,
|
||||
"case_id": "vincent_van_gogh_1853_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 4,
|
||||
"d60_sign_idx_pyjhora": 4,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 316.5233,
|
||||
"case_id": "whitney_houston_1963_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 7,
|
||||
"d60_sign_idx_pyjhora": 7,
|
||||
"matches_pyjhora": true
|
||||
},
|
||||
{
|
||||
"ascendant_longitude": 36.9097,
|
||||
"case_id": "zinedine_zidane_1972_aa_v5_holdout",
|
||||
"d60_sign_idx_production": 2,
|
||||
"d60_sign_idx_pyjhora": 2,
|
||||
"matches_pyjhora": true
|
||||
}
|
||||
],
|
||||
"dataset": {
|
||||
"cases": 77,
|
||||
"path": "references/real_case_calibration/minute_rectification_holdout_v5.json",
|
||||
"sha256": "ab365a3e3f4953d4b538f2c0889dc98ab89444a28340c3a7b29e2a864cdd687a"
|
||||
},
|
||||
"gate": {
|
||||
"matches": 77,
|
||||
"passed": true,
|
||||
"rate": 1.0,
|
||||
"threshold": 0.95
|
||||
},
|
||||
"issue": 149,
|
||||
"profile": {
|
||||
"ayanamsa": "raman",
|
||||
"node_mode": "mean",
|
||||
"pyjhora_ayanamsa_mode": "Raman",
|
||||
"pyjhora_chart": "divisional_chart(divisional_chart_factor=60), traditional Parasara from sign"
|
||||
},
|
||||
"scope": "d60_gate_g1_engine_reconciliation",
|
||||
"task": "docs/tasks/TASK-rectification-d60-two-way-20261028.md"
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"record_version": "reported-offset-native-candidate-date-v3",
|
||||
"frozen_at_utc": "2026-10-29T06:08:16.682046+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": "4bb731f7b5043de0b967ccd7e852ae25a1ecdce96c2b7987c142d7878b6632b2",
|
||||
"implementation_sha256_prefix": "4bb731f7b5043de0",
|
||||
"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": "fcf10cb3a5742bb7e2d98d15d69638769cd830f470373ea93745a1cab3718c9b",
|
||||
"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": "4eb2c03b09a179dd81f912d735823dd09ec8506da2538f40d3a8e04d3ebc6c67",
|
||||
"file_sha256": {
|
||||
"scripts/active_rectification_event_engine.py": "96c537d221a84680ddaaba74e3335162c44b5bbd9a60d10e69550a2095910d98",
|
||||
"scripts/active_rectification_events.py": "03e333ccf1103caf685dfe50fe890ab1793e945037085f50ce834a4a3b232222",
|
||||
"scripts/ashtakavarga.py": "c524da3f54b2ed9c080b78b33854854a0ca3d5d79b7e536bb1c3bc2be3e02852",
|
||||
"scripts/dasha_analyzer.py": "3949b96813217fe624899856afec9f0b787c4cb0fea3a9a0d961990dbd11943a",
|
||||
"scripts/divisional_charts_extended.py": "e9820e80f14fddc86ab5495d11455d16c2d3c9502a9a242fcf9efc41186e0d11",
|
||||
"scripts/domain_calculation_service.py": "66923a2bc69daf65c965d2973c4b9234edbec5147909eaf3609b6b377ce3c7ca",
|
||||
"scripts/functional_benefics.py": "cbaac3b8c09b97f8724b5300e9a402cbf77089af6c7db8788550d40fd35ac57b",
|
||||
"scripts/jaimini.py": "6b88658da5404da9b136686d92a04be462d61a39da6e8de4255021e2ed2d1173",
|
||||
"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": "bc667c30c9562fb73fb0b7b4c22a5e377f9a531795141fc629b2cd3cf396773a",
|
||||
"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": "cabc96d1f8c7ed06ef34da4e02e052f598a5e62fd71a7ccbe7b0b099247c27d0",
|
||||
"scripts/research/sealed_holdout_rerun.py": "69a7ddddfc4a88ec5c85f400c763f8cdbb3c58c00fe9e788a72f79daba1d3bc1",
|
||||
"scripts/shadbala.py": "334dc9d8e4292f0c95d40fd4c29285aa89b9e49d4f187fb9498f4bb0ad93bdfc",
|
||||
"scripts/varga.py": "1bca389e4f36d293a755de175163c3f39b42bab5831cb6f7828830899f9f177e"
|
||||
},
|
||||
"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": "cabc96d1f8c7ed06ef34da4e02e052f598a5e62fd71a7ccbe7b0b099247c27d0",
|
||||
"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": "fcf10cb3a5742bb7e2d98d15d69638769cd830f470373ea93745a1cab3718c9b",
|
||||
"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": "4eb2c03b09a179dd81f912d735823dd09ec8506da2538f40d3a8e04d3ebc6c67",
|
||||
"file_sha256": {
|
||||
"scripts/active_rectification_event_engine.py": "96c537d221a84680ddaaba74e3335162c44b5bbd9a60d10e69550a2095910d98",
|
||||
"scripts/active_rectification_events.py": "03e333ccf1103caf685dfe50fe890ab1793e945037085f50ce834a4a3b232222",
|
||||
"scripts/ashtakavarga.py": "c524da3f54b2ed9c080b78b33854854a0ca3d5d79b7e536bb1c3bc2be3e02852",
|
||||
"scripts/dasha_analyzer.py": "3949b96813217fe624899856afec9f0b787c4cb0fea3a9a0d961990dbd11943a",
|
||||
"scripts/divisional_charts_extended.py": "e9820e80f14fddc86ab5495d11455d16c2d3c9502a9a242fcf9efc41186e0d11",
|
||||
"scripts/domain_calculation_service.py": "66923a2bc69daf65c965d2973c4b9234edbec5147909eaf3609b6b377ce3c7ca",
|
||||
"scripts/functional_benefics.py": "cbaac3b8c09b97f8724b5300e9a402cbf77089af6c7db8788550d40fd35ac57b",
|
||||
"scripts/jaimini.py": "6b88658da5404da9b136686d92a04be462d61a39da6e8de4255021e2ed2d1173",
|
||||
"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": "bc667c30c9562fb73fb0b7b4c22a5e377f9a531795141fc629b2cd3cf396773a",
|
||||
"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": "cabc96d1f8c7ed06ef34da4e02e052f598a5e62fd71a7ccbe7b0b099247c27d0",
|
||||
"scripts/research/sealed_holdout_rerun.py": "69a7ddddfc4a88ec5c85f400c763f8cdbb3c58c00fe9e788a72f79daba1d3bc1",
|
||||
"scripts/shadbala.py": "334dc9d8e4292f0c95d40fd4c29285aa89b9e49d4f187fb9498f4bb0ad93bdfc",
|
||||
"scripts/varga.py": "1bca389e4f36d293a755de175163c3f39b42bab5831cb6f7828830899f9f177e"
|
||||
},
|
||||
"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-10-29T06:07:58.433310+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": "4bb731f7b5043de0b967ccd7e852ae25a1ecdce96c2b7987c142d7878b6632b2",
|
||||
"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": "69a7ddddfc4a88ec5c85f400c763f8cdbb3c58c00fe9e788a72f79daba1d3bc1",
|
||||
"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
@@ -57,3 +57,22 @@ G2–G5、模型端到端对比、MEVG、报告:全部 `not_started`(G1 不
|
||||
|
||||
- `jyotishganit` 未安装;G1 的外部引擎只剩 PyJHora(门要求「与至少一个外部引擎一致 ≥95%」,仍可判)。
|
||||
- 预检的 `focused_tests` 有一条与本单无关的失败(上面已列)。
|
||||
|
||||
## 第 1 次修正:D60 映射(2026-10-29)
|
||||
|
||||
按修复单 `docs/tasks/TASK-rectification-d60-fix-20261029.md` 与产品选择 1 执行。
|
||||
|
||||
| 步 | 做了什么 | 结果 |
|
||||
| --- | --- | --- |
|
||||
| T0 | 合并最新 `origin/staging`(`68670b281`) | 只有 `docs/BUG_HISTORY.md` 冲突;按编号合并,保留 staging 的 BUG-1496 / 1498 / 1499 与本分支的 BUG-1497 / 1500 |
|
||||
| T1 | `scripts/varga.py` 的 D60 改为 `(si+pi)%12`(奇偶同规则),加来源注释 | 新增 `tests/test_d60_varga_mapping.py`:12 星座 × 60 段逐段对 PyJHora、偶数星座第 1 段在本星座,8 项全过 |
|
||||
| T3 | 查锁 D60 旧值的测试 | `tests/test_varga_bphs.py`、`test_upstream_sync9b_varga_bphs.py`、`test_deep_varga_avastha.py`、`test_divisional_charts_extended.py`、`test_cli_smoke.py` 均通过,没有写死旧 D60 星座的断言可改 |
|
||||
| T2 | 密封 20 + 报时 900 与 `upstream_sync9b_2026_10_28` 记录逐条比 | 20/20、900/900,8 字段与全字段不一致 0,`metrics` / `summary` 相同 → 按 ERR-110 重新冻结为 `d60_mapping_2026_10_29` |
|
||||
| T4 | 提交 G1 脚本并重跑 | `scripts/research/d60_two_way_run.py` 77/77,门通过;结果 `docs/research/d60_two_way_results_2026_10_29.json`(无时间戳、排序输出,可逐字节复跑) |
|
||||
| T6 | 记录 | BUG-1500 → resolved,BUG-1497 更新;CHANGELOG 一条;本文件 |
|
||||
|
||||
跑过的测试:`tests/test_cli_smoke.py` 35 passed;分盘相关 96 passed、1 failed(`tests/test_d1_d60_varga_mapping_registry.py` 调 `python3`,本机只有 `python`,环境缺口,与本次改动无关);`tests/test_d60_varga_mapping.py` 8 passed;`tests/test_d60_two_way_research.py` 1 passed。
|
||||
|
||||
本轮没有跑:Python 快速门(留给验收)、前端(未改产品代码,但合同指针挪了,`rectification-confirmation-gate.test.ts` 的路径按前几轮先例改了)。
|
||||
|
||||
下一步(T5):按任务书 §3.3 的口径先写先登记 JSON(G2–G5 规则、阈值、种子),commit 之后再在 v5 上跑计分。
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
| 任务书 | 进度 | 主题 | 状态 | 落点 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `TASK-rectification-d60-two-way-20261028.md` | `PROGRESS-rectification-d60-two-way-20261028.md`(执行方写) | **D60 换格要不要进生时校正:双向对比(issue #149)**:纳迪 / D150 已在 BUG-1240 证伪,本单只测 D60。A 组生产 V9、B 组加 D60 换格判据,同一批 v5 77 例看「有没有帮助」和「有没有伤害」;先登记再跑,G1 三引擎对账、G2 找回记录分钟、G3 不伤真值、G4 安慰剂、G5 换岁差噪声地板;另做 20 例模型参与的端到端对话对比(报告项)。离线研究、生产零改动。预留 BUG-1497 | 待领取 | 本地 Grok 执行 |
|
||||
| `TASK-rectification-d60-two-way-20261028.md` | `PROGRESS-rectification-d60-two-way-20261028.md`(执行方写) | **D60 换格要不要进生时校正:双向对比(issue #149)**:纳迪 / D150 已在 BUG-1240 证伪,本单只测 D60。A 组生产 V9、B 组加 D60 换格判据,同一批 v5 77 例看「有没有帮助」和「有没有伤害」;先登记再跑,G1 三引擎对账、G2 找回记录分钟、G3 不伤真值、G4 安慰剂、G5 换岁差噪声地板;另做 20 例模型参与的端到端对话对比(报告项)。离线研究、生产零改动。预留 BUG-1497 | 进行中:G1 首次 33/77 → 修 D60 映射(BUG-1500)后 77/77 通过;G2–G5 等先登记后再跑 | 本地 Grok 执行 |
|
||||
| `TASK-rectification-explicit-open-20261023.md` | `PROGRESS-rectification-explicit-open-20261023.md` | **明说要校正只回一句话(issue #103)**:找会话直接读一张对服务角色撤权的表、必然失败被吞(真正进行中的也续不上);`candidate_accepted` 被算作进行中挡住入口和提议卡;兜底只给一句话。产品选 C;只改入口口径、经 RPC 找会话、删兜底,不改共享状态集合、不动表。BUG-1423 | 已合入 staging | 分支 `codex/rectification-explicit-open-20261023` |
|
||||
| `TASK-chart-table-span-20261023.md` | `PROGRESS-chart-table-span-20261023.md` | **星盘页本命 / 月亮行星表挤进左栏(issue #102)**:#87 给表包了 `ChartSymbolHelp` 后跨栏规则失配;根因修法是 `VedicLayout` 用固定整行容器承载表格,跨栏只认容器;加结构断言防复发。BUG-1422 | 已合入 staging | 分支 `codex/chart-table-span-20261023` |
|
||||
| `TASK-ui-kit-migration-20261023.md` | `PROGRESS-ui-kit-0-base-20261023.md`;`PROGRESS-ui-kit-1-shell-20261023.md`;`PROGRESS-ui-kit-2-chat-20261023.md`;`PROGRESS-ui-kit-3-chart-20261023.md`;`PROGRESS-ui-kit-4-people-20261023.md`;`PROGRESS-ui-kit-5-pages-20261023.md`;`PROGRESS-ui-kit-6-rectification-20261023.md`;`PROGRESS-ui-kit-7-cleanup-20261023.md` | **界面统一换成组件库**:shadcn base-nova(补 `shadcn/tailwind.css`)· Lucide · Motion · react-resizable-panels · dnd-kit · Zustand;lint 拦手写控件(白名单只减不增);对话旁星盘面板;会话、档案拖动排序(动表);长相不变。产品 2026-10-23 拍板 D1~D8;8 个 issue(K0~K7)串行,取代全站动效 #98 #100 #101 | K0–K7 已在测试环境,待验收 | 原型 https://claude.ai/artifact/PGnWsjHhu38KJseEfEMNWG |
|
||||
|
||||
@@ -114,8 +114,11 @@ const diagnosticReport = JSON.parse(readFileSync(
|
||||
// 原值(11):docs/research/sealed_holdout_rerun_upstream_sync8_2026_10_18.json
|
||||
// 新值(11):docs/research/sealed_holdout_rerun_upstream_sync9b_2026_10_28.json
|
||||
// 原因(11):sync9b(BUG-1494~1495)改了冻结身份里的 scripts/varga.py,输出不变,ERR-110 另存新记录。确认门行为与阈值不变。
|
||||
// 原值(12):docs/research/sealed_holdout_rerun_upstream_sync9b_2026_10_28.json
|
||||
// 新值(12):docs/research/sealed_holdout_rerun_d60_mapping_2026_10_29.json
|
||||
// 原因(12):BUG-1500 修正生产 D60 映射(scripts/varga.py),输出不变,ERR-110 另存新记录。确认门行为与阈值不变。
|
||||
const currentTreeRerun = JSON.parse(readFileSync(
|
||||
new URL("../../docs/research/sealed_holdout_rerun_upstream_sync9b_2026_10_28.json", import.meta.url),
|
||||
new URL("../../docs/research/sealed_holdout_rerun_d60_mapping_2026_10_29.json", import.meta.url),
|
||||
"utf8",
|
||||
)) as {
|
||||
frozen_record: { implementation_sha256: string };
|
||||
@@ -264,9 +267,10 @@ test("sealed holdout aggregates match the v3 report and still block confirmation
|
||||
// 原值(8):…ephemeris_nutation_2026_10_08.json / 新值(8):…scoring_perf_2026_10_13.json / 原因(8):BUG-1323~1325 改了冻结身份文件,输出不变,ERR-110 另存新记录。
|
||||
// 原值(9):…scoring_perf_2026_10_13.json / 新值(9):…upstream_sync8_2026_10_18.json / 原因(9):sync8 改了冻结身份文件,输出不变,ERR-110 另存新记录。
|
||||
// 原值(10):…upstream_sync8_2026_10_18.json / 新值(10):…upstream_sync9b_2026_10_28.json / 原因(10):sync9b 改了冻结身份里的 varga.py,输出不变,ERR-110 另存新记录。
|
||||
// 原值(11):…upstream_sync9b_2026_10_28.json / 新值(11):…d60_mapping_2026_10_29.json / 原因(11):BUG-1500 修正 D60 映射,输出不变,ERR-110 另存新记录。
|
||||
assert.equal(
|
||||
productHoldout.current_tree_scorer.source_report,
|
||||
"docs/research/sealed_holdout_rerun_upstream_sync9b_2026_10_28.json",
|
||||
"docs/research/sealed_holdout_rerun_d60_mapping_2026_10_29.json",
|
||||
);
|
||||
assert.equal(currentTreeRerun.official_valid_independent_blind, false);
|
||||
assert.equal(productHoldout.current_tree_scorer.matches_metrics_scorer, false);
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"dataset_path": "references/real_case_calibration/minute_rectification_holdout_v3.json",
|
||||
"report_path": "references/real_case_calibration/minute_rectification_holdout_v3_report.json",
|
||||
"source_audit_status": "corrected_known_date_errors",
|
||||
"evaluated_on": "2026-10-28",
|
||||
"evaluated_on": "2026-10-29",
|
||||
"evaluated_on_scope": "latest_fixed_protocol_rerun_not_historical_runtime_metrics",
|
||||
"historical_source_audit_status": "invalidated_after_replay",
|
||||
"report_status": "invalidated_after_source_audit",
|
||||
@@ -24,7 +24,7 @@
|
||||
"evaluated_on": "2026-07-21"
|
||||
},
|
||||
"current_tree_scorer": {
|
||||
"implementation_sha256": "b44505aa0034e486fcfc29c8611a9559333a97c1005f92e6a5356bd855122205",
|
||||
"implementation_sha256": "4bb731f7b5043de0b967ccd7e852ae25a1ecdce96c2b7987c142d7878b6632b2",
|
||||
"extended_identity": {
|
||||
"historical_artifacts_manifest_sha256": "6102a26a840be207b5858b3a4c0509274468ae9071e86d308cbbac7371d6864e",
|
||||
"production_scoring_files": [
|
||||
@@ -52,7 +52,7 @@
|
||||
"scripts/shadbala.py",
|
||||
"scripts/varga.py"
|
||||
],
|
||||
"production_scoring_sha256": "7a727418651321d1b9073588587050c4dc6292587748cf35734dd76cefb0effe",
|
||||
"production_scoring_sha256": "fcf10cb3a5742bb7e2d98d15d69638769cd830f470373ea93745a1cab3718c9b",
|
||||
"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": "6fa0b0c335ac0cdc25ee887d432ae2f1f6487c665aed9665ad5cc0bc6ef0283b",
|
||||
"research_implementation_sha256": "4eb2c03b09a179dd81f912d735823dd09ec8506da2538f40d3a8e04d3ebc6c67",
|
||||
"file_sha256": {
|
||||
"scripts/active_rectification_event_engine.py": "96c537d221a84680ddaaba74e3335162c44b5bbd9a60d10e69550a2095910d98",
|
||||
"scripts/active_rectification_events.py": "03e333ccf1103caf685dfe50fe890ab1793e945037085f50ce834a4a3b232222",
|
||||
@@ -90,17 +90,17 @@
|
||||
"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": "8ecc381dfaa3c0e6bea058cfa44c606aabdb1086c137f16da82ee5a3bf5ccc91",
|
||||
"scripts/research/sealed_holdout_rerun.py": "ebcdae760f2b76c81d5d0c8e2bf347cff4c81cca9074f27ae94b6734408ccd42",
|
||||
"scripts/research/reported_offset_sweep.py": "cabc96d1f8c7ed06ef34da4e02e052f598a5e62fd71a7ccbe7b0b099247c27d0",
|
||||
"scripts/research/sealed_holdout_rerun.py": "69a7ddddfc4a88ec5c85f400c763f8cdbb3c58c00fe9e788a72f79daba1d3bc1",
|
||||
"scripts/shadbala.py": "334dc9d8e4292f0c95d40fd4c29285aa89b9e49d4f187fb9498f4bb0ad93bdfc",
|
||||
"scripts/varga.py": "8ff96b9fc8346ca249abff6109434b6ed57fa150e1a9854d4f73bdf317568368"
|
||||
"scripts/varga.py": "1bca389e4f36d293a755de175163c3f39b42bab5831cb6f7828830899f9f177e"
|
||||
},
|
||||
"hash_scope": "explicit_identity_file_sets_not_a_transitive_dependency_lock"
|
||||
},
|
||||
"matches_metrics_scorer": false,
|
||||
"official_eval_implementation_hash_matches": false,
|
||||
"official_eval_trial_count": 0,
|
||||
"source_report": "docs/research/sealed_holdout_rerun_upstream_sync9b_2026_10_28.json",
|
||||
"source_report": "docs/research/sealed_holdout_rerun_d60_mapping_2026_10_29.json",
|
||||
"fixed_protocol_rerun_trial_count": 20,
|
||||
"fixed_protocol_rerun_hash_matches": true,
|
||||
"metrics": {
|
||||
@@ -113,6 +113,106 @@
|
||||
}
|
||||
},
|
||||
"current_tree_fixed_protocol_rerun": {
|
||||
"evaluated_on": "2026-10-29",
|
||||
"report_path": "docs/research/sealed_holdout_rerun_d60_mapping_2026_10_29.json",
|
||||
"freeze_record_path": "docs/research/sealed_holdout_rerun_d60_mapping_2026_10_29.freeze.json",
|
||||
"implementation_sha256": "4bb731f7b5043de0b967ccd7e852ae25a1ecdce96c2b7987c142d7878b6632b2",
|
||||
"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": "fcf10cb3a5742bb7e2d98d15d69638769cd830f470373ea93745a1cab3718c9b",
|
||||
"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": "4eb2c03b09a179dd81f912d735823dd09ec8506da2538f40d3a8e04d3ebc6c67",
|
||||
"file_sha256": {
|
||||
"scripts/active_rectification_event_engine.py": "96c537d221a84680ddaaba74e3335162c44b5bbd9a60d10e69550a2095910d98",
|
||||
"scripts/active_rectification_events.py": "03e333ccf1103caf685dfe50fe890ab1793e945037085f50ce834a4a3b232222",
|
||||
"scripts/ashtakavarga.py": "c524da3f54b2ed9c080b78b33854854a0ca3d5d79b7e536bb1c3bc2be3e02852",
|
||||
"scripts/dasha_analyzer.py": "3949b96813217fe624899856afec9f0b787c4cb0fea3a9a0d961990dbd11943a",
|
||||
"scripts/divisional_charts_extended.py": "e9820e80f14fddc86ab5495d11455d16c2d3c9502a9a242fcf9efc41186e0d11",
|
||||
"scripts/domain_calculation_service.py": "66923a2bc69daf65c965d2973c4b9234edbec5147909eaf3609b6b377ce3c7ca",
|
||||
"scripts/functional_benefics.py": "cbaac3b8c09b97f8724b5300e9a402cbf77089af6c7db8788550d40fd35ac57b",
|
||||
"scripts/jaimini.py": "6b88658da5404da9b136686d92a04be462d61a39da6e8de4255021e2ed2d1173",
|
||||
"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": "bc667c30c9562fb73fb0b7b4c22a5e377f9a531795141fc629b2cd3cf396773a",
|
||||
"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": "cabc96d1f8c7ed06ef34da4e02e052f598a5e62fd71a7ccbe7b0b099247c27d0",
|
||||
"scripts/research/sealed_holdout_rerun.py": "69a7ddddfc4a88ec5c85f400c763f8cdbb3c58c00fe9e788a72f79daba1d3bc1",
|
||||
"scripts/shadbala.py": "334dc9d8e4292f0c95d40fd4c29285aa89b9e49d4f187fb9498f4bb0ad93bdfc",
|
||||
"scripts/varga.py": "1bca389e4f36d293a755de175163c3f39b42bab5831cb6f7828830899f9f177e"
|
||||
},
|
||||
"hash_scope": "explicit_identity_file_sets_not_a_transitive_dependency_lock"
|
||||
},
|
||||
"scorer_frozen_before_rerun": true,
|
||||
"source_audit_status": "corrected_known_date_errors",
|
||||
"trial_count": 20,
|
||||
"official_valid_independent_blind": false,
|
||||
"is_blind_evaluation": false,
|
||||
"truth_hidden_from_ranker": true,
|
||||
"results_previously_seen": true,
|
||||
"must_not_claim_as_release_metrics": true,
|
||||
"must_not_use_for_tuning": true,
|
||||
"verified_minute_claim_allowed": false,
|
||||
"metric_gates_passed": false,
|
||||
"events_per_case": 3,
|
||||
"boundary": "Previously exposed v3 shadow fixed-protocol rerun after the D60 mapping fix (ERR-110, BUG-1500). Trials and metrics match the 2026-10-18 upstream sync8 and the upstream_sync9b reports. 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": "9e667c4e5819674e82519bfe9415d49a202515c765ea99609a9dd27feb69c77d",
|
||||
"freeze_record_sha256": "8f300876eca9aac683879f1b26204be885c03b2c7b6d03e5930386852cbe4700",
|
||||
"replay_started_at_utc": "2026-10-29T06:07:59.312582+00:00",
|
||||
"replay_finished_at_utc": "2026-10-29T06:08:15.756678+00:00",
|
||||
"previous_fixed_protocol_rerun": {
|
||||
"report_path": "docs/research/sealed_holdout_rerun_upstream_sync9b_2026_10_28.json",
|
||||
"freeze_record_path": "docs/research/sealed_holdout_rerun_upstream_sync9b_2026_10_28.freeze.json",
|
||||
"superseded_reason": "The D60 mapping fix (BUG-1500) changed scripts/varga.py, which is part of the extended identity. Output is unchanged, so ERR-110 stored a new record. Prior upstream_sync9b report and freeze preserved byte-for-byte."
|
||||
}
|
||||
},
|
||||
"previous_fixed_protocol_rerun": {
|
||||
"evaluated_on": "2026-10-28",
|
||||
"report_path": "docs/research/sealed_holdout_rerun_upstream_sync9b_2026_10_28.json",
|
||||
"freeze_record_path": "docs/research/sealed_holdout_rerun_upstream_sync9b_2026_10_28.freeze.json",
|
||||
@@ -212,106 +312,6 @@
|
||||
"superseded_reason": "Upstream sync9b (BUG-1494 to BUG-1495) changed scripts/varga.py, which is part of the extended identity. Output is unchanged, so ERR-110 stored a new record. Prior sync8 report and freeze preserved byte-for-byte."
|
||||
}
|
||||
},
|
||||
"previous_fixed_protocol_rerun": {
|
||||
"evaluated_on": "2026-10-18",
|
||||
"report_path": "docs/research/sealed_holdout_rerun_upstream_sync8_2026_10_18.json",
|
||||
"freeze_record_path": "docs/research/sealed_holdout_rerun_upstream_sync8_2026_10_18.freeze.json",
|
||||
"implementation_sha256": "bf8981b5c41702f9b333444deee2ab7378b9e98b111240e85ea62e6aae02fda8",
|
||||
"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": "c2c23bcbde5de58e519ae1d6545620edd0f738ce8dc2e872e659b598137a728f",
|
||||
"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": "9df579bdacd7dec43abd92c9abc1831771feb800fc29e6864dc315d083d52a03",
|
||||
"file_sha256": {
|
||||
"scripts/active_rectification_event_engine.py": "96c537d221a84680ddaaba74e3335162c44b5bbd9a60d10e69550a2095910d98",
|
||||
"scripts/active_rectification_events.py": "03e333ccf1103caf685dfe50fe890ab1793e945037085f50ce834a4a3b232222",
|
||||
"scripts/ashtakavarga.py": "c524da3f54b2ed9c080b78b33854854a0ca3d5d79b7e536bb1c3bc2be3e02852",
|
||||
"scripts/dasha_analyzer.py": "3949b96813217fe624899856afec9f0b787c4cb0fea3a9a0d961990dbd11943a",
|
||||
"scripts/divisional_charts_extended.py": "e9820e80f14fddc86ab5495d11455d16c2d3c9502a9a242fcf9efc41186e0d11",
|
||||
"scripts/domain_calculation_service.py": "66923a2bc69daf65c965d2973c4b9234edbec5147909eaf3609b6b377ce3c7ca",
|
||||
"scripts/functional_benefics.py": "cbaac3b8c09b97f8724b5300e9a402cbf77089af6c7db8788550d40fd35ac57b",
|
||||
"scripts/jaimini.py": "6b88658da5404da9b136686d92a04be462d61a39da6e8de4255021e2ed2d1173",
|
||||
"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": "bc667c30c9562fb73fb0b7b4c22a5e377f9a531795141fc629b2cd3cf396773a",
|
||||
"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": "e10537ca2caba3a4e6a8d2460265543b0cca55935afa8004108e45bef4bc3de7",
|
||||
"scripts/research/sealed_holdout_rerun.py": "7945353014b93b6d7641f278779111d85b1773293781343b802a9b4b655ca4b5",
|
||||
"scripts/shadbala.py": "334dc9d8e4292f0c95d40fd4c29285aa89b9e49d4f187fb9498f4bb0ad93bdfc",
|
||||
"scripts/varga.py": "c1f06967c3d4d214edadff139c24aa31e59fb628477174235abe14f799a99076"
|
||||
},
|
||||
"hash_scope": "explicit_identity_file_sets_not_a_transitive_dependency_lock"
|
||||
},
|
||||
"scorer_frozen_before_rerun": true,
|
||||
"source_audit_status": "corrected_known_date_errors",
|
||||
"trial_count": 20,
|
||||
"official_valid_independent_blind": false,
|
||||
"is_blind_evaluation": false,
|
||||
"truth_hidden_from_ranker": true,
|
||||
"results_previously_seen": true,
|
||||
"must_not_claim_as_release_metrics": true,
|
||||
"must_not_use_for_tuning": true,
|
||||
"verified_minute_claim_allowed": false,
|
||||
"metric_gates_passed": false,
|
||||
"events_per_case": 3,
|
||||
"boundary": "Previously exposed v3 shadow fixed-protocol rerun after upstream sync8 (ERR-110, BUG-1380 to BUG-1390). Trials and metrics match the 2026-10-13 scoring_perf report. Versus the 2026-09-20 historical report, changed_trial_count stays 8. Not a release metric. Prior scoring_perf report and freeze preserved byte-for-byte.",
|
||||
"report_sha256": "4573440f00138563122dd3aa12f4ca66517f2b4aad5a2db9373a87eeb8997ce4",
|
||||
"freeze_record_sha256": "493b4199df86c1d8782ae1016b2509d7602758d6fdb4e2c492207eb1af38eac0",
|
||||
"replay_started_at_utc": "2026-10-18T10:46:24.464749+00:00",
|
||||
"replay_finished_at_utc": "2026-10-18T10:46:26.772898+00:00",
|
||||
"previous_fixed_protocol_rerun": {
|
||||
"report_path": "docs/research/sealed_holdout_rerun_scoring_perf_2026_10_13.json",
|
||||
"freeze_record_path": "docs/research/sealed_holdout_rerun_scoring_perf_2026_10_13.freeze.json",
|
||||
"superseded_reason": "Upstream sync8 (BUG-1380 to BUG-1390) changed frozen identity files. Output is unchanged, so ERR-110 stored a new record. Prior scoring_perf report and freeze preserved byte-for-byte."
|
||||
}
|
||||
},
|
||||
"current_tree_unfrozen_diagnostic": {
|
||||
"is_blind_evaluation": false,
|
||||
"results_already_seen": true,
|
||||
@@ -330,6 +330,28 @@
|
||||
"verified_minute_claim_allowed": false
|
||||
},
|
||||
"current_tree_reported_offset_replay": {
|
||||
"report_path": "docs/research/reported_offset_d60_mapping_2026_10_29.json",
|
||||
"report_sha256": "f40157139733552dbefdfc999f95458de75594cd511df0e5377d606e27559f0d",
|
||||
"freeze_record_path": "docs/research/reported_offset_d60_mapping_2026_10_29.freeze.json",
|
||||
"freeze_record_sha256": "20e7684bc6c7356a421c2c20517c153279561f810cd15d77f260c9915352aed9",
|
||||
"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-10-29T06:08:17.701243+00:00",
|
||||
"replay_finished_at_utc": "2026-10-29T06:29:23.437778+00:00",
|
||||
"boundary": "Previously exposed reported-offset sensitivity after the D60 mapping fix (ERR-110, BUG-1500). Summary and trials match the 2026-10-18 upstream sync8 and the upstream_sync9b reports. 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_upstream_sync9b_2026_10_28.json",
|
||||
"report_sha256": "880bebc2e217100994a1442e47ead3f9d33e48aa3ac20f69d993f38def3ef25c",
|
||||
"freeze_record_path": "docs/research/reported_offset_upstream_sync9b_2026_10_28.freeze.json",
|
||||
"freeze_record_sha256": "385817bb27f04afeba230af5e547dd10dc8cf6db4b25c18bebe4f4e674cab972",
|
||||
"superseded_reason": "The D60 mapping fix (BUG-1500) changed scripts/varga.py, which is part of the extended identity. Output is unchanged, so ERR-110 stored a new record. Prior upstream_sync9b report and freeze preserved byte-for-byte."
|
||||
}
|
||||
},
|
||||
"previous_reported_offset_replay": {
|
||||
"report_path": "docs/research/reported_offset_upstream_sync9b_2026_10_28.json",
|
||||
"report_sha256": "880bebc2e217100994a1442e47ead3f9d33e48aa3ac20f69d993f38def3ef25c",
|
||||
"freeze_record_path": "docs/research/reported_offset_upstream_sync9b_2026_10_28.freeze.json",
|
||||
@@ -350,27 +372,5 @@
|
||||
"freeze_record_sha256": "117ab0bfa4a283e9d52073808f71dd8317f613c96b27ec271d887ef40087f4f5",
|
||||
"superseded_reason": "Upstream sync9b (BUG-1494 to BUG-1495) changed scripts/varga.py, which is part of the extended identity. Output is unchanged, so ERR-110 stored a new record. Prior sync8 report and freeze preserved byte-for-byte."
|
||||
}
|
||||
},
|
||||
"previous_reported_offset_replay": {
|
||||
"report_path": "docs/research/reported_offset_upstream_sync8_2026_10_18.json",
|
||||
"report_sha256": "a51aad2e743dccba7726d1a0a5e44c5e431ff429fe1725c9be2f7fa5e9282da6",
|
||||
"freeze_record_path": "docs/research/reported_offset_upstream_sync8_2026_10_18.freeze.json",
|
||||
"freeze_record_sha256": "117ab0bfa4a283e9d52073808f71dd8317f613c96b27ec271d887ef40087f4f5",
|
||||
"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-10-18T10:46:27.013583+00:00",
|
||||
"replay_finished_at_utc": "2026-10-18T10:49:10.767675+00:00",
|
||||
"boundary": "Previously exposed reported-offset sensitivity after upstream sync8 (ERR-110, BUG-1380 to BUG-1390). Summary and trials match the 2026-10-13 scoring_perf report. Versus the 2026-09-20 historical report, changed_trial_count stays 581 of 900. Not a release metric. No tuning. Prior scoring_perf report and freeze preserved byte-for-byte.",
|
||||
"previous_reported_offset_replay": {
|
||||
"report_path": "docs/research/reported_offset_scoring_perf_2026_10_13.json",
|
||||
"report_sha256": "9466cf3945a63621104157fb34291cb23205ddb045effa7e70f3c35647516443",
|
||||
"freeze_record_path": "docs/research/reported_offset_scoring_perf_2026_10_13.freeze.json",
|
||||
"freeze_record_sha256": "1560f24ffea19116c904272907ff9cce24904960406676f3aada3c8c174cf98a",
|
||||
"superseded_reason": "Upstream sync8 (BUG-1380 to BUG-1390) changed frozen identity files. Output is unchanged, so ERR-110 stored a new record. Versus the 2026-09-20 historical report, changed_trial_count stays 581 of 900. Prior scoring_perf report and freeze preserved byte-for-byte."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,145 @@
|
||||
#!/usr/bin/env python3
|
||||
"""G1: compare the production D60 ascendant with an external engine (issue #149).
|
||||
|
||||
For every case of the v5 minute-rectification holdout this prints the D60
|
||||
(rashi) sign of the ascendant from the production mapping and from PyJHora's
|
||||
traditional Parasara shashtyamsa chart. The gate in
|
||||
docs/tasks/TASK-rectification-d60-two-way-20261028.md asks for >=95% agreement
|
||||
with at least one external engine; after BUG-1500 both count from the sign
|
||||
itself and the expected result is 77/77.
|
||||
|
||||
The output is deterministic: no timestamps, sorted keys, fixed formatting, so
|
||||
a rerun on another machine can be compared byte for byte.
|
||||
|
||||
Usage:
|
||||
python scripts/research/d60_two_way_run.py # writes the results JSON
|
||||
python scripts/research/d60_two_way_run.py --json # prints it to stdout
|
||||
|
||||
PyJHora is AGPL; it is imported here only, never copied into production code.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import hashlib
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[2]
|
||||
if str(ROOT) not in sys.path:
|
||||
sys.path.insert(0, str(ROOT))
|
||||
SCRIPTS = ROOT / "scripts"
|
||||
if str(SCRIPTS) not in sys.path:
|
||||
sys.path.insert(0, str(SCRIPTS))
|
||||
|
||||
from scripts.jyotish_engine import compute_chart_data # noqa: E402
|
||||
|
||||
DATASET = ROOT / "references/real_case_calibration/minute_rectification_holdout_v5.json"
|
||||
DEFAULT_OUT = ROOT / "docs/research/d60_two_way_results_2026_10_29.json"
|
||||
GATE_RATE = 0.95
|
||||
|
||||
|
||||
def _cases() -> list[dict]:
|
||||
return json.loads(DATASET.read_text(encoding="utf-8"))["cases"]
|
||||
|
||||
|
||||
def our_d60_ascendant(case: dict) -> tuple[float, int]:
|
||||
birth = case["birth"]
|
||||
year, month, day = (int(part) for part in birth["date"].split("-"))
|
||||
hour, minute = (int(part) for part in birth["time"].split(":"))
|
||||
chart, _asc_idx, _jd, _ayanamsa = compute_chart_data(
|
||||
year,
|
||||
month,
|
||||
day,
|
||||
hour,
|
||||
minute,
|
||||
birth["latitude"],
|
||||
birth["longitude"],
|
||||
birth["timezone_offset"],
|
||||
node_mode="mean",
|
||||
ayanamsa_name="raman",
|
||||
)
|
||||
import varga
|
||||
|
||||
longitude = float((chart.get("ascendant") or {})["degree_raw"])
|
||||
return longitude, int(varga.calc_varga(longitude, 60)["sign_idx"])
|
||||
|
||||
|
||||
def pyjhora_d60_ascendant(case: dict) -> int:
|
||||
from jhora import utils
|
||||
from jhora.horoscope.chart import charts
|
||||
from jhora.panchanga import drik
|
||||
|
||||
birth = case["birth"]
|
||||
year, month, day = (int(part) for part in birth["date"].split("-"))
|
||||
hour, minute = (int(part) for part in birth["time"].split(":"))
|
||||
drik.set_ayanamsa_mode("Raman")
|
||||
jd = utils.julian_day_number((year, month, day), (hour, minute, 0))
|
||||
place = drik.Place("case", birth["latitude"], birth["longitude"], birth["timezone_offset"])
|
||||
chart = charts.divisional_chart(jd, place, divisional_chart_factor=60)
|
||||
lagna = next(item for item in chart if str(item[0]) == "L")
|
||||
return int(lagna[1][0])
|
||||
|
||||
|
||||
def run() -> dict:
|
||||
rows = []
|
||||
for case in _cases():
|
||||
longitude, ours = our_d60_ascendant(case)
|
||||
theirs = pyjhora_d60_ascendant(case)
|
||||
rows.append(
|
||||
{
|
||||
"case_id": case["case_id"],
|
||||
"ascendant_longitude": round(longitude, 6),
|
||||
"d60_sign_idx_production": ours,
|
||||
"d60_sign_idx_pyjhora": theirs,
|
||||
"matches_pyjhora": ours == theirs,
|
||||
}
|
||||
)
|
||||
matches = sum(row["matches_pyjhora"] for row in rows)
|
||||
count = len(rows)
|
||||
return {
|
||||
"scope": "d60_gate_g1_engine_reconciliation",
|
||||
"task": "docs/tasks/TASK-rectification-d60-two-way-20261028.md",
|
||||
"brief": "docs/tasks/TASK-rectification-d60-fix-20261029.md",
|
||||
"issue": 149,
|
||||
"bug": "BUG-1500",
|
||||
"dataset": {
|
||||
"path": DATASET.relative_to(ROOT).as_posix(),
|
||||
"sha256": hashlib.sha256(DATASET.read_bytes()).hexdigest(),
|
||||
"cases": count,
|
||||
},
|
||||
"profile": {
|
||||
"ayanamsa": "raman",
|
||||
"node_mode": "mean",
|
||||
"pyjhora_ayanamsa_mode": "Raman",
|
||||
"pyjhora_chart": "divisional_chart(divisional_chart_factor=60), traditional Parasara from sign",
|
||||
},
|
||||
"gate": {
|
||||
"threshold": GATE_RATE,
|
||||
"matches": matches,
|
||||
"rate": round(matches / count, 4) if count else None,
|
||||
"passed": bool(count) and matches / count >= GATE_RATE,
|
||||
},
|
||||
"cases": rows,
|
||||
}
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--json", action="store_true", help="print instead of writing the default path")
|
||||
parser.add_argument("--out", default=None)
|
||||
args = parser.parse_args()
|
||||
payload = run()
|
||||
text = json.dumps(payload, ensure_ascii=False, indent=2, sort_keys=True) + "\n"
|
||||
if args.json:
|
||||
print(text, end="")
|
||||
return 0
|
||||
out = Path(args.out) if args.out else DEFAULT_OUT
|
||||
out.write_text(text, encoding="utf-8", newline="\n")
|
||||
print(out.relative_to(ROOT).as_posix())
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
@@ -33,8 +33,11 @@ MINUTE_STEP = 1
|
||||
# 原值: docs/research/reported_offset_upstream_sync8_2026_10_18.{freeze.json,json}
|
||||
# 新值: docs/research/reported_offset_upstream_sync9b_2026_10_28.{freeze.json,json}
|
||||
# 原因: sync9b(BUG-1494~1495)改了 scripts/varga.py,它在扩展身份里;报时窗口输出不变,ERR-110 另存新记录
|
||||
FREEZE = ROOT / "docs/research/reported_offset_upstream_sync9b_2026_10_28.freeze.json"
|
||||
REPORT = ROOT / "docs/research/reported_offset_upstream_sync9b_2026_10_28.json"
|
||||
# 原值: docs/research/reported_offset_upstream_sync9b_2026_10_28.{freeze.json,json}
|
||||
# 新值: docs/research/reported_offset_d60_mapping_2026_10_29.{freeze.json,json}
|
||||
# 原因: BUG-1500 修正生产 D60 映射,scripts/varga.py 变了(在扩展身份里);900 条回放不变,ERR-110 另存新记录
|
||||
FREEZE = ROOT / "docs/research/reported_offset_d60_mapping_2026_10_29.freeze.json"
|
||||
REPORT = ROOT / "docs/research/reported_offset_d60_mapping_2026_10_29.json"
|
||||
LEGACY_REPORT = ROOT / "docs/research/reported_offset_2026_09_20.json"
|
||||
|
||||
|
||||
|
||||
@@ -30,8 +30,11 @@ DATASET = ROOT / "references/real_case_calibration/minute_rectification_holdout_
|
||||
# 原值: docs/research/sealed_holdout_rerun_upstream_sync8_2026_10_18.{freeze.json,json}
|
||||
# 新值: docs/research/sealed_holdout_rerun_upstream_sync9b_2026_10_28.{freeze.json,json}
|
||||
# 原因: sync9b(BUG-1494~1495)改了 scripts/varga.py,它在扩展身份里;切盘输出不变,ERR-110 另存新记录
|
||||
FREEZE = ROOT / "docs/research/sealed_holdout_rerun_upstream_sync9b_2026_10_28.freeze.json"
|
||||
REPORT = ROOT / "docs/research/sealed_holdout_rerun_upstream_sync9b_2026_10_28.json"
|
||||
# 原值: docs/research/sealed_holdout_rerun_upstream_sync9b_2026_10_28.{freeze.json,json}
|
||||
# 新值: docs/research/sealed_holdout_rerun_d60_mapping_2026_10_29.{freeze.json,json}
|
||||
# 原因: BUG-1500 修正生产 D60 映射,scripts/varga.py 变了(在扩展身份里);20 条回放不变,ERR-110 另存新记录
|
||||
FREEZE = ROOT / "docs/research/sealed_holdout_rerun_d60_mapping_2026_10_29.freeze.json"
|
||||
REPORT = ROOT / "docs/research/sealed_holdout_rerun_d60_mapping_2026_10_29.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 = [
|
||||
|
||||
+3
-1
@@ -90,7 +90,9 @@ def varga_map(si, pi, div):
|
||||
if div==30: return _d30_map(si,pi)
|
||||
if div==40: return ((0 if o else 6)+pi)%12
|
||||
if div==45: return ((0 if o else 6)+pi)%12
|
||||
if div==60: return (si+pi)%12 if o else (si+1+pi)%12
|
||||
# D60 Shashtyamsa: every sign counts from itself (references/shodasavarga-complete-guide.md;
|
||||
# PyJHora traditional Parasara "from sign" agrees 77/77 on the v5 recorded times, BUG-1500).
|
||||
if div==60: return (si+pi)%12
|
||||
if div==81:
|
||||
outer_part = pi // 9
|
||||
inner_part = pi % 9
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
"""G1 contract for the D60 two-way study (issue #149, BUG-1500).
|
||||
|
||||
The gate compares the production D60 ascendant with PyJHora for every v5 case.
|
||||
It must agree on all of them now that both count from the sign itself; the
|
||||
payload must stay free of recorded birth times so it can be published.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
def test_g1_agrees_with_pyjhora_on_every_v5_case() -> None:
|
||||
pytest.importorskip("jhora.horoscope.chart.charts")
|
||||
from scripts.research.d60_two_way_run import run
|
||||
|
||||
payload = run()
|
||||
assert payload["dataset"]["cases"] == 77
|
||||
assert payload["gate"]["matches"] == 77
|
||||
assert payload["gate"]["passed"] is True
|
||||
for row in payload["cases"]:
|
||||
assert row["matches_pyjhora"] is True
|
||||
assert "true_minute" not in row
|
||||
assert "birth_time" not in row
|
||||
@@ -0,0 +1,36 @@
|
||||
"""D60 Shashtyamsa counts from the sign itself for every sign (BUG-1500).
|
||||
|
||||
The production mapping used to add one sign for 1-based even signs, which put
|
||||
the same ascendant one D60 sign away from PyJHora on 44 of 77 recorded times.
|
||||
The guide (references/shodasavarga-complete-guide.md) and PyJHora both count
|
||||
from the sign itself, odd and even alike.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
|
||||
from scripts.varga import calc_varga
|
||||
|
||||
|
||||
def test_d60_first_part_starts_in_its_own_sign() -> None:
|
||||
for sign in range(12):
|
||||
for part in range(60):
|
||||
longitude = sign * 30 + part * 0.5 + 0.25
|
||||
assert calc_varga(longitude, 60)["sign_idx"] == (sign + part) % 12, (sign, part)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("sign", [1, 3, 5, 7, 9, 11])
|
||||
def test_d60_even_signs_first_part_is_the_same_sign(sign: int) -> None:
|
||||
# 1-based even signs: Taurus, Cancer, Virgo, Scorpio, Capricorn, Pisces.
|
||||
result = calc_varga(sign * 30 + 0.25, 60)
|
||||
assert result["sign_idx"] == sign
|
||||
|
||||
|
||||
def test_d60_matches_pyjhora_shashtyamsa_for_all_signs_and_parts() -> None:
|
||||
charts = pytest.importorskip("jhora.horoscope.chart.charts")
|
||||
for sign in range(12):
|
||||
for part in range(60):
|
||||
degree = part * 0.5 + 0.25
|
||||
their = int(charts.shashtyamsa_chart([["L", [sign, degree]]])[0][1][0])
|
||||
assert calc_varga(sign * 30 + degree, 60)["sign_idx"] == their, (sign, part)
|
||||
@@ -58,6 +58,11 @@ IDENTITY_FORBIDDEN_PREFIXES = (
|
||||
# 原因: sync9b 改了扩展身份里的 scripts/varga.py,回放输出不变,ERR-110 另存新记录
|
||||
"docs/research/sealed_holdout_rerun_upstream_sync9b_2026_10_28",
|
||||
"docs/research/reported_offset_upstream_sync9b_2026_10_28",
|
||||
# 原值: 排除到 upstream_sync9b_2026_10_28
|
||||
# 新值: 再排除 d60_mapping_2026_10_29 两份冻结路径(追加,不替换上面的)
|
||||
# 原因: BUG-1500 修正生产 D60 映射,varga.py 变了,回放输出不变,ERR-110 另存新记录
|
||||
"docs/research/sealed_holdout_rerun_d60_mapping_2026_10_29",
|
||||
"docs/research/reported_offset_d60_mapping_2026_10_29",
|
||||
"docs/research/history/",
|
||||
"artifacts/",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user