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

8.2 KiB
Raw Blame History

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 为基,进度记录写明。