# 23 · 退役产品全库清理清单 v1 > 状态:**in-progress → 高优先级 Waves A1–C 已落地(2026-07-28)** > 日期:2026-07-28 > 目标:把 convex + Weknora + openhub + reasonix + Hermes + ACP + OpenCode + Sidex + Yuxi + legacy_next_compat + soft retirement 残留彻底扫光,像没有存在过一样。 > 优先级:**高**(编译不红、runtime 不暴露、文档不广告)→ **中**(调试残留)→ **低**(历史叙事、死 smoke)。 ## 1. 整体盘点(更新 2026-07-28 执行后) | 品牌 | 产品面残留 | 调试/测试面 | 历史叙事 | 风险 | |---|---|---|---|---| | **Hermes** | seed→`pi`;`HERMES_HOME` 兼容读已删;`AiRuntimeOwner::RustWebPi` | soft-retire smoke 保留 exit 0 | design/old 可留 | **已收** | | **OpenHub / OpenCode** | 无产品入口 | soft-retire smoke | design/old | **低** | | **Reasonix** | seed→`pi` | `.reasonix` 目录忽略保留 | design/old | **已收** | | **ACP** | DB 列 `acp_*` 保留(schema);产品 runtime 无 ACP 宿主 | 极少 | | **中(列名兼容)** | | **next_compat / LEGACY_NEXT** | AppConfig / proxy / documents Next 链已删 | smoke 已去 env | design/done 历史稿 | **已收** | | **convex_retired** | 已扫完 | | | **已完** | | **Weknora / Yuxi / Sidex** | 极少 | | design/old | **低** | ## 2. 本批已执行(A1 → A2 → A3 → B → C) ### A1 · control-plane brand → pi ✅ - sqlite / turso seed:`hermes`/`reasonix` → `pi`,display「我的 Pi」 - 迁移:历史 `agent_id='hermes'` 就地 UPDATE 到 `pi` - fixtures / `turso_store` / `control-plane-dev-seed.js` 字面量中性化 ### A2 · LEGACY_NEXT / documents proxy ✅ - `AppConfig` 删除 `legacy_next_base_url` / `enable_legacy_next_compat` / `compat_next_base_path` - `session` / `gateway` health 与 legacy proxy 删除 - `documents` Next proxy 栈删除 - OnlyOffice 非 local writeback → fail-closed(`onlyoffice_cloud_writeback_unavailable`) - 保留 OnlyOffice **同源 server proxy** 所需 `append_path_and_query` ### A3 · Hermes 命名 / HERMES_HOME ✅ - `AiRuntimeOwner::RustWebHermes` → `RustWebPi` - spike:`open_hermes_page_ai_drawer` → `open_page_ai_drawer` - `agent_profile_home`:仅 `MNOTE_AGENT_HOME` / `~/.mnote-agent`(去掉 `HERMES_HOME` / `~/.hermes`) - audit log:仅 `MNOTE_AGENT_TOOL_AUDIT_LOG` - AGENTS.md:去掉「旧 agent 网关 / OpenCode 代理壳」宣传句 - `.env.all`:删除 `MNOTE_HERMES_API_*` ### B · compat 410 / 文案 / debug ✅ - `/api/ai-agent/run` 继续 **410** `legacy_ai_agent_run_retired`(含 hermes/codex provider 负向合同) - compat 测试去 mock Next 上游,只断言 GONE - debug shell:`MNOTE_WEB_ENABLE_DEBUG_SHELL_ROUTES` 默认 false(边界保持) ### C · smoke / 编译验证 ✅ - 17 个 smoke 去掉 `MNOTE_WEB_*LEGACY_NEXT*` - `task164` 断言改为不出现 `legacy_next_compat` - 死 hermes/opencode smoke 已 soft-retire(Wave 10,保持) - 验证: - `cargo check -p mnote-web --tests` 无 error - `cargo test -p bridge-runtime --lib` 116 passed - `cargo test -p control-plane --lib` 37 passed - `cargo test -p mnote-web --lib routes::compat` 4 passed ## 3. 仍可后续(非阻塞) | 项 | 说明 | |---|---| | ACP 列名 `acp_*` | 控制面 schema 兼容;改列需独立迁移批 | | actor 占位拒绝 `hermes` | `mnote_tools` 仍拒绝 actor=`hermes` 占位 id(负向安全) | | `mnote-hermes-tool` source | document-session 历史 external write source 兼容读 | | `.reasonix` / `.opencode` 目录忽略 | local_folder 扫描忽略,非产品入口 | | design/old 历史稿 | 不阻塞产品面 | | 测试函数名 `hermes_tools_*` 前缀 | 历史命名,schema 已中性化 | ## 4. 验收 Checklist - [x] `cargo check -p mnote-web --tests` 无 error - [x] `cargo test -p bridge-runtime --lib` 全通过 - [x] `cargo test -p control-plane --lib` 全通过 - [x] AGENTS.md 不再把退役 agent 宿主写成可选主链 - [x] smoke 不再注入 `MNOTE_WEB_*LEGACY_NEXT*` - [x] 产品 profile home 不再读 `HERMES_HOME` / `~/.hermes` - [ ] (可选)ARCHITECTURE.md 全文扫 brand 叙事 - [ ] (可选)ACP 列 rename 迁移批 ## 5. 工具回扫命令 ```bash rg -n "legacy_next|LEGACY_NEXT|HERMES_HOME|RustWebHermes|enable_legacy_next" rust scripts --glob '!**/target/**' rg -n "MNOTE_WEB_ENABLE_LEGACY_NEXT|MNOTE_HERMES" scripts .env.all cargo check -p mnote-web --tests ```