# Mac 回执 0915-c — 现行 model 复核通过 + 两项约定确认 + 缺陷实例双向复现（Mac 待提交 / 研究侧 `c9d0db6`）

日期：2026-09-15

## 1. 你方现行 model 自洽性 —— 我方独立复核通过（前一条待核项关闭）

跑你方脚本 `patches/verify_candidate_reproducibility_20260915.py`（取 `patches/research_live_20260915/` 三件到我方临时目录，不落产线）：

- `strength_model.json` = **`5365bd3870ffbfbb`**，255894 字节 ✓（与声明一致）
- `scan_today_candidates.json` = **`e2f4bb11e71da708`** ✓
- 复算输出：`model: pools n={'hs300': 185, 'zz500': 315, 'zz1000': 1183, 'zz2000': 4191}`；
  **12/12 逐只 Δ = 0.00e+00**，最大 |Δstrength| = **0.000e+00**（raw 差 ≤5.6e-17，浮点末位）。

⇒ 我方 0915/0915-b 中「对端现行 model 无法独立验证」的保留**撤销**：你方现行 model 自洽成立，我方 0915 的 (B) 结论确系**读错位次（档案位）**。

## 2. 两项约定确认

- **(a) `model_sha256` = 全量 64 hex** ✓。我方 b6e2ef9 落地即 `hashlib.sha256(...).hexdigest()`（实测候选 JSON 内长度 **64**），**无需你方截断对齐**。
- **(b) `model_version` 取值集合** = `v1-record`（记录版世代，当前）/ `data-v2`（0919 生效世代）✓ **同意**。
  我方落地：唯一构建器 `build_strength_model.py` 写入该键（常量 `MODEL_VERSION`，可用 `ZT_MODEL_VERSION` 覆写，切换日只改一处），
  并用**唯一构建器重跑**把生产 model 落成新键：

  | 项 | 值 |
  |---|---|
  | 旧 sha | `adcc7173bd5bbe07`（无 `model_version` 键） |
  | 新 sha | **`bd09433f5fdf8f19`**（`model_version='v1-record'`，255… 字节） |
  | 数值改动 | **零** —— weights 逐键相同、`n_trades` 6034→6034、四池 `percentiles` 与 `raw_scores` **逐元素相同**（脚本内断言，不符即回滚） |

  过渡态说明：**0915 的候选 JSON 里 `model_version='unversioned'`**（那是当日 model 尚无该键时的产物，**不回改**）；**0916 起**记 `v1-record`。

## 3. 你方 ③ 的缺陷 —— 我方独立复现（另一实例，供冻结 rebuild 的批准依据）

沙盒法（`cp -al` 整树 + 三个会被写的文件实体化）：先删掉沙盒 baseline 里 20260915 的 **21 行**（模拟「今日尚未追加」），再跑 scan 20260915：

| 时点 | 沙盒 model sha | 说明 |
|---|---|---|
| 运行前（= 候选 JSON 记录的 load 时值） | `adcc7173bd5bbe07` | 无 `model_version` |
| 运行后（末尾 rebuild 覆盖后） | **`bd09433f5fdf8f19`** | `model_version='v1-record'` |

⇒ 候选 JSON 记录的 load 时 sha **≠** 该次运行结束后的磁盘 sha —— **与你方实例（`5365bd…` → `8f1a7922…`）同构**。
生产三文件全程字节未变（沙盒隔离）。

**附带一条确定性证据**：沙盒运行后 sha `bd09433f5fdf8f19` 与产线「唯一构建器重跑」得到的 sha **逐字节相同**
⇒ 同 baseline（6034 行）+ 同构建器 = 模型字节可复现（这既是冻结 rebuild 的可行性依据，也是幂等证据）。

## 4. 幂等复核

- 我方：本轮沙盒与产线重跑模型 sha 一致（见 §3）；候选 n=12 / ≥85=1 / 24 字段；生产 baseline `3ec1a89330e120a2`、candidates `0bb2472afc019218` 未变。
- 你方 5874→5874 行 / 0 键差 / strength 0.000e+00：收讫，无异议。

## 5. 待 Owner 批项（不变）

**扫描期冻结 rebuild**（请求 2）：改动已就绪 —— 移除 `scan_daily_tb.py` 两处 rebuild、起手校验 `model_manifest.json` sha256 并与 `set(weights)==set(FCOLS)` 守卫并列、不符即 `SystemExit` 拒扫。
你方已同步上报；我方亦已上报 Owner。**批准后同日落地 + 互给 diff 与幂等证明**。

## 6. 指纹 / head

- Mac（本笔）：`code/build_strength_model.py` 加 `MODEL_VERSION`；`backtest_zt_full/strength_model.json` = **`bd09433f5fdf8f19`**；
  `code/scan_daily_tb.py`（b6e2ef9）候选 JSON 顶层加 `model_version`/`model_sha256`；台账 v6。
- 研究侧：head `c9d0db6`；现行 model `5365bd3870ffbfbb`（已复核自洽）；候选 `e2f4bb11e71da708`。