docs(tasks): upstream sync 9 brief (agent loop, issue #141)
Fifteen calculation fixes landed on upstream main on 10-16 that sync 8 never saw, because sync 8 took the upstream-notice branch instead. Batch A (nine items outside the rectification freeze) goes to Grok now; Varga and Narayana touch frozen files and wait for #137. Co-Authored-By: Claude (agent loop) <noreply@anthropic.com>
This commit is contained in:
@@ -543,3 +543,4 @@
|
||||
| — | `PROGRESS-chart-ui-114-20261027.md` | **#114 星盘页一页铺开**:南北印度可点盘、检视、深读四页、对话右栏完整盘面(直接执行) | 待推 staging | `codex/chart-ui-114-20261027` |
|
||||
| — | `PROGRESS-session-shell-116-20261028.md` | **#116 侧栏会话菜单搬进外壳**:每个页面都能「…」和拖动(直接执行,BUG-1467) | 已推 staging | `codex/session-shell-116-20261027` |
|
||||
| `TASK-home-crash-saved-people-20261027.md` | `PROGRESS-home-crash-saved-people-20261027.md` | **#115 首页崩溃**:存过别人的账户一进首页就「页面出错了」——人物列表的资料缺两个字段,启程引导一读就报错;入口补齐默认值(BUG-1464) | 待验收 | `codex/home-crash-saved-people-20261027` |
|
||||
| `TASK-upstream-sync9-20261028.md` | — | **#141 上游同步第九轮**:上游 main 10-16 有 15 个计算修正我方从没跟过(第八轮取的是另一条分支);甲批九项(Yogini 边界、Tithi 主星、Saham Table 74、Ashtottari、Kalachakra、Arudha 只到星座、Darakaraka、相位含计都)+ 接入映射表;乙批 Varga / Narayana 改冻结文件,等 #137 后另开 | 待领取 | `codex/upstream-sync9-20261028` |
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
# TASK · 上游同步第九轮:上游 main 10-16 的计算修正(甲批九项)+ 接入映射表(2026-10-28)
|
||||
|
||||
- 日期:2026-10-28
|
||||
- 来源:issue #141「同步上游 skill 技法」。产品负责人 10-28 说明上游 Skill 仓已更新,要求同步并查清计算需要更新的地方,附了上游作者的接入说明(「把印度占星仓的计算能力接入另一个项目」)。
|
||||
- 执行方:**Grok(Windows + Docker)**,分支 `codex/upstream-sync9-20261028`,只推这个分支
|
||||
- 验收:Claude(Linux)
|
||||
- BUG 编号:开工时按 `docs/BUG_HISTORY.md` 全文件取最大号 +1。写作时最大号为 BUG-1471;另一会话正在串行做 #121~#140,会继续占号,务必开工当时再核对。本单预计 8 个号(A1~A7、A9 各一个)。
|
||||
|
||||
## 1. 基线
|
||||
|
||||
- 基线 commit:`origin/staging` `3eeb8980`(#121/#122 已在其中)。
|
||||
- 上游:GitHub `732642856/yinduzhanxing`(本机 `/workspace/yinduzhanxing`,10-28 已 fetch,与远端 main 一致)。上游 main 头 `5fb8379c`(10-21)。
|
||||
- 我方已跟到哪里:
|
||||
- 第八轮(BUG-1380~1389)按上游分支 `codex/upstream-notice-20261016` 的 `caf1ed4e` 搬了十项。**该分支没有合入上游 main**,两者从 `97dea658` 分叉。
|
||||
- 之后按单搬过 `7a773d13`(合盘 D4 / Niryaana PVR)、`9f08b57b`、`258e08e3`(Niryaana 强度)、`5fb8379c`(Goel Jaimini,#94)。
|
||||
- `references/upstream/yinduzhanxing/source-manifest.json` 仍写 `b9a0ef8f`(09-09 第二轮),该提交已被上游改写历史后不存在,提交时间与上游 `dc3b8fef` 相同。本单更新这份清单(T0)。
|
||||
- 上游 main 自 `97dea658` 以来 58 个提交,其中 synastry 产品、报告形态、研究工具占大头;**计算修正 15 个,我方提交历史与文档里一次都没有提到。** 第八轮按分支取材,这批 main 上的修正因此漏掉了。
|
||||
|
||||
## 2. 事故实证(`3eeb8980`,把上游这些提交自带的测试原样放到我方代码上跑)
|
||||
|
||||
| 项 | 上游提交 | 上游测试在我方的结果 | 我方现状(按符号定位) |
|
||||
| --- | --- | --- | --- |
|
||||
| A1 Yogini 恰在星宿边界 | `d268d519` | `test_yogini_exact_boundaries.py` 24 败 7 过 | `scripts/yogini_dasha.py`:月亮恰在星宿起点时第一大运余额算成约 0(应为整段,如 7 年),与第八轮 T2(BUG-1381)同类,当时只修了 `dasha_analyzer` / `cmd_dasha`。经 `jyotish_engine`、`consult_card_domain_facts`、`annual_native/dasha_children` 进星盘页大运右栏(#88)、咨询卡和年运 |
|
||||
| A2 Tithi 主星 | `33537b31` | `test_tithi_lord_source.py` 21 败 14 过 | `scripts/tithi_lord.py`:三十个 tithi 的主星顺序不是来源顺序(如某 tithi 我方给 Sun,来源为 Rahu);非法种子被静默接受 |
|
||||
| A3 Saham Table 74 | `cb8a1ca7` | `test_saham_table74_completion.py` 7 败;`test_saham_pvr_directed_arc.py` 8 败 5 过 | `references/saham_rules.json` 缺 Table 74 其余公式(如 `Samartha_Saham`);`scripts/tajika.py` 有按宫位的旧近似公式会覆盖来源公式。注意第八轮 T9(BUG-1387)已按 `ce9fed15` 改过例外弧方向,`directed_arc` 测试的失败要逐条分清是新问题还是我方写法不同 |
|
||||
| A4 Ashtottari 弧与子运时钟 | `0712f98f` | `test_ashtottari_source_arcs.py` 11 败 7 过;`test_ashtottari_reference_clock.py` 2 败 | `scripts/ashtottari_dasha.py`、`scripts/cmd_nakshatra_adv.py`:星宿弧没用来源弧段;第二轮循环的子运不随父运移动;辅助出生余额改写了子运时钟。进星盘页 Ashtottari(#88) |
|
||||
| A5 Kalachakra 星座期 | `f353a096` | `test_kalachakra_source_lords.py` 116 败(大部分是缺 `_fraction_completed_in_pada` 这类接口,先补接口再看数值) | `scripts/kalachakra_dasha.py`:古典星座期没按月亮实际经度起算;非有限输入会退回默认值而不是报错 |
|
||||
| A6 Arudha 只到星座 | `8b55630a` | `test_special_lagnas_arudha_coordinates.py` 2 败(我方没有 `calculate_arudha_lagna`,名字是 `calculate_arudha_pada`) | `scripts/special_lagnas.py`:Arudha、A10、Upapada 按数宫只确定星座,我方却给出星座内度数。上游改为标明坐标口径、不编造度数。**该文件被生时校正调用**(`active_rectification_event_engine.py`) |
|
||||
| A7 Darakaraka 排序 | `45b3b66b` | 收集即失败:我方 `scripts.jaimini` 没有 `calc_chara_karaka` | `scripts/darakaraka_reader.py` 自己排七/八 Karaka,交点处理、原始经度、排除星与主 Jaimini 表可能不一致。经 `jyotish_api_server`(合盘)与 `jyotish_engine` 使用 |
|
||||
| A8 已覆盖,只核对 | `07fc5be3` | `test_dasha_analyzer_boundary_contract.py` 2 过 | 第八轮 T2 已修。本单只把上游测试收进来,不改 `dasha_analyzer.py` |
|
||||
| A9 相位含计都与速度 | `e628118d`(只取 `aspects.py`) | 上游 `5fb8379c` 起自 `dc3b8fef` 改过相位的测试(如 `test_yoga_node_aspect_policy.py`)放到我方再判 | `scripts/aspects.py` 与上游 `dc3b8fef` 逐字相同,上游之后把计都纳入相位、按行星速度判入相/离相(`planet_speeds` 参数,计都取罗睺速度)。三方合并 0 冲突。注意上游同期 `2f52cfca` 改 `karaka_calculator.py` 依赖 `jaimini.calc_chara_karaka`,与 A7 同一缺口,本单不搬 |
|
||||
|
||||
乙批(本单**不做**,见 §4.3):
|
||||
|
||||
| 项 | 上游提交 | 上游测试在我方的结果 | 为什么后做 |
|
||||
| --- | --- | --- | --- |
|
||||
| B1 22 号 Drekkana 与 Sarpa 范围 | `50847e57` | `test_varga_bphs.py` 3 败 14 过;`test_sarpa_drekkana_precision.py` 4 败 2 过(我方 Sarpa 范围 5 段,书上 3 段) | 改 `scripts/varga.py`,在校正冻结清单里 |
|
||||
| B2 Narayana 小运强度口径贯通 | `6859b263` | 3 败:`build_narayana_dense_boundaries()` 不收 `strength_profile` | 改 `scripts/narayana_dasha.py`,在校正冻结清单里 |
|
||||
|
||||
不搬:`72ce63e1`(完整调用回执)、`55eecebd`(依赖我方没有的 `shodashottari_pyjhora_md_replay` 研究回放)、`20859457`(依赖第二轮就决定不搬的 `professional_parity_closure`)、`cdb6c03a`(改的是我方没有的 `rashi_dasha_explicit_contract`,第二轮也决定不搬)、`55f26e4f`(合盘匹配产品,我方已有自己的七项匹配 `cf063834`)、synastry 产品与报告系列、`a13d3abf` 等 checkpoint。
|
||||
|
||||
## 3. 根因
|
||||
|
||||
前八轮都按上游提交标题或某一条分支挑修正。上游 10-16 在 main 上一次性提交了十几项「按来源纠正」的计算修正,同期我方第八轮取的是另一条分支,所以这批全部漏掉。另外 A1 与第八轮 T2 是同一个边界问题在第三个大运实现里的复发,T2 当时只修了被点名的两处。
|
||||
|
||||
## 4. 决策记录
|
||||
|
||||
1. **产品 10-28 要求同步上游并查清计算要更新的地方**(issue #141)。本单按第八轮先例只做计算修正,按语义移植,**不整文件覆盖**;我方文件与上游已分叉,三方合并在优先文件上几乎都有冲突(15 个优先计算文件里只有 `aspects.py`、`karaka_calculator.py` 可以干净合并;前者收为 A9,后者依赖我方没有的 `calc_chara_karaka`,不搬)。
|
||||
2. **issue 附的接入说明是给「从零接入另一个项目」写的**,我方已经接了八轮。本单从中只取两样:一张接入映射表(T9),以及「无法运行的模块列为未验收」的口径。说明里的统一结果外层(`source_commit` / `execution_status` 等)会改所有接口形状,本单不做;产品要做再单独开单。
|
||||
3. **分两批,乙批等 #137**:B1、B2 改的是生时校正冻结文件。#137(星盘页与报告大运统一从真实出生时刻算,另一会话在做)也会改冻结文件并重新冻结。乙批在 #137 合入 staging 后由 Claude 另开单,冻结只按顺序各做一次。
|
||||
4. **用户可见变化已知并接受**(与第八轮同一口径:计算按来源修正,数值会变):
|
||||
- 月亮恰在星宿起点的盘,Yogini 第一大运会从约 0 变成整段,后续日期整体移动;
|
||||
- Tithi 主星会变;
|
||||
- 年运 Saham 会多出 Table 74 其余各项,个别旧近似值会变;
|
||||
- Ashtottari、Kalachakra 的日期边界会变;
|
||||
- Arudha / A10 / Upapada 不再显示星座内度数,只显示星座。
|
||||
5. **重新冻结的先例**:第八轮在分数逐条相同的前提下重新冻结(`79f6ac52`)。本单甲批**不应**改任何冻结文件;如果发现必须改,停下回报为「需拍板」,不要自行重新冻结。
|
||||
|
||||
## 5. 硬红线
|
||||
|
||||
1. **生时校正输出逐字节不变。** 跑 `scripts/research/sealed_holdout_rerun.py`(20 条)与 `scripts/research/reported_offset_sweep.py`(900 条),改前改后逐条相同。A6 特别注意:校正读 `special_lagnas`,若改 Arudha 输出让校正结果变了,A6 停下,保留校正路径原行为(加显式参数、默认即现行为),做不到就回报。
|
||||
2. **不改冻结清单里的文件**:`docs/research/*upstream_sync8_2026_10_18.freeze.json` 列出的 16 个文件(含 `varga.py`、`narayana_dasha.py`、`jaimini.py`、`dasha_analyzer.py`、`shadbala.py`、`divisional_charts_extended.py`)。A7 若要用上游 `calc_chara_karaka`,在 `darakaraka_reader.py` 里调用我方 `jaimini.py` 已有的排序函数,不改 `jaimini.py`;我方没有可用函数就回报。
|
||||
3. **不新增 `scripts/` 根目录文件**(根目录预算见 #81 决策 A)。上游测试放 `tests/`,上游配套研究文档按原路径放 `docs/research/`。
|
||||
4. 不改 `.gitea/workflows/**`、不动数据库与迁移、不改个人报告导出合同、不碰前端。
|
||||
5. 上游测试按语义改写成我方接口时,**不得放宽断言的数值**;名字或形状不同就改调用方式,数值一律按上游。某条上游断言我方确实不该照做(如第八轮 T3 那类数据形状差异),在 PROGRESS「断言三栏」写清原值 / 新值 / 原因。
|
||||
6. 公开仓库:测试与文档只用公开或虚构出生资料。
|
||||
|
||||
## 6. 任务分解
|
||||
|
||||
每项一个提交、一个 BUG 号,提交信息写上游提交号。先把对应上游测试收进 `tests/`(文件名前加 `test_upstream_sync9_`),确认改前失败,再改代码让它通过。
|
||||
|
||||
| 任务 | 内容 | 验收标准 |
|
||||
| --- | --- | --- |
|
||||
| T0 | 更新 `references/upstream/yinduzhanxing/source-manifest.json` 与 `references/cross_project_contract/sync_ledger.json`:上游 main 头 `5fb8379c`,写明 `b9a0ef8f` 已不存在、对应 `dc3b8fef`,本轮只取 §2 甲批。用现有导入器的 ledger 写法,不手写哈希 | 相关合同测试通过(`tests/test_cross_project_*`、`tests/test_upstream_*` 中与清单有关的) |
|
||||
| T1 | A1 Yogini 边界(`d268d519`) | 上游 31 条全过;非边界经度随机抽样 1 万点,第一大运余额与改前相同 |
|
||||
| T2 | A2 Tithi 主星(`33537b31`) | 上游 35 条全过 |
|
||||
| T3 | A3 Saham Table 74(`cb8a1ca7`) | `table74_completion` 7 条全过;`directed_arc` 13 条逐条判定:要么通过,要么在 PROGRESS 写清它与 BUG-1387 的关系 |
|
||||
| T4 | A4 Ashtottari(`0712f98f`) | 上游 20 条全过;`cmd_nakshatra_adv` 的输出键不变 |
|
||||
| T5 | A5 Kalachakra(`f353a096`) | 上游 116 条全过,先补测试要用的内部接口;非有限输入报错,不退回默认 |
|
||||
| T6 | A6 Arudha 坐标口径(`8b55630a`) | 上游 2 条按我方函数名改写后通过;红线 1 成立;`chart_view_points/api.py` 与 `full_report_quality_gate.py` 的相关测试通过 |
|
||||
| T7 | A7 Darakaraka(`45b3b66b`) | 上游测试按我方接口改写后通过;红线 2 成立 |
|
||||
| T8 | A8 收测试(`07fc5be3`) | 2 条通过,不改代码 |
|
||||
| T8b | A9 相位(`e628118d` 的 `aspects.py` 部分) | 上游相关测试通过;所有调用 `calc_aspects`(或我方对应函数)的地方要么传速度、要么明确不传,PROGRESS 列出调用方与是否传速度;瑜伽相位既有测试通过 |
|
||||
| T9 | 写 `docs/research/upstream_capability_map_2026_10_28.md`:issue 列的「优先接入」八类(行星、宫位、分盘 D1/D9/D10、Vimshottari/Narayana、行运、Shadbala/Bhava Bala/Vimsopaka、相位、瑜伽),每类一行:上游文件与函数(`5fb8379c`)、我方文件与函数、我方入口(CLI/API)、状态 A/B/C/D(定义照 issue)、最后一次跟上游的提交号、未跟的上游修正。另列上游 main 有、我方从入口不可达的新模块(43 个,如 `sudasa`、`tara_dasha`、`kaala_dasha`、`varnada_dasha`),标「未接入,第二批另评估」 | 每行的「我方函数」在 staging 上真实存在;不写「已计算」除非能从 CLI/API 调到 |
|
||||
| T10 | 记录:BUG_HISTORY 每项一条、CHANGELOG、PROGRESS(含断言三栏、校正回放、跑过的命令与数字)、`docs/tasks/README.md` 状态板这一行改状态 | — |
|
||||
|
||||
## 7. 让步顺序
|
||||
|
||||
时间不够时:先 T1、T2(用户可见、改动小),再 T3、T4、T5,最后 T6、T7。T0、T8、T10 必做。T9 可以只交八类表,不可达模块清单列文件名即可。做不完的项在 PROGRESS 写「未做」,不得写成通过。
|
||||
|
||||
## 8. 验收命令
|
||||
|
||||
| 检查 | Grok 自跑 | Claude 验收时跑 |
|
||||
| --- | --- | --- |
|
||||
| 本单新增与改到的 Python 测试文件 | 必跑(工作树 `.venv`) | 复验 |
|
||||
| 与改动模块相关的既有测试(`tests/test_yogini*`、`test_tithi*`、`test_saham*`、`test_tajika*`、`test_ashtottari*`、`test_kalachakra*`、`test_special_lagnas*`、`test_darakaraka*`、`test_annual*`、`test_chart_view*`) | 必跑 | 复验 |
|
||||
| 生时校正回放 20 条 + 900 条,与改前逐条比 | 必跑 | 复验 |
|
||||
| Python 快速门 `run_quality_gate.py --profile quick` | 不跑 | 以 Claude 为准 |
|
||||
| 前端 | 本单不改前端,不跑 | 跑 `report-fact-tables.test.ts` 与星盘页大运相关测试 |
|
||||
|
||||
## 9. 开工前置命令
|
||||
|
||||
```
|
||||
git fetch origin
|
||||
git worktree add .worktrees/upstream-sync9-20261028 -b codex/upstream-sync9-20261028 origin/staging
|
||||
python scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45
|
||||
grep -o 'BUG-[0-9]\+' docs/BUG_HISTORY.md | sort -t- -k2 -n | tail -1
|
||||
git remote add upstream https://github.com/732642856/yinduzhanxing.git # 已有则跳过
|
||||
git fetch upstream main
|
||||
git show <上游提交> -- <文件> # 每项只读 diff,按语义移植
|
||||
```
|
||||
|
||||
## 10. 真机
|
||||
|
||||
改动用户可见(星盘页 Yogini / Ashtottari 大运、年运 Saham、Arudha 显示)。走查清单:`docs/testing/upstream-sync9-20261028.md`。
|
||||
@@ -0,0 +1,11 @@
|
||||
# 真机走查 · 上游同步第九轮(issue #141)
|
||||
|
||||
在 staging 上用虚构或公开出生资料看下面几处。数值变化本身是预期的,要看的是「显示正常、没有报错、口径说明对得上」。
|
||||
|
||||
| # | 操作 | 应该看到 |
|
||||
| --- | --- | --- |
|
||||
| 1 | 打开一张星盘,大运右栏切到 Yogini | 正常显示,日期连续,没有长度为 0 的第一大运 |
|
||||
| 2 | 同一张盘切到 Ashtottari,点开一个大运看小运 | 小运首尾和大运对得上,第二轮循环的小运日期跟着大运走 |
|
||||
| 3 | 生成一份带年运的报告,翻到 Saham | 比以前多出若干项;没有空白或「undefined」 |
|
||||
| 4 | 报告或星盘里看 Arudha(AL)、A10、Upapada(UL) | 只写星座,不再写星座内的度数 |
|
||||
| 5 | 手机上重复 1、2 | 切换条和表格不溢出 |
|
||||
Reference in New Issue
Block a user