# PROGRESS · 上游同步第八轮(2026-10-18) 十项计算修正都在分支 `codex/upstream-sync8-20261017`,每项一个提交。校正打分的 20 条封存回放和 900 条偏移回放,与改代码之前逐条相同。冻结身份测试有 3 项失败,因为任务书要求改的三个文件就在冻结清单里。没有重新冻结,也没有改冻结记录。这一项需要产品决定:按分数相同验收,还是把冻结身份失败当成未通过。 ## 基线 任务书写的基线是 `53608d8b`。开工时 `origin/staging` 已到 `e7bf60c1f`(文档提交,给 #83 加状态板一行)。本分支从 `e7bf60c1f` 拉出。 上游参照是 `codex/upstream-notice-20261016` 的 `caf1ed4e3`。没有整文件覆盖。 ## 提交 | 项 | 提交 | BUG | 上游 | | --- | --- | --- | --- | | T1 第一大运小运 | `68762ccec` | BUG-1380 | `8643bc9a` | | T2 星宿边界 | `d11ee6f0d` | BUG-1381 | `3c2dad95`、`8643bc9a`、`9e04f0db` 只取 `lon_to_nakshatra` | | T3 Sandhi | `5be864a8e` | BUG-1382 | `3c2dad95` | | T7 KP 边界 | `b5eb72343` | BUG-1383 | `8eec9a54` | | T4 Pinda | `e8a7f3ac2` | BUG-1384 | `30b43643` | | T5 Bhava Bala | `6cbae4ce2` | BUG-1385 | `a4d4a249` | | T6 Argala | `aa87c0f12` | BUG-1386 | `e7301feb`、`86935c0a`、`4f1536f2` | | T9 Saham 例外弧 | `2f8263b6a` | BUG-1387 | `ce9fed15` | | T10 日出 | `0bd254cf1` | BUG-1388 | `9f9f16b3` 只取 `gulika.py`;`872eaecf` 只取 `saham_daynight.py` | | T8 Avastha | `83c97a897` | BUG-1389 | `e628118d`、`7d545039`、`f75a6e77`、`ac565836` | ## 校正回放 改代码前的结果在本机临时目录,不入库。改完后跳过冻结哈希检查再跑同一套打分,只比 trials: | 回放 | 条数 | 与改前 | | --- | --- | --- | | `sealed_holdout_rerun.py` | 20 | 相同 | | `reported_offset_sweep.py` | 900 | 相同 | 直接跑这两个脚本会在出结果前退出,原因是 `frozen_record_mismatch`。变了的冻结文件只有三个:`scripts/ashtakavarga.py`、`scripts/dasha_analyzer.py`、`scripts/narayana_dasha.py`。这三份正是 T2、T4、T6 要改的。没有写新的 freeze 文件。 `tests/test_sealed_holdout_contract_freshness.py`:3 失败,其余通过。失败的是 `test_contract_tracks_actual_current_scorer_and_dataset_audit`、`test_frozen_record_matches_dataset_scorer_and_evaluator_bytes`、`test_changed_frozen_identity_fails_before_any_replay`。隐私标记测试通过。 ## 定向测试 | 检查 | 结果 | | --- | --- | | 星宿、Sandhi、KP、Pinda、Bhava、Argala、Saham、日出、Avastha 的新增与相关旧测试 | 通过 | | KP 20 万随机经度 | 0 处不同 | | 星宿非边界抽样 | 0 处不同 | | 报告事实表 `report-fact-tables.test.ts` | 11 通过 | | 全量 pytest、快速门、前端全量 `npm test` | 未跑,留给验收方 | ## 偏离 - `9e04f0db` 只移植了 `lon_to_nakshatra`。`dasha_analyzer` 的整段时钟改写没有搬,避免改校正打分。 - Sandhi 没有照搬「跳过第一大运起点」。我方第一大运的起点本来就是出生前的真实交界。 - Argala 同数复用已有的 `select_narayana_seed_sign`,给它加了可选的对照星座。没有移植后面的强弱层。 - `determine_daytime` 默认仍是原来的视日出窗口。只有 Saham 昼夜、Gulika、Shayanadi 传入 Hindu rising。Panchanga 和校正调用点没有改。 - 年运快照没有锁住这三条公式 Saham 的旧经度,所以没有改快照数字。 - 本机没有把 `ruff` 装进这次用的虚拟环境,没有跑 ruff。 ## 验收与收尾(Claude,2026-10-18) 验收基于 `44e961ef9`,基线 `e7bf60c1f`。产品同意按打分相同验收、重新冻结,并授权 Claude 直接收尾(分支 `codex/upstream-sync8-finish-20261018`,已合入当时的 `origin/staging`)。 | 检查 | 结果 | | --- | --- | | 封存回放 20 条(Claude 独立重跑) | 与基线逐项相同 | | 偏移回放 900 条(Claude 独立重跑) | 与基线逐项相同 | | 全量 pytest(两棵树并行,逐名对比) | 新增失败只有 8 条冻结身份;`test_vedastro_gateway` 一条并行偶发,单跑通过 | | tsc / lint | 0 错 / 0 error(123 条存量 warning) | 收尾改动: - BUG-1390:极昼极夜出生时整张 Avastha 表消失,改为只有 Shayanadi 标无法计算。 - BUG-1391:英文报告 Deeptadi 并存条件改用英文逗号。 - 重新冻结(ERR-110):标签 `upstream_sync8_2026_10_18`。两份研究脚本的 `FREEZE` / `REPORT`、密封合同当前指针、`tests/test_sealed_holdout_contract_freshness.py` 排除前缀、`frontend/tests/rectification-confirmation-gate.test.ts` 冻结路径,均按三栏改。scoring_perf 四份旧记录逐字节保留。新报告与 scoring_perf 报告的 trials、metrics、summary、historical_comparison 相同(合同更新脚本里有断言)。