docs(d60): register BUG-1497 and record the two-way pre-work (issue #149)

Environment checks are done: swisseph 2.10.03, PyJHora importable with a
shashtyamsa chart, the v5 holdout present, and the four baseline test
files green (98 passed). jyotishganit is not installed, so G1 ends up with
PyJHora as the only external engine.

The B-group scoring rule cannot be implemented as written: the six-question
replay answers date-level boundary questions, while a D60 change happens
every couple of minutes inside one day. Two workable options are recorded
in PROGRESS and posted to the issue; nothing is scored before the rule is
preregistered.
This commit is contained in:
jesse-ux
2026-10-28 19:00:54 +08:00
parent 88a03808a9
commit 3bbf58e984
2 changed files with 57 additions and 0 deletions
+16
View File
@@ -20447,3 +20447,19 @@
- 关联:BUG-1494。
- 复发自:无。
- 修复版本:分支 `codex/upstream-sync9b-20261028`。
## BUG-1497 | D60 换格能不能帮生时校正,从没在已知出生时间的人身上测过
- 状态:investigating
- 首次发现 / 最近更新:2026-10-28 / 2026-10-28(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 三引擎对账,再按 G2–G5 双向对比;结论出来前生产代码、技法路由、对外文案都不动。
- 验证:待研究单 `docs/tasks/TASK-rectification-d60-two-way-20261028.md` 的 G1–G5 全部有结论后回填;不过门就写 `closed_by_design` 并附对外口径。
- 防复发:研究单写死「先登记再跑、真值不可见、必须有安慰剂、负结果照写」。
- 关联:BUG-1240、BUG-560、BUG-1090、BUG-1091。
- 复发自:无。
- 修复版本:分支 `codex/rectification-d60-two-way-20261028`(研究单,未合入)。
@@ -0,0 +1,41 @@
# PROGRESS · D60 换格双向对比(2026-10-28,issue #149)
- 分支:`codex/rectification-d60-two-way-20261028`,基于 `origin/staging` `88a03808`(写作时 `7721aa9a`,开工时以实际 head 为准)
- 执行:本地 Grok(Windows);验收:Claude
- BUG:BUG-1497 已登记为 `investigating`
- 生产代码、冻结文件、技法路由、对外文案:**零改动**
## 开工前置(已完成)
| 检查 | 命令 | 结果 |
| --- | --- | --- |
| 开工预检 | `scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45` | 退出码 1。`focused_tests` 里 `tests/test_preflight_fragment_scan.py::test_preflight_fragment_scan_reports_authority_layers_and_risk_buckets` 失败:断言 `.workbuddy/skills/jyotish-vedic-astrology` 镜像路径存在。Python 运行时、碎片扫描、外部引擎适配器、远端可见性四项通过;不把预检写成通过 |
| 基线四个测试文件 | `tests/test_nadi_seconds_research.py`、`test_holdout_v5_schema.py`、`test_varga_resolution_research.py`、`test_repo_privacy_markers.py` | 98 passed |
| 星历 | `python -c "import swisseph; print(swisseph.version)"` | 2.10.03 |
| PyJHora | 导入 `jhora`,`jhora.horoscope.chart.charts` 有 `shashtyamsa_chart` | 可用 |
| jyotishganit | `import jyotishganit` | **未安装**,G1 里记为 `blocked` |
| v5 数据集 | `references/real_case_calibration/minute_rectification_holdout_v5.json` | 77 例,存在 |
环境:`PYTHONHASHSEED=0`、`PYTHONUTF8=1`(Windows 控制台编码)。
## 卡点:B 组的 D60 打分规则需要先定死
任务书 §两个组 只写了「窗口内上升的 D60 格每换一次,候选分成两段;用户给出日精度事件时,按预先登记的 D60 规则给两段打分,淘汰规则与 A 组的换升判据同一套」。
读了 A 组的实现(`scripts/research/probe_supply_after_six.py`):六题来自**日期级**边界(Vimshottari / Narayana / 上升换座),答案是拿事件日期与边界日期比先后(`union_boundary_dates`、`generate_refresh_probes`、`apply_answer`)。D60 换格是**分钟级**的,一天里会换很多次;把日期级答案直接套到分钟级边界上,同一天内几乎没有区分度,会一边倒淘汰。
两个可落地方案(已贴到 #149 请 Claude 定;我推荐 2):
1. **D60 当后置分段**:先跑完 A 组六题,再把幸存候选按 D60 换格切段,用日精度事件的领域—宫位映射给每段打分,只留最高分段(同分不淘汰,其余不动)。改动大,且把 nadi 研究的方法族混进来,报告里要单独解释。
2. **D60 换格题只认同日事件**:把窗口内每次 D60 换格当一条「事件 E 在换格之前还是之后」的题;只有事件日期与换格日期同一天时才作答,没有同日事件就跳过、不淘汰。与 A 组共用 `apply_answer`,只换边界来源。改动小、口径干净、可复现;代价是可用题数取决于同日事件,报告里要给出每题实际用了几条。
规则定了之后才写 `docs/research/d60_two_way_preregistration_2026_10_28.json` 并单独 commit,然后才第一次在 v5 上跑(红线 1)。
## 还没做
G1–G5、模型端到端对比、MEVG、报告:全部 `not_started`。没有产生任何结果数字,也没有据此改任何规则。
## 环境缺口
- `jyotishganit` 未安装;G1 的外部引擎只剩 PyJHora(门要求「与至少一个外部引擎一致 ≥95%」,仍可判)。
- 预检的 `focused_tests` 有一条与本单无关的失败(上面已列)。