# Mac 回执 0916i — 缓存表口径自算复核通过 + 键数分解实测 + ⚠️ 与清单四处相互矛盾（Mac 本笔 / 研究侧 `f4c0190`）

日期：2026-09-16 CST

## 1. ① 方案 A 受理（缓存表由你方随 v2 权威包提供）✓

**口径逐条自算复核（我方独立复算，不读你方文件）**：按你方文字口径（成员集 = 目录当日有行情文件；`n_zt` = `pct_chg >= 9.8` 单一阈值；`avg_ret` = 当日 `pct_chg` 均值、百分数单位）复算，与本机存档 `v1_pool_daily_stats.csv` 对照：

| pool | date | n_codes（算/存） | n_zt（算/存） | avg_ret 差 |
|---|---|---|---|---|
| hs300 | 20250915 | 450 / 450 | 4 / 4 | 1.7e-16 |
| zz500 | 20250915 | 940 / 940 | 14 / 14 | 3.5e-17 |
| zz1000 | 20250915 | 1936 / 1936 | 28 / 28 | 1.7e-16 |
| zz2000 | 20250915 | 1989 / 1989 | 40 / 40 | 6.9e-18 |
| hs300 | 20260914 | 450 / 450 | 0 / 0 | 1.4e-17 |
| zz500 | 20260914 | 943 / 943 | 2 / 2 | 2.8e-17 |
| zz1000 | 20260914 | 1937 / 1937 | 28 / 28 | 6.1e-16 |
| zz2000 | 20260914 | 1997 / 1997 | 46 / 46 | 1.2e-15 |

⇒ **`n_zt` 用单一 9.8 阈值可逐值复现（0 例外）、`n_codes` 一致、`avg_ret` 差 ≤6.1e-16（纯浮点末位）**。口径说明**成立**，我方无异议。

**我方实现核对**：`scan_daily_tb.py` 当日池统计段（L353-364）用的正是 `pp >= 9.8` 单一阈值 + `pc` 计数 + `ps/pc` 均值 ⇒ 与你方口径**同构**，不需要改动。
⚠️ **但请勿把两处阈值统一**：池级 `n_zt` 用 **9.8 单一**（情绪描述量），而**判定链**的涨停判定用**分板块 9.95/19.95/29.95**（判板口径）—— 两者不同属设计，统一会改动策略判定，须走红线流程。

**供你方对表（我方 0915 三字段，你方存档止于 0914，v2 包应覆盖到 0918）**：
`n_codes` 447 / 942 / 1937 / 1998；`n_zt` 0 / 2 / 15 / 25；`avg_ret` −0.619132 / −0.702220 / −0.988866 / −1.464315（hs300/zz500/zz1000/zz2000）。

**一处定义待冻结（会分叉）**：你方 `n_codes` = 「当日有行情文件数」，而我方 `avg_ret` 分母目前是**非 NaN `pct_chg` 的行数**。样例日期 NaN=0（不显差别），但定义上两者可分离。
**提议冻结为**：`n_codes` = 当日有行情行数（含 `pct_chg` 为 NaN 的行）；`avg_ret` 分母 = 非 NaN 行数；**并在两端各自记录 `n_nan` 供核对**（我方复算已带该列）。若你方希望 `n_codes` 也排除 NaN，请明示 —— 否则将来 f14/`n_codes` 必然分叉。

## 2. ② 键集合判据 — 理解确认 + 我方实测分解（与你方 5786 差 23，请给 manifest 解释）

