Files
Jyotisha/docs/tasks/TASK-upstream-sync6-20261007.md
T

91 lines
10 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.
# TASK · 上游同步第六轮:上游 10-05 五个计算修正(2026-10-07)
- 基线:`origin/staging` @ `0ed45a4b`(staging 已部署同一 SHA)。
- 上游参照:`/workspace/yinduzhanxing` `origin/main` @ `23be1807`。只按下表逐提交挑选,不整文件覆盖。
- 分支 / worktree:`codex/upstream-sync6-20261007` / `.worktrees/upstream-sync6-20261007`
- 串行顺序:**本单最先做**。`TASK-report-full-data-edition-20261007`(报告)与 `TASK-consult-card-full-source-20261007`(对话数据卡)都基于本单合入后的 staging 开工。
- BUG 编号:开工时核对 `docs/BUG_HISTORY.md` 最大号(写作时 BUG-1259)后顺延;三份单共用一个序列,先开工的先取号。
- 若执行方因权限无法跨仓读取或拷贝上游代码:停下,在进度记录里写明,由 Claude 移植代码,测试 / golden / 评测交执行方。
## 1. 事故实证
产品 10-07 拿一份上游导出的用户报告(`pl9_ai_density` 版)和网站报告对比,认为前者准确得多。Claude 用乔布斯的公开盘(AA,1955-02-24 19:15 San Francisco,Lahiri,平均交点)在两边各导出一份,结果如下:
| 项 | 我方 `0ed45a4b` | 上游 `23be1807` |
| --- | --- | --- |
| D5 太阳 / 月亮 | 白羊 / 摩羯 | 射手 / 双鱼 |
| D6 太阳 / 月亮 | 白羊 / 天蝎 | 双子 / 射手 |
| D8 太阳 / 月亮 | 金牛 / 水瓶 | 双鱼 / 天蝎 |
| D11 太阳 / 月亮 | 双子 / 白羊 | 天秤 / 天秤 |
| Yogini 第一段 | 木星,出生起满 5 年 | 水星,只剩出生余额 0.81 年 |
| Shadbala 木星第 3 列 | 80.59 | 39.41(**原因未定位**,见 T9) |
| 特殊上升点 | Bhava 巨蟹 27.06°;**Hora 与 Ghati 同为双鱼 17.81°**(不可能相同);无 Sree / Indu / Vighati / Pranapada / Varnada | Bhava 狮子 17.12°、Hora 水瓶 22.58°、Ghati 处女 8.94°;另有 Sree、Indu、Vighati、Pranapada、Varnada |
对照上游五个提交里新增的代码行,逐行检查它们在我方文件中是否存在:
| 上游提交 | 文件 | 我方状态 |
| --- | --- | --- |
| `f32472b5` | `scripts/varga.py`、`scripts/vimsopaka_calculator.py`、`scripts/divisional_charts_extended.py` | 新增行 0 / 7、0 / 32;extended 与上游改前逐字节相同 |
| `1918ffaf` | `scripts/yogini_dasha.py`、`scripts/tajika.py`、`scripts/special_lagnas.py`、`scripts/narayana_dasha.py`、`yoga_rules` | yogini 与上游改前相同;tajika 0 / 8;special_lagnas 0 / 37;narayana 3 / 32 |
| `e4a6ac01` | `scripts/solar_return.py`、`scripts/cmd_solar_return.py` 等 | solar_return 0 / 5 |
| `4a807e7d` | `scripts/jyotish_engine.py`(Neecha Bhanga、首段大运子运、渲染) | 8 / 94 |
| `23be1807` | `scripts/ayanamsa_utils.py`、`scripts/bhava_chalit.py`、`scripts/cmd_nakshatra_adv.py`、`scripts/jyotish_engine.py` | ayanamsa_utils 0 / 6;另两个文件与上游改前相同;engine 8 / 55 |
影响面:普通对话的健康卡用 D6 / D8,财富卡用 D11,学业卡用 D5;报告的分盘表、Vimsopaka、Yogini、年主都受影响。
## 2. 根因
我方上次对齐上游是 10-04 的 `03bea6ed`(第一到第五批)。上游 10-05 又提交了这五个计算修正,我方没有同步。
## 3. 决策记录(产品 2026-10-07 授权)
1. 同步上游 10-05 的计算修正。**逐项对照上游声称的原书出处核实后再合入**,不整包照搬。上游以前出过「只换标签、声称已修」的情况(`c7117f92` 的 Narayana),所以核实是本单的一部分,不是可选项。
2. 核实可以只读上游仓的 `references/book_corpus/`(PVR Integrated Approach 切卡包、V.P. Goel 等)。**不得把书籍原文拷进我方仓库**:这些第三方作品不随仓库授权。
3. 不搬:`0c0f31b2`(上游自家隐私清理);`089f80d1`、`49ff15e8`、`0f955334`、`2b10d566`、`ddec2a9a`(书籍与文章语料、全文检索)——涉及版权,待产品另定;`e4a6ac01` 中的 MCP、`canonical_jyotish_profile`、`pl9_compatibility_profile`、`evidence_labeled_reporting`,我方没有这些模块,只取其中的出生秒数传递,以及 Shadbala 方法说明不再夸大的部分(若我方有对应代码)。`e4a6ac01` 关于 `pl9_ai_density` 客户档的部分留给报告单。
| 项 | 上游提交 | 内容 | 核实依据(上游自称) |
| --- | --- | --- | --- |
| U1 | `f32472b5` | D5 / D6 / D8 / D11 映射改为有出处的版本;extended 计算委托 `varga.calc_varga`;记录 `mapping_source` | PVR Integrated Approach §6.2.5 / 6.2.6 / 6.2.8 / 6.2.11 |
| U2 | `f32472b5` | Vimsopaka:去掉 D9 的 3.0 权重;自宫 virupa 改为 20;Neecha Bhanga 不作为尊贵输入;分档改名 | BPHS 16 分盘体系 |
| U3 | `1918ffaf` | Yogini:按原书顺序;按月宿起运(我方 sync5 已改);计算出生余额 | V.P. Goel,Classical 章 Table I |
| U4 | `1918ffaf` | Tajika Panchadhikari:`planet_house` 改为相对年盘上升的第 1–12 宫,星座序号单独存(我方 BUG-1214 移植自 `c7117f92`,**很可能带着这个错**) | — |
| U5 | `1918ffaf` | Narayana 两种算法并列报告;解释行写明实际选用的起运规则 | — |
| U6 | `1918ffaf` | 特殊上升点:从出生点推算,不再用午夜近似;补 Varnada、Pranapada;PyJHora 生产者传入岁差 | — |
| U7 | `1918ffaf` | `yoga_rules` 的 `jupiter_upachaya_from_moon`:按月亮起第 3/6/10/11 宫实现,标为「配置」,不叫瑜伽 | — |
| U8 | `e4a6ac01` | 年盘与太阳返照:出生秒数一路传递 | — |
| U9 | `4a807e7d` | Neecha Bhanga 补两个条件(定位星落月亮起角宫、落上升起角宫);首段大运被出生截断时,AD / PD 按完整大运起点推,只裁显示部分;宫位力量表不再多印一行汇总;Karaka 表加排位度数列 | — |
| U10 | `23be1807` | 岁差:import 时的引导设定不再覆盖调用方已选的岁差;行运、Bhava Chalit、星宿命令都用本命岁差,并传入出生秒数 | — |
## 4. 硬红线
1. 打分语义变化按 BUG-1181 先例处理:同一输入出不同分时,升生时校正算法身份(当前 `scoring-10`);记忆化 golden 出新版本、旧版冻结;研究记录按 ERR-110 重新冻结;验证历史校正记录仍能打开(BUG-621);前端与数据库里的版本字面量按 BUG-1181 改为代数判断。
2. 生时校正 v5 77 例评测任一格下降超过 1 个百分点:停下逐项定位,报给产品,不得自行调参。
3. 引擎数值一变,就跑 **Python 全量**,失败名单必须是基线的子集(基线在 Linux 上约 62 条)。快速门曾漏掉一条读者测试(BUG-1220)。
4. `scripts/jyotish_api_server.py` 只许 bugfix 级改动(增长合同)。golden 一律用真实引擎重新生成,不手改。任何既有断言的改动写「原值 / 新值 / 原因」三栏。
5. 不改 workflow、不提升 main、不动迁移(除非 T1 的版本字面量必须动守卫,届时按 sync5 先例只改守卫一行,并真跑 `npm run test:db`)。
6. 隐私:只用公开名人盘或虚构盘。产品上传的那份用户报告不得进入仓库、测试、进度记录或 Bug 历史。
## 5. 任务分解
| # | 内容 | 验收标准 |
| --- | --- | --- |
| T0 | 开工前置:`git fetch origin --prune`;`git worktree add -b codex/upstream-sync6-20261007 .worktrees/upstream-sync6-20261007 origin/staging`;读 `docs/research/pre_work_error_ledger.md`;跑 `python3 scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45`;在基线上记录 Python 全量、`npm test`、v5 评测三份基线数字 | 进度记录里有三份基线 |
| T1 | U1 + U2 | 乔布斯、奥巴马、泰勒三盘的 D5 / D6 / D8 / D11 与上游 `23be1807` 一致;按 PVR 原书各给一个手算示例并写进测试;Vimsopaka 全自宫反例等于 20 |
| T2 | U3 | 三盘的 Yogini 首段余额、起止日期与上游一致;按 Goel Table I 写顺序断言 |
| T3 | U4 | 构造一个能区分「0 起星座序号」和「1 起相对宫」的用例;年主结果与上游一致;BUG-1214 记录补关联 |
| T4 | U5 + U6 + U7 | Narayana 两种算法并列显示,且不改打分(打分仍用旧 Narayana,产品 10-04 已定);Varnada、Pranapada 上卡或进报告的位置写清;三张公开盘的 Bhava / Hora / Ghati / Sree / Indu 上升与上游一致,且 Hora ≠ Ghati;`jupiter_upachaya_from_moon` 在卡和报告里不再叫瑜伽 |
| T5 | U8 + U9 | 出生秒数非 0 的虚构盘:年盘时刻与上游一致;首段大运被截断的盘:AD / PD 边界与上游一致;Neecha Bhanga 的 `conditions_checked` 含两个新条件 |
| T6 | U10 | 6 种岁差各跑一次:本命、行运、Bhava Chalit、星宿命令实际使用的岁差都等于请求的岁差(断言 `requested == applied`);同时核实我方是否存在 import 引导覆盖已选岁差的问题,写明有或没有 |
| T7 | 下游 golden 与卡片 | 重新生成 `frontend/tests/fixtures/consult-evidence-card-golden.json` 等真实引擎 golden;健康 / 财富 / 学业卡的分盘值变化逐盘列表 |
| T8 | 生时校正 | 按红线 1、2 执行;报告 v5 前后每格数字 |
| T9 | Shadbala 木星第 3 列差异 | 只定位、不修:找出是上游哪个提交造成的、哪边符合原书,写进进度记录与 Bug 历史(`investigating`);如果属于本单五个提交之一,就按该项一起合入 |
| T10 | 记录 | 每项一个提交,提交说明写上游提交号与 BUG 号;`docs/BUG_HISTORY.md`、`CHANGELOG.md`、`docs/tasks/PROGRESS-upstream-sync6-20261007.md`、`docs/tasks/README.md` 状态板 |
## 6. 让步顺序
时间不够时按这个顺序往后放:T9 → T4 的 U5(Narayana 并列)。U1 / U2 / U3 / U4 / U6 / U10 不让步(U6 有实证:我方 Hora 与 Ghati 上升相同,且对话单要用这些点)。
## 7. 验收口径
ruff、py_compile、快速门 `failures []`、Python 全量失败名单 ⊆ 基线、`tsc --noEmit` 0、`npm run lint` 0 error、`npm test` 失败名单与基线逐条相同、`next build` 后 `/` 仍 Static、v5 评测每格不降超过 1 个百分点。名人生平回测需要模型 key,没有就写成环境缺口。