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)
8.2 KiB
校正打分提速进度(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 lint0 error。rectification-v9-engine-contract.test.ts18 通过、0 失败、0 取消。rectification-confirmation-gate.test.ts8 通过、0 失败、0 取消。 - 没有跑前端全量,也没有跑 Python 快速门。