# 每次 `/localize` 都整包重译，不留翻译记忆

早先有过相反的方向：扫描前把旧包当 `sourcePack`（翻译记忆），只把旧包没覆盖的条目算缺口，
提示词让模型「读旧包、照抄、补新增」，这样第二次起通常只有个位数新文案要翻。
**这个方向撤回了。** 原因不在速度：

- 记忆让同一个语言包里**同时存在两套措辞** —— 上一轮翻的和这一轮翻的。界面上的文风会随「这条是哪一轮
  翻的」而变，而且没有任何机制能把它们收敛回一套。
- 记忆把「谁来合并」推给了模型。模型漏抄一条就静默丢一条译文，不报错、不进任何检查。
- 上一轮的手工修补会被永久带下去：`ARGS["mcp-auth/reconnect"]` 这种错键正是靠记忆活过了两轮。

## 决定

**没有翻译记忆。** 扫描基准固定是空包，候选永远是整包；提示词明确要求：不要读旧文件取值、不要照抄、
不要因为「没变」而跳过、不要和旧文件合并。

- `collectWork(pi)` 不再收 `memory`，固定用 `EMPTY_PACK`。
- `buildTranslatePrompt` 删掉 `memoryFile` 参数与那段「只翻新增」的提示词。
- `test/prompt.mjs` 改成守卫这个方向（禁止再出现 `only new items need translating` / `Reuse the existing pack`）。

## 代价

- 每次 `/localize` 都翻整包（本机 344 条 → 9 批子代理）。这是**故意**换的：措辞只由当前渠道决定，一轮一套。
- `PI_LOCALIZE_KEEP_PACKS` 与「先删包再生成」都不需要了：流程里已经没有删除动作。
- `scanFound` 通知里的数字现在是候选总数，不再代表「新增」。

## 顺带修掉的渠道 bug

原方案用来论证「不要在扩展里做合并」的那个例子已经不存在了：`ARGS` 的 `命令/参数` 归属曾把 `/mcp` 的
补全记成 `mcp-auth/reconnect`。两个根因都在 `lib/plugin-scan.mjs` 修了：

1. `source.slice(at - 400)` 只有一个参数 → 取到**文件末尾**，「最近那个 `registerCommand`」成了两百行以后那条；
2. 「注册助手」没展开：`getArgumentCompletions` 写在 `registerMcpCommand = (name) => registerCommand(name, {…})`
   里，命令名在调用点 `registerMcpCommand("mcp")`。

现在由 `argOwners()` 推命令名、`targetKeyFor()` 写查找键（`ARGS['mcp/reconnect']`），回归在
`test/arg-owner.mjs`。
