Files
Jyotisha/docs/tasks/TASK-upstream-sync7-20261014.md
T

81 lines
8.2 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 · 上游同步第七轮:sync6 之后上游漏搬的 4 处小修 + 星历路径核查(2026-10-14)
- 日期:2026-10-14
- 来源:产品 10-14 要求复查上游 Skill 仓(`/workspace/yinduzhanxing`,GitHub `732642856/yinduzhanxing`)。远端 main 仍停在 10-08 `0337b77f`,无新提交;按补丁内容逐条对照 10-02 以来 142 个提交:已有 38、不适用 101、**缺 3 个提交共 4 处**。产品 10-14 同意出本单,交 agent 循环由 Grok 执行。
- 执行方:**Grok(Windows)**,分支 `codex/upstream-sync7-20261014`,只推这个分支
- 验收:Claude(Linux)
- BUG 编号:**BUG-1318 起**(开工时核对 `docs/BUG_HISTORY.md` 最大号;写作时最大号为 BUG-1317)。T1–T4 各一个号,T5 有结论再取号。
## 1. 基线
- 基线 commit:`origin/staging` `77057a81`。
- 上游参照:`origin/main` `0337b77f`(10-08)。**上游 10-05 做过一次隐私改写,旧 SHA(`c593354f`、`23be1807`、`03bea6ed` 等)已不在上游 main**;本单只引用新 SHA。上游代码要点已抄在 §2,执行方不需要能访问上游仓库。
- 只按下表逐项移植,不整文件覆盖上游文件。
## 2. 事故实证(`77057a81`,行号按符号定位)
| 项 | 上游提交 | 我方现状 |
| --- | --- | --- |
| T1 婚恋断语 | `f891a2c1` | `scripts/marriage_counting.py` 综合评级仍写「高(关系质量好,伴侣支持强,婚姻稳定)」…「低(关系质量有重大挑战,强烈建议婚前咨询)」;该结果经 `scripts/jyotish_engine.py` 放进导出包 `detail_blocks.marriage_counting`(模型可读)。另 `scripts/jyotish_api_server.py` DK 证据行写 `婚姻质量 {marriage_quality_score}/100`,而该分数是 0–1 |
| T2 KP 判宫 | `0337b77f`(夹在隐私提交里) | `scripts/bhava_chalit.py` 只有 Parashari 中点判宫 `_planet_bhava`;`jyotish_engine.py` 的 `cmd_kp` 把同一结果当 KP 落宫用;`scripts/kp_system.py::calc_kp_analysis` 收了宫头却不声明判宫口径 |
| T3 瑜伽去重排序 | `0337b77f` | `scripts/yoga_engine.py` 内 `_kendra_lords_list` / `_trikona_lords_list` 仍是 `list(set([...]))`(`jyotish_engine.py` 里的 `kl` / `tl` 已是 sorted,不用改) |
| T4 大运年长 | `4d543209` | `scripts/jyotish_api_server.py` 两处 `365.25636`(大运兜底时间线 `end_date`、`years_into_md`),同一时间线 `scripts/dasha_analyzer.py` 用 `365.25` |
| T5 星历路径(核查) | `e1909724` 揭示的同类问题 | `jyotish_engine.py::compute_chart_data` 与 transit 入口都 `swe.set_ephe_path('')`;上游发现路径是进程全局、未设路径的调用会悄悄退回 Moshier、结果随调用顺序变。我方是否同样,未查 |
上游代码要点(照此语义实现,命名可按我方风格):
- **T1**:五档评级改为证据档位 `supportive_evidence_stronger` / `supportive_evidence_mixed_positive` / `mixed_evidence` / `pressure_evidence_mixed` / `pressure_evidence_stronger`,并加 `claim_boundary`:「D9 结构证据指数,不预测婚姻次数、稳定、离婚、伴侣好坏,也不提示需要婚前咨询」。
- **T2**:`BhavaChalit` 新增 `_planet_bhava_from_cusps(planet_lon, cusps)`:宫 i 的范围是 `cusp[i] → cusp[(i+1)%12]`。计算入口加参数 `house_assignment`,取值只允许 `'sandhi'`(默认,本命 Bhava Chalit 表)或 `'cusp_to_cusp'`(KP),其他值抛 `ValueError`,结果里带 `house_assignment`。`cmd_kp` 显式用 `cusp_to_cusp`;`calc_kp_analysis` 新增 `house_occupancy_basis`,传了宫头却不声明就抛错,未传宫头时记 `whole_sign_proxy`;KP 报告表加一行「House occupancy basis」。
- **T3**:`sorted(set(...))`,注释说明 set 顺序随进程哈希变化。
## 3. 根因
我方 sync6 参照的是 10-05 的五个计算修正;上游随后把 T2/T3 夹在 10-08 的隐私提交里,T1/T4 在 10-02~10-03 的提交里,当时按标题筛选时漏掉。
## 4. 决策记录(产品 2026-10-14 授权)
1. 移植 T1–T4;T5 只核查、出结论,**不改代码**(有问题另立单)。
2. T1 用户可见措辞改中文证据档位(报告是中文为主;英文版用英文档位),**禁止**任何「婚姻稳定 / 离婚 / 再婚 / 几段婚姻 / 建议婚前咨询」类断语;`婚姻质量 X/100` 改为如实表达 0–1 指数(或去掉分母),不得乘 100 冒充百分制。沿用 sync4 T1(marriage_counting 删「再婚 / 几段关系」断语)的口径。
3. 不搬:`fee84828` Sade Sati(我方无该表);`59f61d3c` 等强制显式岁差(产品 10-03 已拒);`ca20ae14` 健康改 D6/D8(占星师裁定只看 D30,甲8 试算变差);10-02 校正门控 / 映射(试算未过门);书库语料(来源版权不清);上游 `AGENTS.md` §9 书库流程。
## 5. 硬红线
1. **不改生时校正打分**:T1–T4 均不在打分路径(KP 在 `OBSERVATION_ONLY_LAYERS`)。若任何改动触及 `scripts/research/sealed_holdout_rerun.py::PRODUCTION_FILES` 或其他冻结身份文件,停下回报(ERR-110),不得自行重新冻结。`test_rectification_validation_integrity_gate` 等冻结测试必须保持绿。
2. `scripts/jyotish_api_server.py` 只允许 T1 那一行与 T4 两处常量的 bugfix 级改动;`tests/test_api_server_growth_contract.py` 必须过。
3. golden 由真实引擎生成,不手造;改任何既有断言写「原值 / 新值 / 原因」三栏。
4. 本命 Bhava Chalit 表的判宫结果必须逐字节不变(默认 `sandhi`);只有 KP 层改变。
5. 不改数据库、不改 workflow、不提升 main、不推 staging;只推 `codex/upstream-sync7-20261014`。
6. 不写真实用户资料;示例只用公开名人盘(如乔布斯 AA)或虚构盘。
## 6. 任务分解
| 项 | 内容 | 验收 |
| --- | --- | --- |
| T1 | 婚恋评级改证据档位 + `claim_boundary`;DK 行「婚姻质量 X/100」改对;检查报告 / 导出包 / 中英文渲染里引用评级字符串的地方一并改 | 新测试:五档均不含断语词(稳定、离婚、再婚、婚前咨询、几段),`claim_boundary` 存在;DK 行不再出现 `/100`;中英文报告渲染各一例快照(公开盘) |
| T2 | KP 宫头到宫头判宫,`house_assignment` / `house_occupancy_basis` 显式声明 | 新测试:构造宫头使行星落在「中点判宫」与「宫头判宫」不同宫,两种口径结果不同;默认 sandhi 与改前逐字节相同;`calc_kp_analysis` 传宫头不声明即抛错;KP 报告出现判宫口径行 |
| T3 | 两处 `sorted(set(...))` | 新测试:用不同 `PYTHONHASHSEED` 起两个子进程算同一张盘,瑜伽参与者顺序一致 |
| T4 | 两处 365.25636 → 365.25 | 新测试:兜底时间线与 `dasha_analyzer` 时间线同一大运起止一致(误差 0 天) |
| T5 | 核查我方 Swiss Ephemeris 路径:`set_ephe_path('')` 实际落到哪套星历(看 `calc_ut` 返回 flag 是否含 `SEFLG_MOSEPH`)、生产镜像里是否有 `.se1` 星历文件、是否存在进程内不同调用路径用不同星历 | 进度记录写结论与证据;有问题写成新 BUG(`investigating`)并给建议,不改代码 |
每项一个提交,提交说明写上游提交号与 BUG 号。
## 7. 让步顺序
T1 不可让(违反「不断言婚姻」口径)。T3、T4 小,不可让。T2 可让(若改动面超出预期,先交 T1/T3/T4,T2 写清卡点)。T5 可让为环境缺口(Windows 无法确认生产镜像时如实写)。
## 8. 验收门(执行方自测 + Claude 复验)
- Python:`ruff`、`py_compile`、定向测试、**快速门全量** `scripts/run_quality_gate.py --profile quick`(`failures []` 或与基线同名);冻结身份测试绿;隐私标记测试。
- 本单只改 Python 与报告渲染;若碰到前端,加跑 tsc / lint / `npm test`(失败名单与基线逐名相同)/ build。
- `docs/BUG_HISTORY.md`(BUG-1318 起)、`CHANGELOG.md`、`docs/tasks/PROGRESS-upstream-sync7-20261014.md`、`docs/tasks/README.md` 状态。
## 9. 开工前置
```
git fetch origin --prune
git status -sb
git worktree add -b codex/upstream-sync7-20261014 .worktrees/upstream-sync7-20261014 origin/staging
```
开工时核对 `origin/staging` 是否仍为 `77057a81`;若已前进,以最新 staging 为基,进度记录写明。