# 12 键差归因（Mac 侧回执 → 研究侧 REQUEST「请给 1 键 + 11 键方向」）

## 0 一句话

对端要的 12 键差（11「仅重跑有」+ 1「仅重建版有」）**已定案：100% 由 0913 的 adj_factor 修准造成**，
不是代码路径差、不是成分名单差。隔离实验：把池日线换成修准前快照（`_adjfactor_repair_backup/`，0913 15:05），
跑**同一套代码路径**（`grid_or`/`ideal_engine`/`plot_ideal_top10` 在 88438d5 与 HEAD 间逐字节相同），
**复现出重建版 88438d5 的键集合**：0824 恰 6 键、0826 恰 10 键且含 000505.SZ；换回修准后数据则复现 5786 键。

## 1 「仅重建版有」的那 1 个键

**000505.SZ / buy_date=20260826 / zz2000 / tb=20260825**

- 记录版 88438d5^ 无；重建版 88438d5 与现行 HEAD baseline 有；修准后重跑无。
- 修准前树上**复现存在**（0826 的 10 键之一）⇒ 属"被修准抹掉的边缘键"。

## 2 那 11 个键的方向

**记录版和重建版都没有它们**，修准前树上也**全部缺席**；只在修准后成立。并非"仅重跑有 vs 记录版"。
全部 buy_date=**20260824**、tb=**20260821**；池分布 zz1000 4（000506/000603/002045/301550）、zz2000 7。
余量（m_min 中位 ~6.1e-03，最小 5.5e-04）与修准幅度同阶 ⇒ 边缘键。逐键余量见 `diff_keys.csv`。

## 3 机制（量级对齐）

修准把 adj_factor 从"每日抖动"平化为 4 位小数常量。修准前同股相邻日因子相对漂移实测：
000505.SZ 最大 **3.170e-04**、601616.SH **1.466e-04**、000506.SZ **1.497e-05**；
12 只全部出现在 0913 adj_factor 修准清单（1505/1514 两轮）的 0818~0828 窗口内。
hfq=raw×factor 进链 ⇒ 1e-4~3e-4 的因子抖动足以翻转 m_min∈[5.5e-4, 7.4e-2] 的边缘键。

排除项：pre_close/pct_chg 修准清单对这 12 只 **0 命中**；members.pkl 自 0909 未变。
口径更正（研究侧 §3 纠正）：**本端**三个 helper（`grid_or`/`ideal_engine`/`plot_ideal_top10`）在 88438d5 与 HEAD 两世代间逐字节相同
⇒ 排除"同机两世代的代码路径差"。**跨机并不字节相同**（对端 `code/` 四文件与本端 main 分别差 148/68/38/20 行，差异在取价助手/列结构/守卫等管线层）；
跨机同构性由更强证据支撑：交易集逐键相同（5786/5786，含 tb 0 不一致）+ 池×交易日缓存表逐格相同（n_sig 0 行不一致、avg_ret 最大 3.553e-14）。

## 4 键集合对账（本端实跑）

| 集合 | 键数 |
|---|---|
| 修准后重跑（现行） | **5786** |
| 修准前重跑（隔离实验） | 5764 |
| 重建版 88438d5 | 5776 |
| 记录版 88438d5^ | 5837 |

修准后 vs 修准前：共有 5756 / 仅后 30 / 仅前 8（净 +22；其中 0824 +11、0826 −1）。
修准前重跑 vs 重建版：共有 5757 / 仅前 7 / 仅重建版 19 ⇒ 重建版 ≈ 修准前世代产物，但**不是纯重跑**
（另有 19/7 键差来自其近端行混合与去重前状态，与本次 12 键无关）。
修准后 vs 重建版：共有 5775 / 仅后 **11** / 仅重建版 **1** —— 与对端数字逐项吻合。

## 5 对同构性验收的含义

- 两端 baseline 历史区同构的前提是**同时**基于修准后数据重算；重建版 5776 键属修准前世代，直接弃用。
- 11/1 键不是悬案，是修准的确定性后果。**压到 0 的办法是两端都用修准后数据重跑**，
  不是靠容差吸收 —— 1e-2 容差只能吸收数值漂移，吸收不了键集合的增删。
- 这条同时支持本端早前的判断：`0.5% + rho≥0.999` 双容差只适用于"同一新口径的两个实现之间"。

## 6 交付物（`patches/keyset_diff_v2_20260914/`）

- `keys_post.csv` / `keys_pre.csv`：修准后/前全量键（code,pool,buy_date,tb）供逐键 diff
- `diff_keys.csv`：差集归属 + 余量；`diff_by_date.csv`：逐日差；`report.md`：本报告
- 复跑脚本：`code/chk_keyset_diff.py`（差集+余量）、`code/chk_key_fragility.py`（余量定义）、
  `code/chk_keyset_iso_prerepair.py --mk/--run`（本隔离实验，可复现）
