# TE 产品文档检索插件 · V0.6.18 源码基线回退专项审计报告

- **审计日期**：2026-10-15
- **审计对象**：v0.6.18 源码基线（`extension/` 10 文件）是否彻底回退、无 v0.6.16 残留
- **审计背景**：v0.6.16「历史记录面板」撤回时仅从云端下架、源码未回退，导致 v0.6.17 构建时把废弃面板重新带入线上（用户实测发现）。v0.6.18 完成面板整体移除后，本审计对「源码基线是否回到干净状态」做逐文件取证。
- **审计方式**：与 v0.6.15 发版 staging（`_stage_v0615`，线上已验证的干净基线）逐字节对比 + 剥离内联头后的全量 diff + 残留标识符全树扫描（脚本 `audit_baseline_v0618.py`，输出 `audit_baseline_v0618_out.txt`）
- **审计性质**：只读审计，未改动任何业务代码

---

## 一、审计结论

**✅ v0.6.18 源码基线 = v0.6.15 + v0.6.17 CAD 功能 + 规格全丢保护阀，被撤回的历史面板代码零残留。**

当前基线构成（逐层叠加，无多余部分）：

```
v0.6.15（干净基线）
 + v0.6.17：CAD 多格式筛选 / CAD文件解压 / 规格全丢保护阀（全部保留，应保留）
 + v0.6.18：历史面板移除 + 「最近检索」恢复 v0.6.15 形态（回退项，应回退）
 = 当前源码基线（发版时 bundle 只升版本号，不再有其它变换）
```

---

## 二、逐文件审计结果

| 文件 | 审计方式 | 结果 |
|---|---|---|
| `background.js` | 与 `_stage_v0615` 逐字节对比（cmp） | **一致** ✓（v0.6.16 的 dlRecs/curRec/flushRec/dlRecords 帧全部清除） |
| `popup.css` | 逐字节对比（cmp） | **一致** ✓（v0.6.16 面板样式块 619–725 行已删） |
| `zipcore.js` | 逐字节对比（cmp） | **一致** ✓ |
| `manifest.json` | 与基线 diff | 仅差 description 一行（v0.6.17 精简文案「…CAD文件并下载」），源码 version 保持 0.6.15（发版时由 bundle 升版，设计如此）✓ |
| `popup.js` | 剥离 v0.6.15 发版包的 tecore 内联头后全量 diff | **+150 / -47 行，逐 hunk 全部为 v0.6.17 CAD 改动 + 全丢保护阀**，无任何面板代码 ✓ |
| `popup.html` | 与基线 diff | 仅两处差异：CAD 筛选/解压控件（v0.6.17）+ 一行回退注释（v0.6.18），面板 HTML 零残留 ✓ |
| `tecore.js` | 残留标识符扫描 | 0 命中 ✓（`te_search_history`/`HISTORY_KEY` 为 v0.6.15 已有特性，应存在，实际存在） |

---

## 三、popup.js 全量 diff 逐 hunk 分类

与 v0.6.15 纯源码的 diff 共 13 个 hunk 区块，全部属于以下两类，无第三类：

**① v0.6.17 CAD 功能（保留项）**
- 常量别名区：`UNZIP_FMT_KEY` / `DEFAULT_UNZIP_FMTS` / `CAD_FMT_KEY` / `DEFAULT_CAD_FMTS` / `CAD_TYPES` / `CAD_ZIP_TYPES` / `cadDocAllowed` / `filterDocsByTypes`（tecore 单一数据源）
- 状态区：`CURRENT_UNZIP_FMTS` / `CURRENT_CAD_FMTS` / `CAD_FMT_USER_TOUCHED`
- 事件绑定：主勾选 change 联动 `applyCadLinkage`；`unzip-cad-fmt` / `cad-fmt` 两组 checkbox
- 设置函数：`getUnzipFmts` / `restoreUnzipFmts` / `saveUnzipFmts` / `isUnzipCad` / `getCadFmts` / `applyCadLinkage` / `restoreCadFmts` / `saveCadFmts`（含旧布尔键 `te_unzip_cad` 迁移与 `stp→cad` 主勾选迁移）
- 三入口口径：检索主通道 `filterDocsByTypes`；恢复会话 `cadDocAllowed` 只收窄 CAD；单卡/批量下载 `isUnzipCad`
- 全丢保护阀：`applySpecRecognition` drawing-no 分支 `kept===0 && dropped>0` 保留全部 + `allMissKept`；`specStat.allMiss` 战果双通道提示（检索收尾 / 下载全部）

