Files
Jyotisha/docs/tasks/PROGRESS-full-data-parity-2-20261021.md
T
jesse-uxandGrok (agent loop) a757af6b4e 标出研究章和 PyJHora 的已知差别(#92)。
10 张虚构盘逐体系对照。不一致的方法在标题下写明差在哪一类。本命 Tithi 顺行一致,逆行没有公开函数。Windows 上 1970 年以前的日出不再用 fromtimestamp。

自测:合同与研究章测试通过;200 张英文扫描约 1956 秒通过。未跑全量 pytest、快速门和前端。

Co-Authored-By: Grok (agent loop)
2026-10-23 22:29:52 +08:00

122 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PROGRESS — 完整数据版补齐(二)(#92)
- 分支:`codex/full-data-parity-2-20261021`
- 开工基线:`origin/staging` = `85e8adddbc9c14e31c687c91ad8666afe3290e64`(#91 已合入)。本地先合并的就是这个 staging,没有 rebase。
- 工作树:代理循环指定的 `G:\Ferti\Jyotisha\.worktrees\agent-loop`,没有另建 `.worktrees/full-data-parity-2-20261021`。
- 最大 BUG 号仍是 BUG-1426。本单没有新开缺陷编号。
## 做了什么
完整数据版在原有六章之后加三块,渲染时现算,不写进资料包,不进对话卡,不进校正打分。
1. **补充推运计算数据**:Tithi Ashtottari 本命顺逆、年度三年里每一对 300 到 400 天的回归(角距和时间余额,顺逆,只到子运)、Yoga Vimshottari 本命、目标年内的 Yoga / Nakshatra 回归以及每个回归之后 300 到 400 天里的后继和 360 个太阴月年、七分盘星座主、Buddhi Gati、Kaala、Sudasa 出生周期、Sudasa 已确认起点(只写原因)、Varnada、Karana 三种(目标年里的每一次 Tithi 回归)。
2. **辅助大运次小运数据**:Sthira、Drig、Shoola、Navamsha 的次小运。主运和子运的生产者没有改,次小运加在副本上。Niryaana Shoola 不列子运和次小运。Kalachakra 只加第三层,沿用简化模型,不改已有主运和子运。
3. **研究型分盘**:D81、D108、D144,有 D150 时一并列出。普通分盘数值表里不再印这三盘。
每一节都重复研究口径那一句,因为阅读页按二级标题翻页,章首那句可能会被翻走。
位置用我们自己的星历和真岁差。没有搬视位置、Moshier、真位置开关,也没有搬 PyJHora 运行时对照模块。
## T0 盘点
| 方法 | 上游 | 输入 | 出处或 blocked | 我方改动 |
| --- | --- | --- | --- | --- |
| Tithi Ashtottari 本命顺/逆 | `tithi_ashtottari.py` | 出生日月角距,108 年 | 教程没有写第三层 | 经度改我方函数;次小运不列 |
| Tithi 年度 | `customer_timing_supplement.py` 的三年配对 | 目标年起三年,每一对间隔 300–400 天 | 同上,深度只到 2 | 同上;不拿「下一次短回归」冒充年 |
| Yoga Vimshottari 本命 | `yoga_annual_dasha.py` | 日月之和,120 年,三层 | 固定年长 | 经度改我方函数 |
| Yoga / Nakshatra 回归 | `annual_pravesha.py`、`pravesha_return_year.py` | 只要目标年里的回归;后继取之后 300–400 天内的全部,另加 360 太阴月年;三层 | 研究页 | 求根和时钟都用我方经度 |
| 七分盘星座主 | `aayu_sripati_periods.py` | 本命经度 | 关系表,不是大运 | 用我方经度 |
| Buddhi Gati | `buddhi_gati.py` | 上升与行星 | Atri 原文没有规定子运 | 不列子运和次小运 |
| Kaala | `kaala_dasha.py` | 日出日落 | 笔记没有规定子运 | 日出日落用星历文件,不用 Moshier |
| Sudasa 出生 | `sudasa.py` | 上升与行星 | 土星和计都同星座时该主运不列子运 | 我方经度 |
| Sudasa 已确认起点 | 同上 | 需要另有确认过的起点 | blocked:出生资料里没有这个起点 | 只写原因,不上空表 |
| Varnada | `varnada_dasha.py` | 两个备选起点分开 | JSS | 我方经度 |
| Karana 三种 | `karana_annual_dasha.py` | 目标年每次 Tithi 回归 | 材料没有子运 | 只列主运 |
| 四种星座大运次小运 | `rashi_dasha_explicit_contract.py` 的顺行等分 | 子运星座起顺行,十二等分 | 接既有星座大运出处表 | 只加在副本上 |
| Niryaana Shoola 子运 | `niryaana_shoola_dasha.py` | 主运 | blocked:上游写明子运规则没有单独出处;冻结引擎的行不能当书页 | 不列 |
| Kalachakra 第三层 | #91 已有的简化模型 | 现有主运 | 产品定:只加第三层,不改主运和子运 | 按比例从现有主运分出 |
| D81 / D108 / D144 / D150 | 我方分盘函数 | 本命经度 | 研究口径 | 只在研究章渲染 |
## 体量(Windows,虚构盘 0 / 1 / 9)
中英两份一起算,含排盘。都低于前端 180 秒。
| 盘 | 排盘(秒) | 英文(秒) | 中文(秒) | 中英合计(秒) | 连排盘(秒) | 中文字符 | 英文字符 | 中文字节 | 英文字节 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 0 | 42.4 | 43.6 | 17.3 | 60.9 | 103.3 | 1,917,563 | 2,491,902 | 2,695,716 | 2,493,514 |
| 1 | 20.7 | 12.6 | 20.5 | 33.0 | 53.7 | 1,919,551 | 2,490,711 | 2,691,687 | 2,492,316 |
| 9 | 18.7 | 15.7 | 16.7 | 32.3 | 51.0 | 2,060,310 | 2,639,451 | 2,858,271 | 2,641,071 |
0 号盘只算研究章、不算原来的长文:中文 26.4 秒、1,015,374 字符;英文接着算 0.1 秒(同一份计算复用)、1,055,738 字符。目标年起三年 Tithi 回归 3 次,目标年 Yoga 1 次,Nakshatra 1 次。
0 号盘四种星座大运的次小运都是 1728 行(主运 12、子运 144,每个子运再等分成 12)。生产者里的主运和子运没有 `pratyantar` 字段。
没有删行,没有抽样,也没有把 1e-6 度的回归容差放宽。时钟在一天的格子里先按斜率走几步,残差仍要求不超过 1e-6 度;和原先 45 次二分相比,时刻差不超过百万分之一天。这一条有测试。
## 章节怎么拆
阅读页按 `##` 翻页。三章各自是一节,每个方法、每一对回归、每一种 Karana、每一种星座大运、Niryaana、Kalachakra、研究分盘也各是一节。每节都重复研究口径那一句。
参考时刻取报告月历第一行的当月 1 日正午。资料包没有另存「今天」。天文用儒略日,显示的时刻用历书换算,两者差一个闰秒量级,表上仍写到秒。
岁差按每个时刻重算,不拿一个岁差值套一整年。
## 让步和偏离
- **T5(修复单补上)**:这一轮先把 `origin/staging` 的 `bc6795e2a353f6a10fa65ab79766aeb578714b0b` 合并进来,没有 rebase。对照文件 `docs/tasks/research-timing-pyjhora-20261023.json`,状态 `compared`,10 张固定种子虚构盘,PyJHora 4.8.7。15 个体系里:一致 1,无此方法 1,不一致 13。回归时刻差在 1 分钟内写进 `within_tolerance`,不算不一致;这 10 张本命 Tithi 顺行的回归差都在 0.003 分钟以内。两边岁差和星历文件不同,所以留这一分钟。
- 没有让出盘数(仍是 10,不是下限 5),没有让出 Karana 的 360 太阴月年,也没有让出 Tithi 的时间余额。
- 已知差别写在该方法标题下。中文是「与 PyJHora 不一致:差在 {类别}」,英文是「Differs from PyJHora: {category}」。句子加在按行清理之后,清理器本身没改,所以英文版能留下这句。整份英文不会因为这一句被丢掉。
- 顺序整段相反才标「方向」。这一轮没有「方向」,也没有超出 1 分钟的「回归时刻」。开头主星相同、只是同一圈又多走了几步的,改去比年数,不再写成起点不同。
- Karana 三种都对 PyJHora 里那一个公开函数,比的是出生当下那一圈,不是目标年里的回归。Varnada 的两个起点合成一条,标题按前缀对上。Sudasa 已确认起点没有书面锚点,不参与对照,也不标不一致。Niryaana Shoola 按 10 月 23 日的决定仍不列子运。年度 Tithi、Yoga、Nakshatra 不在这次对照名单里。
- 本命 Tithi 逆行:PyJHora 的公开函数没有大运逆行这一项,标成「无此方法」,不算不一致。
| 体系 | 结果 | 差在 |
| --- | --- | --- |
| 本命 Tithi Ashtottari 顺行 | 一致 | 回归都在 1 分钟内 |
| 本命 Tithi Ashtottari 逆行 | 无此方法 | 公开函数没有这一项 |
| 本命 Yoga Vimshottari | 不一致 | 子运划分 |
| Buddhi Gati | 不一致 | 起点 |
| Kaala | 不一致 | 年数 |
| Sudasa 出生周期 | 不一致 | 年数 |
| Varnada | 不一致 | 起点 |
| Julene 主星 / PVR 象限主星 / PVR 360 太阴月年 | 不一致 | 年数 |
| Sthira / Drig / Shoola / Navamsha | 不一致 | 起点 |
| Kalachakra | 不一致 | 起点 |
- 表头用「层级 | 主星/名称 | 起始 | 结束」,与任务书用词一致。
- Kalachakra 的中文是:「次小运按简化模型,从现有主运按比例分出。主运和子运与原来的表相同。」
## 自测
| 检查 | 命令 | 结果 |
| --- | --- | --- |
| 研究章、口径、隔离、校正 golden、时钟 | `pytest tests/test_research_timing.py -q` | 8 通过 |
| 星座大运生产者仍无次小运字段 | `pytest tests/test_rashi_dashas_native.py -q` | 通过 |
| 对话域读取 | `pytest tests/test_full_data_domain_reader.py -q` | 通过 |
| 卫生预算 | `pytest tests/test_python_hygiene_budget.py -q` | 通过 |
| 真恒星框架 | `pytest tests/test_sidereal_nutation_frame.py -q` | 通过 |
| 运行时不扫进 jhora | `pytest tests/test_runtime_jhora_import_scan.py -q` | 通过 |
| API 增长合同 | `pytest tests/test_api_server_growth_contract.py -q` | 通过 |
| 六章与研究章标题 | `pytest tests/test_full_data_parity_chapters.py -q` | 先有 1 个标题顺序失败;断言改为「六章之后才是研究章」后,该测试通过。同一次里其余测试已通过 |
| 英文版 | `pytest tests/test_report_english_edition.py -q` | 通过 |
| 前端 tsc / lint | 未跑 | 没有改前端 |
| test:db | 未跑 | 没有改表 |
| Python 全量、快速门 | 未跑 | 按分工留给验收 |
标题顺序那条断言:原值是「拿掉六章后只少这六章」;新值是「基准同时拿掉六章和研究章,完整报告在六章之后还有研究章」;原因是研究章也是后加的二级标题。
D81 出现位置那条是新断言,不是改旧数字:研究章之前的正文不得再出现 D81、D108、D144。
## 修复单自测(Windows)
| 检查 | 命令 | 结果 |
| --- | --- | --- |
| 研究章、对照标注、校正 golden | `pytest tests/test_research_timing.py tests/test_sidereal_nutation_frame.py tests/test_rashi_dashas_native.py tests/test_full_data_domain_reader.py tests/test_report_english_edition.py tests/test_python_hygiene_budget.py tests/test_api_server_growth_contract.py tests/test_runtime_jhora_import_scan.py tests/test_report_reader_main.py tests/test_repo_privacy_markers.py -q` | 163 通过,失败 0,约 1013 秒 |
| 1970 年以前的日出 | `pytest tests/test_research_timing.py::test_solar_events_before_1970_stay_available_on_windows -q` | 通过。Windows 上不再用 `fromtimestamp`,见 BUG-1429 |
| 200 张虚构盘英文 | `pytest tests/test_report_english_sweep.py::test_two_hundred_fictional_charts_have_clean_english -q` | 通过,约 1956 秒。修复前,早于 1970 年的盘会在 Windows 上中断整份报告(BUG-1429) |
| 前端 tsc / lint | 未跑 | 没有改前端 |
| test:db | 未跑 | 没有改表 |
| Python 全量、快速门 | 未跑 | 留给验收 |
阅读页泄漏断言:原值是整篇出现 PyJHora 都算泄漏;新值是以「与 PyJHora 不一致:」或「Differs from PyJHora:」开头的行先拿掉,其余照旧;原因是修复单要求这两句留在标题下。英文研究章同理:原值是英文不得出现 PyJHora;新值是只允许出现在「Differs from PyJHora:」开头的行。