Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HwMNZEzdzmrbPhuRNmZe3C
18 KiB
18 KiB
TASK · 上游同步第八轮:上游 10-16 通知答复分支 + 10-08 以来四项计算修正(2026-10-17)
- 日期:2026-10-17
- 来源:
- 10-16 产品要求复查上游 Skill 仓(GitHub
732642856/yinduzhanxing,本机/workspace/yinduzhanxing)。上游0337b77f → 3c2dad95共 14 个提交,其中 8 个是计算修正。 - 我们把对方仍存在的 7 处代码问题和 5 个口径问题写成通知
docs/research/upstream_notice_2026_10_16.md(staging9b750915)发给 skill 作者。 - 10-17 作者在分支
codex/upstream-notice-20261016(caf1ed4e)修复并逐条答复,答复见上游docs/research/upstream_notice_reply_2026_10_16.md。 - 产品 10-17 决定直接按该分支出本单。
- 10-16 产品要求复查上游 Skill 仓(GitHub
- 执行方:Grok(Windows),分支
codex/upstream-sync8-20261017,只推这个分支 - 验收:Claude(Linux)
- BUG 编号:BUG-1380 起。写作时
docs/BUG_HISTORY.md最大号为 BUG-1366;在途单已占用 BUG-1367~1369(窄交付)和 BUG-1370~1374(婚恋合盘)。开工时再核对一次最大号,冲突则整体顺延。
1. 基线
- 基线 commit:
origin/staging53608d8b。我方核对时用的是1eb504d3,两者之间scripts/无改动。sync7(BUG-1318~1322)的代码已在其中。 - 上游参照:分支
origin/codex/upstream-notice-20261016的caf1ed4e(10-17)。- 注意:该分支未合入上游 main。 上游 main(
3c01a214)与它从97dea658分叉,main 上缺 Argala 裁决、Avastha 并存条件和 dasha_analyzer 修复。 - 本单一律以
caf1ed4e为准,不参照上游 main。
- 注意:该分支未合入上游 main。 上游 main(
- 取上游:仓库是公开 GitHub,执行方可以加 remote 后
git fetch读 diff(见 §9)。下表每项写了上游提交号,只按语义移植,不整文件覆盖;我方文件和上游已经分叉,补丁不能直接 apply。
2. 事故实证(53608d8b,按符号定位)
| 项 | 上游提交 | 我方现状 |
|---|---|---|
| T1 星宿拆解第一大运小运 | 8643bc9a(上游测试 test_first_remaining_md_is_not_repartitioned_into_new_ads) |
scripts/nakshatra_dasha.py::calc_nakshatra_dasha_breakdown 把 first_remaining(出生时剩余年数)交给 _calc_vimshottari_antardasha_full,等于把剩余段当完整大运重新切 9 段。用例:月亮在 Ashwini 中点,当前小运应为 Rahu,我方给 Ketu。结果经 modules.nakshatra_dasha.vimshottari_nak_breakdown 进完整报告与数据包 |
| T2 星宿边界 | 3c2dad95 第①部分、8643bc9a、9e04f0db(只取 lon_to_nakshatra) |
jyotish_engine.py::cmd_dasha 与 dasha_analyzer.py::lon_to_nakshatra 都是 idx = int(m/ns) 和 progress = (m%ns)/ns 分开算。月亮恰在星宿起点时,两者不一致。上游 27 起点参数化测试在我方挂 16/27:第一大运余额 0,整段大运被跳过 |
| T3 Sandhi 假交接 | 3c2dad95 第②部分(按我方数据形状改写) |
jyotish_engine.py::_calc_dasha_sandhi 把第一段小运被裁到出生日的 start 当成交接。我方第一大运 start 本来就是出生前的真实交接时刻(BUG-1268),所以上游「跳过第一大运起点」那条不搬。默认参考时刻带墙钟时分,没归零到当天 0 点 |
| T4 Yoga Pinda | 30b43643 |
scripts/ashtakavarga.py::calc_yoga_pinda 只取本座 bindu ×4× 行星权重,没做 Trikona / Ekadhipatya 削减,也没做十二座、七曜求和。我方已有标准削减链 ashtakavarga_shodhana.sodhita_chain(BUG-1209) |
| T5 Bhava Bala | a4d4a249 |
scripts/bhava_bala.py:Dig 表里人象与四足共用一张,且多一个 vanaspati 档;摩羯前半归成水象;Sputa 用阶梯表,不是 BPHS 分段公式,也没有火、木、土的特殊相位;吉星取了水星而不是月亮。报告 Bhava Bala 三分量表与咨询卡每宫 bhava_bala 都受影响 |
| T6 Argala | e7301feb、86935c0a、4f1536f2 |
scripts/argala.py::calc_argala_for_reference:• 计都所在宫没反向数; • 同数直接判阻挡; • H9 当次级 Argala; • net_result 按有星宫数比,不按成对比;• _summarize_argala 用占位式 Rajayoga 排序。下游: consultation_native_layers.build_argala、consult_card_domain_facts 的 worksheets.advanced_systems.argala |
| T7 KP 分区 | 8eec9a54 |
scripts/kp_system.py::get_kp_lords 与上游修复前逐字相同:浮点累加 sub-sub 区间,与 120° 取余混用,star / pada / sub 在边界上落在不同半开区间。按角秒扫一圈,129.6 万点中 499 处不同,全在精确边界上 |
| T8 Avastha | 上游 e628118d(09-24,只取 avastha_calculator.py 与相关测试)、7d545039、f75a6e77、ac565836(Shayanadi 接线) |
scripts/avastha_calculator.py 停在 e628118d 之前:• _is_friend_sign / _is_enemy_sign 恒 False;• 旺、落只认精确点 ±5°; • Bala 无奇偶宫翻转,Jagrat 按宫位,交点星未排除; • 标签是落陷→Vikala、燃烧→Khala、友→Mudita、敌→Dina; • Shayanadi 是按星座元素的启发式,没有 PVR 公式,也没有接线。 上游 7d545039 的 dignity 用例在我方 21 败 3 过 |
| T9 Saham 例外弧方向 | ce9fed15 |
scripts/tajika.py::_calc_formula_saham 检查「上升是否在第一→第二操作数的顺行弧上」,不在就 +30°。PVR §28.8.1 p394 的规则是检查第三操作数 C 是否在 B→A 顺行弧上,不在则 +30°。我方 references/saham_rules.json 7 条公式第三项都是上升,所以两种判法近乎互补:大量 Saham 结果会差 30° |
| T10 日出相关 | 9f9f16b3(只取 gulika.py)、872eaecf(只取 saham_daynight.py 日窗口)、上游 BIT_HINDU_RISING 口径 |
scripts/gulika.py 夜晚结束用 sunrise + 1.0,不是真实的下一次日出。scripts/saham_daynight.py::determine_daytime 从 jd−1 查日出日落,晚于出生就整减 1.0 天,也没有 Hindu rising 口径。该函数同时被生时校正使用(active_rectification_event_engine.py 里 saham_daynight.determine_daytime,用于 Hora / Ghati 起点) |
3. 根因
我方前七轮同步按上游提交标题筛选,只搬了被点名的修正。上述算法边界和来源口径问题,有的是两边同源的旧写法(T1、T2、T6、T7、T9、T10),有的是我方从未跟进上游 09-24 以后的改写(T5、T8)。T1 是 BUG-1268 修 cmd_dasha 时漏掉的同类函数。
4. 决策记录(产品授权)
- 10-17 产品决定:直接按作者修复分支
caf1ed4e出单,不等上游合 main。 - 作者 10-17 口径答复,本单照此实现:
- Khala:取 Science of Light 定义(落陷 = Khala;燃烧 = Kopa;友 Shanta、中性 Dina、敌 Duhkhita)。同时成立的条件全部保留展示(如擢升与燃烧并存);旧单标签顺序只作兼容字段,并标明「无经典出处」。大友、凶星同宫条件标「未计算」。
- 日出:不强制全站统一。Saham 昼夜、Gulika、Shayanadi 改用 Hindu rising(日面中心、不计折射);Panchanga 维持现有配置。
- Argala 同数:只按 Rath p363 前两级比较,即先比占星数,同数再比水星、木星、宫主的合相 / 星座相位关联;仍平手的保留
unresolved,不得用 Shadbala 或其他常数顶替。第 3 宫「两颗以上凶星」门槛保留为参数敏感候选。 - Bhava Bala 吉星:固定月亮、木星、金星,水星中性。结果里注明这是具名实现
jyotishganit_mirrored_equal_house_v2的契约,不写成经典定论。 - Pinda:按 PVR §12.7 表 28–29(处女座 6),以 PVR 例 43 = 152 校验;同主一占一空且同值时,按 Raman 15(c) 清空空宫。不向 PyJHora 常数靠拢。
- 10-16 产品范围:本单不改生时校正打分。 日出口径只跟作者改的几处。凡是会改变校正输出的移植,一律保住校正路径原行为(见 §5 红线 1)。
- 用户可见变化已知并接受:
- 报告 Avastha 表与咨询卡措辞会变;
- Pinda 数值约 ×3、强弱排序会变;
- Bhava Bala 每宫约 ±10%、排序会变;
- 年运 Saham 不少会差 30°;
- 咨询层 Argala 会出现「待定」。
- 不搬:
c3346847:我方没有formation_status,燃烧降级已由 sync5 处理;raman_sahams.py:我方无此表;- 上游
ac23c2ee/8abbfd91/c74fd96c研究工具; 001033df测试环境隔离;- 分支上其余提交(年运计算域、D12 联动、英文报告、完整解读元数据、Narayana Rath seed
6b9cd74e、交付 pin 等)。这些另行评估,本单不碰。 - 上游
9e04f0db把dasha_analyzer整体转调原生时钟、保留时分秒:会改变校正打分,本单只取lon_to_nakshatra边界部分,其余记入进度记录待研究。
5. 硬红线
- 生时校正输出逐字节不变。
- 校正打分读
dasha_analyzer.lon_to_nakshatra / build_dasha_timeline / build_antardasha、saham_daynight.determine_daytime、kp_system.get_kp_lords。 - T2 只许改变「恰在星宿起点」那几个浮点点的结果。
- T7 只许改变精确边界点。
- T10 必须让校正调用点保持现有日出口径与日窗口:例如
determine_daytime新增显式参数,默认值即现行为,只有 Saham / Gulika / Shayanadi 调用方传新口径;或者校正侧显式固定旧口径。具体写法执行方定,结果必须相同。 - 验收:改动前后各跑一次
scripts/research/reported_offset_sweep.py与scripts/research/sealed_holdout_rerun.py(用法同 sync6),结果 JSON 除时间戳外逐项相同。若有任何差异,停下回报,不得自行重新冻结(ERR-110)。 tests/test_sealed_holdout_contract_freshness.py等冻结身份测试必须保持绿。- 不得改
sealed_holdout_rerun.PRODUCTION_FILES所列文件。
- 校正打分读
scripts/jyotish_api_server.py不得增长(tests/test_api_server_growth_contract.py)。本单应当不需要改它。- golden 由真实引擎重新生成,不手造。改任何既有断言写「原值 / 新值 / 原因」三栏(AGENTS §7.3)。前端合同测试里的 golden(如
consult-evidence-card-golden.json)同样由引擎重生。 - Argala 的
unresolved/strength_comparison_required/mixed不得在下游被压成none或「无」。 - 不改数据库、不改 workflow、不提升 main、不推 staging;只推
codex/upstream-sync8-20261017。 - 不写真实用户资料;示例只用公开名人盘(如乔布斯 AA)或虚构盘。实测数字段落推送前跑
tests/test_repo_privacy_markers.py。
6. 任务分解
每项一个提交,提交说明写上游提交号与 BUG 号。
| 项 | 内容 | 验收 |
|---|---|---|
| T1 | 星宿拆解第一大运:小运从完整大运真实起点排,再裁到出生之后;复用 cmd_dasha 已有逻辑,不另写一套 |
移植上游 tests/test_nakshatra_native_dasha_clock.py::test_first_remaining_md_is_not_repartitioned_into_new_ads 通过(Ashwini 中点 → 当前小运 Rahu) |
| T2 | cmd_dasha、dasha_analyzer.lon_to_nakshatra 以及其他按 int(m/ns) + m%ns 分开算的星宿定位,改为同一个量一次算出序号与进度,并按上游 8643bc9a 的统一边界语义(不吞掉真实邻点) |
移植上游 27 起点参数化测试 test_native_vimshottari_exact_star_birth_balance,27/27 通过;另加一条:月亮在起点左右相邻浮点数时,序号分别为前、后星宿;红线 1 的校正回放相同 |
| T3 | Sandhi:小运交接用 unclipped_start_datetime 判断,第一段被出生裁剪的小运起点不算交接;默认参考时刻归零到当天 0 点 |
移植上游 tests/test_dasha_sandhi_birth_clip.py,按我方数据形状改写(第一大运 start 在出生前),三栏说明改写处;出生 30 天的虚构盘 Sandhi 表不再出现出生日假交接 |
| T4 | Pinda 改按 PVR §12.7:削减复用 sodhita_chain,十二座 × 星座权重(处女 6)+ 行星权重,求七曜;Raman 15(c) 同值清空空宫。更新报告表头说明 |
移植上游 tests/test_ashtakavarga_pinda_source.py;PVR 例 43 = 152;报告 Sodhita 表与 Pinda 用同一份削减结果(加一条断言);yoga_pinda_summary 的 golden 由引擎重生 |
| T5 | Bhava Bala Dig 表、摩羯前后半、BPHS Sputa 分段公式、火木土特殊相位、吉星集合(月木金,水中性);结果带方法名与 claim_boundary(上游最后一个元数据 hunk 我方缺 status,按我方结构补) |
移植上游 tests/test_bhava_bala_vendor_profile.py;test_report_longform_gaps2 等报告断言按三栏更新;BUG-1210 记录补关联 |
| T6 | Argala: • 计都宫反向数、源对边界、H9 不当次级( e7301feb);• 同数按决策 2 的两级裁决,复用我方 narayana_dasha.select_narayana_seed_sign 已有实现,不移植后续层(86935c0a);• 解释文本与裁决一致( 4f1536f2);• 待定状态透传到 consultation_native_layers 与 consult_card_domain_facts |
移植上游 tests/test_argala_source_boundaries.py、tests/test_argala_strength_adjudication.py;新增下游测试:同数仍平手时咨询层与咨询卡显示待定,不显示「无 / 被阻挡」 |
| T7 | get_kp_lords 改为边界安全的整数 / 精确分区(8eec9a54)。新版对 None、bool、字符串、NaN/inf 抛 ValueError:先 grep 调用点(active_rectification_questions.py、flexible_birth_time_profile.py、rectification/kp_cusp_observation.py、cmd_kp),确认没有依赖旧 TypeError 的 try/except,有就同步改 |
移植上游 tests/test_kp_exact_angular_boundaries.py;20 万随机经度新旧结果 0 差异;红线 1 回放相同 |
| T8 | Avastha 一批: • 友敌座判定、旺落按星座、Bala 奇偶翻转、Jagrat 按尊贵、交点星排除( e628118d 的 avastha 部分);• Deeptadi 标签按决策 2( 7d545039);• 并存条件全部保留( f75a6e77);• PVR Shayanadi calculate_pvr_shayanadi 移植并在主链接线:传月亮经度、上升经度、实际前一次日出(Hindu rising)以来小时数(ac565836);• 报告 Avastha 表、 report-fact-tables.ts、咨询卡 avastha 行、pl9_reader_export 的 Markdown 表跟着改字段 |
移植上游 tests/test_avastha_dignity_regressions.py(7d545039 与 f75a6e77 版)、tests/test_shayanadi_pvr.py 通过;主链输出里 Shayanadi 的 method_status 不再是 simplified_heuristic;中英文报告各一例快照(公开盘) |
| T9 | Saham 例外:改为 C 在 B→A 顺行弧上、不在则 +30°;两个入口(_calc_formula_saham 与 trace)都改,规则说明同步改 references/saham_rules.json 的描述字段 |
移植上游 tests/test_saham_directed_operand_contract.py 与 tests/test_tajika.py 的改动(ce9fed15);构造 C 在 A→B 弧上的例子,新旧结果差 30°;年运报告快照按三栏更新 |
| T10 | 日出: • gulika.py 两处夜晚结束改用真实 next_sunrise;• saham_daynight 增加 Hindu rising 口径与真实相邻事件日窗口(872eaecf),只给 Saham 昼夜、Gulika、Shayanadi 用;• 校正调用点行为不变(红线 1) |
移植上游 tests/test_saham_daynight.py 的四季 × 四时用例(Hindu 口径)通过;新增测试:校正调用 determine_daytime 的结果与改前逐字节相同;高纬度冬季例子 Gulika 夜段终点等于真实次日日出 |
7. 让步顺序
- 不可让:红线 1。
- 尽量不让:T1、T2,二者是确定的错误,影响儿童用户的当前小运。
- 可让:
- T8 体量最大,可拆为 T8a(判定与标签)和 T8b(Shayanadi 接线)先后交。
- T10 若在不动校正路径的前提下改动面超预期,可只交 Gulika 部分,Hindu rising 写清卡点。
- T6 的下游透传若牵动前端过多,可先交引擎层,下游写清卡点。
- 次序建议:T1 → T2 → T3 → T7 → T4 → T5 → T6 → T9 → T10 → T8。T8 依赖 T10 的 Hindu 日出。
8. 验收门(执行方自测 + Claude 复验)
- Python:
ruff、py_compile、定向测试;全量 pytest 与基线逐名对比(引擎数值改动,快速门曾漏过报告测试,BUG-1220);快速门scripts/run_quality_gate.py --profile quick;冻结身份测试绿;隐私标记测试。 - 校正回放:红线 1 的前后两次结果 JSON 附在进度记录。
- 碰到前端(T6 / T8 极可能):tsc / lint /
npm test(失败名单与基线逐名相同)/ build。 - 文档:
docs/BUG_HISTORY.md(BUG-1380 起,每项一号);CHANGELOG.md(用户可见:Avastha 措辞、Pinda、Bhava Bala、Saham、Argala 待定);docs/tasks/PROGRESS-upstream-sync8-20261017.md;docs/tasks/README.md状态。
9. 开工前置
git fetch origin --prune
git status -sb
git worktree add -b codex/upstream-sync8-20261017 .worktrees/upstream-sync8-20261017 origin/staging
cd .worktrees/upstream-sync8-20261017
git remote add upstream-skill https://github.com/732642856/yinduzhanxing.git # 已有则跳过
git fetch upstream-skill codex/upstream-notice-20261016
git log --oneline -1 FETCH_HEAD # 应为 caf1ed4e
读上游改动:git show <提交号>,以及作者答复 git show caf1ed4e:docs/research/upstream_notice_reply_2026_10_16.md。
开工时核对 origin/staging 是否仍为 53608d8b。若已前进,以最新 staging 为基,进度记录写明。