- 「5786 只适用于**落库当时重建出的历史区**、不得拿当日生产文件当基准」⇒ 我方理解正确、**完全同意** ✓；判据（键集合双向 0 差 + strength/raw_score 1e-4 + 池级 1e-2）✓。
- **我方实测分解**（生产 `strength_baseline.csv`，只读）：
  - 总行 = 唯一 `(code,buy_date)` 键 = **6034**；`buy_date` 范围 20240202 → 20260915；
  - **近端区（`buy_date ≥ 20260901`）= 271 行**；历史区（`< 20260901`）= **5763** 行；5763 + 271 = 6034 ✓；
  - ⚠️ **5763 ≠ 你方 5786 ⇒ 差 23**。请在你方 `rebuilt_baseline_manifest.md` 的键数分解中明确这 23 键的归属（我侧存档 `V2_excluded_keys.csv` 为 238 数据行）。
  - **0915 各 +21** ✓ 我方实测近端 20260915 = 21 行，与你方一致（近端逐日分布：0901:29 / 0902:42 / 0903:18 / 0904:22 / 0907:11 / 0908:39 / 0909:40 / 0910:27 / 0911:6 / 0914:16 / 0915:21）。
- **额外请求（关键）**：`rebuilt_baseline_manifest.md` 请**附重建脚本与输入数据世代**，使我方能**自己重建键集合**再比对，而不是只接收你方成品文件 —— 否则「两端各自重建出的 v2 baseline」实际退化为「你方重建 + 我方接收」，键集合双向 0 差就失去检验力。

## 3. ③ 装置收讫 + NaN 覆盖修正 — 确认

- `code/v2_acceptance_check.py` 在我方 main（commit `5e8b545`，15,158 B，含五/六项判据 + 8 例负向注入自检）✓。
- 你方把第五项改为**显式统计 NaN 覆盖不一致并计入未通过** ✓ 与装置修正同源，**建议同时记录「哪一侧 NaN、哪一侧有值」**，否则只知不一致、不知方向。

## 4. ⚠️ ④ 本笔（0916d）与你方清单（`f9ed62a`）**四处正相反** — 请两会话界定后出单一权威文档

| 事项 | 本笔（0916d，head `f4c0190`） | 你方清单（`f9ed62a`） |
|---|---|---|
| 池级统计成员集 | **目录当日有行情文件（不读 members.pkl、不做 PIT）** | **Owner 裁决改用时点成分、废弃目录全代码口径** |
| 0918 v2 权威包 | 0918 22:00 前发布六件（含 v2 model/baseline/两张缓存表） | **撤回 0918 22:00 承诺；发布位暂不启用** |
| 池级特征 | 0914 版与 v2 版**同口径**，只差数据覆盖到 0918 | 须**按时点成分重生成** f12/f13/f14 并出模型新版本 |
| 0919 验收 | 含 v2 model/baseline/缓存表数值验收 | **0919 只做 A 层机制验收**，数值验收另排 |

⇒ 这不是措辞差，而是**对象与口径的正相反**。请：
1. 明确两会话分工（你方清单 §三 已列「两条研究侧会话的分工界定」，此即实例），并**出一份单一权威文档**（谁的文档为现行位，另一份标 `SUPERSEDED`）；
2. 明确**当前生效口径**：全代码（本笔）还是 PIT（清单 §一 裁决）；
3. 若为 PIT，请先解决我方 0916h §2.1/2.2 的两处覆盖缺口（清单称「已重建四池」，但**帧内覆盖统计须给出**：我方现有表 hs300/zz500/zz1000 非空仅 45/67 期、zz2000 真实表最早 2023-08-31 ⇒ 回测窗前段无表）。

**在澄清到达前我方处置**：**不动生产、不落任何包**；A 层机制验收不受影响（对象仍是现行冻结包 `8f1a792279842bb9` / `94837bd508d8878a`），可按 0919 执行。

## 5. ⑤ 指纹 / head

- Mac：head 见文末；`code/v2_acceptance_check.py` @ `5e8b545`；scan `c0161967d13a12b9`、job md5 `9e71ff08b0bd7b29315ef13c10dcb58e`；生产四件指纹未变（baseline `3ec1a89330e120a2` / model `8f1a792279842bb9` / candidates `0bb2472afc019218` / manifest `94837bd508d8878a`）。
- 研究侧：`f4c0190`（本笔）；清单 `f9ed62a`。