Files
Jyotisha/docs/tasks/PROGRESS-upstream-sync9b-20261028.md
T
jesse-uxandGrok (agent loop) cbe665107f test(freeze-guard): keep the sync8 freeze paths in the forbidden list (issue #159)
The sync9b edit replaced the two sync8 entries in
IDENTITY_FORBIDDEN_PREFIXES instead of appending after them, so the guard
covered two records instead of four while still passing. Restore the
sync8 pair under its own comment and keep the sync9b pair after it.

The freshness test passes again (9) and the frontend confirmation-gate
test for the moved sealed report passes (8).

Co-Authored-By: Grok (agent loop)
2026-10-28 17:01:31 +08:00

7.3 KiB
Raw Blame History

PROGRESS · 上游同步第九轮乙批(2026-10-28)

  • 分支:codex/upstream-sync9b-20261028;基线 origin/staging 12eb7018
  • issue:#159(#141 乙批);产品 10-28 选 A:允许改冻结文件 scripts/varga.py
  • 上游:732642856/yinduzhanxing main 50847e57(10-16),按语义移植
  • 结论:B1 两项完成;密封校正 20 条与报时窗口 900 条与上一份记录逐条相同,已按 ERR-110 另存新冻结;B2(Narayana 小运强度口径)按决策记录不做

做了什么

项 上游 BUG 改了什么
T1 Sarpa 五段 + 原始经度判段 50847e57 BUG-1494 SARPA_DREKKANA_SIGNS 由单段号改段号元组;calc_sarpa_drekkana 去掉四舍五入、先取模;definition 改五段
T2 第 22 号 Drekkana 改 D3 第 8 宫 50847e57 BUG-1495 calc_22nd_drekkana 由 +21 改 +7,字段名与序号 22 不变
T4 上游配套文档 50847e57 — 原路径放入 docs/research/sensitive_point_drekkana_count_review_2026_10_14.md
T3 重新冻结 — — 两份新冻结记录 + 两份回放报告(ERR-110),旧记录逐字节保留

生产文件只有 scripts/varga.py 一个;git diff --stat 见下。

与任务书的偏离

  1. 红线 2 的「先不带 --freeze 跑」做不到:scripts/varga.py 在冻结记录的扩展身份里,拿 sync8 的冻结记录回放会在打分前被身份闸门拦下(frozen_record_mismatch:extended_identity)。改成 ERR-110 的做法:仓库内建临时冻结记录 → 回放 → 与 sync8 逐条比 → 全部相同后才写正式记录。临时记录 docs/research/.tmp_sweep_sync9b.freeze.json 用完已删除,未提交。
  2. 报时窗口脚本必须用仓库内路径:报告里写 freeze_record_path(relative_to(ROOT)),所以正式记录直接放 docs/research/;比较轮的临时记录也在仓库内。
  3. 改了前端一个测试文件:frontend/tests/rectification-confirmation-gate.test.ts 写死当前密封报告路径,合同指针一挪就会红。只改这个路径与三栏注释,不动任何产品代码;与第八轮同做法的先例一致。

跑过的命令

检查 命令 结果
上游两个测试文件 .venv\Scripts\python -m pytest tests/test_upstream_sync9b_varga_bphs.py tests/test_upstream_sync9b_sarpa_precision.py -o addopts="" -q 23 passed
既有分盘测试一起 上一行再加 tests/test_varga_bphs.py 39 passed
CLI 敏感点(任务书写 -k "sarpa or drekkana or special") .venv\Scripts\python -m pytest tests/test_cli_smoke.py -k "sarpa or drekkana or special" 0 条被选中(35 deselected,退出码 5);-k 只匹配测试名,改用实际测试名 -k sensitive_point_modules:1 passed、34 deselected
分盘 + CLI 敏感点合并 4 个文件/节点一起跑 40 passed
密封校正 20 条 scripts/research/sealed_holdout_rerun.py(新冻结记录) trial_count 20;8 个字段(true_rank、opaque_true_rank、minute_error、would_confirm、false_confirmation、insufficient_evidence_rejected、candidate_count、event_count)不一致 0;metrics 相同;changed_trial_count 仍是 8
报时窗口 900 条 scripts/research/reported_offset_sweep.py --json(新冻结记录) trial_count 900;trial 全字段不一致 0;summary 与 widening_geometry 相同;changed_trial_count 仍是 581
冻结契约 tests/test_sealed_holdout_contract_freshness.py 9 passed
确认门合同 tests/test_rectification_confirmation_and.py 10 passed
其余分盘测试 pytest tests/test_varga*.py 53 passed、9 failed;9 条全在 test_varga_vedastro_mode.py(D2 起 Ascendant 星座不符)。在基线 12eb7018 的一次性工作树上同样 9 failed,与 Sarpa / 22nd 无关,不算本单
正式记录生成 scripts/research/*.py --freeze 两份 + 回放两份 sealed_holdout_rerun_upstream_sync9b_2026_10_28.{freeze.json,json}、reported_offset_upstream_sync9b_2026_10_28.{freeze.json,json}

Python 快速门、前端 tsc / lint / build、npm test、test:db 没跑:没有改前端产品代码,没有动表。

断言三栏

位置 原值 新值 原因
tests/test_varga_bphs.py::test_22nd_drekkana_counts_forward_from_lagna_drekkana expected = (drekkana_ref(asc_lon) + 21) % 12 固定 3(巨蟹),保留 offset_from_lagna_drekkana == 22 旧断言把「+21」的错口径抄进了测试;换成书上的固定反例(射手 D3 起,第 8 宫为巨蟹)
tests/test_cli_smoke.py::test_full_reading_exposes_sensitive_point_modules definition == "Cancer-2, Scorpio-1, Pisces-3" definition == "Cancer-2, Cancer-3, Scorpio-1, Scorpio-2, Pisces-3" BUG-1494 改的就是这个定义字符串;仍逐字比对,没有放宽
tests/test_sealed_holdout_contract_freshness.py 排除前缀 排除到 upstream_sync8_2026_10_18 新增 upstream_sync9b_2026_10_28 两条,原有条目全部保留 ERR-110 另存新冻结,旧记录留在清单外;第 1 次打回时补回被误删的 sync8 两条
frontend/tests/rectification-confirmation-gate.test.ts 读取与断言路径 …upstream_sync8_2026_10_18.json …upstream_sync9b_2026_10_28.json 合同当前指针移到新报告;注释补第 11 条三栏
scripts/research/sealed_holdout_rerun.py、reported_offset_sweep.py 的 FREEZE / REPORT …upstream_sync8_2026_10_18 …upstream_sync9b_2026_10_28 同上,ERR-110

发现但没改

  • 完整解读的敏感点表没有 drekkana_22nd 的生产者:_calc_sensitive_points 只产 bhrigu_bindu 与 sarpa_drekkana。所以第 22 号 Drekkana 修好后,报告里暂时看不到变化;这是既有接线缺口,本单不接线(也不把「有函数」写成「报告里已计算」)。
  • frontend/tests/fixtures/report-density-fictional-engine.json 里还有两处旧 definition 字符串。它是前端 fixture,本单不改前端产品代码,留给前端轮次或验收方判断。

环境缺口

  • Windows 跑 Python 测试要 PYTHONUTF8=1,否则子进程按 GBK 编码,遇到警告符号会 UnicodeEncodeError,看起来像引擎崩了。
  • 前端测试没跑(任务书不要求,且本单没改前端产品代码)。

第 1 次打回(2026-10-28)

  • 被验 SHA:5c5f333d4d93fb691c10790988d3d4c986ac1bd3;修复单 docs/tasks/TASK-upstream-sync9b-fix-20261028.md
  • 错在哪:改 IDENTITY_FORBIDDEN_PREFIXES 时把第八轮的两条替换掉了,清单从 4 条变成 2 条;测试照样通过,但守门变弱(第八轮的冻结记录混进打分身份也不会再被发现)
  • 改了什么:把第八轮两条加回原来的注释下面,第九轮乙批两条保留 —— 现在清单同时含 sync8 与 sync9b 共 4 条;本文件「断言三栏」对应行改成「新增两条、原有全部保留」
  • 跑过:tests/test_sealed_holdout_contract_freshness.py 9 passed;frontend/tests/rectification-confirmation-gate.test.ts 8 passed(node node_modules/tsx/dist/cli.mjs --test tests/rectification-confirmation-gate.test.ts,工作树里 frontend/node_modules 已存在,没有重跑 npm ci)
  • 没有重跑上游两个测试文件和校正 20 / 900:本次不改计算代码