Files
Jyotisha/docs/tasks/PROGRESS-rectification-engine-memoization-fix-20260915.md
T
jesse-ux 2b7b45657b
Independent Staging Quality Gate / validate (push) Canceled after 5m0s
Independent Staging Quality Gate / publish (push) Canceled after 0s
test(rectification): prove memoization in-process; tolerate golden float drift (BUG-733)
Replace whole-structure golden == with same-process cached vs None fallback equality, plus discrete-strict / measured-tolerance golden comparison. Do not rebuild the golden JSON.
2026-09-16 07:56:56 +08:00

5.9 KiB
Raw Blame History

PROGRESS · 等价 golden 跨机不稳(2026-09-15 / 执行 2026-09-16

  • 执行分支:codex/rectification-engine-memoization-fix-20260915
  • 工作树:.worktrees/rectification-engine-memoization-fix-20260915
  • 任务书:docs/tasks/TASK-rectification-engine-memoization-fix-20260915.md
  • 开工 HEAD = origin/staging = 51a65d92(用户核对时是 7227b1ed,其后合入了 BUG-732
  • BUGBUG-733(复发自 BUG-712;落库时最大号 732

开工前置

结果
git status -sb 第一行 ## codex/rectification-engine-memoization-fix-20260915...origin/staging
HEAD 51a65d92
BUG_HISTORY 最大号 BUG-732。本单预占 BUG-733。读完 BUG-712 / BUG-721
本机 Python 主仓 .venv 是 25 字节指针文件。本 worktree 用 Anaconda 3.11.7 --system-site-packages 建真实 venv,复用 swisseph 20230604,未升级依赖
先复现 golden test_score_candidates_matches_baseline_golden 本机绿。live 与 golden 逐字相同:score 8.6274 / 8.6227 / 8.1701margin_percent 5.3006。验收机上的 1.1e-3 漂移在这台 Windows / Anaconda 3.11.7 上复现不出来——golden 就是同类机器生成的。仍按任务书改比较方式,不调用 write_golden()

未改 docs/tasks/README.md 状态列。未推 staging。未改任何 scripts/ 实现。未改 tests/golden/rectification_engine_memoization_v1.json

做了什么

做法
5.1 新增 test_cached_static_context_matches_uncached_fallback:同一请求、同一进程,A=带四层缓存的 static contextsB=四键置 Nonecompute_event_candidate_rows 输出 ==。调用计数:A 的 calc_shadbala = 0,B = 6(3 候选 × 2 事件)。反向:test_poisoned_static_cache_diverges_from_live_rows 把第一候选的 shadbala_result 换成全零对象,分数从 12.5125 变成 12.6125,断言不再相等
5.2 test_score_candidates_matches_baseline_golden 改成分档比较。整数 / 布尔 / 字符串 / 列表身份严格相等;浮点容差 max(2e-3, 5e-4 * |expected|),注释写明来自实测最大漂移 1.1e-3。反向:score += 1e-2 红;time = "99:99"
5.3 未调用 write_golden()git diff 里该 JSON 无改动
5.4 六份检查结论见下表。同类问题只记录不修
5.5 docs/BUG_HISTORY.md 新增 BUG-733,复发自 BUG-712。证据是 5.1 同进程差分 + 两次反向验证,不是「现在绿了」

5.4 tests/golden/ 检查

文件 全精度浮点整体 == 在哪个测试里比 怎么比
consultation_contract_keypaths_v1.json tests/test_consultation_contract_golden.py 只存 keypath 与 JSON 类型(kind=keypath_types_only)。值不入库。live 是 keypath 超集 + 类型相同
ephemeris_events_raman_20260915_90d.json 无(BUG-712 已改) tests/test_ephemeris_events.py longitude / speed_longitude 量化到 6 位再 ==kind / date / body / 星座字段严格相等。文件里仍存全精度,但测试不再整体 ==
golden_cases.json tests/test_cli_smoke.py::test_full_reading_golden_cases_cover_user_ready_outputtests/run_golden_cases.py 路径非空、模块计数、整数不变量 ashtakavarga_sav_total == 337、日期覆盖。不是把整份引擎浮点输出整体 ==
qizheng_stem_branch_19900409.json 无(比较已量化) tests/test_qizheng_chart_engine.py 离散字段(宫、宿、ketuMode)严格相等;siderealLon / mansionDegreeround(..., 2)文件本身仍存全精度浮点(如 177.94225865978694)。若有人新写 assert result == golden 会变成 BUG-712 同类。本单只记录不修
rectification_engine_memoization_v1.json 本单之前有 tests/test_rectification_engine_memoization.py::test_score_candidates_matches_baseline_golden 改前:candidate_scoresdecision_receipt 整体 ==。改后:离散严格、浮点容差。文件未重建
upstream_sync2/ 无整体浮点 == 见分项 relationship_einstein.jsontest_upstream_sync2_goldens.py 只比键与类型。consultation_marriage_evidence_snapshot.jsonshape。consultation_marriage_1990_fictional.jsontest_relationship_event_class_evidence.py 比离散 Dasha 字符串。pl9_time_system_table.baseline.mdtest_full_reading_conditional_dashas.py 比对 markdown 表行文本(前 5 行 ==),不是 JSON 浮点。pl9_time_system_table.mdpl9_export_timing.json(含 seconds: 8.647没有任何测试读取

同类观察(不修):qizheng golden 文件仍存全精度;ephemeris golden 文件仍存全精度(测试已量化);upstream_sync2/pl9_export_timing.json 是无引用的浮点秒数。

测试

套件 结果
tests/test_rectification_engine_memoization.py 14 passed(原 10 + 新增 4
tests/test_rectification_*.py 186 passed, 0 failed14.42s

命令使用 .\.venv\Scripts\python.exe(任务书写的 .venv/bin/python 在 Windows 不存在)。

未改任何既有断言的期望值。新增 4 条:同进程差分、缓存毒化反向、浮点 1e-2 反向、离散字段反向。原 golden 断言从整体 == 改成分档,不是放宽离散字段。未跑 run_quality_gate.py --profile quick:该 profile 在 pytest 之后会跑 npm test,本机 Windows 缺 tsx PATH(与 BUG-721 进度记录同一缺口),本单未改前端。

CHANGELOG

未改。纯测试比较方式,用户可见打分不变。

偏离

  • 任务书写 .venv/bin/python,本机换成 .\.venv\Scripts\python.exe
  • 本机未能复现验收机上的 golden 红灯(舍入与生成机一致)。仍改比较方式,并保留验收机测到的 1.1e-3 作为容差依据。
  • git push origin HEAD:staging
  • 5.4 按让步只检查并记录,未加仓库级自动扫描守卫。