Files
Jyotisha/docs/tasks/PROGRESS-rect-scoring-perf-20261013.md
T
jesse-uxandGrok (agent loop) 8e0503f9c0 Speed up rectification scoring without changing results.
Cache work that depends only on the candidate minute, drop unread response fields, and reject windows above 241 candidates before any chart is built. Eleven canonical scenario hashes match 77057a819. Sealed and reported-offset replays match the 2026-10-08 records (changed_trial_count 8 and 581) and are stored as scoring_perf_2026_10_13.

Co-Authored-By: Grok (agent loop)
2026-10-14 02:06:14 +08:00

8.2 KiB
Raw Blame History

校正打分提速进度(2026-10-14)

结论:两小时窗口的打分大约快到原来的 38%,结果不变。11 个场景的规范化输出与基线逐字节相同。密封重跑 20 例的 trials、metrics 与历史比较和 2026-10-08 那份记录逐字节相同,changed_trial_count 仍是 8。报偏移 900 例的核对写在文末。

基线

项 值
任务书基线 77057a819
计划评论里的 base 2994588ad
本分支实际起点 74384be0243b16e7a261c2afdea2ca12bab92285(当时的 origin/staging)
冻结文件相对 77057a819 git diff --stat 为空,所以计时和逐字节对照仍用这份基线

机器:13th Gen Intel Core i5-13400F,16 逻辑处理器,Windows。同一进程里先跑基线 5 次再跑新代码 5 次,取中位数。PYTHONHASHSEED=0。绝对秒数比任务书写的 3.8–4.8 秒高,因为那组数字不是这台机器测的。下面的比例以这次同机对照为准。

同机耗时(5 次中位数)

窗口 候选 基线 现在 相对基线 目标
12:00–12:20 21 0.5359 s 0.3185 s 59% 不慢于基线 +5%
11:45–12:15 31 1.9700 s 0.8696 s 44% —
11:00–13:00 121 10.6181 s 4.0695 s 38% ≤ 45%
全天 block_scan 步长 10 144 6.7187 s 3.8025 s 57% 不慢于基线

121 候选分段(中位数,秒):

段 基线 现在 相对
guided_collect_windows 4.8700 0.6116 13%(目标 ≤ 25%)
merge_transition_proximity 1.7124 0.4497 26%(目标 ≤ 35%)
get_current_narayana_dasha 0.7562 0.0387 探针路径仍会调用,打分循环为 0
derive_functional_benefic_malefic 0.3295 0.0081 一次打分 121 次,每个候选 1 次
build_candidate_static_context 0.9830 1.0625 这里多算了两份缓存,总时间仍下降

121 候选默认响应的规范化字节:基线 2,071,995(响应里带着矩阵),现在 930,631(约 0.89 MB)。目标 ≤ 0.96 MB。

11 个场景 sha256

两边都用 PYTHONHASHSEED=0,sort_keys=True,去掉 column_compare_ms。打分场景打开 include_internal=True。诊断场景另外去掉 candidate_decision_receipt,因为新诊断不再重复那份内部回执。基线工作树是一次性检出 77057a819,比完已删除。

场景 sha256 字节 相同
12:00–12:20 2bc6c777ac4957ce99277649879f7f8ded5c8f246361d73cf18454a3ac7466b0 429250 是
11:45–12:15 f886afac4b27a8a1f36c771bfdf1565e8df1f4f579d19e73288b0549a9544bda 597372 是
11:00–13:00 2d5dcb5cd6e92664bba692d59f75eabdc4b55f822817b7a6f5106c89fd8c8708 2071995 是
23:20–00:40 73aeb9b7a4d0a3a2b5643aff5e2ef779f15e2e765eefc60aa3985b347ca4b9c1 1255752 是
declined relationship+career 9e48c7cf4b21c133bb52b85e73b0ab7891826a0125a5ef428f6a280503585ee8 1082766 是
refresh probes + column times 7c977c19c48448e92a7845225ba04897359f29bbaf92e4ff2c69a83e7b070b1a 932456 是
10:00–13:00 步长 2 e03adc5cd88e4df144186afc88cead358b67db37784717e8331f256507357cdc 1405125 是
block_scan 全天步长 10 38b27ab49744a7a8036017d10e919f2b8b8baa58fd53590e4b0a35d9689eb1e9 394426 是
block_scan 10:00–14:00 步长 5 6c13482afd5b5de9545185b3c92145f40629550556b2f0e83b009e690d933133 129483 是
记忆化测试的公开请求 e0eb1c449a2a42cd081b15af5dece3f97fcffae627ab605d9514b413617964a7 90384 是
diagnostics 11:00–13:00 5a9d9ad7304ac01419ba85b6a24c23d1bc9b00ec1df417a7bb9385ce8dfea83b 456088 是