**② v0.6.18 回退项（应回退）**
- `init` 处三行面板初始化 → 单行 `renderHistory()`（v0.6.15「最近检索」形态，空列表整块隐藏）
- `popup.html` 面板结构替换为 `<h2>最近检索</h2>` + 覆盖/叠加 + `#history-list`

---

## 四、残留标识符全树扫描（24 项，全部 0 命中）

对 `extension/` 全部 .js/.html/.css/.json 扫描以下 v0.6.16 面板专属标识符：

```
recordDlHistory  mergeDlHistory  initHistoryPanel  setHistoryOpen
openDelSplit     closeDelSplit   switchHistTab     clearHistoryOf
openDlFolder     fmtWhen         DL_HISTORY        HIST_TAB
HIST_OPEN        DEL_SPLIT_TIMER dlRecs            dlRecords
curRec           flushRec        history-toggle    hist-tabs
del-group        history-fold    history-badge     te_download_history
```

**结果：24 项全部 0 命中。**

反向验证（v0.6.15 已有特性应存在，实际均在）：`renderHistory`×3 / `saveHistory`×2 / `HISTORY_MAX`×3 / `#history`×3 / `history-list`×1 / `HISTORY_KEY = TECORE.HISTORY_KEY`——与 v0.6.15 基线逐字一致。

---

## 五、staging（发版产物）与源码关系验证

| 文件 | 验证 | 结果 |
|---|---|---|
| `background.js` / `popup.css` / `zipcore.js` | 与源码逐字节对比 | 一致 ✓ |
| `popup.js` | staging = tecore.js 原文 + `/* ===== tecore.js 已内联` 标记行 + popup.js 原文（逐字节精确验证） | 精确成立 ✓ |
| `popup.html` | 与源码仅一处差异（见下） | 符合打包设计 ✓ |
| `manifest.json` | staging version=0.6.18，源码 version=0.6.15；**除 version 外逐字节一致** | ✓ |

**已知无害形态说明**：staging popup.html 中 `<script src="tecore.js"></script>` 被 bundle 替换后残留一个孤立 `</script>`。经核实 **v0.6.15 / v0.6.16 / v0.6.17 / v0.6.18 四届 staging 完全一致**，历届线上版本均如此（浏览器对未配对的闭合标签忽略之），属打包脚本固有形态，非本次污染。

---

## 六、教训固化（撤回铁律）

> **版本撤回若决定永久废弃，必须同步回退源码基线。** 仅回退云端时，废弃代码仍留在源码里，下一次发版会把它重新带入线上——v0.6.17 即因此把 v0.6.16 的历史面板带入。

本轮 v0.6.18 已按铁律执行：移除面板 + 源码回退 + 本审计逐文件取证闭环。后续撤回操作必须包含「源码基线回退 + 基线审计」两步，缺一不发版。

---

## 七、验证体系状态

- `verify_v054.js`：**697 通过 / 0 失败**（第 16 章为 6 项「面板已移除」反断言；第 17 章 CAD 全覆盖；第 31 章全丢保护阀 8 断言）
- `verify_site_v0618.py`：64 URL 全 200 + 130/130 断言（含面板移除反断言、撤回徽章保留、历史 changelog 保留）
- 本审计：`audit_baseline_v0618.py` 全部通过（见上表）

*（本报告为专项补充，与 2026-10-15 的 v0.6.18 发版记录配套。）*
