标出研究章和 PyJHora 的已知差别(#92)。
10 张虚构盘逐体系对照。不一致的方法在标题下写明差在哪一类。本命 Tithi 顺行一致,逆行没有公开函数。Windows 上 1970 年以前的日出不再用 fromtimestamp。 自测:合同与研究章测试通过;200 张英文扫描约 1956 秒通过。未跑全量 pytest、快速门和前端。 Co-Authored-By: Grok (agent loop)
This commit is contained in:
co-authored by
Grok (agent loop)
parent
e586886196
commit
a757af6b4e
@@ -19350,3 +19350,19 @@
|
||||
- 复发自:无
|
||||
- 修复版本:分支 `codex/full-data-parity-1-20261021`。
|
||||
|
||||
## BUG-1429 | 1970 年以前的研究章日出在 Windows 上把整份报告打崩
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-10-23
|
||||
- 最近更新:2026-10-23
|
||||
- 影响面:完整数据版研究章里要用日出日落的 Kaala、Varnada。Windows 上整份报告渲染会中断。
|
||||
- 用户现象:200 张虚构盘的英文扫描里,研究章没算完,报告生成直接报 `OSError: [Errno 22] Invalid argument`。
|
||||
- 触发条件:在 Windows 上渲染完整数据版,盘的年份早于 1970。Linux 上同一调用可以完成。
|
||||
- 根因:日出时刻用 `datetime.fromtimestamp` 换算。Windows 不接受 1970 年以前的时间戳。这一步在各方法的失败保护之外,所以整章一起停。
|
||||
- 修复:儒略日改用 1970-01-01 加减时间差换算,不再调用 `fromtimestamp`。1970 年之后的时刻与原来的换算一致。
|
||||
- 验证:`tests/test_research_timing.py::test_solar_events_before_1970_stay_available_on_windows` 通过。200 张虚构盘英文扫描修复后重跑通过,约 1956 秒,退出码 0。
|
||||
- 防复发:上面这条测试覆盖 1950 年的直接调用,以及种子里每一个早于 1970 年的虚构盘。
|
||||
- 相关记录:issue #92。编号 1427、1428 留给另一条尚未合并的分支。
|
||||
- 复发自:无
|
||||
- 修复版本:分支 `codex/full-data-parity-2-20261021`。
|
||||
|
||||
|
||||
@@ -63,9 +63,26 @@
|
||||
|
||||
## 让步和偏离
|
||||
|
||||
- **T5**:这台机器能导入 PyJHora。对照文件是 `docs/tasks/research-timing-pyjhora-20261023.json`,状态 `not_compared`,没有逐张盘逐层比对。报告因此不写「与 PyJHora 不一致」。这低于任务书「至少 5 张」的让步线,没有拿猜测去填标注。
|
||||
- 没有让出 Karana 的 360 太阴月年,也没有让出 Tithi 的时间余额。
|
||||
- 英文不写 PyJHora 这个名字,避免整份英文被卫生门丢掉。中文只有在对照 JSON 真有差异时才写那个名字;这一轮 JSON 没有差异列表。
|
||||
- **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 的中文是:「次小运按简化模型,从现有主运按比例分出。主运和子运与原来的表相同。」
|
||||
|
||||
@@ -89,3 +106,16 @@
|
||||
标题顺序那条断言:原值是「拿掉六章后只少这六章」;新值是「基准同时拿掉六章和研究章,完整报告在六章之后还有研究章」;原因是研究章也是后加的二级标题。
|
||||
|
||||
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:」开头的行。
|
||||
|
||||
@@ -523,8 +523,8 @@
|
||||
| `TASK-report-english-han-leak-20261021.md` | `PROGRESS-report-english-han-leak-20261021.md` | #89 个人报告英文版约 4 成整份丢弃:漏译汉字源头补英文孪生字段、修吃空格;200 张固定种子回归 + 快速门 smoke(复发自 BUG-1272);中文逐字节不变 | 已合入 staging | `codex/report-english-han-leak-20261021` |
|
||||
| `TASK-chart-dasha-yogini-20261021.md` | — | #88 星盘页大运右栏切换 Chara / Yogini,Yogini 补小运(按比例,内部核对,页面注明未经外部软件核对);Ashtottari 另立单(起运表与 PyJHora 8/12 宿不一致) | 已合入 staging | `codex/chart-dasha-yogini-20261021` |
|
||||
| `TASK-full-data-parity-1-20261021.md` | `PROGRESS-full-data-parity-1-b-20261023.md` | #91 完整数据版补齐(一):K1–K3 已做;K4 把年运新字段放到原键之后,Yogini 缺完整年数时不再整段失败(BUG-1425、BUG-1426) | 已合入 staging | `codex/full-data-parity-1-20261021` |
|
||||
| `TASK-full-data-parity-2-20261021.md` | `PROGRESS-full-data-parity-2-20261021.md` | #92 完整数据版补齐(二):研究型推运附录、四种星座大运次小运、Kalachakra 第三层、D81 / D108 / D144 只留在研究口径章节 | 执行中 | `codex/full-data-parity-2-20261021` |
|
||||
| `TASK-full-data-parity-2-fix-20261023.md` | `PROGRESS-full-data-parity-2-20261021.md` | **#92 第 1 次打回**:其余全过(Linux 生成约 18 秒、英文汉字 0);T5 PyJHora 离线对照一张没做(下限 5 张),报告无法标出不一致的体系 | 执行中 | `codex/full-data-parity-2-20261021` |
|
||||
| `TASK-full-data-parity-2-20261021.md` | `PROGRESS-full-data-parity-2-20261021.md` | #92 完整数据版补齐(二):研究型推运附录、四种星座大运次小运、Kalachakra 第三层、D81 / D108 / D144 只留在研究口径章节 | 待验收 | `codex/full-data-parity-2-20261021` |
|
||||
| `TASK-full-data-parity-2-fix-20261023.md` | `PROGRESS-full-data-parity-2-20261021.md` | **#92 第 1 次打回**:其余全过(Linux 生成约 18 秒、英文汉字 0);T5 已用 10 张虚构盘做完离线对照,不一致的体系在标题下写明差在哪一类 | 待验收 | `codex/full-data-parity-2-20261021` |
|
||||
| `TASK-goel-jaimini-strength-20261022.md` | `PROGRESS-goel-jaimini-strength-20261022.md` | #94 搬上游公开的 Goel Jaimini 强度与 Brahma / Maheshwara / Rudra(4 个上游原样文件,按 #81 决策 A 先例根目录预算 448→452;来源串改书目引用);只做计算、不改报告;冻结身份不变 | 已合入 staging | `codex/goel-jaimini-strength-20261022` |
|
||||
| `TASK-chart-subject-table-fix-20261022.md` | `PROGRESS-chart-subject-table-fix-20261022.md` | **#86 第 1 次打回**:报告所有表被强制单行(打印跑出纸面);保存他人复制了档案页代码且已分叉;点编辑框内边距会丢修改 | 已合入 staging | `codex/chart-subject-table-20261021` |
|
||||
| `TASK-full-data-parity-3-20261022.md` | — | #93 完整数据版补齐(三):「独立年度方法参考」正式环境调 PyJHora(子进程隔离;装上后其余输出逐字节不变,7 个换路径开关钉死);输入默认用本地时间与正确年份(D6 待产品确认) | 待领取(等 #91 合入) | `codex/full-data-parity-3-20261022` |
|
||||
|
||||
@@ -1,6 +1,206 @@
|
||||
{
|
||||
"status": "not_compared",
|
||||
"charts": 0,
|
||||
"reason": "PyJHora imported, but this pass does not guess a mismatch without a completed comparison",
|
||||
"mismatches": []
|
||||
"status": "compared",
|
||||
"charts": 10,
|
||||
"chart_indexes": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8,
|
||||
9
|
||||
],
|
||||
"pyjhora_version": "4.8.7",
|
||||
"return_rule": "A return moment within 1 minute is listed in within_tolerance and is not a mismatch. The two sides use different ayanamsa implementations and ephemeris files.",
|
||||
"omitted_from_labels": [
|
||||
"Sudasa confirmed start has no written full major start on our side, so it is not compared.",
|
||||
"Niryaana Shoola child periods stay omitted by the 2026-10-23 decision.",
|
||||
"Annual Tithi, Yoga, and Nakshatra headings are outside this pass."
|
||||
],
|
||||
"within_tolerance": [
|
||||
{
|
||||
"system": "tithi-natal-forward",
|
||||
"chart": 0,
|
||||
"minutes": 0.002
|
||||
},
|
||||
{
|
||||
"system": "tithi-natal-forward",
|
||||
"chart": 1,
|
||||
"minutes": 0.001
|
||||
},
|
||||
{
|
||||
"system": "tithi-natal-forward",
|
||||
"chart": 2,
|
||||
"minutes": 0.001
|
||||
},
|
||||
{
|
||||
"system": "tithi-natal-forward",
|
||||
"chart": 3,
|
||||
"minutes": 0.003
|
||||
},
|
||||
{
|
||||
"system": "tithi-natal-forward",
|
||||
"chart": 4,
|
||||
"minutes": 0.0
|
||||
},
|
||||
{
|
||||
"system": "tithi-natal-forward",
|
||||
"chart": 5,
|
||||
"minutes": 0.002
|
||||
},
|
||||
{
|
||||
"system": "tithi-natal-forward",
|
||||
"chart": 6,
|
||||
"minutes": 0.001
|
||||
},
|
||||
{
|
||||
"system": "tithi-natal-forward",
|
||||
"chart": 7,
|
||||
"minutes": 0.002
|
||||
},
|
||||
{
|
||||
"system": "tithi-natal-forward",
|
||||
"chart": 8,
|
||||
"minutes": 0.002
|
||||
},
|
||||
{
|
||||
"system": "tithi-natal-forward",
|
||||
"chart": 9,
|
||||
"minutes": 0.003
|
||||
}
|
||||
],
|
||||
"systems": {
|
||||
"tithi-natal-forward": {
|
||||
"status": "一致",
|
||||
"heading_en": "Natal Tithi Ashtottari forward",
|
||||
"heading_zh": "本命 Tithi Ashtottari 顺行",
|
||||
"match": "exact"
|
||||
},
|
||||
"tithi-natal-reverse": {
|
||||
"status": "无此方法",
|
||||
"heading_en": "Natal Tithi Ashtottari reverse",
|
||||
"heading_zh": "本命 Tithi Ashtottari 逆行",
|
||||
"match": "exact"
|
||||
},
|
||||
"yoga-natal": {
|
||||
"status": "不一致",
|
||||
"heading_en": "Natal Yoga Vimshottari",
|
||||
"heading_zh": "本命 Yoga Vimshottari",
|
||||
"match": "exact",
|
||||
"category": "子运划分",
|
||||
"category_en": "sub-period division",
|
||||
"example": "chart 2 third level under Mercury does not line up"
|
||||
},
|
||||
"buddhi-gati": {
|
||||
"status": "不一致",
|
||||
"heading_en": "Buddhi Gati",
|
||||
"heading_zh": "Buddhi Gati",
|
||||
"match": "exact",
|
||||
"category": "起点",
|
||||
"category_en": "start",
|
||||
"example": "chart 0 period 1 native Sun vs PyJHora Mercury"
|
||||
},
|
||||
"kaala": {
|
||||
"status": "不一致",
|
||||
"heading_en": "Kaala",
|
||||
"heading_zh": "Kaala",
|
||||
"match": "exact",
|
||||
"category": "年数",
|
||||
"category_en": "year count",
|
||||
"example": "chart 0 year count differs at the first compared period of Sun"
|
||||
},
|
||||
"sudasa-birth": {
|
||||
"status": "不一致",
|
||||
"heading_en": "Sudasa birth cycle",
|
||||
"heading_zh": "Sudasa 出生周期",
|
||||
"match": "exact",
|
||||
"category": "年数",
|
||||
"category_en": "year count",
|
||||
"example": "chart 0 year count differs at the first compared period of Scorpio"
|
||||
},
|
||||
"varnada": {
|
||||
"status": "不一致",
|
||||
"heading_en": "Varnada",
|
||||
"heading_zh": "Varnada",
|
||||
"match": "prefix",
|
||||
"category": "起点",
|
||||
"category_en": "start",
|
||||
"example": "chart 0 period 1 native Aries vs PyJHora Capricorn"
|
||||
},
|
||||
"karana-julene": {
|
||||
"status": "不一致",
|
||||
"heading_en": "Julene lords",
|
||||
"heading_zh": "Julene 主星",
|
||||
"match": "prefix",
|
||||
"category": "年数",
|
||||
"category_en": "year count",
|
||||
"example": "chart 0 year count differs at the first compared period of Mars"
|
||||
},
|
||||
"karana-pvr": {
|
||||
"status": "不一致",
|
||||
"heading_en": "PVR quadrant lords",
|
||||
"heading_zh": "PVR 象限主星",
|
||||
"match": "prefix",
|
||||
"category": "年数",
|
||||
"category_en": "year count",
|
||||
"example": "chart 0 year count differs at the first compared period of Mars"
|
||||
},
|
||||
"karana-pvr-tithi-year": {
|
||||
"status": "不一致",
|
||||
"heading_en": "PVR 360 tithi year",
|
||||
"heading_zh": "PVR 360 太阴月年",
|
||||
"match": "prefix",
|
||||
"category": "年数",
|
||||
"category_en": "year count",
|
||||
"example": "chart 0 year count differs at the first compared period of Mars"
|
||||
},
|
||||
"sthira": {
|
||||
"status": "不一致",
|
||||
"heading_en": "Sthira",
|
||||
"heading_zh": "Sthira",
|
||||
"match": "exact",
|
||||
"category": "起点",
|
||||
"category_en": "start",
|
||||
"example": "chart 1 period 1 native Capricorn vs PyJHora Cancer"
|
||||
},
|
||||
"drig": {
|
||||
"status": "不一致",
|
||||
"heading_en": "Drig",
|
||||
"heading_zh": "Drig",
|
||||
"match": "exact",
|
||||
"category": "起点",
|
||||
"category_en": "start",
|
||||
"example": "chart 1 period 10 native Leo vs PyJHora Aquarius"
|
||||
},
|
||||
"shoola": {
|
||||
"status": "不一致",
|
||||
"heading_en": "Shoola",
|
||||
"heading_zh": "Shoola",
|
||||
"match": "exact",
|
||||
"category": "起点",
|
||||
"category_en": "start",
|
||||
"example": "chart 1 period 1 native Sagittarius vs PyJHora Gemini"
|
||||
},
|
||||
"navamsha": {
|
||||
"status": "不一致",
|
||||
"heading_en": "Navamsha",
|
||||
"heading_zh": "Navamsha",
|
||||
"match": "exact",
|
||||
"category": "起点",
|
||||
"category_en": "start",
|
||||
"example": "chart 0 period 1 native Capricorn vs PyJHora Aquarius"
|
||||
},
|
||||
"kalachakra": {
|
||||
"status": "不一致",
|
||||
"heading_en": "Kalachakra",
|
||||
"heading_zh": "Kalachakra",
|
||||
"match": "exact",
|
||||
"category": "起点",
|
||||
"category_en": "start",
|
||||
"example": "chart 0 period 1 native Taurus vs PyJHora Gemini"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user