# 接力入口 · 2026-09-19 00:30

> **压缩后第一动作 = 读本文件**。本文件是**唯一接力入口**；`RESUME-20260918.md` 已过时（其 §2/§5 写于 R4 开工前，行号漂移）。
> **权威执行顺序**：`docs/internal/BATTLE-PLAN-20260917.md`（§7 待拍板 / §8 远期 / §9 issue 批次 / §10 I5 修正）。

---

## 1. 一句话现状

**R4 第 1、2 批已完工冻结；R4-A 边界全部拍板、代码已改但冻结未接线；下一步 = 先修合作方 4 条 issue，再落地 R4-A。**

---

## 2. ★ 接手第一件事（可直接执行）

> **前端重构之前的完整清单见 `PRE-FRONTEND-CHECKLIST-20260919.md`**（含划线依据 / 8 项 / 拍板项 / 执行序 / P0 防丢）。
> **下表是精简版**；两者冲突时以该清单为准（它更新）。

**当前无阻塞项。** 用户已拍板全部边界。按以下顺序推进：

| 序 | 任务 | 依据 | 状态 |
|---|---|---|---|
| **①** | 修 **issue #55–#58** | BATTLE-PLAN **§9** + `ISSUE-55-58-VERIFICATION-20260918.md` | ⬜ 可立即开工 |
| **②** | 落地 **R4-A**（I5 修正） | BATTLE-PLAN **§10** + 本文 §4 | ⚠️ 代码已改、**未接线**、需补备份 |
| ③ | Hermes 遗留问题修复 | 设计稿 §2.1 | ⬜ 打开 `procedurePromotionEnabled` 的前提 |
| ④ | 教训 → 观察型候选 | 设计稿 §2.3 | ⬜ 可检索、不自动晋升 |
| ⑤ | 前端重构（含审批界面 + 首次启动页 + 赞助商/中转站） | BATTLE-PLAN §8 第 5/6 条 | ⬜ 用户届时要求提醒 |

---

## 3. ⚠️ 冻结状态（**接手必读**）

**`lib/l0-extract-pre.js` 已改但未接线，线上行为零变化。**

- 已加：`isRetrievablePre()`（三态一律放行，只挡未知值）、`supersededMarkPre()`、`L0_SUPERSEDED_MARK_PRE_V1`、`buildL0IndexPre` 的**可选** `opts.statusOf` 注入器。
- **`index.js` 完全没有调用它们** ⇒ 死代码 ⇒ 行为不变。
- **冻结备份：`lib/l0-extract-pre.js.bak-20260919-R4A-frozen`**（23871 B）—— ⚠️ **注意**：`*.bak-20260918-R4a` 是 R4 第 1 批时的，**从它还原会连第 1 批的改动一起丢**。
- **验证探针：`artifacts/_probe-r4a.mjs`（33/33 全绿）** —— 含"无 `statusOf` 时逐字节兼容"与"本机 23 条真实笔记零影响"。

> **纪律失误记录**：agent 改码时**跳过了"先备份"**这一步（本仓固定收尾第一项）。接手时若继续动 `l0-extract-pre.js`，**先补备份**。

---

## 4. R4-A 落地要点（I5 修正 · 三态一律返回）

**用户裁定原文**：「这个 reacted **不是过滤掉**……**并不是挡，我感觉是备注**」
+ 「说明现在更正的内容在**哪个哈希值**里面，方便 AI 去搜索」。

| status | 呈现 |
|---|---|
| `current` | 原样（**逐字节向后兼容**） |
| `superseded` | `⚠已作废（已被 mem_<32hex> 取代）` |
| `retracted` | `⚠已撤回（原因：<reason>；更正见 mem_<32hex>）` |

**落地清单**：
1. `index.js:5873` 的 `if (!isCurrentPre(it)) continue` ⇒ 改用 `isRetrievablePre`
   （⚠️ **会撞 `smoke-test-three-layer-pre.mjs:188` 的字面量正则** `/if \(!isCurrentPre\(it\)\) continue/` ⇒ 该断言须同步更新并注明原因）
