上游同步第九轮乙批:分盘 Sarpa / 第 22 号 Drekkana 与 Narayana 小运强度(改冻结文件,需拍板) #159

Open
opened 2026-10-28 15:16:03 +08:00 by Claude · 8 comments
Collaborator

来自 #141(上游同步第九轮)的乙批。#141 甲批九项已在 staging(a614895a),在等你真机验收。

要搬的两项

项 上游提交 上游测试在我们这边 用户能看到的变化
B1 分盘 Drekkana 第 22 号与 Sarpa 范围 50847e57 test_varga_bphs.py 3 败 14 过;test_sarpa_drekkana_precision.py 4 败 2 过(我们 Sarpa 范围 5 段,书上 3 段) D3 里「Sarpa Drekkana」标记会变,个别盘的第 22 号 Drekkana 会变
B2 Narayana 小运强度口径贯通 6859b263 3 败(我们的 Narayana 边界函数不收强度口径参数) Narayana 小运在星盘页、报告、当前运势三处改用同一条强弱规则,个别盘小运顺序会变

为什么要你定

这两项改的 scripts/varga.py、scripts/narayana_dasha.py 在「生时校正」冻结清单里。冻结的意思是:校正打分用的代码一个字节都不许变,变了校正回放会直接拒绝运行,除非重新冻结。

  • 第八轮(#80)也碰到同样情况,当时你同意了「校正 20 条 + 900 条回放分数逐条相同,就重新冻结」(79f6ac52)。
  • #137 这次选择了不碰冻结文件,把校正那一侧「留给产品决定」。
  • 所以这单不能由我自己决定改冻结文件。

选项

  • A(推荐):照第八轮先例。改这两个文件,跑校正 20 条 + 900 条;分数逐条相同才重新冻结为 upstream_sync9b_<日期>。只要有一条分数变了,就停下回来问你,不重新冻结。
  • B:不搬。两处保持现在的值,在能力对照表里标「已知与上游不一致,未搬」。代价是 D3 Sarpa 和 Narayana 小运继续和书、上游不一致。
  • C:只搬 B2(Narayana),不搬 B1(分盘)。B1 改的是分盘的基础映射,校正读分盘,变动面更大;B2 只是把已选的强度口径传下去。

你回复选项字母即可(如「A」)。选好后我写任务书交给 Grok。

前置:#141 甲批(已合入 staging)。

来自 #141(上游同步第九轮)的乙批。#141 甲批九项已在 staging(`a614895a`),在等你真机验收。 ## 要搬的两项 | 项 | 上游提交 | 上游测试在我们这边 | 用户能看到的变化 | | --- | --- | --- | --- | | B1 分盘 Drekkana 第 22 号与 Sarpa 范围 | `50847e57` | `test_varga_bphs.py` 3 败 14 过;`test_sarpa_drekkana_precision.py` 4 败 2 过(我们 Sarpa 范围 5 段,书上 3 段) | D3 里「Sarpa Drekkana」标记会变,个别盘的第 22 号 Drekkana 会变 | | B2 Narayana 小运强度口径贯通 | `6859b263` | 3 败(我们的 Narayana 边界函数不收强度口径参数) | Narayana 小运在星盘页、报告、当前运势三处改用同一条强弱规则,个别盘小运顺序会变 | ## 为什么要你定 这两项改的 `scripts/varga.py`、`scripts/narayana_dasha.py` 在「生时校正」冻结清单里。冻结的意思是:校正打分用的代码一个字节都不许变,变了校正回放会直接拒绝运行,除非重新冻结。 - 第八轮(#80)也碰到同样情况,当时你同意了「校正 20 条 + 900 条回放分数逐条相同,就重新冻结」(`79f6ac52`)。 - #137 这次选择了不碰冻结文件,把校正那一侧「留给产品决定」。 - 所以这单不能由我自己决定改冻结文件。 ## 选项 - **A(推荐)**:照第八轮先例。改这两个文件,跑校正 20 条 + 900 条;**分数逐条相同**才重新冻结为 `upstream_sync9b_<日期>`。只要有一条分数变了,就停下回来问你,不重新冻结。 - **B**:不搬。两处保持现在的值,在能力对照表里标「已知与上游不一致,未搬」。代价是 D3 Sarpa 和 Narayana 小运继续和书、上游不一致。 - **C**:只搬 B2(Narayana),不搬 B1(分盘)。B1 改的是分盘的基础映射,校正读分盘,变动面更大;B2 只是把已选的强度口径传下去。 你回复选项字母即可(如「A」)。选好后我写任务书交给 Grok。 前置:#141 甲批(已合入 staging)。
Claude added the agent/试点agent/需拍板 labels 2026-10-28 15:16:06 +08:00
Author
Collaborator

@jesse 乙批需要你定一件事:能不能改「生时校正」冻结着的两个文件。选项和推荐都写在正文里,回一个字母就行。

<!-- agent:claude escalate --> @jesse 乙批需要你定一件事:能不能改「生时校正」冻结着的两个文件。选项和推荐都写在正文里,回一个字母就行。
jesse added agent/待规划 and removed agent/需拍板 labels 2026-10-28 15:27:45 +08:00
Owner

同意 A

同意 A
Claude added agent/规划中 and removed agent/待规划 labels 2026-10-28 15:43:37 +08:00
Author
Collaborator

收到 A。分盘那一项(B1)的任务书写好了,交给 Grok;Narayana 那一项(B2)我先更正一下,需要你再看一眼。

B1 分盘 Sarpa / 第 22 号 Drekkana(这次做)

改什么 依据 你能看到的变化
Sarpa Drekkana 从 3 段补成 5 段 Raman 书上是五段 部分盘会多出 Sarpa 标记
第 22 号 Drekkana 改成 D3 的第 8 宫 《Crux of Vedic Astrology》p.329 这个敏感点的星座会变

生时校正不读这两个函数,所以校正分数应当不变;按你选的 A,20 条 + 900 条逐条相同才重新冻结,不同就停下来问你。

B2 Narayana 小运强度(更正):我在正文里写的「个别盘小运顺序会变」写错了。写任务书时核实发现:上游这一处只是把「选哪套强弱规则」这个设置往下传;而那几套可选规则是上游 9 月底一次大提交里加的,我们从来没搬过。我们现在只有一套默认规则,传下去也没有任何变化。

所以 B2 真要做,等于先搬一整套「可选的 Narayana 强弱规则」——用户默认看不到差别,除非以后在界面上让人选。我的建议是先不做,在能力对照表里记一笔。你要做的话回「B2 做」,我另开一单。

  • 任务书:docs/tasks/TASK-upstream-sync9b-20261028.md(分支 codex/upstream-sync9b-20261028 第一个提交 22432208)
  • 真机清单:docs/testing/upstream-sync9b-20261028.md
<!-- agent:claude plan brief=docs/tasks/TASK-upstream-sync9b-20261028.md branch=codex/upstream-sync9b-20261028 base=12eb7018ecfb35c3bec0c25bd74efd6ba9a65816 --> **收到 A。分盘那一项(B1)的任务书写好了,交给 Grok;Narayana 那一项(B2)我先更正一下,需要你再看一眼。** **B1 分盘 Sarpa / 第 22 号 Drekkana(这次做)** | 改什么 | 依据 | 你能看到的变化 | | --- | --- | --- | | Sarpa Drekkana 从 3 段补成 5 段 | Raman 书上是五段 | 部分盘会多出 Sarpa 标记 | | 第 22 号 Drekkana 改成 D3 的第 8 宫 | 《Crux of Vedic Astrology》p.329 | 这个敏感点的星座会变 | 生时校正不读这两个函数,所以校正分数应当不变;按你选的 A,20 条 + 900 条逐条相同才重新冻结,不同就停下来问你。 **B2 Narayana 小运强度(更正)**:我在正文里写的「个别盘小运顺序会变」**写错了**。写任务书时核实发现:上游这一处只是把「选哪套强弱规则」这个设置往下传;而那几套可选规则是上游 9 月底一次大提交里加的,我们从来没搬过。我们现在只有一套默认规则,传下去也没有任何变化。 所以 B2 真要做,等于先搬一整套「可选的 Narayana 强弱规则」——用户默认看不到差别,除非以后在界面上让人选。我的建议是**先不做**,在能力对照表里记一笔。你要做的话回「B2 做」,我另开一单。 - 任务书:`docs/tasks/TASK-upstream-sync9b-20261028.md`(分支 `codex/upstream-sync9b-20261028` 第一个提交 `22432208`) - 真机清单:`docs/testing/upstream-sync9b-20261028.md`
Claude added agent/待执行 and removed agent/规划中 labels 2026-10-28 15:46:50 +08:00
Grok added the agent/执行中 label 2026-10-28 16:00:45 +08:00
Collaborator

乙批做完了:Sarpa 补成书上五段,第 22 号 Drekkana 改成 D3 第 8 宫。校正 20 条和 900 个报时窗口逐条没变。B2 按你的决定没做。

用户会看到的变化:一部分盘的 Sarpa 标记会多出「巨蟹第 3 段、天蝎第 2 段」;正好落在 10 度边界上的盘不再划到上一段。第 22 号 Drekkana 的算法也改了,但报告里暂时看不到差别——完整解读的敏感点表目前根本没有写这个点(这是我方既有缺口,本单没有顺手接线,也不把它说成「已计算」)。

检查 命令 结果数字
上游两个测试文件 pytest tests/test_upstream_sync9b_* 23 过
分盘测试一起 再加 tests/test_varga_bphs.py 39 过
任务书写的 -k "sarpa or drekkana or special" 同一条 选中 0 条(-k 只匹配测试名);改用真实测试名 -k sensitive_point_modules:1 过、34 未选
密封校正 20 条 scripts/research/sealed_holdout_rerun.py 20 条、8 个字段不一致 0;指标相同;相对更老档案仍是 8 条变化
报时窗口 900 条 scripts/research/reported_offset_sweep.py --json 900 条、逐字段不一致 0;汇总与加宽几何相同;仍是 581 条变化
冻结契约测试 tests/test_sealed_holdout_contract_freshness.py 9 过
其余分盘测试 pytest tests/test_varga*.py 53 过、9 败;9 条全在 test_varga_vedastro_mode.py,我在基线提交的临时工作树上复跑也是同样 9 败,与本单无关

偏离(两处,都写进进度):

  1. 任务书要求「先不冻结跑出结果再比」,实际做不到:varga.py 在冻结记录的扩展身份里,拿旧记录回放会在打分前被身份闸门拦下。改成先建一份仓库内的临时记录、回放、与上一份逐条比,全部相同后才写正式记录(ERR-110 的老做法),临时记录已删除。
  2. 改了前端一个测试文件里的报告路径(rectification-confirmation-gate.test.ts):合同当前指针挪到新报告,不改它就会红。只改路径与三栏注释,没动前端产品代码。

旧的四份记录逐字节保留;新记录是 …upstream_sync9b_2026_10_28.{freeze.json,json} 两份。

进度:docs/tasks/PROGRESS-upstream-sync9b-20261028.md。Bug 历史:BUG-1494(Sarpa)、BUG-1495(第 22 号)。

<!-- agent:grok report branch=codex/upstream-sync9b-20261028 sha=5c5f333d4d93fb691c10790988d3d4c986ac1bd3 --> **乙批做完了:Sarpa 补成书上五段,第 22 号 Drekkana 改成 D3 第 8 宫。校正 20 条和 900 个报时窗口逐条没变。B2 按你的决定没做。** 用户会看到的变化:一部分盘的 Sarpa 标记会多出「巨蟹第 3 段、天蝎第 2 段」;正好落在 10 度边界上的盘不再划到上一段。第 22 号 Drekkana 的算法也改了,但报告里暂时看不到差别——完整解读的敏感点表目前根本没有写这个点(这是我方既有缺口,本单没有顺手接线,也不把它说成「已计算」)。 | 检查 | 命令 | 结果数字 | | --- | --- | --- | | 上游两个测试文件 | `pytest tests/test_upstream_sync9b_*` | 23 过 | | 分盘测试一起 | 再加 `tests/test_varga_bphs.py` | 39 过 | | 任务书写的 `-k "sarpa or drekkana or special"` | 同一条 | 选中 0 条(`-k` 只匹配测试名);改用真实测试名 `-k sensitive_point_modules`:1 过、34 未选 | | 密封校正 20 条 | `scripts/research/sealed_holdout_rerun.py` | 20 条、8 个字段不一致 0;指标相同;相对更老档案仍是 8 条变化 | | 报时窗口 900 条 | `scripts/research/reported_offset_sweep.py --json` | 900 条、逐字段不一致 0;汇总与加宽几何相同;仍是 581 条变化 | | 冻结契约测试 | `tests/test_sealed_holdout_contract_freshness.py` | 9 过 | | 其余分盘测试 | `pytest tests/test_varga*.py` | 53 过、9 败;9 条全在 `test_varga_vedastro_mode.py`,我在基线提交的临时工作树上复跑也是同样 9 败,与本单无关 | **偏离(两处,都写进进度)**: 1. 任务书要求「先不冻结跑出结果再比」,实际做不到:`varga.py` 在冻结记录的扩展身份里,拿旧记录回放会在打分前被身份闸门拦下。改成先建一份仓库内的临时记录、回放、与上一份逐条比,全部相同后才写正式记录(ERR-110 的老做法),临时记录已删除。 2. 改了前端一个测试文件里的报告路径(`rectification-confirmation-gate.test.ts`):合同当前指针挪到新报告,不改它就会红。只改路径与三栏注释,没动前端产品代码。 旧的四份记录逐字节保留;新记录是 `…upstream_sync9b_2026_10_28.{freeze.json,json}` 两份。 进度:`docs/tasks/PROGRESS-upstream-sync9b-20261028.md`。Bug 历史:BUG-1494(Sarpa)、BUG-1495(第 22 号)。
Grok added agent/待验收 and removed agent/待执行agent/执行中 labels 2026-10-28 16:26:17 +08:00
Claude added the agent/验收中 label 2026-10-28 16:42:40 +08:00
Author
Collaborator

验收差一行:打回给 Grok(第 1 次)。 分盘计算本身改对了,问题出在一条守门测试被不小心削弱。

检查 结果
分盘改动 和上游、和书一致,只改了点名的三处
相关测试(我这边复跑) 49 条全过
生时校正 20 条 + 900 条 与上次逐条相同,分数没变
旧的冻结记录 一个字节没动
守门测试 有一处被削弱

问题是什么:有一条测试专门防止「冻结记录混进校正打分」,它靠一份清单逐次追加。这次 Grok 本该在清单后面加两条,结果把上一轮(第八轮)的两条换掉了。测试照样通过,但第八轮的记录以后混进去就不会被发现。

让 Grok 做的:把那两条加回去;顺便在前端跑一下改了路径的那个测试文件。

另外,我任务书里写的一条测试筛选命令是错的(选不中任何测试),Grok 自己换成了对的,这一点做得对。

修复单:docs/tasks/TASK-upstream-sync9b-fix-20261028.md(分支 codex/upstream-sync9b-20261028,8015e8ef)。

<!-- agent:claude review sha=5c5f333d4d93fb691c10790988d3d4c986ac1bd3 verdict=fail brief=docs/tasks/TASK-upstream-sync9b-fix-20261028.md branch=codex/upstream-sync9b-20261028 --> **验收差一行:打回给 Grok(第 1 次)。** 分盘计算本身改对了,问题出在一条守门测试被不小心削弱。 | 检查 | 结果 | | --- | --- | | 分盘改动 | 和上游、和书一致,只改了点名的三处 | | 相关测试(我这边复跑) | 49 条全过 | | 生时校正 20 条 + 900 条 | 与上次逐条相同,分数没变 | | 旧的冻结记录 | 一个字节没动 | | 守门测试 | **有一处被削弱** | **问题是什么**:有一条测试专门防止「冻结记录混进校正打分」,它靠一份清单逐次追加。这次 Grok 本该在清单后面加两条,结果把上一轮(第八轮)的两条**换掉**了。测试照样通过,但第八轮的记录以后混进去就不会被发现。 **让 Grok 做的**:把那两条加回去;顺便在前端跑一下改了路径的那个测试文件。 另外,我任务书里写的一条测试筛选命令是错的(选不中任何测试),Grok 自己换成了对的,这一点做得对。 修复单:`docs/tasks/TASK-upstream-sync9b-fix-20261028.md`(分支 `codex/upstream-sync9b-20261028`,`8015e8ef`)。
Claude added agent/待执行 and removed agent/待验收agent/验收中 labels 2026-10-28 16:48:15 +08:00
Grok added the agent/执行中 label 2026-10-28 17:00:48 +08:00
Collaborator

打回的那一条改好了:守门清单现在同时含第八轮和第九轮乙批共 4 条,不再替换。 前端那条路径测试也跑过了。

检查 命令 结果数字
冻结契约测试 .venv\Scripts\python -m pytest tests/test_sealed_holdout_contract_freshness.py 9 过
前端确认门(改了报告路径的那个文件) node node_modules/tsx/dist/cli.mjs --test tests/rectification-confirmation-gate.test.ts 8 条,全过(# pass 8 / # fail 0 / # cancelled 0)
守门清单条目 直接看文件 第八轮 2 条 + 第九轮乙批 2 条,共 4 条

两点说明:工作树里 frontend/node_modules 已经存在,我直接跑了单文件,没有重跑 npm ci(重装会覆盖现有依赖,且不影响这条断言)。计算代码这次没动,所以上游两个测试文件和校正 20 / 900 没有重跑。

错因记在进度里:我上一轮改这份清单时把第八轮两条替换掉了,测试照样通过,但守门从 4 条缩到 2 条;现在已按原注释位置加回,三栏那一行也改成「新增两条、原有全部保留」。

进度:docs/tasks/PROGRESS-upstream-sync9b-20261028.md(新增「第 1 次打回」一节)。

<!-- agent:grok report branch=codex/upstream-sync9b-20261028 sha=cbe665107f97a922e38a34542a7e3c7906f422cc --> **打回的那一条改好了:守门清单现在同时含第八轮和第九轮乙批共 4 条,不再替换。** 前端那条路径测试也跑过了。 | 检查 | 命令 | 结果数字 | | --- | --- | --- | | 冻结契约测试 | `.venv\Scripts\python -m pytest tests/test_sealed_holdout_contract_freshness.py` | 9 过 | | 前端确认门(改了报告路径的那个文件) | `node node_modules/tsx/dist/cli.mjs --test tests/rectification-confirmation-gate.test.ts` | 8 条,全过(`# pass 8 / # fail 0 / # cancelled 0`) | | 守门清单条目 | 直接看文件 | 第八轮 2 条 + 第九轮乙批 2 条,共 4 条 | 两点说明:工作树里 `frontend/node_modules` 已经存在,我直接跑了单文件,没有重跑 `npm ci`(重装会覆盖现有依赖,且不影响这条断言)。计算代码这次没动,所以上游两个测试文件和校正 20 / 900 没有重跑。 错因记在进度里:我上一轮改这份清单时把第八轮两条**替换**掉了,测试照样通过,但守门从 4 条缩到 2 条;现在已按原注释位置加回,三栏那一行也改成「新增两条、原有全部保留」。 进度:`docs/tasks/PROGRESS-upstream-sync9b-20261028.md`(新增「第 1 次打回」一节)。
Grok added agent/待验收 and removed agent/待执行agent/执行中 labels 2026-10-28 17:02:00 +08:00
Claude added the agent/验收中 label 2026-10-28 17:12:54 +08:00
Author
Collaborator

验收通过,已合入 staging(f80f3b75),等自动部署。

检查 结果
打回那一处(守门清单) 改对了:第八轮两条加回,加上这次两条共 4 条
相关测试(合并后又跑一次) 50 条全过
生时校正 20 条 + 900 条 与新冻结记录逐条相同,分数没变——按你选的 A,冻结已更新
Python 全量快速检查 通过
前端 改到的那个测试文件 8 条全过;全量里另有 25 条没过,都是要 Docker / 数据库的测试,本机没有这些环境,staging 门禁会完整跑

中间等了一下:另一单(#145 生时校正新入口)刚推上去时门禁没过,修好以后我才把这单推上去,免得一起卡住。

部署好了我再 @你 看真机清单:docs/testing/upstream-sync9b-20261028.md。

<!-- agent:claude review sha=cbe665107f97a922e38a34542a7e3c7906f422cc verdict=pass staging=f80f3b75f892e9a6451b60ab46fbf01e82ca2761 checklist=docs/testing/upstream-sync9b-20261028.md --> **验收通过,已合入 staging(`f80f3b75`),等自动部署。** | 检查 | 结果 | | --- | --- | | 打回那一处(守门清单) | 改对了:第八轮两条加回,加上这次两条共 4 条 | | 相关测试(合并后又跑一次) | 50 条全过 | | 生时校正 20 条 + 900 条 | 与新冻结记录逐条相同,分数没变——按你选的 A,冻结已更新 | | Python 全量快速检查 | 通过 | | 前端 | 改到的那个测试文件 8 条全过;全量里另有 25 条没过,都是要 Docker / 数据库的测试,本机没有这些环境,staging 门禁会完整跑 | 中间等了一下:另一单(#145 生时校正新入口)刚推上去时门禁没过,修好以后我才把这单推上去,免得一起卡住。 部署好了我再 @你 看真机清单:`docs/testing/upstream-sync9b-20261028.md`。
Claude added agent/部署中 and removed agent/待验收agent/验收中 labels 2026-10-28 17:53:47 +08:00
Author
Collaborator

已部署到 staging(f80f3b75),@jesse 可以真机验收了。 门禁、迁移、部署全部成功;登录页正常,未登录访问账户接口被拒绝(401)。

真机清单:docs/testing/upstream-sync9b-20261028.md。

# 看哪里 应该看到
1 完整报告的特殊点 / 敏感点表 Sarpa Drekkana 行正常;部分盘会多出 Sarpa 标记(巨蟹第 3 段、天蝎第 2 段)
2 同一张盘 不报错、没有空白
3 走一次生时校正到出结果 和以前一样能走完(打分没有变)

说明:第 22 号 Drekkana 的算法也改对了,但报告里目前没有显示这个点(之前就没接上),所以这次看不到差别,不用找。

注意:现在 staging 上已经叠了另一单(#146–#148 生时校正界面)在部署,走查第 3 条时看到的校正界面变化来自那一单,不是这单。

<!-- agent:claude deployed sha=f80f3b75f892e9a6451b60ab46fbf01e82ca2761 --> **已部署到 staging(`f80f3b75`),@jesse 可以真机验收了。** 门禁、迁移、部署全部成功;登录页正常,未登录访问账户接口被拒绝(401)。 真机清单:`docs/testing/upstream-sync9b-20261028.md`。 | # | 看哪里 | 应该看到 | | --- | --- | --- | | 1 | 完整报告的特殊点 / 敏感点表 | Sarpa Drekkana 行正常;部分盘会多出 Sarpa 标记(巨蟹第 3 段、天蝎第 2 段) | | 2 | 同一张盘 | 不报错、没有空白 | | 3 | 走一次生时校正到出结果 | 和以前一样能走完(打分没有变) | 说明:第 22 号 Drekkana 的算法也改对了,但报告里目前没有显示这个点(之前就没接上),所以这次看不到差别,不用找。 注意:现在 staging 上已经叠了另一单(#146–#148 生时校正界面)在部署,走查第 3 条时看到的校正界面变化来自那一单,不是这单。
Claude added agent/待真机 and removed agent/部署中 labels 2026-10-28 18:32:14 +08:00
Sign in to join this conversation.
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: root/Jyotisha#159