计数与等价

  • 引导窗口:一次调用里 _context_time ≤ 16 × 候选数。121 与 21 的次数比不超过 (121/21)×1.2。输出与基线函数副本四种形状相同。
  • 换段邻近:一次调用里 _vim_start_dates ≤ 2 × 候选数,_narayana_start_dates ≤ 1 × 候选数。先按年份 1–9999 算全表,再按事件年份过滤。event_probes.py 里这两个函数只在年份落在窗口内时追加,空结果不依赖窗口,所以过滤后的列表与原来在窗口里现算相同。跨午夜矩阵也相同。
  • 功能吉凶:一次 121 候选打分调用 121 次。放在静态上下文顶层,不进 feature,feature_hash 不变。
  • 那罗延子运:打分循环(_candidate_row)里 get_current_narayana_dasha 为 0。0 到 120 岁、步长 0.01 年,缓存查找与现算相同。探针路径 event_probes._score_year 仍不接收这张表,所以整次打分里这个函数不是 0。这是任务书明确不改的偏差。
  • 候选上限:240 和 241 通过;242 和全天步长 1 在排盘前 50 毫秒内拒绝。步长 2、5、10 的产品窗口通过。全天 block_scan 在没给步长时自己改成 10,不触发上限。研究脚本里的回放半径到 120 正好 241,不超限。冻结重跑不经过 score_candidates,上限不影响那 900 例。

超过上限时 HTTP 400,正文含 too_many_candidates。API 入口文件没有改,所以错误码仍是 ERR_BAD_REQUEST。前端把这种 400 当成坏请求,不按服务忙重试。

三栏

位置 原值 新值 原因
tests/test_rectification_engine_memoization.py 缓存键 4 个 6 个,加上功能吉凶和那罗延子运表 BUG-1324
tests/test_rectification_v5_services.py 矩阵断言 默认响应里有矩阵 默认没有;include_internal=True 才有 BUG-1325
同文件回执读取 candidate_decision_receipt decision_receipt BUG-1325
两份研究脚本的 FREEZE / REPORT ephemeris_nutation_2026_10_08 scoring_perf_2026_10_13 BUG-1323~1325 改了冻结身份文件,输出不变,ERR-110 另存新记录
密封合同当前指针 nutation 记录 scoring_perf_2026_10_13;nutation 放进该对象里的 previous_* 同上
tests/test_sealed_holdout_contract_freshness.py 排除前缀 到 nutation 再排除两份新记录 同上
frontend/tests/rectification-confirmation-gate.test.ts 冻结路径 nutation 报告 sealed_holdout_rerun_scoring_perf_2026_10_13.json 同上
tests/test_repo_privacy_markers.py 时钟集合行号 1182、1190 1195、1203 BUG-1325 的三栏注释把原集合下移,钟点没变

冻结核对

标签 scoring_perf_2026_10_13。nutation 四份文件没有改。

密封重跑:trials 规范化 JSON 与 sealed_holdout_rerun_ephemeris_nutation_2026_10_08.json 逐字节相同,metrics 相同,historical_comparison 相同,changed_trial_count 仍是 8。新报告 sha256 25e2e59ecab81b528f0f27369a8638a907ea551f57fdd8572db00fe25a139641。冻结记录 sha256 1ce7f7ac67221e10bb4d176f5e8af9299fbae7586717d83048b7e3c124e43e7c。当前树遗留 12 文件哈希 1c146bf5273edf871d885e9e2e68ee1c8a2f71759b54b4b878f63e771f44197c(active_rectification_event_engine.py 在这 12 个文件里,所以这份哈希变了,输出没变)。

报偏移 900 例:trials 规范化 JSON、summary、historical_comparison 都与 reported_offset_ephemeris_nutation_2026_10_08.json 相同。changed_trial_count 仍是 581。这份报告没有 metrics 键,旧报告也没有。新报告 sha256 9466cf3945a63621104157fb34291cb23205ddb045effa7e70f3c35647516443。冻结记录 sha256 1560f24ffea19116c904272907ff9cce24904960406676f3aada3c8c174cf98a。重跑从 2026-10-13T17:45:36Z 到 2026-10-13T18:02:16Z。

本单不做

  • 探针路径的大运用的是请求日期,并且不接收那罗延子运表。
  • 候选特征快照瘦身要动前端契约。
  • 引导窗口和换段邻近共用同一张大运起点表。

自测

  • tests/test_rect_scoring_perf_20261013.py 与任务书点名的校正测试、tests/test_rectification_*.py(当时尚未改指针的完整性门除外)退出码 0。
  • 指针改完后 tests/test_sealed_holdout_contract_freshness.py 退出码 0。
  • 前端 tsc --noEmit 退出码 0,npm run lint 0 error。rectification-v9-engine-contract.test.ts 18 通过、0 失败、0 取消。rectification-confirmation-gate.test.ts 8 通过、0 失败、0 取消。
  • 没有跑前端全量,也没有跑 Python 快速门。