2. 语义臂 `:6101` 的 `if (!cur(it)) continue` 同样处理（内含**内联兜底谓词** `:6094`，也要改）
3. 输出拼接处附 `supersededMarkPre(rec)` 后缀
4. **注入侧 `isCurrentPre` 保持不变**（`tier-layer-inject-pre.js` 不动 —— 常驻 800 token 不装过时条目）
5. 契约文档 `THREE-LAYER-CONTRACT.md:183` 的 I5 须改写（原为"两处都过滤"⇒ 检索侧改为"标注"）

---

## 5. 已拍板的关键裁定（勿重新讨论）

| # | 裁定 | 出处 |
|---|---|---|
| 1 | `superseded`/`retracted` **一律返回但标记**；`supersededBy` **不算**违反 S10.4 | BATTLE-PLAN §7 第 5/6 项 |
| 2 | **教训**进观察型候选、**可检索、永不自动晋升** | 设计稿 §2.3 |
| 3 | **skill 是相对独立的系统**，晋升成功后**由本插件语义召回注入**（`act.skill` **保持不变**） | 设计稿 §2.4 |
| 4 | `procedurePromotionEnabled:false` 是**有意临时关闭**（Hermes 遗留），**修完自然打开** | 设计稿 §2.1 |
| 5 | issue #55–#58 **留到前端重构之前**一起改 | BATTLE-PLAN §9 |
| 6 | 合作方 `Minervaowl7` 后续会持续提 issue，机制摸熟后提 PR | BATTLE-PLAN §9 |

---

## 6. 铁律（改码前必读）

- **严禁停止/重启 3080 宿主**；严禁无差别杀 node 进程；代码留 pre 线不提交；**改码前先备份**；无 BOM；大文件分块写。
- fail-soft 必须返回**可观察**信号；「源码接线正确 + 诊断齐全 + 回归全绿」**不能**证明功能存在。
- 守卫判据键若同时在 `DEFAULT_CONFIG`，判据必须读**磁盘原文**（已犯两次：M8、M9）。
- **改 `lib/index.js` 前先看既有套件的字面量断言**（import 行、输出行格式、排序表达式），否则假红。
- 每步固定收尾：**备份 → 改码 → `node --check` → 写套件 → 看红 → 变异演示 → SHA256 还原 → 全量回归 → 留痕**。

---

## 7. 陷阱档案（本仓实测，勿重踩）

1. **`pwsh` + `node -e` 会静默吞转义**（`\n` 变字面量）⇒ 带正则/转义/`$` 的验证**必须写成 `.mjs` 文件跑**。
2. **改 import 行会撞契约守卫** ⇒ 新 import **独占一行**，不合并。
3. **`capacityLimit` 对 <500 的值视为脏值回落 24000** ⇒ 测试夹具用 `cap:300` 得假象。
4. **带 `## ` 标题的文件不是"单段"** ⇒ 会被切成空段+日期段。
5. **源码断言会被自己的注释误伤** ⇒ 注释引用旧公式会让 `!SRC.includes(旧公式)` 假红；两词分开断言（`/A/ && /B/`）是假绿，须**同句相邻**。
6. **`memoryAnchorEnabled` / `procedurePromotionEnabled` 默认 `false` 都承载未修依赖** ⇒ 看到"关着的开关"先查是否**故意关的**，别当 bug。
7. **CRLF**：多行变异/替换锚点必须用 `\r\n`。

---

## 8. 全量回归基线

**`PASS 122 / FAIL 0 / TIMEOUT 0`（157.4s）** —— 曲线：L111 → M9 113 → M2.5a 114 → R2-E1 115 → R3 116 → M2.5b 117 → M1 118 → M2lint 119 → R4-1 120 → 锁死 121 → 配额 122。

跑法：`node tools\run-smoke.mjs`
