Files
reverse-skills-max/vendor-new/xbsReverseSkill/web-js-env-patcher/references/code-change-memory.md

5.1 KiB
Raw Blame History

通用代码变更记忆机制

本文件用于复杂网页端补环境 case 中的所有关键代码修改,不只适用于浏览器 API。它覆盖 result/ 源码、src/env/、src/signer/、src/request/、TLS 客户端封装、addon helper、路径处理、异步流程、Cookie 生成、参数生成、入口脚本等任何可能反复修改或回退的工程逻辑。

目标

避免在多轮修复中反复写回旧错误逻辑。每次修改关键源码时,不把“当前报错消失”草率视为无验证范围的固定结论,而是记录:改了什么、为什么改、旧逻辑为什么错、验证了什么、失败方案不能再写回什么、当前验证范围和遗留风险。

触发条件

满足任一条件时必须启用:

  • case 难度较高、对话多轮、或已经出现同一函数 / 同一文件反复修改。
  • 修改 case/result/ 下任何最终交付源码。
  • 修改 signer、request、env、addon helper、TLS、路径、异步流程、Cookie 生成等关键逻辑。
  • 为解决报错而替换一段旧逻辑,存在之后又写回旧逻辑的风险。
  • 用户反馈“你又把之前错的逻辑写回去了”或类似问题。

文件位置

默认维护:

case/notes/代码变更记忆.md

不存在时先创建。可以用脚本初始化:

node scripts/check_change_memory.js --case-dir case --init --markdown

修改前必须做

  1. 读取 case/notes/代码变更记忆.md。
  2. 搜索本次准备修改的文件名、函数名、类名、参数名、错误关键词和相关模块名。
  3. 如果记忆中存在“禁止回退”或“已失败尝试”,先确认本次修改不会写回这些内容。
  4. 如果确实需要覆盖历史结论,必须在新记录中写明新的证据,而不是直接删除旧记录。

修改后必须做

每次关键源码修改后立即追加一条记录。不要等最终总结时再补写。

记录模板

## 变更 001 - 简短标题

- 时间:YYYY-MM-DD HH:mm
- 涉及文件:result/src/env/install-env.js;result/src/signer/index.js
- 涉及函数 / 模块:installNavigator;buildSign
- 当前状态:临时修复 / 当前验证通过 / 已失败 / 被替代 / 稳定基线

### 修改前逻辑

简述旧代码做了什么,不要只写“旧逻辑错误”。

### 问题证据

记录触发错误的命令、堆栈、fixture 差异、日志、RuyiTrace 证据、接口响应或用户反馈。

### 本次修改

说明实际改了哪些代码、哪些文件、哪些函数,不要只写“优化了”。

### 修改理由

解释为什么选择这次改法。只能把“当前验证通过”写成当前状态,不能写成永久正确。

### 已失败尝试

列出已经证明失败或不可靠的方案,包括失败原因。

### 禁止回退

明确以后不要写回什么,例如“不要再把 userAgent 改成实例 data descriptor;除非有新浏览器样本证明该站点只检测实例属性”。

### 验证命令

```bash
node result/final.js
node scripts/compare_fixture.js --fixture case/fixtures/sample.fixture.json --actual case/tmp/node-output.json --field sign --markdown

验证结果

记录通过 / 失败、输出摘要、关键字段差异。

当前验证范围

说明只验证了哪些 fixture、哪些接口、哪些运行环境、哪些 Node 版本或 TLS 客户端。

遗留风险

记录尚未覆盖的检测点、样本不足、环境差异、登录态限制等。


## 状态定义

| 状态 | 含义 |
|---|---|
| 临时修复 | 只解决当前报错或部分样本,不能作为稳定基线 |
| 当前验证通过 | 已通过当前列出的验证范围,但仍可能被新检测推翻 |
| 已失败 | 明确失败,后续不得无证据写回 |
| 被替代 | 旧方案被新方案替换,保留原因和替代依据 |
| 稳定基线 | 经多组样本、最终入口和请求验证通过,仍需记录验证范围 |

## 重要原则

- 不使用无验证范围的绝对结论;使用“当前验证通过”“稳定基线”等有范围的状态。
- 不删除失败记录;失败记录是防止回退的证据。
- 不把当前报错消失等同于真实浏览器一致。
- 不把浏览器 API 规则写死成全局真理;同一 API 的放置位置、描述符和行为必须以目标浏览器样本、RuyiTrace、fixture 和检测证据为准。
- 对与补环境无关的工程错误同样记录,例如路径拼接、异步顺序、请求重试、JSON 序列化、TLS 客户端参数、模块导出等。
- 如果修改涉及安全边界、请求次数、登录态或敏感数据,必须在遗留风险中说明授权范围。

## 交付前检查

交付前至少运行:

```bash
node scripts/check_change_memory.js --case-dir case --markdown

如果本轮修改过关键源码,还要按文件检查:

node scripts/check_change_memory.js --case-dir case --changed result/src/env/install-env.js --require-entry --markdown

检查未通过时,不要交付最终结果;先补齐记忆记录或说明用户明确豁免。